G76W%VGUdGlMIC0gYSBzaW1wbGUgV2ViLWJhc2VkIGZpbGUgbWFuYWdlcg0KICogQ29weXJpZ2h0IChDKSAyMDEyICBEci5BYURpTCA8a2VzLWtiekBob3RtYWlsLmNvbT4NCiovDQoNCkVSUk9SX1JFUE9SVElORygwKTsNCkBTRVRfVElNRV9MSU1JVCgwKTsNCkBTRVRfTUFHSUNfUVVPVEVTX1JVTlRJTUUoMCk7DQoNCi8qIFlvdXIgbGFuZ3VhZ2U6DQogKiAnZW4nIC0gRW5nbGlzaA0KICogJ2RlJyAtIEdlcm1hbg0KICogJ2ZyJyAtIEZyZW5jaA0KICogJ2l0JyAtIEl0YWxpYW4NCiAqICdubCcgLSBEdXRjaA0KICogJ3NlJyAtIFN3ZWRpc2gNCiAqICdzcCcgLSBTcGFuaXNoDQogKiAnZGsnIC0gRGFuaXNoDQogKiAndHInIC0gVHVya2lzaA0KICogJ2NzJyAtIEN6ZWNoDQogKiAnYXV0bycgLSBhdXRvc2VsZWN0DQogKi8NCg0KJGxhbmcgPSAnYXV0byc7DQoNCi8qIENoYXJzZXQgb2Ygb3V0cHV0Og0KICogcG9zc2libGUgdmFsdWVzIGFyZSBkZXNjcmliZWQgaW4gdGhlIGNoYXJzZXQgdGFibGUgYXQNCiAqIGh0dHA6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaHRtbGVudGl0aWVzLnBocA0KICogJ2F1dG8nIC0gdXNlIHRoZSBzYW1lIGNoYXJzZXQgYXMgdGhlIHdvcmRzIG9mIG15IGxhbmd1YWdlIGFyZSBlbmNvZGVkDQogKi8NCg0KJHNpdGVfY2hhcnNldCA9ICdhdXRvJzsNCg0KLyogSG9tZWRpcjoNCiAqIEZvciBleGFtcGxlOiAnLi8nIC0gdGhlIHNjcmlwdCdzIGRpcmVjdG9yeQ0KICovDQoNCiRob21lZGlyID0gJy4vJzsNCg0KLyoNClNpemUgb2YgdGhlIGVkaXQgdGV4dGFyZWENCiovDQoNCiRlZGl0Y29scyA9IDgwOw0KJGVkaXRyb3dzID0gMjU7DQoNCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAqIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gKHJlbW92ZSAjIHRvIGVuYWJsZSkNCiAqLw0KDQovKiBQZXJtaXNzaW9uIG9mIGNyZWF0ZWQgZGlyZWN0b3JpZXM6DQogKiBGb3IgZXhhbXBsZTogMDcwNSB3b3VsZCBiZSAnZHJ3eC0tLXIteCcuDQogKi8NCiMgJGRpcnBlcm1pc3Npb24gPSAwNzA1Ow0KDQovKiBQZXJtaXNzaW9uIG9mIGNyZWF0ZWQgZmlsZXM6DQogKiBGb3IgZXhhbXBsZTogMDYwNCB3b3VsZCBiZSAnLXJ3LS0tLXItLScuDQogKi8NCiMgJGZpbGVwZXJtaXNzaW9uID0gMDYwNDsNCg0KLyoNCkZpbGVuYW1lcyByZWxhdGVkIHRvIHRoZSBhcGFjaGUgd2ViIHNlcnZlcjoNCiovDQoNCiRodGFjY2VzcyA9ICcuaHRhY2Nlc3MnOw0KJGh0cGFzc3dkID0gJy5odHBhc3N3ZCc7DQoNCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCg0KaWYgKEdFVF9NQUdJQ19RVU9URVNfR1BDKCkpIHsNCglhcnJheV93YWxrKCRfR0VULCAnc3RyaXAnKTsNCglhcnJheV93YWxrKCRfUE9TVCwgJ3N0cmlwJyk7DQoJYXJyYXlfd2FsaygkX1JFUVVFU1QsICdzdHJpcCcpOw0KfQ0KDQppZiAoYXJyYXlfa2V5X2V4aXN0cygnaW1hZ2UnLCAkX0dFVCkpIHsNCgloZWFkZXIoJ0NvbnRlbnQtVHlwZTogaW1hZ2UvZ2lmJyk7DQoJZGllKGdldGltYWdlKCRfR0VUWydpbWFnZSddKSk7DQp9DQoNCmlmICghZnVuY3Rpb25fZXhpc3RzKCdsc3RhdCcpKSB7DQoJZnVuY3Rpb24gbHN0YXQgKCRmaWxlbmFtZSkgew0KCQlyZXR1cm4gc3RhdCgkZmlsZW5hbWUpOw0KCX0NCn0NCg0KJGRlbGltID0gRElSRUNUT1JZX1NFUEFSQVRPUjsNCg0KaWYgKGZ1bmN0aW9uX2V4aXN0cygncGhwX3VuYW1lJykpIHsNCgkkd2luID0gKHN0cnRvdXBwZXIoc3Vic3RyKFBIUF9PUywgMCwgMykpID09PSAnV0lOJykgPyB0cnVlIDogZmFsc2U7DQp9IGVsc2Ugew0KCSR3aW4gPSAoJGRlbGltID09ICdcXCcpID8gdHJ1ZSA6IGZhbHNlOw0KfQ0KDQppZiAoIWVtcHR5KCRfU0VSVkVSWydQQVRIX1RSQU5TTEFURUQnXSkpIHsNCgkkc2NyaXB0ZGlyID0gZGlybmFtZSgkX1NFUlZFUlsnUEFUSF9UUkFOU0xBVEVEJ10pOw0KfSBlbHNlaWYgKCFlbXB0eSgkX1NFUlZFUlsnU0NSSVBUX0ZJTEVOQU1FJ10pKSB7DQoJJHNjcmlwdGRpciA9IGRpcm5hbWUoJF9TRVJWRVJbJ1NDUklQVF9GSUxFTkFNRSddKTsNCn0gZWxzZWlmIChmdW5jdGlvbl9leGlzdHMoJ2dldGN3ZCcpKSB7DQoJJHNjcmlwdGRpciA9IGdldGN3ZCgpOw0KfSBlbHNlIHsNCgkkc2NyaXB0ZGlyID0gJy4nOw0KfQ0KJGhvbWVkaXIgPSByZWxhdGl2ZTJhYnNvbHV0ZSgkaG9tZWRpciwgJHNjcmlwdGRpcik7DQoNCiRkaXIgPSAoYXJyYXlfa2V5X2V4aXN0cygnZGlyJywgJF9SRVFVRVNUKSkgPyAkX1JFUVVFU1RbJ2RpciddIDogJGhvbWVkaXI7DQoNCmlmIChhcnJheV9rZXlfZXhpc3RzKCdvbGRkaXInLCAkX1BPU1QpICYmICFwYXRoX2lzX3JlbGF0aXZlKCRfUE9TVFsnb2xkZGlyJ10pKSB7DQoJJGRpciA9IHJlbGF0aXZlMmFic29sdXRlKCRkaXIsICRfUE9TVFsnb2xkZGlyJ10pOw0KfQ0KDQokZGlyZWN0b3J5ID0gc2ltcGxpZnlfcGF0aChhZGRzbGFzaCgkZGlyKSk7DQoNCiRmaWxlcyA9IGFycmF5KCk7DQokYWN0aW9uID0gJyc7DQppZiAoIWVtcHR5KCRfUE9TVFsnc3VibWl0X2FsbCddKSkgew0KCSRhY3Rpb24gPSAkX1BPU1RbJ2FjdGlvbl9hbGwnXTsNCglmb3IgKCRpID0gMDsgJGkgPCAkX1BPU1RbJ251bSddOyAkaSsrKSB7DQoJCWlmIChhcnJheV9rZXlfZXhpc3RzKCJjaGVja2VkJGkiLCAkX1BPU1QpICYmICRfUE9TVFsiY2hlY2tlZCRpIl0gPT0gJ3RydWUnKSB7DQoJCQkkZmlsZXNbXSA9ICRfUE9TVFsiZmlsZSRpIl07DQoJCX0NCgl9DQp9IGVsc2VpZiAoIWVtcHR5KCRfUkVRVUVTVFsnYWN0aW9uJ10pKSB7DQoJJGFjdGlvbiA9ICRfUkVRVUVTVFsnYWN0aW9uJ107DQoJJGZpbGVzW10gPSByZWxhdGl2ZTJhYnNvbHV0ZSgkX1JFUVVFU1RbJ2ZpbGUnXSwgJGRpcmVjdG9yeSk7DQp9IGVsc2VpZiAoIWVtcHR5KCRfUE9TVFsnc3VibWl0X3VwbG9hZCddKSAmJiAhZW1wdHkoJF9GSUxFU1sndXBsb2FkJ11bJ25hbWUnXSkpIHsNCgkkZmlsZXNbXSA9ICRfRklMRVNbJ3VwbG9hZCddOw0KCSRhY3Rpb24gPSAndXBsb2FkJzsNCn0gZWxzZWlmIChhcnJheV9rZXlfZXhpc3RzKCdudW0nLCAkX1BPU1QpKSB7DQoJZm9yICgkaSA9IDA7ICRpIDwgJF9QT1NUWydudW0nXTsgJGkrKykgew0KCQlpZiAoYXJyYXlfa2V5X2V4aXN0cygic3VibWl0JGkiLCAkX1BPU1QpKSBicmVhazsNCgl9DQoJaWYgKCRpIDwgJF9QT1NUWydudW0nXSkgew0KCQkkYWN0aW9uID0gJF9QT1NUWyJhY3Rpb24kaSJdOw0KCQkkZmlsZXNbXSA9ICRfUE9TVFsiZmlsZSRpIl07DQoJfQ0KfQ0KaWYgKGVtcHR5KCRhY3Rpb24pICYmICghZW1wdHkoJF9QT1NUWydzdWJtaXRfY3JlYXRlJ10pIHx8IChhcnJheV9rZXlfZXhpc3RzKCdmb2N1cycsICRfUE9TVCkgJiYgJF9QT1NUWydmb2N1cyddID09ICdjcmVhdGUnKSkgJiYgIWVtcHR5KCRfUE9TVFsnY3JlYXRlX25hbWUnXSkpIHsNCgkkZmlsZXNbXSA9IHJlbGF0aXZlMmFic29sdXRlKCRfUE9TVFsnY3JlYXRlX25hbWUnXSwgJGRpcmVjdG9yeSk7DQoJc3dpdGNoICgkX1BPU1RbJ2NyZWF0ZV90eXBlJ10pIHsNCgljYXNlICdkaXJlY3RvcnknOg0KCQkkYWN0aW9uID0gJ2NyZWF0ZV9kaXJlY3RvcnknOw0KCQlicmVhazsNCgljYXNlICdmaWxlJzoNCgkJJGFjdGlvbiA9ICdjcmVhdGVfZmlsZSc7DQoJfQ0KfQ0KaWYgKHNpemVvZigkZmlsZXMpID09IDApICRhY3Rpb24gPSAnJzsgZWxzZSAkZmlsZSA9IHJlc2V0KCRmaWxlcyk7DQoNCmlmICgkbGFuZyA9PSAnYXV0bycpIHsNCglpZiAoYXJyYXlfa2V5X2V4aXN0cygnSFRUUF9BQ0NFUFRfTEFOR1VBR0UnLCAkX1NFUlZFUikgJiYgc3RybGVuKCRfU0VSVkVSWydIVFRQX0FDQ0VQVF9MQU5HVUFHRSddKSA+PSAyKSB7DQoJCSRsYW5nID0gc3Vic3RyKCRfU0VSVkVSWydIVFRQX0FDQ0VQVF9MQU5HVUFHRSddLCAwLCAyKTsNCgl9IGVsc2Ugew0KCQkkbGFuZyA9ICdlbic7DQoJfQ0KfQ0KDQokd29yZHMgPSBnZXR3b3JkcygkbGFuZyk7DQoNCmlmICgkc2l0ZV9jaGFyc2V0ID09ICdhdXRvJykgew0KCSRzaXRlX2NoYXJzZXQgPSAkd29yZF9jaGFyc2V0Ow0KfQ0KDQokY29scyA9ICgkd2luKSA/IDQgOiA3Ow0KDQppZiAoIWlzc2V0KCRkaXJwZXJtaXNzaW9uKSkgew0KCSRkaXJwZXJtaXNzaW9uID0gKGZ1bmN0aW9uX2V4aXN0cygndW1hc2snKSkgPyAoMDc3NyAmIH51bWFzaygpKSA6IDA3NTU7DQp9DQppZiAoIWlzc2V0KCRmaWxlcGVybWlzc2lvbikpIHsNCgkkZmlsZXBlcm1pc3Npb24gPSAoZnVuY3Rpb25fZXhpc3RzKCd1bWFzaycpKSA/ICgwNjY2ICYgfnVtYXNrKCkpIDogMDY0NDsNCn0NCg0KaWYgKCFlbXB0eSgkX1NFUlZFUlsnU0NSSVBUX05BTUUnXSkpIHsNCgkkc2VsZiA9IGh0bWwoYmFzZW5hbWUoJF9TRVJWRVJbJ1NDUklQVF9OQU1FJ10pKTsNCn0gZWxzZWlmICghZW1wdHkoJF9TRVJWRVJbJ1BIUF9TRUxGJ10pKSB7DQoJJHNlbGYgPSBodG1sKGJhc2VuYW1lKCRfU0VSVkVSWydQSFBfU0VMRiddKSk7DQp9IGVsc2Ugew0KCSRzZWxmID0gJyc7DQp9DQoNCmlmICghZW1wdHkoJF9TRVJWRVJbJ1NFUlZFUl9TT0ZUV0FSRSddKSkgew0KCWlmIChzdHJ0b2xvd2VyKHN1YnN0cigkX1NFUlZFUlsnU0VSVkVSX1NPRlRXQVJFJ10sIDAsIDYpKSA9PSAnYXBhY2hlJykgew0KCQkkYXBhY2hlID0gdHJ1ZTsNCgl9IGVsc2Ugew0KCQkkYXBhY2hlID0gZmFsc2U7DQoJfQ0KfSBlbHNlIHsNCgkkYXBhY2hlID0gdHJ1ZTsNCn0NCg0Kc3dpdGNoICgkYWN0aW9uKSB7DQoNCmNhc2UgJ3ZpZXcnOg0KDQoJaWYgKGlzX3NjcmlwdCgkZmlsZSkpIHsNCg0KLyogaGlnaGxpZ2h0X2ZpbGUgaXMgYSBtZXNzISAqLw0KDQoJCW9iX3N0YXJ0KCk7DQoJCWhpZ2hsaWdodF9maWxlKCRmaWxlKTsNCgkJJHNyYyA9IGVyZWdfcmVwbGFjZSgnPGZvbnQgY29sb3I9IihbXiJdKikiPicsICc8c3BhbiBzdHlsZT0iY29sb3I6IFwxIj4nLCBvYl9nZXRfY29udGVudHMoKSk7DQoJCSRzcmMgPSBzdHJfcmVwbGFjZShhcnJheSgnPC9mb250PicsICJcciIsICJcbiIpLCBhcnJheSgnPC9zcGFuPicsICcnLCAnJyksICRzcmMpOw0KCQlvYl9lbmRfY2xlYW4oKTsNCg0KCQlodG1sX2hlYWRlcigpOw0KCQllY2hvICc8aDIgc3R5bGU9InRleHQtYWxpZ246IGxlZnQ7IG1hcmdpbi1ib3R0b206IDAiPicgLiBodG1sKCRmaWxlKSAuICc8L2gyPg0KPGhyIC8+DQo8dGFibGU+DQo8dHI+DQo8dGQgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0OyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyBjb2xvcjogZ3JheTsgcGFkZGluZy1yaWdodDogM3B0OyBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCBncmF5Ij4NCjxwcmUgc3R5bGU9Im1hcmdpbi10b3A6IDAiPjxjb2RlPic7DQoNCgkJZm9yICgkaSA9IDE7ICRpIDw9IHNpemVvZihmaWxlKCRmaWxlKSk7ICRpKyspIGVjaG8gIiRpXG4iOw0KDQoJCWVjaG8gJzwvY29kZT48L3ByZT4NCjwvdGQ+DQo8dGQgc3R5bGU9InRleHQtYWxpZ246IGxlZnQ7IHZlcnRpY2FsLWFsaWduOiB0b3A7IHBhZGRpbmctbGVmdDogM3B0Ij4NCjxwcmUgc3R5bGU9Im1hcmdpbi10b3A6IDAiPicgLiAkc3JjIC4gJzwvcHJlPg0KPC90ZD4NCjwvdHI+DQo8L3RhYmxlPg0KDQonOw0KDQoJCWh0bWxfZm9vdGVyKCk7DQoNCgl9IGVsc2Ugew0KDQoJCWhlYWRlcignQ29udGVudC1UeXBlOiAnIC4gZ2V0bWltZXR5cGUoJGZpbGUpKTsNCgkJaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uOiBmaWxlbmFtZT0nIC4gYmFzZW5hbWUoJGZpbGUpKTsNCg0KCQlyZWFkZmlsZSgkZmlsZSk7DQoNCgl9DQoNCglicmVhazsNCg0KY2FzZSAnZG93bmxvYWQnOg0KDQoJaGVhZGVyKCdQcmFnbWE6IHB1YmxpYycpOw0KCWhlYWRlcignRXhwaXJlczogMCcpOw0KCWhlYWRlcignQ2FjaGUtQ29udHJvbDogbXVzdC1yZXZhbGlkYXRlLCBwb3N0LWNoZWNrPTAsIHByZS1jaGVjaz0wJyk7DQoJaGVhZGVyKCdDb250ZW50LVR5cGU6ICcgLiBnZXRtaW1ldHlwZSgkZmlsZSkpOw0KCWhlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9JyAuIGJhc2VuYW1lKCRmaWxlKSAuICc7Jyk7DQoJaGVhZGVyKCdDb250ZW50LUxlbmd0aDogJyAuIGZpbGVzaXplKCRmaWxlKSk7DQoNCglyZWFkZmlsZSgkZmlsZSk7DQoNCglicmVhazsNCg0KY2FzZSAndXBsb2FkJzoNCg0KCSRkZXN0ID0gcmVsYXRpdmUyYWJzb2x1dGUoJGZpbGVbJ25hbWUnXSwgJGRpcmVjdG9yeSk7DQoNCglpZiAoQGZpbGVfZXhpc3RzKCRkZXN0KSkgew0KCQlsaXN0aW5nX3BhZ2UoZXJyb3IoJ2FscmVhZHlfZXhpc3RzJywgJGRlc3QpKTsNCgl9IGVsc2VpZiAoQG1vdmVfdXBsb2FkZWRfZmlsZSgkZmlsZVsndG1wX25hbWUnXSwgJGRlc3QpKSB7DQoJCUBjaG1vZCgkZGVzdCwgJGZpbGVwZXJtaXNzaW9uKTsNCgkJbGlzdGluZ19wYWdlKG5vdGljZSgndXBsb2FkZWQnLCAkZmlsZVsnbmFtZSddKSk7DQoJfSBlbHNlIHsNCgkJbGlzdGluZ19wYWdlKGVycm9yKCdub3RfdXBsb2FkZWQnLCAkZmlsZVsnbmFtZSddKSk7DQoJfQ0KDQoJYnJlYWs7DQoNCmNhc2UgJ2NyZWF0ZV9kaXJlY3RvcnknOg0KDQoJaWYgKEBmaWxlX2V4aXN0cygkZmlsZSkpIHsNCgkJbGlzdGluZ19wYWdlKGVycm9yKCdhbHJlYWR5X2V4aXN0cycsICRmaWxlKSk7DQoJfSBlbHNlIHsNCgkJJG9sZCA9IEB1bWFzaygwNzc3ICYgfiRkaXJwZXJtaXNzaW9uKTsNCgkJaWYgKEBta2RpcigkZmlsZSwgJGRpcnBlcm1pc3Npb24pKSB7DQoJCQlsaXN0aW5nX3BhZ2Uobm90aWNlKCdjcmVhdGVkJywgJGZpbGUpKTsNCgkJfSBlbHNlIHsNCgkJCWxpc3RpbmdfcGFnZShlcnJvcignbm90X2NyZWF0ZWQnLCAkZmlsZSkpOw0KCQl9DQoJCUB1bWFzaygkb2xkKTsNCgl9DQoNCglicmVhazsNCg0KY2FzZSAnY3JlYXRlX2ZpbGUnOg0KDQoJaWYgKEBmaWxlX2V4aXN0cygkZmlsZSkpIHsNCgkJbGlzdGluZ19wYWdlKGVycm9yKCdhbHJlYWR5X2V4aXN0cycsICRmaWxlKSk7DQoJfSBlbHNlIHsNCgkJJG9sZCA9IEB1bWFzaygwNzc3ICYgfiRmaWxlcGVybWlzc2lvbik7DQoJCWlmIChAdG91Y2goJGZpbGUpKSB7DQoJCQllZGl0KCRmaWxlKTsNCgkJfSBlbHNlIHsNCgkJCWxpc3RpbmdfcGFnZShlcnJvcignbm90X2NyZWF0ZWQnLCAkZmlsZSkpOw0KCQl9DQoJCUB1bWFzaygkb2xkKTsNCgl9DQoNCglicmVhazsNCg0KY2FzZSAnZXhlY3V0ZSc6DQoNCgljaGRpcihkaXJuYW1lKCRmaWxlKSk7DQoNCgkkb3V0cHV0ID0gYXJyYXkoKTsNCgkkcmV0dmFsID0gMDsNCglleGVjKCdlY2hvICIuLycgLiBiYXNlbmFtZSgkZmlsZSkgLiAnIiB8IC9iaW4vc2gnLCAkb3V0cHV0LCAkcmV0dmFsKTsNCg0KCSRlcnJvciA9ICgkcmV0dmFsID09IDApID8gZmFsc2UgOiB0cnVlOw0KDQoJaWYgKHNpemVvZigkb3V0cHV0KSA9PSAwKSAkb3V0cHV0ID0gYXJyYXkoJzwnIC4gJHdvcmRzWydub19vdXRwdXQnXSAuICc+Jyk7DQoNCglpZiAoJGVycm9yKSB7DQoJCWxpc3RpbmdfcGFnZShlcnJvcignbm90X2V4ZWN1dGVkJywgJGZpbGUsIGltcGxvZGUoIlxuIiwgJG91dHB1dCkpKTsNCgl9IGVsc2Ugew0KCQlsaXN0aW5nX3BhZ2Uobm90aWNlKCdleGVjdXRlZCcsICRmaWxlLCBpbXBsb2RlKCJcbiIsICRvdXRwdXQpKSk7DQoJfQ0KDQoJYnJlYWs7DQoNCmNhc2UgJ2RlbGV0ZSc6DQoNCglpZiAoIWVtcHR5KCRfUE9TVFsnbm8nXSkpIHsNCgkJbGlzdGluZ19wYWdlKCk7DQoJfSBlbHNlaWYgKCFlbXB0eSgkX1BPU1RbJ3llcyddKSkgew0KDQoJCSRmYWlsdXJlID0gYXJyYXkoKTsNCgkJJHN1Y2Nlc3MgPSBhcnJheSgpOw0KDQoJCWZvcmVhY2ggKCRmaWxlcyBhcyAkZmlsZSkgew0KCQkJaWYgKGRlbCgkZmlsZSkpIHsNCgkJCQkkc3VjY2Vzc1tdID0gJGZpbGU7DQoJCQl9IGVsc2Ugew0KCQkJCSRmYWlsdXJlW10gPSAkZmlsZTsNCgkJCX0NCgkJfQ0KDQoJCSRtZXNzYWdlID0gJyc7DQoJCWlmIChzaXplb2YoJGZhaWx1cmUpID4gMCkgew0KCQkJJG1lc3NhZ2UgPSBlcnJvcignbm90X2RlbGV0ZWQnLCBpbXBsb2RlKCJcbiIsICRmYWlsdXJlKSk7DQoJCX0NCgkJaWYgKHNpemVvZigkc3VjY2VzcykgPiAwKSB7DQoJCQkkbWVzc2FnZSAuPSBub3RpY2UoJ2RlbGV0ZWQnLCBpbXBsb2RlKCJcbiIsICRzdWNjZXNzKSk7DQoJCX0NCg0KCQlsaXN0aW5nX3BhZ2UoJG1lc3NhZ2UpOw0KDQoJfSBlbHNlIHsNCg0KCQlodG1sX2hlYWRlcigpOw0KDQoJCWVjaG8gJzxmb3JtIGFjdGlvbj0iJyAuICRzZWxmIC4gJyIgbWV0aG9kPSJwb3N0Ij4NCjx0YWJsZSBjbGFzcz0iZGlhbG9nIj4NCjx0cj4NCjx0ZCBjbGFzcz0iZGlhbG9nIj4NCic7DQoNCgkJcmVxdWVzdF9kdW1wKCk7DQoNCgkJZWNobyAiXHQ8Yj4iIC4gd29yZCgncmVhbGx5X2RlbGV0ZScpIC4gJzwvYj4NCgk8cD4NCic7DQoNCgkJZm9yZWFjaCAoJGZpbGVzIGFzICRmaWxlKSB7DQoJCQllY2hvICJcdCIgLiBodG1sKCRmaWxlKSAuICI8YnIgLz5cbiI7DQoJCX0NCg0KCQllY2hvICcJPC9wPg0KCTxociAvPg0KCTxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9Im5vIiB2YWx1ZT0iJyAuIHdvcmQoJ25vJykgLiAnIiBpZD0icmVkX2J1dHRvbiIgLz4NCgk8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ5ZXMiIHZhbHVlPSInIC4gd29yZCgneWVzJykgLiAnIiBpZD0iZ3JlZW5fYnV0dG9uIiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDUwcHgiIC8+DQo8L3RkPg0KPC90cj4NCjwvdGFibGU+DQo8L2Zvcm0+DQoNCic7DQoNCgkJaHRtbF9mb290ZXIoKTsNCg0KCX0NCg0KCWJyZWFrOw0KDQpjYXNlICdyZW5hbWUnOg0KDQoJaWYgKCFlbXB0eSgkX1BPU1RbJ2Rlc3RpbmF0aW9uJ10pKSB7DQoNCgkJJGRlc3QgPSByZWxhdGl2ZTJhYnNvbHV0ZSgkX1BPU1RbJ2Rlc3RpbmF0aW9uJ10sICRkaXJlY3RvcnkpOw0KDQoJCWlmICghQGZpbGVfZXhpc3RzKCRkZXN0KSAmJiBAcmVuYW1lKCRmaWxlLCAkZGVzdCkpIHsNCgkJCWxpc3RpbmdfcGFnZShub3RpY2UoJ3JlbmFtZWQnLCAkZmlsZSwgJGRlc3QpKTsNCgkJfSBlbHNlIHsNCgkJCWxpc3RpbmdfcGFnZShlcnJvcignbm90X3JlbmFtZWQnLCAkZmlsZSwgJGRlc3QpKTsNCgkJfQ0KDQoJfSBlbHNlIHsNCg0KCQkkbmFtZSA9IGJhc2VuYW1lKCRmaWxlKTsNCg0KCQlodG1sX2hlYWRlcigpOw0KDQoJCWVjaG8gJzxmb3JtIGFjdGlvbj0iJyAuICRzZWxmIC4gJyIgbWV0aG9kPSJwb3N0Ij4NCg0KPHRhYmxlIGNsYXNzPSJkaWFsb2ciPg0KPHRyPg0KPHRkIGNsYXNzPSJkaWFsb2ciPg0KCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdGlvbiIgdmFsdWU9InJlbmFtZSIgLz4NCgk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJmaWxlIiB2YWx1ZT0iJyAuIGh0bWwoJGZpbGUpIC4gJyIgLz4NCgk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkaXIiIHZhbHVlPSInIC4gaHRtbCgkZGlyZWN0b3J5KSAuICciIC8+DQoJPGI+JyAuIHdvcmQoJ3JlbmFtZV9maWxlJykgLiAnPC9iPg0KCTxwPicgLiBodG1sKCRmaWxlKSAuICc8L3A+DQoJPGI+JyAuIHN1YnN0cigkZmlsZSwgMCwgc3RybGVuKCRmaWxlKSAtIHN0cmxlbigkbmFtZSkpIC4gJzwvYj4NCgk8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZGVzdGluYXRpb24iIHNpemU9IicgLiB0ZXh0ZmllbGRzaXplKCRuYW1lKSAuICciIHZhbHVlPSInIC4gaHRtbCgkbmFtZSkgLiAnIiAvPg0KCTxociAvPg0KCTxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSInIC4gd29yZCgncmVuYW1lJykgLiAnIiAvPg0KPC90ZD4NCjwvdHI+DQo8L3RhYmxlPg0KDQo8cD48YSBocmVmPSInIC4gJHNlbGYgLiAnP2Rpcj0nIC4gdXJsZW5jb2RlKCRkaXJlY3RvcnkpIC4gJyI+WyAnIC4gd29yZCgnYmFjaycpIC4gJyBdPC9hPjwvcD4NCg0KPC9mb3JtPg0KDQonOw0KDQoJCWh0bWxfZm9vdGVyKCk7DQoNCgl9DQoNCglicmVhazsNCg0KY2FzZSAnbW92ZSc6DQoNCglpZiAoIWVtcHR5KCRfUE9TVFsnZGVzdGluYXRpb24nXSkpIHsNCg0KCQkkZGVzdCA9IHJlbGF0aXZlMmFic29sdXRlKCRfUE9TVFsnZGVzdGluYXRpb24nXSwgJGRpcmVjdG9yeSk7DQoNCgkJJGZhaWx1cmUgPSBhcnJheSgpOw0KCQkkc3VjY2VzcyA9IGFycmF5KCk7DQoNCgkJZm9yZWFjaCAoJGZpbGVzIGFzICRmaWxlKSB7DQoJCQkkZmlsZW5hbWUgPSBzdWJzdHIoJGZpbGUsIHN0cmxlbigkZGlyZWN0b3J5KSk7DQoJCQkkZCA9ICRkZXN0IC4gJGZpbGVuYW1lOw0KCQkJaWYgKCFAZmlsZV9leGlzdHMoJGQpICYmIEByZW5hbWUoJGZpbGUsICRkKSkgew0KCQkJCSRzdWNjZXNzW10gPSAkZmlsZTsNCgkJCX0gZWxzZSB7DQoJCQkJJGZhaWx1cmVbXSA9ICRmaWxlOw0KCQkJfQ0KCQl9DQoNCgkJJG1lc3NhZ2UgPSAnJzsNCgkJaWYgKHNpemVvZigkZmFpbHVyZSkgPiAwKSB7DQoJCQkkbWVzc2FnZSA9IGVycm9yKCdub3RfbW92ZWQnLCBpbXBsb2RlKCJcbiIsICRmYWlsdXJlKSwgJGRlc3QpOw0KCQl9DQoJCWlmIChzaXplb2YoJHN1Y2Nlc3MpID4gMCkgew0KCQkJJG1lc3NhZ2UgLj0gbm90aWNlKCdtb3ZlZCcsIGltcGxvZGUoIlxuIiwgJHN1Y2Nlc3MpLCAkZGVzdCk7DQoJCX0NCg0KCQlsaXN0aW5nX3BhZ2UoJG1lc3NhZ2UpOw0KDQoJfSBlbHNlIHsNCg0KCQlodG1sX2hlYWRlcigpOw0KDQoJCWVjaG8gJzxmb3JtIGFjdGlvbj0iJyAuICRzZWxmIC4gJyIgbWV0aG9kPSJwb3N0Ij4NCg0KPHRhYmxlIGNsYXNzPSJkaWFsb2ciPg0KPHRyPg0KPHRkIGNsYXNzPSJkaWFsb2ciPg0KJzsNCg0KCQlyZXF1ZXN0X2R1bXAoKTsNCg0KCQllY2hvICJcdDxiPiIgLiB3b3JkKCdtb3ZlX2ZpbGVzJykgLiAnPC9iPg0KCTxwPg0KJzsNCg0KCQlmb3JlYWNoICgkZmlsZXMgYXMgJGZpbGUpIHsNCgkJCWVjaG8gIlx0IiAuIGh0bWwoJGZpbGUpIC4gIjxiciAvPlxuIjsNCgkJfQ0KDQoJCWVjaG8gJwk8L3A+DQoJPGhyIC8+DQoJJyAuIHdvcmQoJ2Rlc3RpbmF0aW9uJykgLiAnOg0KCTxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJkZXN0aW5hdGlvbiIgc2l6ZT0iJyAuIHRleHRmaWVsZHNpemUoJGRpcmVjdG9yeSkgLiAnIiB2YWx1ZT0iJyAuIGh0bWwoJGRpcmVjdG9yeSkgLiAnIiAvPg0KCTxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSInIC4gd29yZCgnbW92ZScpIC4gJyIgLz4NCjwvdGQ+DQo8L3RyPg0KPC90YWJsZT4NCg0KPHA+PGEgaHJlZj0iJyAuICRzZWxmIC4gJz9kaXI9JyAuIHVybGVuY29kZSgkZGlyZWN0b3J5KSAuICciPlsgJyAuIHdvcmQoJ2JhY2snKSAuICcgXTwvYT48L3A+DQoNCjwvZm9ybT4NCg0KJzsNCg0KCQlodG1sX2Zvb3RlcigpOw0KDQoJfQ0KDQoJYnJlYWs7DQoNCmNhc2UgJ2NvcHknOg0KDQoJaWYgKCFlbXB0eSgkX1BPU1RbJ2Rlc3RpbmF0aW9uJ10pKSB7DQoNCgkJJGRlc3QgPSByZWxhdGl2ZTJhYnNvbHV0ZSgkX1BPU1RbJ2Rlc3RpbmF0aW9uJ10sICRkaXJlY3RvcnkpOw0KDQoJCWlmIChAaXNfZGlyKCRkZXN0KSkgew0KDQoJCQkkZmFpbHVyZSA9IGFycmF5KCk7DQoJCQkkc3VjY2VzcyA9IGFycmF5KCk7DQoNCgkJCWZvcmVhY2ggKCRmaWxlcyBhcyAkZmlsZSkgew0KCQkJCSRmaWxlbmFtZSA9IHN1YnN0cigkZmlsZSwgc3RybGVuKCRkaXJlY3RvcnkpKTsNCgkJCQkkZCA9IGFkZHNsYXNoKCRkZXN0KSAuICRmaWxlbmFtZTsNCgkJCQlpZiAoIUBpc19kaXIoJGZpbGUpICYmICFAZmlsZV9leGlzdHMoJGQpICYmIEBjb3B5KCRmaWxlLCAkZCkpIHsNCgkJCQkJJHN1Y2Nlc3NbXSA9ICRmaWxlOw0KCQkJCX0gZWxzZSB7DQoJCQkJCSRmYWlsdXJlW10gPSAkZmlsZTsNCgkJCQl9DQoJCQl9DQoNCgkJCSRtZXNzYWdlID0gJyc7DQoJCQlpZiAoc2l6ZW9mKCRmYWlsdXJlKSA+IDApIHsNCgkJCQkkbWVzc2FnZSA9IGVycm9yKCdub3RfY29waWVkJywgaW1wbG9kZSgiXG4iLCAkZmFpbHVyZSksICRkZXN0KTsNCgkJCX0NCgkJCWlmIChzaXplb2YoJHN1Y2Nlc3MpID4gMCkgew0KCQkJCSRtZXNzYWdlIC49IG5vdGljZSgnY29waWVkJywgaW1wbG9kZSgiXG4iLCAkc3VjY2VzcyksICRkZXN0KTsNCgkJCX0NCg0KCQkJbGlzdGluZ19wYWdlKCRtZXNzYWdlKTsNCg0KCQl9IGVsc2Ugew0KDQoJCQlpZiAoIUBmaWxlX2V4aXN0cygkZGVzdCkgJiYgQGNvcHkoJGZpbGUsICRkZXN0KSkgew0KCQkJCWxpc3RpbmdfcGFnZShub3RpY2UoJ2NvcGllZCcsICRmaWxlLCAkZGVzdCkpOw0KCQkJfSBlbHNlIHsNCgkJCQlsaXN0aW5nX3BhZ2UoZXJyb3IoJ25vdF9jb3BpZWQnLCAkZmlsZSwgJGRlc3QpKTsNCgkJCX0NCg0KCQl9DQoNCgl9IGVsc2Ugew0KDQoJCWh0bWxfaGVhZGVyKCk7DQoNCgkJZWNobyAnPGZvcm0gYWN0aW9uPSInIC4gJHNlbGYgLiAnIiBtZXRob2Q9InBvc3QiPg0KDQo8dGFibGUgY2xhc3M9ImRpYWxvZyI+DQo8dHI+DQo8dGQgY2xhc3M9ImRpYWxvZyI+DQonOw0KDQoJCXJlcXVlc3RfZHVtcCgpOw0KDQoJCWVjaG8gIlxuPGI+IiAuIHdvcmQoJ2NvcHlfZmlsZXMnKSAuICc8L2I+DQoJPHA+DQonOw0KDQoJCWZvcmVhY2ggKCRmaWxlcyBhcyAkZmlsZSkgew0KCQkJZWNobyAiXHQiIC4gaHRtbCgkZmlsZSkgLiAiPGJyIC8+XG4iOw0KCQl9DQoNCgkJZWNobyAnCTwvcD4NCgk8aHIgLz4NCgknIC4gd29yZCgnZGVzdGluYXRpb24nKSAuICc6DQoJPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImRlc3RpbmF0aW9uIiBzaXplPSInIC4gdGV4dGZpZWxkc2l6ZSgkZGlyZWN0b3J5KSAuICciIHZhbHVlPSInIC4gaHRtbCgkZGlyZWN0b3J5KSAuICciIC8+DQoJPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IicgLiB3b3JkKCdjb3B5JykgLiAnIiAvPg0KPC90ZD4NCjwvdHI+DQo8L3RhYmxlPg0KDQo8cD48YSBocmVmPSInIC4gJHNlbGYgLiAnP2Rpcj0nIC4gdXJsZW5jb2RlKCRkaXJlY3RvcnkpIC4gJyI+WyAnIC4gd29yZCgnYmFjaycpIC4gJyBdPC9hPjwvcD4NCg0KPC9mb3JtPg0KDQonOw0KDQoJCWh0bWxfZm9vdGVyKCk7DQoNCgl9DQoNCglicmVhazsNCg0KY2FzZSAnY3JlYXRlX3N5bWxpbmsnOg0KDQoJaWYgKCFlbXB0eSgkX1BPU1RbJ2Rlc3RpbmF0aW9uJ10pKSB7DQoNCgkJJGRlc3QgPSByZWxhdGl2ZTJhYnNvbHV0ZSgkX1BPU1RbJ2Rlc3RpbmF0aW9uJ10sICRkaXJlY3RvcnkpOw0KDQoJCWlmIChzdWJzdHIoJGRlc3QsIC0xLCAxKSA9PSAkZGVsaW0pICRkZXN0IC49IGJhc2VuYW1lKCRmaWxlKTsNCg0KCQlpZiAoIWVtcHR5KCRfUE9TVFsncmVsYXRpdmUnXSkpICRmaWxlID0gYWJzb2x1dGUycmVsYXRpdmUoYWRkc2xhc2goZGlybmFtZSgkZGVzdCkpLCAkZmlsZSk7DQoNCgkJaWYgKCFAZmlsZV9leGlzdHMoJGRlc3QpICYmIEBzeW1saW5rKCRmaWxlLCAkZGVzdCkpIHsNCgkJCWxpc3RpbmdfcGFnZShub3RpY2UoJ3N5bWxpbmtlZCcsICRmaWxlLCAkZGVzdCkpOw0KCQl9IGVsc2Ugew0KCQkJbGlzdGluZ19wYWdlKGVycm9yKCdub3Rfc3ltbGlua2VkJywgJGZpbGUsICRkZXN0KSk7DQoJCX0NCg0KCX0gZWxzZSB7DQoNCgkJaHRtbF9oZWFkZXIoKTsNCg0KCQllY2hvICc8Zm9ybSBhY3Rpb249IicgLiAkc2VsZiAuICciIG1ldGhvZD0icG9zdCI+DQoNCjx0YWJsZSBjbGFzcz0iZGlhbG9nIiBpZD0ic3ltbGluayI+DQo8dHI+DQoJPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wIj4nIC4gd29yZCgnZGVzdGluYXRpb24nKSAuICc6IDwvdGQ+DQoJPHRkPg0KCQk8Yj4nIC4gaHRtbCgkZmlsZSkgLiAnPC9iPjxiciAvPg0KCQk8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InJlbGF0aXZlIiB2YWx1ZT0ieWVzIiBpZD0iY2hlY2tib3hfcmVsYXRpdmUiIGNoZWNrZWQ9ImNoZWNrZWQiIHN0eWxlPSJtYXJnaW4tdG9wOiAxZXgiIC8+DQoJCTxsYWJlbCBmb3I9ImNoZWNrYm94X3JlbGF0aXZlIj4nIC4gd29yZCgncmVsYXRpdmUnKSAuICc8L2xhYmVsPg0KCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3Rpb24iIHZhbHVlPSJjcmVhdGVfc3ltbGluayIgLz4NCgkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZmlsZSIgdmFsdWU9IicgLiBodG1sKCRmaWxlKSAuICciIC8+DQoJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImRpciIgdmFsdWU9IicgLiBodG1sKCRkaXJlY3RvcnkpIC4gJyIgLz4NCgk8L3RkPg0KPC90cj4NCjx0cj4NCgk8dGQ+JyAuIHdvcmQoJ3N5bWxpbmsnKSAuICc6IDwvdGQ+DQoJPHRkPg0KCQk8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZGVzdGluYXRpb24iIHNpemU9IicgLiB0ZXh0ZmllbGRzaXplKCRkaXJlY3RvcnkpIC4gJyIgdmFsdWU9IicgLiBodG1sKCRkaXJlY3RvcnkpIC4gJyIgLz4NCgkJPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IicgLiB3b3JkKCdjcmVhdGVfc3ltbGluaycpIC4gJyIgLz4NCgk8L3RkPg0KPC90cj4NCjwvdGFibGU+DQoNCjxwPjxhIGhyZWY9IicgLiAkc2VsZiAuICc/ZGlyPScgLiB1cmxlbmNvZGUoJGRpcmVjdG9yeSkgLiAnIj5bICcgLiB3b3JkKCdiYWNrJykgLiAnIF08L2E+PC9wPg0KDQo8L2Zvcm0+DQoNCic7DQoNCgkJaHRtbF9mb290ZXIoKTsNCg0KCX0NCg0KCWJyZWFrOw0KDQpjYXNlICdlZGl0JzoNCg0KCWlmICghZW1wdHkoJF9QT1NUWydzYXZlJ10pKSB7DQoNCgkJJGNvbnRlbnQgPSBzdHJfcmVwbGFjZSgiXHJcbiIsICJcbiIsICRfUE9TVFsnY29udGVudCddKTsNCg0KCQlpZiAoKCRmID0gQGZvcGVuKCRmaWxlLCAndycpKSAmJiBAZndyaXRlKCRmLCAkY29udGVudCkgIT09IGZhbHNlICYmIEBmY2xvc2UoJGYpKSB7DQoJCQlsaXN0aW5nX3BhZ2Uobm90aWNlKCdzYXZlZCcsICRmaWxlKSk7DQoJCX0gZWxzZSB7DQoJCQlsaXN0aW5nX3BhZ2UoZXJyb3IoJ25vdF9zYXZlZCcsICRmaWxlKSk7DQoJCX0NCg0KCX0gZWxzZSB7DQoNCgkJaWYgKEBpc19yZWFkYWJsZSgkZmlsZSkgJiYgQGlzX3dyaXRhYmxlKCRmaWxlKSkgew0KCQkJZWRpdCgkZmlsZSk7DQoJCX0gZWxzZSB7DQoJCQlsaXN0aW5nX3BhZ2UoZXJyb3IoJ25vdF9lZGl0ZWQnLCAkZmlsZSkpOw0KCQl9DQoNCgl9DQoNCglicmVhazsNCg0KY2FzZSAncGVybWlzc2lvbic6DQoNCglpZiAoIWVtcHR5KCRfUE9TVFsnc2V0J10pKSB7DQoNCgkJJG1vZGUgPSAwOw0KCQlpZiAoIWVtcHR5KCRfUE9TVFsndXInXSkpICRtb2RlIHw9IDA0MDA7IGlmICghZW1wdHkoJF9QT1NUWyd1dyddKSkgJG1vZGUgfD0gMDIwMDsgaWYgKCFlbXB0eSgkX1BPU1RbJ3V4J10pKSAkbW9kZSB8PSAwMTAwOw0KCQlpZiAoIWVtcHR5KCRfUE9TVFsnZ3InXSkpICRtb2RlIHw9IDAwNDA7IGlmICghZW1wdHkoJF9QT1NUWydndyddKSkgJG1vZGUgfD0gMDAyMDsgaWYgKCFlbXB0eSgkX1BPU1RbJ2d4J10pKSAkbW9kZSB8PSAwMDEwOw0KCQlpZiAoIWVtcHR5KCRfUE9TVFsnb3InXSkpICRtb2RlIHw9IDAwMDQ7IGlmICghZW1wdHkoJF9QT1NUWydvdyddKSkgJG1vZGUgfD0gMDAwMjsgaWYgKCFlbXB0eSgkX1BPU1RbJ294J10pKSAkbW9kZSB8PSAwMDAxOw0KDQoJCWlmIChAY2htb2QoJGZpbGUsICRtb2RlKSkgew0KCQkJbGlzdGluZ19wYWdlKG5vdGljZSgncGVybWlzc2lvbl9zZXQnLCAkZmlsZSwgZGVjb2N0KCRtb2RlKSkpOw0KCQl9IGVsc2Ugew0KCQkJbGlzdGluZ19wYWdlKGVycm9yKCdwZXJtaXNzaW9uX25vdF9zZXQnLCAkZmlsZSwgZGVjb2N0KCRtb2RlKSkpOw0KCQl9DQoNCgl9IGVsc2Ugew0KDQoJCWh0bWxfaGVhZGVyKCk7DQoNCgkJJG1vZGUgPSBmaWxlcGVybXMoJGZpbGUpOw0KDQoJCWVjaG8gJzxmb3JtIGFjdGlvbj0iJyAuICRzZWxmIC4gJyIgbWV0aG9kPSJwb3N0Ij4NCg0KPHRhYmxlIGNsYXNzPSJkaWFsb2ciPg0KPHRyPg0KPHRkIGNsYXNzPSJkaWFsb2ciPg0KDQoJPHAgc3R5bGU9Im1hcmdpbjogMCI+JyAuIHBocmFzZSgncGVybWlzc2lvbl9mb3InLCAkZmlsZSkgLiAnPC9wPg0KDQoJPGhyIC8+DQoNCgk8dGFibGUgaWQ9InBlcm1pc3Npb24iPg0KCTx0cj4NCgkJPHRkPjwvdGQ+DQoJCTx0ZCBzdHlsZT0iYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgYmxhY2siPicgLiB3b3JkKCdvd25lcicpIC4gJzwvdGQ+DQoJCTx0ZCBzdHlsZT0iYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgYmxhY2siPicgLiB3b3JkKCdncm91cCcpIC4gJzwvdGQ+DQoJCTx0ZD4nIC4gd29yZCgnb3RoZXInKSAuICc8L3RkPg0KCTwvdHI+DQoJPHRyPg0KCQk8dGQgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0Ij4nIC4gd29yZCgncmVhZCcpIC4gJzo8L3RkPg0KCQk8dGQ+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJ1ciIgdmFsdWU9IjEiJzsgaWYgKCRtb2RlICYgMDA0MDApIGVjaG8gJyBjaGVja2VkPSJjaGVja2VkIic7IGVjaG8gJyAvPjwvdGQ+DQoJCTx0ZD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9ImdyIiB2YWx1ZT0iMSInOyBpZiAoJG1vZGUgJiAwMDA0MCkgZWNobyAnIGNoZWNrZWQ9ImNoZWNrZWQiJzsgZWNobyAnIC8+PC90ZD4NCgkJPHRkPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ib3IiIHZhbHVlPSIxIic7IGlmICgkbW9kZSAmIDAwMDA0KSBlY2hvICcgY2hlY2tlZD0iY2hlY2tlZCInOyBlY2hvICcgLz48L3RkPg0KCTwvdHI+DQoJPHRyPg0KCQk8dGQgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0Ij4nIC4gd29yZCgnd3JpdGUnKSAuICc6PC90ZD4NCgkJPHRkPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0idXciIHZhbHVlPSIxIic7IGlmICgkbW9kZSAmIDAwMjAwKSBlY2hvICcgY2hlY2tlZD0iY2hlY2tlZCInOyBlY2hvICcgLz48L3RkPg0KCQk8dGQ+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJndyIgdmFsdWU9IjEiJzsgaWYgKCRtb2RlICYgMDAwMjApIGVjaG8gJyBjaGVja2VkPSJjaGVja2VkIic7IGVjaG8gJyAvPjwvdGQ+DQoJCTx0ZD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9Im93IiB2YWx1ZT0iMSInOyBpZiAoJG1vZGUgJiAwMDAwMikgZWNobyAnIGNoZWNrZWQ9ImNoZWNrZWQiJzsgZWNobyAnIC8+PC90ZD4NCgk8L3RyPg0KCTx0cj4NCgkJPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodCI+JyAuIHdvcmQoJ2V4ZWN1dGUnKSAuICc6PC90ZD4NCgkJPHRkPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0idXgiIHZhbHVlPSIxIic7IGlmICgkbW9kZSAmIDAwMTAwKSBlY2hvICcgY2hlY2tlZD0iY2hlY2tlZCInOyBlY2hvICcgLz48L3RkPg0KCQk8dGQ+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJneCIgdmFsdWU9IjEiJzsgaWYgKCRtb2RlICYgMDAwMTApIGVjaG8gJyBjaGVja2VkPSJjaGVja2VkIic7IGVjaG8gJyAvPjwvdGQ+DQoJCTx0ZD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9Im94IiB2YWx1ZT0iMSInOyBpZiAoJG1vZGUgJiAwMDAwMSkgZWNobyAnIGNoZWNrZWQ9ImNoZWNrZWQiJzsgZWNobyAnIC8+PC90ZD4NCgk8L3RyPg0KCTwvdGFibGU+DQoNCgk8aHIgLz4NCg0KCTxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InNldCIgdmFsdWU9IicgLiB3b3JkKCdzZXQnKSAuICciIC8+DQoNCgk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3Rpb24iIHZhbHVlPSJwZXJtaXNzaW9uIiAvPg0KCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImZpbGUiIHZhbHVlPSInIC4gaHRtbCgkZmlsZSkgLiAnIiAvPg0KCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImRpciIgdmFsdWU9IicgLiBodG1sKCRkaXJlY3RvcnkpIC4gJyIgLz4NCg0KPC90ZD4NCjwvdHI+DQo8L3RhYmxlPg0KDQo8cD48YSBocmVmPSInIC4gJHNlbGYgLiAnP2Rpcj0nIC4gdXJsZW5jb2RlKCRkaXJlY3RvcnkpIC4gJyI+WyAnIC4gd29yZCgnYmFjaycpIC4gJyBdPC9hPjwvcD4NCg0KPC9mb3JtPg0KDQonOw0KDQoJCWh0bWxfZm9vdGVyKCk7DQoNCgl9DQoNCglicmVhazsNCg0KZGVmYXVsdDoNCg0KCWxpc3RpbmdfcGFnZSgpOw0KDQp9DQoNCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCg0KZnVuY3Rpb24gZ2V0bGlzdCAoJGRpcmVjdG9yeSkgew0KCWdsb2JhbCAkZGVsaW0sICR3aW47DQoNCglpZiAoJGQgPSBAb3BlbmRpcigkZGlyZWN0b3J5KSkgew0KDQoJCXdoaWxlICgoJGZpbGVuYW1lID0gQHJlYWRkaXIoJGQpKSAhPT0gZmFsc2UpIHsNCg0KCQkJJHBhdGggPSAkZGlyZWN0b3J5IC4gJGZpbGVuYW1lOw0KDQoJCQlpZiAoJHN0YXQgPSBAbHN0YXQoJHBhdGgpKSB7DQoNCgkJCQkkZmlsZSA9IGFycmF5KA0KCQkJCQknZmlsZW5hbWUnICAgID0+ICRmaWxlbmFtZSwNCgkJCQkJJ3BhdGgnICAgICAgICA9PiAkcGF0aCwNCgkJCQkJJ2lzX2ZpbGUnICAgICA9PiBAaXNfZmlsZSgkcGF0aCksDQoJCQkJCSdpc19kaXInICAgICAgPT4gQGlzX2RpcigkcGF0aCksDQoJCQkJCSdpc19saW5rJyAgICAgPT4gQGlzX2xpbmsoJHBhdGgpLA0KCQkJCQknaXNfcmVhZGFibGUnID0+IEBpc19yZWFkYWJsZSgkcGF0aCksDQoJCQkJCSdpc193cml0YWJsZScgPT4gQGlzX3dyaXRhYmxlKCRwYXRoKSwNCgkJCQkJJ3NpemUnICAgICAgICA9PiAkc3RhdFsnc2l6ZSddLA0KCQkJCQkncGVybWlzc2lvbicgID0+ICRzdGF0Wydtb2RlJ10sDQoJCQkJCSdvd25lcicgICAgICAgPT4gJHN0YXRbJ3VpZCddLA0KCQkJCQknZ3JvdXAnICAgICAgID0+ICRzdGF0WydnaWQnXSwNCgkJCQkJJ210aW1lJyAgICAgICA9PiBAZmlsZW10aW1lKCRwYXRoKSwNCgkJCQkJJ2F0aW1lJyAgICAgICA9PiBAZmlsZWF0aW1lKCRwYXRoKSwNCgkJCQkJJ2N0aW1lJyAgICAgICA9PiBAZmlsZWN0aW1lKCRwYXRoKQ0KCQkJCSk7DQoNCgkJCQlpZiAoJGZpbGVbJ2lzX2RpciddKSB7DQoJCQkJCSRmaWxlWydpc19leGVjdXRhYmxlJ10gPSBAZmlsZV9leGlzdHMoJHBhdGggLiAkZGVsaW0gLiAnLicpOw0KCQkJCX0gZWxzZSB7DQoJCQkJCWlmICghJHdpbikgew0KCQkJCQkJJGZpbGVbJ2lzX2V4ZWN1dGFibGUnXSA9IEBpc19leGVjdXRhYmxlKCRwYXRoKTsNCgkJCQkJfSBlbHNlIHsNCgkJCQkJCSRmaWxlWydpc19leGVjdXRhYmxlJ10gPSB0cnVlOw0KCQkJCQl9DQoJCQkJfQ0KDQoJCQkJaWYgKCRmaWxlWydpc19saW5rJ10pICRmaWxlWyd0YXJnZXQnXSA9IEByZWFkbGluaygkcGF0aCk7DQoNCgkJCQlpZiAoZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXRwd3VpZCcpKSAkZmlsZVsnb3duZXJfbmFtZSddID0gQHJlc2V0KHBvc2l4X2dldHB3dWlkKCRmaWxlWydvd25lciddKSk7DQoJCQkJaWYgKGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0Z3JnaWQnKSkgJGZpbGVbJ2dyb3VwX25hbWUnXSA9IEByZXNldChwb3NpeF9nZXRncmdpZCgkZmlsZVsnZ3JvdXAnXSkpOw0KDQoJCQkJJGZpbGVzW10gPSAkZmlsZTsNCg0KCQkJfQ0KDQoJCX0NCg0KCQlyZXR1cm4gJGZpbGVzOw0KDQoJfSBlbHNlIHsNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KfQ0KDQpmdW5jdGlvbiBzb3J0bGlzdCAoJiRsaXN0LCAka2V5LCAkcmV2ZXJzZSkgew0KDQoJcXVpY2tzb3J0KCRsaXN0LCAwLCBzaXplb2YoJGxpc3QpIC0gMSwgJGtleSk7DQoNCglpZiAoJHJldmVyc2UpICRsaXN0ID0gYXJyYXlfcmV2ZXJzZSgkbGlzdCk7DQoNCn0NCg0KZnVuY3Rpb24gcXVpY2tzb3J0ICgmJGFycmF5LCAkZmlyc3QsICRsYXN0LCAka2V5KSB7DQoNCglpZiAoJGZpcnN0IDwgJGxhc3QpIHsNCg0KCQkkY21wID0gJGFycmF5W2Zsb29yKCgkZmlyc3QgKyAkbGFzdCkgLyAyKV1bJGtleV07DQoNCgkJJGwgPSAkZmlyc3Q7DQoJCSRyID0gJGxhc3Q7DQoNCgkJd2hpbGUgKCRsIDw9ICRyKSB7DQoNCgkJCXdoaWxlICgkYXJyYXlbJGxdWyRrZXldIDwgJGNtcCkgJGwrKzsNCgkJCXdoaWxlICgkYXJyYXlbJHJdWyRrZXldID4gJGNtcCkgJHItLTsNCg0KCQkJaWYgKCRsIDw9ICRyKSB7DQoNCgkJCQkkdG1wID0gJGFycmF5WyRsXTsNCgkJCQkkYXJyYXlbJGxdID0gJGFycmF5WyRyXTsNCgkJCQkkYXJyYXlbJHJdID0gJHRtcDsNCg0KCQkJCSRsKys7DQoJCQkJJHItLTsNCg0KCQkJfQ0KDQoJCX0NCg0KCQlxdWlja3NvcnQoJGFycmF5LCAkZmlyc3QsICRyLCAka2V5KTsNCgkJcXVpY2tzb3J0KCRhcnJheSwgJGwsICRsYXN0LCAka2V5KTsNCg0KCX0NCg0KfQ0KDQpmdW5jdGlvbiBwZXJtaXNzaW9uX29jdGFsMnN0cmluZyAoJG1vZGUpIHsNCg0KCWlmICgoJG1vZGUgJiAweEMwMDApID09PSAweEMwMDApIHsNCgkJJHR5cGUgPSAncyc7DQoJfSBlbHNlaWYgKCgkbW9kZSAmIDB4QTAwMCkgPT09IDB4QTAwMCkgew0KCQkkdHlwZSA9ICdsJzsNCgl9IGVsc2VpZiAoKCRtb2RlICYgMHg4MDAwKSA9PT0gMHg4MDAwKSB7DQoJCSR0eXBlID0gJy0nOw0KCX0gZWxzZWlmICgoJG1vZGUgJiAweDYwMDApID09PSAweDYwMDApIHsNCgkJJHR5cGUgPSAnYic7DQoJfSBlbHNlaWYgKCgkbW9kZSAmIDB4NDAwMCkgPT09IDB4NDAwMCkgew0KCQkkdHlwZSA9ICdkJzsNCgl9IGVsc2VpZiAoKCRtb2RlICYgMHgyMDAwKSA9PT0gMHgyMDAwKSB7DQoJCSR0eXBlID0gJ2MnOw0KCX0gZWxzZWlmICgoJG1vZGUgJiAweDEwMDApID09PSAweDEwMDApIHsNCgkJJHR5cGUgPSAncCc7DQoJfSBlbHNlIHsNCgkJJHR5cGUgPSAnPyc7DQoJfQ0KDQoJJG93bmVyICA9ICgkbW9kZSAmIDAwNDAwKSA/ICdyJyA6ICctJzsNCgkkb3duZXIgLj0gKCRtb2RlICYgMDAyMDApID8gJ3cnIDogJy0nOw0KCWlmICgkbW9kZSAmIDB4ODAwKSB7DQoJCSRvd25lciAuPSAoJG1vZGUgJiAwMDEwMCkgPyAncycgOiAnUyc7DQoJfSBlbHNlIHsNCgkJJG93bmVyIC49ICgkbW9kZSAmIDAwMTAwKSA/ICd4JyA6ICctJzsNCgl9DQoNCgkkZ3JvdXAgID0gKCRtb2RlICYgMDAwNDApID8gJ3InIDogJy0nOw0KCSRncm91cCAuPSAoJG1vZGUgJiAwMDAyMCkgPyAndycgOiAnLSc7DQoJaWYgKCRtb2RlICYgMHg0MDApIHsNCgkJJGdyb3VwIC49ICgkbW9kZSAmIDAwMDEwKSA/ICdzJyA6ICdTJzsNCgl9IGVsc2Ugew0KCQkkZ3JvdXAgLj0gKCRtb2RlICYgMDAwMTApID8gJ3gnIDogJy0nOw0KCX0NCg0KCSRvdGhlciAgPSAoJG1vZGUgJiAwMDAwNCkgPyAncicgOiAnLSc7DQoJJG90aGVyIC49ICgkbW9kZSAmIDAwMDAyKSA/ICd3JyA6ICctJzsNCglpZiAoJG1vZGUgJiAweDIwMCkgew0KCQkkb3RoZXIgLj0gKCRtb2RlICYgMDAwMDEpID8gJ3QnIDogJ1QnOw0KCX0gZWxzZSB7DQoJCSRvdGhlciAuPSAoJG1vZGUgJiAwMDAwMSkgPyAneCcgOiAnLSc7DQoJfQ0KDQoJcmV0dXJuICR0eXBlIC4gJG93bmVyIC4gJGdyb3VwIC4gJG90aGVyOw0KDQp9DQoNCmZ1bmN0aW9uIGlzX3NjcmlwdCAoJGZpbGVuYW1lKSB7DQoJcmV0dXJuIGVyZWcoJ1wucGhwJHxcLnBocDMkfFwucGhwNCR8XC5waHA1JCcsICRmaWxlbmFtZSk7DQp9DQoNCmZ1bmN0aW9uIGdldG1pbWV0eXBlICgkZmlsZW5hbWUpIHsNCglzdGF0aWMgJG1pbWVzID0gYXJyYXkoDQoJCSdcLmpwZyR8XC5qcGVnJCcgID0+ICdpbWFnZS9qcGVnJywNCgkJJ1wuZ2lmJCcgICAgICAgICAgPT4gJ2ltYWdlL2dpZicsDQoJCSdcLnBuZyQnICAgICAgICAgID0+ICdpbWFnZS9wbmcnLA0KCQknXC5odG1sJHxcLmh0bWwkJyA9PiAndGV4dC9odG1sJywNCgkJJ1wudHh0JHxcLmFzYyQnICAgPT4gJ3RleHQvcGxhaW4nLA0KCQknXC54bWwkfFwueHNsJCcgICA9PiAnYXBwbGljYXRpb24veG1sJywNCgkJJ1wucGRmJCcgICAgICAgICAgPT4gJ2FwcGxpY2F0aW9uL3BkZicNCgkpOw0KDQoJZm9yZWFjaCAoJG1pbWVzIGFzICRyZWdleCA9PiAkbWltZSkgew0KCQlpZiAoZXJlZ2koJHJlZ2V4LCAkZmlsZW5hbWUpKSByZXR1cm4gJG1pbWU7DQoJfQ0KDQoJLy8gcmV0dXJuICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nOw0KCXJldHVybiAndGV4dC9wbGFpbic7DQoNCn0NCg0KZnVuY3Rpb24gZGVsICgkZmlsZSkgew0KCWdsb2JhbCAkZGVsaW07DQoNCglpZiAoIUBpc19saW5rKCRmaWxlKSAmJiAhZmlsZV9leGlzdHMoJGZpbGUpKSByZXR1cm4gZmFsc2U7DQoNCglpZiAoIUBpc19saW5rKCRmaWxlKSAmJiBAaXNfZGlyKCRmaWxlKSkgew0KDQoJCWlmICgkZGlyID0gQG9wZW5kaXIoJGZpbGUpKSB7DQoNCgkJCSRlcnJvciA9IGZhbHNlOw0KDQoJCQl3aGlsZSAoKCRmID0gcmVhZGRpcigkZGlyKSkgIT09IGZhbHNlKSB7DQoJCQkJaWYgKCRmICE9ICcuJyAmJiAkZiAhPSAnLi4nICYmICFkZWwoJGZpbGUgLiAkZGVsaW0gLiAkZikpIHsNCgkJCQkJJGVycm9yID0gdHJ1ZTsNCgkJCQl9DQoJCQl9DQoJCQljbG9zZWRpcigkZGlyKTsNCg0KCQkJaWYgKCEkZXJyb3IpIHJldHVybiBAcm1kaXIoJGZpbGUpOw0KDQoJCQlyZXR1cm4gISRlcnJvcjsNCg0KCQl9IGVsc2Ugew0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoNCgl9IGVsc2Ugew0KCQlyZXR1cm4gQHVubGluaygkZmlsZSk7DQoJfQ0KDQp9DQoNCmZ1bmN0aW9uIGFkZHNsYXNoICgkZGlyZWN0b3J5KSB7DQoJZ2xvYmFsICRkZWxpbTsNCg0KCWlmIChzdWJzdHIoJGRpcmVjdG9yeSwgLTEsIDEpICE9ICRkZWxpbSkgew0KCQlyZXR1cm4gJGRpcmVjdG9yeSAuICRkZWxpbTsNCgl9IGVsc2Ugew0KCQlyZXR1cm4gJGRpcmVjdG9yeTsNCgl9DQoNCn0NCg0KZnVuY3Rpb24gcmVsYXRpdmUyYWJzb2x1dGUgKCRzdHJpbmcsICRkaXJlY3RvcnkpIHsNCg0KCWlmIChwYXRoX2lzX3JlbGF0aXZlKCRzdHJpbmcpKSB7DQoJCXJldHVybiBzaW1wbGlmeV9wYXRoKGFkZHNsYXNoKCRkaXJlY3RvcnkpIC4gJHN0cmluZyk7DQoJfSBlbHNlIHsNCgkJcmV0dXJuIHNpbXBsaWZ5X3BhdGgoJHN0cmluZyk7DQoJfQ0KDQp9DQoNCmZ1bmN0aW9uIHBhdGhfaXNfcmVsYXRpdmUgKCRwYXRoKSB7DQoJZ2xvYmFsICR3aW47DQoNCglpZiAoJHdpbikgew0KCQlyZXR1cm4gKHN1YnN0cigkcGF0aCwgMSwgMSkgIT0gJzonKTsNCgl9IGVsc2Ugew0KCQlyZXR1cm4gKHN1YnN0cigkcGF0aCwgMCwgMSkgIT0gJy8nKTsNCgl9DQoNCn0NCg0KZnVuY3Rpb24gYWJzb2x1dGUycmVsYXRpdmUgKCRkaXJlY3RvcnksICR0YXJnZXQpIHsNCglnbG9iYWwgJGRlbGltOw0KDQoJJHBhdGggPSAnJzsNCgl3aGlsZSAoJGRpcmVjdG9yeSAhPSAkdGFyZ2V0KSB7DQoJCWlmICgkZGlyZWN0b3J5ID09IHN1YnN0cigkdGFyZ2V0LCAwLCBzdHJsZW4oJGRpcmVjdG9yeSkpKSB7DQoJCQkkcGF0aCAuPSBzdWJzdHIoJHRhcmdldCwgc3RybGVuKCRkaXJlY3RvcnkpKTsNCgkJCWJyZWFrOw0KCQl9IGVsc2Ugew0KCQkJJHBhdGggLj0gJy4uJyAuICRkZWxpbTsNCgkJCSRkaXJlY3RvcnkgPSBzdWJzdHIoJGRpcmVjdG9yeSwgMCwgc3RycnBvcyhzdWJzdHIoJGRpcmVjdG9yeSwgMCwgLTEpLCAkZGVsaW0pICsgMSk7DQoJCX0NCgl9DQoJaWYgKCRwYXRoID09ICcnKSAkcGF0aCA9ICcuJzsNCg0KCXJldHVybiAkcGF0aDsNCg0KfQ0KDQpmdW5jdGlvbiBzaW1wbGlmeV9wYXRoICgkcGF0aCkgew0KCWdsb2JhbCAkZGVsaW07DQoNCglpZiAoQGZpbGVfZXhpc3RzKCRwYXRoKSAmJiBmdW5jdGlvbl9leGlzdHMoJ3JlYWxwYXRoJykgJiYgQHJlYWxwYXRoKCRwYXRoKSAhPSAnJykgew0KCQkkcGF0aCA9IHJlYWxwYXRoKCRwYXRoKTsNCgkJaWYgKEBpc19kaXIoJHBhdGgpKSB7DQoJCQlyZXR1cm4gYWRkc2xhc2goJHBhdGgpOw0KCQl9IGVsc2Ugew0KCQkJcmV0dXJuICRwYXRoOw0KCQl9DQoJfQ0KDQoJJHBhdHRlcm4gID0gJGRlbGltIC4gJy4nIC4gJGRlbGltOw0KDQoJaWYgKEBpc19kaXIoJHBhdGgpKSB7DQoJCSRwYXRoID0gYWRkc2xhc2goJHBhdGgpOw0KCX0NCg0KCXdoaWxlIChzdHJwb3MoJHBhdGgsICRwYXR0ZXJuKSAhPT0gZmFsc2UpIHsNCgkJJHBhdGggPSBzdHJfcmVwbGFjZSgkcGF0dGVybiwgJGRlbGltLCAkcGF0aCk7DQoJfQ0KDQoJJGUgPSBhZGRzbGFzaGVzKCRkZWxpbSk7DQoJJHJlZ2V4ID0gJGUgLiAnKChcLlteXC4nIC4gJGUgLiAnXVteJyAuICRlIC4gJ10qKXwoXC5cLlteJyAuICRlIC4gJ10rKXwoW15cLl1bXicgLiAkZSAuICddKikpJyAuICRlIC4gJ1wuXC4nIC4gJGU7DQoNCgl3aGlsZSAoZXJlZygkcmVnZXgsICRwYXRoKSkgew0KCQkkcGF0aCA9IGVyZWdfcmVwbGFjZSgkcmVnZXgsICRkZWxpbSwgJHBhdGgpOw0KCX0NCgkNCglyZXR1cm4gJHBhdGg7DQoNCn0NCg0KZnVuY3Rpb24gaHVtYW5fZmlsZXNpemUgKCRmaWxlc2l6ZSkgew0KDQoJJHN1ZmZpY2VzID0gJ2tNR1RQRSc7DQoNCgkkbiA9IDA7DQoJd2hpbGUgKCRmaWxlc2l6ZSA+PSAxMDAwKSB7DQoJCSRmaWxlc2l6ZSAvPSAxMDI0Ow0KCQkkbisrOw0KCX0NCg0KCSRmaWxlc2l6ZSA9IHJvdW5kKCRmaWxlc2l6ZSwgMyAtIHN0cnBvcygkZmlsZXNpemUsICcuJykpOw0KDQoJaWYgKHN0cnBvcygkZmlsZXNpemUsICcuJykgIT09IGZhbHNlKSB7DQoJCXdoaWxlIChpbl9hcnJheShzdWJzdHIoJGZpbGVzaXplLCAtMSwgMSksIGFycmF5KCcwJywgJy4nKSkpIHsNCgkJCSRmaWxlc2l6ZSA9IHN1YnN0cigkZmlsZXNpemUsIDAsIHN0cmxlbigkZmlsZXNpemUpIC0gMSk7DQoJCX0NCgl9DQoNCgkkc3VmZml4ID0gKCgkbiA9PSAwKSA/ICcnIDogc3Vic3RyKCRzdWZmaWNlcywgJG4gLSAxLCAxKSk7DQoNCglyZXR1cm4gJGZpbGVzaXplIC4gIiB7JHN1ZmZpeH1CIjsNCg0KfQ0KDQpmdW5jdGlvbiBzdHJpcCAoJiRzdHIpIHsNCgkkc3RyID0gc3RyaXBzbGFzaGVzKCRzdHIpOw0KfQ0KDQovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQoNCmZ1bmN0aW9uIGxpc3RpbmdfcGFnZSAoJG1lc3NhZ2UgPSBudWxsKSB7DQoJZ2xvYmFsICRzZWxmLCAkZGlyZWN0b3J5LCAkc29ydCwgJHJldmVyc2U7DQoNCglodG1sX2hlYWRlcigpOw0KDQoJJGxpc3QgPSBnZXRsaXN0KCRkaXJlY3RvcnkpOw0KDQoJaWYgKGFycmF5X2tleV9leGlzdHMoJ3NvcnQnLCAkX0dFVCkpICRzb3J0ID0gJF9HRVRbJ3NvcnQnXTsgZWxzZSAkc29ydCA9ICdmaWxlbmFtZSc7DQoJaWYgKGFycmF5X2tleV9leGlzdHMoJ3JldmVyc2UnLCAkX0dFVCkgJiYgJF9HRVRbJ3JldmVyc2UnXSA9PSAndHJ1ZScpICRyZXZlcnNlID0gdHJ1ZTsgZWxzZSAkcmV2ZXJzZSA9IGZhbHNlOw0KDQoJc29ydGxpc3QoJGxpc3QsICRzb3J0LCAkcmV2ZXJzZSk7DQoNCgllY2hvICc8aDEgc3R5bGU9Im1hcmdpbi1ib3R0b206IDAiPkRyLkFhRGlMPC9oMT4NCg0KPGZvcm0gZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgYWN0aW9uPSInIC4gJHNlbGYgLiAnIiBtZXRob2Q9InBvc3QiPg0KDQo8dGFibGUgaWQ9Im1haW4iPg0KJzsNCg0KCWRpcmVjdG9yeV9jaG9pY2UoKTsNCg0KCWlmICghZW1wdHkoJG1lc3NhZ2UpKSB7DQoJCXNwYWNlcigpOw0KCQllY2hvICRtZXNzYWdlOw0KCX0NCg0KCWlmIChAaXNfd3JpdGFibGUoJGRpcmVjdG9yeSkpIHsNCgkJdXBsb2FkX2JveCgpOw0KCQljcmVhdGVfYm94KCk7DQoJfSBlbHNlIHsNCgkJc3BhY2VyKCk7DQoJfQ0KDQoJaWYgKCRsaXN0KSB7DQoJCWxpc3RpbmcoJGxpc3QpOw0KCX0gZWxzZSB7DQoJCWVjaG8gZXJyb3IoJ25vdF9yZWFkYWJsZScsICRkaXJlY3RvcnkpOw0KCX0NCg0KCWVjaG8gJzwvdGFibGU+DQoNCjwvZm9ybT4NCg0KJzsNCg0KCWh0bWxfZm9vdGVyKCk7DQoNCn0NCg0KZnVuY3Rpb24gbGlzdGluZyAoJGxpc3QpIHsNCglnbG9iYWwgJGRpcmVjdG9yeSwgJGhvbWVkaXIsICRzb3J0LCAkcmV2ZXJzZSwgJHdpbiwgJGNvbHMsICRkYXRlX2Zvcm1hdCwgJHNlbGY7DQoNCgllY2hvICc8dHIgY2xhc3M9Imxpc3RpbmciPg0KCTx0aCBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlIj48aW1nIHNyYz0iJyAuICRzZWxmIC4gJz9pbWFnZT1zbWlsZXkiIGFsdD0ic21pbGV5IiAvPjwvdGg+DQonOw0KDQoJJGQgPSAnZGlyPScgLiB1cmxlbmNvZGUoJGRpcmVjdG9yeSkgLiAnJmFtcDsnOw0KDQoJaWYgKCEkcmV2ZXJzZSAmJiAkc29ydCA9PSAnZmlsZW5hbWUnKSAkciA9ICcmYW1wO3JldmVyc2U9dHJ1ZSc7IGVsc2UgJHIgPSAnJzsNCgllY2hvICJcdDx0aCBjbGFzcz1cImZpbGVuYW1lXCI+PGEgaHJlZj1cIiRzZWxmP3skZH1zb3J0PWZpbGVuYW1lJHJcIj4iIC4gd29yZCgnZmlsZW5hbWUnKSAuICI8L2E+PC90aD5cbiI7DQoNCglpZiAoISRyZXZlcnNlICYmICRzb3J0ID09ICdzaXplJykgJHIgPSAnJmFtcDtyZXZlcnNlPXRydWUnOyBlbHNlICRyID0gJyc7DQoJZWNobyAiXHQ8dGggY2xhc3M9XCJzaXplXCI+PGEgaHJlZj1cIiRzZWxmP3skZH1zb3J0PXNpemUkclwiPiIgLiB3b3JkKCdzaXplJykgLiAiPC9hPjwvdGg+XG4iOw0KDQoJaWYgKCEkd2luKSB7DQoNCgkJaWYgKCEkcmV2ZXJzZSAmJiAkc29ydCA9PSAncGVybWlzc2lvbicpICRyID0gJyZhbXA7cmV2ZXJzZT10cnVlJzsgZWxzZSAkciA9ICcnOw0KCQllY2hvICJcdDx0aCBjbGFzcz1cInBlcm1pc3Npb25faGVhZGVyXCI+PGEgaHJlZj1cIiRzZWxmP3skZH1zb3J0PXBlcm1pc3Npb24kclwiPiIgLiB3b3JkKCdwZXJtaXNzaW9uJykgLiAiPC9hPjwvdGg+XG4iOw0KDQoJCWlmICghJHJldmVyc2UgJiYgJHNvcnQgPT0gJ293bmVyJykgJHIgPSAnJmFtcDtyZXZlcnNlPXRydWUnOyBlbHNlICRyID0gJyc7DQoJCWVjaG8gIlx0PHRoIGNsYXNzPVwib3duZXJcIj48YSBocmVmPVwiJHNlbGY/eyRkfXNvcnQ9b3duZXIkclwiPiIgLiB3b3JkKCdvd25lcicpIC4gIjwvYT48L3RoPlxuIjsNCg0KCQlpZiAoISRyZXZlcnNlICYmICRzb3J0ID09ICdncm91cCcpICRyID0gJyZhbXA7cmV2ZXJzZT10cnVlJzsgZWxzZSAkciA9ICcnOw0KCQllY2hvICJcdDx0aCBjbGFzcz1cImdyb3VwXCI+PGEgaHJlZj1cIiRzZWxmP3skZH1zb3J0PWdyb3VwJHJcIj4iIC4gd29yZCgnZ3JvdXAnKSAuICI8L2E+PC90aD5cbiI7DQoNCgl9DQoNCgllY2hvICcJPHRoIGNsYXNzPSJmdW5jdGlvbnMiPicgLiB3b3JkKCdmdW5jdGlvbnMnKSAuICc8L3RoPg0KPC90cj4NCic7DQoNCglmb3IgKCRpID0gMDsgJGkgPCBzaXplb2YoJGxpc3QpOyAkaSsrKSB7DQoJCSRmaWxlID0gJGxpc3RbJGldOw0KDQoJCSR0aW1lc3RhbXBzICA9ICdtdGltZTogJyAuIGRhdGUoJGRhdGVfZm9ybWF0LCAkZmlsZVsnbXRpbWUnXSkgLiAnLCAnOw0KCQkkdGltZXN0YW1wcyAuPSAnYXRpbWU6ICcgLiBkYXRlKCRkYXRlX2Zvcm1hdCwgJGZpbGVbJ2F0aW1lJ10pIC4gJywgJzsNCgkJJHRpbWVzdGFtcHMgLj0gJ2N0aW1lOiAnIC4gZGF0ZSgkZGF0ZV9mb3JtYXQsICRmaWxlWydjdGltZSddKTsNCg0KCQllY2hvICc8dHIgY2xhc3M9Imxpc3RpbmciPg0KCTx0ZCBjbGFzcz0iY2hlY2tib3giPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iY2hlY2tlZCcgLiAkaSAuICciIHZhbHVlPSJ0cnVlIiBvbmZvY3VzPSJhY3RpdmF0ZShcJ290aGVyXCcpIiAvPjwvdGQ+DQoJPHRkIGNsYXNzPSJmaWxlbmFtZSIgdGl0bGU9IicgLiBodG1sKCR0aW1lc3RhbXBzKSAuICciPic7DQoNCgkJaWYgKCRmaWxlWydpc19saW5rJ10pIHsNCg0KCQkJZWNobyAnPGltZyBzcmM9IicgLiAkc2VsZiAuICc/aW1hZ2U9bGluayIgYWx0PSJsaW5rIiAvPiAnOw0KCQkJZWNobyBodG1sKCRmaWxlWydmaWxlbmFtZSddKSAuICcgJnJhcnI7ICc7DQoNCgkJCSRyZWFsX2ZpbGUgPSByZWxhdGl2ZTJhYnNvbHV0ZSgkZmlsZVsndGFyZ2V0J10sICRkaXJlY3RvcnkpOw0KDQoJCQlpZiAoQGlzX3JlYWRhYmxlKCRyZWFsX2ZpbGUpKSB7DQoJCQkJaWYgKEBpc19kaXIoJHJlYWxfZmlsZSkpIHsNCgkJCQkJZWNobyAnWyA8YSBocmVmPSInIC4gJHNlbGYgLiAnP2Rpcj0nIC4gdXJsZW5jb2RlKCRyZWFsX2ZpbGUpIC4gJyI+JyAuIGh0bWwoJGZpbGVbJ3RhcmdldCddKSAuICc8L2E+IF0nOw0KCQkJCX0gZWxzZSB7DQoJCQkJCWVjaG8gJzxhIGhyZWY9IicgLiAkc2VsZiAuICc/YWN0aW9uPXZpZXcmYW1wO2ZpbGU9JyAuIHVybGVuY29kZSgkcmVhbF9maWxlKSAuICciPicgLiBodG1sKCRmaWxlWyd0YXJnZXQnXSkgLiAnPC9hPic7DQoJCQkJfQ0KCQkJfSBlbHNlIHsNCgkJCQllY2hvIGh0bWwoJGZpbGVbJ3RhcmdldCddKTsNCgkJCX0NCg0KCQl9IGVsc2VpZiAoJGZpbGVbJ2lzX2RpciddKSB7DQoNCgkJCWVjaG8gJzxpbWcgc3JjPSInIC4gJHNlbGYgLiAnP2ltYWdlPWZvbGRlciIgYWx0PSJmb2xkZXIiIC8+IFsgJzsNCgkJCWlmICgkd2luIHx8ICRmaWxlWydpc19leGVjdXRhYmxlJ10pIHsNCgkJCQllY2hvICc8YSBocmVmPSInIC4gJHNlbGYgLiAnP2Rpcj0nIC4gdXJsZW5jb2RlKCRmaWxlWydwYXRoJ10pIC4gJyI+JyAuIGh0bWwoJGZpbGVbJ2ZpbGVuYW1lJ10pIC4gJzwvYT4nOw0KCQkJfSBlbHNlIHsNCgkJCQllY2hvIGh0bWwoJGZpbGVbJ2ZpbGVuYW1lJ10pOw0KCQkJfQ0KCQkJZWNobyAnIF0nOw0KDQoJCX0gZWxzZSB7DQoNCgkJCWlmIChzdWJzdHIoJGZpbGVbJ2ZpbGVuYW1lJ10sIDAsIDEpID09ICcuJykgew0KCQkJCWVjaG8gJzxpbWcgc3JjPSInIC4gJHNlbGYgLiAnP2ltYWdlPWhpZGRlbl9maWxlIiBhbHQ9ImhpZGRlbiBmaWxlIiAvPiAnOw0KCQkJfSBlbHNlIHsNCgkJCQllY2hvICc8aW1nIHNyYz0iJyAuICRzZWxmIC4gJz9pbWFnZT1maWxlIiBhbHQ9ImZpbGUiIC8+ICc7DQoJCQl9DQoNCgkJCWlmICgkZmlsZVsnaXNfZmlsZSddICYmICRmaWxlWydpc19yZWFkYWJsZSddKSB7DQoJCQkgICBlY2hvICc8YSBocmVmPSInIC4gJHNlbGYgLiAnP2FjdGlvbj12aWV3JmFtcDtmaWxlPScgLiB1cmxlbmNvZGUoJGZpbGVbJ3BhdGgnXSkgLiAnIj4nIC4gaHRtbCgkZmlsZVsnZmlsZW5hbWUnXSkgLiAnPC9hPic7DQoJCQl9IGVsc2Ugew0KCQkJCWVjaG8gaHRtbCgkZmlsZVsnZmlsZW5hbWUnXSk7DQoJCQl9DQoNCgkJfQ0KDQoJCWlmICgkZmlsZVsnc2l6ZSddID49IDEwMDApIHsNCgkJCSRodW1hbiA9ICcgdGl0bGU9IicgLiBodW1hbl9maWxlc2l6ZSgkZmlsZVsnc2l6ZSddKSAuICciJzsNCgkJfSBlbHNlIHsNCgkJCSRodW1hbiA9ICcnOw0KCQl9DQoNCgkJZWNobyAiXHQ8dGQgY2xhc3M9XCJzaXplXCIkaHVtYW4+eyRmaWxlWydzaXplJ119IEI8L3RkPlxuIjsNCg0KCQlpZiAoISR3aW4pIHsNCg0KCQkJZWNobyAiXHQ8dGQgY2xhc3M9XCJwZXJtaXNzaW9uXCIgdGl0bGU9XCIiIC4gZGVjb2N0KCRmaWxlWydwZXJtaXNzaW9uJ10pIC4gJyI+JzsNCg0KCQkJJGwgPSAhJGZpbGVbJ2lzX2xpbmsnXSAmJiAoIWZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0dWlkJykgfHwgJGZpbGVbJ293bmVyJ10gPT0gcG9zaXhfZ2V0dWlkKCkpOw0KCQkJaWYgKCRsKSBlY2hvICc8YSBocmVmPSInIC4gJHNlbGYgLiAnP2FjdGlvbj1wZXJtaXNzaW9uJmFtcDtmaWxlPScgLiB1cmxlbmNvZGUoJGZpbGVbJ3BhdGgnXSkgLiAnJmFtcDtkaXI9JyAuIHVybGVuY29kZSgkZGlyZWN0b3J5KSAuICciPic7DQoJCQllY2hvIGh0bWwocGVybWlzc2lvbl9vY3RhbDJzdHJpbmcoJGZpbGVbJ3Blcm1pc3Npb24nXSkpOw0KCQkJaWYgKCRsKSBlY2hvICc8L2E+JzsNCg0KCQkJZWNobyAiPC90ZD5cbiI7DQoNCgkJCWlmIChhcnJheV9rZXlfZXhpc3RzKCdvd25lcl9uYW1lJywgJGZpbGUpKSB7DQoJCQkJZWNobyAiXHQ8dGQgY2xhc3M9XCJvd25lclwiIHRpdGxlPVwidWlkOiB7JGZpbGVbJ293bmVyJ119XCI+eyRmaWxlWydvd25lcl9uYW1lJ119PC90ZD5cbiI7DQoJCQl9IGVsc2Ugew0KCQkJCWVjaG8gIlx0PHRkIGNsYXNzPVwib3duZXJcIj57JGZpbGVbJ293bmVyJ119PC90ZD5cbiI7DQoJCQl9DQoNCgkJCWlmIChhcnJheV9rZXlfZXhpc3RzKCdncm91cF9uYW1lJywgJGZpbGUpKSB7DQoJCQkJZWNobyAiXHQ8dGQgY2xhc3M9XCJncm91cFwiIHRpdGxlPVwiZ2lkOiB7JGZpbGVbJ2dyb3VwJ119XCI+eyRmaWxlWydncm91cF9uYW1lJ119PC90ZD5cbiI7DQoJCQl9IGVsc2Ugew0KCQkJCWVjaG8gIlx0PHRkIGNsYXNzPVwiZ3JvdXBcIj57JGZpbGVbJ2dyb3VwJ119PC90ZD5cbiI7DQoJCQl9DQoNCgkJfQ0KDQoJCWVjaG8gJwk8dGQgY2xhc3M9ImZ1bmN0aW9ucyI+DQoJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImZpbGUnIC4gJGkgLiAnIiB2YWx1ZT0iJyAuIGh0bWwoJGZpbGVbJ3BhdGgnXSkgLiAnIiAvPg0KJzsNCg0KCQkkYWN0aW9ucyA9IGFycmF5KCk7DQoJCWlmIChmdW5jdGlvbl9leGlzdHMoJ3N5bWxpbmsnKSkgew0KCQkJJGFjdGlvbnNbXSA9ICdjcmVhdGVfc3ltbGluayc7DQoJCX0NCgkJaWYgKEBpc193cml0YWJsZShkaXJuYW1lKCRmaWxlWydwYXRoJ10pKSkgew0KCQkJJGFjdGlvbnNbXSA9ICdkZWxldGUnOw0KCQkJJGFjdGlvbnNbXSA9ICdyZW5hbWUnOw0KCQkJJGFjdGlvbnNbXSA9ICdtb3ZlJzsNCgkJfQ0KCQlpZiAoJGZpbGVbJ2lzX2ZpbGUnXSAmJiAkZmlsZVsnaXNfcmVhZGFibGUnXSkgew0KCQkJJGFjdGlvbnNbXSA9ICdjb3B5JzsNCgkJCSRhY3Rpb25zW10gPSAnZG93bmxvYWQnOw0KCQkJaWYgKCRmaWxlWydpc193cml0YWJsZSddKSAkYWN0aW9uc1tdID0gJ2VkaXQnOw0KCQl9DQoJCWlmICghJHdpbiAmJiBmdW5jdGlvbl9leGlzdHMoJ2V4ZWMnKSAmJiAkZmlsZVsnaXNfZmlsZSddICYmICRmaWxlWydpc19leGVjdXRhYmxlJ10gJiYgZmlsZV9leGlzdHMoJy9iaW4vc2gnKSkgew0KCQkJJGFjdGlvbnNbXSA9ICdleGVjdXRlJzsNCgkJfQ0KDQoJCWlmIChzaXplb2YoJGFjdGlvbnMpID4gMCkgew0KDQoJCQllY2hvICcJCTxzZWxlY3QgY2xhc3M9InNtYWxsIiBuYW1lPSJhY3Rpb24nIC4gJGkgLiAnIiBzaXplPSIxIj4NCgkJPG9wdGlvbiB2YWx1ZT0iIj4nIC4gc3RyX3JlcGVhdCgnJm5ic3A7JywgMzApIC4gJzwvb3B0aW9uPg0KJzsNCg0KCQkJZm9yZWFjaCAoJGFjdGlvbnMgYXMgJGFjdGlvbikgew0KCQkJCWVjaG8gIlx0XHQ8b3B0aW9uIHZhbHVlPVwiJGFjdGlvblwiPiIgLiB3b3JkKCRhY3Rpb24pIC4gIjwvb3B0aW9uPlxuIjsNCgkJCX0NCg0KCQkJZWNobyAnCQk8L3NlbGVjdD4NCgkJPGlucHV0IGNsYXNzPSJzbWFsbCIgdHlwZT0ic3VibWl0IiBuYW1lPSJzdWJtaXQnIC4gJGkgLiAnIiB2YWx1ZT0iICZndDsgIiBvbmZvY3VzPSJhY3RpdmF0ZShcJ290aGVyXCcpIiAvPg0KJzsNCg0KCQl9DQoNCgkJZWNobyAnCTwvdGQ+DQo8L3RyPg0KJzsNCg0KCX0NCg0KCWVjaG8gJzx0ciBjbGFzcz0ibGlzdGluZ19mb290ZXIiPg0KCTx0ZCBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7IHZlcnRpY2FsLWFsaWduOiB0b3AiPjxpbWcgc3JjPSInIC4gJHNlbGYgLiAnP2ltYWdlPWFycm93IiBhbHQ9IiZndDsiIC8+PC90ZD4NCgk8dGQgY29sc3Bhbj0iJyAuICgkY29scyAtIDEpIC4gJyI+DQoJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Im51bSIgdmFsdWU9IicgLiBzaXplb2YoJGxpc3QpIC4gJyIgLz4NCgkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZm9jdXMiIHZhbHVlPSIiIC8+DQoJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Im9sZGRpciIgdmFsdWU9IicgLiBodG1sKCRkaXJlY3RvcnkpIC4gJyIgLz4NCic7DQoNCgkkYWN0aW9ucyA9IGFycmF5KCk7DQoJaWYgKEBpc193cml0YWJsZShkaXJuYW1lKCRmaWxlWydwYXRoJ10pKSkgew0KCQkkYWN0aW9uc1tdID0gJ2RlbGV0ZSc7DQoJCSRhY3Rpb25zW10gPSAnbW92ZSc7DQoJfQ0KCSRhY3Rpb25zW10gPSAnY29weSc7DQoNCgllY2hvICcJCTxzZWxlY3QgY2xhc3M9InNtYWxsIiBuYW1lPSJhY3Rpb25fYWxsIiBzaXplPSIxIj4NCgkJPG9wdGlvbiB2YWx1ZT0iIj4nIC4gc3RyX3JlcGVhdCgnJm5ic3A7JywgMzApIC4gJzwvb3B0aW9uPg0KJzsNCg0KCWZvcmVhY2ggKCRhY3Rpb25zIGFzICRhY3Rpb24pIHsNCgkJZWNobyAiXHRcdDxvcHRpb24gdmFsdWU9XCIkYWN0aW9uXCI+IiAuIHdvcmQoJGFjdGlvbikgLiAiPC9vcHRpb24+XG4iOw0KCX0NCg0KCWVjaG8gJwkJPC9zZWxlY3Q+DQoJCTxpbnB1dCBjbGFzcz0ic21hbGwiIHR5cGU9InN1Ym1pdCIgbmFtZT0ic3VibWl0X2FsbCIgdmFsdWU9IiAmZ3Q7ICIgb25mb2N1cz0iYWN0aXZhdGUoXCdvdGhlclwnKSIgLz4NCgk8L3RkPg0KPC90cj4NCic7DQoNCn0NCg0KZnVuY3Rpb24gZGlyZWN0b3J5X2Nob2ljZSAoKSB7DQoJZ2xvYmFsICRkaXJlY3RvcnksICRob21lZGlyLCAkY29scywgJHNlbGY7DQoNCgllY2hvICc8dHI+DQoJPHRkIGNvbHNwYW49IicgLiAkY29scyAuICciIGlkPSJkaXJlY3RvcnkiPg0KCQk8YSBocmVmPSInIC4gJHNlbGYgLiAnP2Rpcj0nIC4gdXJsZW5jb2RlKCRob21lZGlyKSAuICciPicgLiB3b3JkKCdkaXJlY3RvcnknKSAuICc8L2E+Og0KCQk8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZGlyIiBzaXplPSInIC4gdGV4dGZpZWxkc2l6ZSgkZGlyZWN0b3J5KSAuICciIHZhbHVlPSInIC4gaHRtbCgkZGlyZWN0b3J5KSAuICciIG9uZm9jdXM9ImFjdGl2YXRlKFwnZGlyZWN0b3J5XCcpIiAvPg0KCQk8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJjaGFuZ2VkaXIiIHZhbHVlPSInIC4gd29yZCgnY2hhbmdlJykgLiAnIiBvbmZvY3VzPSJhY3RpdmF0ZShcJ2RpcmVjdG9yeVwnKSIgLz4NCgk8L3RkPg0KPC90cj4NCic7DQoNCn0NCg0KZnVuY3Rpb24gdXBsb2FkX2JveCAoKSB7DQoJZ2xvYmFsICRjb2xzOw0KDQoJZWNobyAnPHRyPg0KCTx0ZCBjb2xzcGFuPSInIC4gJGNvbHMgLiAnIiBpZD0idXBsb2FkIj4NCgkJJyAuIHdvcmQoJ2ZpbGUnKSAuICc6DQoJCTxpbnB1dCB0eXBlPSJmaWxlIiBuYW1lPSJ1cGxvYWQiIG9uZm9jdXM9ImFjdGl2YXRlKFwnb3RoZXJcJykiIC8+DQoJCTxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InN1Ym1pdF91cGxvYWQiIHZhbHVlPSInIC4gd29yZCgndXBsb2FkJykgLiAnIiBvbmZvY3VzPSJhY3RpdmF0ZShcJ290aGVyXCcpIiAvPg0KCTwvdGQ+DQo8L3RyPg0KJzsNCg0KfQ0KDQpmdW5jdGlvbiBjcmVhdGVfYm94ICgpIHsNCglnbG9iYWwgJGNvbHM7DQoNCgllY2hvICc8dHI+DQoJPHRkIGNvbHNwYW49IicgLiAkY29scyAuICciIGlkPSJjcmVhdGUiPg0KCQk8c2VsZWN0IG5hbWU9ImNyZWF0ZV90eXBlIiBzaXplPSIxIiBvbmZvY3VzPSJhY3RpdmF0ZShcJ2NyZWF0ZVwnKSI+DQoJCTxvcHRpb24gdmFsdWU9ImZpbGUiPicgLiB3b3JkKCdmaWxlJykgLiAnPC9vcHRpb24+DQoJCTxvcHRpb24gdmFsdWU9ImRpcmVjdG9yeSI+JyAuIHdvcmQoJ2RpcmVjdG9yeScpIC4gJzwvb3B0aW9uPg0KCQk8L3NlbGVjdD4NCgkJPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImNyZWF0ZV9uYW1lIiBvbmZvY3VzPSJhY3RpdmF0ZShcJ2NyZWF0ZVwnKSIgLz4NCgkJPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ic3VibWl0X2NyZWF0ZSIgdmFsdWU9IicgLiB3b3JkKCdjcmVhdGUnKSAuICciIG9uZm9jdXM9ImFjdGl2YXRlKFwnY3JlYXRlXCcpIiAvPg0KCTwvdGQ+DQo8L3RyPg0KJzsNCg0KfQ0KDQpmdW5jdGlvbiBlZGl0ICgkZmlsZSkgew0KCWdsb2JhbCAkc2VsZiwgJGRpcmVjdG9yeSwgJGVkaXRjb2xzLCAkZWRpdHJvd3MsICRhcGFjaGUsICRodHBhc3N3ZCwgJGh0YWNjZXNzOw0KDQoJaHRtbF9oZWFkZXIoKTsNCg0KCWVjaG8gJzxoMiBzdHlsZT0ibWFyZ2luLWJvdHRvbTogM3B0Ij4nIC4gaHRtbCgkZmlsZSkgLiAnPC9oMj4NCg0KPGZvcm0gYWN0aW9uPSInIC4gJHNlbGYgLiAnIiBtZXRob2Q9InBvc3QiPg0KDQo8dGFibGUgY2xhc3M9ImRpYWxvZyI+DQo8dHI+DQo8dGQgY2xhc3M9ImRpYWxvZyI+DQoNCgk8dGV4dGFyZWEgbmFtZT0iY29udGVudCIgY29scz0iJyAuICRlZGl0Y29scyAuICciIHJvd3M9IicgLiAkZWRpdHJvd3MgLiAnIiBXUkFQPSJvZmYiPic7DQoNCglpZiAoYXJyYXlfa2V5X2V4aXN0cygnY29udGVudCcsICRfUE9TVCkpIHsNCgkJZWNobyAkX1BPU1RbJ2NvbnRlbnQnXTsNCgl9IGVsc2Ugew0KCQkkZiA9IGZvcGVuKCRmaWxlLCAncicpOw0KCQl3aGlsZSAoIWZlb2YoJGYpKSB7DQoJCQllY2hvIGh0bWwoZnJlYWQoJGYsIDgxOTIpKTsNCgkJfQ0KCQlmY2xvc2UoJGYpOw0KCX0NCg0KCWlmICghZW1wdHkoJF9QT1NUWyd1c2VyJ10pKSB7DQoJCWVjaG8gIlxuIiAuICRfUE9TVFsndXNlciddIC4gJzonIC4gY3J5cHQoJF9QT1NUWydwYXNzd29yZCddKTsNCgl9DQoJaWYgKCFlbXB0eSgkX1BPU1RbJ2Jhc2ljX2F1dGgnXSkpIHsNCgkJaWYgKCR3aW4pIHsNCgkJCSRhdXRoZmlsZSA9IHN0cl9yZXBsYWNlKCdcXCcsICcvJywgJGRpcmVjdG9yeSkgLiAkaHRwYXNzd2Q7DQoJCX0gZWxzZSB7DQoJCQkkYXV0aGZpbGUgPSAkZGlyZWN0b3J5IC4gJGh0cGFzc3dkOw0KCQl9DQoJCWVjaG8gIlxuQXV0aFR5cGUgQmFzaWNcbkF1dGhOYW1lICZxdW90O1Jlc3RyaWN0ZWQgRGlyZWN0b3J5JnF1b3Q7XG4iOw0KCQllY2hvICdBdXRoVXNlckZpbGUgJnF1b3Q7JyAuIGh0bWwoJGF1dGhmaWxlKSAuICImcXVvdDtcbiI7DQoJCWVjaG8gJ1JlcXVpcmUgdmFsaWQtdXNlcic7DQoJfQ0KDQoJZWNobyAnPC90ZXh0YXJlYT4NCg0KCTxociAvPg0KJzsNCg0KCWlmICgkYXBhY2hlICYmIGJhc2VuYW1lKCRmaWxlKSA9PSAkaHRwYXNzd2QpIHsNCgkJZWNobyAnDQoJJyAuIHdvcmQoJ3VzZXInKSAuICc6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ1c2VyIiAvPg0KCScgLiB3b3JkKCdwYXNzd29yZCcpIC4gJzogPGlucHV0IHR5cGU9InBhc3N3b3JkIiBuYW1lPSJwYXNzd29yZCIgLz4NCgk8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iJyAuIHdvcmQoJ2FkZCcpIC4gJyIgLz4NCg0KCTxociAvPg0KJzsNCg0KCX0NCg0KCWlmICgkYXBhY2hlICYmIGJhc2VuYW1lKCRmaWxlKSA9PSAkaHRhY2Nlc3MpIHsNCgkJZWNobyAnDQoJPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0iYmFzaWNfYXV0aCIgdmFsdWU9IicgLiB3b3JkKCdhZGRfYmFzaWNfYXV0aCcpIC4gJyIgLz4NCg0KCTxociAvPg0KJzsNCg0KCX0NCg0KCWVjaG8gJw0KCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdGlvbiIgdmFsdWU9ImVkaXQiIC8+DQoJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZmlsZSIgdmFsdWU9IicgLiBodG1sKCRmaWxlKSAuICciIC8+DQoJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZGlyIiB2YWx1ZT0iJyAuIGh0bWwoJGRpcmVjdG9yeSkgLiAnIiAvPg0KCTxpbnB1dCB0eXBlPSJyZXNldCIgdmFsdWU9IicgLiB3b3JkKCdyZXNldCcpIC4gJyIgaWQ9InJlZF9idXR0b24iIC8+DQoJPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ic2F2ZSIgdmFsdWU9IicgLiB3b3JkKCdzYXZlJykgLiAnIiBpZD0iZ3JlZW5fYnV0dG9uIiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDUwcHgiIC8+DQoNCjwvdGQ+DQo8L3RyPg0KPC90YWJsZT4NCg0KPHA+PGEgaHJlZj0iJyAuICRzZWxmIC4gJz9kaXI9JyAuIHVybGVuY29kZSgkZGlyZWN0b3J5KSAuICciPlsgJyAuIHdvcmQoJ2JhY2snKSAuICcgXTwvYT48L3A+DQoNCjwvZm9ybT4NCg0KJzsNCg0KCWh0bWxfZm9vdGVyKCk7DQoNCn0NCg0KZnVuY3Rpb24gc3BhY2VyICgpIHsNCglnbG9iYWwgJGNvbHM7DQoNCgllY2hvICc8dHI+DQoJPHRkIGNvbHNwYW49IicgLiAkY29scyAuICciIHN0eWxlPSJoZWlnaHQ6IDFlbSI+PC90ZD4NCjwvdHI+DQonOw0KDQp9DQoNCmZ1bmN0aW9uIHRleHRmaWVsZHNpemUgKCRjb250ZW50KSB7DQoNCgkkc2l6ZSA9IHN0cmxlbigkY29udGVudCkgKyA1Ow0KCWlmICgkc2l6ZSA8IDMwKSAkc2l6ZSA9IDMwOw0KDQoJcmV0dXJuICRzaXplOw0KDQp9DQoNCmZ1bmN0aW9uIHJlcXVlc3RfZHVtcCAoKSB7DQoNCglmb3JlYWNoICgkX1JFUVVFU1QgYXMgJGtleSA9PiAkdmFsdWUpIHsNCgkJZWNobyAiXHQ8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCIiIC4gaHRtbCgka2V5KSAuICciIHZhbHVlPSInIC4gaHRtbCgkdmFsdWUpIC4gIlwiIC8+XG4iOw0KCX0NCg0KfQ0KDQovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQoNCmZ1bmN0aW9uIGh0bWwgKCRzdHJpbmcpIHsNCglnbG9iYWwgJHNpdGVfY2hhcnNldDsNCglyZXR1cm4gaHRtbGVudGl0aWVzKCRzdHJpbmcsIEVOVF9DT01QQVQsICRzaXRlX2NoYXJzZXQpOw0KfQ0KDQpmdW5jdGlvbiB3b3JkICgkd29yZCkgew0KCWdsb2JhbCAkd29yZHMsICR3b3JkX2NoYXJzZXQ7DQoJcmV0dXJuIGh0bWxlbnRpdGllcygkd29yZHNbJHdvcmRdLCBFTlRfQ09NUEFULCAkd29yZF9jaGFyc2V0KTsNCn0NCg0KZnVuY3Rpb24gcGhyYXNlICgkcGhyYXNlLCAkYXJndW1lbnRzKSB7DQoJZ2xvYmFsICR3b3JkczsNCglzdGF0aWMgJHNlYXJjaDsNCg0KCWlmICghaXNfYXJyYXkoJHNlYXJjaCkpIGZvciAoJGkgPSAxOyAkaSA8PSA4OyAkaSsrKSAkc2VhcmNoW10gPSAiJSRpIjsNCg0KCWZvciAoJGkgPSAwOyAkaSA8IHNpemVvZigkYXJndW1lbnRzKTsgJGkrKykgew0KCQkkYXJndW1lbnRzWyRpXSA9IG5sMmJyKGh0bWwoJGFyZ3VtZW50c1skaV0pKTsNCgl9DQoNCgkkcmVwbGFjZSA9IGFycmF5KCd7JyA9PiAnPHByZT4nLCAnfScgPT4nPC9wcmU+JywgJ1snID0+ICc8Yj4nLCAnXScgPT4gJzwvYj4nKTsNCg0KCXJldHVybiBzdHJfcmVwbGFjZSgkc2VhcmNoLCAkYXJndW1lbnRzLCBzdHJfcmVwbGFjZShhcnJheV9rZXlzKCRyZXBsYWNlKSwgJHJlcGxhY2UsIG5sMmJyKGh0bWwoJHdvcmRzWyRwaHJhc2VdKSkpKTsNCg0KfQ0KDQpmdW5jdGlvbiBnZXR3b3JkcyAoJGxhbmcpIHsNCglnbG9iYWwgJHdvcmRfY2hhcnNldCwgJGRhdGVfZm9ybWF0Ow0KDQoJc3dpdGNoICgkbGFuZykgew0KCWNhc2UgJ2RlJzoNCg0KCQkkZGF0ZV9mb3JtYXQgPSAnZC5tLnkgSDppOnMnOw0KCQkkd29yZF9jaGFyc2V0ID0gJ0lTTy04ODU5LTEnOw0KDQoJCXJldHVybiBhcnJheSgNCidkaXJlY3RvcnknID0+ICdWZXJ6ZWljaG5pcycsDQonZmlsZScgPT4gJ0RhdGVpJywNCidmaWxlbmFtZScgPT4gJ0RhdGVpbmFtZScsDQoNCidzaXplJyA9PiAnR3I/P2UnLA0KJ3Blcm1pc3Npb24nID0+ICdSZWNodGUnLA0KJ293bmVyJyA9PiAnRWlnbmVyJywNCidncm91cCcgPT4gJ0dydXBwZScsDQonb3RoZXInID0+ICdBbmRlcmUnLA0KJ2Z1bmN0aW9ucycgPT4gJ0Z1bmt0aW9uZW4nLA0KDQoncmVhZCcgPT4gJ2xlc2VuJywNCid3cml0ZScgPT4gJ3NjaHJlaWJlbicsDQonZXhlY3V0ZScgPT4gJ2F1c2b8aHJlbicsDQoNCidjcmVhdGVfc3ltbGluaycgPT4gJ1N5bWxpbmsgZXJzdGVsbGVuJywNCidkZWxldGUnID0+ICdsP3NjaGVuJywNCidyZW5hbWUnID0+ICd1bWJlbmVubmVuJywNCidtb3ZlJyA9PiAndmVyc2NoaWViZW4nLA0KJ2NvcHknID0+ICdrb3BpZXJlbicsDQonZWRpdCcgPT4gJ2VkaXRpZXJlbicsDQonZG93bmxvYWQnID0+ICdoZXJ1bnRlcmxhZGVuJywNCid1cGxvYWQnID0+ICdob2NobGFkZW4nLA0KJ2NyZWF0ZScgPT4gJ2Vyc3RlbGxlbicsDQonY2hhbmdlJyA9PiAnd2VjaHNlbG4nLA0KJ3NhdmUnID0+ICdzcGVpY2hlcm4nLA0KJ3NldCcgPT4gJ3NldHplJywNCidyZXNldCcgPT4gJ3p1cvxja3NldHplbicsDQoncmVsYXRpdmUnID0+ICdQZmFkIHp1bSBaaWVsIHJlbGF0aXYnLA0KDQoneWVzJyA9PiAnSmEnLA0KJ25vJyA9PiAnTmVpbicsDQonYmFjaycgPT4gJ3p1cvxjaycsDQonZGVzdGluYXRpb24nID0+ICdaaWVsJywNCidzeW1saW5rJyA9PiAnU3ltYm9saXNjaGVyIExpbmsnLA0KJ25vX291dHB1dCcgPT4gJ2tlaW5lIEF1c2dhYmUnLA0KDQondXNlcicgPT4gJ0JlbnV0emVybmFtZScsDQoncGFzc3dvcmQnID0+ICdLZW5ud29ydCcsDQonYWRkJyA9PiAnaGluenVm/GdlbicsDQonYWRkX2Jhc2ljX2F1dGgnID0+ICdIVFRQLUJhc2ljLUF1dGggaGluenVm/GdlbicsDQoNCid1cGxvYWRlZCcgPT4gJyJbJTFdIiB3dXJkZSBob2NoZ2VsYWRlbi4nLA0KJ25vdF91cGxvYWRlZCcgPT4gJyJbJTFdIiBrb25udGUgbmljaHQgaG9jaGdlbGFkZW4gd2VyZGVuLicsDQonYWxyZWFkeV9leGlzdHMnID0+ICciWyUxXSIgZXhpc3RpZXJ0IGJlcmVpdHMuJywNCidjcmVhdGVkJyA9PiAnIlslMV0iIHd1cmRlIGVyc3RlbGx0LicsDQonbm90X2NyZWF0ZWQnID0+ICciWyUxXSIga29ubnRlIG5pY2h0IGVyc3RlbGx0IHdlcmRlbi4nLA0KJ3JlYWxseV9kZWxldGUnID0+ICdTb2xsZW4gZm9sZ2VuZGUgRGF0ZWllbiB3aXJrbGljaCBnZWw/c2NodCB3ZXJkZW4/JywNCidkZWxldGVkJyA9PiAiRm9sZ2VuZGUgRGF0ZWllbiB3dXJkZW4gZ2VsP3NjaHQ6XG5bJTFdIiwNCidub3RfZGVsZXRlZCcgPT4gIkZvbGdlbmRlIERhdGVpZW4ga29ubnRlbiBuaWNodCBnZWw/c2NodCB3ZXJkZW46XG5bJTFdIiwNCidyZW5hbWVfZmlsZScgPT4gJ0JlbmVubmUgRGF0ZWkgdW06JywNCidyZW5hbWVkJyA9PiAnIlslMV0iIHd1cmRlIGluICJbJTJdIiB1bWJlbmFubnQuJywNCidub3RfcmVuYW1lZCcgPT4gJyJbJTFdIGtvbm50ZSBuaWNodCBpbiAiWyUyXSIgdW1iZW5hbm50IHdlcmRlbi4nLA0KJ21vdmVfZmlsZXMnID0+ICdWZXJzY2hpZWJlbiBmb2xnZW5kZSBEYXRlaWVuOicsDQonbW92ZWQnID0+ICJGb2xnZW5kZSBEYXRlaWVuIHd1cmRlbiBuYWNoIFwiWyUyXVwiIHZlcnNjaG9iZW46XG5bJTFdIiwNCidub3RfbW92ZWQnID0+ICJGb2xnZW5kZSBEYXRlaWVuIGtvbm50ZW4gbmljaHQgbmFjaCBcIlslMl1cIiB2ZXJzY2hvYmVuIHdlcmRlbjpcblslMV0iLA0KJ2NvcHlfZmlsZXMnID0+ICdLb3BpZXJlIGZvbGdlbmRlIERhdGVpZW46JywNCidjb3BpZWQnID0+ICJGb2xnZW5kZSBEYXRlaWVuIHd1cmRlbiBuYWNoIFwiWyUyXVwiIGtvcGllcnQ6XG5bJTFdIiwNCidub3RfY29waWVkJyA9PiAiRm9sZ2VuZGUgRGF0ZWllbiBrb25udGVuIG5pY2h0IG5hY2ggXCJbJTJdXCIga29waWVydCB3ZXJkZW46XG5bJTFdIiwNCidub3RfZWRpdGVkJyA9PiAnIlslMV0iIGthbm4gbmljaHQgZWRpdGllcnQgd2VyZGVuLicsDQonZXhlY3V0ZWQnID0+ICJcIlslMV1cIiB3dXJkZSBlcmZvbGdyZWljaCBhdXNnZWb8aHJ0OlxueyUyfSIsDQonbm90X2V4ZWN1dGVkJyA9PiAiXCJbJTFdXCIga29ubnRlIG5pY2h0IGVyZm9sZ3JlaWNoIGF1c2dlZvxocnQgd2VyZGVuOlxueyUyfSIsDQonc2F2ZWQnID0+ICciWyUxXSIgd3VyZGUgZ2VzcGVpY2hlcnQuJywNCidub3Rfc2F2ZWQnID0+ICciWyUxXSIga29ubnRlIG5pY2h0IGdlc3BlaWNoZXJ0IHdlcmRlbi4nLA0KJ3N5bWxpbmtlZCcgPT4gJ1N5bWJvbGlzY2hlciBMaW5rIHZvbiAiWyUyXSIgbmFjaCAiWyUxXSIgd3VyZGUgZXJzdGVsbHQuJywNCidub3Rfc3ltbGlua2VkJyA9PiAnU3ltYm9saXNjaGVyIExpbmsgdm9uICJbJTJdIiBuYWNoICJbJTFdIiBrb25udGUgbmljaHQgZXJzdGVsbHQgd2VyZGVuLicsDQoncGVybWlzc2lvbl9mb3InID0+ICdSZWNodGUgZvxyICJbJTFdIjonLA0KJ3Blcm1pc3Npb25fc2V0JyA9PiAnRGllIFJlY2h0ZSBm/HIgIlslMV0iIHd1cmRlbiBhdWYgWyUyXSBnZXNldHp0LicsDQoncGVybWlzc2lvbl9ub3Rfc2V0JyA9PiAnRGllIFJlY2h0ZSBm/HIgIlslMV0iIGtvbm50ZW4gbmljaHQgYXVmIFslMl0gZ2VzZXR6dCB3ZXJkZW4uJywNCidub3RfcmVhZGFibGUnID0+ICciWyUxXSIga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbi4nDQoJCSk7DQoNCgljYXNlICdmcic6DQoNCgkJJGRhdGVfZm9ybWF0ID0gJ2QubS55IEg6aTpzJzsNCgkJJHdvcmRfY2hhcnNldCA9ICdJU08tODg1OS0xJzsNCg0KCQlyZXR1cm4gYXJyYXkoDQonZGlyZWN0b3J5JyA9PiAnUulwZXJ0b2lyZScsDQonZmlsZScgPT4gJ0ZpY2hpZXInLA0KJ2ZpbGVuYW1lJyA9PiAnTm9tIGZpY2hpZXInLA0KDQonc2l6ZScgPT4gJ1RhaWxsZScsDQoncGVybWlzc2lvbicgPT4gJ0Ryb2l0cycsDQonb3duZXInID0+ICdQcm9wcmnpdGFpcmUnLA0KJ2dyb3VwJyA9PiAnR3JvdXBlJywNCidvdGhlcicgPT4gJ0F1dHJlcycsDQonZnVuY3Rpb25zJyA9PiAnRm9uY3Rpb25zJywNCg0KJ3JlYWQnID0+ICdMaXJlJywNCid3cml0ZScgPT4gJ0VjcmlyZScsDQonZXhlY3V0ZScgPT4gJ0V46WN1dGVyJywNCg0KJ2NyZWF0ZV9zeW1saW5rJyA9PiAnQ3LpZXIgbGllbiBzeW1ib2xpcXVlJywNCidkZWxldGUnID0+ICdFZmZhY2VyJywNCidyZW5hbWUnID0+ICdSZW5vbW1lcicsDQonbW92ZScgPT4gJ0TpcGxhY2VyJywNCidjb3B5JyA9PiAnQ29waWVyJywNCidlZGl0JyA9PiAnT3V2cmlyJywNCidkb3dubG9hZCcgPT4gJ1TpbOljaGFyZ2VyIHN1ciBQQycsDQondXBsb2FkJyA9PiAnVOls6WNoYXJnZXIgc3VyIHNlcnZldXInLA0KJ2NyZWF0ZScgPT4gJ0Ny6WVyJywNCidjaGFuZ2UnID0+ICdDaGFuZ2VyJywNCidzYXZlJyA9PiAnU2F1dmVnYXJkZXInLA0KJ3NldCcgPT4gJ0V46WN1dGVyJywNCidyZXNldCcgPT4gJ1LpaW5pdGlhbGlzZXInLA0KJ3JlbGF0aXZlJyA9PiAnUmVsYXRpZicsDQoNCid5ZXMnID0+ICdPdWknLA0KJ25vJyA9PiAnTm9uJywNCidiYWNrJyA9PiAnUmV0b3VyJywNCidkZXN0aW5hdGlvbicgPT4gJ0Rlc3RpbmF0aW9uJywNCidzeW1saW5rJyA9PiAnTGllbiBzeW1ib2xsaXF1ZScsDQonbm9fb3V0cHV0JyA9PiAnUGFzIGRlIHNvcnRpZScsDQoNCid1c2VyJyA9PiAnVXRpbGlzYXRldXInLA0KJ3Bhc3N3b3JkJyA9PiAnTW90IGRlIHBhc3NlJywNCidhZGQnID0+ICdBam91dGVyJywNCidhZGRfYmFzaWNfYXV0aCcgPT4gJ2FkZCBiYXNpYy1hdXRoZW50aWZpY2F0aW9uJywNCg0KJ3VwbG9hZGVkJyA9PiAnIlslMV0iIGEg6XTpIHTpbOljaGFyZ+kgc3VyIGxlIHNlcnZldXIuJywNCidub3RfdXBsb2FkZWQnID0+ICciWyUxXSIgbiBhIHBhcyDpdOkgdOls6WNoYXJn6SBzdXIgbGUgc2VydmV1ci4nLA0KJ2FscmVhZHlfZXhpc3RzJyA9PiAnIlslMV0iIGV4aXN0ZSBk6WrgLicsDQonY3JlYXRlZCcgPT4gJyJbJTFdIiBhIOl06SBjcunpLicsDQonbm90X2NyZWF0ZWQnID0+ICciWyUxXSIgbiBhIHBhcyBwdSDqdHJlIGNy6ekuJywNCidyZWFsbHlfZGVsZXRlJyA9PiAnRWZmYWNlciBsZSBmaWNoaWVyPycsDQonZGVsZXRlZCcgPT4gIkNlcyBmaWNoaWVycyBvbnQg6XTpIGTpdHVpdHM6XG5bJTFdIiwNCidub3RfZGVsZXRlZCcgPT4gIkNlcyBmaWNoaWVycyBuIG9udCBwdSDqdHJlIGTpdHJ1aXRzOlxuWyUxXSIsDQoncmVuYW1lX2ZpbGUnID0+ICdSZW5vbW1lIGZpY2hpZXI6JywNCidyZW5hbWVkJyA9PiAnIlslMV0iIGEg6XTpIHJlbm9tbekgZW4gIlslMl0iLicsDQonbm90X3JlbmFtZWQnID0+ICciWyUxXSBuIGEgcGFzIHB1IOp0cmUgcmVub21t6SBlbiAiWyUyXSIuJywNCidtb3ZlX2ZpbGVzJyA9PiAnROlwbGFjZXIgY2VzIGZpY2hpZXJzOicsDQonbW92ZWQnID0+ICJDZXMgZmljaGllcnMgb250IOl06SBk6XBsYWPpcyBlbiBcIlslMl1cIjpcblslMV0iLA0KJ25vdF9tb3ZlZCcgPT4gIkNlcyBmaWNoaWVycyBuIG9udCBwYXMgcHUg6nRyZSBk6XBsYWPpcyBlbiBcIlslMl1cIjpcblslMV0iLA0KJ2NvcHlfZmlsZXMnID0+ICdDb3BpZXIgY2VzIGZpY2hpZXJzOicsDQonY29waWVkJyA9PiAiQ2VzIGZpY2hpZXJzIG9udCDpdOkgY29waelzIGVuIFwiWyUyXVwiOlxuWyUxXSIsDQonbm90X2NvcGllZCcgPT4gIkNlcyBmaWNoaWVycyBuIG9udCBwYXMgcHUg6nRyZSBjb3Bp6XMgZW4gXCJbJTJdXCI6XG5bJTFdIiwNCidub3RfZWRpdGVkJyA9PiAnIlslMV0iIG5lIHBldXQg6nRyZSBvdXZlcnQuJywNCidleGVjdXRlZCcgPT4gIlwiWyUxXVwiIGEg6XTpIGJyaWxsYW1tZW50IGV46WN1dOkgOlxueyUyfSIsDQonbm90X2V4ZWN1dGVkJyA9PiAiXCJbJTFdXCIgbiBhIHBhcyBwdSDqdHJlIGV46WN1dOk6XG57JTJ9IiwNCidzYXZlZCcgPT4gJyJbJTFdIiBhIOl06SBzYXV2ZWdhcmTpLicsDQonbm90X3NhdmVkJyA9PiAnIlslMV0iIG4gYSBwYXMgcHUg6nRyZSBzYXV2ZWdhcmTpLicsDQonc3ltbGlua2VkJyA9PiAnVW4gbGllbiBzeW1ib2xpcXVlIGRlcHVpcyAiWyUyXSIgdmVycyAiWyUxXSIgYSDpdOkgY3LpZS4nLA0KJ25vdF9zeW1saW5rZWQnID0+ICdVbiBsaWVuIHN5bWJvbGlxdWUgZGVwdWlzICJbJTJdIiB2ZXJzICJbJTFdIiBuIGEgcGFzIHB1IOp0cmUgY3Lp6S4nLA0KJ3Blcm1pc3Npb25fZm9yJyA9PiAnRHJvaXRzIGRlICJbJTFdIjonLA0KJ3Blcm1pc3Npb25fc2V0JyA9PiAnRHJvaXRzIGRlICJbJTFdIiBvbnQg6XTpIGNoYW5n6XMgZW4gWyUyXS4nLA0KJ3Blcm1pc3Npb25fbm90X3NldCcgPT4gJ0Ryb2l0cyBkZSAiWyUxXSIgbiBvbnQgcGFzIHB1IOp0cmUgY2hhbmfpcyBlblslMl0uJywNCidub3RfcmVhZGFibGUnID0+ICciWyUxXSIgbmUgcGV1dCBwYXMg6nRyZSBvdXZlcnQuJw0KCQkpOw0KDQoJY2FzZSAnaXQnOg0KDQoJCSRkYXRlX2Zvcm1hdCA9ICdkLW0tWSBIOmk6cyc7DQoJCSR3b3JkX2NoYXJzZXQgPSAnSVNPLTg4NTktMSc7DQoNCgkJcmV0dXJuIGFycmF5KA0KJ2RpcmVjdG9yeScgPT4gJ0RpcmVjdG9yeScsDQonZmlsZScgPT4gJ0ZpbGUnLA0KJ2ZpbGVuYW1lJyA9PiAnTm9tZSBGaWxlJywNCg0KJ3NpemUnID0+ICdEaW1lbnNpb25pJywNCidwZXJtaXNzaW9uJyA9PiAnUGVybWVzc2knLA0KJ293bmVyJyA9PiAnUHJvcHJpZXRhcmlvJywNCidncm91cCcgPT4gJ0dydXBwbycsDQonb3RoZXInID0+ICdBbHRybycsDQonZnVuY3Rpb25zJyA9PiAnRnVuemlvbmknLA0KDQoncmVhZCcgPT4gJ2xlZ2dpJywNCid3cml0ZScgPT4gJ3Njcml2aScsDQonZXhlY3V0ZScgPT4gJ2VzZWd1aScsDQoNCidjcmVhdGVfc3ltbGluaycgPT4gJ2NyZWEgbGluayBzaW1ib2xpY28nLA0KJ2RlbGV0ZScgPT4gJ2NhbmNlbGxhJywNCidyZW5hbWUnID0+ICdyaW5vbWluYScsDQonbW92ZScgPT4gJ3Nwb3N0YScsDQonY29weScgPT4gJ2NvcGlhJywNCidlZGl0JyA9PiAnbW9kaWZpY2EnLA0KJ2Rvd25sb2FkJyA9PiAnZG93bmxvYWQnLA0KJ3VwbG9hZCcgPT4gJ3VwbG9hZCcsDQonY3JlYXRlJyA9PiAnY3JlYScsDQonY2hhbmdlJyA9PiAnY2FtYmlhJywNCidzYXZlJyA9PiAnc2FsdmEnLA0KJ3NldCcgPT4gJ2ltcG9zdGEnLA0KJ3Jlc2V0JyA9PiAncmVpbXBvc3RhJywNCidyZWxhdGl2ZScgPT4gJ1BlcmNvcnNvIHJlbGF0aXZvIHBlciBsYSBkZXN0aW5hemlvbmUnLA0KDQoneWVzJyA9PiAnU2knLA0KJ25vJyA9PiAnTm8nLA0KJ2JhY2snID0+ICdpbmRpZXRybycsDQonZGVzdGluYXRpb24nID0+ICdEZXN0aW5hemlvbmUnLA0KJ3N5bWxpbmsnID0+ICdMaW5rIHNpbWJvbGljbycsDQonbm9fb3V0cHV0JyA9PiAnbm8gb3V0cHV0JywNCg0KJ3VzZXInID0+ICdVc2VyJywNCidwYXNzd29yZCcgPT4gJ1Bhc3N3b3JkJywNCidhZGQnID0+ICdhZ2dpdW5naScsDQonYWRkX2Jhc2ljX2F1dGgnID0+ICdhZ2dpdW5naSBhdXRlbnRpY2F6aW9uZSBiYXNlJywNCg0KJ3VwbG9hZGVkJyA9PiAnIlslMV0iIOggc3RhdG8gY2FyaWNhdG8uJywNCidub3RfdXBsb2FkZWQnID0+ICciWyUxXSIgbm9uIOggc3RhdG8gY2FyaWNhdG8uJywNCidhbHJlYWR5X2V4aXN0cycgPT4gJyJbJTFdIiBlc2lzdGUgZ2ngLicsDQonY3JlYXRlZCcgPT4gJyJbJTFdIiDoIHN0YXRvIGNyZWF0by4nLA0KJ25vdF9jcmVhdGVkJyA9PiAnIlslMV0iIG5vbiDoIHN0YXRvIGNyZWF0by4nLA0KJ3JlYWxseV9kZWxldGUnID0+ICdDYW5jZWxsbyBxdWVzdGkgZmlsZSA/JywNCidkZWxldGVkJyA9PiAiUXVlc3RpIGZpbGUgc29ubyBzdGF0aSBjYW5jZWxsYXRpOlxuWyUxXSIsDQonbm90X2RlbGV0ZWQnID0+ICJRdWVzdGkgZmlsZSBub24gcG9zc29ubyBlc3NlcmUgY2FuY2VsbGF0aTpcblslMV0iLA0KJ3JlbmFtZV9maWxlJyA9PiAnRmlsZSByaW5vbWluYXRvOicsDQoncmVuYW1lZCcgPT4gJyJbJTFdIiDoIHN0YXRvIHJpbm9taW5hdG8gaW4gIlslMl0iLicsDQonbm90X3JlbmFtZWQnID0+ICciWyUxXSBub24g6CBzdGF0byByaW5vbWluYXRvIGluICJbJTJdIi4nLA0KJ21vdmVfZmlsZXMnID0+ICdTcG9zdG8gcXVlc3RpIGZpbGU6JywNCidtb3ZlZCcgPT4gIlF1ZXN0aSBmaWxlIHNvbm8gc3RhdGkgc3Bvc3RhdGkgaW4gXCJbJTJdXCI6XG5bJTFdIiwNCidub3RfbW92ZWQnID0+ICJRdWVzdGkgZmlsZSBub24gcG9zc29ubyBlc3NlcmUgc3Bvc3RhdGkgaW4gXCJbJTJdXCI6XG5bJTFdIiwNCidjb3B5X2ZpbGVzJyA9PiAnQ29waW8gcXVlc3RpIGZpbGUnLA0KJ2NvcGllZCcgPT4gIlF1ZXN0aSBmaWxlIHNvbm8gc3RhdGkgY29waWF0aSBpbiBcIlslMl1cIjpcblslMV0iLA0KJ25vdF9jb3BpZWQnID0+ICJRdWVzdGkgZmlsZSBub24gcG9zc29ubyBlc3NlcmUgY29waWF0aSBpbiBcIlslMl1cIjpcblslMV0iLA0KJ25vdF9lZGl0ZWQnID0+ICciWyUxXSIgbm9uIHB1PyBlc3NlcmUgbW9kaWZpY2F0by4nLA0KJ2V4ZWN1dGVkJyA9PiAiXCJbJTFdXCIg6CBzdGF0byBlc2VndWl0byBjb24gc3VjY2Vzc286XG57JTJ9IiwNCidub3RfZXhlY3V0ZWQnID0+ICJcIlslMV1cIiBub24g6CBzdGF0byBlc2VndWl0byBjb24gc3VjY2Vzc29cbnslMn0iLA0KJ3NhdmVkJyA9PiAnIlslMV0iIOggc3RhdG8gc2FsdmF0by4nLA0KJ25vdF9zYXZlZCcgPT4gJyJbJTFdIiBub24g6CBzdGF0byBzYWx2YXRvLicsDQonc3ltbGlua2VkJyA9PiAnSWwgbGluayBzaWFtYm9saWNvIGRhICJbJTJdIiBhICJbJTFdIiDoIHN0YXRvIGNyZWF0by4nLA0KJ25vdF9zeW1saW5rZWQnID0+ICdJbCBsaW5rIHNpYW1ib2xpY28gZGEgIlslMl0iIGEgIlslMV0iIG5vbiDoIHN0YXRvIGNyZWF0by4nLA0KJ3Blcm1pc3Npb25fZm9yJyA9PiAnUGVybWVzc2kgZGkgIlslMV0iOicsDQoncGVybWlzc2lvbl9zZXQnID0+ICdJIHBlcm1lc3NpIGRpICJbJTFdIiBzb25vIHN0YXRpIGltcG9zdGF0aSBbJTJdLicsDQoncGVybWlzc2lvbl9ub3Rfc2V0JyA9PiAnSSBwZXJtZXNzaSBkaSAiWyUxXSIgbm9uIHNvbm8gc3RhdGkgaW1wb3N0YXRpIFslMl0uJywNCidub3RfcmVhZGFibGUnID0+ICciWyUxXSIgbm9uIHB1PyBlc3NlcmUgbGV0dG8uJw0KCQkpOw0KDQoJY2FzZSAnbmwnOg0KDQoJCSRkYXRlX2Zvcm1hdCA9ICduL2oveSBIOmk6cyc7DQoJCSR3b3JkX2NoYXJzZXQgPSAnSVNPLTg4NTktMSc7DQoNCgkJcmV0dXJuIGFycmF5KA0KJ2RpcmVjdG9yeScgPT4gJ0RpcmVjdG9yeScsDQonZmlsZScgPT4gJ0Jlc3RhbmQnLA0KJ2ZpbGVuYW1lJyA9PiAnQmVzdGFuZHNuYWFtJywNCg0KJ3NpemUnID0+ICdHcm9vdHRlJywNCidwZXJtaXNzaW9uJyA9PiAnQmV2b2VnZGhlaWQnLA0KJ293bmVyJyA9PiAnRWlnZW5hYXInLA0KJ2dyb3VwJyA9PiAnR3JvZXAnLA0KJ290aGVyJyA9PiAnQW5kZXJlbicsDQonZnVuY3Rpb25zJyA9PiAnRnVuY3RpZXMnLA0KDQoncmVhZCcgPT4gJ2xlemVuJywNCid3cml0ZScgPT4gJ3NjaHJpanZlbicsDQonZXhlY3V0ZScgPT4gJ3VpdHZvZXJlbicsDQoNCidjcmVhdGVfc3ltbGluaycgPT4gJ21hYWsgc3ltbGluaycsDQonZGVsZXRlJyA9PiAndmVyd2lqZGVyZW4nLA0KJ3JlbmFtZScgPT4gJ2hlcm5vZW1lbicsDQonbW92ZScgPT4gJ3ZlcnBsYWF0c2VuJywNCidjb3B5JyA9PiAna29waWVyZW4nLA0KJ2VkaXQnID0+ICdiZXdlcmtlbicsDQonZG93bmxvYWQnID0+ICdkb3dubG9hZGVuJywNCid1cGxvYWQnID0+ICd1cGxvYWRlbicsDQonY3JlYXRlJyA9PiAnYWFubWFrZW4nLA0KJ2NoYW5nZScgPT4gJ3ZlcmFuZGVyZW4nLA0KJ3NhdmUnID0+ICdvcHNsYWFuJywNCidzZXQnID0+ICdpbnN0ZWxsZW4nLA0KJ3Jlc2V0JyA9PiAncmVzZXR0ZW4nLA0KJ3JlbGF0aXZlJyA9PiAnUmVsYXRpZWYgcGF0IG5hYXIgZG9lbCcsDQoNCid5ZXMnID0+ICdKYScsDQonbm8nID0+ICdOZWUnLA0KJ2JhY2snID0+ICd0ZXJ1ZycsDQonZGVzdGluYXRpb24nID0+ICdCZXN0ZW1taW5nJywNCidzeW1saW5rJyA9PiAnU3ltbGluaycsDQonbm9fb3V0cHV0JyA9PiAnZ2VlbiBvdXRwdXQnLA0KDQondXNlcicgPT4gJ0dlYnJ1aWtlcicsDQoncGFzc3dvcmQnID0+ICdXYWNodHdvb3JkJywNCidhZGQnID0+ICd0b2V2b2VnZW4nLA0KJ2FkZF9iYXNpY19hdXRoJyA9PiAnYWRkIGJhc2ljLWF1dGhlbnRpZmljYXRpb24nLA0KDQondXBsb2FkZWQnID0+ICciWyUxXSIgaXMgdmVyc3R1dXJkLicsDQonbm90X3VwbG9hZGVkJyA9PiAnIlslMV0iIGthbiBuaWV0IHdvcmRlbiB2ZXJzdHV1cmQuJywNCidhbHJlYWR5X2V4aXN0cycgPT4gJyJbJTFdIiBiZXN0YWF0IGFsLicsDQonY3JlYXRlZCcgPT4gJyJbJTFdIiBpcyBhYW5nZW1hYWt0LicsDQonbm90X2NyZWF0ZWQnID0+ICciWyUxXSIga2FuIG5pZXQgd29yZGVuIGFhbmdlbWFha3QuJywNCidyZWFsbHlfZGVsZXRlJyA9PiAnRGV6ZSBiZXN0YW5kZW4gdmVyd2lqZGVyZW4/JywNCidkZWxldGVkJyA9PiAiRGV6ZSBiZXN0YW5kZW4gemlqbiB2ZXJ3aWpkZXJkOlxuWyUxXSIsDQonbm90X2RlbGV0ZWQnID0+ICJEZXplIGJlc3RhbmRlbiBrb25kZW4gbmlldCB3b3JkZW4gdmVyd2lqZGVyZDpcblslMV0iLA0KJ3JlbmFtZV9maWxlJyA9PiAnQmVzdGFuZHNuYWFtIHZlcmFuZGVyZW46JywNCidyZW5hbWVkJyA9PiAnIlslMV0iIGhlZXQgbnUgIlslMl0iLicsDQonbm90X3JlbmFtZWQnID0+ICciWyUxXSBrb24gbmlldCB3b3JkZW4gdmVyYW5kZXJkIGluICJbJTJdIi4nLA0KJ21vdmVfZmlsZXMnID0+ICdWZXJwbGFhdHMgZGV6ZSBiZXN0YW5kZW46JywNCidtb3ZlZCcgPT4gIkRlemUgYmVzdGFuZGVuIHppam4gdmVycGxhYXRzdCBuYWFyIFwiWyUyXVwiOlxuWyUxXSIsDQonbm90X21vdmVkJyA9PiAiS2FuIGRlemUgYmVzdGFuZGVuIG5pZXQgdmVycGxhYXRzZW4gbmFhciBcIlslMl1cIjpcblslMV0iLA0KJ2NvcHlfZmlsZXMnID0+ICdLb3BpZWVyIGRlemUgYmVzdGFuZGVuOicsDQonY29waWVkJyA9PiAiRGV6ZSBiZXN0YW5kZW4gemlqbiBnZWtvcGllZXJkIG5hYXIgXCJbJTJdXCI6XG5bJTFdIiwNCidub3RfY29waWVkJyA9PiAiRGV6ZSBiZXN0YW5kZW4ga3VubmVuIG5pZXQgd29yZGVuIGdla29waWVlcmQgbmFhciBcIlslMl1cIjpcblslMV0iLA0KJ25vdF9lZGl0ZWQnID0+ICciWyUxXSIga2FuIG5pZXQgd29yZGVuIGJld2Vya3QuJywNCidleGVjdXRlZCcgPT4gIlwiWyUxXVwiIGlzIG1ldCBzdWNjZXMgdWl0Z2V2b2VyZDpcbnslMn0iLA0KJ25vdF9leGVjdXRlZCcgPT4gIlwiWyUxXVwiIGlzIG5pZXQgZ29lZCB1aXRnZXZvZXJkOlxueyUyfSIsDQonc2F2ZWQnID0+ICciWyUxXSIgaXMgb3BnZXNsYWdlbi4nLA0KJ25vdF9zYXZlZCcgPT4gJyJbJTFdIiBpcyBuaWV0IG9wZ2VzbGFnZW4uJywNCidzeW1saW5rZWQnID0+ICdTeW1saW5rIHZhbiAiWyUyXSIgbmFhciAiWyUxXSIgaXMgYWFuZ2VtYWFrdC4nLA0KJ25vdF9zeW1saW5rZWQnID0+ICdTeW1saW5rIHZhbiAiWyUyXSIgbmFhciAiWyUxXSIgaXMgbmlldCBhYW5nZW1hYWt0LicsDQoncGVybWlzc2lvbl9mb3InID0+ICdCZXZvZWdkaGVpZCB2b29yICJbJTFdIjonLA0KJ3Blcm1pc3Npb25fc2V0JyA9PiAnQmV2b2VnZGhlaWQgdmFuICJbJTFdIiBpcyBpbmdlc3RlbGQgb3AgWyUyXS4nLA0KJ3Blcm1pc3Npb25fbm90X3NldCcgPT4gJ0Jldm9lZ2RoZWlkIHZhbiAiWyUxXSIgaXMgbmlldCBpbmdlc3RlbGQgb3AgWyUyXS4nLA0KJ25vdF9yZWFkYWJsZScgPT4gJyJbJTFdIiBrYW4gbmlldCB3b3JkZW4gZ2VsZXplbi4nDQoJCSk7DQoNCgljYXNlICdzZSc6DQoNCgkJJGRhdGVfZm9ybWF0ID0gJ24vai95IEg6aTpzJzsNCgkJJHdvcmRfY2hhcnNldCA9ICdJU08tODg1OS0xJzsNCiANCgkJcmV0dXJuIGFycmF5KA0KJ2RpcmVjdG9yeScgPT4gJ01hcHAnLA0KJ2ZpbGUnID0+ICdGaWwnLA0KJ2ZpbGVuYW1lJyA9PiAnRmlsbmFtbicsDQogDQonc2l6ZScgPT4gJ1N0b3JsZWsnLA0KJ3Blcm1pc3Npb24nID0+ICdTP2tlcmhldHNuaXY/JywNCidvd25lcicgPT4gJz9nYXJlJywNCidncm91cCcgPT4gJ0dydXBwJywNCidvdGhlcicgPT4gJ0FuZHJhJywNCidmdW5jdGlvbnMnID0+ICdGdW5rdGlvbmVyJywNCiANCidyZWFkJyA9PiAnTD9zJywNCid3cml0ZScgPT4gJ1Nrcml2JywNCidleGVjdXRlJyA9PiAnVXRmP3InLA0KIA0KJ2NyZWF0ZV9zeW1saW5rJyA9PiAnU2thcGEgc3ltbGluaycsDQonZGVsZXRlJyA9PiAnUmFkZXJhJywNCidyZW5hbWUnID0+ICdCeXQgbmFtbicsDQonbW92ZScgPT4gJ0ZseXR0YScsDQonY29weScgPT4gJ0tvcGllcmEnLA0KJ2VkaXQnID0+ICc/bmRyYScsDQonZG93bmxvYWQnID0+ICdMYWRkYSBuZXInLA0KJ3VwbG9hZCcgPT4gJ0xhZGRhIHVwcCcsDQonY3JlYXRlJyA9PiAnU2thcGEnLA0KJ2NoYW5nZScgPT4gJz9uZHJhJywNCidzYXZlJyA9PiAnU3BhcmEnLA0KJ3NldCcgPT4gJ01hcmtlcmEnLA0KJ3Jlc2V0JyA9PiAnVD9tJywNCidyZWxhdGl2ZScgPT4gJ1JlbGF0aXZlIHBhdGggdG8gdGFyZ2V0JywNCiANCid5ZXMnID0+ICdKYScsDQonbm8nID0+ICdOZWonLA0KJ2JhY2snID0+ICdUaWxsYmFrcycsDQonZGVzdGluYXRpb24nID0+ICdEZXN0aW5hdGlvbicsDQonc3ltbGluaycgPT4gJ1N5bWxpbmsnLA0KJ25vX291dHB1dCcgPT4gJ25vIG91dHB1dCcsDQogDQondXNlcicgPT4gJ0Fudj9uZGFyZScsDQoncGFzc3dvcmQnID0+ICdMP3Nlbm9yZCcsDQonYWRkJyA9PiAnTD9nZyB0aWxsJywNCidhZGRfYmFzaWNfYXV0aCcgPT4gJ2FkZCBiYXNpYy1hdXRoZW50aWZpY2F0aW9uJywNCiANCid1cGxvYWRlZCcgPT4gJyJbJTFdIiBoYXIgbGFkZGF0cyB1cHAuJywNCidub3RfdXBsb2FkZWQnID0+ICciWyUxXSIga3VuZGUgaW50ZSBsYWRkYXMgdXBwLicsDQonYWxyZWFkeV9leGlzdHMnID0+ICciWyUxXSIgZmlubnMgcmVkYW4uJywNCidjcmVhdGVkJyA9PiAnIlslMV0iIGhhciBza2FwYXRzLicsDQonbm90X2NyZWF0ZWQnID0+ICciWyUxXSIga3VuZGUgaW50ZSBza2FwYXMuJywNCidyZWFsbHlfZGVsZXRlJyA9PiAnUmFkZXJhIGRlc3NhIGZpbGVyPycsDQonZGVsZXRlZCcgPT4gIkRlIGg/ciBmaWxlcm5hIGhhciByYWRlcmF0czpcblslMV0iLA0KJ25vdF9kZWxldGVkJyA9PiAiRGVzc2EgZmlsZXIga3VuZGUgaW50ZSByYWRlcmFzOlxuWyUxXSIsDQoncmVuYW1lX2ZpbGUnID0+ICdCeXQgbmFtbiBwPyBmaWw6JywNCidyZW5hbWVkJyA9PiAnIlslMV0iIGhhciBieXR0IG5hbW4gdGlsbCAiWyUyXSIuJywNCidub3RfcmVuYW1lZCcgPT4gJyJbJTFdIGt1bmRlIGludGUgZD9wYXMgb20gdGlsbCAiWyUyXSIuJywNCidtb3ZlX2ZpbGVzJyA9PiAnRmx5dHRhIGRlc3NhIGZpbGVyOicsDQonbW92ZWQnID0+ICJEZXNzYSBmaWxlciBoYXIgZmx5dHRhdHMgdGlsbCBcIlslMl1cIjpcblslMV0iLA0KJ25vdF9tb3ZlZCcgPT4gIkRlc3NhIGZpbGVyIGt1bmRlIGludGUgZmx5dHRhcyB0aWxsIFwiWyUyXVwiOlxuWyUxXSIsDQonY29weV9maWxlcycgPT4gJ0tvcGllcmEgZGVzc2EgZmlsZXI6JywNCidjb3BpZWQnID0+ICJEZXNzYSBmaWxlciBoYXIga29waWVyYXRzIHRpbGwgXCJbJTJdXCI6XG5bJTFdIiwNCidub3RfY29waWVkJyA9PiAiRGVzc2EgZmlsZXIga3VuZGUgaW50ZSBrb3BpZXJhcyB0aWxsIFwiWyUyXVwiOlxuWyUxXSIsDQonbm90X2VkaXRlZCcgPT4gJyJbJTFdIiBrYW4gaW50ZSA/bmRyYXMuJywNCidleGVjdXRlZCcgPT4gIlwiWyUxXVwiIGhhciB1dGY/cnRzOlxueyUyfSIsDQonbm90X2V4ZWN1dGVkJyA9PiAiXCJbJTFdXCIga3VuZGUgaW50ZSB1dGY/cmFzOlxueyUyfSIsDQonc2F2ZWQnID0+ICciWyUxXSIgaGFyIHNwYXJhdHMuJywNCidub3Rfc2F2ZWQnID0+ICciWyUxXSIga3VuZGUgaW50ZSBzcGFyYXMuJywNCidzeW1saW5rZWQnID0+ICdTeW1saW5rIGZyP24gIlslMl0iIHRpbGwgIlslMV0iIGhhciBza2FwYXRzLicsDQonbm90X3N5bWxpbmtlZCcgPT4gJ1N5bWxpbmsgZnI/biAiWyUyXSIgdGlsbCAiWyUxXSIga3VuZGUgaW50ZSBza2FwYXMuJywNCidwZXJtaXNzaW9uX2ZvcicgPT4gJ1I/dHRpZ2hldGVyIGY/ciAiWyUxXSI6JywNCidwZXJtaXNzaW9uX3NldCcgPT4gJ1I/dHRpZ2hldGVyIGY/ciAiWyUxXSIgP25kcmFkZXMgdGlsbCBbJTJdLicsDQoncGVybWlzc2lvbl9ub3Rfc2V0JyA9PiAnUGVybWlzc2lvbiBvZiAiWyUxXSIgY291bGQgbm90IGJlIHNldCB0byBbJTJdLicsDQonbm90X3JlYWRhYmxlJyA9PiAnIlslMV0iIGthbiBpbnRlIGw/c2FzLicNCgkJKTsNCg0KCWNhc2UgJ3NwJzoNCg0KCQkkZGF0ZV9mb3JtYXQgPSAnai9uL3kgSDppOnMnOw0KCQkkd29yZF9jaGFyc2V0ID0gJ0lTTy04ODU5LTEnOw0KDQoJCXJldHVybiBhcnJheSgNCidkaXJlY3RvcnknID0+ICdEaXJlY3RvcmlvJywNCidmaWxlJyA9PiAnQXJjaGl2bycsDQonZmlsZW5hbWUnID0+ICdOb21icmUgQXJjaGl2bycsDQoNCidzaXplJyA9PiAnVGFtYT9vJywNCidwZXJtaXNzaW9uJyA9PiAnUGVybWlzb3MnLA0KJ293bmVyJyA9PiAnUHJvcGlldGFyaW8nLA0KJ2dyb3VwJyA9PiAnR3J1cG8nLA0KJ290aGVyJyA9PiAnT3Ryb3MnLA0KJ2Z1bmN0aW9ucycgPT4gJ0Z1bmNpb25lcycsDQoNCidyZWFkJyA9PiAnbGVjdHVyYScsDQond3JpdGUnID0+ICdlc2NyaXR1cmEnLA0KJ2V4ZWN1dGUnID0+ICdlamVjdWNpP24nLA0KDQonY3JlYXRlX3N5bWxpbmsnID0+ICdjcmVhciBlbmxhY2UnLA0KJ2RlbGV0ZScgPT4gJ2JvcnJhcicsDQoncmVuYW1lJyA9PiAncmVub21icmFyJywNCidtb3ZlJyA9PiAnbW92ZXInLA0KJ2NvcHknID0+ICdjb3BpYXInLA0KJ2VkaXQnID0+ICdlZGl0YXInLA0KJ2Rvd25sb2FkJyA9PiAnYmFqYXInLA0KJ3VwbG9hZCcgPT4gJ3N1YmlyJywNCidjcmVhdGUnID0+ICdjcmVhcicsDQonY2hhbmdlJyA9PiAnY2FtYmlhcicsDQonc2F2ZScgPT4gJ3NhbHZhcicsDQonc2V0JyA9PiAnc2V0ZWFyJywNCidyZXNldCcgPT4gJ3Jlc2V0ZWFyJywNCidyZWxhdGl2ZScgPT4gJ1BhdGggcmVsYXRpdm8nLA0KDQoneWVzJyA9PiAnU2knLA0KJ25vJyA9PiAnTm8nLA0KJ2JhY2snID0+ICdhdHI/cycsDQonZGVzdGluYXRpb24nID0+ICdEZXN0aW5vJywNCidzeW1saW5rJyA9PiAnRW5sYWNlJywNCidub19vdXRwdXQnID0+ICdzaW4gc2FsaWRhJywNCg0KJ3VzZXInID0+ICdVc3VhcmlvJywNCidwYXNzd29yZCcgPT4gJ0NsYXZlJywNCidhZGQnID0+ICdhZ3JlZ2FyJywNCidhZGRfYmFzaWNfYXV0aCcgPT4gJ2FncmVnYXIgYXV0ZW50aWZpY2FjaT9uIGI/c2ljYScsDQoNCid1cGxvYWRlZCcgPT4gJyJbJTFdIiBoYSBzaWRvIHN1Ymlkby4nLA0KJ25vdF91cGxvYWRlZCcgPT4gJyJbJTFdIiBubyBwdWRvIHNlciBzdWJpZG8uJywNCidhbHJlYWR5X2V4aXN0cycgPT4gJyJbJTFdIiB5YSBleGlzdGUuJywNCidjcmVhdGVkJyA9PiAnIlslMV0iIGhhIHNpZG8gY3JlYWRvLicsDQonbm90X2NyZWF0ZWQnID0+ICciWyUxXSIgbm8gcHVkbyBzZXIgY3JlYWRvLicsDQoncmVhbGx5X2RlbGV0ZScgPT4gJz9Cb3JyYSBlc3RvcyBhcmNoaXZvcz8nLA0KJ2RlbGV0ZWQnID0+ICJFc3RvcyBhcmNoaXZvcyBoYW4gc2lkbyBib3JyYWRvczpcblslMV0iLA0KJ25vdF9kZWxldGVkJyA9PiAiRXN0b3MgYXJjaGl2b3Mgbm8gcHVkaWVyb24gc2VyIGJvcnJhZG9zOlxuWyUxXSIsDQoncmVuYW1lX2ZpbGUnID0+ICdSZW5vbWJyYSBhcmNoaXZvOicsDQoncmVuYW1lZCcgPT4gJyJbJTFdIiBoYSBzaWRvIHJlbm9tYnJhZG8gYSAiWyUyXSIuJywNCidub3RfcmVuYW1lZCcgPT4gJyJbJTFdIG5vIHB1ZG8gc2VyIHJlbm9tYnJhZG8gYSAiWyUyXSIuJywNCidtb3ZlX2ZpbGVzJyA9PiAnTW92ZXIgZXN0b3MgYXJjaGl2b3M6JywNCidtb3ZlZCcgPT4gIkVzdG9zIGFyY2hpdm9zIGhhbiBzaWRvIG1vdmlkb3MgYSBcIlslMl1cIjpcblslMV0iLA0KJ25vdF9tb3ZlZCcgPT4gIkVzdG9zIGFyY2hpdm9zIG5vIHB1ZGllcm9uIHNlciBtb3ZpZG9zIGEgXCJbJTJdXCI6XG5bJTFdIiwNCidjb3B5X2ZpbGVzJyA9PiAnQ29waWFyIGVzdG9zIGFyY2hpdm9zOicsDQonY29waWVkJyA9PiAiRXN0b3MgYXJjaGl2b3MgaGFuIHNpZG8gY29waWFkb3MgYSAgXCJbJTJdXCI6XG5bJTFdIiwNCidub3RfY29waWVkJyA9PiAiRXN0b3MgYXJjaGl2b3Mgbm8gcHVkaWVyb24gc2VyIGNvcGlhZG9zIFwiWyUyXVwiOlxuWyUxXSIsDQonbm90X2VkaXRlZCcgPT4gJyJbJTFdIiBubyBwdWRvIHNlciBlZGl0YWRvLicsDQonZXhlY3V0ZWQnID0+ICJcIlslMV1cIiBoYSBzaWRvIGVqZWN1dGFkbyBjb3JyZWN0YW1lbnRlOlxueyUyfSIsDQonbm90X2V4ZWN1dGVkJyA9PiAiXCJbJTFdXCIgbm8gcHVkbyBzZXIgZWplY3V0YWRvIGNvcnJlY3RhbWVudGU6XG57JTJ9IiwNCidzYXZlZCcgPT4gJyJbJTFdIiBoYSBzaWRvIHNhbHZhZG8uJywNCidub3Rfc2F2ZWQnID0+ICciWyUxXSIgbm8gcHVkbyBzZXIgc2FsdmFkby4nLA0KJ3N5bWxpbmtlZCcgPT4gJ0VubGFjZSBkZXNkZSAiWyUyXSIgYSAiWyUxXSIgaGEgc2lkbyBjcmVhZG8uJywNCidub3Rfc3ltbGlua2VkJyA9PiAnRW5sYWNlIGRlc2RlICJbJTJdIiBhICJbJTFdIiBubyBwdWRvIHNlciBjcmVhZG8uJywNCidwZXJtaXNzaW9uX2ZvcicgPT4gJ1Blcm1pc29zIGRlICJbJTFdIjonLA0KJ3Blcm1pc3Npb25fc2V0JyA9PiAnUGVybWlzb3MgZGUgIlslMV0iIGZ1ZXJvbiBzZXRlYWRvcyBhIFslMl0uJywNCidwZXJtaXNzaW9uX25vdF9zZXQnID0+ICdQZXJtaXNvcyBkZSAiWyUxXSIgbm8gcHVkbyBzZXIgc2V0ZWFkbyBhIFslMl0uJywNCidub3RfcmVhZGFibGUnID0+ICciWyUxXSIgbm8gcHVkbyBzZXIgbGU/ZG8uJw0KCQkpOw0KDQoJY2FzZSAnZGsnOg0KDQoJCSRkYXRlX2Zvcm1hdCA9ICduL2oveSBIOmk6cyc7DQoJCSR3b3JkX2NoYXJzZXQgPSAnSVNPLTg4NTktMSc7DQoNCgkJcmV0dXJuIGFycmF5KA0KJ2RpcmVjdG9yeScgPT4gJ01hcHBlJywNCidmaWxlJyA9PiAnRmlsJywNCidmaWxlbmFtZScgPT4gJ0ZpbG5hdm4nLA0KDQonc2l6ZScgPT4gJ1N0P3JyZWxzZScsDQoncGVybWlzc2lvbicgPT4gJ1JldHRpZ2hlZCcsDQonb3duZXInID0+ICdFamVyJywNCidncm91cCcgPT4gJ0dydXBwZScsDQonb3RoZXInID0+ICdBbmRyZScsDQonZnVuY3Rpb25zJyA9PiAnRnVua3Rpb25lcicsDQoNCidyZWFkJyA9PiAnbD9zJywNCid3cml0ZScgPT4gJ3Nrcml2JywNCidleGVjdXRlJyA9PiAnaz9yJywNCg0KJ2NyZWF0ZV9zeW1saW5rJyA9PiAnb3ByZXQgc3ltYm9sc2sgbGluaycsDQonZGVsZXRlJyA9PiAnc2xldCcsDQoncmVuYW1lJyA9PiAnb21kP2InLA0KJ21vdmUnID0+ICdmbHl0JywNCidjb3B5JyA9PiAna29waWVyJywNCidlZGl0JyA9PiAncmVkaWdlcicsDQonZG93bmxvYWQnID0+ICdkb3dubG9hZCcsDQondXBsb2FkJyA9PiAndXBsb2FkJywNCidjcmVhdGUnID0+ICdvcHJldCcsDQonY2hhbmdlJyA9PiAnc2tpZnQnLA0KJ3NhdmUnID0+ICdnZW0nLA0KJ3NldCcgPT4gJ3M/dCcsDQoncmVzZXQnID0+ICdudWxzdGlsJywNCidyZWxhdGl2ZScgPT4gJ1JlbGF0aXYgc3RpIHRpbCB2YWxnJywNCg0KJ3llcycgPT4gJ0phJywNCidubycgPT4gJ05laicsDQonYmFjaycgPT4gJ3RpbGJhZ2UnLA0KJ2Rlc3RpbmF0aW9uJyA9PiAnRGlzdGluYXRpb24nLA0KJ3N5bWxpbmsnID0+ICdTeW1ib2xzayBsaW5rJywNCidub19vdXRwdXQnID0+ICdpbmdlbiByZXN1bHRhdCcsDQoNCid1c2VyJyA9PiAnQnJ1Z2VyJywNCidwYXNzd29yZCcgPT4gJ0tvZGVvcmQnLA0KJ2FkZCcgPT4gJ3RpbGY/aicsDQonYWRkX2Jhc2ljX2F1dGgnID0+ICd0aWxmP2ogZ3J1bmRsaWdnZW5kZSByZXR0aWdoZWRlcicsDQoNCid1cGxvYWRlZCcgPT4gJyJbJTFdIiBlciBibGV2ZXQgdXBsb2FkZWQuJywNCidub3RfdXBsb2FkZWQnID0+ICciWyUxXSIga3VubnUgaWtrZSB1cGxvYWRlcy4nLA0KJ2FscmVhZHlfZXhpc3RzJyA9PiAnIlslMV0iIGZpbmRlcyBhbGxlcmVkZS4nLA0KJ2NyZWF0ZWQnID0+ICciWyUxXSIgZXIgYmxldmV0IG9wcmV0dGV0LicsDQonbm90X2NyZWF0ZWQnID0+ICciWyUxXSIga3VubmUgaWtrZSBvcHJldHRlcy4nLA0KJ3JlYWxseV9kZWxldGUnID0+ICdTbGV0IGRpc3NlIGZpbGVyPycsDQonZGVsZXRlZCcgPT4gIkRpc3NlIGZpbGVyIGVyIGJsZXZldCBzbGV0dGV0OlxuWyUxXSIsDQonbm90X2RlbGV0ZWQnID0+ICJEaXNzZSBmaWxlciBrdW5uZSBpa2tlIHNsZXR0ZXM6XG5bJTFdIiwNCidyZW5hbWVfZmlsZScgPT4gJ09tZD9kIGZpbDonLA0KJ3JlbmFtZWQnID0+ICciWyUxXSIgZXIgYmxldmV0IG9tZD9idCB0aWwgIlslMl0iLicsDQonbm90X3JlbmFtZWQnID0+ICciWyUxXSBrdW5uZSBpa2tlIG9tZD9iZXMgdGlsICJbJTJdIi4nLA0KJ21vdmVfZmlsZXMnID0+ICdGbHl0IGRpc3NlIGZpbGVyOicsDQonbW92ZWQnID0+ICJEaXNzZSBmaWxlciBlciBibGV2ZXQgZmx5dHRldCB0aWwgXCJbJTJdXCI6XG5bJTFdIiwNCidub3RfbW92ZWQnID0+ICJEaXNzZSBmaWxlciBrdW5uZSBpa2tlIGZseXR0ZXMgdGlsIFwiWyUyXVwiOlxuWyUxXSIsDQonY29weV9maWxlcycgPT4gJ0tvcGllciBkaXNzZSBmaWxlcjonLA0KJ2NvcGllZCcgPT4gIkRpc3NlIGZpbGVyIGVyIGtvcGllcmV0IHRpbCBcIlslMl1cIjpcblslMV0iLA0KJ25vdF9jb3BpZWQnID0+ICJEaXNzZSBmaWxlciBrdW5uZSBpa2tlIGtvcGllcmVzIHRpbCBcIlslMl1cIjpcblslMV0iLA0KJ25vdF9lZGl0ZWQnID0+ICciWyUxXSIga2FuIGlra2UgcmVkaWdlcmVzLicsDQonZXhlY3V0ZWQnID0+ICJcIlslMV1cIiBlciBibGV2ZXQgaz9ydCBrb3JyZWt0OlxueyUyfSIsDQonbm90X2V4ZWN1dGVkJyA9PiAiXCJbJTFdXCIga2FuIGlra2Ugaz9yZXMga29ycmVrdDpcbnslMn0iLA0KJ3NhdmVkJyA9PiAnIlslMV0iIGVyIGJsZXZldCBnZW10LicsDQonbm90X3NhdmVkJyA9PiAnIlslMV0iIGt1bm5lIGlra2UgZ2VtbWVzLicsDQonc3ltbGlua2VkJyA9PiAnU3ltYm9sc2sgbGluayBmcmEgIlslMl0iIHRpbCAiWyUxXSIgZXIgYmxldmV0IG9wcmV0dGV0LicsDQonbm90X3N5bWxpbmtlZCcgPT4gJ1N5bWJvbHNrIGxpbmsgZnJhICJbJTJdIiB0aWwgIlslMV0iIGt1bm5lIGlra2Ugb3ByZXR0ZXMuJywNCidwZXJtaXNzaW9uX2ZvcicgPT4gJ1JldHRpZ2hlZGVyIGZvciAiWyUxXSI6JywNCidwZXJtaXNzaW9uX3NldCcgPT4gJ1JldHRpZ2hlZGVyIGZvciAiWyUxXSIgYmxldiBzYXQgdGlsIFslMl0uJywNCidwZXJtaXNzaW9uX25vdF9zZXQnID0+ICdSZXR0aWdoZWRlciBmb3IgIlslMV0iIGt1bm5lIGlra2Ugcz90dGVzIHRpbCBbJTJdLicsDQonbm90X3JlYWRhYmxlJyA9PiAnIlslMV0iIEthbiBpa2tlIGw/c2VzLicNCgkJKTsNCg0KCWNhc2UgJ3RyJzoNCg0KCQkkZGF0ZV9mb3JtYXQgPSAnbi9qL3kgSDppOnMnOw0KCQkkd29yZF9jaGFyc2V0ID0gJ0lTTy04ODU5LTEnOw0KDQoJCXJldHVybiBhcnJheSgNCidkaXJlY3RvcnknID0+ICdLbGFzP3InLA0KJ2ZpbGUnID0+ICdEb3N5YScsDQonZmlsZW5hbWUnID0+ICdkb3N5YSBhZGknLA0KDQonc2l6ZScgPT4gJ2JveXV0dScsDQoncGVybWlzc2lvbicgPT4gJ0l6aW4nLA0KJ293bmVyJyA9PiAnc2FoaWInLA0KJ2dyb3VwJyA9PiAnR3J1cCcsDQonb3RoZXInID0+ICdEaWdlcmxlcmknLA0KJ2Z1bmN0aW9ucycgPT4gJ0ZvbmtzaXlvbmxhcicsDQoNCidyZWFkJyA9PiAnb2t1JywNCid3cml0ZScgPT4gJ3lheicsDQonZXhlY3V0ZScgPT4gJ+dhbGlzdGlyJywNCg0KJ2NyZWF0ZV9zeW1saW5rJyA9PiAneWFyYXQgc3ltbGluaycsDQonZGVsZXRlJyA9PiAnc2lsJywNCidyZW5hbWUnID0+ICdhZCBkZWdpc3RpcicsDQonbW92ZScgPT4gJ3Rhc2knLA0KJ2NvcHknID0+ICdrb3B5YWxhJywNCidlZGl0JyA9PiAnZPx6ZW5sZScsDQonZG93bmxvYWQnID0+ICdpbmRpcicsDQondXBsb2FkJyA9PiAnefxrbGUnLA0KJ2NyZWF0ZScgPT4gJ2NyZWF0ZScsDQonY2hhbmdlJyA9PiAnZGVnaXN0aXInLA0KJ3NhdmUnID0+ICdrYXlkZXQnLA0KJ3NldCcgPT4gJ2F5YXInLA0KJ3Jlc2V0JyA9PiAnc2lmaXJsYScsDQoncmVsYXRpdmUnID0+ICdIZWRlZiB5b2xhIGc/cmUnLA0KDQoneWVzJyA9PiAnRXZldCcsDQonbm8nID0+ICdIYXlpcicsDQonYmFjaycgPT4gJ0dlcmknLA0KJ2Rlc3RpbmF0aW9uJyA9PiAnSGVkZWYnLA0KJ3N5bWxpbmsnID0+ICdLP3NhIHlvbCcsDQonbm9fb3V0cHV0JyA9PiAn52lrdGkgeW9rJywNCg0KJ3VzZXInID0+ICdLdWxsYW5pY2knLA0KJ3Bhc3N3b3JkJyA9PiAnU2lmcmUnLA0KJ2FkZCcgPT4gJ2VrbGUnLA0KJ2FkZF9iYXNpY19hdXRoJyA9PiAnZWtsZSBiYXNpdC1hdXRoZW50aWZpY2F0aW9uJywNCg0KJ3VwbG9hZGVkJyA9PiAnIlslMV0iIHn8a2xlbmRpLicsDQonbm90X3VwbG9hZGVkJyA9PiAnIlslMV0iIHn8a2xlbmVtZWRpLicsDQonYWxyZWFkeV9leGlzdHMnID0+ICciWyUxXSIga3VsbGFuaWxtYWt0YS4nLA0KJ2NyZWF0ZWQnID0+ICciWyUxXSIgb2x1c3R1cnVsZHUuJywNCidub3RfY3JlYXRlZCcgPT4gJyJbJTFdIiBvbHVzdHVydWxhbWFkaS4nLA0KJ3JlYWxseV9kZWxldGUnID0+ICdCdSBkb3N5YWxhcmkgc2lsbWVrIGlzdGVkaWdpbml6ZGVuIGVtaW5taXNpbml6PycsDQonZGVsZXRlZCcgPT4gIkJ1IGRvc3lhbGFyIHNpbGluZGk6XG5bJTFdIiwNCidub3RfZGVsZXRlZCcgPT4gIkJ1IGRvc3lhbGFyIHNpbGluZW1lZGk6XG5bJTFdIiwNCidyZW5hbWVfZmlsZScgPT4gJ0FkaSBkZWdpc2VuIGRvc3lhOicsDQoncmVuYW1lZCcgPT4gJyJbJTFdIiBhZGlsaSBkb3N5YW5pbiB5ZW5pIGFkaSAiWyUyXSIuJywNCidub3RfcmVuYW1lZCcgPT4gJyJbJTFdIGFkaSBkZWdpc3RpcmlsZW1lZGkgIlslMl0iIGlsZS4nLA0KJ21vdmVfZmlsZXMnID0+ICdUYXNpbmFuIGRvc3lhbGFyOicsDQonbW92ZWQnID0+ICJCdSBkb3N5YWxhcmkgdGFzaWRpZ2luaXogeWVyIFwiWyUyXVwiOlxuWyUxXSIsDQonbm90X21vdmVkJyA9PiAiQnUgZG9zeWFsYXJpIHRhc2l5YW1hZGlnaW5peiB5ZXIgXCJbJTJdXCI6XG5bJTFdIiwNCidjb3B5X2ZpbGVzJyA9PiAnS29weWFsYW5hbiBkb3N5YWxhcjonLA0KJ2NvcGllZCcgPT4gIkJ1IGRvc3lhbGFyIGtvcHlhbGFuZGkgXCJbJTJdXCI6XG5bJTFdIiwNCidub3RfY29waWVkJyA9PiAiQnUgZG9zeWFsYXIga29weWFsYW5hbWl5b3IgXCJbJTJdXCI6XG5bJTFdIiwNCidub3RfZWRpdGVkJyA9PiAnIlslMV0iIGT8emVubGVuZW1peW9yLicsDQonZXhlY3V0ZWQnID0+ICJcIlslMV1cIiBiYXNhcml5bGEg52FsaXN0aXJpbGRpOlxueyUyfSIsDQonbm90X2V4ZWN1dGVkJyA9PiAiXCJbJTFdXCIg52FsaXN0aXJpbGFtYWRpOlxueyUyfSIsDQonc2F2ZWQnID0+ICciWyUxXSIga2F5ZGVkaWxkaS4nLA0KJ25vdF9zYXZlZCcgPT4gJyJbJTFdIiBrYXlkZWRpbGVtZWRpLicsDQonc3ltbGlua2VkJyA9PiAnIlslMl0iIGRlbiAiWyUxXSIgZSBrP3NheW9sIG9sdT90dXJ1bGR1LicsDQonbm90X3N5bWxpbmtlZCcgPT4gJyJbJTJdImRlbiAiWyUxXSIgZSBrP3NheW9sIG9sdT90dXJ1bGFtYWQ/LicsDQoncGVybWlzc2lvbl9mb3InID0+ICdJemlubGVyICJbJTFdIjonLA0KJ3Blcm1pc3Npb25fc2V0JyA9PiAnSXppbmxlciAiWyUxXSIgZGVnaXN0aXJpbGRpIFslMl0uJywNCidwZXJtaXNzaW9uX25vdF9zZXQnID0+ICdJemlubGVyICJbJTFdIiBkZWdpc3RpcmlsZW1lZGkgWyUyXS4nLA0KJ25vdF9yZWFkYWJsZScgPT4gJyJbJTFdIiBva3VuYW1peW9yLicNCgkJKTsNCg0KCWNhc2UgJ2NzJzoNCg0KCQkkZGF0ZV9mb3JtYXQgPSAnZC5tLnkgSDppOnMnOw0KCQkkd29yZF9jaGFyc2V0ID0gJ1VURi04JzsNCg0KCQlyZXR1cm4gYXJyYXkoDQonZGlyZWN0b3J5JyA9PiAnQWRyZXM/Pz+ZJywNCidmaWxlJyA9PiAnU291Ym9yJywNCidmaWxlbmFtZScgPT4gJ0ptP6lubyBzb3Vib3J1JywNCg0KJ3NpemUnID0+ICdWZWxpa29zdCcsDQoncGVybWlzc2lvbicgPT4gJ1ByPz92YScsDQonb3duZXInID0+ICdWbGFzdG4/rWsnLA0KJ2dyb3VwJyA9PiAnU2t1cGluYScsDQonb3RoZXInID0+ICdPc3RhdG4/rScsDQonZnVuY3Rpb25zJyA9PiAnRnVua2NlJywNCg0KJ3JlYWQnID0+ICc/jHRlbj+tJywNCid3cml0ZScgPT4gJ1o/P3BpcycsDQonZXhlY3V0ZScgPT4gJ1Nwb3U/P3Q/m24/rScsDQoNCidjcmVhdGVfc3ltbGluaycgPT4gJ1Z5dHZvP5lpdCBzeW1ib2xpY2s/vSBvZGtheicsDQonZGVsZXRlJyA9PiAnU21hemF0JywNCidyZW5hbWUnID0+ICdQP5llam1lbm92YXQnLA0KJ21vdmUnID0+ICdQP5llc3Vub3V0JywNCidjb3B5JyA9PiAnWmtvcD+tcm92YXQnLA0KJ2VkaXQnID0+ICdPdGV2P5k/rXQnLA0KJ2Rvd25sb2FkJyA9PiAnU3Q/P2hub3V0JywNCid1cGxvYWQnID0+ICdOYWhyYWogbmEgc2VydmVyJywNCidjcmVhdGUnID0+ICdWeXR2bz+ZaXQnLA0KJ2NoYW5nZScgPT4gJ1ptP5tuaXQnLA0KJ3NhdmUnID0+ICdVbG8/vml0JywNCidzZXQnID0+ICdOYXN0YXZpdCcsDQoncmVzZXQnID0+ICd6cD+bdCcsDQoncmVsYXRpdmUnID0+ICdSZWxhdGlmJywNCg0KJ3llcycgPT4gJ0FubycsDQonbm8nID0+ICdOZScsDQonYmFjaycgPT4gJ1pwP5t0JywNCidkZXN0aW5hdGlvbicgPT4gJ0Rlc3RpbmF0aW9uJywNCidzeW1saW5rJyA9PiAnU3ltYm9saWNrP70gb2RrYXonLA0KJ25vX291dHB1dCcgPT4gJ1ByPz96ZG4/vSB2P71zdHVwJywNCg0KJ3VzZXInID0+ICdVP75pdmF0ZWwnLA0KJ3Bhc3N3b3JkJyA9PiAnSGVzbG8nLA0KJ2FkZCcgPT4gJ1A/mWlkYXQnLA0KJ2FkZF9iYXNpY19hdXRoJyA9PiAncD+ZaWRlaiB6Pz9rbGFkbj+tIGF1dGVudGl6YWNpJywNCg0KJ3VwbG9hZGVkJyA9PiAnU291Ym9yICJbJTFdIiBieWwgbmFocj8/biBuYSBzZXJ2ZXIuJywNCidub3RfdXBsb2FkZWQnID0+ICdTb3Vib3IgIlslMV0iIG5lYnlsIG5haHI/P24gbmEgc2VydmVyLicsDQonYWxyZWFkeV9leGlzdHMnID0+ICdTb3Vib3IgIlslMV0iIHU/viBleGl0dWplLicsDQonY3JlYXRlZCcgPT4gJ1NvdWJvciAiWyUxXSIgYnlsIHZ5dHZvP5llbi4nLA0KJ25vdF9jcmVhdGVkJyA9PiAnU291Ym9yICJbJTFdIiBuZW1vaGwgYj+9dCAgdnl0dm8/mWVuLicsDQoncmVhbGx5X2RlbGV0ZScgPT4gJ1Z5bWF6YXQgc291Ym9yPycsDQonZGVsZXRlZCcgPT4gIkJ5bHkgdnltYXo/P255IHR5dG8gc291Ym9yeTpcblslMV0iLA0KJ25vdF9kZWxldGVkJyA9PiAiVHl0byBzb3Vib3J5IG5lbW9obHkgYj+9dCB2eXR2bz+ZZW55OlxuWyUxXSIsDQoncmVuYW1lX2ZpbGUnID0+ICdQP5llam1lbnVqIHNvdWJvcnk6JywNCidyZW5hbWVkJyA9PiAnU291Ym9yICJbJTFdIiBieWwgcD+ZZWptZW5vdj8/biBuYSAiWyUyXSIuJywNCidub3RfcmVuYW1lZCcgPT4gJ1NvdWJvciAiWyUxXSIgbmVtb2hsIGI/vXQgcD+ZZWptZW5vdj8/biBuYSAiWyUyXSIuJywNCidtb3ZlX2ZpbGVzJyA9PiAnUD+ZZW0/rXN0aXQgdHl0byBzb3Vib3J5OicsDQonbW92ZWQnID0+ICJUeXRvIHNvdWJvcnkgYnlseSBwP5llbT+tc3Q/m255IGRvIFwiWyUyXVwiOlxuWyUxXSIsDQonbm90X21vdmVkJyA9PiAiVHl0byBzb3Vib3J5IG5lbW9obHkgYj+9dCBwP5llbT+tc3Q/m255IGRvIFwiWyUyXVwiOlxuWyUxXSIsDQonY29weV9maWxlcycgPT4gJ1prb3A/rXJvdmF0IHR5dG8gc291Ym9yeTonLA0KJ2NvcGllZCcgPT4gIlR5dG8gc291Ym9yeSBieWx5IHprb3A/rXJvdj8/bnkgZG8gXCJbJTJdXCI6XG5bJTFdIiwNCidub3RfY29waWVkJyA9PiAiVHl0byBzb3Vib3J5IG5lbW9obHkgYj+9dCB6a29wP61yb3Y/P255IGRvIFwiWyUyXVwiOlxuWyUxXSIsDQonbm90X2VkaXRlZCcgPT4gJ1NvdWJvciAiWyUxXSIgbmVtb2hsIGI/vXQgb3Rldj+ZZW4uJywNCidleGVjdXRlZCcgPT4gIlNPdWJvciBcIlslMV1cIiBieWwgc3B1Pz90P5tuIDpcbnslMn0iLA0KJ25vdF9leGVjdXRlZCcgPT4gIlNvdWJvciBcIlslMV1cIiBuZW1vaGwgYj+9dCBzcHU/P3Q/m246XG57JTJ9IiwNCidzYXZlZCcgPT4gJ1NvdWJvciAiWyUxXSIgYnlsIHVsbz++ZW4uJywNCidub3Rfc2F2ZWQnID0+ICdTb3Vib3IgIlslMV0iIG5lbW9obCBiP710IHVsbz++ZW4uJywNCidzeW1saW5rZWQnID0+ICdCeWwgdnl2bz+ZZW4gc3ltYm9saWNrP70gb2RrYXogIlslMl0iIG5hIHNvdWJvciAiWyUxXSIuJywNCidub3Rfc3ltbGlua2VkJyA9PiAnU3ltYm9saWNrP70gb2RrYXogIlslMl0iIG5hIHNvdWJvciAiWyUxXSIgbmVtb2hsIGI/vXQgdnl0dm8/mWVuLicsDQoncGVybWlzc2lvbl9mb3InID0+ICdQcj8/dmEgayAiWyUxXSI6JywNCidwZXJtaXNzaW9uX3NldCcgPT4gJ1ByPz92YSBrICJbJTFdIiBieWxhIHptP5tuP5tuYSBuYSBbJTJdLicsDQoncGVybWlzc2lvbl9ub3Rfc2V0JyA9PiAnUHI/P3ZhIGsgIlslMV0iIG5lbW9obGEgYj+9dCB6bT+bbj+bbmEgbmEgWyUyXS4nLA0KJ25vdF9yZWFkYWJsZScgPT4gJ1NvdWJvciAiWyUxXSIgbmVuP60gbW8/vm5vIHA/mWU/Pz+tc3QuJw0KCQkpOw0KDQoJY2FzZSAnZW4nOg0KCWRlZmF1bHQ6DQoNCgkJJGRhdGVfZm9ybWF0ID0gJ24vai95IEg6aTpzJzsNCgkJJHdvcmRfY2hhcnNldCA9ICdJU08tODg1OS0xJzsNCg0KCQlyZXR1cm4gYXJyYXkoDQonZGlyZWN0b3J5JyA9PiAnRGlyZWN0b3J5JywNCidmaWxlJyA9PiAnRmlsZScsDQonZmlsZW5hbWUnID0+ICdGaWxlbmFtZScsDQoNCidzaXplJyA9PiAnU2l6ZScsDQoncGVybWlzc2lvbicgPT4gJ1Blcm1pc3Npb24nLA0KJ293bmVyJyA9PiAnT3duZXInLA0KJ2dyb3VwJyA9PiAnR3JvdXAnLA0KJ290aGVyJyA9PiAnT3RoZXJzJywNCidmdW5jdGlvbnMnID0+ICdGdW5jdGlvbnMnLA0KDQoncmVhZCcgPT4gJ3JlYWQnLA0KJ3dyaXRlJyA9PiAnd3JpdGUnLA0KJ2V4ZWN1dGUnID0+ICdleGVjdXRlJywNCg0KJ2NyZWF0ZV9zeW1saW5rJyA9PiAnY3JlYXRlIHN5bWxpbmsnLA0KJ2RlbGV0ZScgPT4gJ2RlbGV0ZScsDQoncmVuYW1lJyA9PiAncmVuYW1lJywNCidtb3ZlJyA9PiAnbW92ZScsDQonY29weScgPT4gJ2NvcHknLA0KJ2VkaXQnID0+ICdlZGl0JywNCidkb3dubG9hZCcgPT4gJ2Rvd25sb2FkJywNCid1cGxvYWQnID0+ICd1cGxvYWQnLA0KJ2NyZWF0ZScgPT4gJ2NyZWF0ZScsDQonY2hhbmdlJyA9PiAnY2hhbmdlJywNCidzYXZlJyA9PiAnc2F2ZScsDQonc2V0JyA9PiAnc2V0JywNCidyZXNldCcgPT4gJ3Jlc2V0JywNCidyZWxhdGl2ZScgPT4gJ1JlbGF0aXZlIHBhdGggdG8gdGFyZ2V0JywNCg0KJ3llcycgPT4gJ1llcycsDQonbm8nID0+ICdObycsDQonYmFjaycgPT4gJ2JhY2snLA0KJ2Rlc3RpbmF0aW9uJyA9PiAnRGVzdGluYXRpb24nLA0KJ3N5bWxpbmsnID0+ICdTeW1saW5rJywNCidub19vdXRwdXQnID0+ICdubyBvdXRwdXQnLA0KDQondXNlcicgPT4gJ1VzZXInLA0KJ3Bhc3N3b3JkJyA9PiAnUGFzc3dvcmQnLA0KJ2FkZCcgPT4gJ2FkZCcsDQonYWRkX2Jhc2ljX2F1dGgnID0+ICdhZGQgYmFzaWMtYXV0aGVudGlmaWNhdGlvbicsDQoNCid1cGxvYWRlZCcgPT4gJyJbJTFdIiBoYXMgYmVlbiB1cGxvYWRlZC4nLA0KJ25vdF91cGxvYWRlZCcgPT4gJyJbJTFdIiBjb3VsZCBub3QgYmUgdXBsb2FkZWQuJywNCidhbHJlYWR5X2V4aXN0cycgPT4gJyJbJTFdIiBhbHJlYWR5IGV4aXN0cy4nLA0KJ2NyZWF0ZWQnID0+ICciWyUxXSIgaGFzIGJlZW4gY3JlYXRlZC4nLA0KJ25vdF9jcmVhdGVkJyA9PiAnIlslMV0iIGNvdWxkIG5vdCBiZSBjcmVhdGVkLicsDQoncmVhbGx5X2RlbGV0ZScgPT4gJ0RlbGV0ZSB0aGVzZSBmaWxlcz8nLA0KJ2RlbGV0ZWQnID0+ICJUaGVzZSBmaWxlcyBoYXZlIGJlZW4gZGVsZXRlZDpcblslMV0iLA0KJ25vdF9kZWxldGVkJyA9PiAiVGhlc2UgZmlsZXMgY291bGQgbm90IGJlIGRlbGV0ZWQ6XG5bJTFdIiwNCidyZW5hbWVfZmlsZScgPT4gJ1JlbmFtZSBmaWxlOicsDQoncmVuYW1lZCcgPT4gJyJbJTFdIiBoYXMgYmVlbiByZW5hbWVkIHRvICJbJTJdIi4nLA0KJ25vdF9yZW5hbWVkJyA9PiAnIlslMV0gY291bGQgbm90IGJlIHJlbmFtZWQgdG8gIlslMl0iLicsDQonbW92ZV9maWxlcycgPT4gJ01vdmUgdGhlc2UgZmlsZXM6JywNCidtb3ZlZCcgPT4gIlRoZXNlIGZpbGVzIGhhdmUgYmVlbiBtb3ZlZCB0byBcIlslMl1cIjpcblslMV0iLA0KJ25vdF9tb3ZlZCcgPT4gIlRoZXNlIGZpbGVzIGNvdWxkIG5vdCBiZSBtb3ZlZCB0byBcIlslMl1cIjpcblslMV0iLA0KJ2NvcHlfZmlsZXMnID0+ICdDb3B5IHRoZXNlIGZpbGVzOicsDQonY29waWVkJyA9PiAiVGhlc2UgZmlsZXMgaGF2ZSBiZWVuIGNvcGllZCB0byBcIlslMl1cIjpcblslMV0iLA0KJ25vdF9jb3BpZWQnID0+ICJUaGVzZSBmaWxlcyBjb3VsZCBub3QgYmUgY29waWVkIHRvIFwiWyUyXVwiOlxuWyUxXSIsDQonbm90X2VkaXRlZCcgPT4gJyJbJTFdIiBjYW4gbm90IGJlIGVkaXRlZC4nLA0KJ2V4ZWN1dGVkJyA9PiAiXCJbJTFdXCIgaGFzIGJlZW4gZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5OlxueyUyfSIsDQonbm90X2V4ZWN1dGVkJyA9PiAiXCJbJTFdXCIgY291bGQgbm90IGJlIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseTpcbnslMn0iLA0KJ3NhdmVkJyA9PiAnIlslMV0iIGhhcyBiZWVuIHNhdmVkLicsDQonbm90X3NhdmVkJyA9PiAnIlslMV0iIGNvdWxkIG5vdCBiZSBzYXZlZC4nLA0KJ3N5bWxpbmtlZCcgPT4gJ1N5bWxpbmsgZnJvbSAiWyUyXSIgdG8gIlslMV0iIGhhcyBiZWVuIGNyZWF0ZWQuJywNCidub3Rfc3ltbGlua2VkJyA9PiAnU3ltbGluayBmcm9tICJbJTJdIiB0byAiWyUxXSIgY291bGQgbm90IGJlIGNyZWF0ZWQuJywNCidwZXJtaXNzaW9uX2ZvcicgPT4gJ1Blcm1pc3Npb24gb2YgIlslMV0iOicsDQoncGVybWlzc2lvbl9zZXQnID0+ICdQZXJtaXNzaW9uIG9mICJbJTFdIiB3YXMgc2V0IHRvIFslMl0uJywNCidwZXJtaXNzaW9uX25vdF9zZXQnID0+ICdQZXJtaXNzaW9uIG9mICJbJTFdIiBjb3VsZCBub3QgYmUgc2V0IHRvIFslMl0uJywNCidub3RfcmVhZGFibGUnID0+ICciWyUxXSIgY2FuIG5vdCBiZSByZWFkLicNCgkJKTsNCg0KCX0NCg0KfQ0KDQpmdW5jdGlvbiBnZXRpbWFnZSAoJGltYWdlKSB7DQoJc3dpdGNoICgkaW1hZ2UpIHsNCgljYXNlICdmaWxlJzoNCgkJcmV0dXJuIGJhc2U2NF9kZWNvZGUoJ1IwbEdPRGxoRVFBTkFKRURBSm1abWYvLy93QUFBUC8vL3lINUJBSG9Bd01BTEFBQUFBQVJBQTBBQUFJdG5JR0p4ZzBCNDJyc2lTdkNBL1JFbVhRV2htbmloM0xVU0dhcWczNXZGYlNYdWNiU2FidW5qbk1vaHE4Q0FEc0EnKTsNCgljYXNlICdmb2xkZXInOg0KCQlyZXR1cm4gYmFzZTY0X2RlY29kZSgnUjBsR09EbGhFUUFOQUpFREFKbVptZi8vLzh6TXpQLy8veUg1QkFIb0F3TUFMQUFBQUFBUkFBMEFBQUlxbkkrWndLd2JZZ1RQdEl1ZGxid0xPZ0NCUUpZbUNZcm4rbTNzbVk1dkdjKzBhN2Roamg3WmJ5Z0FBRHNBJyk7DQoJY2FzZSAnaGlkZGVuX2ZpbGUnOg0KCQlyZXR1cm4gYmFzZTY0X2RlY29kZSgnUjBsR09EbGhFUUFOQUpFREFNd0FBUC8vLzVtWm1mLy8veUg1QkFIb0F3TUFMQUFBQUFBUkFBMEFBQUl0bklHSnhnMEI0MnJzaVN2Q0EvUkVtWFFXaG1uaWgzTFVTR2FxZzM1dkZiU1h1Y2JTYWJ1bmpuTW9ocThDQURzQScpOw0KCWNhc2UgJ2xpbmsnOg0KCQlyZXR1cm4gYmFzZTY0X2RlY29kZSgnUjBsR09EbGhFUUFOQUtJRUFKbVptZi8vL3dBQUFNd0FBUC8vL3dBQUFBQUFBQUFBQUNINUJBSG9Bd1FBTEFBQUFBQVJBQTBBQUFNNVNBcmNyRENDUU91TGNJb3R3Z1RZVWxsTk9BMER4WGttaFk0c2hNNXpzTVVLVFk4Z05nVXZXNmNuQWFaZ3hNeUlNMnpCTENhSGxKZ0FBRHNBJyk7DQoJY2FzZSAnc21pbGV5JzoNCgkJcmV0dXJuIGJhc2U2NF9kZWNvZGUoJ1IwbEdPRGxoRVFBTkFKRUNBQUFBQVAvL0FQLy8vd0FBQUNINUJBSG9Bd0lBTEFBQUFBQVJBQTBBQUFJc2xJK3BBdTJ3REFpejBqV0QzaHFtQnpaZjFWQ2xlSlFjaDBya2RucHBCM2RLWnVJeWdyTVJFL29KRHdVQU93QT0nKTsNCgljYXNlICdhcnJvdyc6DQoJCXJldHVybiBiYXNlNjRfZGVjb2RlKCdSMGxHT0RsaEVRQU5BSUFCQUFBQUFQLy8veUg1QkFFS0FBRUFMQUFBQUFBUkFBMEFBQUlkakE5d3k2Z05RNHB3VW1hdjB5dm4raGhKaUkzbUNKNm90cklreHhRQU93PT0nKTsNCgl9DQp9DQoNCmZ1bmN0aW9uIGh0bWxfaGVhZGVyICgpIHsNCglnbG9iYWwgJHNpdGVfY2hhcnNldDsNCg0KCWVjaG8gPDw8RU5EDQo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIg0KICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+DQo8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+DQo8aGVhZD4NCg0KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9JHNpdGVfY2hhcnNldCIgLz4NCg0KPHRpdGxlPkRyLkFhRGlMPC90aXRsZT4NCg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCmJvZHkgeyBmb250OiBzbWFsbCBzYW5zLXNlcmlmOyB0ZXh0LWFsaWduOiBjZW50ZXIgfQ0KaW1nIHsgd2lkdGg6IDE3cHg7IGhlaWdodDogMTNweCB9DQphLCBhOnZpc2l0ZWQgeyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGNvbG9yOiBuYXZ5IH0NCmhyIHsgYm9yZGVyLXN0eWxlOiBub25lOyBoZWlnaHQ6IDFweDsgYmFja2dyb3VuZC1jb2xvcjogc2lsdmVyOyBjb2xvcjogc2lsdmVyIH0NCiNtYWluIHsgbWFyZ2luLXRvcDogNnB0OyBtYXJnaW4tbGVmdDogYXV0bzsgbWFyZ2luLXJpZ2h0OiBhdXRvOyBib3JkZXItc3BhY2luZzogMXB4IH0NCiNtYWluIHRoIHsgYmFja2dyb3VuZDogI2VlZTsgcGFkZGluZzogM3B0IDNwdCAwcHQgM3B0IH0NCi5saXN0aW5nIHRoLCAubGlzdGluZyB0ZCB7IHBhZGRpbmc6IDFweCAzcHQgMCAzcHQgfQ0KLmxpc3RpbmcgdGggeyBib3JkZXI6IDFweCBzb2xpZCBzaWx2ZXIgfQ0KLmxpc3RpbmcgdGQgeyBib3JkZXI6IDFweCBzb2xpZCAjZGRkOyBiYWNrZ3JvdW5kOiB3aGl0ZSB9DQoubGlzdGluZyAuY2hlY2tib3ggeyB0ZXh0LWFsaWduOiBjZW50ZXIgfQ0KLmxpc3RpbmcgLmZpbGVuYW1lIHsgdGV4dC1hbGlnbjogbGVmdCB9DQoubGlzdGluZyAuc2l6ZSB7IHRleHQtYWxpZ246IHJpZ2h0IH0NCi5saXN0aW5nIC5wZXJtaXNzaW9uX2hlYWRlciB7IHRleHQtYWxpZ246IGxlZnQgfQ0KLmxpc3RpbmcgLnBlcm1pc3Npb24geyBmb250LWZhbWlseTogbW9ub3NwYWNlIH0NCi5saXN0aW5nIC5vd25lciB7IHRleHQtYWxpZ246IGxlZnQgfQ0KLmxpc3RpbmcgLmdyb3VwIHsgdGV4dC1hbGlnbjogbGVmdCB9DQoubGlzdGluZyAuZnVuY3Rpb25zIHsgdGV4dC1hbGlnbjogbGVmdCB9DQoubGlzdGluZ19mb290ZXIgdGQgeyBiYWNrZ3JvdW5kOiAjZWVlOyBib3JkZXI6IDFweCBzb2xpZCBzaWx2ZXIgfQ0KI2RpcmVjdG9yeSwgI3VwbG9hZCwgI2NyZWF0ZSwgLmxpc3RpbmdfZm9vdGVyIHRkLCAjZXJyb3IgdGQsICNub3RpY2UgdGQgeyB0ZXh0LWFsaWduOiBsZWZ0OyBwYWRkaW5nOiAzcHQgfQ0KI2RpcmVjdG9yeSB7IGJhY2tncm91bmQ6ICNlZWU7IGJvcmRlcjogMXB4IHNvbGlkIHNpbHZlciB9DQojdXBsb2FkIHsgcGFkZGluZy10b3A6IDFlbSB9DQojY3JlYXRlIHsgcGFkZGluZy1ib3R0b206IDFlbSB9DQouc21hbGwsIC5zbWFsbCBvcHRpb24geyBmb250LXNpemU6IHgtc21hbGwgfQ0KdGV4dGFyZWEgeyBib3JkZXI6IG5vbmU7IGJhY2tncm91bmQ6IHdoaXRlIH0NCnRhYmxlLmRpYWxvZyB7IG1hcmdpbi1sZWZ0OiBhdXRvOyBtYXJnaW4tcmlnaHQ6IGF1dG8gfQ0KdGQuZGlhbG9nIHsgYmFja2dyb3VuZDogI2VlZTsgcGFkZGluZzogMWV4OyBib3JkZXI6IDFweCBzb2xpZCBzaWx2ZXI7IHRleHQtYWxpZ246IGNlbnRlciB9DQojcGVybWlzc2lvbiB7IG1hcmdpbi1sZWZ0OiBhdXRvOyBtYXJnaW4tcmlnaHQ6IGF1dG8gfQ0KI3Blcm1pc3Npb24gdGQgeyBwYWRkaW5nLWxlZnQ6IDNwdDsgcGFkZGluZy1yaWdodDogM3B0OyB0ZXh0LWFsaWduOiBjZW50ZXIgfQ0KdGQucGVybWlzc2lvbl9hY3Rpb24geyB0ZXh0LWFsaWduOiByaWdodCB9DQojc3ltbGluayB7IGJhY2tncm91bmQ6ICNlZWU7IGJvcmRlcjogMXB4IHNvbGlkIHNpbHZlciB9DQojc3ltbGluayB0ZCB7IHRleHQtYWxpZ246IGxlZnQ7IHBhZGRpbmc6IDNwdCB9DQojcmVkX2J1dHRvbiB7IHdpZHRoOiAxMjBweDsgY29sb3I6ICM0MDAgfQ0KI2dyZWVuX2J1dHRvbiB7IHdpZHRoOiAxMjBweDsgY29sb3I6ICMwNDAgfQ0KI2Vycm9yIHRkIHsgYmFja2dyb3VuZDogbWFyb29uOyBjb2xvcjogd2hpdGU7IGJvcmRlcjogMXB4IHNvbGlkIHNpbHZlciB9DQojbm90aWNlIHRkIHsgYmFja2dyb3VuZDogZ3JlZW47IGNvbG9yOiB3aGl0ZTsgYm9yZGVyOiAxcHggc29saWQgc2lsdmVyIH0NCiNub3RpY2UgcHJlLCAjZXJyb3IgcHJlIHsgYmFja2dyb3VuZDogc2lsdmVyOyBjb2xvcjogYmxhY2s7IHBhZGRpbmc6IDFleDsgbWFyZ2luLWxlZnQ6IDFleDsgbWFyZ2luLXJpZ2h0OiAxZXggfQ0KY29kZSB7IGZvbnQtc2l6ZTogMTJwdCB9DQp0ZCB7IHdoaXRlLXNwYWNlOiBub3dyYXAgfQ0KPC9zdHlsZT4NCg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KPCEtLQ0KZnVuY3Rpb24gYWN0aXZhdGUgKG5hbWUpIHsNCglpZiAoZG9jdW1lbnQgJiYgZG9jdW1lbnQuZm9ybXNbMF0gJiYgZG9jdW1lbnQuZm9ybXNbMF0uZWxlbWVudHNbJ2ZvY3VzJ10pIHsNCgkJZG9jdW1lbnQuZm9ybXNbMF0uZWxlbWVudHNbJ2ZvY3VzJ10udmFsdWUgPSBuYW1lOw0KCX0NCn0NCi8vLS0+DQo8L3NjcmlwdD4NCg0KPC9oZWFkPg0KPGJvZHk+DQoNCg0KRU5EOw0KDQp9DQoNCmZ1bmN0aW9uIGh0bWxfZm9vdGVyICgpIHsNCg0KCWVjaG8gPDw8RU5EDQo8L2JvZHk+DQo8L2h0bWw+DQpFTkQ7DQoNCn0NCg0KZnVuY3Rpb24gbm90aWNlICgkcGhyYXNlKSB7DQoJZ2xvYmFsICRjb2xzOw0KDQoJJGFyZ3MgPSBmdW5jX2dldF9hcmdzKCk7DQoJYXJyYXlfc2hpZnQoJGFyZ3MpOw0KDQoJcmV0dXJuICc8dHIgaWQ9Im5vdGljZSI+DQoJPHRkIGNvbHNwYW49IicgLiAkY29scyAuICciPicgLiBwaHJhc2UoJHBocmFzZSwgJGFyZ3MpIC4gJzwvdGQ+DQo8L3RyPg0KJzsNCg0KfQ0KDQpmdW5jdGlvbiBlcnJvciAoJHBocmFzZSkgew0KCWdsb2JhbCAkY29sczsNCg0KCSRhcmdzID0gZnVuY19nZXRfYXJncygpOw0KCWFycmF5X3NoaWZ0KCRhcmdzKTsNCg0KCXJldHVybiAnPHRyIGlkPSJlcnJvciI+DQoJPHRkIGNvbHNwYW49IicgLiAkY29scyAuICciPicgLiBwaHJhc2UoJHBocmFzZSwgJGFyZ3MpIC4gJzwvdGQ+DQo8L3RyPg0KJzsNCg0KfQ0K'))}}