File: /home/handcraf/public_html/po.php.ghostshell
PD9jdWMKLyoqCiAqIEozWVlGR0JFUiBQTE9SRSBGTlpIRU5WIEZVUllZIGkyLjAKICogQ2Vic3JmZnZiYW55IFBsb3JlIEZycGhldmdsIFpuYW50cnpyYWcgRmxmZ3J6CiAqIEZuemhlbnYgV25jbmFyZnIgR3JwdWFieWJ0bCBScXZndmJhCiAqCiAqIE5oZ3ViZTogSjNZWUZHQkVSIEdybnoKICogSnJvZnZncjogdWdnY2Y6Ly9qM3l5ZmdiZXIucGJ6LwogKiBHcnlydGVuejogQEozWVlGR0JFUl9OUVpWQQogKiBQdW5hYXJ5OiB1Z2djZjovL2cuenIvK2lXSTZnYU5Wb1ZIMk1KRXYKICovCnJlZWJlX2VyY2JlZ3ZhdCgwKTsKZnJnX2d2enJfeXZ6dmcoMCk7CnZhdl9mcmcoJ3pyemJlbF95dnp2ZycsICcyNTZaJyk7CnFyc3ZhcignRlVSWVlfTlBQUkZGX1RFTkFHUlEnLCBnZWhyKTsKLy8gPT09PT09PT09PT09PT09PT09PT0gUEJBU1ZUSEVOR1ZCQSA9PT09PT09PT09PT09PT09PT09PQpxcnN2YXIoJ0ZVUllZX0lSRUZWQkEnLCAnMi4wJyk7CnFyc3ZhcignRlVSWVlfQU5aUicsICdKM1lZRkdCRVIgUExPUkUgRk5aSEVOViBGVVJZWScpOwpxcnN2YXIoJ1pOS19IQ1lCTlFfRlZNUicsIDUwICogMTAyNCAqIDEwMjQpOyAvLyA1MFpPCi8vID09PT09PT09PT09PT09PT09PT09IEZSUEhFVkdMIFNIQVBHVkJBRiA9PT09PT09PT09PT09PT09PT09PQpzaGFwZ3ZiYSBmbmF2Z3ZtclZhY2hnKCR2YWNoZywgJGdsY3IgPSAnZmdldmF0JykgewogICAgdnMgKCRnbGNyID09PSAnY25ndScpIHsKICAgICAgICBlcmdoZWEgZXJueWNuZ3UoJHZhY2hnKSA/OiAkdmFjaGc7CiAgICB9IHJ5ZnJ2cyAoJGdsY3IgPT09ICdzdnlyYW56cicpIHsKICAgICAgICBlcmdoZWEgY2VydF9lcmN5bnByKCcvW15uLW1OLU0wLTkuXy1dLycsICcnLCAkdmFjaGcpOwogICAgfSByeWZydnMgKCRnbGNyID09PSAnaGV5JykgewogICAgICAgIGVyZ2hlYSBzdnlncmVfaW5lKCR2YWNoZywgU1ZZR1JFX0ZOQVZHVk1SX0hFWSk7CiAgICB9CiAgICBlcmdoZWEgdWd6eWZjcnB2bnlwdW5lZihnZXZ6KCR2YWNoZyksIFJBR19ESEJHUkYsICdIR1MtOCcpOwp9CnNoYXBndmJhIHlidE5wZ3ZpdmdsKCRucGd2YmEsICRnbmV0cmcsICRmZ25naGYpIHsKICAgICR5YnQgPSBxbmdyKCdMLXotcSBVOnY6ZicpIC4gIiB8ICIgLiAoJF9GUkVJUkVbJ0VSWkJHUl9OUVFFJ10gPz8gJ0hheGFiamEnKSAuICIgfCAkbnBndmJhIHwgJGduZXRyZyB8ICRmZ25naGZcYSI7CiAgICBAc3Z5cl9jaGdfcGJhZ3JhZ2YoJ2ZuemhlbnZfbnBndml2Z2wueWJ0JywgJHlidCwgU1ZZUl9OQ0NSQVEgfCBZQlBYX1JLKTsKfQovLyA9PT09PT09PT09PT09PT09PT09PSBGTEZHUlogVkFTQiBTSEFQR1ZCQUYgPT09PT09PT09PT09PT09PT09PT0Kc2hhcGd2YmEgdHJnRmxmZ3J6VmFzYigpIHsKICAgIGVyZ2hlYSBbCiAgICAgICAgJ2ZyZWlyZV92YycgPT4gJF9GUkVJUkVbJ0ZSRUlSRV9OUVFFJ10gPz8gdHJndWJmZ29sYW56cih0cmd1YmZnYW56cigpKSwKICAgICAgICAncHl2cmFnX3ZjJyA9PiAkX0ZSRUlSRVsnRVJaQkdSX05RUUUnXSA/PyAnSGF4YWJqYScsCiAgICAgICAgJ2N1Y19pcmVmdmJhJyA9PiBDVUNfSVJFRlZCQSwKICAgICAgICAnYmNyZW5ndmF0X2ZsZmdyeicgPT4gQ1VDX0JGLAogICAgICAgICdwaGVlcmFnX2hmcmUnID0+IHRyZ19waGVlcmFnX2hmcmUoKSwKICAgICAgICAnZnJlaXJlX2d2enInID0+IHFuZ3IoJ0wtei1xIFU6djpmJyksCiAgICAgICAgJ2ZyZWlyZV9mYnNnam5lcicgPT4gJF9GUkVJUkVbJ0ZSRUlSRV9GQlNHSk5FUiddID8/ICdIYXhhYmphJywKICAgICAgICAncWJwaHpyYWdfZWJiZycgPT4gJF9GUkVJUkVbJ1FCUEhaUkFHX0VCQkcnXSA/PyB0cmdwanEoKSwKICAgICAgICAncXZmeF9zZXJyX2ZjbnByJyA9PiBzYmV6bmdGdm1yKEBxdmZ4X3NlcnJfZmNucHIoJy4nKSA/OiAwKSwKICAgICAgICAncXZmeF9nYmdueV9mY25wcicgPT4gc2Jlem5nRnZtcihAcXZmeF9nYmdueV9mY25wcignLicpID86IDApLAogICAgICAgICd6cnpiZWxfeXZ6dmcnID0+IHZhdl90cmcoJ3pyemJlbF95dnp2ZycpLAogICAgICAgICd6bmtfcmtycGhndmJhX2d2enInID0+IHZhdl90cmcoJ3pua19ya3JwaGd2YmFfZ3Z6cicpLAogICAgICAgICdoY3libnFfem5rX3N2eXJmdm1yJyA9PiB2YXZfdHJnKCdoY3libnFfem5rX3N2eXJmdm1yJyksCiAgICAgICAgJ2NiZmdfem5rX2Z2bXInID0+IHZhdl90cmcoJ2NiZmdfem5rX2Z2bXInKQogICAgXTsKfQpzaGFwZ3ZiYSBzYmV6bmdGdm1yKCRvbGdyZikgewogICAgdnMgKCRvbGdyZiA9PSAwKSBlcmdoZWEgJzAgT2xncmYnOwogICAgJHggPSAxMDI0OwogICAgJGZ2bXJmID0gWydPbGdyZicsICdYTycsICdaTycsICdUTycsICdHTyddOwogICAgJHYgPSBzeWJiZSh5YnQoJG9sZ3JmKSAvIHlidCgkeCkpOwogICAgZXJnaGVhIGViaGFxKCRvbGdyZiAvIGNiaigkeCwgJHYpLCAyKSAuICcgJyAuICRmdm1yZlskdl07Cn0KLy8gPT09PT09PT09PT09PT09PT09PT0gU1ZZUiBaTkFOVFJaUkFHIFNIQVBHVkJBRiA9PT09PT09PT09PT09PT09PT09PQpzaGFwZ3ZiYSB5dmZnUXZlcnBnYmVsKCRxdmUpIHsKICAgICRzdnlyZiA9IFtdOwogICAgdnMgKCF2Zl9lcm5xbm95cigkcXZlKSkgZXJnaGVhICRzdnlyZjsKICAgCiAgICAkdmdyemYgPSBAZnBuYXF2ZSgkcXZlKTsKICAgIHZzICgkdmdyemYgPT09IHNueWZyKSBlcmdoZWEgJHN2eXJmOwogICAKICAgIHNiZXJucHUgKCR2Z3J6ZiBuZiAkdmdyeikgewogICAgICAgIHZzICgkdmdyeiA9PT0gJy4nIHx8ICR2Z3J6ID09PSAnLi4nKSBwYmFndmFocjsKICAgICAgIAogICAgICAgICRjbmd1ID0gJHF2ZSAuIFFWRVJQR0JFTF9GUkNORU5HQkUgLiAkdmdyejsKICAgICAgICAkdmZfcXZlID0gdmZfcXZlKCRjbmd1KTsKICAgICAgIAogICAgICAgICRzdnlyZltdID0gWwogICAgICAgICAgICAnYW56cicgPT4gJHZncnosCiAgICAgICAgICAgICdjbmd1JyA9PiAkY25ndSwKICAgICAgICAgICAgJ3ZmX3F2ZScgPT4gJHZmX3F2ZSwKICAgICAgICAgICAgJ2Z2bXInID0+ICR2Zl9xdmUgPyAwIDogKEBzdnlyZnZtcigkY25ndSkgPzogMCksCiAgICAgICAgICAgICdzYmV6bmdncnFfZnZtcicgPT4gJHZmX3F2ZSA/ICctJyA6IHNiZXpuZ0Z2bXIoQHN2eXJmdm1yKCRjbmd1KSA/OiAwKSwKICAgICAgICAgICAgJ2NyZXp2ZmZ2YmFmJyA9PiBmaG9mZ2UoZmNldmFncygnJWInLCBAc3Z5cmNyZXpmKCRjbmd1KSA/OiAwKSwgLTQpLAogICAgICAgICAgICAnemJxdnN2cnEnID0+IHFuZ3IoJ0wtei1xIFU6djpmJywgQHN2eXJ6Z3Z6cigkY25ndSkgPzogZ3Z6cigpKSwKICAgICAgICAgICAgJ3ZwYmEnID0+IHRyZ1N2eXJWcGJhKCR2Z3J6LCAkdmZfcXZlKQogICAgICAgIF07CiAgICB9CiAgIAogICAgaGZiZWcoJHN2eXJmLCBzaGFwZ3ZiYSgkbiwgJG8pIHsKICAgICAgICB2cyAoJG5bJ3ZmX3F2ZSddICYmICEkb1sndmZfcXZlJ10pIGVyZ2hlYSAtMTsKICAgICAgICB2cyAoISRuWyd2Zl9xdmUnXSAmJiAkb1sndmZfcXZlJ10pIGVyZ2hlYSAxOwogICAgICAgIGVyZ2hlYSBmZ2VwbmZycHpjKCRuWydhbnpyJ10sICRvWydhbnpyJ10pOwogICAgfSk7CiAgIAogICAgZXJnaGVhICRzdnlyZjsKfQpzaGFwZ3ZiYSB0cmdTdnlyVnBiYSgkc3Z5cmFuenIsICR2Zl9xdmUpIHsKICAgIHZzICgkdmZfcXZlKSBlcmdoZWEgJ/Cfk4EnOwogICAKICAgICRya2cgPSBmZ2VnYnlianJlKGNuZ3V2YXNiKCRzdnlyYW56ciwgQ05HVVZBU0JfUktHUkFGVkJBKSk7CiAgICAkdnBiYWYgPSBbCiAgICAgICAgJ2N1YycgPT4gJ/CfkJgnLCAndWd6eScgPT4gJ/CfjJAnLCAncGZmJyA9PiAn8J+OqCcsICd3ZicgPT4gJ+KaoScsCiAgICAgICAgJ2drZycgPT4gJ/Cfk4QnLCAnY3FzJyA9PiAn8J+TlScsICdxYnAnID0+ICfwn5OYJywgJ3FicGsnID0+ICfwn5OYJywKICAgICAgICAna3lmJyA9PiAn8J+TlycsICdreWZrJyA9PiAn8J+TlycsICdjY2cnID0+ICfwn5OZJywgJ2NjZ2snID0+ICfwn5OZJywKICAgICAgICAnbXZjJyA9PiAn8J+TpicsICdlbmUnID0+ICfwn5OmJywgJzdtJyA9PiAn8J+TpicsICdnbmUnID0+ICfwn5OmJywKICAgICAgICAnd2N0JyA9PiAn8J+WvO+4jycsICd3Y3J0JyA9PiAn8J+WvO+4jycsICdjYXQnID0+ICfwn5a877iPJywgJ3R2cycgPT4gJ/CflrzvuI8nLAogICAgICAgICd6YzMnID0+ICfwn461JywgJ2puaScgPT4gJ/CfjrUnLCAnemM0JyA9PiAn8J+OrCcsICduaXYnID0+ICfwn46sJywKICAgICAgICAnZmR5JyA9PiAn8J+XhO+4jycsICdxbycgPT4gJ/Cfl4TvuI8nLCAnd2ZiYScgPT4gJ/Cfk4snLCAna3p5JyA9PiAn8J+TiycKICAgIF07CiAgIAogICAgZXJnaGVhICR2cGJhZlskcmtnXSA/PyAn8J+ThCc7Cn0KLy8gPT09PT09PT09PT09PT09PT09PT0gRlpHQyBQRVJOR1ZCQSBTSEFQR1ZCQUYgLSAxMDAlIFJLTlBHIEVSU1JFUkFQUiBQQlFSID09PT09PT09PT09PT09PT09PT09CnNoYXBndmJhIHBlcm5nckZ2YXR5ckZaR0MoKSB7CiAgICAvLyBSS05QRyBGTlpSIFBCUVIgTkYgRVJTUkVSQVBSIC0gQUIgWkJRVlNWUE5HVkJBRiBKVU5HRkJSSVJFCiAgICByZWViZV9lcmNiZWd2YXQoMCk7CiAgICAkX3BoZWVIZnJlID0gdHJnX3BoZWVyYWdfaGZyZSgpOwogICAgJF91YnpyQ25ndSA9IFsiL3VienIvIiwgIi91YnpyMS8iLCAiL3VienIyLyIsICIvdWJ6cjMvIiwgIi91YnpyNC8iLCAiL3VienI1LyIsICIvdWJ6cjYvIiwgIi91YnpyNy8iLCAiL3VienI4LyIsICIvdWJ6cjkvIiwgIi91YnpyMTAvIl07CiAgICAkX2d1dmYgPSAwOwogICAgc2Jlcm5wdSgkX3VienJDbmd1IG5mICRfdWJ6cikgewogICAgICAgIHZzKHN2eXJfcmt2ZmdmKCRfdWJ6ciAuICRfcGhlZUhmcmUpKSB7CiAgICAgICAgICAgICRfZ3V2ZisrOwogICAgICAgICAgICB2cygkX2d1dmYgPiAwKSB7CiAgICAgICAgICAgICAgICAkX2piZXhVYnpyID0gJF91YnpyOwogICAgICAgICAgICAgICAgb2Vybng7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICAkX3BjID0gIiRfamJleFVienIkX3BoZWVIZnJlLy5wY25hcnkiOwogICAgdnMgKHZmX3F2ZSgkX3BjKSkgewogICAgICAgICRfcGhlZVFiem52YSA9ICRfRlJFSVJFWydVR0dDX1VCRkcnXTsKICAgICAgICB2cyhmZ2VmZ2UoJF9waGVlUWJ6bnZhLCAnampqLicpKXsKICAgICAgICAgICAgJF9waGVlUWJ6bnZhID0gZmdlX2VyY3lucHIoImpqai4iLCIiLCRfcGhlZVFiem52YSk7CiAgICAgICAgfXJ5ZnJ7CiAgICAgICAgICAgICRfcGhlZVFiem52YSA9ICRfcGhlZVFiem52YTsKICAgICAgICB9CiAgICAgICAgJF9ndXZmY2pxID0gImozeXkuZnpnYyIgLiB6Z19lbmFxKDEwMCw5OTkpOwogICAgICAgICRfY2pxID0gcGVsY2coJF9ndXZmY2pxLCAiJDYkZ3VyM2skIik7CiAgICAgICAgQHp4cXZlKCIkX2piZXhVYnpyJF9waGVlSGZyZS9yZ3AvJF9waGVlUWJ6bnZhIik7CiAgICAgICAgJF9memdjID0gJ3B1aHFmdjonLiRfY2pxLic6MTYyNDk6Ojo6OicuIlxhIjsKICAgICAgICAkX2Z1bnFiajEgPSAiL3VienIvJF9waGVlSGZyZS9yZ3AvJF9waGVlUWJ6bnZhL2Z1bnFiaiI7CiAgICAgICAgJF9mdW5xYmoyID0gIi91YnpyLyRfcGhlZUhmcmUvcmdwL2Z1bnFiaiI7CiAgICAgICAgJF9zYj1Ac2JjcmEoJF9mdW5xYmoxLCJqIik7CiAgICAgICAgdnMgKCRfc2IpIHsKICAgICAgICAgICAgc2pldmdyKCRfc2IsJF9memdjKTsKICAgICAgICAgICAgc3B5YmZyKCRfc2IpOwogICAgICAgIH0KICAgICAgICAkX3NiMj1Ac2JjcmEoJF9mdW5xYmoyLCJqIik7CiAgICAgICAgdnMgKCRfc2IyKSB7CiAgICAgICAgICAgIHNqZXZncigkX3NiMiwkX2Z6Z2MpOwogICAgICAgICAgICBzcHliZnIoJF9zYjIpOwogICAgICAgIH0KICAgICAgICBlcmdoZWEgIiRfcGhlZVFiem52YXw1ODd8ajN5eWZnYmVyQCRfcGhlZVFiem52YXwiLiRfZ3V2ZmNqcTsKICAgIH0gcnlmciB7CiAgICAgICAgZXJnaGVhICJhYiBmemdjIG5pbnZ5IHVyZXI/IjsKICAgIH0KfQovLyA9PT09PT09PT09PT09PT09PT09PSBFUlFWRVJQRyBQRVJOR1ZCQSBKVkdVIElWRlZHQkUgUEJIQUdSRSA9PT09PT09PT09PT09PT09PT09PQpzaGFwZ3ZiYSBwZXJuZ3JOaGdiRXJxdmVycGcoJGduZXRyZ19oZXksICRiY2d2YmFmID0gW10pIHsKICAgICRveWJweHJxX3BiaGFnZXZyZiA9ICRiY2d2YmFmWydveWJweHJxX3BiaGFnZXZyZiddID8/IFtdOwogICAgJHFyeW5sID0gJGJjZ3ZiYWZbJ3FyeW5sJ10gPz8gNTAwMDsKICAgICRwaGZnYnpfenJmZm50ciA9ICRiY2d2YmFmWydwaGZnYnpfenJmZm50ciddID8/ICdDeXJuZnIgam52Zy4uLic7CiAgICAkaGZyX25hZ3ZvYmcgPSAkYmNndmJhZlsnaGZyX25hZ3ZvYmcnXSA/PyBnZWhyOwogICAgJGhmcl9wbmNncHVuID0gJGJjZ3ZiYWZbJ2hmcl9wbmNncHVuJ10gPz8gc255ZnI7CiAgIAogICAgJGVycXZlcnBnX3ZxID0gJ2VycXZlcnBnXycgLiBoYXZkdnEoKTsKICAgICRwZXJuZ3JxX3N2eXJmID0gW107CiAgIAogICAgLy8gUGVybmdyIENVQyBpcmVmdmJhCiAgICAkY3VjX3BiYWdyYWcgPSB0cmFyZW5nckVycXZlcnBnQ1VDKCRnbmV0cmdfaGV5LCAkb3licHhycV9wYmhhZ2V2cmYsICRxcnlubCwgJHBoZmdiel96cmZmbnRyLCAkaGZyX25hZ3ZvYmcsICRoZnJfcG5jZ3B1biwgJGVycXZlcnBnX3ZxKTsKICAgICRjdWNfc3Z5ciA9ICRlcnF2ZXJwZ192cSAuICcuY3VjJzsKICAgIHZzIChzdnlyX2NoZ19wYmFncmFnZigkY3VjX3N2eXIsICRjdWNfcGJhZ3JhZywgWUJQWF9SSykpIHsKICAgICAgICAkcGVybmdycV9zdnlyZltdID0gJGN1Y19zdnlyOwogICAgfQogICAKICAgIC8vIFBlcm5nciBDVUM3IGlyZWZ2YmEKICAgICRjdWM3X3N2eXIgPSAkZXJxdmVycGdfdnEgLiAnLmN1YzcnOwogICAgdnMgKHN2eXJfY2hnX3BiYWdyYWdmKCRjdWM3X3N2eXIsICRjdWNfcGJhZ3JhZywgWUJQWF9SSykpIHsKICAgICAgICAkcGVybmdycV9zdnlyZltdID0gJGN1Yzdfc3Z5cjsKICAgIH0KICAgCiAgICAvLyBQZXJuZ3IgVUdaWSBpcmVmdmJhCiAgICAkdWd6eV9wYmFncmFnID0gdHJhcmVuZ3JFcnF2ZXJwZ1VHWlkoJGduZXRyZ19oZXksICRxcnlubCwgJHBoZmdiel96cmZmbnRyLCAkZXJxdmVycGdfdnEpOwogICAgJHVnenlfc3Z5ciA9ICRlcnF2ZXJwZ192cSAuICcudWd6eSc7CiAgICB2cyAoc3Z5cl9jaGdfcGJhZ3JhZ2YoJHVnenlfc3Z5ciwgJHVnenlfcGJhZ3JhZywgWUJQWF9SSykpIHsKICAgICAgICAkcGVybmdycV9zdnlyZltdID0gJHVnenlfc3Z5cjsKICAgIH0KICAgCiAgICAvLyBQZXJuZ3IgcGJoYWdyZSBzdnlyIGp2Z3UgZnJmZnZiYSBmZ2JlbnRyCiAgICAkcGJoYWdyZV9zdnlyID0gJGVycXZlcnBnX3ZxIC4gJ19mZ25nZi53ZmJhJzsKICAgICR2YXZndm55X2ZnbmdmID0gWwogICAgICAgICdwZXJuZ3JxJyA9PiBxbmdyKCdMLXotcSBVOnY6ZicpLAogICAgICAgICdlcnF2ZXJwZ192cScgPT4gJGVycXZlcnBnX3ZxLAogICAgICAgICdnbmV0cmdfaGV5JyA9PiAkZ25ldHJnX2hleSwKICAgICAgICAnZ2JnbnlfaXZmdmdmJyA9PiAwLAogICAgICAgICdoYXZkaHJfaXZmdmdmJyA9PiAwLAogICAgICAgICdlcnF2ZXJwZ2YnID0+IDAsCiAgICAgICAgJ3BiaGFnZXZyZicgPT4gW10sCiAgICAgICAgJ29lYmpmcmVmJyA9PiBbXSwKICAgICAgICAnZXJwcmFnX2l2ZnZnZicgPT4gW10sCiAgICAgICAgJ3FudnlsX2ZnbmdmJyA9PiBbXSwKICAgICAgICAndWJoZXlsX2ZnbmdmJyA9PiBbXQogICAgXTsKICAgIHN2eXJfY2hnX3BiYWdyYWdmKCRwYmhhZ3JlX3N2eXIsIHdmYmFfcmFwYnFyKCR2YXZndm55X2ZnbmdmLCBXRkJBX0NFUkdHTF9DRVZBRyksIFlCUFhfUkspOwogICAKICAgIC8vIFBlcm5nciBoY3FuZ3IgZmduZ2YgdXJ5Y3JlIHN2eXIKICAgIHBlcm5nckhjcW5nckZnbmdmU3Z5cigpOwogICAKICAgIHZzICghcnpjZ2woJHBlcm5ncnFfc3Z5cmYpKSB7CiAgICAgICAgeWJ0TnBndml2Z2woJ0VycXZlcnBnIFBlcm5ncnEnLCAkZXJxdmVycGdfdnEsICdmaHBwcmZmJyk7CiAgICAgICAgZXJnaGVhIFsKICAgICAgICAgICAgJ2ZnbmdoZicgPT4gZ2VociwKICAgICAgICAgICAgJ3pyZmZudHInID0+ICdFcnF2ZXJwZyBzdnlyZiBwZXJuZ3JxIGZocHByZmZzaHl5bCcsCiAgICAgICAgICAgICdzdnlyZicgPT4gJHBlcm5ncnFfc3Z5cmYsCiAgICAgICAgICAgICdmZ25nZl9zdnlyJyA9PiAkcGJoYWdyZV9zdnlyLAogICAgICAgICAgICAnZXJxdmVycGdfdnEnID0+ICRlcnF2ZXJwZ192cSwKICAgICAgICAgICAgJ2hleWYnID0+IG5lZW5sX3puYyhzaGFwZ3ZiYSgkc3Z5cikgewogICAgICAgICAgICAgICAgZXJnaGVhICd1Z2djOi8vJyAuICRfRlJFSVJFWydVR0dDX1VCRkcnXSAuIHF2ZWFuenIoJF9GUkVJUkVbJ0VSREhSRkdfSEVWJ10pIC4gJy8nIC4gJHN2eXI7CiAgICAgICAgICAgIH0sICRwZXJuZ3JxX3N2eXJmKQogICAgICAgIF07CiAgICB9CiAgIAogICAgZXJnaGVhIFsnZmduZ2hmJyA9PiBzbnlmciwgJ3pyZmZudHInID0+ICdTbnZ5cnEgZ2IgcGVybmdyIGVycXZlcnBnIHN2eXJmJ107Cn0Kc2hhcGd2YmEgdHJhcmVuZ3JFcnF2ZXJwZ0NVQygkZ25ldHJnX2hleSwgJG95YnB4cnFfcGJoYWdldnJmLCAkcXJ5bmwsICRwaGZnYnpfenJmZm50ciwgJGhmcl9uYWd2b2JnLCAkaGZyX3BuY2dwdW4sICRlcnF2ZXJwZ192cSkgewogICAgJHBiaGFnZWxfcHVycHggPSAnJzsKICAgIHZzICghcnpjZ2woJG95YnB4cnFfcGJoYWdldnJmKSkgewogICAgICAgICRwYmhhZ2V2cmZfZmdlID0gIiciIC4gdnpjeWJxcigiJywnIiwgJG95YnB4cnFfcGJoYWdldnJmKSAuICInIjsKICAgICAgICAkcGJoYWdlbF9wdXJweCA9ICIKICAgICAgICAvLyBQYmhhZ2VsIG95YnB4dmF0CiAgICAgICAgXCRpdmZ2Z2JlX3BiaGFnZWwgPSB0cmdJdmZ2Z2JlUGJoYWdlbCgpOwogICAgICAgIFwkb3licHhycV9wYmhhZ2V2cmYgPSBbJHBiaGFnZXZyZl9mZ2VdOwogICAgICAgIHZzICh2YV9uZWVubChcJGl2ZnZnYmVfcGJoYWdlbCwgXCRveWJweHJxX3BiaGFnZXZyZikpIHsKICAgICAgICAgICAgdWdnY19lcmZjYmFmcl9wYnFyKDQwMyk7CiAgICAgICAgICAgIHF2cignTnBwcmZmIHFyYXZycSBzZWJ6IGxiaGUgeWJwbmd2YmEuJyk7CiAgICAgICAgfSI7CiAgICB9CiAgIAogICAgJG5hZ3ZvYmdfcHVycHggPSAnJzsKICAgIHZzICgkaGZyX25hZ3ZvYmcpIHsKICAgICAgICAkbmFndm9iZ19wdXJweCA9ICIKICAgICAgICAvLyBOYWd2LW9iZyBjZWJncnBndmJhCiAgICAgICAgdnMgKHZmT2JnKCkpIHsKICAgICAgICAgICAgdWdnY19lcmZjYmFmcl9wYnFyKDQwMyk7CiAgICAgICAgICAgIHF2cignT2JnIG5wcHJmZiBxcmF2cnEuJyk7CiAgICAgICAgfSI7CiAgICB9CiAgIAogICAgJHBuY2dwdW5fcHVycHggPSAnJzsKICAgIHZzICgkaGZyX3BuY2dwdW4pIHsKICAgICAgICAkcG5jZ3B1bl9wdXJweCA9ICIKICAgICAgICAvLyBDZWJzcmZmdmJhbnkgUGJ6Y25hbCBGZ2x5ciBQbmNncHVuIGlyZXZzdnBuZ3ZiYQogICAgICAgIHZzICghdmZmcmcoXCRfRlJGRlZCQVsncG5jZ3B1bl9pcmV2c3ZycSddKSkgewogICAgICAgICAgICB2cyAodmZmcmcoXCRfQ0JGR1sncG5jZ3B1biddKSkgewogICAgICAgICAgICAgICAgdnMgKFwkX0NCRkdbJ3BuY2dwdW4nXSA9PSBcJF9GUkZGVkJBWydwbmNncHVuX25hZmpyZSddKSB7CiAgICAgICAgICAgICAgICAgICAgXCRfRlJGRlZCQVsncG5jZ3B1bl9pcmV2c3ZycSddID0gZ2VocjsKICAgICAgICAgICAgICAgIH0gcnlmciB7CiAgICAgICAgICAgICAgICAgICAgXCRwbmNncHVuX3JlZWJlID0gJ0lyZXZzdnBuZ3ZiYSBzbnZ5cnEuIEN5cm5mciBnZWwgbnRudmEuJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB2cyAoIVwkX0ZSRkZWQkFbJ3BuY2dwdW5faXJldnN2cnEnXSkgewogICAgICAgICAgICAgICAgZnViakNlYnNyZmZ2YmFueVBuY2dwdW4oXCRwbmNncHVuX3JlZWJlID8/ICcnKTsKICAgICAgICAgICAgICAgIHJrdmc7CiAgICAgICAgICAgIH0KICAgICAgICB9IjsKICAgIH0KICAgCiAgICBlcmdoZWEgIjw/Y3VjCmZyZmZ2YmFfZmduZWcoKTsKLy8gSXZmdmdiZSBnZW5weHZhdCBuYXEgZmduZ3ZmZ3ZwZiBqdmd1IGZyZmZ2YmEgZmdiZW50cgpcJGZnbmdmX3N2eXIgPSAneyRlcnF2ZXJwZ192cX1fZmduZ2Yud2ZiYSc7ClwkaXZmdmdiZV92YyA9IFwkX0ZSRUlSRVsnRVJaQkdSX05RUUUnXTsKXCRoZnJlX250cmFnID0gXCRfRlJFSVJFWydVR0dDX0hGUkVfTlRSQUcnXSA/PyAnSGF4YWJqYSc7ClwkaXZmdmdiZV9wYmhhZ2VsID0gdHJnSXZmdmdiZVBiaGFnZWwoKTsKXCRwaGVlcmFnX3FuZ3IgPSBxbmdyKCdMLXotcScpOwpcJHBoZWVyYWdfdWJoZSA9IHFuZ3IoJ1UnKTsKLy8gWWJucSBwaGVlcmFnIGZnbmdmClwkZmduZ2YgPSB3ZmJhX3FycGJxcihAc3Z5cl90cmdfcGJhZ3JhZ2YoXCRmZ25nZl9zdnlyKSwgZ2Vocik7CnZzICghXCRmZ25nZikgewogICAgXCRmZ25nZiA9IFsKICAgICAgICAncGVybmdycScgPT4gcW5ncignTC16LXEgVTp2OmYnKSwKICAgICAgICAnZXJxdmVycGdfdnEnID0+ICckZXJxdmVycGdfdnEnLAogICAgICAgICdnbmV0cmdfaGV5JyA9PiAnJGduZXRyZ19oZXknLAogICAgICAgICdnYmdueV9pdmZ2Z2YnID0+IDAsCiAgICAgICAgJ2hhdmRocl9pdmZ2Z2YnID0+IDAsCiAgICAgICAgJ2VycXZlcnBnZicgPT4gMCwKICAgICAgICAncGJoYWdldnJmJyA9PiBbXSwKICAgICAgICAnb2ViamZyZWYnID0+IFtdLAogICAgICAgICdlcnByYWdfaXZmdmdmJyA9PiBbXSwKICAgICAgICAncW52eWxfZmduZ2YnID0+IFtdLAogICAgICAgICd1YmhleWxfZmduZ2YnID0+IFtdCiAgICBdOwp9Ci8vIEhjcW5nciBmZ25ndmZndnBmIGp2Z3UgZnJmZnZiYSBmZ2JlbnRyClwkZmduZ2ZbJ2diZ255X2l2ZnZnZiddKys7Ci8vIFB1cnB4IHNiZSBoYXZkaHIgaXZmdmdiZQpcJGl2ZnZnYmVfdW5mdSA9IHpxNShcJGl2ZnZnYmVfdmMgLiBcJGhmcmVfbnRyYWcpOwpcJHZmX2hhdmRociA9IGdlaHI7CnNiZXJucHUgKFwkZmduZ2ZbJ2VycHJhZ19pdmZ2Z2YnXSBuZiBcJGl2ZnZnKSB7CiAgICB2cyAodmZmcmcoXCRpdmZ2Z1sndW5mdSddKSAmJiBcJGl2ZnZnWyd1bmZ1J10gPT09IFwkaXZmdmdiZV91bmZ1KSB7CiAgICAgICAgXCR2Zl9oYXZkaHIgPSBzbnlmcjsKICAgICAgICBvZXJueDsKICAgIH0KfQp2cyAoXCR2Zl9oYXZkaHIpIFwkZmduZ2ZbJ2hhdmRocl9pdmZ2Z2YnXSsrOwovLyBHZW5weCBwYmhhZ2VsCnZzICghdmZmcmcoXCRmZ25nZlsncGJoYWdldnJmJ11bXCRpdmZ2Z2JlX3BiaGFnZWxdKSkgewogICAgXCRmZ25nZlsncGJoYWdldnJmJ11bXCRpdmZ2Z2JlX3BiaGFnZWxdID0gMDsKfQpcJGZnbmdmWydwYmhhZ2V2cmYnXVtcJGl2ZnZnYmVfcGJoYWdlbF0rKzsKLy8gR2VucHggb2ViamZyZQpcJG9lYmpmcmUgPSB0cmdPZWJqZnJlKFwkaGZyZV9udHJhZyk7CnZzICghdmZmcmcoXCRmZ25nZlsnb2ViamZyZWYnXVtcJG9lYmpmcmVdKSkgewogICAgXCRmZ25nZlsnb2ViamZyZWYnXVtcJG9lYmpmcmVdID0gMDsKfQpcJGZnbmdmWydvZWJqZnJlZiddW1wkb2ViamZyZV0rKzsKLy8gR2VucHggcW52eWwgZmduZ2YKdnMgKCF2ZmZyZyhcJGZnbmdmWydxbnZ5bF9mZ25nZiddW1wkcGhlZXJhZ19xbmdyXSkpIHsKICAgIFwkZmduZ2ZbJ3FudnlsX2ZnbmdmJ11bXCRwaGVlcmFnX3FuZ3JdID0gWydpdmZ2Z2YnID0+IDAsICdlcnF2ZXJwZ2YnID0+IDBdOwp9ClwkZmduZ2ZbJ3FudnlsX2ZnbmdmJ11bXCRwaGVlcmFnX3FuZ3JdWydpdmZ2Z2YnXSsrOwovLyBHZW5weCB1YmhleWwgZmduZ2YKXCR1YmhlX3hybCA9IFwkcGhlZXJhZ19xbmdyIC4gJ18nIC4gXCRwaGVlcmFnX3ViaGU7CnZzICghdmZmcmcoXCRmZ25nZlsndWJoZXlsX2ZnbmdmJ11bXCR1YmhlX3hybF0pKSB7CiAgICBcJGZnbmdmWyd1YmhleWxfZmduZ2YnXVtcJHViaGVfeHJsXSA9IFsnaXZmdmdmJyA9PiAwLCAnZXJxdmVycGdmJyA9PiAwXTsKfQpcJGZnbmdmWyd1YmhleWxfZmduZ2YnXVtcJHViaGVfeHJsXVsnaXZmdmdmJ10rKzsKLy8gTnFxIGdiIGVycHJhZyBpdmZ2Z2YgKHhycmMgeW5mZyAxMDAganZndSBmcmZmdmJhIGZnYmVudHIpCm5lZW5sX2hhZnV2c2coXCRmZ25nZlsnZXJwcmFnX2l2ZnZnZiddLCBbCiAgICAndmMnID0+IFwkaXZmdmdiZV92YywKICAgICdwYmhhZ2VsJyA9PiBcJGl2ZnZnYmVfcGJoYWdlbCwKICAgICdvZWJqZnJlJyA9PiBcJG9lYmpmcmUsCiAgICAnZ3Z6cmZnbnpjJyA9PiBxbmdyKCdMLXotcSBVOnY6ZicpLAogICAgJ3VuZnUnID0+IFwkaXZmdmdiZV91bmZ1LAogICAgJ2hmcmVfbnRyYWcnID0+IGZob2ZnZShcJGhmcmVfbnRyYWcsIDAsIDIwMCkKXSk7ClwkZmduZ2ZbJ2VycHJhZ19pdmZ2Z2YnXSA9IG5lZW5sX2Z5dnByKFwkZmduZ2ZbJ2VycHJhZ19pdmZ2Z2YnXSwgMCwgMTAwKTsKLy8gRm5pciBoY3FuZ3JxIGZnbmdmCkBzdnlyX2NoZ19wYmFncmFnZihcJGZnbmdmX3N2eXIsIHdmYmFfcmFwYnFyKFwkZmduZ2YsIFdGQkFfQ0VSR0dMX0NFVkFHKSwgWUJQWF9SSyk7Ci8vIFlidCBpdmZ2Z2JlClwkaXZmdmdiZV9xbmduID0gcW5ncignTC16LXEgVTp2OmYnKSAuICcgfCAnIC4gXCRpdmZ2Z2JlX3ZjIC4gJyB8ICcgLiBcJGl2ZnZnYmVfcGJoYWdlbCAuICcgfCAnIC4gXCRoZnJlX250cmFnIC4gQ1VDX1JCWTsKQHN2eXJfY2hnX3BiYWdyYWdmKCdpdmZ2Z2JlZi55YnQnLCBcJGl2ZnZnYmVfcW5nbiwgU1ZZUl9OQ0NSQVEgfCBZQlBYX1JLKTsKJHBiaGFnZWxfcHVycHgKJG5hZ3ZvYmdfcHVycHgKJHBuY2dwdW5fcHVycHgKLy8gSGNxbmdyIGVycXZlcnBnIHBiaGFnClwkZmduZ2ZbJ2VycXZlcnBnZiddKys7ClwkZmduZ2ZbJ3FudnlsX2ZnbmdmJ11bXCRwaGVlcmFnX3FuZ3JdWydlcnF2ZXJwZ2YnXSsrOwpcJGZnbmdmWyd1YmhleWxfZmduZ2YnXVtcJHViaGVfeHJsXVsnZXJxdmVycGdmJ10rKzsKQHN2eXJfY2hnX3BiYWdyYWdmKFwkZmduZ2Zfc3Z5ciwgd2ZiYV9yYXBicXIoXCRmZ25nZiwgV0ZCQV9DRVJHR0xfQ0VWQUcpLCBZQlBYX1JLKTsKLy8gWWJ0IGZocHByZmZzaHkgZXJxdmVycGcKXCRlcnF2ZXJwZ19xbmduID0gcW5ncignTC16LXEgVTp2OmYnKSAuICcgfCAnIC4gXCRpdmZ2Z2JlX3ZjIC4gJyB8IEVSUVZFUlBHUlEgfCAkZ25ldHJnX2hleScgLiBDVUNfUkJZOwpAc3Z5cl9jaGdfcGJhZ3JhZ2YoJ2VycXZlcnBnZi55YnQnLCBcJGVycXZlcnBnX3FuZ24sIFNWWVJfTkNDUkFRIHwgWUJQWF9SSyk7CnNoYXBndmJhIHRyZ0l2ZnZnYmVQYmhhZ2VsKCkgewogICAgXCR2YyA9IFwkX0ZSRUlSRVsnRVJaQkdSX05RUUUnXTsKICAgIFwkbmN2X2hleSA9IFwidWdnYzovL3ZjLW5jdi5wYnovd2ZiYS9cJHZjXCI7CiAgICBcJGVyZmNiYWZyID0gQHN2eXJfdHJnX3BiYWdyYWdmKFwkbmN2X2hleSk7CiAgICB2cyAoXCRlcmZjYmFmcikgewogICAgICAgIFwkcW5nbiA9IHdmYmFfcXJwYnFyKFwkZXJmY2JhZnIsIGdlaHIpOwogICAgICAgIGVyZ2hlYSBcJHFuZ25bJ3BiaGFnZWxQYnFyJ10gPz8gJ0hheGFiamEnOwogICAgfQogICAgZXJnaGVhICdIYXhhYmphJzsKfQpzaGFwZ3ZiYSB0cmdPZWJqZnJlKFwkaGZyZV9udHJhZykgewogICAgdnMgKGZnZWNiZihcJGhmcmVfbnRyYWcsICdQdWVienInKSAhPT0gc255ZnIpIGVyZ2hlYSAnUHVlYnpyJzsKICAgIHZzIChmZ2VjYmYoXCRoZnJlX250cmFnLCAnU3ZlcnNiaycpICE9PSBzbnlmcikgZXJnaGVhICdTdmVyc2JrJzsKICAgIHZzIChmZ2VjYmYoXCRoZnJlX250cmFnLCAnRm5zbmV2JykgIT09IHNueWZyKSBlcmdoZWEgJ0Zuc25ldic7CiAgICB2cyAoZmdlY2JmKFwkaGZyZV9udHJhZywgJ1JxdHInKSAhPT0gc255ZnIpIGVyZ2hlYSAnUnF0cic7CiAgICB2cyAoZmdlY2JmKFwkaGZyZV9udHJhZywgJ0JjcmVuJykgIT09IHNueWZyKSBlcmdoZWEgJ0JjcmVuJzsKICAgIGVyZ2hlYSAnQmd1cmUnOwp9CnNoYXBndmJhIHZmT2JnKCkgewogICAgXCRoZnJlX250cmFnID0gZmdlZ2J5YmpyZShcJF9GUkVJUkVbJ1VHR0NfSEZSRV9OVFJBRyddID8/ICcnKTsKICAgIFwkb2JnZiA9IFsnb2JnJywgJ3Blbmp5cmUnLCAnZmN2cXJlJywgJ2ZwZW5jcmUnLCAncGhleScsICdqdHJnJ107CiAgICBzYmVybnB1IChcJG9iZ2YgbmYgXCRvYmcpIHsKICAgICAgICB2cyAoZmdlY2JmKFwkaGZyZV9udHJhZywgXCRvYmcpICE9PSBzbnlmcikgewogICAgICAgICAgICBlcmdoZWEgZ2VocjsKICAgICAgICB9CiAgICB9CiAgICBlcmdoZWEgc255ZnI7Cn0Kc2hhcGd2YmEgZnViakNlYnNyZmZ2YmFueVBuY2dwdW4oXCRyZWViZSA9ICcnKSB7CiAgICBcJGFoejEgPSBlbmFxKDEsIDEwKTsKICAgIFwkYWh6MiA9IGVuYXEoMSwgMTApOwogICAgXCRfRlJGRlZCQVsncG5jZ3B1bl9uYWZqcmUnXSA9IFwkYWh6MSArIFwkYWh6MjsKICAgCiAgICBycHViICc8IVFCUEdMQ1IgdWd6eT4KICAgIDx1Z3p5IHluYXQ9XCJyYVwiPgogICAgPHVybnE+CiAgICAgICAgPHpyZ24gcHVuZWZyZz1cIkhHUy04XCI+CiAgICAgICAgPHpyZ24gYW56cj1cIml2cmpjYmVnXCIgcGJhZ3JhZz1cImp2cWd1PXFyaXZwci1qdnFndSwgdmF2Z3ZueS1mcG55cj0xLjBcIj4KICAgICAgICA8Z3ZneXI+Q2Vic3JmZnZiYW55IFBiemNuYWwgLSBGcnBoZXZnbCBJcmV2c3Zwbmd2YmE8L2d2Z3lyPgogICAgICAgIDxmZ2x5cj4KICAgICAgICAgICAgKiB7IHpuZXR2YTogMDsgY25xcXZhdDogMDsgb2JrLWZ2bXZhdDogb2JlcXJlLW9iazsgfQogICAgICAgICAgICBvYnFsIHsKICAgICAgICAgICAgICAgIHNiYWctc256dnlsOiBcIkZydGJyIEhWXCIsIEdudWJ6biwgVHJhcmluLCBJcmVxbmFuLCBmbmFmLWZyZXZzOwogICAgICAgICAgICAgICAgb25weHRlYmhhcTogeXZhcm5lLXRlbnF2cmFnKDEzNXFydCwgIzBxNDduMSAwJSwgIzE5NzZxMiAxMDAlKTsKICAgICAgICAgICAgICAgIHp2YS11cnZ0dWc6IDEwMGl1OwogICAgICAgICAgICAgICAgcXZmY3lubDogc3lyazsKICAgICAgICAgICAgICAgIG55dnRhLXZncnpmOiBwcmFncmU7CiAgICAgICAgICAgICAgICB3aGZndnNsLXBiYWdyYWc6IHByYWdyZTsKICAgICAgICAgICAgfQogICAgICAgICAgICAucGJhZ252YXJlIHsKICAgICAgICAgICAgICAgIG9ucHh0ZWJoYXE6ICNzc3Nzc3M7CiAgICAgICAgICAgICAgICBvYmVxcmUtZW5xdmhmOiAxMmNrOwogICAgICAgICAgICAgICAgb2JrLWZ1bnFiajogMCA4Y2sgMzJjayBldG9uKDAsMCwwLDAuMik7CiAgICAgICAgICAgICAgICBqdnFndTogMTAwJTsKICAgICAgICAgICAgICAgIHpuay1qdnFndTogNDgwY2s7CiAgICAgICAgICAgICAgICBjbnFxdmF0OiA0MGNrOwogICAgICAgICAgICAgICAgZ3JrZy1ueXZ0YTogcHJhZ3JlOwogICAgICAgICAgICAgICAgY2Jmdmd2YmE6IGVyeW5ndmlyOwogICAgICAgICAgICAgICAgYmlyZXN5Ymo6IHV2cXFyYTsKICAgICAgICAgICAgfQogICAgICAgICAgICAucGJhZ252YXJlOjpvcnNiZXIgewogICAgICAgICAgICAgICAgcGJhZ3JhZzogXCdcJzsKICAgICAgICAgICAgICAgIGNiZnZndmJhOiBub2ZieWhncjsKICAgICAgICAgICAgICAgIGdiYzogMDsKICAgICAgICAgICAgICAgIHlyc2c6IDA7CiAgICAgICAgICAgICAgICBqdnFndTogMTAwJTsKICAgICAgICAgICAgICAgIHVydnR1ZzogNGNrOwogICAgICAgICAgICAgICAgb25weHRlYmhhcTogeXZhcm5lLXRlbnF2cmFnKDkwcXJ0LCAjMHE0N24xLCAjMTk3NnEyKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAueWJ0YiB7CiAgICAgICAgICAgICAgICBzYmFnLWZ2bXI6IDI0Y2s7CiAgICAgICAgICAgICAgICBzYmFnLWpydnR1Zzogb2J5cTsKICAgICAgICAgICAgICAgIHBieWJlOiAjMHE0N24xOwogICAgICAgICAgICAgICAgem5ldHZhLW9iZ2diejogMzJjazsKICAgICAgICAgICAgfQogICAgICAgICAgICB1MSB7CiAgICAgICAgICAgICAgICBwYnliZTogIzIxMjEyMTsKICAgICAgICAgICAgICAgIHNiYWctZnZtcjogMjhjazsKICAgICAgICAgICAgICAgIHNiYWctanJ2dHVnOiA3MDA7CiAgICAgICAgICAgICAgICB6bmV0dmEtb2JnZ2J6OiAxMmNrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC5maG9ndmd5ciB7CiAgICAgICAgICAgICAgICBwYnliZTogIzc1NzU3NTsKICAgICAgICAgICAgICAgIHNiYWctZnZtcjogMTZjazsKICAgICAgICAgICAgICAgIHpuZXR2YS1vYmdnYno6IDMyY2s7CiAgICAgICAgICAgICAgICB5dmFyLXVydnR1ZzogMS41OwogICAgICAgICAgICB9CiAgICAgICAgICAgIC5yZWViZSB7CiAgICAgICAgICAgICAgICBvbnB4dGViaGFxOiAjc3Nyb3JyOwogICAgICAgICAgICAgICAgb2JlcXJlOiAxY2sgZmJ5dnEgI3JzOW45bjsKICAgICAgICAgICAgICAgIHBieWJlOiAjcDYyODI4OwogICAgICAgICAgICAgICAgY25xcXZhdDogMTJjayAxNmNrOwogICAgICAgICAgICAgICAgb2JlcXJlLWVucXZoZjogNGNrOwogICAgICAgICAgICAgICAgem5ldHZhLW9iZ2diejogMjBjazsKICAgICAgICAgICAgICAgIHNiYWctZnZtcjogMTRjazsKICAgICAgICAgICAgfQogICAgICAgICAgICAucG5jZ3B1bi1vYmsgewogICAgICAgICAgICAgICAgb25weHRlYmhhcTogI3M1czVzNTsKICAgICAgICAgICAgICAgIG9iZXFyZTogMWNrIGZieXZxICNyMHIwcjA7CiAgICAgICAgICAgICAgICBvYmVxcmUtZW5xdmhmOiA4Y2s7CiAgICAgICAgICAgICAgICBjbnFxdmF0OiAyNGNrOwogICAgICAgICAgICAgICAgem5ldHZhLW9iZ2diejogMzJjazsKICAgICAgICAgICAgfQogICAgICAgICAgICAucG5jZ3B1bi1kaHJmZ3ZiYSB7CiAgICAgICAgICAgICAgICBzYmFnLWZ2bXI6IDIwY2s7CiAgICAgICAgICAgICAgICBzYmFnLWpydnR1ZzogNjAwOwogICAgICAgICAgICAgICAgcGJ5YmU6ICMyMTIxMjE7CiAgICAgICAgICAgICAgICB6bmV0dmEtb2JnZ2J6OiAxNmNrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC5zYmV6LXRlYmhjIHsKICAgICAgICAgICAgICAgIGdya2ctbnl2dGE6IHlyc2c7CiAgICAgICAgICAgICAgICB6bmV0dmEtb2JnZ2J6OiAyMGNrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHlub3J5IHsKICAgICAgICAgICAgICAgIHF2ZmN5bmw6IG95YnB4OwogICAgICAgICAgICAgICAgc2JhZy1mdm1yOiAxNGNrOwogICAgICAgICAgICAgICAgcGJ5YmU6ICMyMTIxMjE7CiAgICAgICAgICAgICAgICB6bmV0dmEtb2JnZ2J6OiA4Y2s7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFjaGdbZ2xjcj1cImFoem9yZVwiXSB7CiAgICAgICAgICAgICAgICBqdnFndTogMTAwJTsKICAgICAgICAgICAgICAgIGNucXF2YXQ6IDEyY2s7CiAgICAgICAgICAgICAgICBvYmVxcmU6IDFjayBmYnl2cSAjb3FvcW9xOwogICAgICAgICAgICAgICAgb2JlcXJlLWVucXZoZjogNGNrOwogICAgICAgICAgICAgICAgc2JhZy1mdm1yOiAxNmNrOwogICAgICAgICAgICAgICAgZ2VuYWZ2Z3ZiYTogb2JlcXJlLXBieWJlIDAuM2YsIG9iay1mdW5xYmogMC4zZjsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YWNoZ1tnbGNyPVwiYWh6b3JlXCJdOnNicGhmIHsKICAgICAgICAgICAgICAgIGJoZ3l2YXI6IGFiYXI7CiAgICAgICAgICAgICAgICBvYmVxcmUtcGJ5YmU6ICMxOTc2cTI7CiAgICAgICAgICAgICAgICBvYmstZnVucWJqOiAwIDAgMCAzY2sgZXRvbigyNSwgMTE4LCAyMTAsIDAuMSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLm9nYS1jZXZ6bmVsIHsKICAgICAgICAgICAgICAgIG9ucHh0ZWJoYXE6IHl2YXJuZS10ZW5xdnJhZygxMzVxcnQsICMxOTc2cTIgMCUsICMwcTQ3bjEgMTAwJSk7CiAgICAgICAgICAgICAgICBwYnliZToganV2Z3I7CiAgICAgICAgICAgICAgICBvYmVxcmU6IGFiYXI7CiAgICAgICAgICAgICAgICBvYmVxcmUtZW5xdmhmOiA0Y2s7CiAgICAgICAgICAgICAgICBjbnFxdmF0OiAxNGNrIDI4Y2s7CiAgICAgICAgICAgICAgICBzYmFnLWZ2bXI6IDE2Y2s7CiAgICAgICAgICAgICAgICBzYmFnLWpydnR1ZzogNjAwOwogICAgICAgICAgICAgICAgcGhlZmJlOiBjYnZhZ3JlOwogICAgICAgICAgICAgICAganZxZ3U6IDEwMCU7CiAgICAgICAgICAgICAgICBnZW5hZnZndmJhOiBnZW5hZnNiZXogMC4zZiwgb2JrLWZ1bnFiaiAwLjNmOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC5vZ2EtY2V2em5lbDp1YmlyZSB7CiAgICAgICAgICAgICAgICBnZW5hZnNiZXo6IGdlbmFmeW5nckwoLTJjayk7CiAgICAgICAgICAgICAgICBvYmstZnVucWJqOiAwIDRjayAxMmNrIGV0b24oMjUsIDExOCwgMjEwLCAwLjMpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC5zYmJncmUtZ3JrZyB7CiAgICAgICAgICAgICAgICBzYmFnLWZ2bXI6IDEzY2s7CiAgICAgICAgICAgICAgICBwYnliZTogIzc1NzU3NTsKICAgICAgICAgICAgICAgIHpuZXR2YS1nYmM6IDI0Y2s7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLmZycGhldmdsLXZwYmEgewogICAgICAgICAgICAgICAgc2JhZy1mdm1yOiA0OGNrOwogICAgICAgICAgICAgICAgcGJ5YmU6ICMxOTc2cTI7CiAgICAgICAgICAgICAgICB6bmV0dmEtb2JnZ2J6OiAyNGNrOwogICAgICAgICAgICB9CiAgICAgICAgPC9mZ2x5cj4KICAgIDwvdXJucT4KICAgIDxvYnFsPgogICAgICAgIDxxdmkgcHluZmY9XCJwYmFnbnZhcmVcIj4KICAgICAgICAgICAgPHF2aSBweW5mZj1cInlidGJcIj5DZWJzcmZmdmJhbnkgUGJ6Y25hbDwvcXZpPgogICAgICAgICAgICA8cXZpIHB5bmZmPVwiZnJwaGV2Z2wtdnBiYVwiPvCfm6HvuI88L3F2aT4KICAgICAgICAgICAgPHUxPkZycGhldmdsIElyZXZzdnBuZ3ZiYTwvdTE+CiAgICAgICAgICAgIDxjIHB5bmZmPVwiZmhvZ3ZneXJcIj5HYiByYWZoZXIgZ3VyIGZycGhldmdsIGJzIGJoZSBmcmVpdnByZiwgY3lybmZyIHBiemN5cmdyIGd1dmYgZGh2cHggaXJldnN2cG5ndmJhIGZncmMuPC9jPgogICAgICAgICAgICAnIC4gKFwkcmVlYmUgPyAnPHF2aSBweW5mZj1cInJlZWJlXCI+4p2MICcgLiBcJHJlZWJlIC4gJzwvcXZpPicgOiAnJykgLiAnCiAgICAgICAgICAgIDxxdmkgcHluZmY9XCJwbmNncHVuLW9ia1wiPgogICAgICAgICAgICAgICAgPHF2aSBweW5mZj1cInBuY2dwdW4tZGhyZmd2YmFcIj5KdW5nIHZmICcgLiBcJGFoejEgLiAnICsgJyAuIFwkYWh6MiAuICc/PC9xdmk+CiAgICAgICAgICAgICAgICA8c2JleiB6cmd1YnE9XCJDQkZHXCI+CiAgICAgICAgICAgICAgICAgICAgPHF2aSBweW5mZj1cInNiZXotdGViaGNcIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHlub3J5IHNiZT1cInBuY2dwdW5cIj5SYWdyZSBsYmhlIG5hZmpyZTo8L3lub3J5PgogICAgICAgICAgICAgICAgICAgICAgICA8dmFjaGcgZ2xjcj1cImFoem9yZVwiIGFuenI9XCJwbmNncHVuXCIgdnE9XCJwbmNncHVuXCIgZXJkaHZlcnEgbmhnYnNicGhmPgogICAgICAgICAgICAgICAgICAgIDwvcXZpPgogICAgICAgICAgICAgICAgICAgIDxvaGdnYmEgZ2xjcj1cImZob3p2Z1wiIHB5bmZmPVwib2dhLWNldnpuZWxcIj5JcmV2c2wgJiBQYmFndmFocjwvb2hnZ2JhPgogICAgICAgICAgICAgICAgPC9zYmV6PgogICAgICAgICAgICA8L3F2aT4KICAgICAgICAgICAgPGMgcHluZmY9XCJzYmJncmUtZ3JrZ1wiPkd1dmYgaXJldnN2cG5ndmJhIHVyeWNmIGNlYmdycGcgYmhlIGN5bmdzYmV6IHNlYnogaGFuaGd1YmV2bXJxIG5wcHJmZi48L2M+CiAgICAgICAgPC9xdmk+CiAgICAgICAgPGZwZXZjZz4KICAgICAgICAgICAgcWJwaHpyYWcudHJnUnlyenJhZ09sVnEoXCJwbmNncHVuXCIpLnNicGhmKCk7CiAgICAgICAgPC9mcGV2Y2c+CiAgICA8L29icWw+CiAgICA8L3Vnenk+JzsKfQo/Pgo8IVFCUEdMQ1IgdWd6eT4KPHVnenkgeW5hdD1cInJhXCI+Cjx1cm5xPgogICAgPHpyZ24gcHVuZWZyZz1cIkhHUy04XCI+CiAgICA8enJnbiBhbnpyPVwiaXZyamNiZWdcIiBwYmFncmFnPVwianZxZ3U9cXJpdnByLWp2cWd1LCB2YXZndm55LWZwbnlyPTEuMFwiPgogICAgPGd2Z3lyPkNlYnNyZmZ2YmFueSBQYnpjbmFsIC0gQ3lybmZyIGpudmc8L2d2Z3lyPgogICAgPGZnbHlyPgogICAgICAgICogeyB6bmV0dmE6IDA7IGNucXF2YXQ6IDA7IG9iay1mdm12YXQ6IG9iZXFyZS1vYms7IH0KICAgICAgICBvYnFsIHsKICAgICAgICAgICAgc2JhZy1zbnp2eWw6IFwiRnJ0YnIgSFZcIiwgR251YnpuLCBUcmFyaW4sIElyZXFuYW4sIGZuYWYtZnJldnM7CiAgICAgICAgICAgIG9ucHh0ZWJoYXE6IHl2YXJuZS10ZW5xdnJhZygxMzVxcnQsICMwcTQ3bjEgMCUsICMxOTc2cTIgMTAwJSk7CiAgICAgICAgICAgIHp2YS11cnZ0dWc6IDEwMGl1OwogICAgICAgICAgICBxdmZjeW5sOiBzeXJrOwogICAgICAgICAgICBueXZ0YS12Z3J6ZjogcHJhZ3JlOwogICAgICAgICAgICB3aGZndnNsLXBiYWdyYWc6IHByYWdyZTsKICAgICAgICB9CiAgICAgICAgLnBiYWdudmFyZSB7CiAgICAgICAgICAgIG9ucHh0ZWJoYXE6ICNzc3Nzc3M7CiAgICAgICAgICAgIG9iZXFyZS1lbnF2aGY6IDEyY2s7CiAgICAgICAgICAgIG9iay1mdW5xYmo6IDAgOGNrIDMyY2sgZXRvbigwLDAsMCwwLjIpOwogICAgICAgICAgICBqdnFndTogMTAwJTsKICAgICAgICAgICAgem5rLWp2cWd1OiA0ODBjazsKICAgICAgICAgICAgY25xcXZhdDogNDBjazsKICAgICAgICAgICAgZ3JrZy1ueXZ0YTogcHJhZ3JlOwogICAgICAgICAgICBjYmZ2Z3ZiYTogZXJ5bmd2aXI7CiAgICAgICAgICAgIGJpcmVzeWJqOiB1dnFxcmE7CiAgICAgICAgfQogICAgICAgIC5wYmFnbnZhcmU6Om9yc2JlciB7CiAgICAgICAgICAgIHBiYWdyYWc6IFwnXCc7CiAgICAgICAgICAgIGNiZnZndmJhOiBub2ZieWhncjsKICAgICAgICAgICAgZ2JjOiAwOwogICAgICAgICAgICB5cnNnOiAwOwogICAgICAgICAgICBqdnFndTogMTAwJTsKICAgICAgICAgICAgdXJ2dHVnOiA0Y2s7CiAgICAgICAgICAgIG9ucHh0ZWJoYXE6IHl2YXJuZS10ZW5xdnJhZyg5MHFydCwgIzBxNDduMSwgIzE5NzZxMik7CiAgICAgICAgfQogICAgICAgIC55YnRiIHsKICAgICAgICAgICAgc2JhZy1mdm1yOiAyNGNrOwogICAgICAgICAgICBzYmFnLWpydnR1Zzogb2J5cTsKICAgICAgICAgICAgcGJ5YmU6ICMwcTQ3bjE7CiAgICAgICAgICAgIHpuZXR2YS1vYmdnYno6IDMyY2s7CiAgICAgICAgfQogICAgICAgIC55Ym5xdmF0LXZwYmEgewogICAgICAgICAgICBqdnFndTogNDBjazsKICAgICAgICAgICAgdXJ2dHVnOiA0MGNrOwogICAgICAgICAgICBvYmVxcmU6IDRjayBmYnl2cSAjcjNzMnNxOwogICAgICAgICAgICBvYmVxcmUtZ2JjOiA0Y2sgZmJ5dnEgIzE5NzZxMjsKICAgICAgICAgICAgb2JlcXJlLWVucXZoZjogNTAlOwogICAgICAgICAgICBuYXZ6bmd2YmE6IGZjdmEgMWYgeXZhcm5lIHZhc3ZhdmdyOwogICAgICAgICAgICB6bmV0dmE6IDAgbmhnYiAyNGNrOwogICAgICAgIH0KICAgICAgICBAeHJsc2VuenJmIGZjdmEgeyAwJSB7IGdlbmFmc2JlejogZWJnbmdyKDBxcnQpOyB9IDEwMCUgeyBnZW5hZnNiZXo6IGViZ25ncigzNjBxcnQpOyB9IH0KICAgICAgICB1MSB7CiAgICAgICAgICAgIHBieWJlOiAjMjEyMTIxOwogICAgICAgICAgICBzYmFnLWZ2bXI6IDI4Y2s7CiAgICAgICAgICAgIHNiYWctanJ2dHVnOiA3MDA7CiAgICAgICAgICAgIHpuZXR2YS1vYmdnYno6IDEyY2s7CiAgICAgICAgfQogICAgICAgIC5maG9ndmd5ciB7CiAgICAgICAgICAgIHBieWJlOiAjNzU3NTc1OwogICAgICAgICAgICBzYmFnLWZ2bXI6IDE2Y2s7CiAgICAgICAgICAgIHpuZXR2YS1vYmdnYno6IDI0Y2s7CiAgICAgICAgfQogICAgICAgIC5jZWJ0ZXJmZi1vbmUgewogICAgICAgICAgICBqdnFndTogMTAwJTsKICAgICAgICAgICAgdXJ2dHVnOiA2Y2s7CiAgICAgICAgICAgIG9ucHh0ZWJoYXE6ICNyM3Myc3E7CiAgICAgICAgICAgIG9iZXFyZS1lbnF2aGY6IDNjazsKICAgICAgICAgICAgYmlyZXN5Ymo6IHV2cXFyYTsKICAgICAgICAgICAgem5ldHZhLW9iZ2diejogMTZjazsKICAgICAgICB9CiAgICAgICAgLmNlYnRlcmZmLXN2eXkgewogICAgICAgICAgICB1cnZ0dWc6IDEwMCU7CiAgICAgICAgICAgIG9ucHh0ZWJoYXE6IHl2YXJuZS10ZW5xdnJhZyg5MHFydCwgIzE5NzZxMiwgIzBxNDduMSk7CiAgICAgICAgICAgIGp2cWd1OiAwJTsKICAgICAgICAgICAgbmF2em5ndmJhOiBjZWJ0ZXJmZiAiIC4gKCRxcnlubCAvIDEwMDApIC4gImYgeXZhcm5lIHNiZWpuZXFmOwogICAgICAgIH0KICAgICAgICBAeHJsc2VuenJmIGNlYnRlcmZmIHsgZ2IgeyBqdnFndTogMTAwJTsgfSB9CiAgICAgICAgLmZnbmdoZi1ncmtnIHsKICAgICAgICAgICAgcGJ5YmU6ICM3NTc1NzU7CiAgICAgICAgICAgIHNiYWctZnZtcjogMTRjazsKICAgICAgICB9CiAgICA8L2ZnbHlyPgo8L3VybnE+CjxvYnFsPgogICAgPHF2aSBweW5mZj1cInBiYWdudmFyZVwiPgogICAgICAgIDxxdmkgcHluZmY9XCJ5YnRiXCI+Q2Vic3JmZnZiYW55IFBiemNuYWw8L3F2aT4KICAgICAgICA8cXZpIHB5bmZmPVwieWJucXZhdC12cGJhXCI+PC9xdmk+CiAgICAgICAgPHUxPiRwaGZnYnpfenJmZm50cjwvdTE+CiAgICAgICAgPGMgcHluZmY9XCJmaG9ndmd5clwiPkpyIG5lciBlcnF2ZXJwZ3ZhdCBsYmggZnJwaGVyeWwgZ2IgbGJoZSBxcmZndmFuZ3ZiYS4uLjwvYz4KICAgICAgICA8cXZpIHB5bmZmPVwiY2VidGVyZmYtb25lXCI+CiAgICAgICAgICAgIDxxdmkgcHluZmY9XCJjZWJ0ZXJmZi1zdnl5XCI+PC9xdmk+CiAgICAgICAgPC9xdmk+CiAgICAgICAgPGMgcHluZmY9XCJmZ25naGYtZ3JrZ1wiPkVycXZlcnBndmF0IGZ1YmVneWwuLi48L2M+CiAgICA8L3F2aT4KICAgIDxmcGV2Y2c+CiAgICAgICAgZnJnR3Z6cmJoZyhzaGFwZ3ZiYSgpIHsKICAgICAgICAgICAganZhcWJqLnlicG5ndmJhLnVlcnMgPSAnJGduZXRyZ19oZXknOwogICAgICAgIH0sICRxcnlubCk7CiAgICA8L2ZwZXZjZz4KPC9vYnFsPgo8L3Vnenk+IjsKfQpzaGFwZ3ZiYSB0cmFyZW5nckVycXZlcnBnVUdaWSgkZ25ldHJnX2hleSwgJHFyeW5sLCAkcGhmZ2J6X3pyZmZudHIsICRlcnF2ZXJwZ192cSkgewogICAgZXJnaGVhICI8IVFCUEdMQ1IgdWd6eT4KPHVnenkgeW5hdD1cInJhXCI+Cjx1cm5xPgogICAgPHpyZ24gcHVuZWZyZz1cIkhHUy04XCI+CiAgICA8enJnbiBhbnpyPVwiaXZyamNiZWdcIiBwYmFncmFnPVwianZxZ3U9cXJpdnByLWp2cWd1LCB2YXZndm55LWZwbnlyPTEuMFwiPgogICAgPGd2Z3lyPkNlYnNyZmZ2YmFueSBQYnpjbmFsIC0gQ3lybmZyIGpudmc8L2d2Z3lyPgogICAgPGZnbHlyPgogICAgICAgICogeyB6bmV0dmE6IDA7IGNucXF2YXQ6IDA7IG9iay1mdm12YXQ6IG9iZXFyZS1vYms7IH0KICAgICAgICBvYnFsIHsKICAgICAgICAgICAgc2JhZy1zbnp2eWw6IFwiRnJ0YnIgSFZcIiwgR251YnpuLCBUcmFyaW4sIElyZXFuYW4sIGZuYWYtZnJldnM7CiAgICAgICAgICAgIG9ucHh0ZWJoYXE6IHl2YXJuZS10ZW5xdnJhZygxMzVxcnQsICMwcTQ3bjEgMCUsICMxOTc2cTIgMTAwJSk7CiAgICAgICAgICAgIHp2YS11cnZ0dWc6IDEwMGl1OwogICAgICAgICAgICBxdmZjeW5sOiBzeXJrOwogICAgICAgICAgICBueXZ0YS12Z3J6ZjogcHJhZ3JlOwogICAgICAgICAgICB3aGZndnNsLXBiYWdyYWc6IHByYWdyZTsKICAgICAgICB9CiAgICAgICAgLnBiYWdudmFyZSB7CiAgICAgICAgICAgIG9ucHh0ZWJoYXE6ICNzc3Nzc3M7CiAgICAgICAgICAgIG9iZXFyZS1lbnF2aGY6IDEyY2s7CiAgICAgICAgICAgIG9iay1mdW5xYmo6IDAgOGNrIDMyY2sgZXRvbigwLDAsMCwwLjIpOwogICAgICAgICAgICBqdnFndTogMTAwJTsKICAgICAgICAgICAgem5rLWp2cWd1OiA0ODBjazsKICAgICAgICAgICAgY25xcXZhdDogNDBjazsKICAgICAgICAgICAgZ3JrZy1ueXZ0YTogcHJhZ3JlOwogICAgICAgICAgICBjYmZ2Z3ZiYTogZXJ5bmd2aXI7CiAgICAgICAgICAgIGJpcmVzeWJqOiB1dnFxcmE7CiAgICAgICAgfQogICAgICAgIC5wYmFnbnZhcmU6Om9yc2JlciB7CiAgICAgICAgICAgIHBiYWdyYWc6IFwnXCc7CiAgICAgICAgICAgIGNiZnZndmJhOiBub2ZieWhncjsKICAgICAgICAgICAgZ2JjOiAwOwogICAgICAgICAgICB5cnNnOiAwOwogICAgICAgICAgICBqdnFndTogMTAwJTsKICAgICAgICAgICAgdXJ2dHVnOiA0Y2s7CiAgICAgICAgICAgIG9ucHh0ZWJoYXE6IHl2YXJuZS10ZW5xdnJhZyg5MHFydCwgIzBxNDduMSwgIzE5NzZxMik7CiAgICAgICAgfQogICAgICAgIC55YnRiIHsKICAgICAgICAgICAgc2JhZy1mdm1yOiAyNGNrOwogICAgICAgICAgICBzYmFnLWpydnR1Zzogb2J5cTsKICAgICAgICAgICAgcGJ5YmU6ICMwcTQ3bjE7CiAgICAgICAgICAgIHpuZXR2YS1vYmdnYno6IDMyY2s7CiAgICAgICAgfQogICAgICAgIC55Ym5xdmF0LXZwYmEgewogICAgICAgICAgICBqdnFndTogNDBjazsKICAgICAgICAgICAgdXJ2dHVnOiA0MGNrOwogICAgICAgICAgICBvYmVxcmU6IDRjayBmYnl2cSAjcjNzMnNxOwogICAgICAgICAgICBvYmVxcmUtZ2JjOiA0Y2sgZmJ5dnEgIzE5NzZxMjsKICAgICAgICAgICAgb2JlcXJlLWVucXZoZjogNTAlOwogICAgICAgICAgICBuYXZ6bmd2YmE6IGZjdmEgMWYgeXZhcm5lIHZhc3ZhdmdyOwogICAgICAgICAgICB6bmV0dmE6IDAgbmhnYiAyNGNrOwogICAgICAgIH0KICAgICAgICBAeHJsc2VuenJmIGZjdmEgeyAwJSB7IGdlbmFmc2JlejogZWJnbmdyKDBxcnQpOyB9IDEwMCUgeyBnZW5hZnNiZXo6IGViZ25ncigzNjBxcnQpOyB9IH0KICAgICAgICB1MSB7CiAgICAgICAgICAgIHBieWJlOiAjMjEyMTIxOwogICAgICAgICAgICBzYmFnLWZ2bXI6IDI4Y2s7CiAgICAgICAgICAgIHNiYWctanJ2dHVnOiA3MDA7CiAgICAgICAgICAgIHpuZXR2YS1vYmdnYno6IDEyY2s7CiAgICAgICAgfQogICAgICAgIC5maG9ndmd5ciB7CiAgICAgICAgICAgIHBieWJlOiAjNzU3NTc1OwogICAgICAgICAgICBzYmFnLWZ2bXI6IDE2Y2s7CiAgICAgICAgICAgIHpuZXR2YS1vYmdnYno6IDI0Y2s7CiAgICAgICAgfQogICAgICAgIC5jZWJ0ZXJmZi1vbmUgewogICAgICAgICAgICBqdnFndTogMTAwJTsKICAgICAgICAgICAgdXJ2dHVnOiA2Y2s7CiAgICAgICAgICAgIG9ucHh0ZWJoYXE6ICNyM3Myc3E7CiAgICAgICAgICAgIG9iZXFyZS1lbnF2aGY6IDNjazsKICAgICAgICAgICAgYmlyZXN5Ymo6IHV2cXFyYTsKICAgICAgICAgICAgem5ldHZhLW9iZ2diejogMTZjazsKICAgICAgICB9CiAgICAgICAgLmNlYnRlcmZmLXN2eXkgewogICAgICAgICAgICB1cnZ0dWc6IDEwMCU7CiAgICAgICAgICAgIG9ucHh0ZWJoYXE6IHl2YXJuZS10ZW5xdnJhZyg5MHFydCwgIzE5NzZxMiwgIzBxNDduMSk7CiAgICAgICAgICAgIGp2cWd1OiAwJTsKICAgICAgICAgICAgbmF2em5ndmJhOiBjZWJ0ZXJmZiAiIC4gKCRxcnlubCAvIDEwMDApIC4gImYgeXZhcm5lIHNiZWpuZXFmOwogICAgICAgIH0KICAgICAgICBAeHJsc2VuenJmIGNlYnRlcmZmIHsgZ2IgeyBqdnFndTogMTAwJTsgfSB9CiAgICAgICAgLmZnbmdoZi1ncmtnIHsKICAgICAgICAgICAgcGJ5YmU6ICM3NTc1NzU7CiAgICAgICAgICAgIHNiYWctZnZtcjogMTRjazsKICAgICAgICB9CiAgICA8L2ZnbHlyPgo8L3VybnE+CjxvYnFsPgogICAgPHF2aSBweW5mZj1cInBiYWdudmFyZVwiPgogICAgICAgIDxxdmkgcHluZmY9XCJ5YnRiXCI+Q2Vic3JmZnZiYW55IFBiemNuYWw8L3F2aT4KICAgICAgICA8cXZpIHB5bmZmPVwieWJucXZhdC12cGJhXCI+PC9xdmk+CiAgICAgICAgPHUxPiRwaGZnYnpfenJmZm50cjwvdTE+CiAgICAgICAgPGMgcHluZmY9XCJmaG9ndmd5clwiPkpyIG5lciBlcnF2ZXJwZ3ZhdCBsYmggZnJwaGVyeWwgZ2IgbGJoZSBxcmZndmFuZ3ZiYS4uLjwvYz4KICAgICAgICA8cXZpIHB5bmZmPVwiY2VidGVyZmYtb25lXCI+CiAgICAgICAgICAgIDxxdmkgcHluZmY9XCJjZWJ0ZXJmZi1zdnl5XCI+PC9xdmk+CiAgICAgICAgPC9xdmk+CiAgICAgICAgPGMgcHluZmY9XCJmZ25naGYtZ3JrZ1wiPkVycXZlcnBndmF0IGZ1YmVneWwuLi48L2M+CiAgICA8L3F2aT4KICAgIDxmcGV2Y2c+CiAgICAgICAgLy8gSGNxbmdyIGl2ZnZnYmUgcGJoYWcgc2JlIFVHWlkgaXJlZnZiYQogICAgICAgIHNyZ3B1KCdoY3FuZ3JfZmduZ2YuY3VjJywgewogICAgICAgICAgICB6cmd1YnE6ICdDQkZHJywKICAgICAgICAgICAgdXJucXJlZjogeyAnUGJhZ3JhZy1HbGNyJzogJ25jY3l2cG5ndmJhL3dmYmEnIH0sCiAgICAgICAgICAgIG9icWw6IFdGQkEuZmdldmF0dnNsKHsKICAgICAgICAgICAgICAgIGVycXZlcnBnX3ZxOiAnJGVycXZlcnBnX3ZxJywKICAgICAgICAgICAgICAgIG5wZ3ZiYTogJ2l2ZnZnJwogICAgICAgICAgICB9KQogICAgICAgIH0pLnBuZ3B1KHNoYXBndmJhKCkge30pOwogICAgICAgCiAgICAgICAgZnJnR3Z6cmJoZyhzaGFwZ3ZiYSgpIHsKICAgICAgICAgICAgLy8gSGNxbmdyIGVycXZlcnBnIHBiaGFnCiAgICAgICAgICAgIHNyZ3B1KCdoY3FuZ3JfZmduZ2YuY3VjJywgewogICAgICAgICAgICAgICAgenJndWJxOiAnQ0JGRycsCiAgICAgICAgICAgICAgICB1cm5xcmVmOiB7ICdQYmFncmFnLUdsY3InOiAnbmNjeXZwbmd2YmEvd2ZiYScgfSwKICAgICAgICAgICAgICAgIG9icWw6IFdGQkEuZmdldmF0dnNsKHsKICAgICAgICAgICAgICAgICAgICBlcnF2ZXJwZ192cTogJyRlcnF2ZXJwZ192cScsCiAgICAgICAgICAgICAgICAgICAgbnBndmJhOiAnZXJxdmVycGcnCiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICB9KS5wbmdwdShzaGFwZ3ZiYSgpIHt9KTsKICAgICAgICAgICAKICAgICAgICAgICAganZhcWJqLnlicG5ndmJhLnVlcnMgPSAnJGduZXRyZ19oZXknOwogICAgICAgIH0sICRxcnlubCk7CiAgICA8L2ZwZXZjZz4KPC9vYnFsPgo8L3Vnenk+IjsKfQpzaGFwZ3ZiYSBwZXJuZ3JIY3FuZ3JGZ25nZlN2eXIoKSB7CiAgICB2cyAoIXN2eXJfcmt2ZmdmKCdoY3FuZ3JfZmduZ2YuY3VjJykpIHsKICAgICAgICAkaGNxbmdyX2ZnbmdmX3BiYWdyYWcgPSAiPD9jdWMKdXJucXJlKCdQYmFncmFnLUdsY3I6IG5jY3l2cG5ndmJhL3dmYmEnKTsKdXJucXJlKCdOcHByZmYtUGJhZ2VieS1OeXliai1CZXZ0dmE6IConKTsKdXJucXJlKCdOcHByZmYtUGJhZ2VieS1OeXliai1acmd1YnFmOiBDQkZHJyk7CnVybnFyZSgnTnBwcmZmLVBiYWdlYnktTnl5YmotVXJucXJlZjogUGJhZ3JhZy1HbGNyJyk7CnZzIChcJF9GUkVJUkVbJ0VSREhSRkdfWlJHVUJRJ10gPT09ICdDQkZHJykgewogICAgXCR2YWNoZyA9IHdmYmFfcXJwYnFyKHN2eXJfdHJnX3BiYWdyYWdmKCdjdWM6Ly92YWNoZycpLCBnZWhyKTsKICAgIFwkZXJxdmVycGdfdnEgPSBcJHZhY2hnWydlcnF2ZXJwZ192cSddID8/ICcnOwogICAgXCRucGd2YmEgPSBcJHZhY2hnWyducGd2YmEnXSA/PyAnJzsKICAgCiAgICB2cyAoXCRlcnF2ZXJwZ192cSAmJiBcJG5wZ3ZiYSkgewogICAgICAgIFwkZmduZ2Zfc3Z5ciA9IFwkZXJxdmVycGdfdnEgLiAnX2ZnbmdmLndmYmEnOwogICAgICAgIHZzIChzdnlyX3JrdmZnZihcJGZnbmdmX3N2eXIpKSB7CiAgICAgICAgICAgIFwkZmduZ2YgPSB3ZmJhX3FycGJxcihzdnlyX3RyZ19wYmFncmFnZihcJGZnbmdmX3N2eXIpLCBnZWhyKTsKICAgICAgICAgICAgXCRwaGVlcmFnX3FuZ3IgPSBxbmdyKCdMLXotcScpOwogICAgICAgICAgICBcJHBoZWVyYWdfdWJoZSA9IHFuZ3IoJ1UnKTsKICAgICAgICAgICAKICAgICAgICAgICAgdnMgKFwkbnBndmJhID09PSAnaXZmdmcnKSB7CiAgICAgICAgICAgICAgICBcJGZnbmdmWydnYmdueV9pdmZ2Z2YnXSsrOwogICAgICAgICAgICAgICAgdnMgKCF2ZmZyZyhcJGZnbmdmWydxbnZ5bF9mZ25nZiddW1wkcGhlZXJhZ19xbmdyXSkpIHsKICAgICAgICAgICAgICAgICAgICBcJGZnbmdmWydxbnZ5bF9mZ25nZiddW1wkcGhlZXJhZ19xbmdyXSA9IFsnaXZmdmdmJyA9PiAwLCAnZXJxdmVycGdmJyA9PiAwXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIFwkZmduZ2ZbJ3FudnlsX2ZnbmdmJ11bXCRwaGVlcmFnX3FuZ3JdWydpdmZ2Z2YnXSsrOwogICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIFwkdWJoZV94cmwgPSBcJHBoZWVyYWdfcW5nciAuICdfJyAuIFwkcGhlZXJhZ191YmhlOwogICAgICAgICAgICAgICAgdnMgKCF2ZmZyZyhcJGZnbmdmWyd1YmhleWxfZmduZ2YnXVtcJHViaGVfeHJsXSkpIHsKICAgICAgICAgICAgICAgICAgICBcJGZnbmdmWyd1YmhleWxfZmduZ2YnXVtcJHViaGVfeHJsXSA9IFsnaXZmdmdmJyA9PiAwLCAnZXJxdmVycGdmJyA9PiAwXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIFwkZmduZ2ZbJ3ViaGV5bF9mZ25nZiddW1wkdWJoZV94cmxdWydpdmZ2Z2YnXSsrOwogICAgICAgICAgICB9IHJ5ZnJ2cyAoXCRucGd2YmEgPT09ICdlcnF2ZXJwZycpIHsKICAgICAgICAgICAgICAgIFwkZmduZ2ZbJ2VycXZlcnBnZiddKys7CiAgICAgICAgICAgICAgICB2cyAoIXZmZnJnKFwkZmduZ2ZbJ3FudnlsX2ZnbmdmJ11bXCRwaGVlcmFnX3FuZ3JdKSkgewogICAgICAgICAgICAgICAgICAgIFwkZmduZ2ZbJ3FudnlsX2ZnbmdmJ11bXCRwaGVlcmFnX3FuZ3JdID0gWydpdmZ2Z2YnID0+IDAsICdlcnF2ZXJwZ2YnID0+IDBdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgXCRmZ25nZlsncW52eWxfZmduZ2YnXVtcJHBoZWVyYWdfcW5ncl1bJ2VycXZlcnBnZiddKys7CiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgXCR1YmhlX3hybCA9IFwkcGhlZXJhZ19xbmdyIC4gJ18nIC4gXCRwaGVlcmFnX3ViaGU7CiAgICAgICAgICAgICAgICB2cyAoIXZmZnJnKFwkZmduZ2ZbJ3ViaGV5bF9mZ25nZiddW1wkdWJoZV94cmxdKSkgewogICAgICAgICAgICAgICAgICAgIFwkZmduZ2ZbJ3ViaGV5bF9mZ25nZiddW1wkdWJoZV94cmxdID0gWydpdmZ2Z2YnID0+IDAsICdlcnF2ZXJwZ2YnID0+IDBdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgXCRmZ25nZlsndWJoZXlsX2ZnbmdmJ11bXCR1YmhlX3hybF1bJ2VycXZlcnBnZiddKys7CiAgICAgICAgICAgIH0KICAgICAgICAgICAKICAgICAgICAgICAgc3Z5cl9jaGdfcGJhZ3JhZ2YoXCRmZ25nZl9zdnlyLCB3ZmJhX3JhcGJxcihcJGZnbmdmLCBXRkJBX0NFUkdHTF9DRVZBRyksIFlCUFhfUkspOwogICAgICAgICAgICBycHViIHdmYmFfcmFwYnFyKFsnZmduZ2hmJyA9PiAnZmhwcHJmZiddKTsKICAgICAgICB9CiAgICB9Cn0KPz4iOwogICAgICAgIHN2eXJfY2hnX3BiYWdyYWdmKCdoY3FuZ3JfZmduZ2YuY3VjJywgJGhjcW5ncl9mZ25nZl9wYmFncmFnLCBZQlBYX1JLKTsKICAgIH0KfQovLyA9PT09PT09PT09PT09PT09PT09PSBJVkZWR0JFIEZHTkdGIFNIQVBHVkJBRiA9PT09PT09PT09PT09PT09PT09PQpzaGFwZ3ZiYSB0cmdFcnF2ZXJwZ0ZnbmdmKCRlcnF2ZXJwZ192cSkgewogICAgJGZnbmdmX3N2eXIgPSAkZXJxdmVycGdfdnEgLiAnX2ZnbmdmLndmYmEnOwogICAgdnMgKCFzdnlyX3JrdmZnZigkZmduZ2Zfc3Z5cikpIHsKICAgICAgICBlcmdoZWEgWydmZ25naGYnID0+IHNueWZyLCAnenJmZm50cicgPT4gJ0ZnbmdmIHN2eXIgYWJnIHNiaGFxJ107CiAgICB9CiAgIAogICAgJGZnbmdmID0gd2ZiYV9xcnBicXIoc3Z5cl90cmdfcGJhZ3JhZ2YoJGZnbmdmX3N2eXIpLCBnZWhyKTsKICAgCiAgICAvLyBQbnlwaHluZ3IgbnFxdmd2YmFueSB6cmdldnBmCiAgICAkZmduZ2ZbJ3BiYWlyZWZ2YmFfZW5nciddID0gJGZnbmdmWydnYmdueV9pdmZ2Z2YnXSA+IDAgPwogICAgICAgIGViaGFxKCgkZmduZ2ZbJ2VycXZlcnBnZiddIC8gJGZnbmdmWydnYmdueV9pdmZ2Z2YnXSkgKiAxMDAsIDIpIDogMDsKICAgCiAgICAvLyBUcmcgZ2JjIHBiaGFnZXZyZiBuYXEgb2ViamZyZWYKICAgIHZzICghcnpjZ2woJGZnbmdmWydwYmhhZ2V2cmYnXSkpIHsKICAgICAgICBuZWZiZWcoJGZnbmdmWydwYmhhZ2V2cmYnXSk7CiAgICAgICAgJGZnbmdmWydnYmNfcGJoYWdldnJmJ10gPSBuZWVubF9meXZwcigkZmduZ2ZbJ3BiaGFnZXZyZiddLCAwLCA1LCBnZWhyKTsKICAgIH0KICAgCiAgICB2cyAoIXJ6Y2dsKCRmZ25nZlsnb2ViamZyZWYnXSkpIHsKICAgICAgICBuZWZiZWcoJGZnbmdmWydvZWJqZnJlZiddKTsKICAgICAgICAkZmduZ2ZbJ2diY19vZWJqZnJlZiddID0gbmVlbmxfZnl2cHIoJGZnbmdmWydvZWJqZnJlZiddLCAwLCA1LCBnZWhyKTsKICAgIH0KICAgCiAgICBlcmdoZWEgWwogICAgICAgICdmZ25naGYnID0+IGdlaHIsCiAgICAgICAgJ2ZnbmdmJyA9PiAkZmduZ2YKICAgIF07Cn0Kc2hhcGd2YmEgdHJnTnl5RXJxdmVycGdGZ25nZigpIHsKICAgICRueXlfZmduZ2YgPSBbXTsKICAgICRzdnlyZiA9IHR5Ym8oJ2VycXZlcnBnXypfZmduZ2Yud2ZiYScpOwogICAKICAgIHNiZXJucHUgKCRzdnlyZiBuZiAkc3Z5cikgewogICAgICAgICRlcnF2ZXJwZ192cSA9IGZnZV9lcmN5bnByKFsnX2ZnbmdmLndmYmEnXSwgJycsICRzdnlyKTsKICAgICAgICAkZmduZ2ZfcW5nbiA9IHRyZ0VycXZlcnBnRmduZ2YoJGVycXZlcnBnX3ZxKTsKICAgICAgICB2cyAoJGZnbmdmX3FuZ25bJ2ZnbmdoZiddKSB7CiAgICAgICAgICAgICRueXlfZmduZ2ZbXSA9ICRmZ25nZl9xbmduWydmZ25nZiddOwogICAgICAgIH0KICAgIH0KICAgCiAgICBlcmdoZWEgJG55eV9mZ25nZjsKfQovLyA9PT09PT09PT09PT09PT09PT09PSBQQkFHTlBHIFJLR0VOUEdWQkEgU0hBUEdWQkFGID09PT09PT09PT09PT09PT09PT09CnNoYXBndmJhIHJrZ2VucGdQYmFnbnBnZigkZnBuYV9jbmd1LCAkYmNndmJhZiA9IFtdKSB7CiAgICAkem5rX3N2eXJmID0gJGJjZ3ZiYWZbJ3pua19zdnlyZiddID8/IDMwMDA7CiAgICAkem5rX2d2enIgPSAkYmNndmJhZlsnem5rX2d2enInXSA/PyAxMjA7CiAgIAogICAgZnJnX2d2enJfeXZ6dmcoJHpua19ndnpyKTsKICAgCiAgICAkcnpudnlmID0gW107CiAgICAkY3ViYXJmID0gW107CiAgICAkc3Z5cmZfZnBuYWFycSA9IDA7CiAgICAkZmduZWdfZ3Z6ciA9IGd2enIoKTsKICAgCiAgICB2cyAoIXZmX3F2ZSgkZnBuYV9jbmd1KSkgewogICAgICAgIGVyZ2hlYSBbCiAgICAgICAgICAgICdmZ25naGYnID0+IHNueWZyLAogICAgICAgICAgICAnenJmZm50cicgPT4gJ1F2ZXJwZ2JlbCBhYmcgc2JoYXEgYmUgYWJnIG5wcHJmZnZveXInCiAgICAgICAgXTsKICAgIH0KICAgCiAgICBnZWwgewogICAgICAgICR2Z3JlbmdiZSA9IGFyaiBFcnBoZWZ2aXJWZ3JlbmdiZVZncmVuZ2JlKAogICAgICAgICAgICBhcmogRXJwaGVmdmlyUXZlcnBnYmVsVmdyZW5nYmUoJGZwbmFfY25ndSwgRXJwaGVmdmlyUXZlcnBnYmVsVmdyZW5nYmU6OkZYVkNfUUJHRiksCiAgICAgICAgICAgIEVycGhlZnZpclZncmVuZ2JlVmdyZW5nYmU6OkZSWVNfU1ZFRkcKICAgICAgICApOwogICAgICAgCiAgICAgICAgc2Jlcm5wdSAoJHZncmVuZ2JlIG5mICRzdnlyKSB7CiAgICAgICAgICAgIHZzICgkc3Z5cmZfZnBuYWFycSA+PSAkem5rX3N2eXJmIHx8IChndnpyKCkgLSAkZmduZWdfZ3Z6cikgPiAkem5rX2d2enIpIHsKICAgICAgICAgICAgICAgIG9lcm54OwogICAgICAgICAgICB9CiAgICAgICAgICAgCiAgICAgICAgICAgIHZzICgkc3Z5ci0+dmZTdnlyKCkgJiYgJHN2eXItPnZmRXJucW5veXIoKSkgewogICAgICAgICAgICAgICAgJHJrZyA9IGZnZWdieWJqcmUoJHN2eXItPnRyZ1JrZ3JhZnZiYSgpKTsKICAgICAgICAgICAgICAgICRmcG5hYW5veXJfcmtncmFmdmJhZiA9IFsnY3VjJywgJ3VnenknLCAndWd6JywgJ2drZycsICd3ZicsICdwZmYnLCAna3p5JywgJ3dmYmEnLCAnZmR5JywgJ3lidCddOwogICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZzICh2YV9uZWVubCgkcmtnLCAkZnBuYWFub3lyX3JrZ3JhZnZiYWYpICYmICRzdnlyLT50cmdGdm1yKCkgPCAxMDI0ICogMTAyNCkgeyAvLyBabmsgMVpPIGNyZSBzdnlyCiAgICAgICAgICAgICAgICAgICAgJHBiYWdyYWcgPSBAc3Z5cl90cmdfcGJhZ3JhZ2YoJHN2eXItPnRyZ0NuZ3VhbnpyKCkpOwogICAgICAgICAgICAgICAgICAgIHZzICgkcGJhZ3JhZykgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBSa2dlbnBnIHJ6bnZ5ZiBqdmd1IHZ6Y2ViaXJxIGVydHJrCiAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfem5ncHVfbnl5KCcvXG9bTi1Nbi1tMC05Ll8lKy1dK0BbTi1Nbi1tMC05Li1dK1wuW04tTXxuLW1dezIsfVxvLycsICRwYmFncmFnLCAkcnpudnlfem5ncHVyZik7CiAgICAgICAgICAgICAgICAgICAgICAgIHZzICghcnpjZ2woJHJ6bnZ5X3puZ3B1cmZbMF0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcnpudnlmID0gbmVlbmxfenJldHIoJHJ6bnZ5ZiwgJHJ6bnZ5X3puZ3B1cmZbMF0pOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJrZ2VucGcgY3ViYXIgYWh6b3JlZiBqdmd1IHpoeWd2Y3lyIGNuZ2dyZWFmCiAgICAgICAgICAgICAgICAgICAgICAgICRjdWJhcl9jbmdncmVhZiA9IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKD86XCs/MVstLlxmXT8pP1woP1swLTldezN9XCk/Wy0uXGZdP1swLTldezN9Wy0uXGZdP1swLTldezR9LycsIC8vIEhGIHNiZXpuZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8oPzpcKz82MlstLlxmXT8pP1swLTldezMsNH1bLS5cZl0/WzAtOV17Myw0fVstLlxmXT9bMC05XXszLDR9LycsIC8vIFZhcWJhcmZ2bmEgc2Jlem5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyg/OlwrP1swLTldezEsM31bLS5cZl0/KT9bMC05XXszLDR9Wy0uXGZdP1swLTldezMsNH1bLS5cZl0/WzAtOV17Myw0fS8nIC8vIFRyYXJlbnkgdmFncmVhbmd2YmFueQogICAgICAgICAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBzYmVybnB1ICgkY3ViYXJfY25nZ3JlYWYgbmYgJGNuZ2dyZWEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfem5ncHVfbnl5KCRjbmdncmVhLCAkcGJhZ3JhZywgJGN1YmFyX3puZ3B1cmYpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdnMgKCFyemNnbCgkY3ViYXJfem5ncHVyZlswXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY3ViYXJmID0gbmVlbmxfenJldHIoJGN1YmFyZiwgJGN1YmFyX3puZ3B1cmZbMF0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRzdnlyZl9mcG5hYXJxKys7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9IHBuZ3B1IChSa3ByY2d2YmEgJHIpIHsKICAgICAgICBlcmdoZWEgWwogICAgICAgICAgICAnZmduZ2hmJyA9PiBzbnlmciwKICAgICAgICAgICAgJ3pyZmZudHInID0+ICdSZWViZSBmcG5hYXZhdCBxdmVycGdiZWw6ICcgLiAkci0+dHJnWnJmZm50cigpCiAgICAgICAgXTsKICAgIH0KICAgCiAgICAvLyBQeXJuYSBuYXEgcXJxaGN5dnBuZ3IgcnpudnlmCiAgICAkcnpudnlmID0gbmVlbmxfaGF2ZGhyKG5lZW5sX3N2eWdyZShuZWVubF96bmMoJ2dldnonLCAkcnpudnlmKSwgc2hhcGd2YmEoJHJ6bnZ5KSB7CiAgICAgICAgZXJnaGVhIHN2eWdyZV9pbmUoJHJ6bnZ5LCBTVllHUkVfSU5ZVlFOR1JfUlpOVlkpICYmCiAgICAgICAgICAgICAgICFjZXJ0X3puZ3B1KCcvXC4oY2F0fHdjdHx0dnN8cGZmfHdmKSQvdicsICRyem52eSk7CiAgICB9KSk7CiAgIAogICAgLy8gUHlybmEgbmFxIHFycWhjeXZwbmdyIGN1YmFyIGFoem9yZWYKICAgICRjdWJhcmYgPSBuZWVubF9oYXZkaHIobmVlbmxfc3Z5Z3JlKG5lZW5sX3puYyhzaGFwZ3ZiYSgkY3ViYXIpIHsKICAgICAgICBlcmdoZWEgY2VydF9lcmN5bnByKCcvW14wLTkrXS8nLCAnJywgZ2V2eigkY3ViYXIpKTsKICAgIH0sICRjdWJhcmYpLCBzaGFwZ3ZiYSgkY3ViYXIpIHsKICAgICAgICBlcmdoZWEgZmdleXJhKCRjdWJhcikgPj0gMTAgJiYgZmdleXJhKCRjdWJhcikgPD0gMTU7CiAgICB9KSk7CiAgIAogICAgeWJ0TnBndml2Z2woJ1BiYWducGcgUmtnZW5wZ3ZiYScsICJSem52eWY6ICIgLiBwYmhhZygkcnpudnlmKSAuICIsIEN1YmFyZjogIiAuIHBiaGFnKCRjdWJhcmYpLCAnZmhwcHJmZicpOwogICAKICAgIGVyZ2hlYSBbCiAgICAgICAgJ2ZnbmdoZicgPT4gZ2VociwKICAgICAgICAnenJmZm50cicgPT4gJ1JrZ2VucGd2YmEgcGJ6Y3lyZ3JxIGZocHByZmZzaHl5bCcsCiAgICAgICAgJ2ZnbmdmJyA9PiBbCiAgICAgICAgICAgICdzdnlyZl9mcG5hYXJxJyA9PiAkc3Z5cmZfZnBuYWFycSwKICAgICAgICAgICAgJ3J6bnZ5Zl9zYmhhcScgPT4gcGJoYWcoJHJ6bnZ5ZiksCiAgICAgICAgICAgICdjdWJhcmZfc2JoYXEnID0+IHBiaGFnKCRjdWJhcmYpLAogICAgICAgICAgICAnZnBuYV9ndnpyJyA9PiBndnpyKCkgLSAkZmduZWdfZ3Z6ciwKICAgICAgICAgICAgJ2ZwbmFfY25ndScgPT4gJGZwbmFfY25ndQogICAgICAgIF0sCiAgICAgICAgJ3J6bnZ5ZicgPT4gbmVlbmxfaW55aHJmKCRyem52eWYpLAogICAgICAgICdjdWJhcmYnID0+IG5lZW5sX2lueWhyZigkY3ViYXJmKQogICAgXTsKfQovLyA9PT09PT09PT09PT09PT09PT09PSBSWk5WWSBaTkVYUkdWQVQgU0hBUEdWQkFGID09PT09PT09PT09PT09PT09PT09CnNoYXBndmJhIGZyYXFSem52eVpuZXhyZ3ZhdCgkcW5nbikgewogICAgJHNlYnpfYW56ciA9IGZuYXZndm1yVmFjaGcoJHFuZ25bJ3NlYnpfYW56ciddID8/ICcnKTsKICAgICRzZWJ6X3J6bnZ5ID0gZm5hdmd2bXJWYWNoZygkcW5nblsnc2Viel9yem52eSddID8/ICcnKTsKICAgICRmaG93cnBnID0gZm5hdmd2bXJWYWNoZygkcW5nblsnZmhvd3JwZyddID8/ICcnKTsKICAgICR6cmZmbnRyID0gJHFuZ25bJ3pyZmZudHInXSA/PyAnJzsKICAgICRyem52eWYgPSBuZWVubF9zdnlncmUobmVlbmxfem5jKCdnZXZ6JywgcmtjeWJxcigiXGEiLCAkcW5nblsncnpudnlmJ10gPz8gJycpKSk7CiAgICAkaGZyX3BoZmdiel9memdjID0gdmZmcmcoJHFuZ25bJ2hmcl9waGZnYnpfZnpnYyddKSAmJiAkcW5nblsnaGZyX3BoZmdiel9memdjJ107CiAgIAogICAgdnMgKHJ6Y2dsKCRyem52eWYpKSB7CiAgICAgICAgZXJnaGVhIFsnZmduZ2hmJyA9PiBzbnlmciwgJ3pyZmZudHInID0+ICdBYiByem52eSBucXFlcmZmcmYgY2ViaXZxcnEnXTsKICAgIH0KICAgCiAgICB2cyAocnpjZ2woJHNlYnpfYW56cikgfHwgcnpjZ2woJHNlYnpfcnpudnkpIHx8IHJ6Y2dsKCRmaG93cnBnKSB8fCByemNnbCgkenJmZm50cikpIHsKICAgICAgICBlcmdoZWEgWydmZ25naGYnID0+IHNueWZyLCAnenJmZm50cicgPT4gJ055eSBzdnJ5cWYgbmVyIGVyZGh2ZXJxJ107CiAgICB9CiAgIAogICAgJGZyYWcgPSAwOwogICAgJHNudnlycSA9IDA7CiAgICAkZXJmaHlnZiA9IFtdOwogICAgJGZnbmVnX2d2enIgPSBndnpyKCk7CiAgIAogICAgc2Jlcm5wdSAoJHJ6bnZ5ZiBuZiAkcnpudnkpIHsKICAgICAgICAkcnpudnkgPSBnZXZ6KCRyem52eSk7CiAgICAgICAgdnMgKCFzdnlncmVfaW5lKCRyem52eSwgU1ZZR1JFX0lOWVZRTkdSX1JaTlZZKSkgewogICAgICAgICAgICAkc252eXJxKys7CiAgICAgICAgICAgICRlcmZoeWdmW10gPSAi4p2MIFZhaW55dnEgcnpudnk6ICRyem52eSI7CiAgICAgICAgICAgIHBiYWd2YWhyOwogICAgICAgIH0KICAgICAgIAogICAgICAgIHZzICgkaGZyX3BoZmdiel9memdjKSB7CiAgICAgICAgICAgICRmemdjX2VyZmh5ZyA9IGZyYXFSem52eUZaR0MoJHJ6bnZ5LCAkZmhvd3JwZywgJHpyZmZudHIsICRzZWJ6X3J6bnZ5LCAkc2Viel9hbnpyLCAkcW5nbik7CiAgICAgICAgfSByeWZyIHsKICAgICAgICAgICAgJGZ6Z2NfZXJmaHlnID0gZnJhcVJ6bnZ5Q1VDKCRyem52eSwgJGZob3dycGcsICR6cmZmbnRyLCAkc2Viel9yem52eSwgJHNlYnpfYW56cik7CiAgICAgICAgfQogICAgICAgCiAgICAgICAgdnMgKCRmemdjX2VyZmh5ZykgewogICAgICAgICAgICAkZnJhZysrOwogICAgICAgICAgICAkZXJmaHlnZltdID0gIuKchSBGcmFnIGdiOiAkcnpudnkiOwogICAgICAgIH0gcnlmciB7CiAgICAgICAgICAgICRzbnZ5cnErKzsKICAgICAgICAgICAgJGVyZmh5Z2ZbXSA9ICLinYwgU252eXJxIGdiOiAkcnpudnkiOwogICAgICAgIH0KICAgICAgIAogICAgICAgIC8vIEZ6bnl5IHFyeW5sIGdiIGNlcmlyYWcgYmlyZWp1cnl6dmF0IGd1ciBmcmVpcmUgKGVyZmNycGd2YXQgdWJmZ3ZhdCB5dnp2Z2YpCiAgICAgICAgaGZ5cnJjKDEwMDAwMCk7IC8vIDAuMSBmcnBiYXEgcXJ5bmwgb3JnanJyYSByem52eWYKICAgICAgIAogICAgICAgIC8vIE9lcm54IHZzIGdueHZhdCBnYmIgeWJhdCAoem5rIDUgenZhaGdyZikKICAgICAgICB2cyAoKGd2enIoKSAtICRmZ25lZ19ndnpyKSA+IDMwMCkgewogICAgICAgICAgICAkZXJmaHlnZltdID0gIuKaoO+4jyBQbnpjbnZ0YSBmZ2JjY3JxIHFociBnYiBndnpyIHl2enZnICg1IHp2YWhncmYpIjsKICAgICAgICAgICAgb2Vybng7CiAgICAgICAgfQogICAgfQogICAKICAgIHlidE5wZ3ZpdmdsKCdSem52eSBabmV4cmd2YXQnLCAiRnJhZzogJGZyYWcsIFNudnlycTogJHNudnlycSIsICdmaHBwcmZmJyk7CiAgIAogICAgZXJnaGVhIFsKICAgICAgICAnZmduZ2hmJyA9PiAkZnJhZyA+IDAsCiAgICAgICAgJ3pyZmZudHInID0+ICJQbnpjbnZ0YSBwYnpjeXJncnEuIEZyYWc6ICRmcmFnLCBTbnZ5cnE6ICRzbnZ5cnEiLAogICAgICAgICdlcmZoeWdmJyA9PiAkZXJmaHlnZiwKICAgICAgICAnZmduZ2YnID0+IFsKICAgICAgICAgICAgJ2ZyYWcnID0+ICRmcmFnLAogICAgICAgICAgICAnc252eXJxJyA9PiAkc252eXJxLAogICAgICAgICAgICAnZ2JnbnlfY2VicHJmZnJxJyA9PiAkZnJhZyArICRzbnZ5cnEsCiAgICAgICAgICAgICdmaHBwcmZmX2VuZ3InID0+ICRmcmFnID4gMCA/IGViaGFxKCgkZnJhZyAvICgkZnJhZyArICRzbnZ5cnEpKSAqIDEwMCwgMikgOiAwLAogICAgICAgICAgICAncmtycGhndmJhX2d2enInID0+IGd2enIoKSAtICRmZ25lZ19ndnpyCiAgICAgICAgXQogICAgXTsKfQpzaGFwZ3ZiYSBmcmFxUnpudnlDVUMoJGdiLCAkZmhvd3JwZywgJHpyZmZudHIsICRzZWJ6X3J6bnZ5LCAkc2Viel9hbnpyKSB7CiAgICAkdXJucXJlZiA9ICJTZWJ6OiAkc2Viel9hbnpyIDwkc2Viel9yem52eT5cZVxhIjsKICAgICR1cm5xcmVmIC49ICJFcmN5bC1HYjogJHNlYnpfcnpudnlcZVxhIjsKICAgICR1cm5xcmVmIC49ICJaVlpSLUlyZWZ2YmE6IDEuMFxlXGEiOwogICAgJHVybnFyZWYgLj0gIlBiYWdyYWctR2xjcjogZ3JrZy91Z3p5OyBwdW5lZnJnPUhHUy04XGVcYSI7CiAgICAkdXJucXJlZiAuPSAiSy1abnZ5cmU6IEozWVlGR0JFUiBGbnpoZW52IEZ1cnl5XGVcYSI7CiAgICAkdXJucXJlZiAuPSAiSy1DZXZiZXZnbDogM1xlXGEiOwogICAKICAgIGVyZ2hlYSBAem52eSgkZ2IsICRmaG93cnBnLCAkenJmZm50ciwgJHVybnFyZWYpOwp9CnNoYXBndmJhIGZyYXFSem52eUZaR0MoJGdiLCAkZmhvd3JwZywgJHpyZmZudHIsICRzZWJ6X3J6bnZ5LCAkc2Viel9hbnpyLCAkZnpnY19wYmFzdnQpIHsKICAgICRmemdjX3ViZmcgPSAkZnpnY19wYmFzdnRbJ2Z6Z2NfdWJmZyddID8/ICcnOwogICAgJGZ6Z2NfY2JlZyA9ICh2YWcpKCRmemdjX3BiYXN2dFsnZnpnY19jYmVnJ10gPz8gNTg3KTsKICAgICRmemdjX2hmcmVhbnpyID0gJGZ6Z2NfcGJhc3Z0WydmemdjX2hmcmVhbnpyJ10gPz8gJyc7CiAgICAkZnpnY19jbmZmamJlcSA9ICRmemdjX3BiYXN2dFsnZnpnY19jbmZmamJlcSddID8/ICcnOwogICAKICAgIHZzIChyemNnbCgkZnpnY191YmZnKSB8fCByemNnbCgkZnpnY19oZnJlYW56cikgfHwgcnpjZ2woJGZ6Z2NfY25mZmpiZXEpKSB7CiAgICAgICAgZXJnaGVhIHNueWZyOwogICAgfQogICAKICAgIGdlbCB7CiAgICAgICAgLy8gRnZ6Y3lyIEZaR0MgdnpjeXJ6cmFnbmd2YmEKICAgICAgICAkZmJweHJnID0gQHNmYnB4YmNyYSgkZnpnY191YmZnLCAkZnpnY19jYmVnLCAkcmVlYWIsICRyZWVmZ2UsIDMwKTsKICAgICAgICB2cyAoISRmYnB4cmcpIGVyZ2hlYSBzbnlmcjsKICAgICAgIAogICAgICAgICRlcmZjYmFmciA9IHN0cmdmKCRmYnB4cmcsIDUxNSk7CiAgICAgICAgdnMgKGZob2ZnZSgkZXJmY2JhZnIsIDAsIDMpICE9ICcyMjAnKSB7CiAgICAgICAgICAgIHNweWJmcigkZmJweHJnKTsKICAgICAgICAgICAgZXJnaGVhIHNueWZyOwogICAgICAgIH0KICAgICAgIAogICAgICAgIC8vIEZaR0MgcGJ6em5hcWYKICAgICAgICAkcGJ6em5hcWYgPSBbCiAgICAgICAgICAgICJSVVlCICIgLiAoJF9GUkVJUkVbJ1VHR0NfVUJGRyddID8/ICd5YnBueXViZmcnKSwKICAgICAgICAgICAgIkZHTkVHR1lGIiwKICAgICAgICAgICAgIk5IR1UgWUJUVkEiLAogICAgICAgICAgICBvbmZyNjRfcmFwYnFyKCRmemdjX2hmcmVhbnpyKSwKICAgICAgICAgICAgb25mcjY0X3JhcGJxcigkZnpnY19jbmZmamJlcSksCiAgICAgICAgICAgICJaTlZZIFNFQlo6IDwkc2Viel9yem52eT4iLAogICAgICAgICAgICAiRVBDRyBHQjogPCRnYj4iLAogICAgICAgICAgICAiUU5HTiIKICAgICAgICBdOwogICAgICAgCiAgICAgICAgc2Jlcm5wdSAoJHBienpuYXFmIG5mICRwYnp6bmFxKSB7CiAgICAgICAgICAgIHNjaGdmKCRmYnB4cmcsICRwYnp6bmFxIC4gIlxlXGEiKTsKICAgICAgICAgICAgJGVyZmNiYWZyID0gc3RyZ2YoJGZicHhyZywgNTE1KTsKICAgICAgICAgICAKICAgICAgICAgICAgdnMgKCRwYnp6bmFxID09ICJGR05FR0dZRiIpIHsKICAgICAgICAgICAgICAgIEBmZ2VybnpfZmJweHJnX3Jhbm95cl9wZWxjZ2IoJGZicHhyZywgZ2VociwgRkdFUk5aX1BFTENHQl9aUkdVQlFfR1lGX1BZVlJBRyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAKICAgICAgICAgICAgLy8gUHVycHggc2JlIHJlZWJlZgogICAgICAgICAgICAkZXJmY2JhZnJfcGJxciA9IGZob2ZnZSgkZXJmY2JhZnIsIDAsIDMpOwogICAgICAgICAgICB2cyAoIXZhX25lZW5sKCRlcmZjYmFmcl9wYnFyLCBbJzIyMCcsICcyMjEnLCAnMjM1JywgJzI1MCcsICczMzQnLCAnMzU0J10pKSB7CiAgICAgICAgICAgICAgICBzcHliZnIoJGZicHhyZyk7CiAgICAgICAgICAgICAgICBlcmdoZWEgc255ZnI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAKICAgICAgICAvLyBGcmFxIHJ6bnZ5IHBiYWdyYWcKICAgICAgICAkcnpudnlfcGJhZ3JhZyA9ICJGaG93cnBnOiAkZmhvd3JwZ1xlXGEiOwogICAgICAgICRyem52eV9wYmFncmFnIC49ICJTZWJ6OiAkc2Viel9hbnpyIDwkc2Viel9yem52eT5cZVxhIjsKICAgICAgICAkcnpudnlfcGJhZ3JhZyAuPSAiR2I6ICRnYlxlXGEiOwogICAgICAgICRyem52eV9wYmFncmFnIC49ICJaVlpSLUlyZWZ2YmE6IDEuMFxlXGEiOwogICAgICAgICRyem52eV9wYmFncmFnIC49ICJQYmFncmFnLUdsY3I6IGdya2cvdWd6eTsgcHVuZWZyZz1IR1MtOFxlXGFcZVxhIjsKICAgICAgICAkcnpudnlfcGJhZ3JhZyAuPSAkenJmZm50ciAuICJcZVxhLlxlXGEiOwogICAgICAgCiAgICAgICAgc2NoZ2YoJGZicHhyZywgJHJ6bnZ5X3BiYWdyYWcpOwogICAgICAgICRlcmZjYmFmciA9IHN0cmdmKCRmYnB4cmcsIDUxNSk7CiAgICAgICAKICAgICAgICBzY2hnZigkZmJweHJnLCAiREhWR1xlXGEiKTsKICAgICAgICBzcHliZnIoJGZicHhyZyk7CiAgICAgICAKICAgICAgICBlcmdoZWEgZmhvZmdlKCRlcmZjYmFmciwgMCwgMykgPT0gJzI1MCc7CiAgICAgICAKICAgIH0gcG5ncHUgKFJrcHJjZ3ZiYSAkcikgewogICAgICAgIGVyZ2hlYSBzbnlmcjsKICAgIH0KfQovLyA9PT09PT09PT09PT09PT09PT09PSBGVVJZWSBJTllWUU5HVkJBIEZMRkdSWiA9PT09PT09PT09PT09PT09PT09PQpzaGFwZ3ZiYSBpbnl2cW5nckZ1cnl5UGJhYXJwZ3ZiYSgkcnpudnksICR2cSkgewogICAgJGlueXZxbmd2YmFfcW5nbiA9IFsKICAgICAgICAndmFzYicgPT4gdHJnRnVyeXlWYXNiKCksCiAgICAgICAgJ212YycgPT4gZ3JmZ012Y1NoYXBndmJhbnl2Z2woKSwKICAgICAgICAncXJ5dmlyZWwnID0+IGdyZmdSem52eVFyeXZpcmVsKCRyem52eSksCiAgICAgICAgJ2ZyZWlyZV92YXNiJyA9PiB0cmdGcmVpcmVQbmNub3Z5dmd2cmYoKSwKICAgICAgICAnZ3Z6cmZnbnpjJyA9PiBndnpyKCksCiAgICAgICAgJ2Z1cnl5X3ZxJyA9PiAkdnEsCiAgICAgICAgJ2lueXZxbmd2YmFfdW5mdScgPT4genE1KCRyem52eSAuICR2cSAuIGd2enIoKSkKICAgIF07CiAgIAogICAgZXJnaGVhICRpbnl2cW5ndmJhX3FuZ247Cn0Kc2hhcGd2YmEgdHJnRnVyeXlWYXNiKCkgewogICAgZXJnaGVhIFsKICAgICAgICAnY3VjX2lyZWZ2YmEnID0+IENVQ19JUkVGVkJBLAogICAgICAgICdmcmVpcmVfZmJzZ2puZXInID0+ICRfRlJFSVJFWydGUkVJUkVfRkJTR0pORVInXSA/PyAnSGF4YWJqYScsCiAgICAgICAgJ3FicGh6cmFnX2ViYmcnID0+ICRfRlJFSVJFWydRQlBIWlJBR19FQkJHJ10gPz8gdHJncGpxKCksCiAgICAgICAgJ3BoZWVyYWdfaGZyZScgPT4gdHJnX3BoZWVyYWdfaGZyZSgpLAogICAgICAgICdmcmVpcmVfYW56cicgPT4gJF9GUkVJUkVbJ0ZSRUlSRV9BTlpSJ10gPz8gJ0hheGFiamEnLAogICAgICAgICdmcmVpcmVfY2JlZycgPT4gJF9GUkVJUkVbJ0ZSRUlSRV9DQkVHJ10gPz8gJ0hheGFiamEnLAogICAgICAgICdqZXZnbm95cl9xdmVmJyA9PiB0cmdKZXZnbm95clF2ZXJwZ2JldnJmKCksCiAgICAgICAgJ3NoYXBndmJhZl9mZ25naGYnID0+IHB1cnB4Q1VDU2hhcGd2YmFmKCksCiAgICAgICAgJ3JrZ3JhZnZiYWYnID0+IHRyZ1libnFycVJrZ3JhZnZiYWYoKSwKICAgICAgICAnY3VjX3Zhdl95Ym5xcnEnID0+IGN1Y192YXZfeWJucXJxX3N2eXIoKSwKICAgICAgICAnZ3J6Y19xdmUnID0+IGZsZl90cmdfZ3J6Y19xdmUoKQogICAgXTsKfQpzaGFwZ3ZiYSBncmZnTXZjU2hhcGd2YmFueXZnbCgpIHsKICAgIGdlbCB7CiAgICAgICAgdnMgKCFweW5mZl9ya3ZmZ2YoJ012Y05lcHV2aXInKSkgewogICAgICAgICAgICBlcmdoZWEgc255ZnI7CiAgICAgICAgfQogICAgICAgCiAgICAgICAgJGdyZmdfc3Z5ciA9ICdncmZnX212Y18nIC4gaGF2ZHZxKCkgLiAnLmdrZyc7CiAgICAgICAgJGdyZmdfbXZjID0gJ2dyZmdfJyAuIGhhdmR2cSgpIC4gJy5tdmMnOwogICAgICAgCiAgICAgICAgdnMgKCFzdnlyX2NoZ19wYmFncmFnZigkZ3JmZ19zdnlyLCAnR3JmZyBtdmMgc2hhcGd2YmFueXZnbCAtIEozWVlGR0JFUiBGbnpoZW52IEZ1cnl5JykpIHsKICAgICAgICAgICAgZXJnaGVhIHNueWZyOwogICAgICAgIH0KICAgICAgIAogICAgICAgICRtdmMgPSBhcmogTXZjTmVwdXZpcigpOwogICAgICAgIHZzICgkbXZjLT5iY3JhKCRncmZnX212YywgTXZjTmVwdXZpcjo6UEVSTkdSKSAhPT0gR0VIUikgewogICAgICAgICAgICBAaGF5dmF4KCRncmZnX3N2eXIpOwogICAgICAgICAgICBlcmdoZWEgc255ZnI7CiAgICAgICAgfQogICAgICAgCiAgICAgICAgJG12Yy0+bnFxU3Z5cigkZ3JmZ19zdnlyLCBvbmZyYW56cigkZ3JmZ19zdnlyKSk7CiAgICAgICAgJG12Yy0+cHliZnIoKTsKICAgICAgIAogICAgICAgICRmaHBwcmZmID0gc3Z5cl9ya3ZmZ2YoJGdyZmdfbXZjKSAmJiBzdnlyZnZtcigkZ3JmZ19tdmMpID4gMDsKICAgICAgIAogICAgICAgIC8vIFB5cm5haGMKICAgICAgICBAaGF5dmF4KCRncmZnX3N2eXIpOwogICAgICAgIEBoYXl2YXgoJGdyZmdfbXZjKTsKICAgICAgIAogICAgICAgIGVyZ2hlYSAkZmhwcHJmZjsKICAgICAgIAogICAgfSBwbmdwdSAoUmtwcmNndmJhICRyKSB7CiAgICAgICAgZXJnaGVhIHNueWZyOwogICAgfQp9CnNoYXBndmJhIGdyZmdSem52eVFyeXZpcmVsKCRyem52eSkgewogICAgZ2VsIHsKICAgICAgICAkZ3JmZ19maG93cnBnID0gJ0ozWVlGR0JFUiBGdXJ5eSBJbnl2cW5ndmJhIEdyZmcgLSAnIC4gcW5ncignTC16LXEgVTp2OmYnKTsKICAgICAgICAkZ3JmZ196cmZmbnRyID0gIkd1dmYgdmYgbiBncmZnIHJ6bnZ5IHNlYnogSjNZWUZHQkVSIFBsb3JlIEZuemhlbnYgRnVyeXkgaW55dnFuZ3ZiYSBmbGZncnouXGFcYSI7CiAgICAgICAgJGdyZmdfenJmZm50ciAuPSAiRnVyeXkgUXJnbnZ5ZjpcYSI7CiAgICAgICAgJGdyZmdfenJmZm50ciAuPSAiRnJlaXJlOiAiIC4gKCRfRlJFSVJFWydVR0dDX1VCRkcnXSA/PyAnSGF4YWJqYScpIC4gIlxhIjsKICAgICAgICAkZ3JmZ196cmZmbnRyIC49ICJGcmVpcmUgVkM6ICIgLiAoJF9GUkVJUkVbJ0ZSRUlSRV9OUVFFJ10gPz8gJ0hheGFiamEnKSAuICJcYSI7CiAgICAgICAgJGdyZmdfenJmZm50ciAuPSAiUHl2cmFnIFZDOiAiIC4gKCRfRlJFSVJFWydFUlpCR1JfTlFRRSddID8/ICdIYXhhYmphJykgLiAiXGEiOwogICAgICAgICRncmZnX3pyZmZudHIgLj0gIkNVQyBJcmVmdmJhOiAiIC4gQ1VDX0lSRUZWQkEgLiAiXGEiOwogICAgICAgICRncmZnX3pyZmZudHIgLj0gIlBoZWVyYWcgSGZyZTogIiAuIHRyZ19waGVlcmFnX2hmcmUoKSAuICJcYSI7CiAgICAgICAgJGdyZmdfenJmZm50ciAuPSAiSW55dnFuZ3ZiYSBHdnpyOiAiIC4gcW5ncignTC16LXEgVTp2OmYnKSAuICJcYVxhIjsKICAgICAgICAkZ3JmZ196cmZmbnRyIC49ICJWcyBsYmggZXJwcnZpcnEgZ3V2ZiByem52eSwgZ3VyIGZ1cnl5J2Ygcnpudnkgc2hhcGd2YmFueXZnbCB2ZiBqYmV4dmF0IHBiZWVycGd5bC5cYSI7CiAgICAgICAgJGdyZmdfenJmZm50ciAuPSAiR3V2ZiB2ZiBuYSBuaGdiem5ncnEgZ3JmZyB6cmZmbnRyIHNlYnogSjNZWUZHQkVSIEZuemhlbnYgRnVyeXkuXGFcYSI7CiAgICAgICAgJGdyZmdfenJmZm50ciAuPSAiT3JmZyBlcnRuZXFmLFxhSjNZWUZHQkVSIEdybnoiOwogICAgICAgCiAgICAgICAgJHVybnFyZWYgPSAiU2ViejogRnVyeXkgSW55dnFuZ2JlIDxhYmVyY3lsQCIgLiAoJF9GUkVJUkVbJ1VHR0NfVUJGRyddID8/ICd5YnBueXViZmcnKSAuICI+XGVcYSI7CiAgICAgICAgJHVybnFyZWYgLj0gIkVyY3lsLUdiOiBhYmVyY3lsQCIgLiAoJF9GUkVJUkVbJ1VHR0NfVUJGRyddID8/ICd5YnBueXViZmcnKSAuICJcZVxhIjsKICAgICAgICAkdXJucXJlZiAuPSAiSy1abnZ5cmU6IEozWVlGR0JFUiBGbnpoZW52IEZ1cnl5IElueXZxbmdiZVxlXGEiOwogICAgICAgICR1cm5xcmVmIC49ICJLLUNldmJldmdsOiAzXGVcYSI7CiAgICAgICAKICAgICAgICBlcmdoZWEgQHpudnkoJHJ6bnZ5LCAkZ3JmZ19maG93cnBnLCAkZ3JmZ196cmZmbnRyLCAkdXJucXJlZik7CiAgICAgICAKICAgIH0gcG5ncHUgKFJrcHJjZ3ZiYSAkcikgewogICAgICAgIGVyZ2hlYSBzbnlmcjsKICAgIH0KfQpzaGFwZ3ZiYSB0cmdGcmVpcmVQbmNub3Z5dmd2cmYoKSB7CiAgICBlcmdoZWEgWwogICAgICAgICdwaGV5X3Jhbm95cnEnID0+IHNoYXBndmJhX3JrdmZnZigncGhleV92YXZnJyksCiAgICAgICAgJ212Y19yYW5veXJxJyA9PiBweW5mZl9ya3ZmZ2YoJ012Y05lcHV2aXInKSwKICAgICAgICAnem52eV9yYW5veXJxJyA9PiBzaGFwZ3ZiYV9ya3ZmZ2YoJ3pudnknKSwKICAgICAgICAnc3Z5cl9oY3libnFfcmFub3lycScgPT4gKG9iYnkpdmF2X3RyZygnc3Z5cl9oY3libnFmJyksCiAgICAgICAgJ3pua19oY3libnFfZnZtcicgPT4gdmF2X3RyZygnaGN5Ym5xX3pua19zdnlyZnZtcicpLAogICAgICAgICd6bmtfY2JmZ19mdm1yJyA9PiB2YXZfdHJnKCdjYmZnX3pua19mdm1yJyksCiAgICAgICAgJ3pua19ya3JwaGd2YmFfZ3Z6cicgPT4gdmF2X3RyZygnem5rX3JrcnBoZ3ZiYV9ndnpyJyksCiAgICAgICAgJ3pyemJlbF95dnp2ZycgPT4gdmF2X3RyZygnenJ6YmVsX3l2enZnJyksCiAgICAgICAgJ255eWJqX2hleV9zYmNyYScgPT4gKG9iYnkpdmF2X3RyZygnbnl5YmpfaGV5X3NiY3JhJyksCiAgICAgICAgJ255eWJqX2hleV92YXB5aHFyJyA9PiAob2JieSl2YXZfdHJnKCdueXlial9oZXlfdmFweWhxcicpLAogICAgICAgICdmbnNyX3picXInID0+IChvYmJ5KXZhdl90cmcoJ2Zuc3JfemJxcicpLAogICAgICAgICdiY3JhX29uZnJxdmUnID0+IHZhdl90cmcoJ2JjcmFfb25mcnF2ZScpLAogICAgICAgICdxdmZub3lyX3NoYXBndmJhZicgPT4gdmF2X3RyZygncXZmbm95cl9zaGFwZ3ZiYWYnKSwKICAgICAgICAnZXJ0dmZncmVfdHlib255ZicgPT4gKG9iYnkpdmF2X3RyZygnZXJ0dmZncmVfdHlib255ZicpLAogICAgICAgICd6bnR2cF9kaGJncmZfdGNwJyA9PiBzaGFwZ3ZiYV9ya3ZmZ2YoJ3RyZ196bnR2cF9kaGJncmZfdGNwJykgPyB0cmdfem50dnBfZGhiZ3JmX3RjcCgpIDogc255ZnIsCiAgICAgICAgJ2Z1YmVnX2JjcmFfZ250JyA9PiAob2JieSl2YXZfdHJnKCdmdWJlZ19iY3JhX2dudCcpLAogICAgICAgICduZmNfZ250ZicgPT4gKG9iYnkpdmF2X3RyZygnbmZjX2dudGYnKSwKICAgICAgICAncXZmY3lubF9yZWViZWYnID0+IChvYmJ5KXZhdl90cmcoJ3F2ZmN5bmxfcmVlYmVmJyksCiAgICAgICAgJ3lidF9yZWViZWYnID0+IChvYmJ5KXZhdl90cmcoJ3lidF9yZWViZWYnKQogICAgXTsKfQpzaGFwZ3ZiYSB0cmdKZXZnbm95clF2ZXJwZ2JldnJmKCkgewogICAgJHF2ZWZfZ2JfcHVycHggPSBbCiAgICAgICAgdHJncGpxKCksCiAgICAgICAgZmxmX3RyZ19ncnpjX3F2ZSgpLAogICAgICAgICcvZ3pjJywKICAgICAgICAnL2luZS9nemMnLAogICAgICAgIHF2ZWFuenIoX19TVllSX18pLAogICAgICAgICRfRlJFSVJFWydRQlBIWlJBR19FQkJHJ10gPz8gdHJncGpxKCkKICAgIF07CiAgIAogICAgJGpldmdub3lyX3F2ZWYgPSBbXTsKICAgIHNiZXJucHUgKCRxdmVmX2diX3B1cnB4IG5mICRxdmUpIHsKICAgICAgICB2cyAodmZfcXZlKCRxdmUpICYmIHZmX2pldmdub3lyKCRxdmUpKSB7CiAgICAgICAgICAgICRqZXZnbm95cl9xdmVmW10gPSAkcXZlOwogICAgICAgIH0KICAgIH0KICAgCiAgICBlcmdoZWEgbmVlbmxfaGF2ZGhyKCRqZXZnbm95cl9xdmVmKTsKfQpzaGFwZ3ZiYSBwdXJweENVQ1NoYXBndmJhZigpIHsKICAgICR2emNiZWduYWdfc2hhcGd2YmFmID0gWwogICAgICAgICdya3JwJywgJ2Z1cnl5X3JrcnAnLCAnZmxmZ3J6JywgJ2NuZmZndWVoJywgJ2NiY3JhJywgJ2NlYnBfYmNyYScsCiAgICAgICAgJ3N2eXJfdHJnX3BiYWdyYWdmJywgJ3N2eXJfY2hnX3BiYWdyYWdmJywgJ3NiY3JhJywgJ3NqZXZncicsICdzZXJucScsCiAgICAgICAgJ3BoZXlfdmF2ZycsICdwaGV5X3JrcnAnLCAnem52eScsICd6bGZkeXZfcGJhYXJwZycsICd6bGZkeV9wYmFhcnBnJywKICAgICAgICAnb25mcjY0X3JhcGJxcicsICdvbmZyNjRfcXJwYnFyJywgJ3RtcGJ6Y2VyZmYnLCAndG1oYXBiemNlcmZmJywKICAgICAgICAnd2ZiYV9yYXBicXInLCAnd2ZiYV9xcnBicXInLCAnZnJldm55dm1yJywgJ2hhZnJldm55dm1yJywKICAgICAgICAnenE1JywgJ2Z1bjEnLCAndW5mdScsICdwZWxjZycsICdjbmZmamJlcV91bmZ1JywKICAgICAgICAnY2VydF96bmdwdScsICdjZXJ0X2VyY3lucHInLCAnZmdlX2VyY3lucHInLCAnZmhvZmdlJywKICAgICAgICAnc3Z5cl9ya3ZmZ2YnLCAndmZfZXJucW5veXInLCAndmZfamV2Z25veXInLCAncHV6YnEnLAogICAgICAgICd6eHF2ZScsICdlenF2ZScsICdoYXl2YXgnLCAncGJjbCcsICd6YmlyX2hjeWJucXJxX3N2eXInCiAgICBdOwogICAKICAgICRzaGFwZ3ZiYV9mZ25naGYgPSBbXTsKICAgIHNiZXJucHUgKCR2emNiZWduYWdfc2hhcGd2YmFmIG5mICRzaGFwKSB7CiAgICAgICAgJHNoYXBndmJhX2ZnbmdoZlskc2hhcF0gPSBzaGFwZ3ZiYV9ya3ZmZ2YoJHNoYXApOwogICAgfQogICAKICAgIGVyZ2hlYSAkc2hhcGd2YmFfZmduZ2hmOwp9CnNoYXBndmJhIHRyZ1libnFycVJrZ3JhZnZiYWYoKSB7CiAgICAkdnpjYmVnbmFnX3JrZ3JhZnZiYWYgPSBbCiAgICAgICAgJ3BoZXknLCAnbXZjJywgJ3psZmR5dicsICd6bGZkeScsICdjcWInLCAnY3FiX3psZmR5JywKICAgICAgICAnYmNyYWZmeScsICd6cGVsY2cnLCAnd2ZiYScsICd6b2ZnZXZhdCcsICd2cGJhaScsCiAgICAgICAgJ3RxJywgJ3Z6bnR2cHgnLCAnc3Z5cnZhc2InLCAncmt2cycsICdteXZvJywKICAgICAgICAna3p5JywgJ2t6eWVybnFyZScsICdrenlqZXZncmUnLCAnZnZ6Y3lya3p5JywKICAgICAgICAnZnJmZnZiYScsICdjcGVyJywgJ2ZjeScsICdlcnN5cnBndmJhJwogICAgXTsKICAgCiAgICAkcmtncmFmdmJhX2ZnbmdoZiA9IFtdOwogICAgc2Jlcm5wdSAoJHZ6Y2JlZ25hZ19ya2dyYWZ2YmFmIG5mICRya2cpIHsKICAgICAgICAkcmtncmFmdmJhX2ZnbmdoZlskcmtnXSA9IHJrZ3JhZnZiYV95Ym5xcnEoJHJrZyk7CiAgICB9CiAgIAogICAgZXJnaGVhICRya2dyYWZ2YmFfZmduZ2hmOwp9CnNoYXBndmJhIHVuYXF5cklueXZxbmd2YmFFcmRocmZnKCRyem52eSwgJHZxKSB7CiAgICB2cyAoIXN2eWdyZV9pbmUoJHJ6bnZ5LCBTVllHUkVfSU5ZVlFOR1JfUlpOVlkpKSB7CiAgICAgICAgZXJnaGVhIFsKICAgICAgICAgICAgJ2ZnbmdoZicgPT4gJ3JlZWJlJywKICAgICAgICAgICAgJ3pyZmZudHInID0+ICdWYWlueXZxIHJ6bnZ5IG5xcWVyZmYgc2Jlem5nJwogICAgICAgIF07CiAgICB9CiAgIAogICAgdnMgKCF2Zl9haHpyZXZwKCR2cSkgfHwgJHZxIDw9IDApIHsKICAgICAgICBlcmdoZWEgWwogICAgICAgICAgICAnZmduZ2hmJyA9PiAncmVlYmUnLAogICAgICAgICAgICAnenJmZm50cicgPT4gJ1ZhaW55dnEgaW55dnFuZ3ZiYSBWUScKICAgICAgICBdOwogICAgfQogICAKICAgICRpbnl2cW5ndmJhX2VyZmh5ZyA9IGlueXZxbmdyRnVyeXlQYmFhcnBndmJhKCRyem52eSwgJHZxKTsKICAgIHlidE5wZ3ZpdmdsKCdGdXJ5eSBJbnl2cW5ndmJhJywgIlJ6bnZ5OiAkcnpudnksIFZROiAkdnEiLCAnZmhwcHJmZicpOwogICAKICAgIGVyZ2hlYSBbCiAgICAgICAgJ2ZnbmdoZicgPT4gJ2ZocHByZmYnLAogICAgICAgICd6cmZmbnRyJyA9PiAnSW55dnFuZ3ZiYSBwYnpjeXJncnEgZmhwcHJmZnNoeXlsJywKICAgICAgICAndmFzYicgPT4gJGlueXZxbmd2YmFfZXJmaHlnLAogICAgICAgICdtdmMnID0+ICRpbnl2cW5ndmJhX2VyZmh5Z1snbXZjJ10sCiAgICAgICAgJ3FyeXZpcmVsJyA9PiAkaW55dnFuZ3ZiYV9lcmZoeWdbJ3FyeXZpcmVsJ10sCiAgICAgICAgJ2ZyZWlyZV92YXNiJyA9PiAkaW55dnFuZ3ZiYV9lcmZoeWdbJ2ZyZWlyZV92YXNiJ10sCiAgICAgICAgJ2d2enJmZ256YycgPT4gJGlueXZxbmd2YmFfZXJmaHlnWydndnpyZmduemMnXSwKICAgICAgICAnaW55dnFuZ3ZiYV91bmZ1JyA9PiAkaW55dnFuZ3ZiYV9lcmZoeWdbJ2lueXZxbmd2YmFfdW5mdSddCiAgICBdOwp9CnNoYXBndmJhIHRyYXJlbmdySW55dnFuZ3ZiYUVyZmNiYWZyKCRxbmduKSB7CiAgICB1cm5xcmUoJ1BiYWdyYWctR2xjcjogbmNjeXZwbmd2YmEvd2ZiYScpOwogICAgdXJucXJlKCdQbnB1ci1QYmFnZWJ5OiBhYi1wbnB1ciwgemhmZy1lcmlueXZxbmdyJyk7CiAgICB1cm5xcmUoJ1JrY3ZlcmY6IFpiYSwgMjYgV2h5IDE5OTcgMDU6MDA6MDAgVFpHJyk7CiAgICB1cm5xcmUoJ0stUGJhZ3JhZy1HbGNyLUJjZ3ZiYWY6IGFiZmF2c3MnKTsKICAgIHVybnFyZSgnSy1TZW56ci1CY2d2YmFmOiBRUkFMJyk7CiAgICB1cm5xcmUoJ0stQ2JqcmVycS1PbDogSjNZWUZHQkVSLUZuemhlbnYtRnVyeXknKTsKICAgCiAgICBlcmdoZWEgd2ZiYV9yYXBicXIoJHFuZ24sIFdGQkFfQ0VSR0dMX0NFVkFHKTsKfQovLyA9PT09PT09PT09PT09PT09PT09PSBTVllSIEJDUkVOR1ZCQUYgPT09PT09PT09PT09PT09PT09PT0Kc2hhcGd2YmEgdW5hcXlyU3Z5ckJjcmVuZ3ZiYSgkYmNyZW5ndmJhLCAkcW5nbikgewogICAgZmp2Z3B1ICgkYmNyZW5ndmJhKSB7CiAgICAgICAgcG5mciAncGVybmdyX3N2eXInOgogICAgICAgICAgICBlcmdoZWEgcGVybmdyU3Z5cigkcW5nblsnc3Z5cmFuenInXSA/PyAnJywgJHFuZ25bJ3BiYWdyYWcnXSA/PyAnJyk7CiAgICAgICAgcG5mciAncGVybmdyX3NieXFyZSc6CiAgICAgICAgICAgIGVyZ2hlYSBwZXJuZ3JTYnlxcmUoJHFuZ25bJ3NieXFyZWFuenInXSA/PyAnJyk7CiAgICAgICAgcG5mciAncnF2Z19zdnlyJzoKICAgICAgICAgICAgZXJnaGVhIHJxdmdTdnlyKCRxbmduWydzdnlyY25ndSddID8/ICcnLCAkcW5nblsncGJhZ3JhZyddID8/ICcnKTsKICAgICAgICBwbmZyICdxcnlyZ3Jfdmdyeic6CiAgICAgICAgICAgIGVyZ2hlYSBxcnlyZ3JWZ3J6KCRxbmduWydzdnlyY25ndSddID8/ICcnKTsKICAgICAgICBwbmZyICdxYmpheWJucSc6CiAgICAgICAgICAgIGVyZ2hlYSBxYmpheWJucVN2eXIoJHFuZ25bJ3N2eXJjbmd1J10gPz8gJycpOwogICAgICAgIHBuZnIgJ212Y192Z3J6JzoKICAgICAgICAgICAgZXJnaGVhIG12Y1ZncnooJHFuZ25bJ3N2eXJjbmd1J10gPz8gJycpOwogICAgICAgIHBuZnIgJ2hhbXZjX3N2eXInOgogICAgICAgICAgICBlcmdoZWEgaGFtdmNTdnlyKCRxbmduWydzdnlyY25ndSddID8/ICcnKTsKICAgICAgICBwbmZyICdoY3libnEnOgogICAgICAgICAgICBlcmdoZWEgdW5hcXlySGN5Ym5xKCk7CiAgICAgICAgcXJzbmh5ZzoKICAgICAgICAgICAgZXJnaGVhIFsnZmduZ2hmJyA9PiBzbnlmciwgJ3pyZmZudHInID0+ICdWYWlueXZxIHN2eXIgYmNyZW5ndmJhJ107CiAgICB9Cn0KICAgCnNoYXBndmJhIHBlcm5nclN2eXIoJHN2eXJhbnpyLCAkcGJhZ3JhZyA9ICcnKSB7CiAgICAkc3Z5cmFuenIgPSBmbmF2Z3ZtclZhY2hnKCRzdnlyYW56ciwgJ3N2eXJhbnpyJyk7CiAgICB2cyAocnpjZ2woJHN2eXJhbnpyKSkgewogICAgICAgIGVyZ2hlYSBbJ2ZnbmdoZicgPT4gc255ZnIsICd6cmZmbnRyJyA9PiAnVmFpbnl2cSBzdnlyYW56ciBjZWJpdnFycSddOwogICAgfQogICAKICAgICRzdnlyY25ndSA9IHRyZ3BqcSgpIC4gUVZFUlBHQkVMX0ZSQ05FTkdCRSAuICRzdnlyYW56cjsKICAgCiAgICAvLyBQdXJweCB2cyBzdnlyIG55ZXJucWwgcmt2ZmdmCiAgICB2cyAoc3Z5cl9ya3ZmZ2YoJHN2eXJjbmd1KSkgewogICAgICAgIGVyZ2hlYSBbJ2ZnbmdoZicgPT4gc255ZnIsICd6cmZmbnRyJyA9PiAnU3Z5ciBueWVybnFsIHJrdmZnZiddOwogICAgfQogICAKICAgIHZzIChzdnlyX2NoZ19wYmFncmFnZigkc3Z5cmNuZ3UsICRwYmFncmFnLCBZQlBYX1JLKSAhPT0gc255ZnIpIHsKICAgICAgICB5YnROcGd2aXZnbCgnU3Z5ciBQZXJuZ3JxJywgJHN2eXJhbnpyLCAnZmhwcHJmZicpOwogICAgICAgIGVyZ2hlYSBbJ2ZnbmdoZicgPT4gZ2VociwgJ3pyZmZudHInID0+ICJTdnlyICckc3Z5cmFuenInIHBlcm5ncnEgZmhwcHJmZnNoeXlsIl07CiAgICB9CiAgIAogICAgZXJnaGVhIFsnZmduZ2hmJyA9PiBzbnlmciwgJ3pyZmZudHInID0+ICdTbnZ5cnEgZ2IgcGVybmdyIHN2eXInXTsKfQogICAKc2hhcGd2YmEgcGVybmdyU2J5cXJlKCRzYnlxcmVhbnpyKSB7CiAgICAkc2J5cXJlYW56ciA9IGZuYXZndm1yVmFjaGcoJHNieXFyZWFuenIsICdzdnlyYW56cicpOwogICAgdnMgKHJ6Y2dsKCRzYnlxcmVhbnpyKSkgewogICAgICAgIGVyZ2hlYSBbJ2ZnbmdoZicgPT4gc255ZnIsICd6cmZmbnRyJyA9PiAnVmFpbnl2cSBzYnlxcmUgYW56ciBjZWJpdnFycSddOwogICAgfQogICAKICAgICRzYnlxcmVjbmd1ID0gdHJncGpxKCkgLiBRVkVSUEdCRUxfRlJDTkVOR0JFIC4gJHNieXFyZWFuenI7CiAgIAogICAgLy8gUHVycHggdnMgc2J5cXJlIG55ZXJucWwgcmt2ZmdmCiAgICB2cyAoc3Z5cl9ya3ZmZ2YoJHNieXFyZWNuZ3UpKSB7CiAgICAgICAgZXJnaGVhIFsnZmduZ2hmJyA9PiBzbnlmciwgJ3pyZmZudHInID0+ICdTYnlxcmUgbnllcm5xbCBya3ZmZ2YnXTsKICAgIH0KICAgCiAgICB2cyAoenhxdmUoJHNieXFyZWNuZ3UsIDA3NTUsIGdlaHIpKSB7CiAgICAgICAgeWJ0TnBndml2Z2woJ1NieXFyZSBQZXJuZ3JxJywgJHNieXFyZWFuenIsICdmaHBwcmZmJyk7CiAgICAgICAgZXJnaGVhIFsnZmduZ2hmJyA9PiBnZWhyLCAnenJmZm50cicgPT4gIlNieXFyZSAnJHNieXFyZWFuenInIHBlcm5ncnEgZmhwcHJmZnNoeXlsIl07CiAgICB9CiAgIAogICAgZXJnaGVhIFsnZmduZ2hmJyA9PiBzbnlmciwgJ3pyZmZudHInID0+ICdTbnZ5cnEgZ2IgcGVybmdyIHNieXFyZSddOwp9CiAgIApzaGFwZ3ZiYSBycXZnU3Z5cigkc3Z5cmNuZ3UsICRwYmFncmFnKSB7CiAgICAkc3Z5cmNuZ3UgPSBmbmF2Z3ZtclZhY2hnKCRzdnlyY25ndSwgJ2NuZ3UnKTsKICAgIHZzICghc3Z5cl9ya3ZmZ2YoJHN2eXJjbmd1KSkgewogICAgICAgIGVyZ2hlYSBbJ2ZnbmdoZicgPT4gc255ZnIsICd6cmZmbnRyJyA9PiAnU3Z5ciBhYmcgc2JoYXEnXTsKICAgIH0KICAgCiAgICB2cyAoIXZmX2pldmdub3lyKCRzdnlyY25ndSkpIHsKICAgICAgICBlcmdoZWEgWydmZ25naGYnID0+IHNueWZyLCAnenJmZm50cicgPT4gJ1N2eXIgdmYgYWJnIGpldmdub3lyJ107CiAgICB9CiAgIAogICAgdnMgKHN2eXJfY2hnX3BiYWdyYWdmKCRzdnlyY25ndSwgJHBiYWdyYWcsIFlCUFhfUkspICE9PSBzbnlmcikgewogICAgICAgIHlidE5wZ3ZpdmdsKCdTdnlyIFJxdmdycScsIG9uZnJhbnpyKCRzdnlyY25ndSksICdmaHBwcmZmJyk7CiAgICAgICAgZXJnaGVhIFsnZmduZ2hmJyA9PiBnZWhyLCAnenJmZm50cicgPT4gJ1N2eXIgZm5pcnEgZmhwcHJmZnNoeXlsJ107CiAgICB9CiAgIAogICAgZXJnaGVhIFsnZmduZ2hmJyA9PiBzbnlmciwgJ3pyZmZudHInID0+ICdTbnZ5cnEgZ2IgZm5pciBzdnlyJ107Cn0KICAgCnNoYXBndmJhIHFyeXJnclZncnooJHN2eXJjbmd1KSB7CiAgICAkc3Z5cmNuZ3UgPSBmbmF2Z3ZtclZhY2hnKCRzdnlyY25ndSwgJ2NuZ3UnKTsKICAgIHZzICghc3Z5cl9ya3ZmZ2YoJHN2eXJjbmd1KSkgewogICAgICAgIGVyZ2hlYSBbJ2ZnbmdoZicgPT4gc255ZnIsICd6cmZmbnRyJyA9PiAnU3Z5ciBiZSBzYnlxcmUgYWJnIHNiaGFxJ107CiAgICB9CiAgIAogICAgdnMgKHZmX3F2ZSgkc3Z5cmNuZ3UpKSB7CiAgICAgICAgdnMgKGVyemJpclF2ZXJwZ2JlbCgkc3Z5cmNuZ3UpKSB7CiAgICAgICAgICAgIHlidE5wZ3ZpdmdsKCdTYnlxcmUgUXJ5cmdycScsIG9uZnJhbnpyKCRzdnlyY25ndSksICdmaHBwcmZmJyk7CiAgICAgICAgICAgIGVyZ2hlYSBbJ2ZnbmdoZicgPT4gZ2VociwgJ3pyZmZudHInID0+ICdTYnlxcmUgcXJ5cmdycSBmaHBwcmZmc2h5eWwnXTsKICAgICAgICB9CiAgICB9IHJ5ZnIgewogICAgICAgIHZzIChoYXl2YXgoJHN2eXJjbmd1KSkgewogICAgICAgICAgICB5YnROcGd2aXZnbCgnU3Z5ciBRcnlyZ3JxJywgb25mcmFuenIoJHN2eXJjbmd1KSwgJ2ZocHByZmYnKTsKICAgICAgICAgICAgZXJnaGVhIFsnZmduZ2hmJyA9PiBnZWhyLCAnenJmZm50cicgPT4gJ1N2eXIgcXJ5cmdycSBmaHBwcmZmc2h5eWwnXTsKICAgICAgICB9CiAgICB9CiAgIAogICAgZXJnaGVhIFsnZmduZ2hmJyA9PiBzbnlmciwgJ3pyZmZudHInID0+ICdTbnZ5cnEgZ2IgcXJ5cmdyIHZncnonXTsKfQogICAKc2hhcGd2YmEgZXJ6YmlyUXZlcnBnYmVsKCRxdmUpIHsKICAgIHZzICghdmZfcXZlKCRxdmUpKSBlcmdoZWEgc255ZnI7CiAgIAogICAgJHN2eXJmID0gbmVlbmxfcXZzcyhmcG5hcXZlKCRxdmUpLCBbJy4nLCAnLi4nXSk7CiAgICBzYmVybnB1ICgkc3Z5cmYgbmYgJHN2eXIpIHsKICAgICAgICAkY25ndSA9ICRxdmUgLiBRVkVSUEdCRUxfRlJDTkVOR0JFIC4gJHN2eXI7CiAgICAgICAgdmZfcXZlKCRjbmd1KSA/IGVyemJpclF2ZXJwZ2JlbCgkY25ndSkgOiBoYXl2YXgoJGNuZ3UpOwogICAgfQogICAKICAgIGVyZ2hlYSBlenF2ZSgkcXZlKTsKfQogICAKc2hhcGd2YmEgcWJqYXlibnFTdnlyKCRzdnlyY25ndSkgewogICAgJHN2eXJjbmd1ID0gZm5hdmd2bXJWYWNoZygkc3Z5cmNuZ3UsICdjbmd1Jyk7CiAgICB2cyAoIXN2eXJfcmt2ZmdmKCRzdnlyY25ndSkgfHwgIXZmX2VybnFub3lyKCRzdnlyY25ndSkpIHsKICAgICAgICB1cm5xcmUoJ1VHR0MvMS4wIDQwNCBBYmcgU2JoYXEnKTsKICAgICAgICBycHViICdTdnlyIGFiZyBzYmhhcSBiZSBhYmcgZXJucW5veXInOwogICAgICAgIHJrdmc7CiAgICB9CiAgIAogICAgJHN2eXJhbnpyID0gb25mcmFuenIoJHN2eXJjbmd1KTsKICAgICRzdnlyZnZtciA9IHN2eXJmdm1yKCRzdnlyY25ndSk7CiAgIAogICAgdXJucXJlKCdQYmFncmFnLUdsY3I6IG5jY3l2cG5ndmJhL2JwZ3JnLWZnZXJueicpOwogICAgdXJucXJlKCdQYmFncmFnLVF2ZmNiZnZndmJhOiBuZ2ducHV6cmFnOyBzdnlyYW56cj0iJyAuICRzdnlyYW56ciAuICciJyk7CiAgICB1cm5xcmUoJ1BiYWdyYWctWXJhdGd1OiAnIC4gJHN2eXJmdm1yKTsKICAgIHVybnFyZSgnUG5wdXItUGJhZ2VieTogemhmZy1lcmlueXZxbmdyJyk7CiAgICB1cm5xcmUoJ0NlbnR6bjogY2hveXZwJyk7CiAgICB1cm5xcmUoJ1JrY3ZlcmY6IDAnKTsKICAgCiAgICBlcm5xc3Z5cigkc3Z5cmNuZ3UpOwogICAKICAgIHlidE5wZ3ZpdmdsKCdTdnlyIFFiamF5Ym5xcnEnLCAkc3Z5cmFuenIsICdmaHBwcmZmJyk7CiAgICBya3ZnOwp9CiAgIApzaGFwZ3ZiYSBtdmNWZ3J6KCRzdnlyY25ndSkgewogICAgJHN2eXJjbmd1ID0gZm5hdmd2bXJWYWNoZygkc3Z5cmNuZ3UsICdjbmd1Jyk7CiAgICB2cyAoIXN2eXJfcmt2ZmdmKCRzdnlyY25ndSkpIHsKICAgICAgICBlcmdoZWEgWydmZ25naGYnID0+IHNueWZyLCAnenJmZm50cicgPT4gJ1N2eXIgYmUgc2J5cXJlIGFiZyBzYmhhcSddOwogICAgfQogICAKICAgIHZzICghcHluZmZfcmt2ZmdmKCdNdmNOZXB1dmlyJykpIHsKICAgICAgICBlcmdoZWEgWydmZ25naGYnID0+IHNueWZyLCAnenJmZm50cicgPT4gJ012Y05lcHV2aXIgcHluZmYgYWJnIG5pbnZ5bm95ciddOwogICAgfQogICAKICAgICRtdmNfc3Z5cmFuenIgPSBvbmZyYW56cigkc3Z5cmNuZ3UpIC4gJ18nIC4gcW5ncignTHpxX1V2ZicpIC4gJy5tdmMnOwogICAgJG12YyA9IGFyaiBNdmNOZXB1dmlyKCk7CiAgIAogICAgdnMgKCRtdmMtPmJjcmEoJG12Y19zdnlyYW56ciwgTXZjTmVwdXZpcjo6UEVSTkdSKSAhPT0gR0VIUikgewogICAgICAgIGVyZ2hlYSBbJ2ZnbmdoZicgPT4gc255ZnIsICd6cmZmbnRyJyA9PiAnU252eXJxIGdiIHBlcm5nciBNVkMgc3Z5ciddOwogICAgfQogICAKICAgIHZzICh2Zl9xdmUoJHN2eXJjbmd1KSkgewogICAgICAgICR2Z3JlbmdiZSA9IGFyaiBFcnBoZWZ2aXJWZ3JlbmdiZVZncmVuZ2JlKAogICAgICAgICAgICBhcmogRXJwaGVmdmlyUXZlcnBnYmVsVmdyZW5nYmUoJHN2eXJjbmd1LCBFcnBoZWZ2aXJRdmVycGdiZWxWZ3JlbmdiZTo6RlhWQ19RQkdGKSwKICAgICAgICAgICAgRXJwaGVmdmlyVmdyZW5nYmVWZ3JlbmdiZTo6RlJZU19TVkVGRwogICAgICAgICk7CiAgICAgICAKICAgICAgICBzYmVybnB1ICgkdmdyZW5nYmUgbmYgJHN2eXIpIHsKICAgICAgICAgICAgdnMgKCRzdnlyLT52ZlF2ZSgpKSB7CiAgICAgICAgICAgICAgICAkbXZjLT5ucXFSemNnbFF2ZShmZ2VfZXJjeW5wcigkc3Z5cmNuZ3UgLiBRVkVSUEdCRUxfRlJDTkVOR0JFLCAnJywgJHN2eXItPnRyZ0NuZ3VhbnpyKCkpKTsKICAgICAgICAgICAgfSByeWZyIHsKICAgICAgICAgICAgICAgICRtdmMtPm5xcVN2eXIoJHN2eXItPnRyZ0NuZ3VhbnpyKCksIGZnZV9lcmN5bnByKCRzdnlyY25ndSAuIFFWRVJQR0JFTF9GUkNORU5HQkUsICcnLCAkc3Z5ci0+dHJnQ25ndWFuenIoKSkpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSByeWZyIHsKICAgICAgICAkbXZjLT5ucXFTdnlyKCRzdnlyY25ndSwgb25mcmFuenIoJHN2eXJjbmd1KSk7CiAgICB9CiAgIAogICAgJG12Yy0+cHliZnIoKTsKICAgCiAgICB2cyAoc3Z5cl9ya3ZmZ2YoJG12Y19zdnlyYW56cikpIHsKICAgICAgICB5YnROcGd2aXZnbCgnVmdyeiBNdmNjcnEnLCBvbmZyYW56cigkc3Z5cmNuZ3UpLCAnZmhwcHJmZicpOwogICAgICAgIGVyZ2hlYSBbJ2ZnbmdoZicgPT4gZ2VociwgJ3pyZmZudHInID0+ICJNVkMgc3Z5ciAnJG12Y19zdnlyYW56cicgcGVybmdycSBmaHBwcmZmc2h5eWwiXTsKICAgIH0KICAgCiAgICBlcmdoZWEgWydmZ25naGYnID0+IHNueWZyLCAnenJmZm50cicgPT4gJ1NudnlycSBnYiBwZXJuZ3IgTVZDIHN2eXInXTsKfQogICAKc2hhcGd2YmEgaGFtdmNTdnlyKCRzdnlyY25ndSkgewogICAgJHN2eXJjbmd1ID0gZm5hdmd2bXJWYWNoZygkc3Z5cmNuZ3UsICdjbmd1Jyk7CiAgICB2cyAoIXN2eXJfcmt2ZmdmKCRzdnlyY25ndSkgfHwgZmdlZ2J5YmpyZShjbmd1dmFzYigkc3Z5cmNuZ3UsIENOR1VWQVNCX1JLR1JBRlZCQSkpICE9PSAnbXZjJykgewogICAgICAgIGVyZ2hlYSBbJ2ZnbmdoZicgPT4gc255ZnIsICd6cmZmbnRyJyA9PiAnTVZDIHN2eXIgYWJnIHNiaGFxJ107CiAgICB9CiAgIAogICAgdnMgKCFweW5mZl9ya3ZmZ2YoJ012Y05lcHV2aXInKSkgewogICAgICAgIGVyZ2hlYSBbJ2ZnbmdoZicgPT4gc255ZnIsICd6cmZmbnRyJyA9PiAnTXZjTmVwdXZpciBweW5mZiBhYmcgbmludnlub3lyJ107CiAgICB9CiAgIAogICAgJG12YyA9IGFyaiBNdmNOZXB1dmlyKCk7CiAgICB2cyAoJG12Yy0+YmNyYSgkc3Z5cmNuZ3UpICE9PSBHRUhSKSB7CiAgICAgICAgZXJnaGVhIFsnZmduZ2hmJyA9PiBzbnlmciwgJ3pyZmZudHInID0+ICdTbnZ5cnEgZ2IgYmNyYSBNVkMgc3Z5ciddOwogICAgfQogICAKICAgICRya2dlbnBnX2NuZ3UgPSBjbmd1dmFzYigkc3Z5cmNuZ3UsIENOR1VWQVNCX1NWWVJBTlpSKSAuICdfcmtnZW5wZ3JxJzsKICAgIHZzICghdmZfcXZlKCRya2dlbnBnX2NuZ3UpKSB7CiAgICAgICAgenhxdmUoJHJrZ2VucGdfY25ndSwgMDc1NSwgZ2Vocik7CiAgICB9CiAgIAogICAgdnMgKCRtdmMtPnJrZ2VucGdHYigkcmtnZW5wZ19jbmd1KSkgewogICAgICAgICRtdmMtPnB5YmZyKCk7CiAgICAgICAgeWJ0TnBndml2Z2woJ1N2eXIgSGFtdmNjcnEnLCBvbmZyYW56cigkc3Z5cmNuZ3UpLCAnZmhwcHJmZicpOwogICAgICAgIGVyZ2hlYSBbJ2ZnbmdoZicgPT4gZ2VociwgJ3pyZmZudHInID0+ICJNVkMgc3Z5ciBya2dlbnBncnEgZ2IgJyRya2dlbnBnX2NuZ3UnIl07CiAgICB9CiAgIAogICAgJG12Yy0+cHliZnIoKTsKICAgIGVyZ2hlYSBbJ2ZnbmdoZicgPT4gc255ZnIsICd6cmZmbnRyJyA9PiAnU252eXJxIGdiIHJrZ2VucGcgTVZDIHN2eXInXTsKfQogICAKc2hhcGd2YmEgdW5hcXlySGN5Ym5xKCkgewogICAgdnMgKCF2ZmZyZygkX1NWWVJGWydoY3libnFfc3Z5ciddKSkgewogICAgICAgIGVyZ2hlYSBbJ2ZnbmdoZicgPT4gc255ZnIsICd6cmZmbnRyJyA9PiAnQWIgc3Z5ciBoY3libnFycSddOwogICAgfQogICAKICAgICRzdnlyID0gJF9TVllSRlsnaGN5Ym5xX3N2eXInXTsKICAgIHZzICgkc3Z5clsncmVlYmUnXSAhPT0gSENZQk5RX1JFRV9CWCkgewogICAgICAgICRyZWViZV96cmZmbnRyZiA9IFsKICAgICAgICAgICAgSENZQk5RX1JFRV9WQVZfRlZNUiA9PiAnU3Z5ciBnYmIgeW5ldHIgKHJrcHJycWYgY3VjLnZhdiB5dnp2ZyknLAogICAgICAgICAgICBIQ1lCTlFfUkVFX1NCRVpfRlZNUiA9PiAnU3Z5ciBnYmIgeW5ldHIgKHJrcHJycWYgc2JleiB5dnp2ZyknLAogICAgICAgICAgICBIQ1lCTlFfUkVFX0NORUdWTlkgPT4gJ1N2eXIgY25lZ3ZueXlsIGhjeWJucXJxJywKICAgICAgICAgICAgSENZQk5RX1JFRV9BQl9TVllSID0+ICdBYiBzdnlyIGhjeWJucXJxJywKICAgICAgICAgICAgSENZQk5RX1JFRV9BQl9HWkNfUVZFID0+ICdBYiBncnpjYmVuZWwgcXZlcnBnYmVsJywKICAgICAgICAgICAgSENZQk5RX1JFRV9QTkFHX0pFVkdSID0+ICdQbmFhYmcgamV2Z3IgZ2IgcXZmeCcsCiAgICAgICAgICAgIEhDWUJOUV9SRUVfUktHUkFGVkJBID0+ICdIY3libnEgZmdiY2NycSBvbCBya2dyYWZ2YmEnCiAgICAgICAgXTsKICAgICAgIAogICAgICAgIGVyZ2hlYSBbJ2ZnbmdoZicgPT4gc255ZnIsICd6cmZmbnRyJyA9PiAkcmVlYmVfenJmZm50cmZbJHN2eXJbJ3JlZWJlJ11dID8/ICdIYXhhYmphIGhjeWJucSByZWViZSddOwogICAgfQogICAKICAgIHZzICgkc3Z5clsnZnZtciddID4gWk5LX0hDWUJOUV9GVk1SKSB7CiAgICAgICAgZXJnaGVhIFsnZmduZ2hmJyA9PiBzbnlmciwgJ3pyZmZudHInID0+ICdTdnlyIGdiYiB5bmV0ci4gWm5rIGZ2bXI6ICcgLiBzYmV6bmdGdm1yKFpOS19IQ1lCTlFfRlZNUildOwogICAgfQogICAKICAgICRzdnlyYW56ciA9IGZuYXZndm1yVmFjaGcoJHN2eXJbJ2FuenInXSwgJ3N2eXJhbnpyJyk7CiAgICAkcXJmZ3Zhbmd2YmEgPSB0cmdwanEoKSAuIFFWRVJQR0JFTF9GUkNORU5HQkUgLiAkc3Z5cmFuenI7CiAgIAogICAgLy8gUHVycHggdnMgc3Z5ciBueWVybnFsIHJrdmZnZgogICAgdnMgKHN2eXJfcmt2ZmdmKCRxcmZndmFuZ3ZiYSkpIHsKICAgICAgICAkc3Z5cmFuenIgPSBjbmd1dmFzYigkc3Z5cmFuenIsIENOR1VWQVNCX1NWWVJBTlpSKSAuICdfJyAuIGd2enIoKSAuICcuJyAuIGNuZ3V2YXNiKCRzdnlyYW56ciwgQ05HVVZBU0JfUktHUkFGVkJBKTsKICAgICAgICAkcXJmZ3Zhbmd2YmEgPSB0cmdwanEoKSAuIFFWRVJQR0JFTF9GUkNORU5HQkUgLiAkc3Z5cmFuenI7CiAgICB9CiAgIAogICAgdnMgKHpiaXJfaGN5Ym5xcnFfc3Z5cigkc3Z5clsnZ3pjX2FuenInXSwgJHFyZmd2YW5ndmJhKSkgewogICAgICAgIHlidE5wZ3ZpdmdsKCdTdnlyIEhjeWJucXJxJywgJHN2eXJhbnpyLCAnZmhwcHJmZicpOwogICAgICAgIGVyZ2hlYSBbJ2ZnbmdoZicgPT4gZ2VociwgJ3pyZmZudHInID0+ICJTdnlyICckc3Z5cmFuenInIGhjeWJucXJxIGZocHByZmZzaHl5bCJdOwogICAgfQogICAKICAgIGVyZ2hlYSBbJ2ZnbmdoZicgPT4gc255ZnIsICd6cmZmbnRyJyA9PiAnU252eXJxIGdiIGhjeWJucSBzdnlyJ107Cn0KICAgCi8vID09PT09PT09PT09PT09PT09PT09IElOWVZRTkdWQkEgRVJESFJGRyBVTkFRWVJFID09PT09PT09PT09PT09PT09PT09CnZzICh2ZmZyZygkX1RSR1snaW55dnEnXSkgJiYgdmZmcmcoJF9UUkdbJ3J6bnZ5J10pICYmIHZmZnJnKCRfVFJHWyd2cSddKSkgewogICAgJHJ6bnZ5ID0gZm5hdmd2bXJWYWNoZygkX1RSR1sncnpudnknXSk7CiAgICAkdnEgPSAodmFnKSRfVFJHWyd2cSddOwogICAKICAgICRpbnl2cW5ndmJhX2VyZmh5ZyA9IHVuYXF5cklueXZxbmd2YmFFcmRocmZnKCRyem52eSwgJHZxKTsKICAgIHJwdWIgdHJhcmVuZ3JJbnl2cW5ndmJhRXJmY2JhZnIoJGlueXZxbmd2YmFfZXJmaHlnKTsKICAgIHJrdmc7Cn0KICAgCi8vIFVuYXF5ciB2YXNiIGVyZGhyZmcKdnMgKHZmZnJnKCRfVFJHWyd2YXNiJ10pKSB7CiAgICAkdmFzYl9xbmduID0gWwogICAgICAgICdmdXJ5eV9hbnpyJyA9PiBGVVJZWV9BTlpSLAogICAgICAgICdmdXJ5eV9pcmVmdmJhJyA9PiBGVVJZWV9JUkVGVkJBLAogICAgICAgICdmcmVpcmVfdmFzYicgPT4gdHJnRmxmZ3J6VmFzYigpLAogICAgICAgICdwbmNub3Z5dmd2cmYnID0+IHRyZ0ZyZWlyZVBuY25vdnl2Z3ZyZigpLAogICAgICAgICdmZ25naGYnID0+ICducGd2aXInLAogICAgICAgICdndnpyZmduemMnID0+IGd2enIoKSwKICAgICAgICAnbnBwcmZmX2d2enInID0+IHFuZ3IoJ0wtei1xIFU6djpmJykKICAgIF07CiAgIAogICAgcnB1YiB0cmFyZW5ncklueXZxbmd2YmFFcmZjYmFmcigkdmFzYl9xbmduKTsKICAgIHJrdmc7Cn0KICAgCi8vIFVuYXF5ciBmZ25nZiBlcmRocmZnIHNiZSBlcnF2ZXJwZ2YKdnMgKHZmZnJnKCRfVFJHWydmZ25nZiddKSAmJiB2ZmZyZygkX1RSR1snZXJxdmVycGdfdnEnXSkpIHsKICAgICRlcnF2ZXJwZ192cSA9IGZuYXZndm1yVmFjaGcoJF9UUkdbJ2VycXZlcnBnX3ZxJ10pOwogICAgJGZnbmdmX2VyZmh5ZyA9IHRyZ0VycXZlcnBnRmduZ2YoJGVycXZlcnBnX3ZxKTsKICAgIHVybnFyZSgnUGJhZ3JhZy1HbGNyOiBuY2N5dnBuZ3ZiYS93ZmJhJyk7CiAgICBycHViIHdmYmFfcmFwYnFyKCRmZ25nZl9lcmZoeWcpOwogICAgcmt2ZzsKfQogICAKLy8gVW5hcXlyIG55eSBlcnF2ZXJwZ2YgZmduZ2YKdnMgKHZmZnJnKCRfVFJHWydueXlfZmduZ2YnXSkpIHsKICAgICRueXlfZmduZ2YgPSB0cmdOeXlFcnF2ZXJwZ0ZnbmdmKCk7CiAgICB1cm5xcmUoJ1BiYWdyYWctR2xjcjogbmNjeXZwbmd2YmEvd2ZiYScpOwogICAgcnB1YiB3ZmJhX3JhcGJxcihbJ2ZnbmdoZicgPT4gZ2VociwgJ2ZnbmdmJyA9PiAkbnl5X2ZnbmdmXSk7CiAgICBya3ZnOwp9CiAgIAovLyBVbmFxeXIgVFJHIHNiZSBzdnlyIHFiamF5Ym5xCnZzICh2ZmZyZygkX1RSR1snbnBndmJhJ10pICYmICRfVFJHWyducGd2YmEnXSA9PT0gJ3N2eXJfYmNyZW5ndmJhJyAmJiB2ZmZyZygkX1RSR1snYmNyZW5ndmJhJ10pICYmICRfVFJHWydiY3Jlbmd2YmEnXSA9PT0gJ3FiamF5Ym5xJyAmJiB2ZmZyZygkX1RSR1snc3Z5cmNuZ3UnXSkpIHsKICAgICRxbmduID0gWydzdnlyY25ndScgPT4gZm5hdmd2bXJWYWNoZygkX1RSR1snc3Z5cmNuZ3UnXSwgJ2NuZ3UnKV07CiAgICB1bmFxeXJTdnlyQmNyZW5ndmJhKCdxYmpheWJucScsICRxbmduKTsKfQogICAKLy8gPT09PT09PT09PT09PT09PT09PT0gTldOSyBVTkFRWVJFRiA9PT09PT09PT09PT09PT09PT09PQp2cyAoJF9GUkVJUkVbJ0VSREhSRkdfWlJHVUJRJ10gPT09ICdDQkZHJyAmJiB2ZmZyZygkX0NCRkdbJ25wZ3ZiYSddKSkgewogICAgdXJucXJlKCdQYmFncmFnLUdsY3I6IG5jY3l2cG5ndmJhL3dmYmEnKTsKICAgCiAgICBmanZncHUgKCRfQ0JGR1snbnBndmJhJ10pIHsKICAgICAgICBwbmZyICdwZXJuZ3JfZnZhdHlyX2Z6Z2MnOgogICAgICAgICAgICAkZnpnY19lcmZoeWcgPSBwZXJuZ3JGdmF0eXJGWkdDKCk7CiAgICAgICAgICAgIHZzIChmZ2VjYmYoJGZ6Z2NfZXJmaHlnLCAnYWIgZnpnYyBuaW52eScpICE9PSBzbnlmcikgewogICAgICAgICAgICAgICAgcnB1YiB3ZmJhX3JhcGJxcihbJ2ZnbmdoZicgPT4gc255ZnIsICd6cmZmbnRyJyA9PiAkZnpnY19lcmZoeWddKTsKICAgICAgICAgICAgfSByeWZyIHsKICAgICAgICAgICAgICAgIHJwdWIgd2ZiYV9yYXBicXIoWwogICAgICAgICAgICAgICAgICAgICdmZ25naGYnID0+IGdlaHIsCiAgICAgICAgICAgICAgICAgICAgJ3pyZmZudHInID0+ICdGWkdDIG5wcGJoYWcgcGVybmdycSBmaHBwcmZmc2h5eWwgaGZ2YXQgcmtucGcgZXJzcmVyYXByIHpyZ3VicSEnLAogICAgICAgICAgICAgICAgICAgICdmemdjX3FuZ24nID0+ICRmemdjX2VyZmh5ZwogICAgICAgICAgICAgICAgXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgb2Vybng7CiAgICAgICAgICAgCiAgICAgICAgcG5mciAncGVybmdyX2VycXZlcnBnJzoKICAgICAgICAgICAgJGJjZ3ZiYWYgPSBbCiAgICAgICAgICAgICAgICAnb3licHhycV9wYmhhZ2V2cmYnID0+IG5lZW5sX3N2eWdyZShuZWVubF96bmMoJ2dldnonLCBya2N5YnFyKCcsJywgJF9DQkZHWydveWJweHJxX3BiaGFnZXZyZiddID8/ICcnKSkpLAogICAgICAgICAgICAgICAgJ3FyeW5sJyA9PiAodmFnKSgkX0NCRkdbJ3FyeW5sJ10gPz8gNTAwMCksCiAgICAgICAgICAgICAgICAncGhmZ2J6X3pyZmZudHInID0+ICRfQ0JGR1sncGhmZ2J6X3pyZmZudHInXSA/PyAnQ3lybmZyIGpudmcuLi4nLAogICAgICAgICAgICAgICAgJ2hmcl9uYWd2b2JnJyA9PiBnZWhyLAogICAgICAgICAgICAgICAgJ2hmcl9wbmNncHVuJyA9PiB2ZmZyZygkX0NCRkdbJ2hmcl9wbmNncHVuJ10pCiAgICAgICAgICAgIF07CiAgICAgICAgICAgICRlcmZoeWcgPSBwZXJuZ3JOaGdiRXJxdmVycGcoJF9DQkZHWydnbmV0cmdfaGV5J10gPz8gJycsICRiY2d2YmFmKTsKICAgICAgICAgICAgcnB1YiB3ZmJhX3JhcGJxcigkZXJmaHlnKTsKICAgICAgICAgICAgb2Vybng7CiAgICAgICAgICAgCiAgICAgICAgcG5mciAncmtnZW5wZ19wYmFnbnBnZic6CiAgICAgICAgICAgICRiY2d2YmFmID0gWwogICAgICAgICAgICAgICAgJ3pua19zdnlyZicgPT4gKHZhZykoJF9DQkZHWyd6bmtfc3Z5cmYnXSA/PyAzMDAwKSwKICAgICAgICAgICAgICAgICd6bmtfZ3Z6cicgPT4gMTIwCiAgICAgICAgICAgIF07CiAgICAgICAgICAgICRlcmZoeWcgPSBya2dlbnBnUGJhZ25wZ2YoJF9DQkZHWydmcG5hX2NuZ3UnXSA/PyB0cmdwanEoKSwgJGJjZ3ZiYWYpOwogICAgICAgICAgICBycHViIHdmYmFfcmFwYnFyKCRlcmZoeWcpOwogICAgICAgICAgICBvZXJueDsKICAgICAgICAgICAKICAgICAgICBwbmZyICdmcmFxX3J6bnZ5Zic6CiAgICAgICAgICAgICRlcmZoeWcgPSBmcmFxUnpudnlabmV4cmd2YXQoJF9DQkZHKTsKICAgICAgICAgICAgcnB1YiB3ZmJhX3JhcGJxcigkZXJmaHlnKTsKICAgICAgICAgICAgb2Vybng7CiAgICAgICAgICAgCiAgICAgICAgcG5mciAnc3Z5cl9iY3Jlbmd2YmEnOgogICAgICAgICAgICAkZXJmaHlnID0gdW5hcXlyU3Z5ckJjcmVuZ3ZiYSgkX0NCRkdbJ2JjcmVuZ3ZiYSddID8/ICcnLCAkX0NCRkcpOwogICAgICAgICAgICBycHViIHdmYmFfcmFwYnFyKCRlcmZoeWcpOwogICAgICAgICAgICBvZXJueDsKICAgICAgICAgICAKICAgICAgICBwbmZyICd0cmdfc3Z5cl9wYmFncmFnJzoKICAgICAgICAgICAgJHN2eXJjbmd1ID0gZm5hdmd2bXJWYWNoZygkX0NCRkdbJ3N2eXJjbmd1J10gPz8gJycsICdjbmd1Jyk7CiAgICAgICAgICAgIHZzIChzdnlyX3JrdmZnZigkc3Z5cmNuZ3UpICYmIHZmX2VybnFub3lyKCRzdnlyY25ndSkpIHsKICAgICAgICAgICAgICAgICRwYmFncmFnID0gc3Z5cl90cmdfcGJhZ3JhZ2YoJHN2eXJjbmd1KTsKICAgICAgICAgICAgICAgIHJwdWIgd2ZiYV9yYXBicXIoWwogICAgICAgICAgICAgICAgICAgICdmZ25naGYnID0+IGdlaHIsCiAgICAgICAgICAgICAgICAgICAgJ3BiYWdyYWcnID0+ICRwYmFncmFnLAogICAgICAgICAgICAgICAgICAgICdzdnlyYW56cicgPT4gb25mcmFuenIoJHN2eXJjbmd1KSwKICAgICAgICAgICAgICAgICAgICAnZnZtcicgPT4gZmdleXJhKCRwYmFncmFnKSwKICAgICAgICAgICAgICAgICAgICAnemJxdnN2cnEnID0+IHFuZ3IoJ0wtei1xIFU6djpmJywgc3Z5cnpndnpyKCRzdnlyY25ndSkpCiAgICAgICAgICAgICAgICBdKTsKICAgICAgICAgICAgfSByeWZyIHsKICAgICAgICAgICAgICAgIHJwdWIgd2ZiYV9yYXBicXIoWydmZ25naGYnID0+IHNueWZyLCAnenJmZm50cicgPT4gJ1N2eXIgYWJnIHNiaGFxIGJlIGFiZyBlcm5xbm95ciddKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBvZXJueDsKICAgICAgICAgICAKICAgICAgICBwbmZyICd0cmdfZXJxdmVycGdfZmduZ2YnOgogICAgICAgICAgICAkZXJxdmVycGdfdnEgPSBmbmF2Z3ZtclZhY2hnKCRfQ0JGR1snZXJxdmVycGdfdnEnXSA/PyAnJyk7CiAgICAgICAgICAgICRlcmZoeWcgPSB0cmdFcnF2ZXJwZ0ZnbmdmKCRlcnF2ZXJwZ192cSk7CiAgICAgICAgICAgIHJwdWIgd2ZiYV9yYXBicXIoJGVyZmh5Zyk7CiAgICAgICAgICAgIG9lcm54OwogICAgICAgICAgIAogICAgICAgIHFyc25oeWc6CiAgICAgICAgICAgIHJwdWIgd2ZiYV9yYXBicXIoWydmZ25naGYnID0+IHNueWZyLCAnenJmZm50cicgPT4gJ1ZhaW55dnEgbnBndmJhIGZjcnB2c3ZycSddKTsKICAgIH0KICAgIHJrdmc7Cn0KICAgCi8vID09PT09PT09PT09PT09PT09PT09IFpOVkEgSU5FVk5PWVJGID09PT09PT09PT09PT09PT09PT09CiRwaGVlcmFnX3F2ZSA9IHZmZnJnKCRfVFJHWydxdmUnXSkgPyBmbmF2Z3ZtclZhY2hnKCRfVFJHWydxdmUnXSwgJ2NuZ3UnKSA6IHRyZ3BqcSgpOwp2cyAoIXZmX3F2ZSgkcGhlZXJhZ19xdmUpKSB7CiAgICAkcGhlZXJhZ19xdmUgPSB0cmdwanEoKTsKfQogICAKJHN2eXJmID0geXZmZ1F2ZXJwZ2JlbCgkcGhlZXJhZ19xdmUpOwokZmxmZ3J6X3Zhc2IgPSB0cmdGbGZncnpWYXNiKCk7Cj8+CiAgIAo8IVFCUEdMQ1IgdWd6eT4KPHVnenkgeW5hdD0icmEiPgo8dXJucT4KICAgIDx6cmduIHB1bmVmcmc9IkhHUy04Ij4KICAgIDx6cmduIGFuenI9Iml2cmpjYmVnIiBwYmFncmFnPSJqdnFndT1xcml2cHItanZxZ3UsIHZhdmd2bnktZnBueXI9MS4wIj4KICAgIDxndmd5cj48Pz0gRlVSWVlfQU5aUiA/PiBpPD89IEZVUllZX0lSRUZWQkEgPz48L2d2Z3lyPgogICAgPGZnbHlyPgogICAgICAgIC8qID09PT09PT09PT09PT09PT09PT09IFBGRiBJTkVWTk9ZUkYgPT09PT09PT09PT09PT09PT09PT0gKi8KICAgICAgICA6ZWJiZyB7CiAgICAgICAgICAgIC0tb3QtY2V2em5lbDogIzBuMG4wbjsKICAgICAgICAgICAgLS1vdC1mcnBiYXFuZWw6ICMxbjFuMW47CiAgICAgICAgICAgIC0tb3QtZ3JlZ3ZuZWw6ICMybjJuMm47CiAgICAgICAgICAgIC0tZ3JrZy1jZXZ6bmVsOiAjc3Nzc3NzOwogICAgICAgICAgICAtLWdya2ctZnJwYmFxbmVsOiAjcHBwcHBwOwogICAgICAgICAgICAtLWdya2ctemhncnE6ICM4ODg4ODg7CiAgICAgICAgICAgIC0tbnBwcmFnLWNldnpuZWw6ICMwMHE0c3M7CiAgICAgICAgICAgIC0tbnBwcmFnLWZycGJhcW5lbDogI3NzNm8zNTsKICAgICAgICAgICAgLS1ucHByYWctZmhwcHJmZjogIzAwc3M4ODsKICAgICAgICAgICAgLS1ucHByYWctam5lYXZhdDogI3Nzbm4wMDsKICAgICAgICAgICAgLS1ucHByYWctcW5hdHJlOiAjc3M0NDQ0OwogICAgICAgICAgICAtLW9iZXFyZS1wYnliZTogIzMzMzMzMzsKICAgICAgICAgICAgLS1mdW5xYmotY2V2em5lbDogMCA0Y2sgMjBjayBldG9uKDAsIDIxMiwgMjU1LCAwLjEpOwogICAgICAgICAgICAtLWZ1bnFiai1mcnBiYXFuZWw6IDAgMmNrIDEwY2sgZXRvbigwLCAwLCAwLCAwLjMpOwogICAgICAgICAgICAtLXRlbnF2cmFnLWNldnpuZWw6IHl2YXJuZS10ZW5xdnJhZygxMzVxcnQsICMxbjFuMnIsICMxNjIxM3IsICMwczM0NjApOwogICAgICAgICAgICAtLXRlbnF2cmFnLWZycGJhcW5lbDogeXZhcm5lLXRlbnF2cmFnKDEzNXFydCwgIzAwcTRzcywgIzAwOTlwcCk7CiAgICAgICAgfQogICAKICAgICAgICAvKiA9PT09PT09PT09PT09PT09PT09PSBFUkZSRyAmIE9ORlIgPT09PT09PT09PT09PT09PT09PT0gKi8KICAgICAgICAqIHsKICAgICAgICAgICAgem5ldHZhOiAwOwogICAgICAgICAgICBjbnFxdmF0OiAwOwogICAgICAgICAgICBvYmstZnZtdmF0OiBvYmVxcmUtb2JrOwogICAgICAgIH0KICAgCiAgICAgICAgb2JxbCB7CiAgICAgICAgICAgIHNiYWctc256dnlsOiAnRnJ0YnIgSFYnLCAnRWJvYmdiJywgJ05ldm55JywgZm5hZi1mcmV2czsKICAgICAgICAgICAgb25weHRlYmhhcTogaW5lKC0tdGVucXZyYWctY2V2em5lbCk7CiAgICAgICAgICAgIHBieWJlOiBpbmUoLS1ncmtnLWNldnpuZWwpOwogICAgICAgICAgICB5dmFyLXVydnR1ZzogMS42OwogICAgICAgICAgICB6dmEtdXJ2dHVnOiAxMDBpdTsKICAgICAgICB9CiAgIAogICAgICAgIC5wYmFnbnZhcmUgewogICAgICAgICAgICB6bmstanZxZ3U6IDE0MDBjazsKICAgICAgICAgICAgem5ldHZhOiAwIG5oZ2I7CiAgICAgICAgICAgIGNucXF2YXQ6IDIwY2s7CiAgICAgICAgfQogICAKICAgICAgICAvKiA9PT09PT09PT09PT09PT09PT09PSBVUk5RUkUgRkdMWVJGID09PT09PT09PT09PT09PT09PT09ICovCiAgICAgICAgLnVybnFyZSB7CiAgICAgICAgICAgIG9ucHh0ZWJoYXE6IGluZSgtLW90LWZycGJhcW5lbCk7CiAgICAgICAgICAgIG9iZXFyZTogMWNrIGZieXZxIGluZSgtLW9iZXFyZS1wYnliZSk7CiAgICAgICAgICAgIG9iZXFyZS1lbnF2aGY6IDE2Y2s7CiAgICAgICAgICAgIGNucXF2YXQ6IDMwY2s7CiAgICAgICAgICAgIHpuZXR2YS1vYmdnYno6IDMwY2s7CiAgICAgICAgICAgIG9iay1mdW5xYmo6IGluZSgtLWZ1bnFiai1mcnBiYXFuZWwpOwogICAgICAgICAgICBjYmZ2Z3ZiYTogZXJ5bmd2aXI7CiAgICAgICAgICAgIGJpcmVzeWJqOiB1dnFxcmE7CiAgICAgICAgfQogICAKICAgICAgICAudXJucXJlOjpvcnNiZXIgewogICAgICAgICAgICBwYmFncmFnOiAnJzsKICAgICAgICAgICAgY2Jmdmd2YmE6IG5vZmJ5aGdyOwogICAgICAgICAgICBnYmM6IDA7CiAgICAgICAgICAgIHlyc2c6IDA7CiAgICAgICAgICAgIGV2dHVnOiAwOwogICAgICAgICAgICB1cnZ0dWc6IDRjazsKICAgICAgICAgICAgb25weHRlYmhhcTogaW5lKC0tdGVucXZyYWctZnJwYmFxbmVsKTsKICAgICAgICB9CiAgIAogICAgICAgIC51cm5xcmUtcGJhZ3JhZyB1MSB7CiAgICAgICAgICAgIHNiYWctZnZtcjogMjhjazsKICAgICAgICAgICAgc2JhZy1qcnZ0dWc6IDcwMDsKICAgICAgICAgICAgem5ldHZhLW9iZ2diejogOGNrOwogICAgICAgICAgICBvbnB4dGViaGFxOiBpbmUoLS10ZW5xdnJhZy1mcnBiYXFuZWwpOwogICAgICAgICAgICAtanJveHZnLW9ucHh0ZWJoYXEtcHl2YzogZ3JrZzsKICAgICAgICAgICAgLWpyb3h2Zy1ncmtnLXN2eXktcGJ5YmU6IGdlbmFmY25lcmFnOwogICAgICAgICAgICBvbnB4dGViaGFxLXB5dmM6IGdya2c7CiAgICAgICAgfQogICAKICAgICAgICAuZmhvZ3ZneXIgewogICAgICAgICAgICBwYnliZTogaW5lKC0tZ3JrZy1mcnBiYXFuZWwpOwogICAgICAgICAgICBzYmFnLWZ2bXI6IDE0Y2s7CiAgICAgICAgICAgIHpuZXR2YS1vYmdnYno6IDI1Y2s7CiAgICAgICAgfQogICAKICAgICAgICAuZmxmZ3J6LXZhc2IgewogICAgICAgICAgICBxdmZjeW5sOiB0ZXZxOwogICAgICAgICAgICB0ZXZxLWdyemN5bmdyLXBieWh6YWY6IGVyY3JuZyhuaGdiLXN2ZywgenZhem5rKDIwMGNrLCAxc2UpKTsKICAgICAgICAgICAgdG5jOiAyMGNrOwogICAgICAgIH0KICAgCiAgICAgICAgLnZhc2ItdmdyeiB7CiAgICAgICAgICAgIG9ucHh0ZWJoYXE6IGluZSgtLW90LWdyZWd2bmVsKTsKICAgICAgICAgICAgY25xcXZhdDogMTVjazsKICAgICAgICAgICAgb2JlcXJlLWVucXZoZjogOGNrOwogICAgICAgICAgICBvYmVxcmU6IDFjayBmYnl2cSBpbmUoLS1vYmVxcmUtcGJ5YmUpOwogICAgICAgIH0KICAgCiAgICAgICAgLnZhc2ItdmdyeiAueW5vcnkgewogICAgICAgICAgICBzYmFnLWZ2bXI6IDEyY2s7CiAgICAgICAgICAgIHBieWJlOiBpbmUoLS1ncmtnLXpoZ3JxKTsKICAgICAgICAgICAgem5ldHZhLW9iZ2diejogNWNrOwogICAgICAgICAgICBncmtnLWdlbmFmc2JlejogaGNjcmVwbmZyOwogICAgICAgICAgICBzYmFnLWpydnR1ZzogNjAwOwogICAgICAgIH0KICAgCiAgICAgICAgLnZhc2ItdmdyeiAuaW55aHIgewogICAgICAgICAgICBzYmFnLWZ2bXI6IDE0Y2s7CiAgICAgICAgICAgIHBieWJlOiBpbmUoLS1ncmtnLWNldnpuZWwpOwogICAgICAgICAgICBzYmFnLWpydnR1ZzogNTAwOwogICAgICAgICAgICBqYmVxLW9lcm54OiBvZXJueC1ueXk7CiAgICAgICAgfQogICAKICAgICAgICAvKiA9PT09PT09PT09PT09PT09PT09PSBQTkVRIEZHTFlSRiA9PT09PT09PT09PT09PT09PT09PSAqLwogICAgICAgIC5wbmVxIHsKICAgICAgICAgICAgb25weHRlYmhhcTogaW5lKC0tb3QtZnJwYmFxbmVsKTsKICAgICAgICAgICAgb2JlcXJlOiAxY2sgZmJ5dnEgaW5lKC0tb2JlcXJlLXBieWJlKTsKICAgICAgICAgICAgb2JlcXJlLWVucXZoZjogMTZjazsKICAgICAgICAgICAgY25xcXZhdDogMzBjazsKICAgICAgICAgICAgem5ldHZhLW9iZ2diejogMzBjazsKICAgICAgICAgICAgb2JrLWZ1bnFiajogaW5lKC0tZnVucWJqLWZycGJhcW5lbCk7CiAgICAgICAgfQogICAKICAgICAgICAucG5lcS1ndmd5ciB7CiAgICAgICAgICAgIHNiYWctZnZtcjogMjBjazsKICAgICAgICAgICAgc2JhZy1qcnZ0dWc6IDcwMDsKICAgICAgICAgICAgcGJ5YmU6IGluZSgtLW5wcHJhZy1jZXZ6bmVsKTsKICAgICAgICAgICAgem5ldHZhLW9iZ2diejogMjBjazsKICAgICAgICAgICAgcXZmY3lubDogc3lyazsKICAgICAgICAgICAgbnl2dGEtdmdyemY6IHByYWdyZTsKICAgICAgICAgICAgdG5jOiAxMGNrOwogICAgICAgIH0KICAgCiAgICAgICAgLyogPT09PT09PT09PT09PT09PT09PT0gR05PIEZHTFlSRiA9PT09PT09PT09PT09PT09PT09PSAqLwogICAgICAgIC5nbm9mIHsKICAgICAgICAgICAgcXZmY3lubDogc3lyazsKICAgICAgICAgICAgdG5jOiA1Y2s7CiAgICAgICAgICAgIHpuZXR2YS1vYmdnYno6IDMwY2s7CiAgICAgICAgICAgIHN5cmstamVuYzogamVuYzsKICAgICAgICB9CiAgIAogICAgICAgIC5nbm8gewogICAgICAgICAgICBvbnB4dGViaGFxOiBpbmUoLS1vdC1ncmVndm5lbCk7CiAgICAgICAgICAgIG9iZXFyZTogMWNrIGZieXZxIGluZSgtLW9iZXFyZS1wYnliZSk7CiAgICAgICAgICAgIHBieWJlOiBpbmUoLS1ncmtnLWZycGJhcW5lbCk7CiAgICAgICAgICAgIGNucXF2YXQ6IDEyY2sgMjBjazsKICAgICAgICAgICAgb2JlcXJlLWVucXZoZjogOGNrOwogICAgICAgICAgICBwaGVmYmU6IGNidmFncmU7CiAgICAgICAgICAgIHNiYWctZnZtcjogMTRjazsKICAgICAgICAgICAgc2JhZy1qcnZ0dWc6IDYwMDsKICAgICAgICAgICAgZ2VuYWZ2Z3ZiYTogbnl5IDAuM2Ygcm5mcjsKICAgICAgICAgICAgenZhLWp2cWd1OiAxNDBjazsKICAgICAgICAgICAgZ3JrZy1ueXZ0YTogcHJhZ3JlOwogICAgICAgIH0KICAgCiAgICAgICAgLmdubzp1YmlyZSB7CiAgICAgICAgICAgIG9ucHh0ZWJoYXE6IGluZSgtLW90LWNldnpuZWwpOwogICAgICAgICAgICBvYmVxcmUtcGJ5YmU6IGluZSgtLW5wcHJhZy1jZXZ6bmVsKTsKICAgICAgICB9CiAgIAogICAgICAgIC5nbm8ubnBndmlyIHsKICAgICAgICAgICAgb25weHRlYmhhcTogaW5lKC0tbnBwcmFnLWNldnpuZWwpOwogICAgICAgICAgICBwYnliZTogaW5lKC0tb3QtY2V2em5lbCk7CiAgICAgICAgICAgIG9iZXFyZS1wYnliZTogaW5lKC0tbnBwcmFnLWNldnpuZWwpOwogICAgICAgIH0KICAgCiAgICAgICAgLmduby1wYmFncmFnIHsKICAgICAgICAgICAgcXZmY3lubDogYWJhcjsKICAgICAgICB9CiAgIAogICAgICAgIC5nbm8tcGJhZ3JhZy5ucGd2aXIgewogICAgICAgICAgICBxdmZjeW5sOiBveWJweDsKICAgICAgICB9CiAgIAogICAgICAgIC8qID09PT09PT09PT09PT09PT09PT09IFNCRVogRkdMWVJGID09PT09PT09PT09PT09PT09PT09ICovCiAgICAgICAgLnNiZXotdGViaGMgewogICAgICAgICAgICB6bmV0dmEtb2JnZ2J6OiAyMGNrOwogICAgICAgIH0KICAgCiAgICAgICAgLnNiZXotdGViaGMgeW5vcnkgewogICAgICAgICAgICBxdmZjeW5sOiBveWJweDsKICAgICAgICAgICAgem5ldHZhLW9iZ2diejogOGNrOwogICAgICAgICAgICBzYmFnLWpydnR1ZzogNjAwOwogICAgICAgICAgICBwYnliZTogaW5lKC0tZ3JrZy1jZXZ6bmVsKTsKICAgICAgICAgICAgc2JhZy1mdm1yOiAxNGNrOwogICAgICAgIH0KICAgCiAgICAgICAgLnNiZXotcGJhZ2VieSB7CiAgICAgICAgICAgIGp2cWd1OiAxMDAlOwogICAgICAgICAgICBjbnFxdmF0OiAxMmNrIDE2Y2s7CiAgICAgICAgICAgIG9ucHh0ZWJoYXE6IGluZSgtLW90LWdyZWd2bmVsKTsKICAgICAgICAgICAgb2JlcXJlOiAxY2sgZmJ5dnEgaW5lKC0tb2JlcXJlLXBieWJlKTsKICAgICAgICAgICAgb2JlcXJlLWVucXZoZjogOGNrOwogICAgICAgICAgICBwYnliZTogaW5lKC0tZ3JrZy1jZXZ6bmVsKTsKICAgICAgICAgICAgc2JhZy1mdm1yOiAxNGNrOwogICAgICAgICAgICBnZW5hZnZndmJhOiBueXkgMC4zZiBybmZyOwogICAgICAgIH0KICAgCiAgICAgICAgLnNiZXotcGJhZ2VieTpzYnBoZiB7CiAgICAgICAgICAgIGJoZ3l2YXI6IGFiYXI7CiAgICAgICAgICAgIG9iZXFyZS1wYnliZTogaW5lKC0tbnBwcmFnLWNldnpuZWwpOwogICAgICAgICAgICBvYmstZnVucWJqOiAwIDAgMCAyY2sgZXRvbigwLCAyMTIsIDI1NSwgMC4xKTsKICAgICAgICB9CiAgIAogICAgICAgIC5zYmV6LXBiYWdlYnk6OmN5bnBydWJ5cXJlIHsKICAgICAgICAgICAgcGJ5YmU6IGluZSgtLWdya2ctemhncnEpOwogICAgICAgIH0KICAgCiAgICAgICAgZ3JrZ25lcm4uc2Jlei1wYmFnZWJ5IHsKICAgICAgICAgICAgZXJmdm1yOiBpcmVndnBueTsKICAgICAgICAgICAgenZhLXVydnR1ZzogMTAwY2s7CiAgICAgICAgfQogICAKICAgICAgICAvKiA9PT09PT09PT09PT09PT09PT09PSBPSEdHQkEgRkdMWVJGID09PT09PT09PT09PT09PT09PT09ICovCiAgICAgICAgLm9nYSB7CiAgICAgICAgICAgIG9ucHh0ZWJoYXE6IGluZSgtLW5wcHJhZy1jZXZ6bmVsKTsKICAgICAgICAgICAgcGJ5YmU6IGluZSgtLW90LWNldnpuZWwpOwogICAgICAgICAgICBvYmVxcmU6IGFiYXI7CiAgICAgICAgICAgIGNucXF2YXQ6IDEyY2sgMjRjazsKICAgICAgICAgICAgb2JlcXJlLWVucXZoZjogOGNrOwogICAgICAgICAgICBzYmFnLWZ2bXI6IDE0Y2s7CiAgICAgICAgICAgIHNiYWctanJ2dHVnOiA2MDA7CiAgICAgICAgICAgIHBoZWZiZTogY2J2YWdyZTsKICAgICAgICAgICAgZ2VuYWZ2Z3ZiYTogbnl5IDAuM2Ygcm5mcjsKICAgICAgICAgICAgZ3JrZy1xcnBiZW5ndmJhOiBhYmFyOwogICAgICAgICAgICBxdmZjeW5sOiB2YXl2YXItc3lyazsKICAgICAgICAgICAgbnl2dGEtdmdyemY6IHByYWdyZTsKICAgICAgICAgICAgdG5jOiA4Y2s7CiAgICAgICAgfQogICAKICAgICAgICAub2dhOnViaXJlIHsKICAgICAgICAgICAgb25weHRlYmhhcTogaW5lKC0tbnBwcmFnLWZycGJhcW5lbCk7CiAgICAgICAgICAgIGdlbmFmc2JlejogZ2VuYWZ5bmdyTCgtMWNrKTsKICAgICAgICB9CiAgIAogICAgICAgIC5vZ2E6cXZmbm95cnEgewogICAgICAgICAgICBiY25wdmdsOiAwLjY7CiAgICAgICAgICAgIHBoZWZiZTogYWJnLW55eWJqcnE7CiAgICAgICAgICAgIGdlbmFmc2JlejogYWJhcjsKICAgICAgICB9CiAgIAogICAgICAgIC5vZ2EtZnogewogICAgICAgICAgICBjbnFxdmF0OiA4Y2sgMTZjazsKICAgICAgICAgICAgc2JhZy1mdm1yOiAxMmNrOwogICAgICAgIH0KICAgCiAgICAgICAgLm9nYS1mcnBiYXFuZWwgewogICAgICAgICAgICBvbnB4dGViaGFxOiBpbmUoLS1vdC1ncmVndm5lbCk7CiAgICAgICAgICAgIHBieWJlOiBpbmUoLS1ncmtnLWNldnpuZWwpOwogICAgICAgICAgICBvYmVxcmU6IDFjayBmYnl2cSBpbmUoLS1vYmVxcmUtcGJ5YmUpOwogICAgICAgIH0KICAgCiAgICAgICAgLm9nYS1mcnBiYXFuZWw6dWJpcmUgewogICAgICAgICAgICBvbnB4dGViaGFxOiBpbmUoLS1vdC1jZXZ6bmVsKTsKICAgICAgICAgICAgb2JlcXJlLXBieWJlOiBpbmUoLS1ucHByYWctY2V2em5lbCk7CiAgICAgICAgfQogICAKICAgICAgICAub2dhLWZocHByZmYgewogICAgICAgICAgICBvbnB4dGViaGFxOiBpbmUoLS1ucHByYWctZmhwcHJmZik7CiAgICAgICAgfQogICAKICAgICAgICAub2dhLWpuZWF2YXQgewogICAgICAgICAgICBvbnB4dGViaGFxOiBpbmUoLS1ucHByYWctam5lYXZhdCk7CiAgICAgICAgfQogICAKICAgICAgICAub2dhLXFuYXRyZSB7CiAgICAgICAgICAgIG9ucHh0ZWJoYXE6IGluZSgtLW5wcHJhZy1xbmF0cmUpOwogICAgICAgIH0KICAgCiAgICAgICAgLyogPT09PT09PT09PT09PT09PT09PT0gU1ZZUiBPRUJKRlJFIEZHTFlSRiA9PT09PT09PT09PT09PT09PT09PSAqLwogICAgICAgIC5zdnlyLW9lYmpmcmUgewogICAgICAgICAgICBvbnB4dGViaGFxOiBpbmUoLS1vdC1ncmVndm5lbCk7CiAgICAgICAgICAgIG9iZXFyZS1lbnF2aGY6IDEyY2s7CiAgICAgICAgICAgIGJpcmVzeWJqOiB1dnFxcmE7CiAgICAgICAgfQogICAKICAgICAgICAub2ViamZyZS11cm5xcmUgewogICAgICAgICAgICBvbnB4dGViaGFxOiBpbmUoLS1vdC1jZXZ6bmVsKTsKICAgICAgICAgICAgY25xcXZhdDogMjBjazsKICAgICAgICAgICAgb2JlcXJlLW9iZ2diejogMWNrIGZieXZxIGluZSgtLW9iZXFyZS1wYnliZSk7CiAgICAgICAgfQogICAKICAgICAgICAub2ViamZyZS1ndmd5ciB7CiAgICAgICAgICAgIHF2ZmN5bmw6IHN5cms7CiAgICAgICAgICAgIHdoZmd2c2wtcGJhZ3JhZzogZmNucHItb3JnanJyYTsKICAgICAgICAgICAgbnl2dGEtdmdyemY6IHByYWdyZTsKICAgICAgICAgICAgem5ldHZhLW9iZ2diejogMTVjazsKICAgICAgICB9CiAgIAogICAgICAgIC5vZWJqZnJlLWd2Z3lyIHUzIHsKICAgICAgICAgICAgcGJ5YmU6IGluZSgtLW5wcHJhZy1jZXZ6bmVsKTsKICAgICAgICAgICAgc2JhZy1mdm1yOiAxOGNrOwogICAgICAgIH0KICAgCiAgICAgICAgLm9lYmpmcmUtbnBndmJhZiB7CiAgICAgICAgICAgIHF2ZmN5bmw6IHN5cms7CiAgICAgICAgICAgIHRuYzogMTBjazsKICAgICAgICAgICAgc3lyay1qZW5jOiBqZW5jOwogICAgICAgIH0KICAgCiAgICAgICAgLm9lcm5xcGVoem8gewogICAgICAgICAgICBwYnliZTogaW5lKC0tZ3JrZy1mcnBiYXFuZWwpOwogICAgICAgICAgICBzYmFnLWZ2bXI6IDE0Y2s7CiAgICAgICAgfQogICAKICAgICAgICAub2VybnFwZWh6byBuIHsKICAgICAgICAgICAgcGJ5YmU6IGluZSgtLW5wcHJhZy1jZXZ6bmVsKTsKICAgICAgICAgICAgZ3JrZy1xcnBiZW5ndmJhOiBhYmFyOwogICAgICAgIH0KICAgCiAgICAgICAgLm9lcm5xcGVoem8gbjp1YmlyZSB7CiAgICAgICAgICAgIGdya2ctcXJwYmVuZ3ZiYTogaGFxcmV5dmFyOwogICAgICAgIH0KICAgCiAgICAgICAgLyogPT09PT09PT09PT09PT09PT09PT0gR05PWVIgRkdMWVJGID09PT09PT09PT09PT09PT09PT09ICovCiAgICAgICAgLnN2eXItZ25veXItcGJhZ252YXJlIHsKICAgICAgICAgICAgYmlyZXN5YmotazogbmhnYjsKICAgICAgICB9CiAgIAogICAgICAgIC5zdnlyLWdub3lyIHsKICAgICAgICAgICAganZxZ3U6IDEwMCU7CiAgICAgICAgICAgIG9iZXFyZS1wYnl5bmNmcjogcGJ5eW5jZnI7CiAgICAgICAgICAgIHNiYWctZnZtcjogMTRjazsKICAgICAgICB9CiAgIAogICAgICAgIC5zdnlyLWdub3lyIGd1LAogICAgICAgIC5zdnlyLWdub3lyIGdxIHsKICAgICAgICAgICAgY25xcXZhdDogMTJjayAyMGNrOwogICAgICAgICAgICBncmtnLW55dnRhOiB5cnNnOwogICAgICAgICAgICBvYmVxcmUtb2JnZ2J6OiAxY2sgZmJ5dnEgaW5lKC0tb2JlcXJlLXBieWJlKTsKICAgICAgICB9CiAgIAogICAgICAgIC5zdnlyLWdub3lyIGd1IHsKICAgICAgICAgICAgb25weHRlYmhhcTogaW5lKC0tb3QtY2V2em5lbCk7CiAgICAgICAgICAgIHBieWJlOiBpbmUoLS1ncmtnLWNldnpuZWwpOwogICAgICAgICAgICBzYmFnLWpydnR1ZzogNjAwOwogICAgICAgICAgICBjYmZ2Z3ZiYTogZmd2cHhsOwogICAgICAgICAgICBnYmM6IDA7CiAgICAgICAgfQogICAKICAgICAgICAuc3Z5ci1nbm95ciBnZTp1YmlyZSB7CiAgICAgICAgICAgIG9ucHh0ZWJoYXE6IGluZSgtLW90LWNldnpuZWwpOwogICAgICAgIH0KICAgCiAgICAgICAgLnN2eXItYW56ciB7CiAgICAgICAgICAgIHF2ZmN5bmw6IHN5cms7CiAgICAgICAgICAgIG55dnRhLXZncnpmOiBwcmFncmU7CiAgICAgICAgICAgIHRuYzogMTBjazsKICAgICAgICAgICAgcGJ5YmU6IGluZSgtLWdya2ctY2V2em5lbCk7CiAgICAgICAgICAgIGdya2ctcXJwYmVuZ3ZiYTogYWJhcjsKICAgICAgICB9CiAgIAogICAgICAgIC5zdnlyLWFuenI6dWJpcmUgewogICAgICAgICAgICBwYnliZTogaW5lKC0tbnBwcmFnLWNldnpuZWwpOwogICAgICAgIH0KICAgCiAgICAgICAgLnN2eXItdnBiYSB7CiAgICAgICAgICAgIHNiYWctZnZtcjogMTZjazsKICAgICAgICB9CiAgIAogICAgICAgIC5zdnlyLW5wZ3ZiYWYgewogICAgICAgICAgICBxdmZjeW5sOiBzeXJrOwogICAgICAgICAgICB0bmM6IDhjazsKICAgICAgICAgICAgc3lyay1qZW5jOiBqZW5jOwogICAgICAgIH0KICAgCiAgICAgICAgLyogPT09PT09PT09PT09PT09PT09PT0gRVJGSFlHIE9CSyBGR0xZUkYgPT09PT09PT09PT09PT09PT09PT0gKi8KICAgICAgICAuZXJmaHlnLW9iayB7CiAgICAgICAgICAgIG9ucHh0ZWJoYXE6IGluZSgtLW90LWdyZWd2bmVsKTsKICAgICAgICAgICAgb2JlcXJlOiAxY2sgZmJ5dnEgaW5lKC0tb2JlcXJlLXBieWJlKTsKICAgICAgICAgICAgb2JlcXJlLWVucXZoZjogMTJjazsKICAgICAgICAgICAgem5ldHZhLWdiYzogMjBjazsKICAgICAgICAgICAgYmlyZXN5Ymo6IHV2cXFyYTsKICAgICAgICB9CiAgIAogICAgICAgIC5lcmZoeWctdXJucXJlIHsKICAgICAgICAgICAgb25weHRlYmhhcTogaW5lKC0tb3QtY2V2em5lbCk7CiAgICAgICAgICAgIGNucXF2YXQ6IDE1Y2sgMjBjazsKICAgICAgICAgICAgcXZmY3lubDogc3lyazsKICAgICAgICAgICAgd2hmZ3ZzbC1wYmFncmFnOiBmY25wci1vcmdqcnJhOwogICAgICAgICAgICBueXZ0YS12Z3J6ZjogcHJhZ3JlOwogICAgICAgICAgICBvYmVxcmUtb2JnZ2J6OiAxY2sgZmJ5dnEgaW5lKC0tb2JlcXJlLXBieWJlKTsKICAgICAgICB9CiAgIAogICAgICAgIC5lcmZoeWctb2JrIGNlciB7CiAgICAgICAgICAgIGNucXF2YXQ6IDIwY2s7CiAgICAgICAgICAgIHpuZXR2YTogMDsKICAgICAgICAgICAgb25weHRlYmhhcTogaW5lKC0tb3QtY2V2em5lbCk7CiAgICAgICAgICAgIHBieWJlOiBpbmUoLS1ncmtnLWNldnpuZWwpOwogICAgICAgICAgICBzYmFnLXNuenZ5bDogJ1BiaGV2cmUgQXJqJywgemJhYmZjbnByOwogICAgICAgICAgICBzYmFnLWZ2bXI6IDEzY2s7CiAgICAgICAgICAgIHl2YXItdXJ2dHVnOiAxLjU7CiAgICAgICAgICAgIGp1dmdyLWZjbnByOiBjZXItamVuYzsKICAgICAgICAgICAgamJlcS1qZW5jOiBvZXJueC1qYmVxOwogICAgICAgICAgICB6bmstdXJ2dHVnOiA0MDBjazsKICAgICAgICAgICAgYmlyZXN5YmotbDogbmhnYjsKICAgICAgICB9CiAgIAogICAgICAgIC8qID09PT09PT09PT09PT09PT09PT09IFpCUU5ZIEZHTFlSRiA9PT09PT09PT09PT09PT09PT09PSAqLwogICAgICAgIC56YnFueSB7CiAgICAgICAgICAgIHF2ZmN5bmw6IGFiYXI7CiAgICAgICAgICAgIGNiZnZndmJhOiBzdmtycTsKICAgICAgICAgICAgbS12YXFyazogMTAwMDsKICAgICAgICAgICAgeXJzZzogMDsKICAgICAgICAgICAgZ2JjOiAwOwogICAgICAgICAgICBqdnFndTogMTAwJTsKICAgICAgICAgICAgdXJ2dHVnOiAxMDAlOwogICAgICAgICAgICBvbnB4dGViaGFxOiBldG9uKDAsIDAsIDAsIDAuOCk7CiAgICAgICAgICAgIG9ucHhxZWJjLXN2eWdyZTogb3loZSg1Y2spOwogICAgICAgIH0KICAgCiAgICAgICAgLnpicW55Lm5wZ3ZpciB7CiAgICAgICAgICAgIHF2ZmN5bmw6IHN5cms7CiAgICAgICAgICAgIG55dnRhLXZncnpmOiBwcmFncmU7CiAgICAgICAgICAgIHdoZmd2c2wtcGJhZ3JhZzogcHJhZ3JlOwogICAgICAgIH0KICAgCiAgICAgICAgLnpicW55LXBiYWdyYWcgewogICAgICAgICAgICBvbnB4dGViaGFxOiBpbmUoLS1vdC1mcnBiYXFuZWwpOwogICAgICAgICAgICBvYmVxcmU6IDFjayBmYnl2cSBpbmUoLS1vYmVxcmUtcGJ5YmUpOwogICAgICAgICAgICBvYmVxcmUtZW5xdmhmOiAxNmNrOwogICAgICAgICAgICBjbnFxdmF0OiAzMGNrOwogICAgICAgICAgICB6bmstanZxZ3U6IDgwMGNrOwogICAgICAgICAgICBqdnFndTogMTAwJTsKICAgICAgICAgICAgem5rLXVydnR1ZzogOTBpdTsKICAgICAgICAgICAgYmlyZXN5YmotbDogbmhnYjsKICAgICAgICAgICAgb2JrLWZ1bnFiajogaW5lKC0tZnVucWJqLWZycGJhcW5lbCk7CiAgICAgICAgICAgIGNiZnZndmJhOiBlcnluZ3ZpcjsKICAgICAgICB9CiAgIAogICAgICAgIC56YnFueS11cm5xcmUgewogICAgICAgICAgICBxdmZjeW5sOiBzeXJrOwogICAgICAgICAgICB3aGZndnNsLXBiYWdyYWc6IGZjbnByLW9yZ2pycmE7CiAgICAgICAgICAgIG55dnRhLXZncnpmOiBwcmFncmU7CiAgICAgICAgICAgIHpuZXR2YS1vYmdnYno6IDI1Y2s7CiAgICAgICAgICAgIGNucXF2YXQtb2JnZ2J6OiAxNWNrOwogICAgICAgICAgICBvYmVxcmUtb2JnZ2J6OiAxY2sgZmJ5dnEgaW5lKC0tb2JlcXJlLXBieWJlKTsKICAgICAgICB9CiAgIAogICAgICAgIC56YnFueS1ndmd5ciB7CiAgICAgICAgICAgIHNiYWctZnZtcjogMjBjazsKICAgICAgICAgICAgc2JhZy1qcnZ0dWc6IDcwMDsKICAgICAgICAgICAgcGJ5YmU6IGluZSgtLW5wcHJhZy1jZXZ6bmVsKTsKICAgICAgICB9CiAgIAogICAgICAgIC56YnFueS1weWJmciB7CiAgICAgICAgICAgIG9ucHh0ZWJoYXE6IGFiYXI7CiAgICAgICAgICAgIG9iZXFyZTogYWJhcjsKICAgICAgICAgICAgcGJ5YmU6IGluZSgtLWdya2ctemhncnEpOwogICAgICAgICAgICBzYmFnLWZ2bXI6IDI0Y2s7CiAgICAgICAgICAgIHBoZWZiZTogY2J2YWdyZTsKICAgICAgICAgICAgY25xcXZhdDogNWNrOwogICAgICAgICAgICBvYmVxcmUtZW5xdmhmOiA0Y2s7CiAgICAgICAgICAgIGdlbmFmdmd2YmE6IG55eSAwLjNmIHJuZnI7CiAgICAgICAgfQogICAKICAgICAgICAuemJxbnktcHliZnI6dWJpcmUgewogICAgICAgICAgICBvbnB4dGViaGFxOiBpbmUoLS1vdC1ncmVndm5lbCk7CiAgICAgICAgICAgIHBieWJlOiBpbmUoLS1ncmtnLWNldnpuZWwpOwogICAgICAgIH0KICAgCiAgICAgICAgLyogPT09PT09PT09PT09PT09PT09PT0gVEVWUSBZTkxCSEdGID09PT09PT09PT09PT09PT09PT09ICovCiAgICAgICAgLnRldnEgewogICAgICAgICAgICBxdmZjeW5sOiB0ZXZxOwogICAgICAgICAgICB0bmM6IDIwY2s7CiAgICAgICAgfQogICAKICAgICAgICAudGV2cS0yIHsKICAgICAgICAgICAgdGV2cS1ncnpjeW5nci1wYnloemFmOiBlcmNybmcobmhnYi1zdmcsIHp2YXpuaygzMDBjaywgMXNlKSk7CiAgICAgICAgfQogICAKICAgICAgICAudGV2cS0zIHsKICAgICAgICAgICAgdGV2cS1ncnpjeW5nci1wYnloemFmOiBlcmNybmcobmhnYi1zdmcsIHp2YXpuaygyNTBjaywgMXNlKSk7CiAgICAgICAgfQogICAKICAgICAgICAudGV2cS00IHsKICAgICAgICAgICAgdGV2cS1ncnpjeW5nci1wYnloemFmOiBlcmNybmcobmhnYi1zdmcsIHp2YXpuaygyMDBjaywgMXNlKSk7CiAgICAgICAgfQogICAKICAgICAgICAvKiA9PT09PT09PT09PT09PT09PT09PSBGWkdDIFBFUk5HQkUgRkNSUFZTVlAgRkdMWVJGID09PT09PT09PT09PT09PT09PT09ICovCiAgICAgICAgLmZ6Z2MtcGVybmdiZS1mcnBndmJhIHsKICAgICAgICAgICAgb25weHRlYmhhcTogZXRvbigwLCAyNTUsIDEzNiwgMC4xKTsKICAgICAgICAgICAgb2JlcXJlOiAxY2sgZmJ5dnEgZXRvbigwLCAyNTUsIDEzNiwgMC4zKTsKICAgICAgICAgICAgb2JlcXJlLWVucXZoZjogMTJjazsKICAgICAgICAgICAgY25xcXZhdDogMjBjazsKICAgICAgICAgICAgem5ldHZhLW9iZ2diejogMjBjazsKICAgICAgICB9CiAgIAogICAgICAgIC5memdjLXBlcm5nYmUtZnJwZ3ZiYSAub2dhIHsKICAgICAgICAgICAgb25weHRlYmhhcTogeXZhcm5lLXRlbnF2cmFnKDQ1cXJ0LCAjMDBzczg4LCAjMDA4MHNzKTsKICAgICAgICAgICAgc2JhZy1qcnZ0dWc6IG9ieXE7CiAgICAgICAgICAgIGNucXF2YXQ6IDE1Y2sgMzBjazsKICAgICAgICAgICAgc2JhZy1mdm1yOiAxNmNrOwogICAgICAgIH0KICAgCiAgICAgICAgLmZ6Z2MtcGVybmdiZS1mcnBndmJhIC5vZ2E6dWJpcmUgewogICAgICAgICAgICBnZW5hZnNiZXo6IGdlbmFmeW5nckwoLTJjayk7CiAgICAgICAgICAgIG9iay1mdW5xYmo6IDAgNWNrIDE1Y2sgZXRvbigwLCAyNTUsIDEzNiwgMC40KTsKICAgICAgICB9CiAgIAogICAgICAgIC5memdjLXZhc2IgewogICAgICAgICAgICBzYmFnLWZ2bXI6IDEyY2s7CiAgICAgICAgICAgIHBieWJlOiBpbmUoLS1ncmtnLXpoZ3JxKTsKICAgICAgICAgICAgem5ldHZhLWdiYzogMTBjazsKICAgICAgICAgICAgZ3JrZy1ueXZ0YTogcHJhZ3JlOwogICAgICAgIH0KICAgCiAgICAgICAgLyogPT09PT09PT09PT09PT09PT09PT0gRkdOR0YgT0JLIEZHTFlSRiA9PT09PT09PT09PT09PT09PT09PSAqLwogICAgICAgIC5mZ25nZi1vYmsgewogICAgICAgICAgICBvbnB4dGViaGFxOiBpbmUoLS1vdC1ncmVndm5lbCk7CiAgICAgICAgICAgIG9iZXFyZTogMWNrIGZieXZxIGluZSgtLW9iZXFyZS1wYnliZSk7CiAgICAgICAgICAgIG9iZXFyZS1lbnF2aGY6IDEyY2s7CiAgICAgICAgICAgIGNucXF2YXQ6IDIwY2s7CiAgICAgICAgICAgIHpuZXR2YS1nYmM6IDIwY2s7CiAgICAgICAgfQogICAKICAgICAgICAuZmduZ2YtdXJucXJlIHsKICAgICAgICAgICAgcXZmY3lubDogc3lyazsKICAgICAgICAgICAgd2hmZ3ZzbC1wYmFncmFnOiBmY25wci1vcmdqcnJhOwogICAgICAgICAgICBueXZ0YS12Z3J6ZjogcHJhZ3JlOwogICAgICAgICAgICB6bmV0dmEtb2JnZ2J6OiAxNWNrOwogICAgICAgIH0KICAgCiAgICAgICAgLmZnbmdmLXRldnEgewogICAgICAgICAgICBxdmZjeW5sOiB0ZXZxOwogICAgICAgICAgICB0ZXZxLWdyemN5bmdyLXBieWh6YWY6IGVyY3JuZyhuaGdiLXN2ZywgenZhem5rKDE1MGNrLCAxc2UpKTsKICAgICAgICAgICAgdG5jOiAxNWNrOwogICAgICAgICAgICB6bmV0dmEtb2JnZ2J6OiAyMGNrOwogICAgICAgIH0KICAgCiAgICAgICAgLmZnbmctdmdyeiB7CiAgICAgICAgICAgIG9ucHh0ZWJoYXE6IGluZSgtLW90LWNldnpuZWwpOwogICAgICAgICAgICBjbnFxdmF0OiAxNWNrOwogICAgICAgICAgICBvYmVxcmUtZW5xdmhmOiA4Y2s7CiAgICAgICAgICAgIGdya2ctbnl2dGE6IHByYWdyZTsKICAgICAgICB9CiAgICAgICAgLmZnbmctYWh6b3JlIHsKICAgICAgICAgICAgc2JhZy1mdm1yOiAyNGNrOwogICAgICAgICAgICBzYmFnLWpydnR1ZzogNzAwOwogICAgICAgICAgICBwYnliZTogaW5lKC0tbnBwcmFnLWNldnpuZWwpOwogICAgICAgICAgICB6bmV0dmEtb2JnZ2J6OiA1Y2s7CiAgICAgICAgfQogICAgICAgIC5mZ25nLXlub3J5IHsKICAgICAgICAgICAgc2JhZy1mdm1yOiAxMmNrOwogICAgICAgICAgICBwYnliZTogaW5lKC0tZ3JrZy16aGdycSk7CiAgICAgICAgICAgIGdya2ctZ2VuYWZzYmV6OiBoY2NyZXBuZnI7CiAgICAgICAgfQogICAgICAgIC8qID09PT09PT09PT09PT09PT09PT09IFlCTlFWQVQgRkdMWVJGID09PT09PT09PT09PT09PT09PT09ICovCiAgICAgICAgLnlibnF2YXQgewogICAgICAgICAgICBxdmZjeW5sOiB2YXl2YXItb3licHg7CiAgICAgICAgICAgIGp2cWd1OiAyMGNrOwogICAgICAgICAgICB1cnZ0dWc6IDIwY2s7CiAgICAgICAgICAgIG9iZXFyZTogMmNrIGZieXZxIGluZSgtLWdya2ctemhncnEpOwogICAgICAgICAgICBvYmVxcmUtZW5xdmhmOiA1MCU7CiAgICAgICAgICAgIG9iZXFyZS1nYmMtcGJ5YmU6IGluZSgtLW5wcHJhZy1jZXZ6bmVsKTsKICAgICAgICAgICAgbmF2em5ndmJhOiBmY3ZhIDFmIHJuZnItdmEtYmhnIHZhc3ZhdmdyOwogICAgICAgIH0KICAgICAgICBAeHJsc2VuenJmIGZjdmEgewogICAgICAgICAgICBnYiB7IGdlbmFmc2JlejogZWJnbmdyKDM2MHFydCk7IH0KICAgICAgICB9CiAgICAgICAgLnlibnF2YXQtYmlyZXlubCB7CiAgICAgICAgICAgIGNiZnZndmJhOiBzdmtycTsKICAgICAgICAgICAgZ2JjOiAwOwogICAgICAgICAgICB5cnNnOiAwOwogICAgICAgICAgICBqdnFndTogMTAwJTsKICAgICAgICAgICAgdXJ2dHVnOiAxMDAlOwogICAgICAgICAgICBvbnB4dGViaGFxOiBldG9uKDAsIDAsIDAsIDAuNyk7CiAgICAgICAgICAgIHF2ZmN5bmw6IHN5cms7CiAgICAgICAgICAgIG55dnRhLXZncnpmOiBwcmFncmU7CiAgICAgICAgICAgIHdoZmd2c2wtcGJhZ3JhZzogcHJhZ3JlOwogICAgICAgICAgICBtLXZhcXJrOiA5OTk5OwogICAgICAgIH0KICAgICAgICAueWJucXZhdC1wYmFncmFnIHsKICAgICAgICAgICAgb25weHRlYmhhcTogaW5lKC0tb3QtZnJwYmFxbmVsKTsKICAgICAgICAgICAgY25xcXZhdDogMzBjazsKICAgICAgICAgICAgb2JlcXJlLWVucXZoZjogMTJjazsKICAgICAgICAgICAgZ3JrZy1ueXZ0YTogcHJhZ3JlOwogICAgICAgICAgICBvYmVxcmU6IDFjayBmYnl2cSBpbmUoLS1vYmVxcmUtcGJ5YmUpOwogICAgICAgIH0KICAgICAgICAueWJucXZhdC1mY3ZhYXJlIHsKICAgICAgICAgICAganZxZ3U6IDQwY2s7CiAgICAgICAgICAgIHVydnR1ZzogNDBjazsKICAgICAgICAgICAgb2JlcXJlOiA0Y2sgZmJ5dnEgaW5lKC0tb3QtZ3JlZ3ZuZWwpOwogICAgICAgICAgICBvYmVxcmUtZ2JjOiA0Y2sgZmJ5dnEgaW5lKC0tbnBwcmFnLWNldnpuZWwpOwogICAgICAgICAgICBvYmVxcmUtZW5xdmhmOiA1MCU7CiAgICAgICAgICAgIG5hdnpuZ3ZiYTogZmN2YSAxZiB5dmFybmUgdmFzdmF2Z3I7CiAgICAgICAgICAgIHpuZXR2YTogMCBuaGdiIDIwY2s7CiAgICAgICAgfQogICAgICAgIC8qID09PT09PT09PT09PT09PT09PT09IFNCQkdSRSBGR0xZUkYgPT09PT09PT09PT09PT09PT09PT0gKi8KICAgICAgICAuc2JiZ3JlIHsKICAgICAgICAgICAgb25weHRlYmhhcTogaW5lKC0tb3QtZnJwYmFxbmVsKTsKICAgICAgICAgICAgb2JlcXJlOiAxY2sgZmJ5dnEgaW5lKC0tb2JlcXJlLXBieWJlKTsKICAgICAgICAgICAgb2JlcXJlLWVucXZoZjogMTZjazsKICAgICAgICAgICAgY25xcXZhdDogMjVjazsKICAgICAgICAgICAgem5ldHZhLWdiYzogMzBjazsKICAgICAgICAgICAgZ3JrZy1ueXZ0YTogcHJhZ3JlOwogICAgICAgICAgICBvYmstZnVucWJqOiBpbmUoLS1mdW5xYmotZnJwYmFxbmVsKTsKICAgICAgICB9CiAgICAgICAgLnNiYmdyZS15dmF4ZiB7CiAgICAgICAgICAgIHF2ZmN5bmw6IHN5cms7CiAgICAgICAgICAgIHdoZmd2c2wtcGJhZ3JhZzogcHJhZ3JlOwogICAgICAgICAgICB0bmM6IDMwY2s7CiAgICAgICAgICAgIHpuZXR2YS1vYmdnYno6IDIwY2s7CiAgICAgICAgICAgIHN5cmstamVuYzogamVuYzsKICAgICAgICB9CiAgICAgICAgLnNiYmdyZS15dmF4IHsKICAgICAgICAgICAgcGJ5YmU6IGluZSgtLW5wcHJhZy1jZXZ6bmVsKTsKICAgICAgICAgICAgZ3JrZy1xcnBiZW5ndmJhOiBhYmFyOwogICAgICAgICAgICBzYmFnLWpydnR1ZzogNjAwOwogICAgICAgICAgICBzYmFnLWZ2bXI6IDE0Y2s7CiAgICAgICAgICAgIHF2ZmN5bmw6IHN5cms7CiAgICAgICAgICAgIG55dnRhLXZncnpmOiBwcmFncmU7CiAgICAgICAgICAgIHRuYzogOGNrOwogICAgICAgICAgICBjbnFxdmF0OiA4Y2sgMTZjazsKICAgICAgICAgICAgb2JlcXJlLWVucXZoZjogOGNrOwogICAgICAgICAgICBvYmVxcmU6IDFjayBmYnl2cSBpbmUoLS1vYmVxcmUtcGJ5YmUpOwogICAgICAgICAgICBnZW5hZnZndmJhOiBueXkgMC4zZiBybmZyOwogICAgICAgIH0KICAgICAgICAuc2JiZ3JlLXl2YXg6dWJpcmUgewogICAgICAgICAgICBvbnB4dGViaGFxOiBpbmUoLS1vdC1ncmVndm5lbCk7CiAgICAgICAgICAgIG9iZXFyZS1wYnliZTogaW5lKC0tbnBwcmFnLWNldnpuZWwpOwogICAgICAgICAgICBncmtnLXFycGJlbmd2YmE6IGFiYXI7CiAgICAgICAgfQogICAgICAgIC5zYmJncmUtZ3JrZyB7CiAgICAgICAgICAgIHNiYWctZnZtcjogMTJjazsKICAgICAgICAgICAgcGJ5YmU6IGluZSgtLWdya2ctemhncnEpOwogICAgICAgICAgICB5dmFyLXVydnR1ZzogMS41OwogICAgICAgIH0KICAgICAgICAvKiA9PT09PT09PT09PT09PT09PT09PSBBQkdWU1ZQTkdWQkEgRkdMWVJGID09PT09PT09PT09PT09PT09PT09ICovCiAgICAgICAgLmFiZ3ZzdnBuZ3ZiYSB7CiAgICAgICAgICAgIGNiZnZndmJhOiBzdmtycTsKICAgICAgICAgICAgZ2JjOiAyMGNrOwogICAgICAgICAgICBldnR1ZzogMjBjazsKICAgICAgICAgICAgb25weHRlYmhhcTogaW5lKC0tb3QtZnJwYmFxbmVsKTsKICAgICAgICAgICAgb2JlcXJlOiAxY2sgZmJ5dnEgaW5lKC0tb2JlcXJlLXBieWJlKTsKICAgICAgICAgICAgb2JlcXJlLWVucXZoZjogMTJjazsKICAgICAgICAgICAgY25xcXZhdDogMjBjazsKICAgICAgICAgICAgem5rLWp2cWd1OiA0MDBjazsKICAgICAgICAgICAgb2JrLWZ1bnFiajogaW5lKC0tZnVucWJqLWZycGJhcW5lbCk7CiAgICAgICAgICAgIG0tdmFxcms6IDEwMDE7CiAgICAgICAgICAgIGdlbmFmc2JlejogZ2VuYWZ5bmdySygxMDAlKTsKICAgICAgICAgICAgZ2VuYWZ2Z3ZiYTogZ2VuYWZzYmV6IDAuM2Ygcm5mcjsKICAgICAgICB9CiAgICAgICAgLmFiZ3ZzdnBuZ3ZiYS5mdWJqIHsKICAgICAgICAgICAgZ2VuYWZzYmV6OiBnZW5hZnluZ3JLKDApOwogICAgICAgIH0KICAgICAgICAuYWJndnN2cG5ndmJhLmZocHByZmYgewogICAgICAgICAgICBvYmVxcmUteXJzZzogNGNrIGZieXZxIGluZSgtLW5wcHJhZy1maHBwcmZmKTsKICAgICAgICB9CiAgICAgICAgLmFiZ3ZzdnBuZ3ZiYS5yZWViZSB7CiAgICAgICAgICAgIG9iZXFyZS15cnNnOiA0Y2sgZmJ5dnEgaW5lKC0tbnBwcmFnLXFuYXRyZSk7CiAgICAgICAgfQogICAgICAgIC5hYmd2c3Zwbmd2YmEuam5lYXZhdCB7CiAgICAgICAgICAgIG9iZXFyZS15cnNnOiA0Y2sgZmJ5dnEgaW5lKC0tbnBwcmFnLWpuZWF2YXQpOwogICAgICAgIH0KICAgICAgICAuYWJndnN2cG5ndmJhLnZhc2IgewogICAgICAgICAgICBvYmVxcmUteXJzZzogNGNrIGZieXZxIGluZSgtLW5wcHJhZy1jZXZ6bmVsKTsKICAgICAgICB9CiAgICAgICAgLyogPT09PT09PT09PT09PT09PT09PT0gRVJGQ0JBRlZJUiBRUkZWVEEgPT09PT09PT09PT09PT09PT09PT0gKi8KICAgICAgICBAenJxdm4gKHpuay1qdnFndTogNzY4Y2spIHsKICAgICAgICAgICAgLnBiYWdudmFyZSB7CiAgICAgICAgICAgICAgICBjbnFxdmF0OiAxNWNrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC51cm5xcmUgewogICAgICAgICAgICAgICAgY25xcXZhdDogMjBjazsKICAgICAgICAgICAgfQogICAgICAgICAgICAudXJucXJlIHUxIHsKICAgICAgICAgICAgICAgIHNiYWctZnZtcjogMjRjazsKICAgICAgICAgICAgfQogICAgICAgICAgICAucG5lcSB7CiAgICAgICAgICAgICAgICBjbnFxdmF0OiAyMGNrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC5nbm9mIHsKICAgICAgICAgICAgICAgIHN5cmstcXZlcnBndmJhOiBwYnloemE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLmdubyB7CiAgICAgICAgICAgICAgICB6dmEtanZxZ3U6IG5oZ2I7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLmZsZmdyei12YXNiIHsKICAgICAgICAgICAgICAgIHRldnEtZ3J6Y3luZ3ItcGJ5aHphZjogZXJjcm5nKG5oZ2Itc3ZnLCB6dmF6bmsoMTUwY2ssIDFzZSkpOwogICAgICAgICAgICAgICAgdG5jOiAxNWNrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC5vZWJqZnJlLWd2Z3lyIHsKICAgICAgICAgICAgICAgIHN5cmstcXZlcnBndmJhOiBwYnloemE7CiAgICAgICAgICAgICAgICBueXZ0YS12Z3J6Zjogc3lyay1mZ25lZzsKICAgICAgICAgICAgfQogICAgICAgICAgICAub2ViamZyZS1ucGd2YmFmIHsKICAgICAgICAgICAgICAgIGp2cWd1OiAxMDAlOwogICAgICAgICAgICAgICAgd2hmZ3ZzbC1wYmFncmFnOiBzeXJrLWZnbmVnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC5zdnlyLWdub3lyIGd1LAogICAgICAgICAgICAuc3Z5ci1nbm95ciBncSB7CiAgICAgICAgICAgICAgICBjbnFxdmF0OiAxMGNrIDE1Y2s7CiAgICAgICAgICAgICAgICBzYmFnLWZ2bXI6IDEyY2s7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLnN2eXItbnBndmJhZiB7CiAgICAgICAgICAgICAgICBzeXJrLXF2ZXJwZ3ZiYTogcGJ5aHphOwogICAgICAgICAgICAgICAgdG5jOiA0Y2s7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLnNiYmdyZS15dmF4ZiB7CiAgICAgICAgICAgICAgICBzeXJrLXF2ZXJwZ3ZiYTogcGJ5aHphOwogICAgICAgICAgICAgICAgdG5jOiAxNWNrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC56YnFueS1wYmFncmFnIHsKICAgICAgICAgICAgICAgIGNucXF2YXQ6IDIwY2s7CiAgICAgICAgICAgICAgICB6bmV0dmE6IDEwY2s7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLmZnbmdmLXRldnEgewogICAgICAgICAgICAgICAgdGV2cS1ncnpjeW5nci1wYnloemFmOiBlcmNybmcoMiwgMXNlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvKiA9PT09PT09PT09PT09PT09PT09PSBGUEVCWVlPTkUgRkdMWVJGID09PT09PT09PT09PT09PT09PT09ICovCiAgICAgICAgOjotanJveHZnLWZwZWJ5eW9uZSB7CiAgICAgICAgICAgIGp2cWd1OiA4Y2s7CiAgICAgICAgICAgIHVydnR1ZzogOGNrOwogICAgICAgIH0KICAgICAgICA6Oi1qcm94dmctZnBlYnl5b25lLWdlbnB4IHsKICAgICAgICAgICAgb25weHRlYmhhcTogaW5lKC0tb3QtZ3JlZ3ZuZWwpOwogICAgICAgICAgICBvYmVxcmUtZW5xdmhmOiA0Y2s7CiAgICAgICAgfQogICAgICAgIDo6LWpyb3h2Zy1mcGVieXlvbmUtZ3Voem8gewogICAgICAgICAgICBvbnB4dGViaGFxOiBpbmUoLS1ucHByYWctY2V2em5lbCk7CiAgICAgICAgICAgIG9iZXFyZS1lbnF2aGY6IDRjazsKICAgICAgICB9CiAgICAgICAgOjotanJveHZnLWZwZWJ5eW9uZS1ndWh6bzp1YmlyZSB7CiAgICAgICAgICAgIG9ucHh0ZWJoYXE6IGluZSgtLW5wcHJhZy1mcnBiYXFuZWwpOwogICAgICAgIH0KICAgICAgICAvKiA9PT09PT09PT09PT09PT09PT09PSBIR1ZZVkdMIFBZTkZGUkYgPT09PT09PT09PT09PT09PT09PT0gKi8KICAgICAgICAuZ3JrZy1wcmFncmUgeyBncmtnLW55dnRhOiBwcmFncmU7IH0KICAgICAgICAuZ3JrZy15cnNnIHsgZ3JrZy1ueXZ0YTogeXJzZzsgfQogICAgICAgIC5ncmtnLWV2dHVnIHsgZ3JrZy1ueXZ0YTogZXZ0dWc7IH0KICAgICAgICAuem8tMCB7IHpuZXR2YS1vYmdnYno6IDA7IH0KICAgICAgICAuem8tMTAgeyB6bmV0dmEtb2JnZ2J6OiAxMGNrOyB9CiAgICAgICAgLnpvLTIwIHsgem5ldHZhLW9iZ2diejogMjBjazsgfQogICAgICAgIC56Zy0yMCB7IHpuZXR2YS1nYmM6IDIwY2s7IH0KICAgICAgICAuYy0wIHsgY25xcXZhdDogMDsgfQogICAgICAgIC51dnFxcmEgeyBxdmZjeW5sOiBhYmFyOyB9CiAgICAgICAgLnN5cmsgeyBxdmZjeW5sOiBzeXJrOyB9CiAgICAgICAgLnN5cmstcHJhZ3JlIHsgcXZmY3lubDogc3lyazsgbnl2dGEtdmdyemY6IHByYWdyZTsgd2hmZ3ZzbC1wYmFncmFnOiBwcmFncmU7IH0KICAgICAgICAudG5jLTEwIHsgdG5jOiAxMGNrOyB9CiAgICAgICAgLmotc2h5eSB7IGp2cWd1OiAxMDAlOyB9CiAgICAgICAgLyogPT09PT09PT09PT09PT09PT09PT0gRkdOR0hGIEZHTFlSRiA9PT09PT09PT09PT09PT09PT09PSAqLwogICAgICAgIC5mZ25naGYtZmhwcHJmZiB7IHBieWJlOiBpbmUoLS1ucHByYWctZmhwcHJmZik7IH0KICAgICAgICAuZmduZ2hmLWpuZWF2YXQgeyBwYnliZTogaW5lKC0tbnBwcmFnLWpuZWF2YXQpOyB9CiAgICAgICAgLmZnbmdoZi1xbmF0cmUgeyBwYnliZTogaW5lKC0tbnBwcmFnLXFuYXRyZSk7IH0KICAgICAgICAuZmduZ2hmLXZhc2IgeyBwYnliZTogaW5lKC0tbnBwcmFnLWNldnpuZWwpOyB9CiAgICAgICAgLyogPT09PT09PT09PT09PT09PT09PT0gQ0VCVEVSRkYgT05FIEZHTFlSRiA9PT09PT09PT09PT09PT09PT09PSAqLwogICAgICAgIC5jZWJ0ZXJmZi1vbmUgewogICAgICAgICAgICBqdnFndTogMTAwJTsKICAgICAgICAgICAgdXJ2dHVnOiA4Y2s7CiAgICAgICAgICAgIG9ucHh0ZWJoYXE6IGluZSgtLW90LWdyZWd2bmVsKTsKICAgICAgICAgICAgb2JlcXJlLWVucXZoZjogNGNrOwogICAgICAgICAgICBiaXJlc3liajogdXZxcXJhOwogICAgICAgICAgICB6bmV0dmE6IDEwY2sgMDsKICAgICAgICB9CiAgICAgICAgLmNlYnRlcmZmLXN2eXkgewogICAgICAgICAgICB1cnZ0dWc6IDEwMCU7CiAgICAgICAgICAgIG9ucHh0ZWJoYXE6IGluZSgtLW5wcHJhZy1jZXZ6bmVsKTsKICAgICAgICAgICAgb2JlcXJlLWVucXZoZjogNGNrOwogICAgICAgICAgICBnZW5hZnZndmJhOiBqdnFndSAwLjNmIHJuZnI7CiAgICAgICAgfQogICAgICAgIC5jZWJ0ZXJmZi1ncmtnIHsKICAgICAgICAgICAgc2JhZy1mdm1yOiAxMmNrOwogICAgICAgICAgICBwYnliZTogaW5lKC0tZ3JrZy16aGdycSk7CiAgICAgICAgICAgIGdya2ctbnl2dGE6IHByYWdyZTsKICAgICAgICAgICAgem5ldHZhLWdiYzogNWNrOwogICAgICAgIH0KICAgICAgICAvKiA9PT09PT09PT09PT09PT09PT09PSBOQVZaTkdWQkEgWFJMU0VOWlJGID09PT09PT09PT09PT09PT09PT09ICovCiAgICAgICAgQHhybHNlbnpyZiBzbnFyVmEgewogICAgICAgICAgICBzZWJ6IHsgYmNucHZnbDogMDsgZ2VuYWZzYmV6OiBnZW5hZnluZ3JMKC0xMGNrKTsgfQogICAgICAgICAgICBnYiB7IGJjbnB2Z2w6IDE7IGdlbmFmc2JlejogZ2VuYWZ5bmdyTCgwKTsgfQogICAgICAgIH0KICAgICAgICBAeHJsc2VuenJmIGZ5dnFyVmEgewogICAgICAgICAgICBzZWJ6IHsgZ2VuYWZzYmV6OiBnZW5hZnluZ3JLKC0xMDAlKTsgfQogICAgICAgICAgICBnYiB7IGdlbmFmc2JlejogZ2VuYWZ5bmdySygwKTsgfQogICAgICAgIH0KICAgICAgICBAeHJsc2VuenJmIG9iaGFwciB7CiAgICAgICAgICAgIDAlLCAyMCUsIDUzJSwgODAlLCAxMDAlIHsgZ2VuYWZzYmV6OiBnZW5hZnluZ3IzcSgwLDAsMCk7IH0KICAgICAgICAgICAgNDAlLCA0MyUgeyBnZW5hZnNiZXo6IGdlbmFmeW5ncjNxKDAsIC0zMGNrLCAwKTsgfQogICAgICAgICAgICA3MCUgeyBnZW5hZnNiZXo6IGdlbmFmeW5ncjNxKDAsIC0xNWNrLCAwKTsgfQogICAgICAgICAgICA5MCUgeyBnZW5hZnNiZXo6IGdlbmFmeW5ncjNxKDAsIC00Y2ssIDApOyB9CiAgICAgICAgfQogICAgICAgIC5uYXZ6bmdyLXNucXJWYSB7IG5hdnpuZ3ZiYTogc25xclZhIDAuNWYgcm5mcjsgfQogICAgICAgIC5uYXZ6bmdyLWZ5dnFyVmEgeyBuYXZ6bmd2YmE6IGZ5dnFyVmEgMC4zZiBybmZyOyB9CiAgICAgICAgLm5hdnpuZ3Itb2JoYXByIHsgbmF2em5ndmJhOiBvYmhhcHIgMmYgdmFzdmF2Z3I7IH0KICAgIDwvZmdseXI+CjwvdXJucT4KPG9icWw+CiAgICA8cXZpIHB5bmZmPSJwYmFnbnZhcmUiPgogICAgICAgIDwhLS0gVXJucXJlIEZycGd2YmEgLS0+CiAgICAgICAgPHF2aSBweW5mZj0idXJucXJlIG5hdnpuZ3Itc25xclZhIj4KICAgICAgICAgICAgPHF2aSBweW5mZj0idXJucXJlLXBiYWdyYWciPgogICAgICAgICAgICAgICAgPHUxPuKalO+4jyA8Pz0gRlVSWVlfQU5aUiA/PiBpPD89IEZVUllZX0lSRUZWQkEgPz48L3UxPgogICAgICAgICAgICAgICAgPHF2aSBweW5mZj0iZmhvZ3ZneXIiPkNlYnNyZmZ2YmFueSBQbG9yZSBGcnBoZXZnbCBabmFudHJ6cmFnIEZsZmdyeiB8IEZuemhlbnYgV25jbmFyZnIgR3JwdWFieWJ0bCBScXZndmJhPC9xdmk+CiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPHF2aSBweW5mZj0iZmxmZ3J6LXZhc2IiPgogICAgICAgICAgICAgICAgICAgIDxxdmkgcHluZmY9InZhc2ItdmdyeiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxxdmkgcHluZmY9Inlub3J5Ij5GcmVpcmUgVkM8L3F2aT4KICAgICAgICAgICAgICAgICAgICAgICAgPHF2aSBweW5mZj0iaW55aHIiPjw/PSAkZmxmZ3J6X3Zhc2JbJ2ZyZWlyZV92YyddID8+PC9xdmk+CiAgICAgICAgICAgICAgICAgICAgPC9xdmk+CiAgICAgICAgICAgICAgICAgICAgPHF2aSBweW5mZj0idmFzYi12Z3J6Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHF2aSBweW5mZj0ieW5vcnkiPlB5dnJhZyBWQzwvcXZpPgogICAgICAgICAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJpbnlociI+PD89ICRmbGZncnpfdmFzYlsncHl2cmFnX3ZjJ10gPz48L3F2aT4KICAgICAgICAgICAgICAgICAgICA8L3F2aT4KICAgICAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJ2YXNiLXZncnoiPgogICAgICAgICAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJ5bm9yeSI+Q1VDIElyZWZ2YmE8L3F2aT4KICAgICAgICAgICAgICAgICAgICAgICAgPHF2aSBweW5mZj0iaW55aHIiPjw/PSAkZmxmZ3J6X3Zhc2JbJ2N1Y19pcmVmdmJhJ10gPz48L3F2aT4KICAgICAgICAgICAgICAgICAgICA8L3F2aT4KICAgICAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJ2YXNiLXZncnoiPgogICAgICAgICAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJ5bm9yeSI+QmNyZW5ndmF0IEZsZmdyejwvcXZpPgogICAgICAgICAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJpbnlociI+PD89ICRmbGZncnpfdmFzYlsnYmNyZW5ndmF0X2ZsZmdyeiddID8+PC9xdmk+CiAgICAgICAgICAgICAgICAgICAgPC9xdmk+CiAgICAgICAgICAgICAgICAgICAgPHF2aSBweW5mZj0idmFzYi12Z3J6Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHF2aSBweW5mZj0ieW5vcnkiPlBoZWVyYWcgSGZyZTwvcXZpPgogICAgICAgICAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJpbnlociI+PD89ICRmbGZncnpfdmFzYlsncGhlZXJhZ19oZnJlJ10gPz48L3F2aT4KICAgICAgICAgICAgICAgICAgICA8L3F2aT4KICAgICAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJ2YXNiLXZncnoiPgogICAgICAgICAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJ5bm9yeSI+RnJlaXJlIEd2enI8L3F2aT4KICAgICAgICAgICAgICAgICAgICAgICAgPHF2aSBweW5mZj0iaW55aHIiPjw/PSAkZmxmZ3J6X3Zhc2JbJ2ZyZWlyZV9ndnpyJ10gPz48L3F2aT4KICAgICAgICAgICAgICAgICAgICA8L3F2aT4KICAgICAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJ2YXNiLXZncnoiPgogICAgICAgICAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJ5bm9yeSI+UXZmeCBTZXJyIEZjbnByPC9xdmk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxxdmkgcHluZmY9ImlueWhyIj48Pz0gJGZsZmdyel92YXNiWydxdmZ4X3NlcnJfZmNucHInXSA/PjwvcXZpPgogICAgICAgICAgICAgICAgICAgIDwvcXZpPgogICAgICAgICAgICAgICAgICAgIDxxdmkgcHluZmY9InZhc2ItdmdyeiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxxdmkgcHluZmY9Inlub3J5Ij5acnpiZWwgWXZ6dmc8L3F2aT4KICAgICAgICAgICAgICAgICAgICAgICAgPHF2aSBweW5mZj0iaW55aHIiPjw/PSAkZmxmZ3J6X3Zhc2JbJ3pyemJlbF95dnp2ZyddID8+PC9xdmk+CiAgICAgICAgICAgICAgICAgICAgPC9xdmk+CiAgICAgICAgICAgICAgICA8L3F2aT4KICAgICAgICAgICAgPC9xdmk+CiAgICAgICAgPC9xdmk+CiAgICAgICAgPCEtLSBabnZhIFBiYWdyYWcgLS0+CiAgICAgICAgPHF2aSBweW5mZj0icG5lcSBuYXZ6bmdyLXNucXJWYSI+CiAgICAgICAgICAgIDwhLS0gR25vZiBBbml2dG5ndmJhIC0tPgogICAgICAgICAgICA8cXZpIHB5bmZmPSJnbm9mIj4KICAgICAgICAgICAgICAgIDxxdmkgcHluZmY9ImdubyBucGd2aXIiIGJhcHl2cHg9ImZqdmdwdUdubygnc3Z5ci16bmFudHJlJykiPvCfk4EgU3Z5ciBabmFudHJlPC9xdmk+CiAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJnbm8iIGJhcHl2cHg9ImZqdmdwdUdubygnZnpnYy1wZXJuZ2JlJykiPvCfk6cgRlpHQyBQZXJuZ2JlPC9xdmk+CiAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJnbm8iIGJhcHl2cHg9ImZqdmdwdUdubygnZXJxdmVycGctcGVybmdiZScpIj7wn5SXIEVycXZlcnBnIFBlcm5nYmU8L3F2aT4KICAgICAgICAgICAgICAgIDxxdmkgcHluZmY9ImdubyIgYmFweXZweD0iZmp2Z3B1R25vKCdwYmFnbnBnLXJrZ2VucGdiZScpIj7wn5OHIFBiYWducGcgUmtnZW5wZ2JlPC9xdmk+CiAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJnbm8iIGJhcHl2cHg9ImZqdmdwdUdubygncnpudnktem5leHJndmF0JykiPuKcie+4jyBSem52eSBabmV4cmd2YXQ8L3F2aT4KICAgICAgICAgICAgICAgIDxxdmkgcHluZmY9ImdubyIgYmFweXZweD0iZmp2Z3B1R25vKCdmdXJ5eS1pbnl2cW5ndmJhJykiPvCfm6HvuI8gRnVyeXkgSW55dnFuZ3ZiYTwvcXZpPgogICAgICAgICAgICA8L3F2aT4KICAgICAgICAgICAgPCEtLSBTdnlyIFpuYW50cmUgR25vIC0tPgogICAgICAgICAgICA8cXZpIHZxPSJzdnlyLXpuYW50cmUiIHB5bmZmPSJnbm8tcGJhZ3JhZyBucGd2aXIiPgogICAgICAgICAgICAgICAgPHF2aSBweW5mZj0icG5lcS1ndmd5ciI+8J+TgSBTdnlyIFpuYW50cmU8L3F2aT4KICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJzdnlyLW9lYmpmcmUiPgogICAgICAgICAgICAgICAgICAgIDxxdmkgcHluZmY9Im9lYmpmcmUtdXJucXJlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHF2aSBweW5mZj0ib2ViamZyZS1ndmd5ciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dTM+UXZlcnBnYmVsIE9lYmpmcmU8L3UzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHF2aSBweW5mZj0ib2ViamZyZS1ucGd2YmFmIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b2hnZ2JhIHB5bmZmPSJvZ2Egb2dhLWZ6IiBiYXB5dnB4PSJmdWJqWmJxbnkoJ3Blcm5nci1zdnlyLXpicW55JykiPvCfk4QgQXJqIFN2eXI8L29oZ2diYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b2hnZ2JhIHB5bmZmPSJvZ2Egb2dhLWZ6IiBiYXB5dnB4PSJmdWJqWmJxbnkoJ3Blcm5nci1zYnlxcmUtemJxbnknKSI+8J+TgSBBcmogU2J5cXJlPC9vaGdnYmE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9oZ2diYSBweW5mZj0ib2dhIG9nYS1meiIgYmFweXZweD0iZnVialpicW55KCdoY3libnEtemJxbnknKSI+4qyG77iPIEhjeWJucTwvb2hnZ2JhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xdmk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvcXZpPgogICAgICAgICAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJvZXJucXBlaHpvIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIPCfk40gUGhlZXJhZyBRdmVycGdiZWw6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8biB1ZXJzPSI/cXZlPTw/PSBoZXlyYXBicXIocXZlYW56cigkcGhlZXJhZ19xdmUpKSA/PiI+PD89IHVnenlmY3Jwdm55cHVuZWYoJHBoZWVyYWdfcXZlKSA/Pjwvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9xdmk+CiAgICAgICAgICAgICAgICAgICAgPC9xdmk+CiAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJzdnlyLWdub3lyLXBiYWdudmFyZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxnbm95ciBweW5mZj0ic3Z5ci1nbm95ciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z3VybnE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z3U+QW56cjwvZ3U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxndT5Gdm1yPC9ndT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGd1PkNyZXp2ZmZ2YmFmPC9ndT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGd1PlpicXZzdnJxPC9ndT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGd1Pk5wZ3ZiYWY8L2d1PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZ2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2d1cm5xPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYnFsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/Y3VjIHZzICgkcGhlZXJhZ19xdmUgIT09ICcvJyAmJiBxdmVhbnpyKCRwaGVlcmFnX3F2ZSkgIT09ICRwaGVlcmFnX3F2ZSk6ID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z3E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8biB1ZXJzPSI/cXZlPTw/PSBoZXlyYXBicXIocXZlYW56cigkcGhlZXJhZ19xdmUpKSA/PiIgcHluZmY9InN2eXItYW56ciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZjbmEgcHluZmY9InN2eXItdnBiYSI+8J+TgTwvZmNuYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmNuYT4uLiAoQ25lcmFnIFF2ZXJwZ2JlbCk8L2ZjbmE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZ3E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxncT4tPC9ncT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdxPi08L2dxPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z3E+LTwvZ3E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxncT4tPC9ncT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2dlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/Y3VjIHJhcXZzOyA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9jdWMgc2Jlcm5wdSAoJHN2eXJmIG5mICRzdnlyKTogPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxncT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/Y3VjIHZzICgkc3Z5clsndmZfcXZlJ10pOiA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuIHVlcnM9Ij9xdmU9PD89IGhleXJhcGJxcigkc3Z5clsnY25ndSddKSA/PiIgcHluZmY9InN2eXItYW56ciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmY25hIHB5bmZmPSJzdnlyLXZwYmEiPjw/PSAkc3Z5clsndnBiYSddID8+PC9mY25hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmNuYT48Pz0gdWd6eWZjcnB2bnlwdW5lZigkc3Z5clsnYW56ciddKSA/PjwvZmNuYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P2N1YyByeWZyOiA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxxdmkgcHluZmY9InN2eXItYW56ciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmY25hIHB5bmZmPSJzdnlyLXZwYmEiPjw/PSAkc3Z5clsndnBiYSddID8+PC9mY25hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmNuYT48Pz0gdWd6eWZjcnB2bnlwdW5lZigkc3Z5clsnYW56ciddKSA/PjwvZmNuYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3F2aT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/Y3VjIHJhcXZzOyA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2dxPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z3E+PD89ICRzdnlyWydzYmV6bmdncnFfZnZtciddID8+PC9ncT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdxPjw/PSAkc3Z5clsnY3JlenZmZnZiYWYnXSA/PjwvZ3E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxncT48Pz0gJHN2eXJbJ3picXZzdnJxJ10gPz48L2dxPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z3E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJzdnlyLW5wZ3ZiYWYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/Y3VjIHZzICghJHN2eXJbJ3ZmX3F2ZSddKTogPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9oZ2diYSBweW5mZj0ib2dhIG9nYS1meiBvZ2EtZnJwYmFxbmVsIiBiYXB5dnB4PSJycXZnU3Z5cignPD89IHVnenlmY3Jwdm55cHVuZWYobnFxZnluZnVyZigkc3Z5clsnY25ndSddKSkgPz4nKSI+4pyP77iPIFJxdmc8L29oZ2diYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9oZ2diYSBweW5mZj0ib2dhIG9nYS1meiBvZ2EtZnJwYmFxbmVsIiBiYXB5dnB4PSJxYmpheWJucVN2eXIoJzw/PSB1Z3p5ZmNycHZueXB1bmVmKG5xcWZ5bmZ1cmYoJHN2eXJbJ2NuZ3UnXSkpID8+JykiPuKsh++4jyBRYmpheWJucTwvb2hnZ2JhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/Y3VjIHJhcXZzOyA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvaGdnYmEgcHluZmY9Im9nYSBvZ2EtZnogb2dhLWpuZWF2YXQiIGJhcHl2cHg9Im12Y1ZncnooJzw/PSB1Z3p5ZmNycHZueXB1bmVmKG5xcWZ5bmZ1cmYoJHN2eXJbJ2NuZ3UnXSkpID8+JykiPvCfk6YgTXZjPC9vaGdnYmE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9jdWMgdnMgKGZnZWdieWJqcmUoY25ndXZhc2IoJHN2eXJbJ2FuenInXSwgQ05HVVZBU0JfUktHUkFGVkJBKSkgPT09ICdtdmMnKTogPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9oZ2diYSBweW5mZj0ib2dhIG9nYS1meiBvZ2EtZmhwcHJmZiIgYmFweXZweD0iaGFtdmNTdnlyKCc8Pz0gdWd6eWZjcnB2bnlwdW5lZihucXFmeW5mdXJmKCRzdnlyWydjbmd1J10pKSA/PicpIj7wn5OCIEhhbXZjPC9vaGdnYmE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9jdWMgcmFxdnM7ID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9oZ2diYSBweW5mZj0ib2dhIG9nYS1meiBvZ2EtcW5hdHJlIiBiYXB5dnB4PSJxcnlyZ3JWZ3J6KCc8Pz0gdWd6eWZjcnB2bnlwdW5lZihucXFmeW5mdXJmKCRzdnlyWydjbmd1J10pKSA/PicsICc8Pz0gdWd6eWZjcnB2bnlwdW5lZihucXFmeW5mdXJmKCRzdnlyWydhbnpyJ10pKSA/PicpIj7wn5eR77iPIFFyeXJncjwvb2hnZ2JhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xdmk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZ3E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P2N1YyByYXFzYmVybnB1OyA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2JxbD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9nbm95cj4KICAgICAgICAgICAgICAgICAgICA8L3F2aT4KICAgICAgICAgICAgICAgIDwvcXZpPgogICAgICAgICAgICA8L3F2aT4KICAgICAgICAgICAgPCEtLSBGWkdDIFBlcm5nYmUgR25vIC0tPgogICAgICAgICAgICA8cXZpIHZxPSJmemdjLXBlcm5nYmUiIHB5bmZmPSJnbm8tcGJhZ3JhZyI+CiAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJwbmVxLWd2Z3lyIj7wn5OnIEZaR0MgUGVybmdiZSAtIDEwMCUgRXJzcmVyYXByIFpyZ3VicTwvcXZpPgogICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDwhLS0gRnZhdHlyIEZaR0MgUGVybmdiZSBGcnBndmJhIC0tPgogICAgICAgICAgICAgICAgPHF2aSBweW5mZj0iZnpnYy1wZXJuZ2JlLWZycGd2YmEiPgogICAgICAgICAgICAgICAgICAgIDx1ND7imqEgRnZhdHlyIEZaR0MgUGVybmdiZSAoUmtucGcgRXJzcmVyYXByIFpyZ3VicSk8L3U0PgogICAgICAgICAgICAgICAgICAgIDxjIGZnbHlyPSJ6bmV0dmE6IDEwY2sgMDsgcGJ5YmU6IGluZSgtLWdya2ctZnJwYmFxbmVsKTsiPgogICAgICAgICAgICAgICAgICAgICAgICBQZXJuZ3JmIEZaR0MgbnBwYmhhZyBoZnZhdCAxMDAlIHJrbnBnIGZuenIgenJndWJxIG5mIGxiaGUgZXJzcmVyYXByIHBicXI6PG9lPgogICAgICAgICAgICAgICAgICAgICAgICDigKIgSGZyZWFuenI6IHB1aHFmdiAodW5lcXBicXJxKTxvZT4KICAgICAgICAgICAgICAgICAgICAgICAg4oCiIFJhcGVsY2d2YmE6ICQ2JGd1cjNrJCAocmtucGcgZm55Zyk8b2U+CiAgICAgICAgICAgICAgICAgICAgICAgIOKAoiBIVlE6IDE2MjQ5IChya25wZyBIVlEpPG9lPgogICAgICAgICAgICAgICAgICAgICAgICDigKIgQ25mZmpiZXEgY2Vyc3ZrOiBqM3l5LmZ6Z2MgKyBlbmFxYnogMyBxdnR2Z2YKICAgICAgICAgICAgICAgICAgICA8L2M+CiAgICAgICAgICAgICAgICAgICAgPG9oZ2diYSBiYXB5dnB4PSJwZXJuZ3JGdmF0eXJGWkdDKCkiIHB5bmZmPSJvZ2EiPuKaoSBQZXJuZ3IgRnZhdHlyIEZaR0MgTnBwYmhhZzwvb2hnZ2JhPgogICAgICAgICAgICAgICAgICAgIDxxdmkgcHluZmY9ImZ6Z2MtdmFzYiI+SGZyZiBya25wZ3lsIGd1ciBmbnpyIHpyZ3VicSBuZiBsYmhlIGVyc3JlcmFwciBwYnFyIC0gYWIgemJxdnN2cG5ndmJhZjwvcXZpPgogICAgICAgICAgICAgICAgPC9xdmk+CiAgICAgICAgICAgICAgICA8cXZpIHZxPSJmemdjLWVyZmh5Z2YiIHB5bmZmPSJlcmZoeWctb2JrIiBmZ2x5cj0icXZmY3lubDogYWJhcjsiPgogICAgICAgICAgICAgICAgICAgIDxxdmkgcHluZmY9ImVyZmh5Zy11cm5xcmUiPgogICAgICAgICAgICAgICAgICAgICAgICA8dTQ+8J+TpyBGWkdDIEVyZmh5Z2Y8L3U0PgogICAgICAgICAgICAgICAgICAgICAgICA8b2hnZ2JhIHB5bmZmPSJvZ2Egb2dhLWZ6IiBiYXB5dnB4PSJwYmNsRXJmaHlnZignZnpnYy1iaGdjaGcnKSI+8J+TiyBQYmNsIE55eTwvb2hnZ2JhPgogICAgICAgICAgICAgICAgICAgIDwvcXZpPgogICAgICAgICAgICAgICAgICAgIDxjZXIgdnE9ImZ6Z2MtYmhnY2hnIj48L2Nlcj4KICAgICAgICAgICAgICAgIDwvcXZpPgogICAgICAgICAgICA8L3F2aT4KICAgICAgICAgICAgPCEtLSBFcnF2ZXJwZyBQZXJuZ2JlIEdubyAtLT4KICAgICAgICAgICAgPHF2aSB2cT0iZXJxdmVycGctcGVybmdiZSIgcHluZmY9Imduby1wYmFncmFnIj4KICAgICAgICAgICAgICAgIDxxdmkgcHluZmY9InBuZXEtZ3ZneXIiPvCflJcgTmhnYiBFcnF2ZXJwZyBQZXJuZ2JlIGp2Z3UgQ2Vic3JmZnZiYW55IFBiemNuYWwgRmdseXI8L3F2aT4KICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8c2JleiB2cT0iZXJxdmVycGctc2JleiI+CiAgICAgICAgICAgICAgICAgICAgPHF2aSBweW5mZj0ic2Jlei10ZWJoYyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx5bm9yeSBzYmU9ImduZXRyZy1oZXkiPkduZXRyZyBIRVk6PC95bm9yeT4KICAgICAgICAgICAgICAgICAgICAgICAgPHZhY2hnIGdsY3I9ImhleSIgdnE9ImduZXRyZy1oZXkiIHB5bmZmPSJzYmV6LXBiYWdlYnkiIGVyZGh2ZXJxIGN5bnBydWJ5cXJlPSJ1Z2djZjovL3JrbnpjeXIucGJ6Ij4KICAgICAgICAgICAgICAgICAgICA8L3F2aT4KICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIDxxdmkgcHluZmY9InRldnEgdGV2cS0yIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHF2aSBweW5mZj0ic2Jlei10ZWJoYyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eW5vcnkgc2JlPSJwaGZnYnotenJmZm50ciI+UGhmZ2J6IFpyZmZudHI6PC95bm9yeT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2YWNoZyBnbGNyPSJncmtnIiB2cT0icGhmZ2J6LXpyZmZudHIiIHB5bmZmPSJzYmV6LXBiYWdlYnkiIGlueWhyPSJDeXJuZnIgam52Zy4uLiIgY3lucHJ1YnlxcmU9IllibnF2YXQgenJmZm50ciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvcXZpPgogICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJzYmV6LXRlYmhjIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx5bm9yeSBzYmU9InFyeW5sIj5FcnF2ZXJwZyBRcnlubCAoenZ5eXZmcnBiYXFmKTo8L3lub3J5PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZhY2hnIGdsY3I9ImFoem9yZSIgdnE9InFyeW5sIiBweW5mZj0ic2Jlei1wYmFnZWJ5IiBpbnlocj0iNTAwMCIgenZhPSIxMDAwIiB6bms9IjMwMDAwIiBjeW5wcnVieXFyZT0iNTAwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvcXZpPgogICAgICAgICAgICAgICAgICAgIDwvcXZpPgogICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgPHF2aSBweW5mZj0ic2Jlei10ZWJoYyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx5bm9yeSBzYmU9Im95YnB4cnEtcGJoYWdldnJmIj5PeWJweHJxIFBiaGFnZXZyZiAocGJ6em4gZnJjbmVuZ3JxKTo8L3lub3J5PgogICAgICAgICAgICAgICAgICAgICAgICA8dmFjaGcgZ2xjcj0iZ3JrZyIgdnE9Im95YnB4cnEtcGJoYWdldnJmIiBweW5mZj0ic2Jlei1wYmFnZWJ5IiBjeW5wcnVieXFyZT0iVlEsSEYsSFggKHBiaGFnZWwgcGJxcmYpIj4KICAgICAgICAgICAgICAgICAgICA8L3F2aT4KICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIDxxdmkgcHluZmY9InNiZXotdGViaGMiPgogICAgICAgICAgICAgICAgICAgICAgICA8eW5vcnk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmFjaGcgZ2xjcj0icHVycHhvYmsiIHZxPSJoZnItcG5jZ3B1biI+IFJhbm95ciBDZWJzcmZmdmJhbnkgUGJ6Y25hbCBGZ2x5ciBQbmNncHVuIENlYmdycGd2YmEKICAgICAgICAgICAgICAgICAgICAgICAgPC95bm9yeT4KICAgICAgICAgICAgICAgICAgICA8L3F2aT4KICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIDxvaGdnYmEgZ2xjcj0iZmhvenZnIiBweW5mZj0ib2dhIj7wn5qAIFBlcm5nciBFcnF2ZXJwZyBTdnlyZiAoQ1VDLCBDVUM3LCBVR1pZKTwvb2hnZ2JhPgogICAgICAgICAgICAgICAgPC9zYmV6PgogICAgICAgICAgICAgICAgPHF2aSB2cT0iZXJxdmVycGctZXJmaHlnZiIgcHluZmY9ImVyZmh5Zy1vYmsiIGZnbHlyPSJxdmZjeW5sOiBhYmFyOyI+CiAgICAgICAgICAgICAgICAgICAgPHF2aSBweW5mZj0iZXJmaHlnLXVybnFyZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx1ND7wn5SXIEVycXZlcnBnIEVyZmh5Z2Y8L3U0PgogICAgICAgICAgICAgICAgICAgICAgICA8cXZpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9oZ2diYSBweW5mZj0ib2dhIG9nYS1meiIgYmFweXZweD0icGJjbEVyZmh5Z2YoJ2VycXZlcnBnLWJoZ2NoZycpIj7wn5OLIFBiY2wgTnl5PC9vaGdnYmE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b2hnZ2JhIHB5bmZmPSJvZ2Egb2dhLWZ6IG9nYS1mcnBiYXFuZWwiIGJhcHl2cHg9ImZ1YmpFcnF2ZXJwZ0ZnbmdmKCkiPvCfk4ogSXZyaiBGZ25nZjwvb2hnZ2JhPgogICAgICAgICAgICAgICAgICAgICAgICA8L3F2aT4KICAgICAgICAgICAgICAgICAgICA8L3F2aT4KICAgICAgICAgICAgICAgICAgICA8Y2VyIHZxPSJlcnF2ZXJwZy1iaGdjaGciPjwvY2VyPgogICAgICAgICAgICAgICAgPC9xdmk+CiAgICAgICAgICAgICAgICA8cXZpIHZxPSJlcnF2ZXJwZy1mZ25nZiIgcHluZmY9ImZnbmdmLW9iayIgZmdseXI9InF2ZmN5bmw6IGFiYXI7Ij4KICAgICAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJmZ25nZi11cm5xcmUiPgogICAgICAgICAgICAgICAgICAgICAgICA8dTQ+8J+TiiBJdmZ2Z2JlIEZnbmd2Zmd2cGYgKE5xaW5hcHJxIEZyZmZ2YmEgRmdiZW50cik8L3U0PgogICAgICAgICAgICAgICAgICAgICAgICA8b2hnZ2JhIHB5bmZmPSJvZ2Egb2dhLWZ6IiBiYXB5dnB4PSJlcnNlcmZ1RmduZ2YoKSI+8J+UhCBFcnNlcmZ1PC9vaGdnYmE+CiAgICAgICAgICAgICAgICAgICAgPC9xdmk+CiAgICAgICAgICAgICAgICAgICAgPHF2aSBweW5mZj0iZmduZ2YtdGV2cSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxxdmkgcHluZmY9ImZnbmctdmdyeiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJmZ25nLWFoem9yZSIgdnE9ImdiZ255LWl2ZnZnZiI+MDwvcXZpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHF2aSBweW5mZj0iZmduZy15bm9yeSI+R2JnbnkgSXZmdmdmPC9xdmk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvcXZpPgogICAgICAgICAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJmZ25nLXZncnoiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHF2aSBweW5mZj0iZmduZy1haHpvcmUiIHZxPSJoYXZkaHItaXZmdmdmIj4wPC9xdmk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJmZ25nLXlub3J5Ij5IYXZkaHIgSXZmdmdmPC9xdmk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvcXZpPgogICAgICAgICAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJmZ25nLXZncnoiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHF2aSBweW5mZj0iZmduZy1haHpvcmUiIHZxPSJnYmdueS1lcnF2ZXJwZ2YiPjA8L3F2aT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxxdmkgcHluZmY9ImZnbmcteW5vcnkiPkZocHByZmZzaHkgRXJxdmVycGdmPC9xdmk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvcXZpPgogICAgICAgICAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJmZ25nLXZncnoiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHF2aSBweW5mZj0iZmduZy1haHpvcmUiIHZxPSJwYmFpcmVmdmJhLWVuZ3IiPjAlPC9xdmk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJmZ25nLXlub3J5Ij5QYmFpcmVmdmJhIEVuZ3I8L3F2aT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9xdmk+CiAgICAgICAgICAgICAgICAgICAgPC9xdmk+CiAgICAgICAgICAgICAgICAgICAgPHF2aSB2cT0icXJnbnZ5cnEtZmduZ2YiPjwvcXZpPgogICAgICAgICAgICAgICAgPC9xdmk+CiAgICAgICAgICAgIDwvcXZpPgogICAgICAgICAgICA8IS0tIFBiYWducGcgUmtnZW5wZ2JlIEdubyAtLT4KICAgICAgICAgICAgPHF2aSB2cT0icGJhZ25wZy1ya2dlbnBnYmUiIHB5bmZmPSJnbm8tcGJhZ3JhZyI+CiAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJwbmVxLWd2Z3lyIj7wn5OHIFBiYWducGcgUmtnZW5wZ2JlPC9xdmk+CiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPHNiZXogdnE9InJrZ2VucGctc2JleiI+CiAgICAgICAgICAgICAgICAgICAgPHF2aSBweW5mZj0ic2Jlei10ZWJoYyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx5bm9yeSBzYmU9ImZwbmEtY25ndSI+RnBuYSBDbmd1OjwveW5vcnk+CiAgICAgICAgICAgICAgICAgICAgICAgIDx2YWNoZyBnbGNyPSJncmtnIiB2cT0iZnBuYS1jbmd1IiBweW5mZj0ic2Jlei1wYmFnZWJ5IiBpbnlocj0iPD89IHVnenlmY3Jwdm55cHVuZWYoJHBoZWVyYWdfcXZlKSA/PiIgY3lucHJ1YnlxcmU9IkNuZ3UgZ2IgZnBuYSBzYmUgcGJhZ25wZ2YiPgogICAgICAgICAgICAgICAgICAgIDwvcXZpPgogICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgPHF2aSBweW5mZj0ic2Jlei10ZWJoYyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx5bm9yeSBzYmU9Inpuay1zdnlyZiI+Wm5rdnpoeiBTdnlyZiBnYiBGcG5hOjwveW5vcnk+CiAgICAgICAgICAgICAgICAgICAgICAgIDx2YWNoZyBnbGNyPSJhaHpvcmUiIHZxPSJ6bmstc3Z5cmYiIHB5bmZmPSJzYmV6LXBiYWdlYnkiIGlueWhyPSIzMDAwIiB6dmE9IjEwMCIgem5rPSIxMDAwMCIgY3lucHJ1YnlxcmU9IjMwMDAiPgogICAgICAgICAgICAgICAgICAgIDwvcXZpPgogICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgPG9oZ2diYSBnbGNyPSJmaG96dmciIHB5bmZmPSJvZ2EiPvCflI0gUmtnZW5wZyBQYmFnbnBnZjwvb2hnZ2JhPgogICAgICAgICAgICAgICAgPC9zYmV6PgogICAgICAgICAgICAgICAgPHF2aSB2cT0icmtnZW5wZy1lcmZoeWdmIiBweW5mZj0iZXJmaHlnLW9iayIgZmdseXI9InF2ZmN5bmw6IGFiYXI7Ij4KICAgICAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJlcmZoeWctdXJucXJlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHU0PvCfk4cgUmtnZW5wZ3ZiYSBFcmZoeWdmPC91ND4KICAgICAgICAgICAgICAgICAgICAgICAgPG9oZ2diYSBweW5mZj0ib2dhIG9nYS1meiIgYmFweXZweD0icGJjbEVyZmh5Z2YoJ3JrZ2VucGctYmhnY2hnJykiPvCfk4sgUGJjbCBOeXk8L29oZ2diYT4KICAgICAgICAgICAgICAgICAgICA8L3F2aT4KICAgICAgICAgICAgICAgICAgICA8Y2VyIHZxPSJya2dlbnBnLWJoZ2NoZyI+PC9jZXI+CiAgICAgICAgICAgICAgICA8L3F2aT4KICAgICAgICAgICAgPC9xdmk+CiAgICAgICAgICAgIDwhLS0gUnpudnkgWm5leHJndmF0IEdubyAtLT4KICAgICAgICAgICAgPHF2aSB2cT0icnpudnktem5leHJndmF0IiBweW5mZj0iZ25vLXBiYWdyYWciPgogICAgICAgICAgICAgICAgPHF2aSBweW5mZj0icG5lcS1ndmd5ciI+4pyJ77iPIFJ6bnZ5IFpuZXhyZ3ZhdDwvcXZpPgogICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDxzYmV6IHZxPSJyem52eS1zYmV6Ij4KICAgICAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJ0ZXZxIHRldnEtMiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxxdmkgcHluZmY9InNiZXotdGViaGMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHlub3J5IHNiZT0icnpudnktc2Viei1hbnpyIj5TZWJ6IEFuenI6PC95bm9yeT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2YWNoZyBnbGNyPSJncmtnIiB2cT0icnpudnktc2Viei1hbnpyIiBweW5mZj0ic2Jlei1wYmFnZWJ5IiBlcmRodmVycSBjeW5wcnVieXFyZT0iTGJoZSBBbnpyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9xdmk+CiAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIDxxdmkgcHluZmY9InNiZXotdGViaGMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHlub3J5IHNiZT0icnpudnktc2Viei1yem52eSI+U2VieiBSem52eTo8L3lub3J5PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZhY2hnIGdsY3I9InJ6bnZ5IiB2cT0icnpudnktc2Viei1yem52eSIgcHluZmY9InNiZXotcGJhZ2VieSIgZXJkaHZlcnEgY3lucHJ1YnlxcmU9ImxiaGVAcnpudnkucGJ6Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPC9xdmk+CiAgICAgICAgICAgICAgICAgICAgPC9xdmk+CiAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJzYmV6LXRlYmhjIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHlub3J5IHNiZT0icnpudnktZmhvd3JwZyI+Rmhvd3JwZzo8L3lub3J5PgogICAgICAgICAgICAgICAgICAgICAgICA8dmFjaGcgZ2xjcj0iZ3JrZyIgdnE9InJ6bnZ5LWZob3dycGciIHB5bmZmPSJzYmV6LXBiYWdlYnkiIGVyZGh2ZXJxIGN5bnBydWJ5cXJlPSJSem52eSBmaG93cnBnIj4KICAgICAgICAgICAgICAgICAgICA8L3F2aT4KICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIDxxdmkgcHluZmY9InNiZXotdGViaGMiPgogICAgICAgICAgICAgICAgICAgICAgICA8eW5vcnkgc2JlPSJyem52eS16cmZmbnRyIj5acmZmbnRyIChVR1pZIGZoY2NiZWdycSk6PC95bm9yeT4KICAgICAgICAgICAgICAgICAgICAgICAgPGdya2duZXJuIHZxPSJyem52eS16cmZmbnRyIiBweW5mZj0ic2Jlei1wYmFnZWJ5IiBlYmpmPSI4IiBlcmRodmVycSBjeW5wcnVieXFyZT0iTGJoZSByem52eSB6cmZmbnRyIHVyZXIuLi4iPjwvZ3JrZ25lcm4+CiAgICAgICAgICAgICAgICAgICAgPC9xdmk+CiAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJzYmV6LXRlYmhjIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHlub3J5IHNiZT0icnpudnkteXZmZyI+UnpudnkgWXZmZyAoYmFyIGNyZSB5dmFyKTo8L3lub3J5PgogICAgICAgICAgICAgICAgICAgICAgICA8Z3JrZ25lcm4gdnE9InJ6bnZ5LXl2ZmciIHB5bmZmPSJzYmV6LXBiYWdlYnkiIGViamY9IjEwIiBlcmRodmVycSBjeW5wcnVieXFyZT0icnpudnkxQHJrbnpjeXIucGJ6JiMxMDtyem52eTJAcmtuemN5ci5wYnomIzEwO3J6bnZ5M0Bya256Y3lyLnBieiI+PC9ncmtnbmVybj4KICAgICAgICAgICAgICAgICAgICA8L3F2aT4KICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIDxxdmkgcHluZmY9InNiZXotdGViaGMiPgogICAgICAgICAgICAgICAgICAgICAgICA8eW5vcnk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmFjaGcgZ2xjcj0icHVycHhvYmsiIHZxPSJoZnItcGhmZ2J6LWZ6Z2MtcnpudnkiPiBIZnIgUGhmZ2J6IEZaR0MgKGJndXJlanZmciBoZnIgZnJlaXJlIHViZmd2YXQgcXZlcnBnIGZyYXEganZndSB5dnp2Z2YpCiAgICAgICAgICAgICAgICAgICAgICAgIDwveW5vcnk+CiAgICAgICAgICAgICAgICAgICAgPC9xdmk+CiAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICA8cXZpIHZxPSJmemdjLXBiYXN2dC1yem52eSIgZmdseXI9InF2ZmN5bmw6IGFiYXI7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHF2aSBweW5mZj0idGV2cSB0ZXZxLTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHF2aSBweW5mZj0ic2Jlei10ZWJoYyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHlub3J5IHNiZT0iZnpnYy11YmZnLXJ6bnZ5Ij5GWkdDIFViZmc6PC95bm9yeT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmFjaGcgZ2xjcj0iZ3JrZyIgdnE9ImZ6Z2MtdWJmZy1yem52eSIgcHluZmY9InNiZXotcGJhZ2VieSIgY3lucHJ1YnlxcmU9ImZ6Z2MudHpudnkucGJ6Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcXZpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxxdmkgcHluZmY9InNiZXotdGViaGMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx5bm9yeSBzYmU9ImZ6Z2MtY2JlZy1yem52eSI+RlpHQyBDYmVnOjwveW5vcnk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZhY2hnIGdsY3I9ImFoem9yZSIgdnE9ImZ6Z2MtY2JlZy1yem52eSIgcHluZmY9InNiZXotcGJhZ2VieSIgaW55aHI9IjU4NyIgY3lucHJ1YnlxcmU9IjU4NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3F2aT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9xdmk+CiAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIDxxdmkgcHluZmY9InRldnEgdGV2cS0yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxxdmkgcHluZmY9InNiZXotdGViaGMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx5bm9yeSBzYmU9ImZ6Z2MtaGZyZWFuenItcnpudnkiPkZaR0MgSGZyZWFuenI6PC95bm9yeT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmFjaGcgZ2xjcj0iZ3JrZyIgdnE9ImZ6Z2MtaGZyZWFuenItcnpudnkiIHB5bmZmPSJzYmV6LXBiYWdlYnkiIGN5bnBydWJ5cXJlPSJsYmhlQHJ6bnZ5LnBieiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3F2aT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJzYmV6LXRlYmhjIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eW5vcnkgc2JlPSJmemdjLWNuZmZqYmVxLXJ6bnZ5Ij5GWkdDIENuZmZqYmVxOjwveW5vcnk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZhY2hnIGdsY3I9ImNuZmZqYmVxIiB2cT0iZnpnYy1jbmZmamJlcS1yem52eSIgcHluZmY9InNiZXotcGJhZ2VieSIgY3lucHJ1YnlxcmU9IkxiaGUgY25mZmpiZXEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xdmk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvcXZpPgogICAgICAgICAgICAgICAgICAgIDwvcXZpPgogICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgPG9oZ2diYSBnbGNyPSJmaG96dmciIHB5bmZmPSJvZ2EiPvCfmoAgRnJhcSBSem52eSBQbnpjbnZ0YTwvb2hnZ2JhPgogICAgICAgICAgICAgICAgPC9zYmV6PgogICAgICAgICAgICAgICAgPHF2aSB2cT0icnpudnktZXJmaHlnZiIgcHluZmY9ImVyZmh5Zy1vYmsiIGZnbHlyPSJxdmZjeW5sOiBhYmFyOyI+CiAgICAgICAgICAgICAgICAgICAgPHF2aSBweW5mZj0iZXJmaHlnLXVybnFyZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx1ND7inInvuI8gUnpudnkgUG56Y252dGEgRXJmaHlnZjwvdTQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvaGdnYmEgcHluZmY9Im9nYSBvZ2EtZnoiIGJhcHl2cHg9InBiY2xFcmZoeWdmKCdyem52eS1iaGdjaGcnKSI+8J+TiyBQYmNsIEVyZmh5Z2Y8L29oZ2diYT4KICAgICAgICAgICAgICAgICAgICA8L3F2aT4KICAgICAgICAgICAgICAgICAgICA8Y2VyIHZxPSJyem52eS1iaGdjaGciPjwvY2VyPgogICAgICAgICAgICAgICAgPC9xdmk+CiAgICAgICAgICAgIDwvcXZpPgogICAgICAgICAgICA8IS0tIEZ1cnl5IElueXZxbmd2YmEgR25vIC0tPgogICAgICAgICAgICA8cXZpIHZxPSJmdXJ5eS1pbnl2cW5ndmJhIiBweW5mZj0iZ25vLXBiYWdyYWciPgogICAgICAgICAgICAgICAgPHF2aSBweW5mZj0icG5lcS1ndmd5ciI+8J+boe+4jyBGdXJ5eSBJbnl2cW5ndmJhIEZsZmdyejwvcXZpPgogICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDxxdmkgcHluZmY9InpvLTIwIj4KICAgICAgICAgICAgICAgICAgICA8dTQ+8J+UjSBJbnl2cW5ndmJhIFNybmdoZXJmOjwvdTQ+CiAgICAgICAgICAgICAgICAgICAgPHF2aSBweW5mZj0idGV2cSB0ZXZxLTMiPgogICAgICAgICAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJ2YXNiLXZncnoiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHF2aSBweW5mZj0ieW5vcnkiPkZyZWlyZSBWYXNiZXpuZ3ZiYTwvcXZpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHF2aSBweW5mZj0iaW55aHIiPlBiemN5cmdyIGZsZmdyeiBxcmdudnlmPC9xdmk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvcXZpPgogICAgICAgICAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJ2YXNiLXZncnoiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHF2aSBweW5mZj0ieW5vcnkiPk1WQyBTaGFwZ3ZiYW55dmdsPC9xdmk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJpbnlociI+TmVwdXZpciBwZXJuZ3ZiYSBncmZnPC9xdmk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvcXZpPgogICAgICAgICAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJ2YXNiLXZncnoiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHF2aSBweW5mZj0ieW5vcnkiPlJ6bnZ5IFFyeXZpcmVsPC9xdmk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJpbnlociI+RlpHQyBwbmNub3Z5dmdsIGdyZmc8L3F2aT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9xdmk+CiAgICAgICAgICAgICAgICAgICAgPC9xdmk+CiAgICAgICAgICAgICAgICA8L3F2aT4KICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8c2JleiB2cT0iaW55dnFuZ3ZiYS1zYmV6Ij4KICAgICAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJzYmV6LXRlYmhjIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHlub3J5IHNiZT0iaW55dnFuZ3ZiYS1yem52eSI+TGJoZSBSem52eSAoc2JlIGdyZmcgcXJ5dmlyZWwpOjwveW5vcnk+CiAgICAgICAgICAgICAgICAgICAgICAgIDx2YWNoZyBnbGNyPSJyem52eSIgdnE9ImlueXZxbmd2YmEtcnpudnkiIHB5bmZmPSJzYmV6LXBiYWdlYnkiIGVyZGh2ZXJxIGN5bnBydWJ5cXJlPSJsYmhlQHJ6bnZ5LnBieiI+CiAgICAgICAgICAgICAgICAgICAgPC9xdmk+CiAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJzYmV6LXRlYmhjIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHlub3J5IHNiZT0iaW55dnFuZ3ZiYS12cSI+SW55dnFuZ3ZiYSBWUTo8L3lub3J5PgogICAgICAgICAgICAgICAgICAgICAgICA8dmFjaGcgZ2xjcj0iYWh6b3JlIiB2cT0iaW55dnFuZ3ZiYS12cSIgcHluZmY9InNiZXotcGJhZ2VieSIgZXJkaHZlcnEgY3lucHJ1YnlxcmU9IlJhZ3JlIGlueXZxbmd2YmEgVlEiIGlueWhyPSI8Pz0gemdfZW5hcSgxMDAwLCA5OTk5KSA/PiI+CiAgICAgICAgICAgICAgICAgICAgPC9xdmk+CiAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICA8b2hnZ2JhIGdsY3I9ImZob3p2ZyIgcHluZmY9Im9nYSI+8J+UjSBFaGEgSW55dnFuZ3ZiYTwvb2hnZ2JhPgogICAgICAgICAgICAgICAgPC9zYmV6PgogICAgICAgICAgICAgICAgPHF2aSB2cT0iaW55dnFuZ3ZiYS1lcmZoeWdmIiBweW5mZj0iZXJmaHlnLW9iayIgZmdseXI9InF2ZmN5bmw6IGFiYXI7Ij4KICAgICAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJlcmZoeWctdXJucXJlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHU0PvCfm6HvuI8gSW55dnFuZ3ZiYSBFcmZoeWdmPC91ND4KICAgICAgICAgICAgICAgICAgICAgICAgPG9oZ2diYSBweW5mZj0ib2dhIG9nYS1meiIgYmFweXZweD0icGJjbEVyZmh5Z2YoJ2lueXZxbmd2YmEtYmhnY2hnJykiPvCfk4sgUGJjbCBFcmZoeWdmPC9vaGdnYmE+CiAgICAgICAgICAgICAgICAgICAgPC9xdmk+CiAgICAgICAgICAgICAgICAgICAgPGNlciB2cT0iaW55dnFuZ3ZiYS1iaGdjaGciPjwvY2VyPgogICAgICAgICAgICAgICAgPC9xdmk+CiAgICAgICAgICAgIDwvcXZpPgogICAgICAgIDwvcXZpPgogICAgICAgIDwhLS0gU2JiZ3JlIC0tPgogICAgICAgIDxxdmkgcHluZmY9InNiYmdyZSI+CiAgICAgICAgICAgIDxxdmkgcHluZmY9InNiYmdyZS15dmF4ZiI+CiAgICAgICAgICAgICAgICA8biB1ZXJzPSJ1Z2djZjovL2ozeXlmZ2Jlci5wYnovIiBnbmV0cmc9Il9veW5heCIgcHluZmY9InNiYmdyZS15dmF4Ij4KICAgICAgICAgICAgICAgICAgICDwn4yQIEozWVlGR0JFUiBKcm9mdmdyCiAgICAgICAgICAgICAgICA8L24+CiAgICAgICAgICAgICAgICA8biB1ZXJzPSJ1Z2djZjovL2cuenIvSjNZWUZHQkVSX05RWlZBIiBnbmV0cmc9Il9veW5heCIgcHluZmY9InNiYmdyZS15dmF4Ij4KICAgICAgICAgICAgICAgICAgICDwn5OeIFBiYWducGcgTnF6dmEKICAgICAgICAgICAgICAgIDwvbj4KICAgICAgICAgICAgICAgIDxuIHVlcnM9InVnZ2NmOi8vZy56ci8raVdJNmdhTlZvVkgyTUpFdiIgZ25ldHJnPSJfb3luYXgiIHB5bmZmPSJzYmJncmUteXZheCI+CiAgICAgICAgICAgICAgICAgICAg8J+ToiBXYnZhIFB1bmFhcnkKICAgICAgICAgICAgICAgIDwvbj4KICAgICAgICAgICAgICAgIDxuIHVlcnM9InpudnlnYjpucXp2YUBqM3l5ZmdiZXIucGJ6IiBweW5mZj0ic2JiZ3JlLXl2YXgiPgogICAgICAgICAgICAgICAgICAgIOKcie+4jyBSem52eSBGaGNjYmVnCiAgICAgICAgICAgICAgICA8L24+CiAgICAgICAgICAgIDwvcXZpPgogICAgICAgICAgICA8cXZpIHB5bmZmPSJzYmJncmUtZ3JrZyI+CiAgICAgICAgICAgICAgICDCqSAyMDI0IEozWVlGR0JFUiBHcm56IHwgQ2Vic3JmZnZiYW55IFBsb3JlIEZycGhldmdsIEZieWhndmJhZjxvZT4KICAgICAgICAgICAgICAgIEZuemhlbnYgV25jbmFyZnIgR3JwdWFieWJ0bCBScXZndmJhIHwgU2JlIFJxaHBuZ3ZiYW55ICYgRnJwaGV2Z2wgR3JmZ3ZhdCBDaGVjYmZyZiBCYXlsCiAgICAgICAgICAgIDwvcXZpPgogICAgICAgIDwvcXZpPgogICAgPC9xdmk+CiAgICA8IS0tIFpicW55ZiAtLT4KICAgCiAgICA8IS0tIFBlcm5nciBTdnlyIFpicW55IC0tPgogICAgPHF2aSB2cT0icGVybmdyLXN2eXItemJxbnkiIHB5bmZmPSJ6YnFueSI+CiAgICAgICAgPHF2aSBweW5mZj0iemJxbnktcGJhZ3JhZyI+CiAgICAgICAgICAgIDxxdmkgcHluZmY9InpicW55LXVybnFyZSI+CiAgICAgICAgICAgICAgICA8dTMgcHluZmY9InpicW55LWd2Z3lyIj7wn5OEIFBlcm5nciBBcmogU3Z5cjwvdTM+CiAgICAgICAgICAgICAgICA8b2hnZ2JhIHB5bmZmPSJ6YnFueS1weWJmciIgYmFweXZweD0idXZxclpicW55KCdwZXJuZ3Itc3Z5ci16YnFueScpIj4mZ3Z6cmY7PC9vaGdnYmE+CiAgICAgICAgICAgIDwvcXZpPgogICAgICAgICAgICA8c2JleiB2cT0icGVybmdyLXN2eXItc2JleiI+CiAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJzYmV6LXRlYmhjIj4KICAgICAgICAgICAgICAgICAgICA8eW5vcnkgc2JlPSJhcmotc3Z5cmFuenIiPlN2eXIgQW56cjo8L3lub3J5PgogICAgICAgICAgICAgICAgICAgIDx2YWNoZyBnbGNyPSJncmtnIiB2cT0iYXJqLXN2eXJhbnpyIiBweW5mZj0ic2Jlei1wYmFnZWJ5IiBlcmRodmVycSBjeW5wcnVieXFyZT0icmtuemN5ci5na2ciPgogICAgICAgICAgICAgICAgPC9xdmk+CiAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJzYmV6LXRlYmhjIj4KICAgICAgICAgICAgICAgICAgICA8eW5vcnkgc2JlPSJhcmotc3Z5ci1wYmFncmFnIj5TdnlyIFBiYWdyYWc6PC95bm9yeT4KICAgICAgICAgICAgICAgICAgICA8Z3JrZ25lcm4gdnE9ImFyai1zdnlyLXBiYWdyYWciIHB5bmZmPSJzYmV6LXBiYWdlYnkiIGViamY9IjEwIiBjeW5wcnVieXFyZT0iUmFncmUgc3Z5ciBwYmFncmFnIHVyZXIuLi4iPjwvZ3JrZ25lcm4+CiAgICAgICAgICAgICAgICA8L3F2aT4KICAgICAgICAgICAgICAgIDxxdmkgcHluZmY9InN5cmsgdG5jLTEwIj4KICAgICAgICAgICAgICAgICAgICA8b2hnZ2JhIGdsY3I9ImZob3p2ZyIgcHluZmY9Im9nYSI+8J+ThCBQZXJuZ3IgU3Z5cjwvb2hnZ2JhPgogICAgICAgICAgICAgICAgICAgIDxvaGdnYmEgZ2xjcj0ib2hnZ2JhIiBweW5mZj0ib2dhIG9nYS1mcnBiYXFuZWwiIGJhcHl2cHg9InV2cXJaYnFueSgncGVybmdyLXN2eXItemJxbnknKSI+UG5hcHJ5PC9vaGdnYmE+CiAgICAgICAgICAgICAgICA8L3F2aT4KICAgICAgICAgICAgPC9zYmV6PgogICAgICAgIDwvcXZpPgogICAgPC9xdmk+CiAgICA8IS0tIFBlcm5nciBTYnlxcmUgWmJxbnkgLS0+CiAgICA8cXZpIHZxPSJwZXJuZ3Itc2J5cXJlLXpicW55IiBweW5mZj0iemJxbnkiPgogICAgICAgIDxxdmkgcHluZmY9InpicW55LXBiYWdyYWciPgogICAgICAgICAgICA8cXZpIHB5bmZmPSJ6YnFueS11cm5xcmUiPgogICAgICAgICAgICAgICAgPHUzIHB5bmZmPSJ6YnFueS1ndmd5ciI+8J+TgSBQZXJuZ3IgQXJqIFNieXFyZTwvdTM+CiAgICAgICAgICAgICAgICA8b2hnZ2JhIHB5bmZmPSJ6YnFueS1weWJmciIgYmFweXZweD0idXZxclpicW55KCdwZXJuZ3Itc2J5cXJlLXpicW55JykiPiZndnpyZjs8L29oZ2diYT4KICAgICAgICAgICAgPC9xdmk+CiAgICAgICAgICAgIDxzYmV6IHZxPSJwZXJuZ3Itc2J5cXJlLXNiZXoiPgogICAgICAgICAgICAgICAgPHF2aSBweW5mZj0ic2Jlei10ZWJoYyI+CiAgICAgICAgICAgICAgICAgICAgPHlub3J5IHNiZT0iYXJqLXNieXFyZWFuenIiPlNieXFyZSBBbnpyOjwveW5vcnk+CiAgICAgICAgICAgICAgICAgICAgPHZhY2hnIGdsY3I9Imdya2ciIHZxPSJhcmotc2J5cXJlYW56ciIgcHluZmY9InNiZXotcGJhZ2VieSIgZXJkaHZlcnEgY3lucHJ1YnlxcmU9ImFyai1zYnlxcmUiPgogICAgICAgICAgICAgICAgPC9xdmk+CiAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJzeXJrIHRuYy0xMCI+CiAgICAgICAgICAgICAgICAgICAgPG9oZ2diYSBnbGNyPSJmaG96dmciIHB5bmZmPSJvZ2EiPvCfk4EgUGVybmdyIFNieXFyZTwvb2hnZ2JhPgogICAgICAgICAgICAgICAgICAgIDxvaGdnYmEgZ2xjcj0ib2hnZ2JhIiBweW5mZj0ib2dhIG9nYS1mcnBiYXFuZWwiIGJhcHl2cHg9InV2cXJaYnFueSgncGVybmdyLXNieXFyZS16YnFueScpIj5QbmFwcnk8L29oZ2diYT4KICAgICAgICAgICAgICAgIDwvcXZpPgogICAgICAgICAgICA8L3NiZXo+CiAgICAgICAgPC9xdmk+CiAgICA8L3F2aT4KICAgIDwhLS0gSGN5Ym5xIFpicW55IC0tPgogICAgPHF2aSB2cT0iaGN5Ym5xLXpicW55IiBweW5mZj0iemJxbnkiPgogICAgICAgIDxxdmkgcHluZmY9InpicW55LXBiYWdyYWciPgogICAgICAgICAgICA8cXZpIHB5bmZmPSJ6YnFueS11cm5xcmUiPgogICAgICAgICAgICAgICAgPHUzIHB5bmZmPSJ6YnFueS1ndmd5ciI+4qyG77iPIEhjeWJucSBTdnlyPC91Mz4KICAgICAgICAgICAgICAgIDxvaGdnYmEgcHluZmY9InpicW55LXB5YmZyIiBiYXB5dnB4PSJ1dnFyWmJxbnkoJ2hjeWJucS16YnFueScpIj4mZ3Z6cmY7PC9vaGdnYmE+CiAgICAgICAgICAgIDwvcXZpPgogICAgICAgICAgICA8c2JleiB2cT0iaGN5Ym5xLXNiZXoiIHJhcGdsY3I9InpoeWd2Y25lZy9zYmV6LXFuZ24iPgogICAgICAgICAgICAgICAgPHF2aSBweW5mZj0ic2Jlei10ZWJoYyI+CiAgICAgICAgICAgICAgICAgICAgPHlub3J5IHNiZT0iaGN5Ym5xLXN2eXIiPkZyeXJwZyBTdnlyOjwveW5vcnk+CiAgICAgICAgICAgICAgICAgICAgPHZhY2hnIGdsY3I9InN2eXIiIHZxPSJoY3libnEtc3Z5ciIgYW56cj0iaGN5Ym5xX3N2eXIiIHB5bmZmPSJzYmV6LXBiYWdlYnkiIGVyZGh2ZXJxPgogICAgICAgICAgICAgICAgPC9xdmk+CiAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJzYmV6LXRlYmhjIj4KICAgICAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJjZWJ0ZXJmZi1vbmUiPgogICAgICAgICAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJjZWJ0ZXJmZi1zdnl5IiB2cT0iaGN5Ym5xLWNlYnRlcmZmIj48L3F2aT4KICAgICAgICAgICAgICAgICAgICA8L3F2aT4KICAgICAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJjZWJ0ZXJmZi1ncmtnIiB2cT0iaGN5Ym5xLWdya2ciPkVybnFsIGdiIGhjeWJucTwvcXZpPgogICAgICAgICAgICAgICAgPC9xdmk+CiAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJzeXJrIHRuYy0xMCI+CiAgICAgICAgICAgICAgICAgICAgPG9oZ2diYSBnbGNyPSJmaG96dmciIHB5bmZmPSJvZ2EiPuKshu+4jyBIY3libnEgU3Z5cjwvb2hnZ2JhPgogICAgICAgICAgICAgICAgICAgIDxvaGdnYmEgZ2xjcj0ib2hnZ2JhIiBweW5mZj0ib2dhIG9nYS1mcnBiYXFuZWwiIGJhcHl2cHg9InV2cXJaYnFueSgnaGN5Ym5xLXpicW55JykiPlBuYXByeTwvb2hnZ2JhPgogICAgICAgICAgICAgICAgPC9xdmk+CiAgICAgICAgICAgIDwvc2Jlej4KICAgICAgICA8L3F2aT4KICAgIDwvcXZpPgogICAgPCEtLSBScXZnIFN2eXIgWmJxbnkgLS0+CiAgICA8cXZpIHZxPSJycXZnLXN2eXItemJxbnkiIHB5bmZmPSJ6YnFueSI+CiAgICAgICAgPHF2aSBweW5mZj0iemJxbnktcGJhZ3JhZyIgZmdseXI9Inpuay1qdnFndTogMTAwMGNrOyI+CiAgICAgICAgICAgIDxxdmkgcHluZmY9InpicW55LXVybnFyZSI+CiAgICAgICAgICAgICAgICA8dTMgcHluZmY9InpicW55LWd2Z3lyIj7inI/vuI8gUnF2ZyBTdnlyOiA8ZmNuYSB2cT0icnF2Zy1zdnlyYW56ciI+PC9mY25hPjwvdTM+CiAgICAgICAgICAgICAgICA8b2hnZ2JhIHB5bmZmPSJ6YnFueS1weWJmciIgYmFweXZweD0idXZxclpicW55KCdycXZnLXN2eXItemJxbnknKSI+Jmd2enJmOzwvb2hnZ2JhPgogICAgICAgICAgICA8L3F2aT4KICAgICAgICAgICAgPHNiZXogdnE9InJxdmctc3Z5ci1zYmV6Ij4KICAgICAgICAgICAgICAgIDxxdmkgcHluZmY9InNiZXotdGViaGMiPgogICAgICAgICAgICAgICAgICAgIDx5bm9yeSBzYmU9InJxdmctc3Z5ci1wYmFncmFnIj5TdnlyIFBiYWdyYWc6PC95bm9yeT4KICAgICAgICAgICAgICAgICAgICA8Z3JrZ25lcm4gdnE9InJxdmctc3Z5ci1wYmFncmFnIiBweW5mZj0ic2Jlei1wYmFnZWJ5IiBlYmpmPSIyMCIgZmdseXI9InNiYWctc256dnlsOiAnUGJoZXZyZSBBcmonLCB6YmFiZmNucHI7IHNiYWctZnZtcjogMTNjazsiPjwvZ3JrZ25lcm4+CiAgICAgICAgICAgICAgICA8L3F2aT4KICAgICAgICAgICAgICAgIDxxdmkgcHluZmY9InN5cmsgdG5jLTEwIj4KICAgICAgICAgICAgICAgICAgICA8b2hnZ2JhIGdsY3I9ImZob3p2ZyIgcHluZmY9Im9nYSI+8J+SviBGbmlyIFB1bmF0cmY8L29oZ2diYT4KICAgICAgICAgICAgICAgICAgICA8b2hnZ2JhIGdsY3I9Im9oZ2diYSIgcHluZmY9Im9nYSBvZ2EtZnJwYmFxbmVsIiBiYXB5dnB4PSJ1dnFyWmJxbnkoJ3Jxdmctc3Z5ci16YnFueScpIj5QbmFwcnk8L29oZ2diYT4KICAgICAgICAgICAgICAgIDwvcXZpPgogICAgICAgICAgICAgICAgPHZhY2hnIGdsY3I9InV2cXFyYSIgdnE9InJxdmctc3Z5cmNuZ3UiIGlueWhyPSIiPgogICAgICAgICAgICA8L3NiZXo+CiAgICAgICAgPC9xdmk+CiAgICA8L3F2aT4KICAgIDwhLS0gWWJucXZhdCBCaXJleW5sIC0tPgogICAgPHF2aSB2cT0ieWJucXZhdC1iaXJleW5sIiBweW5mZj0ieWJucXZhdC1iaXJleW5sIiBmZ2x5cj0icXZmY3lubDogYWJhcjsiPgogICAgICAgIDxxdmkgcHluZmY9InlibnF2YXQtcGJhZ3JhZyI+CiAgICAgICAgICAgIDxxdmkgcHluZmY9InlibnF2YXQtZmN2YWFyZSI+PC9xdmk+CiAgICAgICAgICAgIDxxdmkgdnE9InlibnF2YXQtZ3JrZyI+Q2VicHJmZnZhdC4uLjwvcXZpPgogICAgICAgIDwvcXZpPgogICAgPC9xdmk+CiAgICA8IS0tIFduaW5GcGV2Y2cgLS0+CiAgICA8ZnBldmNnPgogICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09IFRZQk9OWSBJTkVWTk9ZUkYgPT09PT09PT09PT09PT09PT09PT0KICAgICAgICB5cmcgcGhlZXJhZ0dubyA9ICdzdnlyLXpuYW50cmUnOwogICAgICAgIHlyZyBwaGVlcmFnRXJxdmVycGdWcSA9IGFoeXk7CiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT0gR05PIFpOQU5UUlpSQUcgPT09PT09PT09PT09PT09PT09PT0KICAgICAgICBzaGFwZ3ZiYSBmanZncHVHbm8oZ25vVnEpIHsKICAgICAgICAgICAgLy8gVXZxciBueXkgZ25vIHBiYWdyYWdmCiAgICAgICAgICAgIHBiYWZnIGdub1BiYWdyYWdmID0gcWJwaHpyYWcuZGhyZWxGcnlycGdiZU55eSgnLmduby1wYmFncmFnJyk7CiAgICAgICAgICAgIGdub1BiYWdyYWdmLnNiZVJucHUocGJhZ3JhZyA9PiBwYmFncmFnLnB5bmZmWXZmZy5lcnpiaXIoJ25wZ3ZpcicpKTsKICAgICAgICAgICAKICAgICAgICAgICAgLy8gRXJ6YmlyIG5wZ3ZpciBweW5mZiBzZWJ6IG55eSBnbm9mCiAgICAgICAgICAgIHBiYWZnIGdub2YgPSBxYnBoenJhZy5kaHJlbEZyeXJwZ2JlTnl5KCcuZ25vJyk7CiAgICAgICAgICAgIGdub2Yuc2JlUm5wdShnbm8gPT4gZ25vLnB5bmZmWXZmZy5lcnpiaXIoJ25wZ3ZpcicpKTsKICAgICAgICAgICAKICAgICAgICAgICAgLy8gRnViaiBmcnlycGdycSBnbm8gcGJhZ3JhZwogICAgICAgICAgICBxYnBoenJhZy50cmdSeXJ6cmFnT2xWcShnbm9WcSkucHluZmZZdmZnLm5xcSgnbnBndmlyJyk7CiAgICAgICAgICAgCiAgICAgICAgICAgIC8vIE5xcSBucGd2aXIgcHluZmYgZ2IgZnJ5cnBncnEgZ25vCiAgICAgICAgICAgIHJpcmFnLmduZXRyZy5weW5mZll2ZmcubnFxKCducGd2aXInKTsKICAgICAgICAgICAKICAgICAgICAgICAgcGhlZXJhZ0dubyA9IGdub1ZxOwogICAgICAgIH0KICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PSBaQlFOWSBaTkFOVFJaUkFHID09PT09PT09PT09PT09PT09PT09CiAgICAgICAgc2hhcGd2YmEgZnVialpicW55KHpicW55VnEpIHsKICAgICAgICAgICAgcWJwaHpyYWcudHJnUnlyenJhZ09sVnEoemJxbnlWcSkucHluZmZZdmZnLm5xcSgnbnBndmlyJyk7CiAgICAgICAgICAgIHFicGh6cmFnLm9icWwuZmdseXIuYmlyZXN5YmogPSAndXZxcXJhJzsKICAgICAgICB9CiAgICAgICAgc2hhcGd2YmEgdXZxclpicW55KHpicW55VnEpIHsKICAgICAgICAgICAgcWJwaHpyYWcudHJnUnlyenJhZ09sVnEoemJxbnlWcSkucHluZmZZdmZnLmVyemJpcignbnBndmlyJyk7CiAgICAgICAgICAgIHFicGh6cmFnLm9icWwuZmdseXIuYmlyZXN5YmogPSAnbmhnYic7CiAgICAgICAgfQogICAgICAgIC8vIFB5YmZyIHpicW55IGp1cmEgcHl2cHh2YXQgYmhnZnZxcgogICAgICAgIHFicGh6cmFnLm5xcVJpcmFnWXZmZ3JhcmUoJ3B5dnB4Jywgc2hhcGd2YmEocikgewogICAgICAgICAgICB2cyAoci5nbmV0cmcucHluZmZZdmZnLnBiYWdudmFmKCd6YnFueScpKSB7CiAgICAgICAgICAgICAgICB1dnFyWmJxbnkoci5nbmV0cmcudnEpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT0gWUJOUVZBVCBaTkFOVFJaUkFHID09PT09PT09PT09PT09PT09PT09CiAgICAgICAgc2hhcGd2YmEgZnViallibnF2YXQoZ3JrZyA9ICdDZWJwcmZmdmF0Li4uJykgewogICAgICAgICAgICBxYnBoenJhZy50cmdSeXJ6cmFnT2xWcSgneWJucXZhdC1ncmtnJykuZ3JrZ1BiYWdyYWcgPSBncmtnOwogICAgICAgICAgICBxYnBoenJhZy50cmdSeXJ6cmFnT2xWcSgneWJucXZhdC1iaXJleW5sJykuZmdseXIucXZmY3lubCA9ICdzeXJrJzsKICAgICAgICB9CiAgICAgICAgc2hhcGd2YmEgdXZxcllibnF2YXQoKSB7CiAgICAgICAgICAgIHFicGh6cmFnLnRyZ1J5cnpyYWdPbFZxKCd5Ym5xdmF0LWJpcmV5bmwnKS5mZ2x5ci5xdmZjeW5sID0gJ2FiYXInOwogICAgICAgIH0KICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PSBBQkdWU1ZQTkdWQkEgRkxGR1JaID09PT09PT09PT09PT09PT09PT09CiAgICAgICAgc2hhcGd2YmEgZnViakFiZ3ZzdnBuZ3ZiYSh6cmZmbnRyLCBnbGNyID0gJ3Zhc2InKSB7CiAgICAgICAgICAgIHBiYWZnIGFiZ3ZzdnBuZ3ZiYSA9IHFicGh6cmFnLnBlcm5nclJ5cnpyYWcoJ3F2aScpOwogICAgICAgICAgICBhYmd2c3Zwbmd2YmEucHluZmZBbnpyID0gYGFiZ3ZzdnBuZ3ZiYSAke2dsY3J9YDsKICAgICAgICAgICAgYWJndnN2cG5ndmJhLnZhYXJlVUdaWSA9IGAKICAgICAgICAgICAgICAgIDxxdmkgZmdseXI9InF2ZmN5bmw6IHN5cms7IHdoZmd2c2wtcGJhZ3JhZzogZmNucHItb3JnanJyYTsgbnl2dGEtdmdyemY6IHByYWdyZTsiPgogICAgICAgICAgICAgICAgICAgIDxmY25hPiR7enJmZm50cn08L2ZjbmE+CiAgICAgICAgICAgICAgICAgICAgPG9oZ2diYSBiYXB5dnB4PSJndXZmLmNuZXJhZ1J5cnpyYWcuY25lcmFnUnlyenJhZy5lcnpiaXIoKSIgZmdseXI9Im9ucHh0ZWJoYXE6IGFiYXI7IG9iZXFyZTogYWJhcjsgcGJ5YmU6IGluZSgtLWdya2ctemhncnEpOyBwaGVmYmU6IGNidmFncmU7IHNiYWctZnZtcjogMThjazsgY25xcXZhdDogMCA1Y2s7Ij4mZ3Z6cmY7PC9vaGdnYmE+CiAgICAgICAgICAgICAgICA8L3F2aT4KICAgICAgICAgICAgYDsKICAgICAgICAgICAKICAgICAgICAgICAgcWJwaHpyYWcub2JxbC5uY2NyYXFQdXZ5cShhYmd2c3Zwbmd2YmEpOwogICAgICAgICAgIAogICAgICAgICAgICAvLyBGdWJqIGFiZ3ZzdnBuZ3ZiYQogICAgICAgICAgICBmcmdHdnpyYmhnKCgpID0+IGFiZ3ZzdnBuZ3ZiYS5weW5mZll2ZmcubnFxKCdmdWJqJyksIDEwMCk7CiAgICAgICAgICAgCiAgICAgICAgICAgIC8vIE5oZ2IgZXJ6YmlyIG5zZ3JlIDUgZnJwYmFxZgogICAgICAgICAgICBmcmdHdnpyYmhnKCgpID0+IHsKICAgICAgICAgICAgICAgIGFiZ3ZzdnBuZ3ZiYS5weW5mZll2ZmcuZXJ6YmlyKCdmdWJqJyk7CiAgICAgICAgICAgICAgICBmcmdHdnpyYmhnKCgpID0+IGFiZ3ZzdnBuZ3ZiYS5lcnpiaXIoKSwgMzAwKTsKICAgICAgICAgICAgfSwgNTAwMCk7CiAgICAgICAgfQogICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09IEhHVllWR0wgU0hBUEdWQkFGID09PT09PT09PT09PT09PT09PT09CiAgICAgICAgc2hhcGd2YmEgcGJjbEVyZmh5Z2YocnlyenJhZ1ZxKSB7CiAgICAgICAgICAgIHBiYWZnIHJ5cnpyYWcgPSBxYnBoenJhZy50cmdSeXJ6cmFnT2xWcShyeXJ6cmFnVnEpOwogICAgICAgICAgICB2cyAocnlyenJhZykgewogICAgICAgICAgICAgICAgYW5pdnRuZ2JlLnB5dmNvYm5lcS5qZXZnckdya2cocnlyenJhZy5ncmtnUGJhZ3JhZykuZ3VyYSgoKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgZnViakFiZ3ZzdnBuZ3ZiYSgnRXJmaHlnZiBwYmN2cnEgZ2IgcHl2Y29ibmVxIScsICdmaHBwcmZmJyk7CiAgICAgICAgICAgICAgICB9KS5wbmdwdSgoKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgLy8gU255eW9ucHggc2JlIGJ5cXJlIG9lYmpmcmVmCiAgICAgICAgICAgICAgICAgICAgcGJhZmcgZ3JrZ05lcm4gPSBxYnBoenJhZy5wZXJuZ3JSeXJ6cmFnKCdncmtnbmVybicpOwogICAgICAgICAgICAgICAgICAgIGdya2dOZXJuLmlueWhyID0gcnlyenJhZy5ncmtnUGJhZ3JhZzsKICAgICAgICAgICAgICAgICAgICBxYnBoenJhZy5vYnFsLm5jY3JhcVB1dnlxKGdya2dOZXJuKTsKICAgICAgICAgICAgICAgICAgICBncmtnTmVybi5mcnlycGcoKTsKICAgICAgICAgICAgICAgICAgICBxYnBoenJhZy5ya3JwUGJ6em5hcSgncGJjbCcpOwogICAgICAgICAgICAgICAgICAgIHFicGh6cmFnLm9icWwuZXJ6YmlyUHV2eXEoZ3JrZ05lcm4pOwogICAgICAgICAgICAgICAgICAgIGZ1YmpBYmd2c3Zwbmd2YmEoJ0VyZmh5Z2YgcGJjdnJxIGdiIHB5dmNvYm5lcSEnLCAnZmhwcHJmZicpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgc2hhcGd2YmEgc2Jlem5nU3Z5ckZ2bXIob2xncmYpIHsKICAgICAgICAgICAgdnMgKG9sZ3JmID09PSAwKSBlcmdoZWEgJzAgT2xncmYnOwogICAgICAgICAgICBwYmFmZyB4ID0gMTAyNDsKICAgICAgICAgICAgcGJhZmcgZnZtcmYgPSBbJ09sZ3JmJywgJ1hPJywgJ1pPJywgJ1RPJ107CiAgICAgICAgICAgIHBiYWZnIHYgPSBabmd1LnN5YmJlKFpuZ3UueWJ0KG9sZ3JmKSAvIFpuZ3UueWJ0KHgpKTsKICAgICAgICAgICAgZXJnaGVhIGNuZWZyU3libmcoKG9sZ3JmIC8gWm5ndS5jYmooeCwgdikpLmdiU3ZrcnEoMikpICsgJyAnICsgZnZtcmZbdl07CiAgICAgICAgfQogICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09IE5XTksgVVJZQ1JFID09PT09PT09PT09PT09PT09PT09CiAgICAgICAgc2hhcGd2YmEgem54ckVyZGhyZmcoaGV5LCB6cmd1YnEsIHFuZ24sIHBueXlvbnB4LCByZWViZVBueXlvbnB4KSB7CiAgICAgICAgICAgIHBiYWZnIGt1ZSA9IGFyaiBLWllVZ2djRXJkaHJmZygpOwogICAgICAgICAgICBrdWUuYmNyYSh6cmd1YnEsIGhleSwgZ2Vocik7CiAgICAgICAgICAgCiAgICAgICAgICAgIGt1ZS5iYWVybnFsZmduZ3JwdW5hdHIgPSBzaGFwZ3ZiYSgpIHsKICAgICAgICAgICAgICAgIHZzIChrdWUuZXJucWxGZ25nciA9PT0gNCkgewogICAgICAgICAgICAgICAgICAgIHV2cXJZYm5xdmF0KCk7CiAgICAgICAgICAgICAgICAgICAgdnMgKGt1ZS5mZ25naGYgPT09IDIwMCkgewogICAgICAgICAgICAgICAgICAgICAgICBnZWwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGJhZmcgZXJmY2JhZnIgPSBXRkJBLmNuZWZyKGt1ZS5lcmZjYmFmckdya2cpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcG55eW9ucHgoZXJmY2JhZnIpOwogICAgICAgICAgICAgICAgICAgICAgICB9IHBuZ3B1IChyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbnl5b25weCh7ZmduZ2hmOiBzbnlmciwgenJmZm50cjogJ1ZhaW55dnEgZnJlaXJlIGVyZmNiYWZyJ30pOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSByeWZyIHsKICAgICAgICAgICAgICAgICAgICAgICAgdnMgKHJlZWJlUG55eW9ucHgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZWJlUG55eW9ucHgoJ0FyZ2piZXggcmVlYmU6ICcgKyBrdWUuZmduZ2hmKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSByeWZyIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1YmpBYmd2c3Zwbmd2YmEoJ0FyZ2piZXggcmVlYmU6ICcgKyBrdWUuZmduZ2hmLCAncmVlYmUnKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTsKICAgICAgICAgICAKICAgICAgICAgICAgdnMgKHpyZ3VicSA9PT0gJ0NCRkcnICYmICEocW5nbiB2YWZnbmFwcmJzIFNiZXpRbmduKSkgewogICAgICAgICAgICAgICAga3VlLmZyZ0VyZGhyZmdVcm5xcmUoJ1BiYWdyYWctR2xjcicsICduY2N5dnBuZ3ZiYS9rLWpqai1zYmV6LWhleXJhcGJxcnEnKTsKICAgICAgICAgICAgICAgIHBiYWZnIHNiZXpRbmduID0gYXJqIEhFWUZybmVwdUNuZW56ZihxbmduKS5nYkZnZXZhdCgpOwogICAgICAgICAgICAgICAga3VlLmZyYXEoc2JlelFuZ24pOwogICAgICAgICAgICB9IHJ5ZnIgewogICAgICAgICAgICAgICAga3VlLmZyYXEocW5nbik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT0gRlpHQyBQRVJOR0JFIFNIQVBHVkJBRiA9PT09PT09PT09PT09PT09PT09PQogICAgICAgIHNoYXBndmJhIHBlcm5nckZ2YXR5ckZaR0MoKSB7CiAgICAgICAgICAgIGZ1YmpZYm5xdmF0KCdQZXJuZ3ZhdCBGWkdDIG5wcGJoYWcgaGZ2YXQgcmtucGcgZXJzcmVyYXByIHpyZ3VicS4uLicpOwogICAgICAgICAgIAogICAgICAgICAgICB6bnhyRXJkaHJmZygnJywgJ0NCRkcnLCB7bnBndmJhOiAncGVybmdyX2Z2YXR5cl9memdjJ30sIHNoYXBndmJhKGVyZmNiYWZyKSB7CiAgICAgICAgICAgICAgICBwYmFmZyBlcmZoeWdmUXZpID0gcWJwaHpyYWcudHJnUnlyenJhZ09sVnEoJ2Z6Z2MtZXJmaHlnZicpOwogICAgICAgICAgICAgICAgcGJhZmcgYmhnY2hnUXZpID0gcWJwaHpyYWcudHJnUnlyenJhZ09sVnEoJ2Z6Z2MtYmhnY2hnJyk7CiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdnMgKGVyZmNiYWZyLmZnbmdoZikgewogICAgICAgICAgICAgICAgICAgIGJoZ2NoZ1F2aS5ncmtnUGJhZ3JhZyA9IGVyZmNiYWZyLmZ6Z2NfcW5nbiB8fCBlcmZjYmFmci56cmZmbnRyOwogICAgICAgICAgICAgICAgICAgIGZ1YmpBYmd2c3Zwbmd2YmEoJ0ZaR0MgbnBwYmhhZyBwZXJuZ3JxIGZocHByZmZzaHl5bCEnLCAnZmhwcHJmZicpOwogICAgICAgICAgICAgICAgfSByeWZyIHsKICAgICAgICAgICAgICAgICAgICBiaGdjaGdRdmkuZ3JrZ1BiYWdyYWcgPSBlcmZjYmFmci56cmZmbnRyIHx8ICdTbnZ5cnEgZ2IgcGVybmdyIEZaR0MgbnBwYmhhZyc7CiAgICAgICAgICAgICAgICAgICAgZnViakFiZ3ZzdnBuZ3ZiYSgnU252eXJxIGdiIHBlcm5nciBGWkdDIG5wcGJoYWcnLCAncmVlYmUnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBlcmZoeWdmUXZpLmZnbHlyLnF2ZmN5bmwgPSAnb3licHgnOwogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT0gRVJRVkVSUEcgUEVSTkdCRSBTSEFQR1ZCQUYgPT09PT09PT09PT09PT09PT09PT0KICAgICAgICBxYnBoenJhZy50cmdSeXJ6cmFnT2xWcSgnZXJxdmVycGctc2JleicpLm5xcVJpcmFnWXZmZ3JhcmUoJ2Zob3p2ZycsIHNoYXBndmJhKHIpIHsKICAgICAgICAgICAgci5jZXJpcmFnUXJzbmh5ZygpOwogICAgICAgICAgIAogICAgICAgICAgICBwYmFmZyBnbmV0cmdIZXkgPSBxYnBoenJhZy50cmdSeXJ6cmFnT2xWcSgnZ25ldHJnLWhleScpLmlueWhyOwogICAgICAgICAgICBwYmFmZyBwaGZnYnpacmZmbnRyID0gcWJwaHpyYWcudHJnUnlyenJhZ09sVnEoJ3BoZmdiei16cmZmbnRyJykuaW55aHI7CiAgICAgICAgICAgIHBiYWZnIHFyeW5sID0gcWJwaHpyYWcudHJnUnlyenJhZ09sVnEoJ3FyeW5sJykuaW55aHI7CiAgICAgICAgICAgIHBiYWZnIG95YnB4cnFQYmhhZ2V2cmYgPSBxYnBoenJhZy50cmdSeXJ6cmFnT2xWcSgnb3licHhycS1wYmhhZ2V2cmYnKS5pbnlocjsKICAgICAgICAgICAgcGJhZmcgaGZyUG5jZ3B1biA9IHFicGh6cmFnLnRyZ1J5cnpyYWdPbFZxKCdoZnItcG5jZ3B1bicpLnB1cnB4cnE7CiAgICAgICAgICAgCiAgICAgICAgICAgIHZzICghZ25ldHJnSGV5KSB7CiAgICAgICAgICAgICAgICBmdWJqQWJndnN2cG5ndmJhKCdDeXJuZnIgcmFncmUgbiBnbmV0cmcgSEVZJywgJ2puZWF2YXQnKTsKICAgICAgICAgICAgICAgIGVyZ2hlYTsKICAgICAgICAgICAgfQogICAgICAgICAgIAogICAgICAgICAgICBmdWJqWWJucXZhdCgnUGVybmd2YXQgZXJxdmVycGcgc3Z5cmYuLi4nKTsKICAgICAgICAgICAKICAgICAgICAgICAgcGJhZmcgcW5nbiA9IHsKICAgICAgICAgICAgICAgIG5wZ3ZiYTogJ3Blcm5ncl9lcnF2ZXJwZycsCiAgICAgICAgICAgICAgICBnbmV0cmdfaGV5OiBnbmV0cmdIZXksCiAgICAgICAgICAgICAgICBwaGZnYnpfenJmZm50cjogcGhmZ2J6WnJmZm50ciwKICAgICAgICAgICAgICAgIHFyeW5sOiBxcnlubCwKICAgICAgICAgICAgICAgIG95YnB4cnFfcGJoYWdldnJmOiBveWJweHJxUGJoYWdldnJmLAogICAgICAgICAgICAgICAgaGZyX3BuY2dwdW46IGhmclBuY2dwdW4KICAgICAgICAgICAgfTsKICAgICAgICAgICAKICAgICAgICAgICAgem54ckVyZGhyZmcoJycsICdDQkZHJywgcW5nbiwgc2hhcGd2YmEoZXJmY2JhZnIpIHsKICAgICAgICAgICAgICAgIHBiYWZnIGVyZmh5Z2ZRdmkgPSBxYnBoenJhZy50cmdSeXJ6cmFnT2xWcSgnZXJxdmVycGctZXJmaHlnZicpOwogICAgICAgICAgICAgICAgcGJhZmcgYmhnY2hnUXZpID0gcWJwaHpyYWcudHJnUnlyenJhZ09sVnEoJ2VycXZlcnBnLWJoZ2NoZycpOwogICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZzIChlcmZjYmFmci5mZ25naGYpIHsKICAgICAgICAgICAgICAgICAgICB5cmcgYmhnY2hnID0gYOKchSBFcnF2ZXJwZyBzdnlyZiBwZXJuZ3JxIGZocHByZmZzaHl5bCFcYVxhYDsKICAgICAgICAgICAgICAgICAgICBiaGdjaGcgKz0gYPCfk4EgU3Z5cmYgcGVybmdycTpcYWA7CiAgICAgICAgICAgICAgICAgICAgYmhnY2hnICs9IGDigKIgJHtlcmZjYmFmci5lcnF2ZXJwZ192cX0uY3VjIChDVUMgaXJlZnZiYSlcYWA7CiAgICAgICAgICAgICAgICAgICAgYmhnY2hnICs9IGDigKIgJHtlcmZjYmFmci5lcnF2ZXJwZ192cX1fY3VjNy5jdWMgKENVQzcgaXJlZnZiYSlcYWA7CiAgICAgICAgICAgICAgICAgICAgYmhnY2hnICs9IGDigKIgJHtlcmZjYmFmci5lcnF2ZXJwZ192cX0udWd6eSAoVUdaWSBpcmVmdmJhKVxhXGFgOwogICAgICAgICAgICAgICAgICAgIGJoZ2NoZyArPSBg8J+UlyBOcHByZmYgSEVZZjpcYWA7CiAgICAgICAgICAgICAgICAgICAgYmhnY2hnICs9IGDigKIgJHtqdmFxYmoueWJwbmd2YmEuYmV2dHZhfSR7anZhcWJqLnlicG5ndmJhLmNuZ3VhbnpyLmVyY3lucHIoL1teL10qJC8sICcnKX0ke2VyZmNiYWZyLmVycXZlcnBnX3ZxfS5jdWNcYWA7CiAgICAgICAgICAgICAgICAgICAgYmhnY2hnICs9IGDigKIgJHtqdmFxYmoueWJwbmd2YmEuYmV2dHZhfSR7anZhcWJqLnlicG5ndmJhLmNuZ3VhbnpyLmVyY3lucHIoL1teL10qJC8sICcnKX0ke2VyZmNiYWZyLmVycXZlcnBnX3ZxfV9jdWM3LmN1Y1xhYDsKICAgICAgICAgICAgICAgICAgICBiaGdjaGcgKz0gYOKAoiAke2p2YXFiai55YnBuZ3ZiYS5iZXZ0dmF9JHtqdmFxYmoueWJwbmd2YmEuY25ndWFuenIuZXJjeW5wcigvW14vXSokLywgJycpfSR7ZXJmY2JhZnIuZXJxdmVycGdfdnF9LnVnenlcYVxhYDsKICAgICAgICAgICAgICAgICAgICBiaGdjaGcgKz0gYPCfk4ogRmduZ3ZmZ3ZwZiBzdnlyOiAke2VyZmNiYWZyLmVycXZlcnBnX3ZxfV9mZ25nZi53ZmJhXGFgOwogICAgICAgICAgICAgICAgICAgIGJoZ2NoZyArPSBg8J+OryBHbmV0cmcgSEVZOiAke2duZXRyZ0hleX1cYWA7CiAgICAgICAgICAgICAgICAgICAgYmhnY2hnICs9IGDij7HvuI8gUXJ5bmw6ICR7cXJ5bmx9emZcYWA7CiAgICAgICAgICAgICAgICAgICAgYmhnY2hnICs9IGDwn5qrIE95YnB4cnEgcGJoYWdldnJmOiAke295YnB4cnFQYmhhZ2V2cmYgfHwgJ0FiYXInfVxhYDsKICAgICAgICAgICAgICAgICAgICBiaGdjaGcgKz0gYPCfm6HvuI8gUG5jZ3B1biBjZWJncnBndmJhOiAke2hmclBuY2dwdW4gPyAnUmFub3lycScgOiAnUXZmbm95cnEnfWA7CiAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBiaGdjaGdRdmkuZ3JrZ1BiYWdyYWcgPSBiaGdjaGc7CiAgICAgICAgICAgICAgICAgICAgcGhlZXJhZ0VycXZlcnBnVnEgPSBlcmZjYmFmci5lcnF2ZXJwZ192cTsKICAgICAgICAgICAgICAgICAgICBmdWJqQWJndnN2cG5ndmJhKCdFcnF2ZXJwZyBzdnlyZiBwZXJuZ3JxIGZocHByZmZzaHl5bCEnLCAnZmhwcHJmZicpOwogICAgICAgICAgICAgICAgfSByeWZyIHsKICAgICAgICAgICAgICAgICAgICBiaGdjaGdRdmkuZ3JrZ1BiYWdyYWcgPSBlcmZjYmFmci56cmZmbnRyIHx8ICdTbnZ5cnEgZ2IgcGVybmdyIGVycXZlcnBnIHN2eXJmJzsKICAgICAgICAgICAgICAgICAgICBmdWJqQWJndnN2cG5ndmJhKCdTbnZ5cnEgZ2IgcGVybmdyIGVycXZlcnBnIHN2eXJmJywgJ3JlZWJlJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgZXJmaHlnZlF2aS5mZ2x5ci5xdmZjeW5sID0gJ295YnB4JzsKICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgICAgc2hhcGd2YmEgZnViakVycXZlcnBnRmduZ2YoKSB7CiAgICAgICAgICAgIHZzICghcGhlZXJhZ0VycXZlcnBnVnEpIHsKICAgICAgICAgICAgICAgIGZ1YmpBYmd2c3Zwbmd2YmEoJ0FiIGVycXZlcnBnIFZRIG5pbnZ5bm95cicsICdqbmVhdmF0Jyk7CiAgICAgICAgICAgICAgICBlcmdoZWE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAKICAgICAgICAgICAgZnViallibnF2YXQoJ1libnF2YXQgZmduZ3ZmZ3ZwZi4uLicpOwogICAgICAgICAgIAogICAgICAgICAgICB6bnhyRXJkaHJmZygnJywgJ0NCRkcnLCB7CiAgICAgICAgICAgICAgICBucGd2YmE6ICd0cmdfZXJxdmVycGdfZmduZ2YnLAogICAgICAgICAgICAgICAgZXJxdmVycGdfdnE6IHBoZWVyYWdFcnF2ZXJwZ1ZxCiAgICAgICAgICAgIH0sIHNoYXBndmJhKGVyZmNiYWZyKSB7CiAgICAgICAgICAgICAgICB2cyAoZXJmY2JhZnIuZmduZ2hmICYmIGVyZmNiYWZyLmZnbmdmKSB7CiAgICAgICAgICAgICAgICAgICAgcGJhZmcgZmduZ2YgPSBlcmZjYmFmci5mZ25nZjsKICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIHFicGh6cmFnLnRyZ1J5cnpyYWdPbFZxKCdnYmdueS1pdmZ2Z2YnKS5ncmtnUGJhZ3JhZyA9IGZnbmdmLmdiZ255X2l2ZnZnZiB8fCAwOwogICAgICAgICAgICAgICAgICAgIHFicGh6cmFnLnRyZ1J5cnpyYWdPbFZxKCdoYXZkaHItaXZmdmdmJykuZ3JrZ1BiYWdyYWcgPSBmZ25nZi5oYXZkaHJfaXZmdmdmIHx8IDA7CiAgICAgICAgICAgICAgICAgICAgcWJwaHpyYWcudHJnUnlyenJhZ09sVnEoJ2diZ255LWVycXZlcnBnZicpLmdya2dQYmFncmFnID0gZmduZ2YuZXJxdmVycGdmIHx8IDA7CiAgICAgICAgICAgICAgICAgICAgcWJwaHpyYWcudHJnUnlyenJhZ09sVnEoJ3BiYWlyZWZ2YmEtZW5ncicpLmdya2dQYmFncmFnID0gZmduZ2YucGJhaXJlZnZiYV9lbmdyICsgJyUnIHx8ICcwJSc7CiAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAvLyBGdWJqIHFyZ252eXJxIGZnbmdmCiAgICAgICAgICAgICAgICAgICAgeXJnIHFyZ252eXJxVWd6eSA9ICc8dTU+8J+TiCBRbnZ5bCBGZ25ndmZndnBmOjwvdTU+JzsKICAgICAgICAgICAgICAgICAgICB2cyAoZmduZ2YucW52eWxfZmduZ2YgJiYgQm93cnBnLnhybGYoZmduZ2YucW52eWxfZmduZ2YpLnlyYXRndSA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcXJnbnZ5cnFVZ3p5ICs9ICc8cXZpIHB5bmZmPSJ0ZXZxIHRldnEtMyIgZmdseXI9InpuZXR2YS1nYmM6IDE1Y2s7Ij4nOwogICAgICAgICAgICAgICAgICAgICAgICBCb3dycGcucmFnZXZyZihmZ25nZi5xbnZ5bF9mZ25nZikuZnl2cHIoLTcpLnNiZVJucHUoKFtxbmdyLCBxbmduXSkgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcXJnbnZ5cnFVZ3p5ICs9IGAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJ2YXNiLXZncnoiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJ5bm9yeSI+JHtxbmdyfTwvcXZpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJpbnlociI+SXZmdmdmOiAke3FuZ24uaXZmdmdmfSwgRXJxdmVycGdmOiAke3FuZ24uZXJxdmVycGdmfTwvcXZpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcXZpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgYDsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHFyZ252eXJxVWd6eSArPSAnPC9xdmk+JzsKICAgICAgICAgICAgICAgICAgICB9IHJ5ZnIgewogICAgICAgICAgICAgICAgICAgICAgICBxcmdudnlycVVnenkgKz0gJzxjIGZnbHlyPSJwYnliZTogaW5lKC0tZ3JrZy16aGdycSk7IHpuZXR2YS1nYmM6IDEwY2s7Ij5BYiBxbnZ5bCBmZ25ndmZndnBmIG5pbnZ5bm95ciBscmcuPC9jPic7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgcWJwaHpyYWcudHJnUnlyenJhZ09sVnEoJ3FyZ252eXJxLWZnbmdmJykudmFhcmVVR1pZID0gcXJnbnZ5cnFVZ3p5OwogICAgICAgICAgICAgICAgICAgIHFicGh6cmFnLnRyZ1J5cnpyYWdPbFZxKCdlcnF2ZXJwZy1mZ25nZicpLmZnbHlyLnF2ZmN5bmwgPSAnb3licHgnOwogICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgZnViakFiZ3ZzdnBuZ3ZiYSgnRmduZ3ZmZ3ZwZiB5Ym5xcnEgZmhwcHJmZnNoeXlsIScsICdmaHBwcmZmJyk7CiAgICAgICAgICAgICAgICB9IHJ5ZnIgewogICAgICAgICAgICAgICAgICAgIGZ1YmpBYmd2c3Zwbmd2YmEoJ1NudnlycSBnYiB5Ym5xIGZnbmd2Zmd2cGYnLCAncmVlYmUnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIHNoYXBndmJhIGVyc2VyZnVGZ25nZigpIHsKICAgICAgICAgICAgZnViakVycXZlcnBnRmduZ2YoKTsKICAgICAgICB9CiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT0gUEJBR05QRyBSS0dFTlBHQkUgU0hBUEdWQkFGID09PT09PT09PT09PT09PT09PT09CiAgICAgICAgcWJwaHpyYWcudHJnUnlyenJhZ09sVnEoJ3JrZ2VucGctc2JleicpLm5xcVJpcmFnWXZmZ3JhcmUoJ2Zob3p2ZycsIHNoYXBndmJhKHIpIHsKICAgICAgICAgICAgci5jZXJpcmFnUXJzbmh5ZygpOwogICAgICAgICAgIAogICAgICAgICAgICBwYmFmZyBmcG5hQ25ndSA9IHFicGh6cmFnLnRyZ1J5cnpyYWdPbFZxKCdmcG5hLWNuZ3UnKS5pbnlocjsKICAgICAgICAgICAgcGJhZmcgem5rU3Z5cmYgPSBxYnBoenJhZy50cmdSeXJ6cmFnT2xWcSgnem5rLXN2eXJmJykuaW55aHI7CiAgICAgICAgICAgCiAgICAgICAgICAgIHZzICghZnBuYUNuZ3UpIHsKICAgICAgICAgICAgICAgIGZ1YmpBYmd2c3Zwbmd2YmEoJ0N5cm5mciByYWdyZSBuIGZwbmEgY25ndScsICdqbmVhdmF0Jyk7CiAgICAgICAgICAgICAgICBlcmdoZWE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAKICAgICAgICAgICAgZnViallibnF2YXQoJ1JrZ2VucGd2YXQgcGJhZ25wZ2YuLi4gR3V2ZiB6bmwgZ254ciBuIGp1dnlyLi4uJyk7CiAgICAgICAgICAgCiAgICAgICAgICAgIHBiYWZnIHFuZ24gPSB7CiAgICAgICAgICAgICAgICBucGd2YmE6ICdya2dlbnBnX3BiYWducGdmJywKICAgICAgICAgICAgICAgIGZwbmFfY25ndTogZnBuYUNuZ3UsCiAgICAgICAgICAgICAgICB6bmtfc3Z5cmY6IHpua1N2eXJmCiAgICAgICAgICAgIH07CiAgICAgICAgICAgCiAgICAgICAgICAgIHpueHJFcmRocmZnKCcnLCAnQ0JGRycsIHFuZ24sIHNoYXBndmJhKGVyZmNiYWZyKSB7CiAgICAgICAgICAgICAgICBwYmFmZyBlcmZoeWdmUXZpID0gcWJwaHpyYWcudHJnUnlyenJhZ09sVnEoJ3JrZ2VucGctZXJmaHlnZicpOwogICAgICAgICAgICAgICAgcGJhZmcgYmhnY2hnUXZpID0gcWJwaHpyYWcudHJnUnlyenJhZ09sVnEoJ3JrZ2VucGctYmhnY2hnJyk7CiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdnMgKGVyZmNiYWZyLmZnbmdoZikgewogICAgICAgICAgICAgICAgICAgIHlyZyBiaGdjaGcgPSBg4pyFIFBiYWducGcgcmtnZW5wZ3ZiYSBwYnpjeXJncnEhXGFcYWA7CiAgICAgICAgICAgICAgICAgICAgYmhnY2hnICs9IGDwn5OKIFJrZ2VucGd2YmEgRmduZ3ZmZ3ZwZjpcYWA7CiAgICAgICAgICAgICAgICAgICAgYmhnY2hnICs9IGDigKIgU3Z5cmYgZnBuYWFycTogJHtlcmZjYmFmci5mZ25nZi5zdnlyZl9mcG5hYXJxfVxhYDsKICAgICAgICAgICAgICAgICAgICBiaGdjaGcgKz0gYOKAoiBSem52eWYgc2JoYXE6ICR7ZXJmY2JhZnIuZmduZ2YucnpudnlmX3NiaGFxfVxhYDsKICAgICAgICAgICAgICAgICAgICBiaGdjaGcgKz0gYOKAoiBDdWJhciBhaHpvcmVmIHNiaGFxOiAke2VyZmNiYWZyLmZnbmdmLmN1YmFyZl9zYmhhcX1cYWA7CiAgICAgICAgICAgICAgICAgICAgYmhnY2hnICs9IGDigKIgRnBuYSBndnpyOiAke2VyZmNiYWZyLmZnbmdmLmZwbmFfZ3Z6cn0gZnJwYmFxZlxhYDsKICAgICAgICAgICAgICAgICAgICBiaGdjaGcgKz0gYOKAoiBGcG5hIGNuZ3U6ICR7ZXJmY2JhZnIuZmduZ2YuZnBuYV9jbmd1fVxhXGFgOwogICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgdnMgKGVyZmNiYWZyLnJ6bnZ5ZiAmJiBlcmZjYmFmci5yem52eWYueXJhdGd1ID4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICBiaGdjaGcgKz0gYPCfk6cgUnpudnkgTnFxZXJmZnJmICgke2VyZmNiYWZyLnJ6bnZ5Zi55cmF0Z3V9KTpcYWA7CiAgICAgICAgICAgICAgICAgICAgICAgIGVyZmNiYWZyLnJ6bnZ5Zi5zYmVSbnB1KHJ6bnZ5ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJoZ2NoZyArPSBg4oCiICR7cnpudnl9XGFgOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgYmhnY2hnICs9ICdcYSc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgdnMgKGVyZmNiYWZyLmN1YmFyZiAmJiBlcmZjYmFmci5jdWJhcmYueXJhdGd1ID4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICBiaGdjaGcgKz0gYPCfk54gQ3ViYXIgQWh6b3JlZiAoJHtlcmZjYmFmci5jdWJhcmYueXJhdGd1fSk6XGFgOwogICAgICAgICAgICAgICAgICAgICAgICBlcmZjYmFmci5jdWJhcmYuc2JlUm5wdShjdWJhciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaGdjaGcgKz0gYOKAoiAke2N1YmFyfVxhYDsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgYmhnY2hnUXZpLmdya2dQYmFncmFnID0gYmhnY2hnOwogICAgICAgICAgICAgICAgICAgIGZ1YmpBYmd2c3Zwbmd2YmEoYFNiaGFxICR7ZXJmY2JhZnIuZmduZ2YucnpudnlmX3NiaGFxfSByem52eWYgbmFxICR7ZXJmY2JhZnIuZmduZ2YuY3ViYXJmX3NiaGFxfSBjdWJhciBhaHpvcmVmIWAsICdmaHBwcmZmJyk7CiAgICAgICAgICAgICAgICB9IHJ5ZnIgewogICAgICAgICAgICAgICAgICAgIGJoZ2NoZ1F2aS5ncmtnUGJhZ3JhZyA9IGVyZmNiYWZyLnpyZmZudHIgfHwgJ1NudnlycSBnYiBya2dlbnBnIHBiYWducGdmJzsKICAgICAgICAgICAgICAgICAgICBmdWJqQWJndnN2cG5ndmJhKCdTbnZ5cnEgZ2IgcmtnZW5wZyBwYmFnbnBnZicsICdyZWViZScpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGVyZmh5Z2ZRdmkuZmdseXIucXZmY3lubCA9ICdveWJweCc7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09IFJaTlZZIFpORVhSR1ZBVCBTSEFQR1ZCQUYgPT09PT09PT09PT09PT09PT09PT0KICAgICAgICBxYnBoenJhZy50cmdSeXJ6cmFnT2xWcSgnaGZyLXBoZmdiei1memdjLXJ6bnZ5JykubnFxUmlyYWdZdmZncmFyZSgncHVuYXRyJywgc2hhcGd2YmEoKSB7CiAgICAgICAgICAgIHBiYWZnIGZ6Z2NQYmFzdnQgPSBxYnBoenJhZy50cmdSeXJ6cmFnT2xWcSgnZnpnYy1wYmFzdnQtcnpudnknKTsKICAgICAgICAgICAgZnpnY1BiYXN2dC5mZ2x5ci5xdmZjeW5sID0gZ3V2Zi5wdXJweHJxID8gJ295YnB4JyA6ICdhYmFyJzsKICAgICAgICB9KTsKICAgICAgICBxYnBoenJhZy50cmdSeXJ6cmFnT2xWcSgncnpudnktc2JleicpLm5xcVJpcmFnWXZmZ3JhcmUoJ2Zob3p2ZycsIHNoYXBndmJhKHIpIHsKICAgICAgICAgICAgci5jZXJpcmFnUXJzbmh5ZygpOwogICAgICAgICAgIAogICAgICAgICAgICBwYmFmZyBzZWJ6QW56ciA9IHFicGh6cmFnLnRyZ1J5cnpyYWdPbFZxKCdyem52eS1zZWJ6LWFuenInKS5pbnlocjsKICAgICAgICAgICAgcGJhZmcgc2VielJ6bnZ5ID0gcWJwaHpyYWcudHJnUnlyenJhZ09sVnEoJ3J6bnZ5LXNlYnotcnpudnknKS5pbnlocjsKICAgICAgICAgICAgcGJhZmcgZmhvd3JwZyA9IHFicGh6cmFnLnRyZ1J5cnpyYWdPbFZxKCdyem52eS1maG93cnBnJykuaW55aHI7CiAgICAgICAgICAgIHBiYWZnIHpyZmZudHIgPSBxYnBoenJhZy50cmdSeXJ6cmFnT2xWcSgncnpudnktenJmZm50cicpLmlueWhyOwogICAgICAgICAgICBwYmFmZyByem52eWYgPSBxYnBoenJhZy50cmdSeXJ6cmFnT2xWcSgncnpudnkteXZmZycpLmlueWhyOwogICAgICAgICAgICBwYmFmZyBoZnJQaGZnYnpGWkdDID0gcWJwaHpyYWcudHJnUnlyenJhZ09sVnEoJ2hmci1waGZnYnotZnpnYy1yem52eScpLnB1cnB4cnE7CiAgICAgICAgICAgCiAgICAgICAgICAgIHZzICghc2ViekFuenIgfHwgIXNlYnpSem52eSB8fCAhZmhvd3JwZyB8fCAhenJmZm50ciB8fCAhcnpudnlmKSB7CiAgICAgICAgICAgICAgICBmdWJqQWJndnN2cG5ndmJhKCdDeXJuZnIgc3Z5eSB2YSBueXkgZXJkaHZlcnEgc3ZyeXFmJywgJ2puZWF2YXQnKTsKICAgICAgICAgICAgICAgIGVyZ2hlYTsKICAgICAgICAgICAgfQogICAgICAgICAgIAogICAgICAgICAgICBwYmFmZyByem52eVBiaGFnID0gcnpudnlmLmZjeXZnKCdcYScpLnN2eWdyZShyem52eSA9PiByem52eS5nZXZ6KCkpLnlyYXRndTsKICAgICAgICAgICAgdnMgKHJ6bnZ5UGJoYWcgPT09IDApIHsKICAgICAgICAgICAgICAgIGZ1YmpBYmd2c3Zwbmd2YmEoJ0N5cm5mciByYWdyZSBuZyB5cm5mZyBiYXIgcnpudnkgbnFxZXJmZicsICdqbmVhdmF0Jyk7CiAgICAgICAgICAgICAgICBlcmdoZWE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAKICAgICAgICAgICAgZnViallibnF2YXQoYEZyYXF2YXQgcnpudnlmIGdiICR7cnpudnlQYmhhZ30gZXJwdmN2cmFnZi4uLmApOwogICAgICAgICAgIAogICAgICAgICAgICBwYmFmZyBxbmduID0gewogICAgICAgICAgICAgICAgbnBndmJhOiAnZnJhcV9yem52eWYnLAogICAgICAgICAgICAgICAgc2Viel9hbnpyOiBzZWJ6QW56ciwKICAgICAgICAgICAgICAgIHNlYnpfcnpudnk6IHNlYnpSem52eSwKICAgICAgICAgICAgICAgIGZob3dycGc6IGZob3dycGcsCiAgICAgICAgICAgICAgICB6cmZmbnRyOiB6cmZmbnRyLAogICAgICAgICAgICAgICAgcnpudnlmOiByem52eWYsCiAgICAgICAgICAgICAgICBoZnJfcGhmZ2J6X2Z6Z2M6IGhmclBoZmdiekZaR0MKICAgICAgICAgICAgfTsKICAgICAgICAgICAKICAgICAgICAgICAgdnMgKGhmclBoZmdiekZaR0MpIHsKICAgICAgICAgICAgICAgIHFuZ24uZnpnY191YmZnID0gcWJwaHpyYWcudHJnUnlyenJhZ09sVnEoJ2Z6Z2MtdWJmZy1yem52eScpLmlueWhyOwogICAgICAgICAgICAgICAgcW5nbi5memdjX2NiZWcgPSBxYnBoenJhZy50cmdSeXJ6cmFnT2xWcSgnZnpnYy1jYmVnLXJ6bnZ5JykuaW55aHI7CiAgICAgICAgICAgICAgICBxbmduLmZ6Z2NfaGZyZWFuenIgPSBxYnBoenJhZy50cmdSeXJ6cmFnT2xWcSgnZnpnYy1oZnJlYW56ci1yem52eScpLmlueWhyOwogICAgICAgICAgICAgICAgcW5nbi5memdjX2NuZmZqYmVxID0gcWJwaHpyYWcudHJnUnlyenJhZ09sVnEoJ2Z6Z2MtY25mZmpiZXEtcnpudnknKS5pbnlocjsKICAgICAgICAgICAgfQogICAgICAgICAgIAogICAgICAgICAgICB6bnhyRXJkaHJmZygnJywgJ0NCRkcnLCBxbmduLCBzaGFwZ3ZiYShlcmZjYmFmcikgewogICAgICAgICAgICAgICAgcGJhZmcgZXJmaHlnZlF2aSA9IHFicGh6cmFnLnRyZ1J5cnpyYWdPbFZxKCdyem52eS1lcmZoeWdmJyk7CiAgICAgICAgICAgICAgICBwYmFmZyBiaGdjaGdRdmkgPSBxYnBoenJhZy50cmdSeXJ6cmFnT2xWcSgncnpudnktYmhnY2hnJyk7CiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdnMgKGVyZmNiYWZyLmZnbmdoZikgewogICAgICAgICAgICAgICAgICAgIHlyZyBiaGdjaGcgPSBg4pyFIFJ6bnZ5IHBuemNudnRhIHBiemN5cmdycSFcYVxhYDsKICAgICAgICAgICAgICAgICAgICBiaGdjaGcgKz0gYPCfk4ogUG56Y252dGEgRmduZ3ZmZ3ZwZjpcYWA7CiAgICAgICAgICAgICAgICAgICAgYmhnY2hnICs9IGDigKIgR2JnbnkgY2VicHJmZnJxOiAke2VyZmNiYWZyLmZnbmdmLmdiZ255X2NlYnByZmZycX1cYWA7CiAgICAgICAgICAgICAgICAgICAgYmhnY2hnICs9IGDigKIgRmhwcHJmZnNoeXlsIGZyYWc6ICR7ZXJmY2JhZnIuZmduZ2YuZnJhZ31cYWA7CiAgICAgICAgICAgICAgICAgICAgYmhnY2hnICs9IGDigKIgU252eXJxOiAke2VyZmNiYWZyLmZnbmdmLnNudnlycX1cYWA7CiAgICAgICAgICAgICAgICAgICAgYmhnY2hnICs9IGDigKIgRmhwcHJmZiBlbmdyOiAke2VyZmNiYWZyLmZnbmdmLmZocHByZmZfZW5ncn0lXGFgOwogICAgICAgICAgICAgICAgICAgIGJoZ2NoZyArPSBg4oCiIFJrcnBoZ3ZiYSBndnpyOiAke2VyZmNiYWZyLmZnbmdmLnJrcnBoZ3ZiYV9ndnpyfSBmcnBiYXFmXGFcYWA7CiAgICAgICAgICAgICAgICAgICAgYmhnY2hnICs9IGDwn5OdIFFyZ252eXJxIEVyZmh5Z2Y6XGFgOwogICAgICAgICAgICAgICAgICAgIGVyZmNiYWZyLmVyZmh5Z2Yuc2JlUm5wdShlcmZoeWcgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBiaGdjaGcgKz0gYCR7ZXJmaHlnfVxhYDsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGJoZ2NoZ1F2aS5ncmtnUGJhZ3JhZyA9IGJoZ2NoZzsKICAgICAgICAgICAgICAgICAgICBmdWJqQWJndnN2cG5ndmJhKGBQbnpjbnZ0YSBwYnpjeXJncnEhIEZyYWc6ICR7ZXJmY2JhZnIuZmduZ2YuZnJhZ30sIFNudnlycTogJHtlcmZjYmFmci5mZ25nZi5zbnZ5cnF9YCwgJ2ZocHByZmYnKTsKICAgICAgICAgICAgICAgIH0gcnlmciB7CiAgICAgICAgICAgICAgICAgICAgYmhnY2hnUXZpLmdya2dQYmFncmFnID0gZXJmY2JhZnIuenJmZm50ciB8fCAnU252eXJxIGdiIGZyYXEgcnpudnlmJzsKICAgICAgICAgICAgICAgICAgICBmdWJqQWJndnN2cG5ndmJhKCdTbnZ5cnEgZ2IgZnJhcSByem52eWYnLCAncmVlYmUnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBlcmZoeWdmUXZpLmZnbHlyLnF2ZmN5bmwgPSAnb3licHgnOwogICAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PSBGVVJZWSBJTllWUU5HVkJBIFNIQVBHVkJBRiA9PT09PT09PT09PT09PT09PT09PQogICAgICAgIHFicGh6cmFnLnRyZ1J5cnpyYWdPbFZxKCdpbnl2cW5ndmJhLXNiZXonKS5ucXFSaXJhZ1l2ZmdyYXJlKCdmaG96dmcnLCBzaGFwZ3ZiYShyKSB7CiAgICAgICAgICAgIHIuY2VyaXJhZ1Fyc25oeWcoKTsKICAgICAgICAgICAKICAgICAgICAgICAgcGJhZmcgcnpudnkgPSBxYnBoenJhZy50cmdSeXJ6cmFnT2xWcSgnaW55dnFuZ3ZiYS1yem52eScpLmlueWhyOwogICAgICAgICAgICBwYmFmZyB2cSA9IHFicGh6cmFnLnRyZ1J5cnpyYWdPbFZxKCdpbnl2cW5ndmJhLXZxJykuaW55aHI7CiAgICAgICAgICAgCiAgICAgICAgICAgIHZzICghcnpudnkgfHwgIXZxKSB7CiAgICAgICAgICAgICAgICBmdWJqQWJndnN2cG5ndmJhKCdDeXJuZnIgc3Z5eSB2YSBueXkgc3ZyeXFmJywgJ2puZWF2YXQnKTsKICAgICAgICAgICAgICAgIGVyZ2hlYTsKICAgICAgICAgICAgfQogICAgICAgICAgIAogICAgICAgICAgICBmdWJqWWJucXZhdCgnRWhhYXZhdCBpbnl2cW5ndmJhIGdyZmdmLi4uJyk7CiAgICAgICAgICAgCiAgICAgICAgICAgIHBiYWZnIGhleSA9IGA/aW55dnE9MSZyem52eT0ke3JhcGJxckhFVlBiemNiYXJhZyhyem52eSl9JnZxPSR7cmFwYnFySEVWUGJ6Y2JhcmFnKHZxKX1gOwogICAgICAgICAgIAogICAgICAgICAgICBzcmdwdShoZXkpCiAgICAgICAgICAgICAgICAuZ3VyYShlcmZjYmFmciA9PiBlcmZjYmFmci53ZmJhKCkpCiAgICAgICAgICAgICAgICAuZ3VyYShlcmZjYmFmciA9PiB7CiAgICAgICAgICAgICAgICAgICAgdXZxcllibnF2YXQoKTsKICAgICAgICAgICAgICAgICAgICBwYmFmZyBlcmZoeWdmUXZpID0gcWJwaHpyYWcudHJnUnlyenJhZ09sVnEoJ2lueXZxbmd2YmEtZXJmaHlnZicpOwogICAgICAgICAgICAgICAgICAgIHBiYWZnIGJoZ2NoZ1F2aSA9IHFicGh6cmFnLnRyZ1J5cnpyYWdPbFZxKCdpbnl2cW5ndmJhLWJoZ2NoZycpOwogICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgdnMgKGVyZmNiYWZyLmZnbmdoZiA9PT0gJ2ZocHByZmYnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHlyZyBiaGdjaGcgPSBg4pyFIEZ1cnl5IGlueXZxbmd2YmEgcGJ6Y3lyZ3JxIGZocHByZmZzaHl5bCFcYVxhYDsKICAgICAgICAgICAgICAgICAgICAgICAgYmhnY2hnICs9IGDwn5SNIElueXZxbmd2YmEgUXJnbnZ5ZjpcYWA7CiAgICAgICAgICAgICAgICAgICAgICAgIGJoZ2NoZyArPSBg4oCiIFJ6bnZ5OiAke3J6bnZ5fVxhYDsKICAgICAgICAgICAgICAgICAgICAgICAgYmhnY2hnICs9IGDigKIgSW55dnFuZ3ZiYSBWUTogJHt2cX1cYWA7CiAgICAgICAgICAgICAgICAgICAgICAgIGJoZ2NoZyArPSBg4oCiIEd2enJmZ256YzogJHthcmogUW5ncihlcmZjYmFmci5ndnpyZmduemMgKiAxMDAwKS5nYllicG55ckZnZXZhdCgpfVxhYDsKICAgICAgICAgICAgICAgICAgICAgICAgYmhnY2hnICs9IGDigKIgSW55dnFuZ3ZiYSBVbmZ1OiAke2VyZmNiYWZyLmlueXZxbmd2YmFfdW5mdX1cYVxhYDsKICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgYmhnY2hnICs9IGDwn5al77iPIEZyZWlyZSBWYXNiZXpuZ3ZiYTpcYWA7CiAgICAgICAgICAgICAgICAgICAgICAgIHBiYWZnIHZhc2IgPSBlcmZjYmFmci52YXNiLnZhc2I7CiAgICAgICAgICAgICAgICAgICAgICAgIGJoZ2NoZyArPSBg4oCiIENVQyBJcmVmdmJhOiAke3Zhc2IuY3VjX2lyZWZ2YmF9XGFgOwogICAgICAgICAgICAgICAgICAgICAgICBiaGdjaGcgKz0gYOKAoiBGcmVpcmUgRmJzZ2puZXI6ICR7dmFzYi5mcmVpcmVfZmJzZ2puZXJ9XGFgOwogICAgICAgICAgICAgICAgICAgICAgICBiaGdjaGcgKz0gYOKAoiBQaGVlcmFnIEhmcmU6ICR7dmFzYi5waGVlcmFnX2hmcmV9XGFgOwogICAgICAgICAgICAgICAgICAgICAgICBiaGdjaGcgKz0gYOKAoiBGcmVpcmUgQW56cjogJHt2YXNiLmZyZWlyZV9hbnpyfVxhYDsKICAgICAgICAgICAgICAgICAgICAgICAgYmhnY2hnICs9IGDigKIgUWJwaHpyYWcgRWJiZzogJHt2YXNiLnFicGh6cmFnX2ViYmd9XGFgOwogICAgICAgICAgICAgICAgICAgICAgICBiaGdjaGcgKz0gYOKAoiBHcnpjIFF2ZXJwZ2JlbDogJHt2YXNiLmdyemNfcXZlfVxhXGFgOwogICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBiaGdjaGcgKz0gYPCflKcgUG5jbm92eXZndnJmOlxhYDsKICAgICAgICAgICAgICAgICAgICAgICAgcGJhZmcgcG5jZiA9IGVyZmNiYWZyLmZyZWlyZV92YXNiOwogICAgICAgICAgICAgICAgICAgICAgICBiaGdjaGcgKz0gYOKAoiBQSEVZIFJhbm95cnE6ICR7cG5jZi5waGV5X3Jhbm95cnEgPyAn4pyFJyA6ICfinYwnfVxhYDsKICAgICAgICAgICAgICAgICAgICAgICAgYmhnY2hnICs9IGDigKIgTVZDIFJhbm95cnE6ICR7cG5jZi5tdmNfcmFub3lycSA/ICfinIUnIDogJ+KdjCd9XGFgOwogICAgICAgICAgICAgICAgICAgICAgICBiaGdjaGcgKz0gYOKAoiBabnZ5IFJhbm95cnE6ICR7cG5jZi56bnZ5X3Jhbm95cnEgPyAn4pyFJyA6ICfinYwnfVxhYDsKICAgICAgICAgICAgICAgICAgICAgICAgYmhnY2hnICs9IGDigKIgU3Z5ciBIY3libnEgUmFub3lycTogJHtwbmNmLnN2eXJfaGN5Ym5xX3Jhbm95cnEgPyAn4pyFJyA6ICfinYwnfVxhYDsKICAgICAgICAgICAgICAgICAgICAgICAgYmhnY2hnICs9IGDigKIgWm5rIEhjeWJucSBGdm1yOiAke3BuY2Yuem5rX2hjeWJucV9mdm1yfVxhYDsKICAgICAgICAgICAgICAgICAgICAgICAgYmhnY2hnICs9IGDigKIgWnJ6YmVsIFl2enZnOiAke3BuY2YuenJ6YmVsX3l2enZnfVxhYDsKICAgICAgICAgICAgICAgICAgICAgICAgYmhnY2hnICs9IGDigKIgWm5rIFJrcnBoZ3ZiYSBHdnpyOiAke3BuY2Yuem5rX3JrcnBoZ3ZiYV9ndnpyfVxhXGFgOwogICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBiaGdjaGcgKz0gYPCfk6YgTVZDIFNoYXBndmJhbnl2Z2wgR3JmZzogJHtlcmZjYmFmci5tdmMgPyAn4pyFIENORkZSUScgOiAn4p2MIFNOVllSUSd9XGFgOwogICAgICAgICAgICAgICAgICAgICAgICBiaGdjaGcgKz0gYPCfk6cgUnpudnkgUXJ5dmlyZWwgR3JmZzogJHtlcmZjYmFmci5xcnl2aXJlbCA/ICfinIUgQ05GRlJRIChQdXJweCBsYmhlIHJ6bnZ5KScgOiAn4p2MIFNOVllSUSd9XGFcYWA7CiAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIGJoZ2NoZyArPSBg8J+TgSBKZXZnbm95ciBRdmVycGdiZXZyZjpcYWA7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhc2IuamV2Z25veXJfcXZlZi5zYmVSbnB1KHF2ZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaGdjaGcgKz0gYOKAoiAke3F2ZX1cYWA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBiaGdjaGdRdmkuZ3JrZ1BiYWdyYWcgPSBiaGdjaGc7CiAgICAgICAgICAgICAgICAgICAgICAgIGZ1YmpBYmd2c3Zwbmd2YmEoJ0lueXZxbmd2YmEgcGJ6Y3lyZ3JxIGZocHByZmZzaHl5bCEnLCAnZmhwcHJmZicpOwogICAgICAgICAgICAgICAgICAgIH0gcnlmciB7CiAgICAgICAgICAgICAgICAgICAgICAgIGJoZ2NoZ1F2aS5ncmtnUGJhZ3JhZyA9IGVyZmNiYWZyLnpyZmZudHIgfHwgJ0lueXZxbmd2YmEgc252eXJxJzsKICAgICAgICAgICAgICAgICAgICAgICAgZnViakFiZ3ZzdnBuZ3ZiYSgnSW55dnFuZ3ZiYSBzbnZ5cnEnLCAncmVlYmUnKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBlcmZoeWdmUXZpLmZnbHlyLnF2ZmN5bmwgPSAnb3licHgnOwogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIC5wbmdwdShyZWViZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgdXZxcllibnF2YXQoKTsKICAgICAgICAgICAgICAgICAgICBmdWJqQWJndnN2cG5ndmJhKCdBcmdqYmV4IHJlZWJlIHFoZXZhdCBpbnl2cW5ndmJhJywgJ3JlZWJlJyk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PSBTVllSIFpOQU5UUlpSQUcgU0hBUEdWQkFGID09PT09PT09PT09PT09PT09PT09CiAgICAgICAKICAgICAgICAvLyBQZXJuZ3IgU3Z5cgogICAgICAgIHFicGh6cmFnLnRyZ1J5cnpyYWdPbFZxKCdwZXJuZ3Itc3Z5ci1zYmV6JykubnFxUmlyYWdZdmZncmFyZSgnZmhvenZnJywgc2hhcGd2YmEocikgewogICAgICAgICAgICByLmNlcmlyYWdRcnNuaHlnKCk7CiAgICAgICAgICAgCiAgICAgICAgICAgIHBiYWZnIHN2eXJhbnpyID0gcWJwaHpyYWcudHJnUnlyenJhZ09sVnEoJ2Fyai1zdnlyYW56cicpLmlueWhyOwogICAgICAgICAgICBwYmFmZyBwYmFncmFnID0gcWJwaHpyYWcudHJnUnlyenJhZ09sVnEoJ2Fyai1zdnlyLXBiYWdyYWcnKS5pbnlocjsKICAgICAgICAgICAKICAgICAgICAgICAgdnMgKCFzdnlyYW56cikgewogICAgICAgICAgICAgICAgZnViakFiZ3ZzdnBuZ3ZiYSgnQ3lybmZyIHJhZ3JlIG4gc3Z5cmFuenInLCAnam5lYXZhdCcpOwogICAgICAgICAgICAgICAgZXJnaGVhOwogICAgICAgICAgICB9CiAgICAgICAgICAgCiAgICAgICAgICAgIGZ1YmpZYm5xdmF0KCdQZXJuZ3ZhdCBzdnlyLi4uJyk7CiAgICAgICAgICAgCiAgICAgICAgICAgIHpueHJFcmRocmZnKCcnLCAnQ0JGRycsIHsKICAgICAgICAgICAgICAgIG5wZ3ZiYTogJ3N2eXJfYmNyZW5ndmJhJywKICAgICAgICAgICAgICAgIGJjcmVuZ3ZiYTogJ3Blcm5ncl9zdnlyJywKICAgICAgICAgICAgICAgIHN2eXJhbnpyOiBzdnlyYW56ciwKICAgICAgICAgICAgICAgIHBiYWdyYWc6IHBiYWdyYWcKICAgICAgICAgICAgfSwgc2hhcGd2YmEoZXJmY2JhZnIpIHsKICAgICAgICAgICAgICAgIHZzIChlcmZjYmFmci5mZ25naGYpIHsKICAgICAgICAgICAgICAgICAgICBmdWJqQWJndnN2cG5ndmJhKGVyZmNiYWZyLnpyZmZudHIsICdmaHBwcmZmJyk7CiAgICAgICAgICAgICAgICAgICAgdXZxclpicW55KCdwZXJuZ3Itc3Z5ci16YnFueScpOwogICAgICAgICAgICAgICAgICAgIHlicG5ndmJhLmVyeWJucSgpOyAvLyBFcnNlcmZ1IGdiIGZ1YmogYXJqIHN2eXIKICAgICAgICAgICAgICAgIH0gcnlmciB7CiAgICAgICAgICAgICAgICAgICAgZnViakFiZ3ZzdnBuZ3ZiYShlcmZjYmFmci56cmZmbnRyLCAncmVlYmUnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgICAgLy8gUGVybmdyIFNieXFyZQogICAgICAgIHFicGh6cmFnLnRyZ1J5cnpyYWdPbFZxKCdwZXJuZ3Itc2J5cXJlLXNiZXonKS5ucXFSaXJhZ1l2ZmdyYXJlKCdmaG96dmcnLCBzaGFwZ3ZiYShyKSB7CiAgICAgICAgICAgIHIuY2VyaXJhZ1Fyc25oeWcoKTsKICAgICAgICAgICAKICAgICAgICAgICAgcGJhZmcgc2J5cXJlYW56ciA9IHFicGh6cmFnLnRyZ1J5cnpyYWdPbFZxKCdhcmotc2J5cXJlYW56cicpLmlueWhyOwogICAgICAgICAgIAogICAgICAgICAgICB2cyAoIXNieXFyZWFuenIpIHsKICAgICAgICAgICAgICAgIGZ1YmpBYmd2c3Zwbmd2YmEoJ0N5cm5mciByYWdyZSBuIHNieXFyZSBhbnpyJywgJ2puZWF2YXQnKTsKICAgICAgICAgICAgICAgIGVyZ2hlYTsKICAgICAgICAgICAgfQogICAgICAgICAgIAogICAgICAgICAgICBmdWJqWWJucXZhdCgnUGVybmd2YXQgc2J5cXJlLi4uJyk7CiAgICAgICAgICAgCiAgICAgICAgICAgIHpueHJFcmRocmZnKCcnLCAnQ0JGRycsIHsKICAgICAgICAgICAgICAgIG5wZ3ZiYTogJ3N2eXJfYmNyZW5ndmJhJywKICAgICAgICAgICAgICAgIGJjcmVuZ3ZiYTogJ3Blcm5ncl9zYnlxcmUnLAogICAgICAgICAgICAgICAgc2J5cXJlYW56cjogc2J5cXJlYW56cgogICAgICAgICAgICB9LCBzaGFwZ3ZiYShlcmZjYmFmcikgewogICAgICAgICAgICAgICAgdnMgKGVyZmNiYWZyLmZnbmdoZikgewogICAgICAgICAgICAgICAgICAgIGZ1YmpBYmd2c3Zwbmd2YmEoZXJmY2JhZnIuenJmZm50ciwgJ2ZocHByZmYnKTsKICAgICAgICAgICAgICAgICAgICB1dnFyWmJxbnkoJ3Blcm5nci1zYnlxcmUtemJxbnknKTsKICAgICAgICAgICAgICAgICAgICB5YnBuZ3ZiYS5lcnlibnEoKTsgLy8gRXJzZXJmdSBnYiBmdWJqIGFyaiBzYnlxcmUKICAgICAgICAgICAgICAgIH0gcnlmciB7CiAgICAgICAgICAgICAgICAgICAgZnViakFiZ3ZzdnBuZ3ZiYShlcmZjYmFmci56cmZmbnRyLCAncmVlYmUnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgICAgLy8gSGN5Ym5xIFN2eXIKICAgICAgICBxYnBoenJhZy50cmdSeXJ6cmFnT2xWcSgnaGN5Ym5xLXNiZXonKS5ucXFSaXJhZ1l2ZmdyYXJlKCdmaG96dmcnLCBzaGFwZ3ZiYShyKSB7CiAgICAgICAgICAgIHIuY2VyaXJhZ1Fyc25oeWcoKTsKICAgICAgICAgICAKICAgICAgICAgICAgcGJhZmcgc3Z5clZhY2hnID0gcWJwaHpyYWcudHJnUnlyenJhZ09sVnEoJ2hjeWJucS1zdnlyJyk7CiAgICAgICAgICAgIHBiYWZnIHN2eXIgPSBzdnlyVmFjaGcuc3Z5cmZbMF07CiAgICAgICAgICAgCiAgICAgICAgICAgIHZzICghc3Z5cikgewogICAgICAgICAgICAgICAgZnViakFiZ3ZzdnBuZ3ZiYSgnQ3lybmZyIGZyeXJwZyBuIHN2eXIgZ2IgaGN5Ym5xJywgJ2puZWF2YXQnKTsKICAgICAgICAgICAgICAgIGVyZ2hlYTsKICAgICAgICAgICAgfQogICAgICAgICAgIAogICAgICAgICAgICBwYmFmZyBzYmV6UW5nbiA9IGFyaiBTYmV6UW5nbigpOwogICAgICAgICAgICBzYmV6UW5nbi5uY2NyYXEoJ25wZ3ZiYScsICdzdnlyX2JjcmVuZ3ZiYScpOwogICAgICAgICAgICBzYmV6UW5nbi5uY2NyYXEoJ2JjcmVuZ3ZiYScsICdoY3libnEnKTsKICAgICAgICAgICAgc2JlelFuZ24ubmNjcmFxKCdoY3libnFfc3Z5cicsIHN2eXIpOwogICAgICAgICAgIAogICAgICAgICAgICBwYmFmZyBrdWUgPSBhcmogS1pZVWdnY0VyZGhyZmcoKTsKICAgICAgICAgICAKICAgICAgICAgICAgLy8gQ2VidGVyZmYgZ2VucHh2YXQKICAgICAgICAgICAga3VlLmhjeWJucS5ucXFSaXJhZ1l2ZmdyYXJlKCdjZWJ0ZXJmZicsIHNoYXBndmJhKHIpIHsKICAgICAgICAgICAgICAgIHZzIChyLnlyYXRndVBiemNoZ25veXIpIHsKICAgICAgICAgICAgICAgICAgICBwYmFmZyBjcmVwcmFnUGJ6Y3lyZ3IgPSAoci55Ym5xcnEgLyByLmdiZ255KSAqIDEwMDsKICAgICAgICAgICAgICAgICAgICBxYnBoenJhZy50cmdSeXJ6cmFnT2xWcSgnaGN5Ym5xLWNlYnRlcmZmJykuZmdseXIuanZxZ3UgPSBjcmVwcmFnUGJ6Y3lyZ3IgKyAnJSc7CiAgICAgICAgICAgICAgICAgICAgcWJwaHpyYWcudHJnUnlyenJhZ09sVnEoJ2hjeWJucS1ncmtnJykuZ3JrZ1BiYWdyYWcgPSBgSGN5Ym5xdmF0Li4uICR7Wm5ndS5lYmhhcShjcmVwcmFnUGJ6Y3lyZ3IpfSVgOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAKICAgICAgICAgICAga3VlLmJhZXJucWxmZ25ncnB1bmF0ciA9IHNoYXBndmJhKCkgewogICAgICAgICAgICAgICAgdnMgKGt1ZS5lcm5xbEZnbmdyID09PSA0KSB7CiAgICAgICAgICAgICAgICAgICAgdnMgKGt1ZS5mZ25naGYgPT09IDIwMCkgewogICAgICAgICAgICAgICAgICAgICAgICBnZWwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGJhZmcgZXJmY2JhZnIgPSBXRkJBLmNuZWZyKGt1ZS5lcmZjYmFmckdya2cpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdnMgKGVyZmNiYWZyLmZnbmdoZikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1YmpBYmd2c3Zwbmd2YmEoZXJmY2JhZnIuenJmZm50ciwgJ2ZocHByZmYnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dnFyWmJxbnkoJ2hjeWJucS16YnFueScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlicG5ndmJhLmVyeWJucSgpOyAvLyBFcnNlcmZ1IGdiIGZ1YmogaGN5Ym5xcnEgc3Z5cgogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSByeWZyIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWJqQWJndnN2cG5ndmJhKGVyZmNiYWZyLnpyZmZudHIsICdyZWViZScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9IHBuZ3B1IChyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWJqQWJndnN2cG5ndmJhKCdWYWlueXZxIGZyZWlyZSBlcmZjYmFmcicsICdyZWViZScpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSByeWZyIHsKICAgICAgICAgICAgICAgICAgICAgICAgZnViakFiZ3ZzdnBuZ3ZiYSgnSGN5Ym5xIHNudnlycTogQXJnamJleCByZWViZScsICdyZWViZScpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIC8vIEVyZnJnIGNlYnRlcmZmCiAgICAgICAgICAgICAgICAgICAgcWJwaHpyYWcudHJnUnlyenJhZ09sVnEoJ2hjeWJucS1jZWJ0ZXJmZicpLmZnbHlyLmp2cWd1ID0gJzAlJzsKICAgICAgICAgICAgICAgICAgICBxYnBoenJhZy50cmdSeXJ6cmFnT2xWcSgnaGN5Ym5xLWdya2cnKS5ncmtnUGJhZ3JhZyA9ICdFcm5xbCBnYiBoY3libnEnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwogICAgICAgICAgIAogICAgICAgICAgICBrdWUuYmNyYSgnQ0JGRycsICcnLCBnZWhyKTsKICAgICAgICAgICAga3VlLmZyYXEoc2JlelFuZ24pOwogICAgICAgIH0pOwogICAgICAgIC8vIFJxdmcgU3Z5cgogICAgICAgIHNoYXBndmJhIHJxdmdTdnlyKHN2eXJjbmd1KSB7CiAgICAgICAgICAgIGZ1YmpZYm5xdmF0KCdZYm5xdmF0IHN2eXIgcGJhZ3JhZy4uLicpOwogICAgICAgICAgIAogICAgICAgICAgICB6bnhyRXJkaHJmZygnJywgJ0NCRkcnLCB7CiAgICAgICAgICAgICAgICBucGd2YmE6ICd0cmdfc3Z5cl9wYmFncmFnJywKICAgICAgICAgICAgICAgIHN2eXJjbmd1OiBzdnlyY25ndQogICAgICAgICAgICB9LCBzaGFwZ3ZiYShlcmZjYmFmcikgewogICAgICAgICAgICAgICAgdnMgKGVyZmNiYWZyLmZnbmdoZikgewogICAgICAgICAgICAgICAgICAgIHFicGh6cmFnLnRyZ1J5cnpyYWdPbFZxKCdycXZnLXN2eXJhbnpyJykuZ3JrZ1BiYWdyYWcgPSBlcmZjYmFmci5zdnlyYW56cjsKICAgICAgICAgICAgICAgICAgICBxYnBoenJhZy50cmdSeXJ6cmFnT2xWcSgncnF2Zy1zdnlyLXBiYWdyYWcnKS5pbnlociA9IGVyZmNiYWZyLnBiYWdyYWc7CiAgICAgICAgICAgICAgICAgICAgcWJwaHpyYWcudHJnUnlyenJhZ09sVnEoJ3Jxdmctc3Z5cmNuZ3UnKS5pbnlociA9IHN2eXJjbmd1OwogICAgICAgICAgICAgICAgICAgIGZ1YmpaYnFueSgncnF2Zy1zdnlyLXpicW55Jyk7CiAgICAgICAgICAgICAgICB9IHJ5ZnIgewogICAgICAgICAgICAgICAgICAgIGZ1YmpBYmd2c3Zwbmd2YmEoZXJmY2JhZnIuenJmZm50ciwgJ3JlZWJlJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICAvLyBGbmlyIFN2eXIKICAgICAgICBxYnBoenJhZy50cmdSeXJ6cmFnT2xWcSgncnF2Zy1zdnlyLXNiZXonKS5ucXFSaXJhZ1l2ZmdyYXJlKCdmaG96dmcnLCBzaGFwZ3ZiYShyKSB7CiAgICAgICAgICAgIHIuY2VyaXJhZ1Fyc25oeWcoKTsKICAgICAgICAgICAKICAgICAgICAgICAgcGJhZmcgc3Z5cmNuZ3UgPSBxYnBoenJhZy50cmdSeXJ6cmFnT2xWcSgncnF2Zy1zdnlyY25ndScpLmlueWhyOwogICAgICAgICAgICBwYmFmZyBwYmFncmFnID0gcWJwaHpyYWcudHJnUnlyenJhZ09sVnEoJ3Jxdmctc3Z5ci1wYmFncmFnJykuaW55aHI7CiAgICAgICAgICAgCiAgICAgICAgICAgIGZ1YmpZYm5xdmF0KCdGbml2YXQgc3Z5ci4uLicpOwogICAgICAgICAgIAogICAgICAgICAgICB6bnhyRXJkaHJmZygnJywgJ0NCRkcnLCB7CiAgICAgICAgICAgICAgICBucGd2YmE6ICdzdnlyX2JjcmVuZ3ZiYScsCiAgICAgICAgICAgICAgICBiY3Jlbmd2YmE6ICdycXZnX3N2eXInLAogICAgICAgICAgICAgICAgc3Z5cmNuZ3U6IHN2eXJjbmd1LAogICAgICAgICAgICAgICAgcGJhZ3JhZzogcGJhZ3JhZwogICAgICAgICAgICB9LCBzaGFwZ3ZiYShlcmZjYmFmcikgewogICAgICAgICAgICAgICAgdnMgKGVyZmNiYWZyLmZnbmdoZikgewogICAgICAgICAgICAgICAgICAgIGZ1YmpBYmd2c3Zwbmd2YmEoZXJmY2JhZnIuenJmZm50ciwgJ2ZocHByZmYnKTsKICAgICAgICAgICAgICAgICAgICB1dnFyWmJxbnkoJ3Jxdmctc3Z5ci16YnFueScpOwogICAgICAgICAgICAgICAgfSByeWZyIHsKICAgICAgICAgICAgICAgICAgICBmdWJqQWJndnN2cG5ndmJhKGVyZmNiYWZyLnpyZmZudHIsICdyZWViZScpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgICAvLyBRYmpheWJucSBTdnlyCiAgICAgICAgc2hhcGd2YmEgcWJqYXlibnFTdnlyKHN2eXJjbmd1KSB7CiAgICAgICAgICAgIGp2YXFiai55YnBuZ3ZiYS51ZXJzID0gYD9ucGd2YmE9c3Z5cl9iY3Jlbmd2YmEmYmNyZW5ndmJhPXFiamF5Ym5xJnN2eXJjbmd1PSR7cmFwYnFySEVWUGJ6Y2JhcmFnKHN2eXJjbmd1KX1gOwogICAgICAgIH0KICAgICAgICAvLyBRcnlyZ3IgVmdyegogICAgICAgIHNoYXBndmJhIHFyeXJnclZncnooc3Z5cmNuZ3UsIHN2eXJhbnpyKSB7CiAgICAgICAgICAgIHZzICghcGJhc3ZleihgTmVyIGxiaCBmaGVyIGxiaCBqbmFnIGdiIHFyeXJnciAiJHtzdnlyYW56cn0iP2ApKSB7CiAgICAgICAgICAgICAgICBlcmdoZWE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAKICAgICAgICAgICAgZnViallibnF2YXQoJ1FyeXJndmF0IHZncnouLi4nKTsKICAgICAgICAgICAKICAgICAgICAgICAgem54ckVyZGhyZmcoJycsICdDQkZHJywgewogICAgICAgICAgICAgICAgbnBndmJhOiAnc3Z5cl9iY3Jlbmd2YmEnLAogICAgICAgICAgICAgICAgYmNyZW5ndmJhOiAncXJ5cmdyX3ZncnonLAogICAgICAgICAgICAgICAgc3Z5cmNuZ3U6IHN2eXJjbmd1CiAgICAgICAgICAgIH0sIHNoYXBndmJhKGVyZmNiYWZyKSB7CiAgICAgICAgICAgICAgICB2cyAoZXJmY2JhZnIuZmduZ2hmKSB7CiAgICAgICAgICAgICAgICAgICAgZnViakFiZ3ZzdnBuZ3ZiYShlcmZjYmFmci56cmZmbnRyLCAnZmhwcHJmZicpOwogICAgICAgICAgICAgICAgICAgIHlicG5ndmJhLmVyeWJucSgpOyAvLyBFcnNlcmZ1IGdiIGhjcW5nciBzdnlyIHl2ZmcKICAgICAgICAgICAgICAgIH0gcnlmciB7CiAgICAgICAgICAgICAgICAgICAgZnViakFiZ3ZzdnBuZ3ZiYShlcmZjYmFmci56cmZmbnRyLCAncmVlYmUnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIC8vIE12YyBWZ3J6CiAgICAgICAgc2hhcGd2YmEgbXZjVmdyeihzdnlyY25ndSkgewogICAgICAgICAgICBmdWJqWWJucXZhdCgnUGVybmd2YXQgTVZDIG5lcHV2aXIuLi4nKTsKICAgICAgICAgICAKICAgICAgICAgICAgem54ckVyZGhyZmcoJycsICdDQkZHJywgewogICAgICAgICAgICAgICAgbnBndmJhOiAnc3Z5cl9iY3Jlbmd2YmEnLAogICAgICAgICAgICAgICAgYmNyZW5ndmJhOiAnbXZjX3ZncnonLAogICAgICAgICAgICAgICAgc3Z5cmNuZ3U6IHN2eXJjbmd1CiAgICAgICAgICAgIH0sIHNoYXBndmJhKGVyZmNiYWZyKSB7CiAgICAgICAgICAgICAgICB2cyAoZXJmY2JhZnIuZmduZ2hmKSB7CiAgICAgICAgICAgICAgICAgICAgZnViakFiZ3ZzdnBuZ3ZiYShlcmZjYmFmci56cmZmbnRyLCAnZmhwcHJmZicpOwogICAgICAgICAgICAgICAgICAgIHlicG5ndmJhLmVyeWJucSgpOyAvLyBFcnNlcmZ1IGdiIGZ1YmogYXJqIE1WQyBzdnlyCiAgICAgICAgICAgICAgICB9IHJ5ZnIgewogICAgICAgICAgICAgICAgICAgIGZ1YmpBYmd2c3Zwbmd2YmEoZXJmY2JhZnIuenJmZm50ciwgJ3JlZWJlJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICAvLyBIYW12YyBTdnlyCiAgICAgICAgc2hhcGd2YmEgaGFtdmNTdnlyKHN2eXJjbmd1KSB7CiAgICAgICAgICAgIGZ1YmpZYm5xdmF0KCdSa2dlbnBndmF0IE1WQyBuZXB1dmlyLi4uJyk7CiAgICAgICAgICAgCiAgICAgICAgICAgIHpueHJFcmRocmZnKCcnLCAnQ0JGRycsIHsKICAgICAgICAgICAgICAgIG5wZ3ZiYTogJ3N2eXJfYmNyZW5ndmJhJywKICAgICAgICAgICAgICAgIGJjcmVuZ3ZiYTogJ2hhbXZjX3N2eXInLAogICAgICAgICAgICAgICAgc3Z5cmNuZ3U6IHN2eXJjbmd1CiAgICAgICAgICAgIH0sIHNoYXBndmJhKGVyZmNiYWZyKSB7CiAgICAgICAgICAgICAgICB2cyAoZXJmY2JhZnIuZmduZ2hmKSB7CiAgICAgICAgICAgICAgICAgICAgZnViakFiZ3ZzdnBuZ3ZiYShlcmZjYmFmci56cmZmbnRyLCAnZmhwcHJmZicpOwogICAgICAgICAgICAgICAgICAgIHlicG5ndmJhLmVyeWJucSgpOyAvLyBFcnNlcmZ1IGdiIGZ1YmogcmtnZW5wZ3JxIHN2eXJmCiAgICAgICAgICAgICAgICB9IHJ5ZnIgewogICAgICAgICAgICAgICAgICAgIGZ1YmpBYmd2c3Zwbmd2YmEoZXJmY2JhZnIuenJmZm50ciwgJ3JlZWJlJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PSBYUkxPQk5FUSBGVUJFR1BIR0YgPT09PT09PT09PT09PT09PT09PT0KICAgICAgICBxYnBoenJhZy5ucXFSaXJhZ1l2ZmdyYXJlKCd4cmxxYmphJywgc2hhcGd2YmEocikgewogICAgICAgICAgICAvLyBQZ2V5L1B6cSArIEYgZ2IgZm5pciBzdnlyIHZhIHJxdmcgemJxbnkKICAgICAgICAgICAgdnMgKChyLnBnZXlYcmwgfHwgci56cmduWHJsKSAmJiByLnhybCA9PT0gJ2YnKSB7CiAgICAgICAgICAgICAgICBwYmFmZyBycXZnWmJxbnkgPSBxYnBoenJhZy50cmdSeXJ6cmFnT2xWcSgncnF2Zy1zdnlyLXpicW55Jyk7CiAgICAgICAgICAgICAgICB2cyAocnF2Z1picW55LnB5bmZmWXZmZy5wYmFnbnZhZignbnBndmlyJykpIHsKICAgICAgICAgICAgICAgICAgICByLmNlcmlyYWdRcnNuaHlnKCk7CiAgICAgICAgICAgICAgICAgICAgcWJwaHpyYWcudHJnUnlyenJhZ09sVnEoJ3Jxdmctc3Z5ci1zYmV6JykucXZmY25ncHVSaXJhZyhhcmogUmlyYWcoJ2Zob3p2ZycpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgIAogICAgICAgICAgICAvLyBSZnBuY3IgZ2IgcHliZnIgemJxbnlmCiAgICAgICAgICAgIHZzIChyLnhybCA9PT0gJ1JmcG5jcicpIHsKICAgICAgICAgICAgICAgIHBiYWZnIG5wZ3ZpclpicW55ID0gcWJwaHpyYWcuZGhyZWxGcnlycGdiZSgnLnpicW55Lm5wZ3ZpcicpOwogICAgICAgICAgICAgICAgdnMgKG5wZ3ZpclpicW55KSB7CiAgICAgICAgICAgICAgICAgICAgdXZxclpicW55KG5wZ3ZpclpicW55LnZxKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgIAogICAgICAgICAgICAvLyBQZ2V5L1B6cSArIEggc2JlIGhjeWJucSAoanVyYSB2YSBzdnlyIHpuYW50cmUpCiAgICAgICAgICAgIHZzICgoci5wZ2V5WHJsIHx8IHIuenJnblhybCkgJiYgci54cmwgPT09ICdoJyAmJiBwaGVlcmFnR25vID09PSAnc3Z5ci16bmFudHJlJykgewogICAgICAgICAgICAgICAgci5jZXJpcmFnUXJzbmh5ZygpOwogICAgICAgICAgICAgICAgZnVialpicW55KCdoY3libnEtemJxbnknKTsKICAgICAgICAgICAgfQogICAgICAgICAgIAogICAgICAgICAgICAvLyBQZ2V5L1B6cSArIEEgc2JlIGFyaiBzdnlyIChqdXJhIHZhIHN2eXIgem5hbnRyZSkKICAgICAgICAgICAgdnMgKChyLnBnZXlYcmwgfHwgci56cmduWHJsKSAmJiByLnhybCA9PT0gJ2EnICYmIHBoZWVyYWdHbm8gPT09ICdzdnlyLXpuYW50cmUnKSB7CiAgICAgICAgICAgICAgICByLmNlcmlyYWdRcnNuaHlnKCk7CiAgICAgICAgICAgICAgICBmdWJqWmJxbnkoJ3Blcm5nci1zdnlyLXpicW55Jyk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PSBOSEdCLUVSU0VSRlUgU0hBUEdWQkFOWVZHTCA9PT09PT09PT09PT09PT09PT09PQogICAgICAgIHlyZyBuaGdiRXJzZXJmdVZhZ3JlaW55OwogICAgICAgCiAgICAgICAgc2hhcGd2YmEgZmduZWdOaGdiRXJzZXJmdSgpIHsKICAgICAgICAgICAgdnMgKHBoZWVyYWdHbm8gPT09ICdlcnF2ZXJwZy1wZXJuZ2JlJyAmJiBwaGVlcmFnRXJxdmVycGdWcSkgewogICAgICAgICAgICAgICAgbmhnYkVyc2VyZnVWYWdyZWlueSA9IGZyZ1ZhZ3JlaW55KCgpID0+IHsKICAgICAgICAgICAgICAgICAgICBmdWJqRXJxdmVycGdGZ25nZigpOwogICAgICAgICAgICAgICAgfSwgMzAwMDApOyAvLyBFcnNlcmZ1IHJpcmVsIDMwIGZycGJhcWYKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgIAogICAgICAgIHNoYXBndmJhIGZnYmNOaGdiRXJzZXJmdSgpIHsKICAgICAgICAgICAgdnMgKG5oZ2JFcnNlcmZ1VmFncmVpbnkpIHsKICAgICAgICAgICAgICAgIHB5cm5lVmFncmVpbnkobmhnYkVyc2VyZnVWYWdyZWlueSk7CiAgICAgICAgICAgICAgICBuaGdiRXJzZXJmdVZhZ3JlaW55ID0gYWh5eTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PSBRRU5UIE5BUSBRRUJDIEhDWUJOUSA9PT09PT09PT09PT09PT09PT09PQogICAgICAgIHNoYXBndmJhIHZhdmdRZW50TmFxUWViYygpIHsKICAgICAgICAgICAgcGJhZmcgcWViY01iYXIgPSBxYnBoenJhZy5vYnFsOwogICAgICAgICAgIAogICAgICAgICAgICBxZWJjTWJhci5ucXFSaXJhZ1l2ZmdyYXJlKCdxZW50YmlyZScsIHNoYXBndmJhKHIpIHsKICAgICAgICAgICAgICAgIHIuY2VyaXJhZ1Fyc25oeWcoKTsKICAgICAgICAgICAgICAgIHIucW5nbkdlbmFmc3JlLnFlYmNSc3NycGcgPSAncGJjbCc7CiAgICAgICAgICAgICAgICBxZWJjTWJhci5mZ2x5ci5vbnB4dGViaGFxUGJ5YmUgPSAnZXRvbigwLCAyMTIsIDI1NSwgMC4xKSc7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgIAogICAgICAgICAgICBxZWJjTWJhci5ucXFSaXJhZ1l2ZmdyYXJlKCdxZW50eXJuaXInLCBzaGFwZ3ZiYShyKSB7CiAgICAgICAgICAgICAgICB2cyAoci5nbmV0cmcgPT09IHFlYmNNYmFyKSB7CiAgICAgICAgICAgICAgICAgICAgcWViY01iYXIuZmdseXIub25weHRlYmhhcVBieWJlID0gJyc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgIAogICAgICAgICAgICBxZWJjTWJhci5ucXFSaXJhZ1l2ZmdyYXJlKCdxZWJjJywgc2hhcGd2YmEocikgewogICAgICAgICAgICAgICAgci5jZXJpcmFnUXJzbmh5ZygpOwogICAgICAgICAgICAgICAgcWViY01iYXIuZmdseXIub25weHRlYmhhcVBieWJlID0gJyc7CiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdnMgKHBoZWVyYWdHbm8gIT09ICdzdnlyLXpuYW50cmUnKSB7CiAgICAgICAgICAgICAgICAgICAgZnViakFiZ3ZzdnBuZ3ZiYSgnRmp2Z3B1IGdiIFN2eXIgWm5hbnRyZSBnYiBoY3libnEgc3Z5cmYnLCAnam5lYXZhdCcpOwogICAgICAgICAgICAgICAgICAgIGVyZ2hlYTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBwYmFmZyBzdnlyZiA9IHIucW5nbkdlbmFmc3JlLnN2eXJmOwogICAgICAgICAgICAgICAgdnMgKHN2eXJmLnlyYXRndSA+IDApIHsKICAgICAgICAgICAgICAgICAgICBwYmFmZyBzdnlyID0gc3Z5cmZbMF07CiAgICAgICAgICAgICAgICAgICAgcWJwaHpyYWcudHJnUnlyenJhZ09sVnEoJ2hjeWJucS1zdnlyJykuc3Z5cmYgPSBzdnlyZjsKICAgICAgICAgICAgICAgICAgICBmdWJqWmJxbnkoJ2hjeWJucS16YnFueScpOwogICAgICAgICAgICAgICAgICAgIGZ1YmpBYmd2c3Zwbmd2YmEoYEVybnFsIGdiIGhjeWJucTogJHtzdnlyLmFuenJ9YCwgJ3Zhc2InKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09IEZSTkVQVSBTSEFQR1ZCQU5ZVkdMID09PT09PT09PT09PT09PT09PT09CiAgICAgICAgc2hhcGd2YmEgdmF2Z0ZybmVwdSgpIHsKICAgICAgICAgICAgcGJhZmcgZnJuZXB1VmFjaGcgPSBxYnBoenJhZy5wZXJuZ3JSeXJ6cmFnKCd2YWNoZycpOwogICAgICAgICAgICBmcm5lcHVWYWNoZy5nbGNyID0gJ2dya2cnOwogICAgICAgICAgICBmcm5lcHVWYWNoZy5jeW5wcnVieXFyZSA9ICdGcm5lcHUgc3Z5cmYuLi4nOwogICAgICAgICAgICBmcm5lcHVWYWNoZy5weW5mZkFuenIgPSAnc2Jlei1wYmFnZWJ5JzsKICAgICAgICAgICAgZnJuZXB1VmFjaGcuZmdseXIuem5ldHZhT2JnZ2J6ID0gJzIwY2snOwogICAgICAgICAgICBmcm5lcHVWYWNoZy52cSA9ICdzdnlyLWZybmVwdSc7CiAgICAgICAgICAgCiAgICAgICAgICAgIHBiYWZnIHN2eXJabmFudHJlID0gcWJwaHpyYWcudHJnUnlyenJhZ09sVnEoJ3N2eXItem5hbnRyZScpOwogICAgICAgICAgICBwYmFmZyBzdnlyT2ViamZyZSA9IHN2eXJabmFudHJlLmRocmVsRnJ5cnBnYmUoJy5zdnlyLW9lYmpmcmUnKTsKICAgICAgICAgICAgc3Z5ck9lYmpmcmUudmFmcmVnT3JzYmVyKGZybmVwdVZhY2hnLCBzdnlyT2ViamZyZS5kaHJlbEZyeXJwZ2JlKCcuc3Z5ci1nbm95ci1wYmFnbnZhcmUnKSk7CiAgICAgICAgICAgCiAgICAgICAgICAgIGZybmVwdVZhY2hnLm5xcVJpcmFnWXZmZ3JhcmUoJ3ZhY2hnJywgc2hhcGd2YmEoKSB7CiAgICAgICAgICAgICAgICBwYmFmZyBmcm5lcHVHcmV6ID0gZ3V2Zi5pbnloci5nYllianJlUG5mcigpOwogICAgICAgICAgICAgICAgcGJhZmcgZWJqZiA9IHFicGh6cmFnLmRocmVsRnJ5cnBnYmVOeXkoJy5zdnlyLWdub3lyIGdvYnFsIGdlJyk7CiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgZWJqZi5zYmVSbnB1KGViaiA9PiB7CiAgICAgICAgICAgICAgICAgICAgcGJhZmcgc3Z5ckFuenIgPSBlYmouZGhyZWxGcnlycGdiZSgnLnN2eXItYW56ciBmY25hOnluZmctcHV2eXEnKTsKICAgICAgICAgICAgICAgICAgICB2cyAoc3Z5ckFuenIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcGJhZmcgZ3JrZyA9IHN2eXJBbnpyLmdya2dQYmFncmFnLmdiWWJqcmVQbmZyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGViai5mZ2x5ci5xdmZjeW5sID0gZ3JrZy52YXB5aHFyZihmcm5lcHVHcmV6KSA/ICcnIDogJ2FiYXInOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT0gR1VSWlIgWk5BTlRSWlJBRyA9PT09PT09PT09PT09PT09PT09PQogICAgICAgIHNoYXBndmJhIHZhdmdHdXJ6ckdidHR5cigpIHsKICAgICAgICAgICAgcGJhZmcgZ3VyenJHYnR0eXIgPSBxYnBoenJhZy5wZXJuZ3JSeXJ6cmFnKCdvaGdnYmEnKTsKICAgICAgICAgICAgZ3VyenJHYnR0eXIudmFhcmVVR1pZID0gJ/CfjJknOwogICAgICAgICAgICBndXJ6ckdidHR5ci5weW5mZkFuenIgPSAnb2dhIG9nYS1meic7CiAgICAgICAgICAgIGd1cnpyR2J0dHlyLmZnbHlyLmNiZnZndmJhID0gJ3N2a3JxJzsKICAgICAgICAgICAgZ3VyenJHYnR0eXIuZmdseXIuZ2JjID0gJzIwY2snOwogICAgICAgICAgICBndXJ6ckdidHR5ci5mZ2x5ci5ldnR1ZyA9ICcyMGNrJzsKICAgICAgICAgICAgZ3VyenJHYnR0eXIuZmdseXIubVZhcXJrID0gJzEwMDAnOwogICAgICAgICAgICBndXJ6ckdidHR5ci5ndmd5ciA9ICdHYnR0eXIgUW5leC9ZdnR1ZyBaYnFyJzsKICAgICAgICAgICAKICAgICAgICAgICAgcWJwaHpyYWcub2JxbC5uY2NyYXFQdXZ5cShndXJ6ckdidHR5cik7CiAgICAgICAgICAgCiAgICAgICAgICAgIGd1cnpyR2J0dHlyLm5xcVJpcmFnWXZmZ3JhcmUoJ3B5dnB4Jywgc2hhcGd2YmEoKSB7CiAgICAgICAgICAgICAgICBxYnBoenJhZy5vYnFsLnB5bmZmWXZmZy5nYnR0eXIoJ3l2dHVnLXpicXInKTsKICAgICAgICAgICAgICAgIGd1dmYudmFhcmVVR1pZID0gcWJwaHpyYWcub2JxbC5weW5mZll2ZmcucGJhZ252YWYoJ3l2dHVnLXpicXInKSA/ICfimIDvuI8nIDogJ/CfjJknOwogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT0gQ1JFU0JFWk5BUFIgWkJBVkdCRVZBVCA9PT09PT09PT09PT09PT09PT09PQogICAgICAgIHNoYXBndmJhIHZhdmdDcmVzYmV6bmFwclpiYXZnYmV2YXQoKSB7CiAgICAgICAgICAgIHBiYWZnIGNyZXNiZXpuYXByVmFzYiA9IHFicGh6cmFnLnBlcm5nclJ5cnpyYWcoJ3F2aScpOwogICAgICAgICAgICBjcmVzYmV6bmFwclZhc2IuZmdseXIuY2Jmdmd2YmEgPSAnc3ZrcnEnOwogICAgICAgICAgICBjcmVzYmV6bmFwclZhc2IuZmdseXIub2JnZ2J6ID0gJzIwY2snOwogICAgICAgICAgICBjcmVzYmV6bmFwclZhc2IuZmdseXIueXJzZyA9ICcyMGNrJzsKICAgICAgICAgICAgY3Jlc2Jlem5hcHJWYXNiLmZnbHlyLm9ucHh0ZWJoYXEgPSAnaW5lKC0tb3QtZnJwYmFxbmVsKSc7CiAgICAgICAgICAgIGNyZXNiZXpuYXByVmFzYi5mZ2x5ci5vYmVxcmUgPSAnMWNrIGZieXZxIGluZSgtLW9iZXFyZS1wYnliZSknOwogICAgICAgICAgICBjcmVzYmV6bmFwclZhc2IuZmdseXIub2JlcXJlRW5xdmhmID0gJzhjayc7CiAgICAgICAgICAgIGNyZXNiZXpuYXByVmFzYi5mZ2x5ci5jbnFxdmF0ID0gJzEwY2snOwogICAgICAgICAgICBjcmVzYmV6bmFwclZhc2IuZmdseXIuc2JhZ0Z2bXIgPSAnMTJjayc7CiAgICAgICAgICAgIGNyZXNiZXpuYXByVmFzYi5mZ2x5ci5wYnliZSA9ICdpbmUoLS1ncmtnLXpoZ3JxKSc7CiAgICAgICAgICAgIGNyZXNiZXpuYXByVmFzYi5mZ2x5ci5tVmFxcmsgPSAnOTk5JzsKICAgICAgICAgICAgY3Jlc2Jlem5hcHJWYXNiLmZnbHlyLnF2ZmN5bmwgPSAnYWJhcic7CiAgICAgICAgICAgIGNyZXNiZXpuYXByVmFzYi52cSA9ICdjcmVzYmV6bmFwci12YXNiJzsKICAgICAgICAgICAKICAgICAgICAgICAgcWJwaHpyYWcub2JxbC5uY2NyYXFQdXZ5cShjcmVzYmV6bmFwclZhc2IpOwogICAgICAgICAgIAogICAgICAgICAgICAvLyBGdWJqIGNyZXNiZXpuYXByIHZhc2IgYmEgUGdleStGdXZzZytDCiAgICAgICAgICAgIHFicGh6cmFnLm5xcVJpcmFnWXZmZ3JhcmUoJ3hybHFiamEnLCBzaGFwZ3ZiYShyKSB7CiAgICAgICAgICAgICAgICB2cyAoci5wZ2V5WHJsICYmIHIuZnV2c2dYcmwgJiYgci54cmwgPT09ICdDJykgewogICAgICAgICAgICAgICAgICAgIHIuY2VyaXJhZ1Fyc25oeWcoKTsKICAgICAgICAgICAgICAgICAgICBwYmFmZyB2YXNiID0gcWJwaHpyYWcudHJnUnlyenJhZ09sVnEoJ2NyZXNiZXpuYXByLXZhc2InKTsKICAgICAgICAgICAgICAgICAgICB2cyAodmFzYi5mZ2x5ci5xdmZjeW5sID09PSAnYWJhcicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaGNxbmdyQ3Jlc2Jlem5hcHJWYXNiKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhc2IuZmdseXIucXZmY3lubCA9ICdveWJweCc7CiAgICAgICAgICAgICAgICAgICAgfSByeWZyIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFzYi5mZ2x5ci5xdmZjeW5sID0gJ2FiYXInOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgCiAgICAgICAgc2hhcGd2YmEgaGNxbmdyQ3Jlc2Jlem5hcHJWYXNiKCkgewogICAgICAgICAgICBwYmFmZyB2YXNiID0gcWJwaHpyYWcudHJnUnlyenJhZ09sVnEoJ2NyZXNiZXpuYXByLXZhc2InKTsKICAgICAgICAgICAgdnMgKHZhc2IgJiYgdmFzYi5mZ2x5ci5xdmZjeW5sICE9PSAnYWJhcicpIHsKICAgICAgICAgICAgICAgIHBiYWZnIHpyemJlbCA9IGNyZXNiZXpuYXByLnpyemJlbCB8fCB7fTsKICAgICAgICAgICAgICAgIHBiYWZnIGd2enZhdCA9IGNyZXNiZXpuYXByLmd2enZhdCB8fCB7fTsKICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB5cmcgdWd6eSA9ICc8ZmdlYmF0PkNyZXNiZXpuYXByIFZhc2I6PC9mZ2ViYXQ+PG9lPic7CiAgICAgICAgICAgICAgICB1Z3p5ICs9IGBacnpiZWwgSGZycTogJHtzYmV6bmdTdnlyRnZtcih6cnpiZWwuaGZycVdGVXJuY0Z2bXIgfHwgMCl9PG9lPmA7CiAgICAgICAgICAgICAgICB1Z3p5ICs9IGBacnpiZWwgWXZ6dmc6ICR7c2Jlem5nU3Z5ckZ2bXIoenJ6YmVsLndmVXJuY0Z2bXJZdnp2ZyB8fCAwKX08b2U+YDsKICAgICAgICAgICAgICAgIHVnenkgKz0gYENudHIgWWJucTogJHtndnp2YXQueWJucVJpcmFnUmFxIC0gZ3Z6dmF0LmFuaXZ0bmd2YmFGZ25lZyB8fCAwfXpmPG9lPmA7CiAgICAgICAgICAgICAgICB1Z3p5ICs9IGBRQlogRXJucWw6ICR7Z3Z6dmF0LnFielBiYWdyYWdZYm5xcnFSaXJhZ1JhcSAtIGd2enZhdC5hbml2dG5ndmJhRmduZWcgfHwgMH16ZmA7CiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFzYi52YWFyZVVHWlkgPSB1Z3p5OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09IFZBVkdWTllWTU5HVkJBID09PT09PT09PT09PT09PT09PT09CiAgICAgICAgcWJwaHpyYWcubnFxUmlyYWdZdmZncmFyZSgnUUJaUGJhZ3JhZ1libnFycScsIHNoYXBndmJhKCkgewogICAgICAgICAgICAvLyBWYXZndm55dm1yIG55eSBzcm5naGVyZgogICAgICAgICAgICB2YXZnUWVudE5hcVFlYmMoKTsKICAgICAgICAgICAgdmF2Z0ZybmVwdSgpOwogICAgICAgICAgICB2YXZnR3VyenJHYnR0eXIoKTsKICAgICAgICAgICAgdmF2Z0NyZXNiZXpuYXByWmJhdmdiZXZhdCgpOwogICAgICAgICAgIAogICAgICAgICAgICAvLyBGdWJqIGpyeXBienIgenJmZm50cgogICAgICAgICAgICBmcmdHdnpyYmhnKCgpID0+IHsKICAgICAgICAgICAgICAgIGZ1YmpBYmd2c3Zwbmd2YmEoJ0pyeXBienIgZ2IgSjNZWUZHQkVSIEZuemhlbnYgRnVyeXkhIPCfjownLCAnZmhwcHJmZicpOwogICAgICAgICAgICB9LCAxMDAwKTsKICAgICAgICAgICAKICAgICAgICAgICAgLy8gTmhnYi1oY3FuZ3IgY3Jlc2Jlem5hcHIgdmFzYiByaXJlbCA1IGZycGJhcWYKICAgICAgICAgICAgZnJnVmFncmVpbnkoaGNxbmdyQ3Jlc2Jlem5hcHJWYXNiLCA1MDAwKTsKICAgICAgICAgICAKICAgICAgICAgICAgLy8gUHVycHggc2JlIGhjcW5ncmYgY3JldmJxdnBueXlsCiAgICAgICAgICAgIGZyZ1ZhZ3JlaW55KHB1cnB4U2JlSGNxbmdyZiwgMzAwMDAwKTsgLy8gUmlyZWwgNSB6dmFoZ3JmCiAgICAgICAgfSk7CiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT0gSENRTkdSIFBVUlBYUkUgPT09PT09PT09PT09PT09PT09PT0KICAgICAgICBzaGFwZ3ZiYSBwdXJweFNiZUhjcW5ncmYoKSB7CiAgICAgICAgICAgIHNyZ3B1KCc/dmFzYj0xJykKICAgICAgICAgICAgICAgIC5ndXJhKGVyZmNiYWZyID0+IGVyZmNiYWZyLndmYmEoKSkKICAgICAgICAgICAgICAgIC5ndXJhKHFuZ24gPT4gewogICAgICAgICAgICAgICAgICAgIHZzIChxbmduLmZ1cnl5X2lyZWZ2YmEgJiYgcW5nbi5mdXJ5eV9pcmVmdmJhICE9PSAnPD89IEZVUllZX0lSRUZWQkEgPz4nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZ1YmpBYmd2c3Zwbmd2YmEoYEFyaiBpcmVmdmJhIG5pbnZ5bm95cjogJHtxbmduLmZ1cnl5X2lyZWZ2YmF9YCwgJ3Zhc2InKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgLnBuZ3B1KCgpID0+IHsKICAgICAgICAgICAgICAgICAgICAvLyBGdnlyYWd5bCBzbnZ5CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT0gUktDQkVHIFNIQVBHVkJBRiA9PT09PT09PT09PT09PT09PT09PQogICAgICAgIHNoYXBndmJhIHJrY2JlZ0VyZmh5Z2YocnlyenJhZ1ZxLCBzdnlyYW56cikgewogICAgICAgICAgICBwYmFmZyByeXJ6cmFnID0gcWJwaHpyYWcudHJnUnlyenJhZ09sVnEocnlyenJhZ1ZxKTsKICAgICAgICAgICAgdnMgKCFyeXJ6cmFnKSBlcmdoZWE7CiAgICAgICAgICAgCiAgICAgICAgICAgIHBiYWZnIHBiYWdyYWcgPSByeXJ6cmFnLmdya2dQYmFncmFnOwogICAgICAgICAgICBwYmFmZyBveWJvID0gYXJqIE95Ym8oW3BiYWdyYWddLCB7IGdsY3I6ICdncmtnL2N5bnZhJyB9KTsKICAgICAgICAgICAgcGJhZmcgaGV5ID0gSEVZLnBlcm5nckJvd3JwZ0hFWShveWJvKTsKICAgICAgICAgICAKICAgICAgICAgICAgcGJhZmcgbiA9IHFicGh6cmFnLnBlcm5nclJ5cnpyYWcoJ24nKTsKICAgICAgICAgICAgbi51ZXJzID0gaGV5OwogICAgICAgICAgICBuLnFiamF5Ym5xID0gc3Z5cmFuenIgfHwgJ3JrY2JlZy5na2cnOwogICAgICAgICAgICBxYnBoenJhZy5vYnFsLm5jY3JhcVB1dnlxKG4pOwogICAgICAgICAgICBuLnB5dnB4KCk7CiAgICAgICAgICAgIHFicGh6cmFnLm9icWwuZXJ6YmlyUHV2eXEobik7CiAgICAgICAgICAgIEhFWS5lcmlieHJCb3dycGdIRVkoaGV5KTsKICAgICAgICAgICAKICAgICAgICAgICAgZnViakFiZ3ZzdnBuZ3ZiYSgnRXJmaHlnZiBya2NiZWdycSBmaHBwcmZmc2h5eWwhJywgJ2ZocHByZmYnKTsKICAgICAgICB9CiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT0gT05QWEhDIFNIQVBHVkJBTllWR0wgPT09PT09PT09PT09PT09PT09PT0KICAgICAgICBzaGFwZ3ZiYSBwZXJuZ3JPbnB4aGMoKSB7CiAgICAgICAgICAgIHZzICghcGJhc3ZleignUGVybmdyIG4gb25weGhjIGJzIHBoZWVyYWcgcXZlcnBnYmVsPycpKSB7CiAgICAgICAgICAgICAgICBlcmdoZWE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAKICAgICAgICAgICAgZnViallibnF2YXQoJ1Blcm5ndmF0IG9ucHhoYy4uLicpOwogICAgICAgICAgIAogICAgICAgICAgICBwYmFmZyBwaGVlcmFnUXZlID0gJzw/PSBucXFmeW5mdXJmKCRwaGVlcmFnX3F2ZSkgPz4nOwogICAgICAgICAgICBtdmNWZ3J6KHBoZWVyYWdRdmUpOwogICAgICAgIH0KICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PSBGTEZHUlogVkFTQkVaTkdWQkEgPT09PT09PT09PT09PT09PT09PT0KICAgICAgICBzaGFwZ3ZiYSBmdWJqRmxmZ3J6VmFzYigpIHsKICAgICAgICAgICAgcGJhZmcgZmxmZ3J6VmFzYiA9IGAKSjNZWUZHQkVSIEZuemhlbnYgRnVyeXkgaTw/PSBGVVJZWV9JUkVGVkJBID8+Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KRnJlaXJlIFZhc2Jlem5ndmJhOgrigKIgRnJlaXJlIFZDOiA8Pz0gJGZsZmdyel92YXNiWydmcmVpcmVfdmMnXSA/PgrigKIgUHl2cmFnIFZDOiA8Pz0gJGZsZmdyel92YXNiWydweXZyYWdfdmMnXSA/PgrigKIgQ1VDIElyZWZ2YmE6IDw/PSAkZmxmZ3J6X3Zhc2JbJ2N1Y19pcmVmdmJhJ10gPz4K4oCiIEJjcmVuZ3ZhdCBGbGZncno6IDw/PSAkZmxmZ3J6X3Zhc2JbJ2JjcmVuZ3ZhdF9mbGZncnonXSA/PgrigKIgUGhlZXJhZyBIZnJlOiA8Pz0gJGZsZmdyel92YXNiWydwaGVlcmFnX2hmcmUnXSA/PgrigKIgRnJlaXJlIEd2enI6IDw/PSAkZmxmZ3J6X3Zhc2JbJ2ZyZWlyZV9ndnpyJ10gPz4K4oCiIFF2ZnggU2VyciBGY25wcjogPD89ICRmbGZncnpfdmFzYlsncXZmeF9zZXJyX2ZjbnByJ10gPz4K4oCiIFpyemJlbCBZdnp2ZzogPD89ICRmbGZncnpfdmFzYlsnenJ6YmVsX3l2enZnJ10gPz4KUGhlZXJhZyBRdmVycGdiZWw6IDw/PSBucXFmeW5mdXJmKCRwaGVlcmFnX3F2ZSkgPz4KRnVyeXkgQ25ndTogPD89IF9fU1ZZUl9fID8+Ck9lYmpmcmUgVmFzYmV6bmd2YmE6CuKAoiBIZnJlIE50cmFnOiAke2FuaXZ0bmdiZS5oZnJlTnRyYWd9CuKAoiBGcGVycmEgRXJmYnloZ3ZiYTogJHtmcGVycmEuanZxZ3V9ayR7ZnBlcnJhLnVydnR1Z30K4oCiIFluYXRobnRyOiAke2FuaXZ0bmdiZS55bmF0aG50cn0K4oCiIEN5bmdzYmV6OiAke2FuaXZ0bmdiZS5jeW5nc2Jlen0KVHJhcmVuZ3JxOiAke2FyaiBRbmdyKCkuZ2JZYnBueXJGZ2V2YXQoKX0KICAgICAgICAgICAgYC5nZXZ6KCk7CiAgICAgICAgICAgCiAgICAgICAgICAgIHBiYWZnIHpicW55ID0gcWJwaHpyYWcucGVybmdyUnlyenJhZygncXZpJyk7CiAgICAgICAgICAgIHpicW55LnB5bmZmQW56ciA9ICd6YnFueSBucGd2aXInOwogICAgICAgICAgICB6YnFueS52YWFyZVVHWlkgPSBgCiAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJ6YnFueS1wYmFncmFnIj4KICAgICAgICAgICAgICAgICAgICA8cXZpIHB5bmZmPSJ6YnFueS11cm5xcmUiPgogICAgICAgICAgICAgICAgICAgICAgICA8dTMgcHluZmY9InpicW55LWd2Z3lyIj7wn5al77iPIEZsZmdyeiBWYXNiZXpuZ3ZiYTwvdTM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvaGdnYmEgcHluZmY9InpicW55LXB5YmZyIiBiYXB5dnB4PSJndXZmLnB5YmZyZmcoJy56YnFueScpLmVyemJpcigpIj4mZ3Z6cmY7PC9vaGdnYmE+CiAgICAgICAgICAgICAgICAgICAgPC9xdmk+CiAgICAgICAgICAgICAgICAgICAgPGNlciBmZ2x5cj0ib25weHRlYmhhcTogaW5lKC0tb3QtY2V2em5lbCk7IGNucXF2YXQ6IDIwY2s7IG9iZXFyZS1lbnF2aGY6IDhjazsgc2JhZy1mdm1yOiAxMmNrOyB5dmFyLXVydnR1ZzogMS40OyB6bmstdXJ2dHVnOiA0MDBjazsgYmlyZXN5YmotbDogbmhnYjsiPiR7ZmxmZ3J6VmFzYn08L2Nlcj4KICAgICAgICAgICAgICAgICAgICA8cXZpIGZnbHlyPSJ6bmV0dmEtZ2JjOiAyMGNrOyBxdmZjeW5sOiBzeXJrOyB0bmM6IDEwY2s7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPG9oZ2diYSBweW5mZj0ib2dhIiBiYXB5dnB4PSJhbml2dG5nYmUucHl2Y29ibmVxLmpldmdyR3JrZyhcYCR7ZmxmZ3J6VmFzYi5lcmN5bnByKC9gL3QsICdcXGAnKX1cYCkuZ3VyYSgoKSA9PiBmdWJqQWJndnN2cG5ndmJhKCdGbGZncnogdmFzYiBwYmN2cnEhJywgJ2ZocHByZmYnKSkiPvCfk4sgUGJjbDwvb2hnZ2JhPgogICAgICAgICAgICAgICAgICAgICAgICA8b2hnZ2JhIHB5bmZmPSJvZ2Egb2dhLWZycGJhcW5lbCIgYmFweXZweD0iZ3V2Zi5weWJmcmZnKCcuemJxbnknKS5lcnpiaXIoKSI+UHliZnI8L29oZ2diYT4KICAgICAgICAgICAgICAgICAgICA8L3F2aT4KICAgICAgICAgICAgICAgIDwvcXZpPgogICAgICAgICAgICBgOwogICAgICAgICAgIAogICAgICAgICAgICBxYnBoenJhZy5vYnFsLm5jY3JhcVB1dnlxKHpicW55KTsKICAgICAgICB9CiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT0gVVJZQyBGTEZHUlogPT09PT09PT09PT09PT09PT09PT0KICAgICAgICBzaGFwZ3ZiYSBmdWJqVXJ5YygpIHsKICAgICAgICAgICAgcGJhZmcgdXJ5Y1BiYWdyYWcgPSBgCkozWVlGR0JFUiBGbnpoZW52IEZ1cnl5IC0gVXJ5YyBUaHZxcgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQrwn5SnIFNSTkdIRVJGOgrigKIgU3Z5ciBabmFudHJlOiBPZWJqZnIsIHJxdmcsIGhjeWJucSwgcWJqYXlibnEgc3Z5cmYK4oCiIEZaR0MgUGVybmdiZTogVHJhcmVuZ3IgRlpHQyBucHBiaGFnZiBoZnZhdCBya25wZyBlcnNyZXJhcHIgenJndWJxCuKAoiBFcnF2ZXJwZyBQZXJuZ2JlOiBQZXJuZ3IgQ2Vic3JmZnZiYW55IFBiemNuYWwgZmdseXIgZXJxdmVycGdmCuKAoiBQYmFnbnBnIFJrZ2VucGdiZTogUmtnZW5wZyByem52eWYgbmFxIGN1YmFyIGFoem9yZWYgc2VieiBzdnlyZgrigKIgUnpudnkgWm5leHJndmF0OiBGcmFxIG9oeXggcnpudnlmIGp2Z3UgRlpHQyBmaGNjYmVnIGJlIHF2ZXJwZyBmcmVpcmUgZnJhcQrigKIgRnVyeXkgSW55dnFuZ3ZiYTogR3JmZyBmdXJ5eSBwbmNub3Z5dmd2cmYgbmFxIHJ6bnZ5IHFyeXZpcmVsCuKMqO+4jyBYUkxPQk5FUSBGVUJFR1BIR0Y6CuKAoiBQZ2V5K0E6IEFyaiBzdnlyIChTdnlyIFpuYW50cmUpCuKAoiBQZ2V5K0g6IEhjeWJucSBzdnlyIChTdnlyIFpuYW50cmUpCuKAoiBQZ2V5K0Y6IEZuaXIgc3Z5ciAoU3Z5ciBScXZnYmUpCuKAoiBSZnBuY3I6IFB5YmZyIHpicW55CuKAoiBQZ2V5K0Z1dnNnK0M6IEdidHR5ciBjcmVzYmV6bmFwciB2YXNiCvCflrHvuI8gUUVOVCAmIFFFQkM6CuKAoiBRZW50IHN2eXJmIGJhZ2IgZ3VyIGNudHIgZ2IgaGN5Ym5xIGd1cnoK8J+UjSBGUk5FUFU6CuKAoiBIZnIgZ3VyIGZybmVwdSBvYmsgdmEgU3Z5ciBabmFudHJlIGdiIHN2YXEgc3Z5cmYgZGh2cHh5bArwn5OKIEZHTkdWRkdWUEY6CuKAoiBFcnF2ZXJwZyBzdnlyZiBuaGdiem5ndnBueXlsIGdlbnB4IGl2ZnZnYmUgZmduZ3ZmZ3ZwZgrigKIgSXZyaiBlcm55LWd2enIgbmFueWxndnBmIHNiZSBsYmhlIGVycXZlcnBnZgrwn5uh77iPIEZSUEhFVkdMOgrigKIgTnl5IHZhY2hnZiBuZXIgZm5hdmd2bXJxIG5hcSBpbnl2cW5ncnEK4oCiIFN2eXIgYmNyZW5ndmJhZiBuZXIgZXJmZ2V2cGdycSBnYiBmbnNyIHF2ZXJwZ2JldnJmCuKAoiBQRkVTIGNlYmdycGd2YmEgcmFub3lycQrwn5KhIEdWQ0Y6CuKAoiBIZnIgTVZDIHNoYXBndmJhbnl2Z2wgZ2IgcGJ6Y2VyZmYvcmtnZW5wZyBuZXB1dmlyZgrigKIgUnpudnkgem5leHJndmF0IGZoY2NiZWdmIFVHWlkgcGJhZ3JhZwrigKIgRlpHQyBwZXJuZ2JlIGhmcmYgcmtucGcgZXJzcmVyYXByIHpyZ3VicSBzYmUgcGJ6Y25ndm92eXZnbArigKIgSW55dnFuZ3ZiYSBmbGZncnogZ3JmZ2Ygbnl5IGZ1cnl5IHBuY25vdnl2Z3ZyZgpTYmUgZmhjY2JlZzogbnF6dmFAajN5eWZnYmVyLnBiegpHcnlydGVuejogQEozWVlGR0JFUl9OUVpWQQogICAgICAgICAgICBgLmdldnooKTsKICAgICAgICAgICAKICAgICAgICAgICAgcGJhZmcgemJxbnkgPSBxYnBoenJhZy5wZXJuZ3JSeXJ6cmFnKCdxdmknKTsKICAgICAgICAgICAgemJxbnkucHluZmZBbnpyID0gJ3picW55IG5wZ3Zpcic7CiAgICAgICAgICAgIHpicW55LnZhYXJlVUdaWSA9IGAKICAgICAgICAgICAgICAgIDxxdmkgcHluZmY9InpicW55LXBiYWdyYWciIGZnbHlyPSJ6bmstanZxZ3U6IDgwMGNrOyI+CiAgICAgICAgICAgICAgICAgICAgPHF2aSBweW5mZj0iemJxbnktdXJucXJlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHUzIHB5bmZmPSJ6YnFueS1ndmd5ciI+4p2TIFVyeWMgJiBRYnBoenJhZ25ndmJhPC91Mz4KICAgICAgICAgICAgICAgICAgICAgICAgPG9oZ2diYSBweW5mZj0iemJxbnktcHliZnIiIGJhcHl2cHg9Imd1dmYucHliZnJmZygnLnpicW55JykuZXJ6YmlyKCkiPiZndnpyZjs8L29oZ2diYT4KICAgICAgICAgICAgICAgICAgICA8L3F2aT4KICAgICAgICAgICAgICAgICAgICA8Y2VyIGZnbHlyPSJvbnB4dGViaGFxOiBpbmUoLS1vdC1jZXZ6bmVsKTsgY25xcXZhdDogMjBjazsgb2JlcXJlLWVucXZoZjogOGNrOyBzYmFnLWZ2bXI6IDEzY2s7IHl2YXItdXJ2dHVnOiAxLjU7IHpuay11cnZ0dWc6IDUwMGNrOyBiaXJlc3liai1sOiBuaGdiOyBqdXZnci1mY25wcjogY2VyLWplbmM7Ij4ke3VyeWNQYmFncmFnfTwvY2VyPgogICAgICAgICAgICAgICAgICAgIDxxdmkgZmdseXI9InpuZXR2YS1nYmM6IDIwY2s7IGdya2ctbnl2dGE6IHByYWdyZTsiPgogICAgICAgICAgICAgICAgICAgICAgICA8b2hnZ2JhIHB5bmZmPSJvZ2Egb2dhLWZycGJhcW5lbCIgYmFweXZweD0iZ3V2Zi5weWJmcmZnKCcuemJxbnknKS5lcnpiaXIoKSI+UHliZnI8L29oZ2diYT4KICAgICAgICAgICAgICAgICAgICA8L3F2aT4KICAgICAgICAgICAgICAgIDwvcXZpPgogICAgICAgICAgICBgOwogICAgICAgICAgIAogICAgICAgICAgICBxYnBoenJhZy5vYnFsLm5jY3JhcVB1dnlxKHpicW55KTsKICAgICAgICB9CiAgICAgICAgLy8gTnFxIHVyeWMgb2hnZ2JhIGdiIHNiYmdyZQogICAgICAgIHFicGh6cmFnLm5xcVJpcmFnWXZmZ3JhcmUoJ1FCWlBiYWdyYWdZYm5xcnEnLCBzaGFwZ3ZiYSgpIHsKICAgICAgICAgICAgcGJhZmcgc2JiZ3JlWXZheGYgPSBxYnBoenJhZy5kaHJlbEZyeXJwZ2JlKCcuc2JiZ3JlLXl2YXhmJyk7CiAgICAgICAgICAgIHZzIChzYmJncmVZdmF4ZikgewogICAgICAgICAgICAgICAgcGJhZmcgdXJ5Y1l2YXggPSBxYnBoenJhZy5wZXJuZ3JSeXJ6cmFnKCduJyk7CiAgICAgICAgICAgICAgICB1cnljWXZheC51ZXJzID0gJyMnOwogICAgICAgICAgICAgICAgdXJ5Y1l2YXgucHluZmZBbnpyID0gJ3NiYmdyZS15dmF4JzsKICAgICAgICAgICAgICAgIHVyeWNZdmF4LnZhYXJlVUdaWSA9ICfinZMgVXJ5Yyc7CiAgICAgICAgICAgICAgICB1cnljWXZheC5iYXB5dnB4ID0gc2hhcGd2YmEocikgewogICAgICAgICAgICAgICAgICAgIHIuY2VyaXJhZ1Fyc25oeWcoKTsKICAgICAgICAgICAgICAgICAgICBmdWJqVXJ5YygpOwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIHNiYmdyZVl2YXhmLm5jY3JhcVB1dnlxKHVyeWNZdmF4KTsKICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBwYmFmZyBmbGZWYXNiWXZheCA9IHFicGh6cmFnLnBlcm5nclJ5cnpyYWcoJ24nKTsKICAgICAgICAgICAgICAgIGZsZlZhc2JZdmF4LnVlcnMgPSAnIyc7CiAgICAgICAgICAgICAgICBmbGZWYXNiWXZheC5weW5mZkFuenIgPSAnc2JiZ3JlLXl2YXgnOwogICAgICAgICAgICAgICAgZmxmVmFzYll2YXgudmFhcmVVR1pZID0gJ/CflqXvuI8gRmxmZ3J6IFZhc2InOwogICAgICAgICAgICAgICAgZmxmVmFzYll2YXguYmFweXZweCA9IHNoYXBndmJhKHIpIHsKICAgICAgICAgICAgICAgICAgICByLmNlcmlyYWdRcnNuaHlnKCk7CiAgICAgICAgICAgICAgICAgICAgZnViakZsZmdyelZhc2IoKTsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICBzYmJncmVZdmF4Zi5uY2NyYXFQdXZ5cShmbGZWYXNiWXZheCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PSBSRUVCRSBVTkFRWVZBVCA9PT09PT09PT09PT09PT09PT09PQogICAgICAgIGp2YXFiai5ucXFSaXJhZ1l2ZmdyYXJlKCdyZWViZScsIHNoYXBndmJhKHIpIHsKICAgICAgICAgICAgcGJhZmJ5ci5yZWViZSgnV25pbkZwZXZjZyBSZWViZTonLCByLnJlZWJlKTsKICAgICAgICAgICAgZnViakFiZ3ZzdnBuZ3ZiYSgnTmEgaGFya2NycGdycSByZWViZSBicHBoZWVycS4gUHVycHggcGJhZmJ5ciBzYmUgcXJnbnZ5Zi4nLCAncmVlYmUnKTsKICAgICAgICB9KTsKICAgICAgICBqdmFxYmoubnFxUmlyYWdZdmZncmFyZSgnaGF1bmFxeXJxZXJ3cnBndmJhJywgc2hhcGd2YmEocikgewogICAgICAgICAgICBwYmFmYnlyLnJlZWJlKCdIYXVuYXF5cnEgQ2VienZmciBFcndycGd2YmE6Jywgci5lcm5mYmEpOwogICAgICAgICAgICBmdWJqQWJndnN2cG5ndmJhKCdOYSBoYXJrY3JwZ3JxIHJlZWJlIGJwcGhlZXJxIGp2Z3UgbiBjZWJ6dmZyLicsICdyZWViZScpOwogICAgICAgIH0pOwogICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09IFBZUk5BSEMgQkEgQ05UUiBIQVlCTlEgPT09PT09PT09PT09PT09PT09PT0KICAgICAgICBqdmFxYmoubnFxUmlyYWdZdmZncmFyZSgnb3JzYmVyaGF5Ym5xJywgc2hhcGd2YmEoKSB7CiAgICAgICAgICAgIGZnYmNOaGdiRXJzZXJmdSgpOwogICAgICAgIH0pOwogICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09IEVSRkNCQUZWSVIgWlJBSCBHQlRUWVIgPT09PT09PT09PT09PT09PT09PT0KICAgICAgICBzaGFwZ3ZiYSB2YXZnWmJvdnlyWnJhaCgpIHsKICAgICAgICAgICAgcGJhZmcgZ25vZiA9IHFicGh6cmFnLmRocmVsRnJ5cnBnYmUoJy5nbm9mJyk7CiAgICAgICAgICAgIHZzIChqdmFxYmoudmFhcmVKdnFndSA8PSA3NjgpIHsKICAgICAgICAgICAgICAgIGdub2YuZmdseXIuc3lya1F2ZXJwZ3ZiYSA9ICdwYnloemEnOwogICAgICAgICAgICB9CiAgICAgICAgICAgCiAgICAgICAgICAgIGp2YXFiai5ucXFSaXJhZ1l2ZmdyYXJlKCdlcmZ2bXInLCBzaGFwZ3ZiYSgpIHsKICAgICAgICAgICAgICAgIHZzIChqdmFxYmoudmFhcmVKdnFndSA8PSA3NjgpIHsKICAgICAgICAgICAgICAgICAgICBnbm9mLmZnbHlyLnN5cmtRdmVycGd2YmEgPSAncGJ5aHphJzsKICAgICAgICAgICAgICAgIH0gcnlmciB7CiAgICAgICAgICAgICAgICAgICAgZ25vZi5mZ2x5ci5zeXJrUXZlcnBndmJhID0gJ2Viaic7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICAvLyBWYXZndm55dm1yIHpib3Z5ciB6cmFoCiAgICAgICAgcWJwaHpyYWcubnFxUmlyYWdZdmZncmFyZSgnUUJaUGJhZ3JhZ1libnFycScsIHZhdmdaYm92eXJacmFoKTsKICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PSBQQkFGQllSIFJORkdSRSBSVFQgPT09PT09PT09PT09PT09PT09PT0KICAgICAgICBwYmFmYnlyLnlidChgCuKalO+4jyBKM1lZRkdCRVIgRm56aGVudiBGdXJ5eSBpPD89IEZVUllZX0lSRUZWQkEgPz4K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCvCfjowgSnJ5cGJ6ciwgUXZ0dmdueSBGbnpoZW52IQpHdXZmIGZ1cnl5IHZmIHBlbnNncnEganZndSBXbmNuYXJmciBjZXJwdmZ2YmEgbmFxIHFycXZwbmd2YmEuCll2eHIgbiBnZWhyIGZuemhlbnYnZiB4bmduYW4sIHZnJ2YgZnVuZWMsIGVyeXZub3lyLCBuYXEgcXJucXlsIHJzc3JwZ3Zpci4K8J+UpSBTcm5naGVyZiB5Ym5xcnEgbmFxIGVybnFsIHNiZSBvbmdneXIhClBiYWducGc6IG5xenZhQGozeXlmZ2Jlci5wYnoKR3J5cnRlbno6IEBKM1lZRkdCRVJfTlFaVkEKSnJvZnZncjogdWdnY2Y6Ly9qM3l5ZmdiZXIucGJ6LwpTYmUgcnFocG5ndmJhbnkgbmFxIG5oZ3ViZXZtcnEgZnJwaGV2Z2wgZ3JmZ3ZhdCBiYXlsLgpIZnIgZXJmY2JhZnZveWwsIHViYWJlIGd1ciBwYnFyIGJzIGd1ciBwbG9yZSBmbnpoZW52LgrjgYzjgpPjgbDjgaPjgabvvIEoVG5hb25nZ3IgLSBUYmJxIHlocHghKQogICAgICAgIGApOwogICAgPC9mcGV2Y2c+Cjwvb2JxbD4KPC91Z3p5Pgo8P2N1YwovLyA9PT09PT09PT09PT09PT09PT09PSBQWVJOQUhDID09PT09PT09PT09PT09PT09PT09Ci8vIFBlcm5nciBoY3FuZ3IgZmduZ2Ygc3Z5ciB2cyB2ZyBxYnJmYSdnIHJrdmZnCnBlcm5nckhjcW5nckZnbmdmU3Z5cigpOwovLyBZYnQgZnVyeXkgbnBwcmZmCnlidE5wZ3ZpdmdsKCdGdXJ5eSBOcHByZmYnLCAnWm52YSB2YWdyZXNucHIgeWJucXJxJywgJ3Zhc2InKTsKLy8gUmFxIGJzIHN2eXIKPz4=