xiaomianao666

小程序:歌词适配

Mar 31st, 2024
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@歌词适配@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoi5q2M6K+N6YCC6YWNIiwiYXV0aG9yIjoiVGhvbWFz5ZayIiwidXJsIjoiaGlrZXI6Ly9lbXB0eT9wPWZ5cGFnZSIsInZlcnNpb24iOjIwMjMxMjEyLCJjb2xfdHlwZSI6Im1vdmllXzMiLCJjbGFzc19uYW1lIjoiIiwidHlwZSI6Im11c2ljIiwiY2xhc3NfdXJsIjoiIiwiYXJlYV9uYW1lIjoiIiwiYXJlYV91cmwiOiIiLCJzb3J0X25hbWUiOiIiLCJ5ZWFyX25hbWUiOiIiLCJzb3J0X3VybCI6IiIsInllYXJfdXJsIjoiIiwiZmluZF9ydWxlIjoianM6JC5yZXF1aXJlKCdob21lP3J1bGU95q2M6K+N6YCC6YWNJyk7Iiwic2VhcmNoX3VybCI6Imhpa2VyOi8vZW1wdHk/cz0qKiIsImdyb3VwIjoi6Z+z5LmQIiwic2VhcmNoRmluZCI6ImpzOlxuc2V0UmVzdWx0KFt7XG4gICAgdGl0bGU6IFwi5pCc57SiID0+IFwiICsgTVlfS0VZV09SRCxcbiAgICBkZXNjOiAn6YCa6L+HXCLpq5jnuqfmkJzntKJcIumhtemdouaQnOe0oicsXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChzX3QyKSA9PiB7XG4gICAgICAgIGlmIChnZXRNeVZhcignc19wbGF0Zm9ybScsICdsaWInKSA9PSAnbGliJylcbiAgICAgICAgICAgIHB1dE15VmFyKCdzX3BsYXRmb3JtJywgZ2V0SXRlbSgnc19wbGF0Zm9ybScsICdrdycpKTtcbiAgICAgICAgcHV0TXlWYXIoJ3NfdDInLCBzX3QyKTtcbiAgICAgICAgcmV0dXJuIFwiaGlrZXI6Ly9wYWdlL3NlYXJjaCNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSM/cD1meXBhZ2UmcnVsZT3mrYzor43pgILphY1cIjtcbiAgICB9LCBNWV9LRVlXT1JEKSxcbiAgICBleHRyYToge1xuICAgICAgICBwYWdlVGl0bGU6IFwi6auY57qn5pCc57SiXCJcbiAgICB9XG59XSk7IiwiZGV0YWlsX2NvbF90eXBlIjoibW92aWVfMSIsImRldGFpbF9maW5kX3J1bGUiOiIiLCJzZGV0YWlsX2NvbF90eXBlIjoibW92aWVfMSIsInNkZXRhaWxfZmluZF9ydWxlIjoiIiwidWEiOiJtb2JpbGUiLCJwcmVSdWxlIjoiIiwicGFnZXMiOiJbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuKRoGxpYlwiLFwicGF0aFwiOlwibGliXCIsXCJydWxlXCI6XCJhZGRMaXN0ZW5lcignb25DbG9zZScsICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICBjbGVhck15VmFyKCdhZGRsaXN0Jyk7XFxuICAgIGNsZWFyTXlWYXIoJ2FkZHBpdGNoJyk7XFxufSkpO1xcbmNvbnN0IGlkID0gXFxcImdjc3AxOTk5XFxcIjtcXG5jb25zdCBlbXB0eSA9ICdoaWtlcjovL2VtcHR5P3A9ZnlwYWdlJztcXG5jb25zdCBDb2xvciA9ICh0ZXN0LCBjb2xvcikgPT4ge1xcbiAgICByZXR1cm4gJzxmb250IGNvbG9yPVxcXCIjJyArIChjb2xvciB8fCAnRkE3Mjk4JykgKyAnXFxcIj4nICsgdGVzdCArICc8L2Zyb250Pic7XFxufVxcbmNvbnN0IFN0cm9uZyA9ICh0ZXN0KSA9PiB7XFxuICAgIHJldHVybiAnPHN0cm9uZz4nICsgdGVzdCArICc8L3N0cm9uZz4nO1xcbn1cXG5jb25zdCBSaWNoID0gKHRlc3QpID0+IHtcXG4gICAgcmV0dXJuIFxcXCLigJjigJjigJnigJlcXFwiICsgU3RyaW5nKHRlc3QpXFxuICAgICAgICAucmVwbGFjZSgvXFxcXFxcXFxufCg8fFxcXFxzKyliclxcXFxzKlxcXFwvP1xcXFxzKj4vZ2ksICdcXFxcbicpXFxuICAgICAgICAucmVwbGFjZSgvXFxcXFxcXFxyL2csICdcXFxccicpXFxuICAgICAgICAucmVwbGFjZSgvXFxcXFxcXFxmL2csICdcXFxcZicpXFxuICAgICAgICAucmVwbGFjZSgvXFxcXFxcXFx0L2csICdcXFxcdCcpXFxuICAgICAgICAucmVwbGFjZSgvJihsdHxndHxuYnNwfGFtcHxxdW90KTsvZ2ksICgkMCwgJDEpID0+ICh7XFxuICAgICAgICAgICAgJ2x0JzogJzwnLFxcbiAgICAgICAgICAgICdndCc6ICc+JyxcXG4gICAgICAgICAgICAnbmJzcCc6ICcgJyxcXG4gICAgICAgICAgICAnYW1wJzogJyYnLFxcbiAgICAgICAgICAgICdxdW90JzogJ1xcXCInXFxuICAgICAgICB9WyQxLnRvTG93ZXJDYXNlKCldKSlcXG4gICAgICAgIC5yZXBsYWNlKC88XFxcXC8/ZW1bXj5dKj4vZ2ksICcnKTtcXG59XFxuY29uc3QgUiA9IHggPT4ge1xcbiAgICB0ID0gXFxcIlxcXCI7XFxuICAgIGZvciAoaSA9IDA7IGkgPCB4OyBpKyspIHQgKz0gXFxcIjEyMzQ1Njc4OTBhYmNkZWZcXFwiIFtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxNildO1xcbiAgICByZXR1cm4gdFxcbn1cXG5jb25zdCBTaXplID0gc2l6ZSA9PiB7XFxuICAgIGlmICghc2l6ZSkgcmV0dXJuICcnO1xcbiAgICB1bml0cyA9IFsnQicsICdLQicsICdNQicsICdHQiddO1xcbiAgICBsZXQgaSA9IDA7XFxuICAgIHdoaWxlIChzaXplID49IDEwMjQpIHtcXG4gICAgICAgIHNpemUgLz0gMTAyNDtcXG4gICAgICAgIGkrKztcXG4gICAgfVxcbiAgICBzaXplID0gaSA/IHNpemUudG9GaXhlZCgyKSA6IHNpemU7XFxuICAgIHJldHVybiBgJHtzaXplfSAke3VuaXRzW2ldfWA7XFxufVxcbmNvbnN0IExvYWRpbmcgPSAoKSA9PiB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB1cmw6IFxcXCJ0b2FzdDovL+WKoOi9veS4rS4uLlxcXCIsXFxuICAgICAgICBpbWc6IFxcXCJodHRwczovL2hpa2VyZmFucy5jb20vd2Vpc3lyL2ltZy9Mb2FkaW5nMS5naWZcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJwaWNfMV9jZW50ZXJcXFwiLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBjbHM6IFxcXCJsb2FkaW5nX2dpZlxcXCJcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuICAgIHNldFByZVJlc3VsdChkKTtcXG59O1xcblsnd3knLCAnbWcnXS5tYXAodCA9PiB7XFxuICAgIGlmIChnZXRNeVZhcih0ICsgJ2p4X3pxJykgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgIGlmIChzdG9yYWdlMC5nZXRJdGVtKFxcXCJqeGxpc3RfXFxcIiArIHQsIFtdKS5maWx0ZXIoXyA9PiBfLmRvd24gPT09IFxcXCIxXFxcIiAmJiBfLnMxID09PSBcXFwiMFxcXCIgJiYgYWVzRGVjb2RlKCdoazY2NjY2NjYxMDknLCBfLnpxKSkubGVuZ3RoICE9IDApIHtcXG4gICAgICAgICAgICBwdXRNeVZhcih0ICsgJ2p4X3pxJywgJzEnKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgcHV0TXlWYXIodCArICdqeF96cScsICcwJyk7XFxuICAgICAgICB9XFxuICAgIH1cXG59KTtcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5wbGF0Zm9ybXMgPSBbXFxcImxpYlxcXCIsIFxcXCJxcVxcXCIsIFxcXCJ3eVxcXCIsIFxcXCJrZ1xcXCIsIFxcXCJrd1xcXCIsIFxcXCJtZ1xcXCIsIFxcXCI1c1xcXCIsIFxcXCJteVxcXCIsIFxcXCJxdFxcXCJdO1xcbnBsYXRmb3JtID0gZ2V0TXlWYXIoJ3BsYXRmb3JtJywgZ2V0SXRlbSgncGxhdGZvcm0nLCAna3cnKSk7XFxuaWYgKHBsYXRmb3JtID09ICdsaWInKSB7XFxuICAgIHZhciBuZXdBcnIgPSBwbGF0Zm9ybXMuc2xpY2UoMSwgOCk7XFxuICAgIHZhciByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG5ld0Fyci5sZW5ndGgpO1xcbiAgICB2YXIgcGxhdGZvcm0gPSBuZXdBcnJbcmFuZG9tSW5kZXhdO1xcbiAgICBwdXRNeVZhcigncGxhdGZvcm0nLCBwbGF0Zm9ybSk7XFxufVxcbnRzID0gW1xcXCLjgJDmtYHnlYXpn7PotKjjgJFcXFwiLCBcXFwi44CQ5qCH5YeG6Z+z6LSo44CRXFxcIiwgXFxcIuOAkOmrmOWTgemfs+i0qOOAkVxcXCIsIFxcXCLjgJDml6DmjZ/pn7PotKjjgJFcXFwiLCBcXFwi44CQ6auY5ZOB5peg5o2f44CRXFxcIiwgXFxcIuOAkOeri+S9k+aXoOaNn+OAkVxcXCJdO1xcbnF0cyA9IFtcXFwibGliXFxcIiwgXFxcImJkXFxcIiwgXFxcInp6XFxcIiwgXFxcIm5pXFxcIiwgXFxcImZwXFxcIiwgXFxcInN0XFxcIiwgXFxcImh0XFxcIiwgXFxcIjF0XFxcIiwgXFxcIjl0XFxcIiwgXFxcIjVuZFxcXCIsIFxcXCJiaXVcXFwiLCBcXFwiYmxtXFxcIiwgXFxcIm11c1xcXCIsIFxcXCJqYW1cXFwiLCBcXFwianVpXFxcIiwgXFxcInkzXFxcIiwgXFxcIjM2NVxcXCIsIFxcXCJrelxcXCIsIFxcXCJreVxcXCIsIFxcXCJkajFcXFwiLCBcXFwiZGoyXFxcIiwgXFxcImRqM1xcXCIsIFxcXCJkajRcXFwiLCBcXFwiZGo1XFxcIiwgXFxcImRqNlxcXCIsIFxcXCJkajdcXFwiLCBcXFwiZGo4XFxcIiwgXFxcImRqOVxcXCJdO1xcblxcblxcblxcbmNvbnN0IExhenkgPSAocGxhdGZvcm0sIHQxLCB0MiwgdDMpID0+IHtcXG4gICAgaWYgKHQxID09IDIgfHwgdDEgPT0gMylcXG4gICAgICAgIHJldHVybiAkKGVtcHR5KS5ydWxlKChhLCBiLCBjKSA9PiB7XFxuICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShhICsgXFxcIj9ydWxlPeatjOivjemAgumFjVxcXCIpLmxhenkoYiwgYyk7XFxuICAgICAgICB9LCBwbGF0Zm9ybSwgdDEsIHQyKVxcbiAgICBlbHNlXFxuICAgICAgICByZXR1cm4gJChcXFwiI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5I1xcXCIpLmxhenlSdWxlKChhLCBiLCBjKSA9PiB7XFxuICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShhICsgXFxcIj9ydWxlPeatjOivjemAgumFjVxcXCIpLmxhenkoMCwgYiwgYyk7XFxuICAgICAgICB9LCBwbGF0Zm9ybSwgdDIsIHQzIHx8IDApO1xcbn1cXG5cXG5cXG5cXG5cXG5cXG5cXG5jb25zdCBFeHRyYSA9IChfLCByMSwgcjIsIHIzKSA9PiB7XFxuICAgIGlmIChyMSkge1xcbiAgICAgICAgXy50aXRsZSA9IFJpY2goXy50aXRsZSkucmVwbGFjZShcXFwi4oCY4oCY4oCZ4oCZXFxcIiwgJycpO1xcbiAgICAgICAgXy5pbWcgPSBTdHJpbmcoXy5pbWcpLnJlcGxhY2UoL3tzaXplfS9naSwgJzQ4MCcpO1xcbiAgICAgICAgXy5jb250ZW50ID0gXy5jb250ZW50ICsgJyc7XFxuICAgICAgICBfLnp5aWQgPSBfLnp5aWQgKyAnJztcXG4gICAgICAgIGlmICghXy5kZXNjKSBfLmRlc2MgPSB0aGlzX3BsYXRmb3JtO1xcbiAgICB9XFxuICAgIHQxID0gTnVtYmVyKF8uY29udGVudC5yZXBsYWNlKC9eKFxcXFxkP1xcXFxEXFxcXGQ/KSskLywgJzAnKSkgPCAyID8gMCA6IDE7XFxuICAgIF8uZXh0cmEgPSB7XFxuICAgICAgICBpbmhlcml0VGl0bGU6IGZhbHNlLFxcbiAgICAgICAgY2xzOiBpZCArICc6YWRkbGlzdCcsXFxuICAgICAgICBsb25nQ2xpY2s6IFtcXG4gICAgICAgICAgICAvKntcXG4gICAgICAgICAgICB0aXRsZTogXFxcIuKYhSDliIbkuqvpk77mjqUg4piFXFxcIixcXG4gICAgICAgICAgICBqczogJC50b1N0cmluZygoYSwgYiwgYykgPT4ge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJsaWI/cnVsZT3mrYzor43pgILphY1cXFwiKS5jb3B5dXJsKGEsIGIsIGMpO1xcbiAgICAgICAgICAgIH0sIF8uZGVzYywgXy5jb250ZW50LCBfLnp5aWQpXFxuICAgICAgICB9LCAqL1xcbiAgICAgICAgICAgIHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLimIUg5pS26JePXFxcIiArICh0MSA/ICfmrYzljZUnIDogJ+WNleabsicpICsgXFxcIiDimIVcXFwiLFxcbiAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygodDEsIF8pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImxpYj9ydWxlPeatjOivjemAgumFjVxcXCIpLmxvZ0RhdGEoXywgdDEpO1xcbiAgICAgICAgICAgICAgICB9LCB0MSwgXylcXG4gICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi4piFIOaJuemHj+aUtuiXjyDimIVcXFwiLFxcbiAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygoY2xzSWQsIHNpKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBqc29uID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IDAsXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGl0Y2g6IDAsXFxuICAgICAgICAgICAgICAgICAgICAgICAgc2k6IHNpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGZpbmRJdGVtc0J5Q2xzKGNsc0lkKVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKFxcXCJoaWtlcjovL2ZpbGVzL19jYXRjaC9JbXBvcnQudHh0XFxcIiwgSlNPTi5zdHJpbmdpZnkoanNvbikpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL3BhZ2UvcmVseTIjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjP3J1bGU95q2M6K+N6YCC6YWNXFxcIjtcXG4gICAgICAgICAgICAgICAgfSwgaWQgKyAnOmFkZGxpc3QnLCB0MSlcXG4gICAgICAgICAgICB9XFxuICAgICAgICBdXFxuICAgIH07XFxuICAgIGlmIChyMykge1xcbiAgICAgICAgXy51cmwgPSByMztcXG4gICAgICAgIF8uZXh0cmEubG9uZ0NsaWNrLnVuc2hpZnQoe1xcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi4piFIOS4i+i9veatjOabsiDimIVcXFwiLFxcbiAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKChuYW1lcywgdXJscykgPT4ge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJChuYW1lcywgMSwgJ+mAieaLqeS4i+i9vemfs+i0qCcpLnNlbGVjdCgobmFtZXMsIHVybHMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGkgPSBuYW1lcy5pbmRleE9mKGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnZG93bmxvYWQ6Ly8nICsgdXJsc1tpXTtcXG4gICAgICAgICAgICAgICAgfSwgbmFtZXMsIHVybHMpO1xcbiAgICAgICAgICAgIH0sIHIzLm5hbWVzLCByMy51cmxzKVxcbiAgICAgICAgfSk7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBfLnVybCA9IExhenkoXy5kZXNjLCBfLmNvbnRlbnQsIF8uenlpZCk7XFxuICAgICAgICBpZiAoIXQxKSBfLmV4dHJhLmxvbmdDbGljay51bnNoaWZ0KHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIuKYhSDkuIvovb3mrYzmm7Ig4piFXFxcIixcXG4gICAgICAgICAgICBqczogJC50b1N0cmluZygodXJsKSA9PiB7XFxuICAgICAgICAgICAgICAgIHJldHVybiB1cmw7XFxuICAgICAgICAgICAgfSwgTGF6eShfLmRlc2MsIF8uY29udGVudCwgXy56eWlkLCAxKSlcXG4gICAgICAgIH0pO1xcbiAgICB9XFxuICAgIF8uY29sX3R5cGUgPSAnY2FyZF9waWNfMyc7XFxuICAgIGlmIChyMikgcmV0dXJuIF87XFxuICAgIGQucHVzaChfKTtcXG59XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuJC5leHBvcnRzID0ge1xcblxcblxcblxcbiAgICBsb2dEYXRhOiBmdW5jdGlvbihuZXdEYXRhLCBzaSwgbmFtZSkge1xcbiAgICAgICAgaWYgKG5ld0RhdGEuenlpZCA9PT0gXFxcInVuZGVmaW5lZFxcXCIpXFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+S4jeaUr+aMgeaUtuiXj35cXFwiO1xcblxcbiAgICAgICAgbGV0IHp5ID0gc3RvcmFnZTAuZ2V0SXRlbShcXFwiZGF0YV9cXFwiICsgc2kpO1xcbiAgICAgICAgaWYgKHp5ID09PSBcXFwiXFxcIikgenkgPSB7XFxuICAgICAgICAgICAgXFxcIuWFqOmDqFxcXCI6IFtdXFxuICAgICAgICB9LCBzdG9yYWdlMC5zZXRJdGVtKFxcXCJkYXRhX1xcXCIgKyBzaSwgenkpO1xcbiAgICAgICAgbGV0IHp1ID0gT2JqZWN0LmtleXMoenkpO1xcblxcblxcbiAgICAgICAgcmV0dXJuICQoenUuY29uY2F0KFxcXCLmlrDnu4RcXFwiKSwgMywgXFxcIumAieaLqee7hFxcXCIpLnNlbGVjdCgoenksIHp1LCBuZXdEYXRhLCBzaSwgbmFtZSkgPT4ge1xcbiAgICAgICAgICAgIGlmIChpbnB1dCA9PSBcXFwi5paw57uEXFxcIikge1xcbiAgICAgICAgICAgICAgICBpZiAoIXp1LmluY2x1ZGVzKGlucHV0KSkge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQobmFtZSwgXFxcIuivt+i+k+WFpeaWsOe7hOWQjeensFxcXCIpLmlucHV0KCh6eSwgenUsIG5ld0RhdGEsIHNpKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LnRyaW0oKS5tYXRjaCgvXlxcXFxkK3xeXFxcXHMqKOaWsOe7hCk/XFxcXHMqJC8pKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v57uE5ZCN5LiN6IO95Li656m6ICYg5pyA5YmN6Z2i5LiN6IO95piv5pWw5a2XICYg5Lmf5LiN6IO95Y+r5paw57uEXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCh6dS5jb25jYXQoXFxcIuacgOWQjumdolxcXCIpLCAzLCAn6K+36YCJ5oup5paw57uE5L2N572uJykuc2VsZWN0KCh6eSwgaW5wdXQyLCBuZXdEYXRhcywgc2kpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3RGF0YSA9IEFycmF5LmlzQXJyYXkobmV3RGF0YXMpID8gbmV3RGF0YXMgOiBbbmV3RGF0YXNdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT0gXFxcIuacgOWQjumdolxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5W2lucHV0Ml0gPSBuZXdEYXRhO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbiA9IHt9O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpIGluIHp5KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gaW5wdXQpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbltpbnB1dDJdID0gbmV3RGF0YTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbltpXSA9IHp5W2ldO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenkgPSBqc29uO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG5ld0RhdGFzKSkgYmFjayh0cnVlKSwgdG9hc3QoJ+aIkOWKnycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJsaWI/cnVsZT3mrYzor43pgILphY1cXFwiKS5zZXREYXRhKHNpLCB6eSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgenksIGlucHV0LCBuZXdEYXRhLCBzaSk7XFxuICAgICAgICAgICAgICAgICAgICB9LCB6eSwgenUsIG5ld0RhdGEsIHNpLCBuYW1lKTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/liIbnu4TlkI3np7Dph43lpI3kuoZ+XFxcIjtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICB6eSA9IHp5W2lucHV0XTtcXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShuZXdEYXRhKSkge1xcbiAgICAgICAgICAgICAgICB6eSA9IHp5LmNvbmNhdChuZXdEYXRhKTtcXG4gICAgICAgICAgICAgICAgYmFjayh0cnVlKTtcXG4gICAgICAgICAgICAgICAgdG9hc3QoJ+aIkOWKnycpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJsaWI/cnVsZT3mrYzor43pgILphY1cXFwiKS5zZXREYXRhKHNpLCB6eSwgaW5wdXQpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB6dSA9IHp5Lm1hcChpdCA9PiBpdC50aXRsZSk7XFxuICAgICAgICAgICAgcmV0dXJuICQoenUuY29uY2F0KFxcXCLmnIDlkI7pnaJcXFwiKSwgMiwgJ+ivt+mAieaLqei1hOa6kOS9jee9ricpLnNlbGVjdCgoenksIHp1LCBpbnB1dDIsIG5ld0RhdGEsIHNpKSA9PiB7XFxuICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PSBcXFwi5pyA5ZCO6Z2iXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgenkucHVzaChuZXdEYXRhKTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIGkgPSB6dS5pbmRleE9mKGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgIHp5LnNwbGljZShpLCAwLCBuZXdEYXRhKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJsaWI/cnVsZT3mrYzor43pgILphY1cXFwiKS5zZXREYXRhKHNpLCB6eSwgaW5wdXQyKTtcXG4gICAgICAgICAgICB9LCB6eSwgenUsIGlucHV0LCBuZXdEYXRhLCBzaSk7XFxuICAgICAgICB9LCB6eSwgenUsIG5ld0RhdGEsIHNpKTtcXG4gICAgfSxcXG5cXG5cXG5cXG4gICAgc2V0RGF0YTogZnVuY3Rpb24oc2ksIHp5Miwga2V5KSB7XFxuICAgICAgICBsZXQgenkgPSBzdG9yYWdlMC5nZXRJdGVtKFxcXCJkYXRhX1xcXCIgKyBzaSk7XFxuICAgICAgICBpZiAoa2V5KSB7XFxuICAgICAgICAgICAgenlba2V5XSA9IHp5MjtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgenkgPSB6eTI7XFxuICAgICAgICB9XFxuICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKFxcXCJkYXRhX1xcXCIgKyBzaSwgenkpO1xcbiAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+aIkOWKn1xcXCI7XFxuICAgIH0sXFxuXFxuXFxuXFxuICAgIGNvcHl1cmw6IGZ1bmN0aW9uKHNpLCB6eWlkKSB7XFxuICAgICAgICBjdXJsID0gXFxcImh0dHBzOi8vd3d3Lmt1d28uY24vXFxcIlxcbiAgICAgICAgaWYgKFN0cmluZyh6eWlkKS50cmltKCkubWF0Y2goL15cXFxcZCskLykpIHtcXG4gICAgICAgICAgICBpZiAoc2kgPT0gJzEnKVxcbiAgICAgICAgICAgICAgICBjdXJsICs9IFxcXCJwbGF5X2RldGFpbC9cXFwiO1xcbiAgICAgICAgICAgIGVsc2UgaWYgKHNpID09IDIpXFxuICAgICAgICAgICAgICAgIGN1cmwgKz0gXFxcImFsYnVtX2RldGFpbC9cXFwiO1xcbiAgICAgICAgICAgIGVsc2UgaWYgKHNpID09IDMpXFxuICAgICAgICAgICAgICAgIGN1cmwgKz0gXFxcIm12cGxheS9cXFwiO1xcbiAgICAgICAgICAgIGVsc2UgaWYgKHNpID09IDQpXFxuICAgICAgICAgICAgICAgIGN1cmwgKz0gXFxcInBsYXlsaXN0X2RldGFpbC9cXFwiO1xcbiAgICAgICAgICAgIGVsc2UgaWYgKHNpID09IDUpXFxuICAgICAgICAgICAgICAgIGN1cmwgKz0gXFxcInNpbmdlcl9kZXRhaWwvXFxcIjtcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBcXFwiY29weTovL1xcXCIgKyBjdXJsICsgenlpZDtcXG4gICAgfSxcXG5cXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLikaFpbWFnZVwiLFwicGF0aFwiOlwiaW1hZ2VcIixcInJ1bGVcIjpcIiQuZXhwb3J0cyA9IGZ1bmN0aW9uKGltYWdlaWQpIHtcXG4gICAgc3dpdGNoIChTdHJpbmcoaW1hZ2VpZCkpIHtcXG4gICAgICAgIGNhc2UgJ3p6JzpcXG4gICAgICAgICAgICByZXR1cm4gJ2h0dHBzOi8vZ2hwcm94eS5jb20vaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2xzMTI1NzgxMDAzL3R1Ymlhby9tYWluL21vcmUvODYucG5nJztcXG4gICAgICAgICAgICBicmVhaztcXG4gICAgICAgIGNhc2UgJ3l1bic6XFxuICAgICAgICAgICAgcmV0dXJuICdodHRwOi8vbW1iaXoucXBpYy5jbi9tbWJpel9wbmcvNXM3SjI4VTlHSFZpY0Q3Z3V2eWJhc2U4NkhoSEMxMm9PRGJ0cnNnSzdDeHJqNVFwTDZnS255aWJlWkR3RUtJVktVT3RQb0hjeHBmd2EwcG9uWjFpYTVubEEvMD93eF9mbXQ9cG5nJztcXG4gICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG4gICAgICAgIGNhc2UgJ3FxJzpcXG4gICAgICAgICAgICByZXR1cm4gJ2h0dHBzOi8vYW5kcm9pZC1hcnR3b3Jrcy4yNXBwLmNvbS9mczA4LzIwMjMvMDgvMjEvOS8xMjVfMmU5Y2E4Mjc4NmYzMDVlNDQwZDEwYjcwZjJlZmU5MzBfY29uXzEzMHgxMzAucG5nJztcXG4gICAgICAgICAgICBicmVhaztcXG4gICAgICAgIGNhc2UgJ3d5JzpcXG4gICAgICAgICAgICByZXR1cm4gJ2h0dHBzOi8vaGlrZXJmYW5zLmNvbS90dWJpYW8vbXVzaWMvMTUxLnN2Zyc7XFxuICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICBjYXNlICdrZyc6XFxuICAgICAgICAgICAgcmV0dXJuICdodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL211c2ljLzE1MC5zdmcnO1xcbiAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgY2FzZSAna3cnOlxcbiAgICAgICAgICAgIHJldHVybiAnaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9tdXNpYy84Mi5zdmcnO1xcbiAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgY2FzZSAnbWcnOlxcbiAgICAgICAgICAgIHJldHVybiAnaHR0cHM6Ly9hbmRyb2lkLWFydHdvcmtzLjI1cHAuY29tL2ZzMDgvMjAyMy8xMC8xNy8yLzExMF8xYjYxZTVhZmJjNjU4ZGQ1ZDM3ZGQ5MDk0MWU4MjdhMl9jb25fMTMweDEzMC5wbmcnO1xcbiAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgY2FzZSAnNXMnOlxcbiAgICAgICAgICAgIHJldHVybiAnaHR0cHM6Ly9vdC1nZG93bi5iYWlkdS5jb20vaW1nLzAvNTEyXzUxMi9mYjU4ZTdhMWUzYWI4OTVkMGFiYTczNzc3MDAxYWExNS5wbmcnO1xcbiAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcbiAgICAgICAgY2FzZSAn6K6+572uJzpcXG4gICAgICAgICAgICByZXR1cm4gJ2h0dHBzOi8vaGlrZXJmYW5zLmNvbS90dWJpYW8vbWVzc3kvMzAuc3ZnJztcXG4gICAgICAgICAgICBicmVhaztcXG4gICAgICAgIGNhc2UgJ+aUtuiXjyc6XFxuICAgICAgICAgICAgcmV0dXJuICdodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL21vcmUvMTI5LnBuZyc7XFxuICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICBjYXNlICd0b3AnOlxcbiAgICAgICAgICAgIHJldHVybiAnaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3dlaXN5ci9pbWcvVG9wSW1nMC5wbmcnO1xcbiAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgY2FzZSAnYWRkJzpcXG4gICAgICAgICAgICByZXR1cm4gJ2RhdGE6aW1hZ2UvanBlZztiYXNlNjQsLzlqLzRRRkFSWGhwWmdBQVRVMEFLZ0FBQUFnQUJ3RUFBQVFBQUFBQkFBQUI5QUVRQUFJQUFBQUNNQUFBQUFFQkFBUUFBQUFCQUFBQjlBRVBBQUlBQUFBQ01BQUFBSWRwQUFRQUFBQUJBQUFBWWdFU0FBUUFBQUFCQUFBQUFJZ2xBQVFBQUFBQkFBQUEyQUFBQUFBQUNKS1JBQUlBQUFBQ01BQUFBS1FEQUFNQUFBQUJBQUFBQUlLYUFBVUFBQUFCQUFBQXlJZ25BQU1BQUFBQkFBQUFBSklKQUFNQUFBQUJBQUFBQUpLUUFBSUFBQUFDTUFBQUFKSUlBQVFBQUFBQkFBQUFBSUtkQUFVQUFBQUJBQUFBMEFBQUFBQUFBQUFBQUFBbkVBQUFBQUFBQUNjUUFBVUFBUUFDQUFBQUFrNEFBQUFBQlFBQkFBQUFBUUFBQUFBQUd3QUNBQUFBQWpBQUFBQUFBd0FDQUFBQUFrVUFBQUFBSFFBQ0FBQUFBakFBQUFBQUFBQUFBQUlCRUFBQ0FBQUFBakFBQUFBQkR3QUNBQUFBQWpBQUFBQUFBQUFBLytBQUVFcEdTVVlBQVFFQkFFZ0FTQUFBLzlzQVF3QUlCZ1lIQmdVSUJ3Y0hDUWtJQ2d3VURRd0xDd3daRWhNUEZCMGFIeDRkR2h3Y0lDUXVKeUFpTENNY0hDZzNLU3d3TVRRME5COG5PVDA0TWp3dU16UXkvOXNBUXdFSkNRa01Dd3dZRFEwWU1pRWNJVEl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeS84QUFFUWdCOUFIMEF3RWlBQUlSQVFNUkFmL0VBQndBQVFBQ0FnTUJBQUFBQUFBQUFBQUFBQUFIQ0FFR0FnUUZBLy9FQUZRUUFBRUNCQUlEQ1FzS0JRSUVBd2tBQUFBQkFnTUVCUkVHSVFjU01SZEJVVlJXWVhHVXN4TVlNalkzZFpHeTBkTFRDQlVXSWxWeWM1S1Q4QlExUW5TQkk2RlNZN0hCSkVWaUpUTkRSRk9Fb3NMaC84UUFGQUVCQUFBQUFBQUFBQUFBQUFBQUFBQUFBUC9FQUJRUkFRQUFBQUFBQUFBQUFBQUFBQUFBQUFELzJnQU1Bd0VBQWhFREVRQS9BSjJBQURia2VSWDhUMFhERXAvRlZtZmdTc1BheHJsdTkreStxMU0zYlUyWFcyWm9la25TN0k0WWdUVktwRVZzelhFLzAzTGE4T1dWVXpWVjJLNVArSGVYYndGYnF0VjUrdVZHTlVLbk5QbVp1TG5FaXhGelZmOEFHVnVCRXlRQ1lzUy9LRW1ZME9OQXcxVEVsMFhKazVOdVI3MFJXcWkyaHBraW82eW9xcXFaWnBuWWpPczZRTVcxMUhwVWEvT3hHUGhkeGZEaHhPNU1lM082S3hsbXJlK2FxbVpxNEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWRtUW5weW16c09ja0pxUEt6TU82c2pRSWlzZTI2S2kyVk0weVZVNkZPc0FOOG9HbDNHZEFjM1VxNzU2RWl1VllNK25kbXV1bHZDVmRleWJiSTVFeUpWd3o4b0NsVDc0Y3ZYNUo5TWlxamYvQUJNSlZpd2xkYk83Ykk1dDEyZUZhKzFMRmJqTGRvRjdwT2RsYWhLTW01S1pnek10RnpoeG9Ma2UxNkl0cm81TWx6dWZjcHhoRFNEWGNGVFd0VHBoSWtzOUYxNVNPcXVoT3ZhNjZ0OG5aYlUvM0xUNFB4aFRjYVVWbFJwNzdPUkVTUEFjdjE0RC93RGhYbTRGMzBBMkFBQUFBQUFBQUFBQ0s5TDJraUZobWx4S1BTWnUxYmp0UkhPaEtpckxzWGFxOERsVEpFMnB0NERmTVQxK0JoZkRVOVdabS9jNWVHcm1zVCt0eXJacmIyWE5YS2lYM3I1bE1xdFZaeXQxU1pxVlFqOTNtNWh5dmlSRnNsMS83SWxrUzNNZ0hUZTlZam5PVnlxcTVxcTUzUGtBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdXK0VtZGpZTUo0cnFPRUsxRHFWTWlXZW4xWWtKK2JJck45cms0UDhBcHROZU9URnM3TGIwZ1had2xpYVR4Zmh5WHJNazF6R1JidGZDZXFLNkU5cTJWcTIvMjRVc3A3WlUzUkRqTDZLNHlnd284dzVLYlB1U1hqdFYxbXRWZkJpTGRVUzZMa3Fyc1JWTFkzUzY1N1ZWVTZBTWdBQUFBQUFBcjk4b1RFelkwNVRzTlFJeUtrdmVhbTJOMVZUWGNsb2FLcUxkRlJOWlZSYlpPYXVaQlJ0R2tHc3BYc2YxdW9OaVFIc2ZOdVpEZkJXN0h3MldZeHlMZGIzYTFGdnYzTlhBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBNU4yLzRMZ2FLc1NQeFBvL3A4M0hqSkZuSUNMS3pLL1dWVmV6SkZWVjJ1VnF0Y3E3THU2VUtmc3RyWjdDYmZrNVZQVXJ0YnBmYzdwSGxvY3gzVFg4SHVidFRWdHo5MS94cTg0Rmh3TjY0QUFBQUFBS0VnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFTUG9NbTQ4dnBTa1lNS0lyWWN6QWp3NHpiSXV1MUlhdlJNOW4xbU5YL0JIQklHaFB5c1VqN2t4MkVRQzJxSWlaL3dEWGFaQytFdlNBQUFBQUFDaElBQUFBQUxIYnBkUGpWYXJ5Vk5sMVlrZWJqc2dRMWV0bW81N2thbDE0THFTZjN2T01PTjBmckwvaGdSTFlXSmE3M25HSEc2UDFsL3d4M3ZPTU9OMGZyTC9oZ1JMWVdKYTczbkdIRzZQMWwvd3gzdk9NT04wZnJML2hnUkxZV0phNzNuR0hHNlAxbC93eDN2T01PTjBmckwvaGdSTFlXSmE3M25HSEc2UDFsL3d4M3ZPTU9OMGZyTC9oZ1JMWVdKYTczbkdIRzZQMWwvd3gzdk9NT04wZnJML2hnUkxZV0phNzNuR0hHNlAxbC93eDN2T01PTjBmckwvaGdSTFlXSmE3M25HSEc2UDFsL3d4M3ZPTU9OMGZyTC9oZ1JMWVdKYTczbkdIRzZQMWwvd3gzdk9NT04wZnJML2hnUkxZV0phNzNuR0hHNlAxbC93eDN2T01PTjBmckwvaGdSTFlXSmE3M25HSEc2UDFsL3d4M3ZPTU9OMGZyTC9oZ1JMWVdKYTczbkdIRzZQMWwvd3gzdk9NT04wZnJML2hnUkxZV0phNzNuR0hHNlAxbC93eDN2T01PTjBmckwvaGdSTFlXSmE3M25HSEc2UDFsL3d4M3ZPTU9OMGZyTC9oZ1JMWVdKYTczbkdIRzZQMWwvd3gzdk9NT04wZnJML2hnUkxZV0phNzNuR0hHNlAxbC93eDN2T01PTjBmckwvaGdSTFlXSmE3M25HSEc2UDFsL3d4M3ZPTU9OMGZyTC9oZ1JMWVdKYTczbkdIRzZQMWwvd3gzdk9NT04wZnJML2hnUkxZV0phNzNuR0hHNlAxbC93eDN2T01PTjBmckwvaGdSTFlXSmE3M25HSEc2UDFsL3d4M3ZPTU9OMGZyTC9oZ1JMWVdKYTczbkdIRzZQMWwvd3gzdk9NT04wZnJML2hnUkxZV0phNzNuR0hHNlAxbC93eDN2T01PTjBmckwvaGdSTFlXSmE3M25HSEc2UDFsL3d4M3ZPTU9OMGZyTC9oZ1JMWVdKYTczbkdIRzZQMWwvd3gzdk9NT04wZnJML2hnUk5ZeFlrK3E2RGNWVVNrVGxWbVptbE9sNU9DK1BFU0hNUFZ5dGFsMXNtcHRzUm03WmEvU2dIQUFBQ1FOQ2ZsWXBIM0pqc0loSDVJR2hQeXNVajdreDJFUUMyNitFdlNZTXI0UzlKZ0FBQUFBQW9TQUFBQUE5N0JIajdoM3puTGRxMHV5dTFTazJDUEgzRHZuT1c3VnBkbGRxZ1lBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBYTlqN3lkNGw4MlRIcUtVc2R0WHBVdW5qN3lkNGw4MlRIcUtVc2R0WHBVRGlBQUJJR2hQeXNVajdreDJFUWo4a0RRbjVXS1I5eVk3Q0lCYmRmQ1hwTUdWOEpla3dBQUFBQUFVSkFBQUFBZTlnang5dzc1emx1MWFYWlhhcFNiQkhqN2gzem5MZHEwdXl1MVFNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU5leDk1TzhTK2JKajFGS1dPMnIwcVhUeDk1TzhTK2JKajFGS1dPMnIwcUJ4QUFBa0RRbjVXS1I5eVk3Q0lSK1NCb1Q4ckZJKzVNZGhFQXR1dmhMMG1ESytFdlNZQUFBQUFBS0VnQUFBQVBld1I0KzRkODV5M2F0THNydFVwTmdqeDl3NzV6bHUxYVhaWGFvR0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHdlkrOG5lSmZOa3g2aWxMSGJWNlZMcDQrOG5lSmZOa3g2aWxMSGJWNlZBNGdBQVNCb1Q4ckZJKzVNZGhFSS9KQTBKK1Zpa2ZjbU93aUFXM1h3bDZUQmxmQ1hwTUFBQUFBQUZDUUFBQUFIdllJOGZjTytjNWJ0V2wyVjJxVW13UjQrNGQ4NXkzYXRMc3J0VURBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRFhzZmVUdkV2bXlZOVJTbGp0cTlLbDA4ZmVUdkV2bXlZOVJTbGp0cTlLZ2NRQUFKQTBKK1Zpa2ZjbU93aUVma2dhRS9LeFNQdVRIWVJBTGJyNFM5Smd5dmhMMG1BQUFBQUFDaElBQUFBRDNzRWVQdUhmT2N0MnJTN0s3VktUWUk4ZmNPK2M1YnRXbDJWMnFCZ0FBQUFBQVBqT09jeVJtWE5jclhOaFBWRlJiS2k2cTVnZlhXUy9Od2pXYndvVTFYU1RqUkxXeFBWZG5HSEhIZEt4cnlvcW5XSEFYTTFtOEtEV2J3b1V6M1NzYThxS3AxaHczU3NhOHFLcDFod0Z6TlpMMnVaeTNsdnpsVXNEWSt4YlVNZVVHVG04UlZLTkx4cDZFeUpEZkhWV3ZhcmtSVVZDMWlLdGt1dk9Ca0FBQmY5M0JHT25LdVZTZzRQa0ptazFDWWtvejU5SWJud0g2cXViM042MnYwb2dFbTZ5Y0kxbThLRk5GMGs0MFRaaWlxOVpjWTNTc2E4cUtwMWh3RnpOWnZDZzFtOEtGTTkwckd2S2lxZFljTjByR3ZLaXFkWWNCY3pXYndvTlp2Q2hUUGRLeHJ5b3FuV0hEZEt4cnlvcW5XSEFYTTFtOEtEV2J3b1V6M1NzYThxS3AxaHczU3NhOHFLcDFod0Z6Tlp2Q2cxbThLRk05MHJHdktpcWRZY04wckd2S2lxZFljQmN6V2J3b05adkNoVFBkS3hyeW9xbldIRGRLeHJ5b3FuV0hBWE0xbThLRFdid29VejNTc2E4cUtwMWh3M1NzYThxS3AxaHdGek5adkNnMW04S0ZNOTByR3ZLaXFkWWNOMHJHdktpcWRZY0Jjeldid29OWnZDaFRQZEt4cnlvcW5XSERkS3hyeW9xbldIQVhNMW04S0RXYndvVXozU3NhOHFLcDFodzNTc2E4cUtwMWh3RnpOWnZDZzFtOEtGTTkwckd2S2lxZFljTjByR3ZLaXFkWWNCY3ZYVGhNMzRMS25TVTAzU2NhOHFLcDFoeHVHaTdIR0tLdHBJbzBsUDErb3pNckZpUFI4S0xIVnpYSjNONjVwMG9nRm5BQUFBQUFBQWE5ajd5ZDRsODJUSHFLVXNkdFhwVXVuajd5ZDRsODJUSHFLVXNkdFhwVURpQUFCSUdoUHlzVWo3a3gyRVFqOGtEUW41V0tSOXlZN0NJQmJkZkNYcE1HVjhKZWt3QUFBQUFBVUpBQUFBQWU5Z2p4OXc3NXpsdTFhWFpYYXBTYkJIajdoM3puTGRxMHV5dTFRTUFBQUFBQjE1NytYVFg0TC9WVTdCMTU3K1hUWDRML1ZVQ2lidDdvT0p5ZHZkQnhBQUFEWjlIWGxJdzM1eGcrdWhjNU5pZEJUSFIxNVNNTitjWVByb1hPVFluUUJrQUFDSWZsRStJdE44NUoyVVFsNGlINVJQaUxUZk9TZGxFQXJRcGd5cGdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHK2Izb2Q4cTFCL0ZmMlR6Uk44M3ZRNzVWcUQrSy9zbmdXN0FBQUFBQUFCcjJQdkozaVh6Wk1lb3BTeDIxZWxTNmVQdkozaVh6Wk1lb3BTeDIxZWxRT0lBQUVnYUUvS3hTUHVUSFlSQ1B5UU5DZmxZcEgzSmpzSWdGdDE4SmVrd1pYd2w2VEFBQUFBQUJRa0FBQUFCNzJDUEgzRHZuT1c3VnBkbGRxbEpzRWVQdUhmT2N0MnJTN0s3VkF3QUFBQUFIWG52NWROZmd2OVZUc0hYbjF0VHBwVi93RG92OVZRS0p1M3VnNG5OelVWRXpUWW0rWTFlZFBTQnhCeTFlZFBTTlhuVDBnYkxvNjhwR0cvT01IMTBMbkpzVG9LWmFPMHRwSXczbW44eGc3L0FQNjBMbXBzUkZ0ZTJ3RElBQUVRL0tKOFJhYjV5VHNvaEx4RVB5aUxmUWVtSXEvK1pKdi9BUEtpQVZvVXdjMWJudFQwbU5YblQwZ2NRY3RYblQwalY1MDlJSEVITFY1MDlJMWVkUFNCeEJ5MWVkUFNOWG5UMGdjUWN0WG5UMGpWNTA5SUhFSExWNTA5STFlZFBTQnhCeTFlZFBTTlhuVDBnY1FjdFhuVDBqVjUwOUlIRUhMVjUwOUkxZWRQU0J4QnkxZWRQU05YblQwZ2NRY3RYblQwalY1MDlJSEhmTjcwTytWYWcvaXY3SjVvMnJ6cDZUZXREeUltbFdnNXBmdXI5LzhBNVR3TGRBQUFBQUFBQTE3SDNrN3hMNXNtUFVVcFk3YXZTcGRQSDNrN3hMNXNtUFVVcFk3YXZTb0hFQUFDUU5DZmxZcEgzSmpzSWhINUlHaFB5c1VqN2t4MkVRQzI2K0V2U1lNcjRTOUpnQUFBQUFBb1NBQUFBQTk3QkhqN2gzem5MZHEwdXl1MVNrMkNQSDNEdm5PVzdWcGRsZHFnWUFBQUFBQXFJcVdWTG9vQUhVU2wwOU1ra0pXMjhuY0daZjdHZm15bjhRbFAwR2V3N1FBNnZ6WlQrSVNuNkRQWVBteW44UWxQMEdldzdRQTZ6S2RKUTN0ZkRrNVpqMnJkcm13V29xTHdwa2RuTGdBQUFBQWZPTkx3WmhxTmp3WWNWclZ1aVJHSTZ5OEtYUG9BT3I4MlUvZmtaWDlCbnNIelpUK0lTbjZEUFlkb0FkWDVzcC9FSlQ5Qm5zSHpaVCtJU242RFBZZG9BZFg1c3AvRUpUOUJuc0h6WlQrSVNuNkRQWWRvQWRYNXNwL0VKVDlCbnNIelpUK0lTbjZEUFlkb0FkWDVzcC9FSlQ5Qm5zSHpaVCtJU242RFBZZG9BZFg1c3AvRUpUOUJuc0h6WlQrSVNuNkRQWWRvQWRYNXNwL0VKVDlCbnNIelpUK0lTbjZEUFlkb0FkWDVzcC9FSlQ5Qm5zSHpaVCtJU242RFBZZG9BZFg1c3AvRUpUOUJuc0h6WlQrSVNuNkRQWWRvQWRYNXNwL0VKVDlCbnNIelpUK0lTbjZEUFlkb0FkWDVzcC9FSlQ5Qm5zSHpaVCtJU242RFBZZG9BZFg1c3AvRUpUOUJuc013NUNUaFBhK0hLUzdIdHphNXNGcUtuUmxrZGtBQUFBQUFBQUFhOWo3eWQ0bDgyVEhxS1VzZHRYcFV1bmo3eWQ0bDgyVEhxS1VzZHRYcFVEaUFBQklHaFB5c1VqN2t4MkVRajhrRFFuNVdLUjl5WTdDSUJiZGZDWHBNR1Y4SmVrd0FBQUFBQVVKQUFBQUFlOWdqeDl3NzV6bHUxYVhaWGFwU2JCSGo3aDN6bkxkcTB1eXUxUU1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTmV4OTVPOFMrYkpqMUZLV08ycjBxWFR4OTVPOFMrYkpqMUZLV08ycjBxQnhBQUFrRFFuNVdLUjl5WTdDSVIrU0JvVDhyRkkrNU1kaEVBdHV2aEwwbURLK0V2U1lBQUFBQUFLRWdBQUFBUGV3UjQrNGQ4NXkzYXRMc3J0VXBOZ2p4OXc3NXpsdTFhWFpYYW9HQUFBQUFBdzk3WWJIUGVxSTFxSzVWWGVSREo4SjcrWHpYNEwvQUZWQTFmZFN3UHlsa2ZTNzNSdXBZSDVTeVA1bmU2VTdjcXBiTmRoeDFsNFZBdU51cFlINVN5UDVuZTZOMUxBL0tXUi9NNzNTbk9zdkNvMWw0VkF1YkphUnNJVkdlZ1NVblg1T05NeDNwRGhRMks2NzNMa2lKbHZtMGJjeW1HanBWWFNSaHU2LytZd2ZYUXVjM3dVNkFNZ0FBZWJXc1FVbkRzcERtcXZQUVpPQkVmM05qNHFxaUs2eXJiSkYza1U5SWlINVJPV0I2WXFLdC9uSk95aUFiaHVwWUg1U3lQNW5lNlkzVXNEOHBaSDh6dmRLZEs1ZUZUR3N2Q29GeHQxTEEvS1dSL003M1J1cFlINVN5UDVuZTZVNTFsNFZHc3ZDb0Z4dDFMQS9LV1IvTTczUnVwWUg1U3lQNW5lNlU1MWw0VkdzdkNvRnh0MUxBL0tXUi9NNzNSdXBZSDVTeVA1bmU2VTUxbDRWR3N2Q29GeHQxTEEvS1dSL003M1J1cFlINVN5UDVuZTZVNTFsNFZHc3ZDb0Z4dDFMQS9LV1IvTTczUnVwWUg1U3lQNW5lNlU1MWw0VkdzdkNvRnh0MUxBL0tXUi9NNzNSdXBZSDVTeVA1bmU2VTUxbDRWR3N2Q29GeHQxTEEvS1dSL003M1J1cFlINVN5UDVuZTZVNTFsNFZHc3ZDb0Z4dDFMQS9LV1IvTTczUnVwWUg1U3lQNW5lNlU1MWw0VkdzdkNvRnh0MUxBL0tXUi9NNzNSdXBZSDVTeVA1bmU2VTUxbDRWUHBxcmE5N3BzdmV5WEF1RnVwWUg1U3lQNW5lNk4xTEEvS1dSL003M1NzdEIwZDRweEc2RzZScEUwa0J5c3ZIakozT0haMngxMTJ0Mzd0UlNRcU44bmlveFZodnJWWWw1WnFSTFJJVXVpeEhLM21ldGt2dDJwa0JMRzZsZ2ZsTEkvbWQ3cDI2Ymo3Q3RacU1HUXAxZGxKaWFqS3FRNFVOWFhkWkw1WFRnUlRVNURRUGcrVmx1NXpTVDAzRTFyOTFmTUxEVzNCWnVSdGRId0JoV2d4NVdZcDlGbFlVMUxKL3B6Q29xeEVXMXJxNWRxMlZjd05sQUFBQUFBQUJyMlB2SjNpWHpaTWVvcFN4MjFlbFM3MkthZEhyR0VxeFRKVldKTVRrbkZnUXRkYk4xbk5WRXV2Qm1WWHJXaWpHTkY3cytOUlkwZUJEZWplN1NxcEZSMTdXMVVUNnk3ZjhBaEEwY0gxalFYUW52WTVxdGN4Yk9SMlNvdkJZK1FBa0RRbjVXS1I5eVk3Q0lSK1NCb1Q4ckZJKzVNZGhFQXR1dmhMMG1ESytFdlNZQUFBQUFBS0VnQUFBQVBld1I0KzRkODV5M2F0THNydFVwTmdqeDl3NzV6bHUxYVhaWGFvR0FBQUFBQTY4OS9McHI4Ri9xcWRnNjg5L0xwcjhGL3FxQlJOMjkwSEU1TzN1ZzRnQUFCcytqcnlrWWI4NHdmWFF1Y214T2dwam82OHBHRy9PTUgxMExuSnNUb0F5QUFCRVB5aWZFV20rY2s3S0lTOFJEOG9ueEZwdm5KT3lpQVZvVXdaVXdBQUFBQUFBQUFBQUFBQUFBQUFQckRoT2lPYTFqRmU1eTJSRVROUVBrZWhTNlBQMXVlaHlWTWtvMDNNdjJRNExWY3Rza3Zsc1JMNXF1U0VvNEkwRjFLcjl3bjhST2RUcFRXMWxrMWFxUjN0UmMwY2kvKzdSZUhOZVpMb3BZS2g0ZXBHSEpCSktqMCtCSndNdFpJYmMzcnd1Y3QxY3ZPcXFvRUQ0YStUM1VaaUl5TGlTZFpKd0ZhamxnU2k5MGkzenUxWEttcTFVVzJhYXlMdmNKTUdHOUhHRjhMdzRTeVZMZ3hKbUY5Wlp5WlJJa1ZWVkxLdXN1eTZieVpacndtMTdiYzJ3d3FJN2Fsd00yczFHcGtpYkVUWWhpeUpibTJLWkFEYnZJQUFBQUFBQUFBQUcrRStyYTIzaEFBOERFR0M4T1luaE5aV0tYQWpxMWZxeEV1eUltZDdhN2JMWlYyNWtSWXArVHlzS0ErWXcxUHVpUGFpci9BQWs1YTd0cTJhOUV0ZllpSXFkS29UNEFLUVZyRFZYdzlHN2pWNlpNeVQ5ZHpFV0xEVkd2VnUzVmQ0THRxZUNxN1RhOUNpVzByMGo3a3gyRVF0TFZxSlRLN1QzU05Wa29NM0xMbjNPSzI2SXRsUzZML1N0bkw5Wk0wdVIvU05EMGhoakgwamlHaXprUnNyQlNMM1dTajVxeEhRNGpmcVAzN2F6RTFYWjdWVnlnU2d2aEwwbUJ3cm42TWdBQUFBQUFVSkFBQUFBZTlnang5dzc1emx1MWFYWlhhcFNiQkhqN2gzem5MZHEwdXl1MVFNQUFBQUFCMTU3K1hUWDRML1ZVN0I4cHFHNkxLUjRiZkNmRGMxTHJiTlVWQUtJTzN1ZzRrbkxvSXhzdHJ5MGpzNDQweHVENDI0dkk5Y2FCR1FKTjNCOGJjWGtldU5HNFBqYmk4ajF4b0dzNk92S1JodnpqQjlkQzV5YkU2Q3VPRU5EV0xxTGpHalZPYmdTYVMwck9RNDBWV3pUWEtqV3VSVnNtL2tXT1R3VUF5QUFCRVB5aWZFV20rY2s3S0lTOFI5cGV3alZjWllaa1pDa01oUGpRWnhJejBpeFVZbXJxT2J0WG5jZ0ZTMU1FbkxvSXhzdi9BTXZJOWNhWTNCOGJjWGtldU5BaklFbTdnK051THlQWEdqY0h4dHhlUjY0MENNZ1NidUQ0MjR2STljYU53ZkczRjVIcmpRSXlCSnU0UGpiaThqMXhvM0I4YmNYa2V1TkFqSUVtN2crTnVMeVBYR2pjSHh0eGVSNjQwQ01nU2J1RDQyNHZJOWNhTndmRzNGNUhyalFJeUJKdTRQamJpOGoxeHA2dUhkQWRjaTFtQ2xmZEx5OU9iOWVNNkJIUjczVy9vUkUyS3ZEdmVnRFFNS1lLck9NWjFzdlM1VnptSTlHeHBsNktrS0FpcGU3M2RDTGx0VXN4Z0hSalI4RXkwR1BxTW1hMHJGYkZuRlJib3ErRTFpTGsxdTlmYXUva3RqYUtCaCttNFpvOENsMHVYYkJsb0tkTG5PMzNPWGZjdSt2L0FHUkVQVFZMcGJlQXdpSWxsUkxLWkFBQUFBQUFBT0xvakVZcjc2cldwZHlxbXpMaDJIalZERjJIYVhMcE1UbGNrSVVKWEkxSGZ4RFhYVzJ6SzRIdGcwQ29hWjhEMCtZYkMrZEh6TjJhMnRLd1hSR3Buc1Zjczh0bk9kVGQxd1B4bWQ2bTcyZ1NVQ05kM1hBL0daM3FidmFmYVYwM1lJbXBxSEFTZWp3dGRiZDBqeXptTWJ6cXU4Z0VpQTErbVkzd3hWM3ZTUnJzaEdXR2lLOU83bzJ5THNYNjFqMjRNeENtSVRZMEdMRGlRblgxWHczSTVGL3ltVzhCOVFBQUFBQWNITm1BQmhFUkZWVVRidE1nQUFBQUFBRkNRQUFBQUh2WUk4ZmNPK2M1YnRXbDJWMnFVbXdSNCs0ZDg1eTNhdExzcnRVREFBQUFBQUFBR3hMQUFBQUFGeHZnQUFBQUFBQzZnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHTDVXVkYvd2FYalBTZFFNRXE2WG5JejVpb3EzV2JKd0V1NUVWRnNybFhKcUxiZnp6UmRWU3UyTGRLT0o4WEs2Rk16cVNza3FKLzRXVXV4aTJzdjFsMnV6UythclpWeUFzTFh0TG1EcUM5WWI2b2szSGFxSTZGSkozVzEwdmUvZzIzc2xYYnpFUzE3VDlYNTFWWlI1T0JUNE44bnhQOVY2cHEyc3Q4a1c5MXVpSVE3ckx3aTZwdmdlMVU4WDRpckxtT3FGWm5aaFdNVmlhOFpmQlhhbVcwOFZIS2kzVEl3QU1xNXk3VlV3QUFDTFpib0FCbldWZHEzNlQxcU5pYXQwR0xyVXFxVGNvcXRWbitsRVZFc3FvcTViTnFJZVFBSmFvR25mRTFPandHMVZJTlJsR3RiRGNpc1JrUlVTMTNhNmJYV1JkdVMzdVNwaHpUVmhXdlJZVXRNUm9sTG1vamZCbTBUdWFPdmF5UDJjK2FJaFZMV1c2TGRjakxGZHJaWjhLWDJnWHlodmJGWTE3SEk1amsxa2MxYm9xTHNVNUZOOE5hUk1UNFZaM0ttVk4zOE9xb3F5OGRxUkdiYnJaRjJYdFpWU3kyTEFZSjB4MFRGY1prbE1vbE1xRmtWSWN4RVR1Y1JWZHFvakg1WFhOUHFxaUxuWk5iZUNTQU9IcDN3QUFBQUFBQUFCUWtBQUFBQjcyQ1BIM0R2bk9XN1ZwZGxkcWxKc0VlUHVIZk9jdDJyUzdLN1ZBd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZGVkbkplblNjV2NuSTdJRXRBYXI0c1dLNnpXdFRmVUQ2dmUyR3g4Ujcyc2h0YXJuT2V1VGVkVjNrc2hBbWtMVGpFakk2bTRSalJJVFVjNXNXb0t4THZUWmFGd0p2NnkyWGd0dE5WMGw2Vko3Rjg3RWtxZEdqeWRHaHFyR3drVldyTW92OVVTMjFNa3MzWW5Uc2pKYjc2Z1plOTczcTU3bk9jcTNWVlc2cXZDWXV2Q1lBQUFBQUFBQUFBQUFBQUFBQUM2OEp6WmRYYjl6Z0FKZDBiYVpKdkRmOEhSNjJpek5HYXVvMlBaWFJaWkZ0YTJmMW1KbjlXMTBSY2x5UnEyTXBOV2tLM1RJRlJwc3l5WmxKaHV0Q2lNMzAyWjc2S2k3VVhORnlXeWxHR3FxdTRlWlRkc0FhUjZyZ1djaTl3Yi9HVStPdDQwbkVmcW9yclpQUmM5VjJWcjJXNlpMdktnVytCNCtHY1MwekZsRmhWV2xSdGVBL0p6SFdSOEoxa3V4eWJ5cC92dFM2S2V3QUFBQUFBVUpBQUFBQWU5Z2p4OXc3NXpsdTFhWFpYYXBTYkJIajdoM3puTGRxMHV5dTFRTUFBQUFBQjhwaUtzQ1ZqUldvaXF4am5JaTdGc2lxZlU2ODkvTHByOEYvcXFCQWZmSFZCRVJWdzVLWFhPLzhTLzJEdmo2aHljaytzdjhBWVFlN2U2RGlCT1hmSDFEazVKOVpmN0IzeDlRNU9TZldYK3dnMEFXR3czcDRucTlpZWwwbDlCbFlUSnlhaHdIUkd6RDFWcU9XeXFpV0p2UmI1M1JVdHZGTWRIWGxJdzM1eGcrdWhjNU5pQVpBQUEwelNWamFQZ09oU2xTZ1NNS2NkSG1rZ0t5STlXMlRVYzY2S24zVGN5SWZsRStJdE44NUoyVVFEV3UrT3FDTDR1U2ZXWCt3eDN4OVE1T1NmV1grd2c1VEFFNWQ4ZlVPVGtuMWwvc0hmSDFEazVKOVpmN0NEUUJPWGZIMURrNUo5WmY3QjN4OVE1T1NmV1grd2cwQVRsM3g5UTVPU2ZXWCt3ZDhmVU9Ua24xbC9zSU5BRTVkOGZVT1RzbjFsL3NKRTBhWTlxMlBvTTdOeDZSTHlVakxLa05zVmtaemxpUkZ6c2wwdGttYS9lYVZZbzlNbXExVkpXbXlVUFhtWm1La0ppYjExeXV2QWliVlhlUzVkTERsQWtzTVVDVXBNakRhMkZMdzBhcmthaUxFZGJON3JmMUt0MVhwQTlVQUFBQUJ3ZTlrTnI0a1NJMkhEYTFYUGM3WWljS3J2SWlJVlowcDZTcG5GOVRpMDJUaXJDbzByRlZJYldPdWt5NUZ0M1J5NzZiN1UzazU5bTE2Y2RJZmRvc1hDVk1jNUVoUGFzL0dhL0o2MnVrTExhaVpLNisrbHQ1YndQdmdaelJkdVpnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDNnBzVUFEYzlHMk80K0JjUXJOTERkR2taaHFRNXFDMTFsVnQ3bzV1OXJKdlg1MDN5MnRJcXNsWEtaQXFOUG1HVEVySGFqbVJHYkY1dVpVMkttOFVaYnR2YllTZG9nMGcvUldzZk5jKzlpVXVmaU43cEZlNVU3Zysxa2ZmZzNsOU84QmFZR0d2YkVhMTdjMGNsMFZGdWlwemN4a0FBQUtFZ0FBQUFQZXdSNCs0ZDg1eTNhdExzcnRVcE5nang5dzc1emx1MWFYWlhhb0dBQUFBQUE2ODkvTHByOEYvcXFkZzY4OS9McHI4Ri9xcUJSTjI5MEhFNU8zdWc0Z0FBQnMranJ5a1liODR3ZlhRdWNteE9ncGpvNjhwR0cvT01IMTBMbkpzVG9BeUFBQkVQeWlmRVdtK2NrN0tJUzhSRDhvbnhGcHZuSk95aUFWb1V3WlV3QUFBQUFBQURtek5MYkUzK0VDWmZrL1lVV2Vya3hpYU8xM2NLZi9veTYzdHJSbkpuc1hlWXRyS2xsMTA0Q3gxcmIxdVkxUFJ4aHRtRnNEMDJTV0QzS2FpUTBqemQ3SzVZcmt1cUtyZHRyNnFjQ0lodGFMZE1yMjJKZmFCa0FBRFM5SjJNMXdUaE9MT1M3bWZPRWR5UVpOcjdLbXV1MXlwZk5Hb2w5L05XM1RNM1Bia21WMVQvSlVQU2ppMWNYNDNtcG1DL1drNVpQNGFWeXRkalZ6ZG1pTDlaeXF0bHpTOWdOSWlQYytLOTczT1Z6bktxcTVicXE4NXhNcnRVd0FBQUFBQUFBQU8xS3ljeFBUTEphVWxvc3hNUHVqSVVGaXZjNWJYc2lKbXVSMWQ4M3ZRNzVWcUQrSy9zbmdlQjlEc1Vjbkt4MUdMN28raDJLT1RsWTZqRjkwdTNyTHdyNlJyTHdyNlFLU2ZRN0ZISnlzZFJpKzZaVEJ1Sjc1NGNyRnY3R0w3cGRyV1hoWDBqV1hoWDBnVVhxTkxuNlU5c0tveU16SnhYdDFtc21JTG9hdVRoUkhJbDB2YzZCTTN5aTF2aXVrMzRndmF1SVpBQUFBQUFBQUFIT0dpcTdaYzRBQzBXaFhIQzErZ09vOVFtMnhLcEk1TlY3cnZpd2JaTHNTK3I0TzFWMktTbWlXVythYnlvcWxLY0dZbGo0VHhUSlZlQ3JsYkNlaVJZYVgvMUlhNU9hcUlxWHl6UkZXMTBTNWRDU200RS9KUVp5V2l0aXk4ZGlSSVVScmtjam1xbDB6VEwwQWZjQUFVSkFBQUFBZTlnang5dzc1emx1MWFYWlhhcFNiQkhqN2gzem5MZHEwdXl1MVFNQUFBQUFCMTU3K1hUWDRML1ZVN0J3aXcwalFZa0oxOVY3VmF0bHN1YVdBb2M3ZTZEaVdrWFFIZ3ZaclZSVi91a3kvd0R3TWJnT0RPR3FkYVQzQUt1QXRIdUE0TTRhcDFwUGNHNERnemhxbldrOXdDQTlIWGxJdzM1eGcrdWhjNU5pZEJIVkkwSzRVb3RZazZuSy9PUDhSS1JteG9ldk1vcmRacTNTNmFxWlhKR3RxcGExbDVnQUFBRVEvS0o4UmFiNXlUc29oTHhyK0xzSDByR3RNZzArckxNSkJneHU3dDdoRTFGMXJLM2dYS3psQXBVcGd0R3VnTEJuRFZGLys2YjdnM0FjR2NOVTYwbnVBVmNCYVBjQndadzFUclNlNE53SEJuRFZPdEo3Z0ZYQVdqM0FjR2NOVTYwbnVEY0J3WncxVHJTZTRCVncyelJ6UUZ4SmppbFNEb2F1Z2QyU0xIWHVYZEU3bXo2eTZ5Yk5WYkkxYi84QUVUdnVBNE00YXAxcFBjUGR3cG90dzlnMnJyVktXczZzd3NOWVArdkhSemJPVkw1STFNOGtBM1ZMSWlJMUVSRXlSRVMxaklBQUFBYU5wY3I3NkJvN3FNU0dybXg1cEVsSVRrUkZ0cjdiMzN0VkhKbHdvVkRYYXBNV24rdkxQWXJsS0sxenU0eUVMV2UzNnR1NlB6dnczUnRrVy9BUTZxM1ZWQXdBQUFBQUFBQUFBRytiM29kOHExQi9GZjJUelJOODN2UTc1VnFEK0svc25nVzdBQUFBQVZ2K1VYNDEwbit3WHRYRU1remZLTDhhNlQvWUwycmlHUUFBQUFBQUFBQUFBNXcxczdlVG51V1owQjRsZFZNSlRGSG1JK3ZNVTJML0FLU0xlNlFIWnR6WGFpT1J5SWliRVJDc1p2dWg2dkpRTklzaEVpTGFCT1hrb3RtNnkyaWVEYmcrdWpNK0M0RnVRRWE1YjJSRno2QUJRa0FBQUFCNzJDUEgzRHZuT1c3VnBkbGRxbEpzRWVQdUhmT2N0MnJTN0s3VkF3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJ4YzVyVzZ6M05hMXFyZHlyYXliL3dEdG1janhNWFZDRFM4SVZpY21XdldERGxJcXVScUlxcmR1cmtuU3FBVS94aFZWcmVNS3RVWE5ZMVppYWU2ME5idHRleVdYZnlROFF5NUZSMWxTeW9ZQUFBQUFBQU8zSnlzYWZuWmVVbDRmZFppUEViRGhNUlVUV2M1YkltZStxbTM3anVQdVRzZjlhRjc0R2lnM3JjZHg5eWRqL3JRdmZHNDdqN2s3SC9XaGUrQm95Sm1iMW9kUmQxYWc1ZjhBeFg5azh4dU80KzVPeHYxb1h2bTI2TnRHMkw2RnBEcEZTcU5FalM4bEFpdVdKRWRGaHFqVVdHOUVWYk9WZHFnV1BBQUFBWjJ5MmdWditVWDQxMG4rd1h0WEVNbGlOTmVCc1NZcXhGVHBxaTBxSk53WVVuM043bXhHTjFYZDBjdHZyT1RlVkNNZHgzSDNKMlArdEM5OERSUWIxdU80KzVPeC93QmFGNzQzSGNmY25ZLzYwTDN3TkZCdmFhSHNldHpYRHNlM05HaGUrYWhWS2ZOMGlvekZPbm9Ub00xTHZXSEZocXFMcXVUYWwwdW5vQTZZQUFBQUFkaVNtWThuT1FacVZlc09ZZ3ZiRWhSRTJzYzFib3FjNktoMXpreTJZRjVxSFVHVnFnVTZxbzEwSnM3TFE1aEdPVkZWcVBhanJLditRYWJvVm5JY1RSWFNtdGlRNGo0VDR6SG9qcnF4ZTZ1VkVYZ1hWVnEyNEZRQVZKQUFBQUFlOWdqeDl3NzV6bHUxYVhaWGFwU2JCSGo3aDN6bkxkcTB1eXUxUU1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWFCcG9xRWFRMFkxTHVUWWEveERvY3U3V1JjbXVkbXFaN2NqZnlOZE8za3htUDdxQjZ5Z1ZVY3QzS3ZDWUFBQUFBQUFQZHdiNDcwRHpqTDlxMHUwN3dsNlNrdURmSGVnZWNaZnRXbDJuZUV2U0JnQUFBQUFBQUFBQUFBQUFBR0hlQ3ZRVTIwbmVVekVYOTlFTGt1OEZlZ3B0cE84cG1Jdjc2SUJxWUFBQUFBWlF3QUxDYUNzUjBPa1lJblplcDFtblNVWjFSZTlzT1ptbVEzSzN1VUpMb2psUmJYUlV2ektDdllBQUFBQUFQZXdSNCs0ZDg1eTNhdExzcnRVcE5nang5dzc1emx1MWFYWlhhb0dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUkxMDdlVEdZL3VvSHJLU1VSM3B1bFk4MW94bnU0UTFpZHhpd1l6N2Ywc1IyYTlDWEFxYUFxV1d5Z0FBQUFBQTkzQnZqdlFQT012MnJTN1R2Q1hwS1M0TjhkNkN1OTg0eS9hdEx0TzhKZWtEQUFBQVhDNUxaZG9BQUFBQUFBNGVaYkFBQUFNTzhGZWdwdHBPOHBtSXY3NklYSlh3VjZDbStrN3ltWWkvdm9nR3BBQUFBQUFSRlVISm9IRUV6Nko5SEdIY1lZV21haFYyVFRwaUZPdmdOV0ZIMUUxVVl4MnkzQzVjd0JEQU94UFNNelRxaE15TTNEN25NeTBWMEdLeldSZFY3VnNxWFJiTG1pNW9kY0FBQVBld1I0L1lkODZTM2F0THNydDZTaExWVnJrVkZWRlJjbFRlTG40Q3hiTDQwd3ZLMVNBaU5qb2lRWnBtb3JVWkdhMUZlaVgycG1pcG11U3BleWdiTURDS2lwZEZ5NFRJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBOERHOU1kVjhEMXFSU0lrTlkwbyt6MWJkRXNtdC8rcDc1OHBpQ3laZ1JZTVp1dkNpTVZqbTN0a3FLaTI0TWxVQ2g3bHU1VjRjekI2K0pxTStnNG5xVktkcUtzck1QaEpxT1Z5V1JjczFzcTVXUElBQUFBQUFPOVNxaStsMWFTcUVKR3ZpU2tka2RqWDdGVmprY2lMYmV1aExDL0tNcnlyZjVrcGZwaSs4UXlBSm03NHV2ZllsTC9ORjk0ZDhYWHZzU2wvbWkrOFF5QUptNzR1dmZZbEw5TVgzalk4RGFhNnhpbkdWT29relM2ZkJnVFVSelhQaExFMWtzeHpzcnJiK2tydHZtOTZIZkt0UWZ4WDlrOEMzWUFBQUFDSzlLV2xLbzREclVsSlNOUGs1bGt4THJHYzZPcjdvdXVyYkpxcW1XUm9mZkYxNzdFcGY1b3Z2RDVSZmpYU2Y3QmUxY1F5Qk0zZkYxNzdFcGY1b3Z2RHZpNjk5aVV2OEFORjk0aGtBVE4zeGRlWEw1bHBhYzk0dnZFVzRoclVYRU5lbnF2SGh3NFVXY2pMRmV5SGZWUlYza3ZtZVdBQUFBQUFBWmJiTXdjbVpYVUMxbWhDUWxaYlJoSlIwYTVJczNIalJvcXE1VnU1SHJEdW5COVdHMUxjd055b05KYlJzT1V1bDkwN3AvQnlrS0FzUnJFYnJxMXFKcldzdHIydnRBRlc5THRBV2dhUjZvelVja0tjY2s3Q2M1Nk8xa2lYVnk1YlByNjZXWGVRME1zajhvREREcCtoU21JSUVORml5RGxoekgxVVJ5dzMyc3FydFd6azJaMjFuTGtWdjFWNEFNQUFBbTAyYkIrT0t2Z3FwUG02WEdhcklyZFdOTHhrVjBLS245S3VSTExkRlZWUlV6VG9WVVhXUUJhTEQrbm5DbFRsa1dyZDJwTTFkRVdHc04wVmkzdm0xelUySlp0MVZFMjc2RzVmVDdCMS9HbWpkY1o3U2xpWktoeVZ5V3NpLzVVQzZQMCt3ZHlxbzNYR2UwZlQ3QjNLcWpkY1o3U2x0K2NYNXdMcGZUN0IzS3FqZGNaN1I5UHNIY3FxTjF4bnRLVzM1eGZuQXVsOVBzSGNxcU4xeG50SDArd2R5cW8zWEdlMHBiZm5GK2NDNlgwK3dkeXFvM1hHZTBmVDdCM0txamRjWjdTbHQrY1g1d0xwZlQ3QjNLcWpkY1o3UjlQc0hjcXFOMXhudEtXMzV4Zm5BdWw5UHNIY3FxTjF4bnRIMCt3ZHlxbzNYR2UwcGJmbkYrY0M2WDArd2R5cW8zWEdlMGZUN0IzS3FqZGNaN1NsdCtjWDV3THBmVDdCM0txamRjWjdSOVBzSGNxcU4xeG50S1czNXhmbkF1bDlQc0hjcXFOMXhudEgwK3dkeXFvM1hHZTBwYmZuRitjQzZYMCt3ZHlxbzNYR2UwZlQ3QjNLcWpkY1o3U2x0K2NYNXdMcGZUN0IzS3FqZGNaN1R1VTdGT0g2eE0vd0FOVEszVDUyWTFWZjNLWG1HdmRxcHRXeUxzS1EzNXpkdEU5YStaZEkxSWpPanZoUVkwUlplS3JXNjJzMStTTlZMYkZkcUFXK0FzcWJkdStBQUFBckZwM29FYW5ZM1NxTmdNWktWQ0UxV3ZodzFSRmlOU3o5WmJXMWwyNzZxaTVrVHJ0VXRicHB3NCt2WUZpekV0QlNKTjA2Si9Fc1ZMNjJvaVdlaVczN1dYUGVhVlRWcTZ5cHQ1K0VEaUFBQUFBQUFBQUFHK2Izb2Q4cTFCL0ZmMlR6Uk44M3ZRNzVWcUQrSy9zbmdXN0FBQUFBVnYrVVg0MTBuK3dYdFhFTWt6ZktMOGE2VC9BR0M5cTRoa0FBQUFBQUFBQUFBTW9pcWk4eHVPaTZpeGE1cERvOHV4WHRiQm1HelVSN1llc2pHdzExOCtCRlZHdHZ2SzVOdXcwNXUwc1Y4bnJEMzhQU0tuWG96RlIweTlKZUE1WVNYMUc1dWMxeTUyVnkyVk9GaUFUVXJrYXVhYmM5OEdVMnJzVC9GN2dENFRzbkwxR1FtWkdiaHBGbHBtR3NLTERWYkk1cW9xS24rVUtmWS93Zkh3VmlpWXByN1BsbnAzV1dpWHZyUWxWZFc2MjhKTFdYLytseURYOFlZUHBtTTZLNm4xQmxudHU2Qk1OVDY4Qis4cWMyOHFiRkFwVnFybmxzTUd3NHN3blU4SVZtSlRhbkQxWEltdENpczhDS3pZam1xdTkvMFU4QldLbDc1ZElIRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBK3NLS3NMVmN4NnNlMTEwYzNKVVhlVkZQa0FMcjRMeEN6Rk9ENmJXR3NWam84TzBSdGxzMkkxZFY2SmZhbDBYTTk5RnVseUEvazg0b2hRbG5zTXpFUkd2aXFzMUxLNTIxYklqMnBkZHRrUlVSRXorc3U4VDVlK2VYK0VBQUFEZzlpUkdQWTVyWE1jbGxhNUxvNUYyb3FjRzlZcDNwRncwM0N1TjUrbVF0WlpiV1NOQVd5NVEzL0FGa1M2N2JYdGZoTGprY2FZc0ZQeFZoZitLa21KODVVN1hqUTBzdDRrTzMxMkpiYXEyUlU1OGsyZ1ZSWGFwZzVxeGI3eWRKd0FBQUFBQUFBQUp0TjcwUFphVmFDdi9OZjJUelJFMm5jcDlVbktSUHdwNm56TVdYbW9LcXNPTkRkWnpWVkZUTC9BQXFwL2tDOU4wNFU5SXVuQ25wS2JicDJOdVUxUy9XRzZkamJsUFV2MWdMazNUaFQwaTZMdnA2U20yNmRqYmxQVXYxak82ZGpibE5VdjFnTjUrVVg0MVVuK3dYdFhFTW5xVnJFTlZ4REhoeDZ2VUppZGl3MmFqSHhuWFZHM3ZiMG5sZ0FBQUFBQUFBREtKZSt6SXdjbVpxQjZGQnBFMVhhM0tVdVViclRFMUVTR3pLOXI3VjZFUzY5Q0YwNkZSNVhEOUVrNlRKdDFZRXJDU0dtU1hWVTJ1V3lacXE1MzN5S05CR0NGa0tiRXhOUHk3VmpUYUkyU1YxbFZzTGZlbkFxcmwwSVRRQUFBQUFBZUppYkNWR3hkVG15ZFlsZTdNWXF1aHZhNVd2aE9WTFhhNU0vOGJGc2wwSzA0eDBRNGp3cXNlWWhRSFZHbXRjcXBNUzZheXRibm5FWnRia2lxcXBkRTRTMkpoVXlXeXFpNzFsQW9ZakZWRnRaZVl3clZSTDVla3VEaVhSWGhMRkVXTkhtNmNrdk54VSt0TlNqbGhQVmRiV1Z5cDRMbFZkOXlLdHY4RVdWUDVPZFZZc1A1cnI4bE1JdXQzVCtLaFBnNnV5MXRYWHZ2OEZ1Y0NFQVNQT2FETWRTMDIrREJwOHROdzIrREhnemNOckg5Q1BWcnViTkVQaHVKNlFQc1JuWFlIdmdSK0NRTnhQU0I5aU02N0E5OGJpZWtEN0VaMTJCNzRFZmdrRGNUMGdmWWpPdXdQZkc0bnBBK3hHZGRnZStCSDRKQTNFOUlIMkl6cnNEM3h1SjZRUHNSblhZSHZnUitDUU54UFNCOWlNNjdBOThiaWVrRDdFWjEyQjc0RWZna0RjVDBnZllqT3V3UGZHNG5wQSt4R2RkZ2UrQkg0SkEzRTlJSDJJenJzRDN4dUo2UVBzUm5YWUh2Z1IrQ1FOeFBTQjlpTTY3QTk4Ymlla0Q3RVoxMkI3NEVmZ2tEY1QwZ2ZZak91d1BmRzRucEEreEdkZGdlK0JINEpBM0U5SUgySXpyc0QzeHVKNlFQc1JuWFlIdmdSK0NRTnhQU0I5aU02N0E5OGJpZWtEN0VaMTJCNzRFZmdrRGNUMGdmWWpPdXdQZkc0bnBBK3hHZGRnZStCcVZCckUzaCt0eWRYa1g2c3hLUlVpTnU1VVIxdHJWdG5aVXUxZVpWTHFVU3J5bGVva25WcEordExUVUpJcmJxbDIzMm90bFZMb3VTNXJaVVVxMXVLWS9SRS85aHM2N0E5OG1YUTdSc1c0WnBjM1JNUlU1SU1vajBqU2tWSmlIRVJxcjRUUHF2V3lLdG5KWkxYVjZydEFrOEM5OHdBRy9lNjdMQUFWbDB4YU4xdzFVdm51aXlTdG8wd3YrcWpNMGw0cXJzdGI2ckZ5dHRTNnFtV1NMRXVvdDdXTHoxV2t5RmJwY3pUYWxMTW1KU1licXhJVDlpNzZMbG1pb3VhS21hTG1tWlU3U1JnR1l3SlhteTZ4LzRpbnphT2ZLUm5LbXVyVVhOcjAvNGt1bDFUSmIzVGZSQTBjRGZBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDSmNBaVhONjBZNENpNDN4RWtHWWJIaDBxWFRYbTQ4TlBReEZYK3AzK2JKblk4UENlRktwaSt0UTZaVElhT2NxYTBXSzYrcEJaZEx1Y3ZCL3VxNUlXN3dqaGFSd2ZoMkRSNUZYdVl4eXZmRmV2MW9qMXRyUDV0bXhONy9BQ29Ic1M4Q0hLeThPQkJicXc0VEdzYTI2NUlpV1JQUWZVd2w3N3lJaVdSRVRZWkFBQUFBQUFBQUMxOGxBQXhiL3R2NzVuUDlxQUF6L2FqUDlxQUF6L2FqUDlxQUF6L2FqUDhBYWdBTS93QnFNLzJvQURQOXFNLzJvQURQOXFNLzJvQURQOXFNL3dCcUFBei9BR296L2FnQU0vMm96L2FnQU0vMm96L2FnQU0vMm96L0FHb0FEUDhBYWphbWUyMzcvd0NvQUQvSUFBQUFBZVBpYkRGTnhiUTR0S3FzSllrRitiSHA0Y0orODlxN3lwZm9WTWx1aW5zQUNuR045SGRhd1RPTC9IUTBpeVVTSTVzQ2JoK0JFdG1sMC9wVzI4dkF0cnBtYWxxNW9seTgxWG84aFhhWkhwMVNsMlRFckhicXhJYmsvd0IwWGFpcHRSZDVTdE9rTFEvVXNLYTA5VE83VkdtYWl2aVJFWW12QXN1ZXNpYjFyZldUbnZZQ0xRYzBoT1habWNBQUFBQUFBQUFBQUFBQUFBQUFNb2w3OUJsRzNBd2lLcTJROTNDbUU2cGkrdHc2WlM0YU9jcWEwV0s3d0lMTjl6bDRPYmFxNUllM2dMUmpXTWJSMng0S05scVd5S2pJMDNFLzNSaWYxTzV0bWFYTFFZVndqUjhIMHhaR2p3SFEyT2RyeElyMTFva1ZmL1U3ZnRtbHRpZWtEcjRKd1ZUY0QwZDFQcDc0c1J6MzkwalJvcU4xb2p0VkUzazhITEpGdmJXWE0yUkV0ejg2N1FpVzUrZGRwa0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWNYc2JFWXJIcGRxM3VuQ25BY2dCRmVPTkMxSXIvQVBFMUNrS2toVkgzZnFKbEFpdXlUTnY5TjdMbW0rdVpYekV1QzY5aE9hV0JWNUNKQlJYYXJJcUpyUTRtYTIxWEpsbnFyWk50dDR1c2lLbHJyZTJ3K1UzSnlzL0xSSmFibDRjZVhpTlZyNFVWdXMxeUtsbFN5Z1VSVmlwZm0ybkVzN2lUUUpRS282Tk1VZWFqMHVZZG0yRWlkMGdJdXRkZnFybW1XU0lpMlN5WkVQMTdRN2pLZ3BydnBxenNGRWJlSklyM2JOZDdWeWYwL1Z0emdhRURzVE1sTVNVeStXbTRNV0JIaHJxdmhSV0sxN0Y0RmF1YUwwbngxY2x6QTRnell3QUFSTHJZNWF2T0J4QnlWdVY3bWRTeTJjdGdPS0pkVEtONXpjS0pvdHhoWEpoR1FLSk5TN0VlMXI0czR4WURXSTcrcjY5bFZFc3FycW90dUROQ1djUC9BQ2VxZkFWa2F1MWFMTk9SV0s2QkxON215OXJ1YXJsVlZWTDdGVFZYTFlCQTlIb0ZVcnM2MlZwY2xHbW82LzB3bTN0enF1eEU1MXNUM2duUVRJeUt3Si9Fc1JKeU1yYnJJSW4ra3hWVFk1ZHJsUzY3TXZRU3hTS0hUS0RKTms2VkpRSlNBMyttRXhFMWx5elhoWExNOURmOWdIeWw1YURLd1Vnd0lVT0hDYnNaRGFqVVMrMnlJZlN5MzI1SnZJaGtBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQURDTnV1cmZMTkFBT2xVS0xTcTAxR1ZXbXljODJFNVZZMlpnTmlJMVZUTlV1bVNtblI5Q3VBNWlCRlJ0SGZCZkZZLzY4S2Jpb3JGM2xSRmNyY3IzUkZSVXkyQUFhWGlMUVhoaWtZWXExVGw1NnJ1alNjbEdtSWJZa2FHclZjeGl1UkZ0RFJiWFRoSytBQUNaOUhHaWloWXd3aERxMVFtNmxDbUhURVdFclplSXhyTE50YkpXS3Q4K0VBQ1NLWm9Qd05MeWNOa2VuekU1RTFsdkdqemNScmxSVjJXWXJXNWRCdWRKdy9ScVBEaWZObEprWlB1alU3b3N2THNacjZ1eTlrenRkZG9BSHAzVld1NXJoWGZXdFpOdHY5cmdBWkFBQUFBQUFBQUFBQUFmLzlteDZlSENmdlBhdThxWDZGVEpib3A3QUFweGpmUjNXc0V6aS94ME5Jc2xFaU9iQW00ZmdSTFpwZFA2VnR2THdMYTZabXBhdWFKY3ZOVjZQSVYybVI2ZFVwZGt4S3gyNnNTRzVQOEFkRjJvcWJVWGVVclRwQzBQMUxDbXRQVXp1MVJwbW9yNGtSR0pyd0xMbnJJbTlhMzFrNTcyQWkwSE5JVGwyWm5BQUFBQUFBQUFBQUFBQUFBQUFES0plL1FaUnR3TUlpcXRrUGR3cGhPcVl2cmNPbVV1R2puS210Rml1OENDemZjNWVEbTJxdVNIdDRDMFkxakcwZHNlQ2paYWxzaW95Tk54UDkwWW45VHViWm1seTBHRmNJMGZCOU1XUm84QjBOam5hOFNLOWRhSkZYLzFPMzdacGJZbnBBNitDY0ZVM0E5SGRUNmUnO1xcbiAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgZGVmYXVsdDpcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vaW1hZ2VzL3J1bGVfdHlwZV9hdWRpbyc7XFxuICAgICAgICAgICAgYnJlYWs7XFxuICAgIH1cXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLinbZxcVwiLFwicGF0aFwiOlwicXFcIixcInJ1bGVcIjpcImV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL2xpYj9ydWxlPeatjOivjemAgumFjScpKS5ydWxlKTtcXG5jb25zdCB0aGlzX3BsYXRmb3JtID0gXFxcInFxXFxcIjtcXG4kLmV4cG9ydHMgPSB7XFxuXFxuXFxuICAgIGlUYWc6IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgJC5yZXF1aXJlKCdxcT9ydWxlPeatjOivjemAgumFjScpLmFqYXgoXFxcImh0dHBzOi8vYy55LnFxLmNvbS9zcGxjbG91ZC9mY2dpLWJpbi9mY2dfZ2V0X2Rpc3NfdGFnX2NvbmYuZmNnP2Zvcm1hdD1qc29uXFxcIikuZGF0YS5jYXRlZ29yaWVzLm1hcChfID0+IHtcXG4gICAgICAgICAgICBuYW1lID0gXy5jYXRlZ29yeUdyb3VwTmFtZS5yZXBsYWNlKCfng63pl6gnLCAn5o6o6I2QJyk7XFxuICAgICAgICAgICAgaVRhZ1tuYW1lXSA9IHt9O1xcbiAgICAgICAgICAgIF8uaXRlbXMubWFwKF8gPT4ge1xcbiAgICAgICAgICAgICAgICBpVGFnW25hbWVdW18uY2F0ZWdvcnlOYW1lXSA9IF8uY2F0ZWdvcnlJZDtcXG4gICAgICAgICAgICAgICAgaWYgKF8uY2F0ZWdvcnlOYW1lID09ICflhajpg6gnKVxcbiAgICAgICAgICAgICAgICAgICAgaVRhZ1tuYW1lXVtcXFwi5pyA5pawXFxcIl0gPSBfLmNhdGVnb3J5SWQgKyBcXFwiJnNvcnRJZD0yXFxcIjtcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH0pO1xcbiAgICAgICAgaVRhZ1tcXFwi5o6S6KGMXFxcIl0gPSB7fTtcXG4gICAgICAgICQucmVxdWlyZSgncXE/cnVsZT3mrYzor43pgILphY0nKS5hamF4KCdodHRwczovL3UueS5xcS5jb20vY2dpLWJpbi9tdXNpY3UuZmNnP2RhdGE9e1xcXCJ0b3BMaXN0XFxcIjp7XFxcIm1vZHVsZVxcXCI6XFxcIm11c2ljVG9wbGlzdC5Ub3BsaXN0SW5mb1NlcnZlclxcXCIsXFxcIm1ldGhvZFxcXCI6XFxcIkdldEFsbFxcXCIsXFxcInBhcmFtXFxcIjp7fX19JykudG9wTGlzdC5kYXRhLmdyb3VwLm1hcChfID0+IHtcXG4gICAgICAgICAgICBpVGFnW1xcXCLmjpLooYxcXFwiXVtfLmdyb3VwTmFtZV0gPSBfLnRvcGxpc3QubWFwKF8gPT4gRXh0cmEoe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogXy50aXRsZSxcXG4gICAgICAgICAgICAgICAgaW1nOiBfLmhlYWRQaWNVcmwgfHwgXy5mcm9udFBpY1VybCxcXG4gICAgICAgICAgICAgICAgY29udGVudDogMyxcXG4gICAgICAgICAgICAgICAgenlpZDogXy50b3BJZFxcbiAgICAgICAgICAgIH0sIDEsIDEpKTtcXG4gICAgICAgIH0pO1xcbiAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcInFxX2lUYWdcXFwiLCBpVGFnKTtcXG4gICAgfSxcXG5cXG5cXG5cXG4gICAgbGF6eTogZnVuY3Rpb24ocGxhdGZvcm0sIHQxLCB0MiwgaXN1cmwpIHtcXG4gICAgICAgIHN3aXRjaCAoU3RyaW5nKHBsYXRmb3JtKSkge1xcbiAgICAgICAgICAgIGNhc2UgJzAnOiAvLyDor6bmg4UgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgdSA9IFxcXCJodHRwczovL3UueS5xcS5jb20vY2dpLWJpbi9tdXNpY3UuZmNnXFxcIjtcXG4gICAgICAgICAgICAgICAgdmFyIGJvZHkgPSBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgICAgICBjb21tOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY3Q6ICcxOScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY3Y6ICcxODU5J1xcbiAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgIHJlcToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZTogJ211c2ljLnBmX3NvbmdfZGV0YWlsX3N2cicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnZ2V0X3NvbmdfZGV0YWlsX3lxcScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW06IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc29uZ19taWQ6IHQxXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgXyA9ICQucmVxdWlyZShcXFwicXE/cnVsZT3mrYzor43pgILphY1cXFwiKS5hamF4KHUsIHtcXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IGJvZHksXFxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICAgICAgICAgICAgICB9KS5yZXEuZGF0YS50cmFja19pbmZvO1xcbiAgICAgICAgICAgICAgICBuYW1lID0gXy5uYW1lO1xcbiAgICAgICAgICAgICAgICBhcnRpc3QgPSBfLnNpbmdlci5tYXAoXyA9PiBfLm5hbWUpLmpvaW4oXFxcIiZcXFwiKTtcXG4gICAgICAgICAgICAgICAgaWYgKHQyKSB7IC8vIOS4i+i9vVxcbiAgICAgICAgICAgICAgICAgICAgZiA9IF8uZmlsZTtcXG4gICAgICAgICAgICAgICAgICAgIGFyciA9IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGYuc2l6ZV8xMjhtcDMgIT0gMClcXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaCh0c1sxXSArIFNpemUoZi5zaXplXzEyOG1wMykpO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGYuc2l6ZV8zMjBtcDMgIT0gMClcXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaCh0c1syXSArIFNpemUoZi5zaXplXzMyMG1wMykpO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGYuc2l6ZV9mbGFjICE9IDApXFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2godHNbM10gKyBTaXplKGYuc2l6ZV9mbGFjKSk7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoZi5zaXplX2hpcmVzICE9IDApXFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2godHNbNF0gKyBTaXplKGYuc2l6ZV9oaXJlcykpO1xcblxcblxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoYXJyLCAxLCAn6YCJ5oup5LiL6L296Z+z6LSoJykuc2VsZWN0KChhcnIsIHQxLCBuYW1lLCBhcnRpc3QpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gYXJyLmluZGV4T2YoaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9ICQucmVxdWlyZShcXFwiamlleGk/cnVsZT3mrYzor43pgILphY1cXFwiKS5HZXRNdXNpY1VybChcXFwiZG93blxcXCIsIFxcXCJxcVxcXCIsIHQxLCBpLCBuYW1lLCBhcnRpc3QpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1cmwubWF0Y2goXFxcInRvYXN0Oi8vXFxcIikpIHJldHVybiB1cmw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdkb3dubG9hZDovLycgKyB1cmw7XFxuICAgICAgICAgICAgICAgICAgICB9LCBhcnIsIHQxLCBuYW1lLCBhcnRpc3QpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIC8vIOatjOivjVxcbiAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgbHJjID0gJC5yZXF1aXJlKFxcXCJxcT9ydWxlPeatjOivjemAgumFjVxcXCIpLmFqYXgoXFxcImh0dHA6Ly9jLnkucXEuY29tL2x5cmljL2ZjZ2ktYmluL2ZjZ19xdWVyeV9seXJpY19uZXcuZmNnP2Zvcm1hdD1qc29uJnNvbmdtaWQ9XFxcIiArIHQxKS5seXJpYztcXG4gICAgICAgICAgICAgICAgICAgIGxyYyA9IGJhc2U2NERlY29kZShscmMpO1xcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcXG4gICAgICAgICAgICAgICAgICAgIGxyYyA9IFxcXCJcXFwiXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgLy8g6ZO+5o6lXFxuICAgICAgICAgICAgICAgIGlmIChfLnBheS5wYXlfcGxheSkge1xcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gJC5yZXF1aXJlKFxcXCJqaWV4aT9ydWxlPeatjOivjemAgumFjVxcXCIpLkdldE11c2ljVXJsKFxcXCJvcGVuXFxcIiwgXFxcInFxXFxcIiwgdDEsIDAsIG5hbWUsIGFydGlzdCk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICB1ICs9IGA/ZGF0YT17XFxcInJlcV8wXFxcIjp7XFxcIm1vZHVsZVxcXCI6XFxcInZrZXkuR2V0VmtleVNlcnZlclxcXCIsXFxcIm1ldGhvZFxcXCI6XFxcIkNnaUdldFZrZXlcXFwiLFxcXCJwYXJhbVxcXCI6e1xcXCJndWlkXFxcIjpcXFwiMFxcXCIsXFxcInBsYXRmb3JtXFxcIjpcXFwiMjBcXFwiLFxcXCJmaWxlbmFtZVxcXCI6W1xcXCJNNTAwJHt0MSt0MX0ubXAzXFxcIl0sXFxcInNvbmdtaWRcXFwiOltcXFwiJHt0MX1cXFwiXX19fWA7XFxuICAgICAgICAgICAgICAgICAgICBfID0gJC5yZXF1aXJlKFxcXCJxcT9ydWxlPeatjOivjemAgumFjVxcXCIpLmFqYXgodSkucmVxXzAuZGF0YTtcXG4gICAgICAgICAgICAgICAgICAgIHVybCA9IF8uc2lwWzBdICsgXy5taWR1cmxpbmZvWzBdLnB1cmw7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKHVybC5tYXRjaChcXFwidG9hc3Q6Ly9cXFwiKSkgcmV0dXJuIHVybDtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgIHVybHM6IFt1cmwgKyAnI2lzTXVzaWM9dHJ1ZSMnXSxcXG4gICAgICAgICAgICAgICAgICAgIGx5cmljOiBscmNcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIGNhc2UgJzEnOlxcbiAgICAgICAgICAgICAgICB1cmwgPSBcXFwiaHR0cHM6Ly9jLnkucXEuY29tL3NwbGNsb3VkL2ZjZ2ktYmluL2ZjZ19nZXRfZGlzc19ieV90YWcuZmNnP2Zvcm1hdD1qc29uJmNhdGVnb3J5SWQ9XFxcIiArIHQxICsgXFxcIiZzaW49XFxcIiArICgoTVlfUEFHRSAtIDEpICogMzApICsgXFxcIiZlaW49XFxcIiArICgoTVlfUEFHRSAqIDMwKSAtIDEpO1xcbiAgICAgICAgICAgICAgICAkLnJlcXVpcmUoJ3FxP3J1bGU95q2M6K+N6YCC6YWNJykuYWpheCh1cmwpLmRhdGEubGlzdC5tYXAoXyA9PiBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXy5kaXNzbmFtZSxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogXy5pbWd1cmwsXFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAyLFxcbiAgICAgICAgICAgICAgICAgICAgenlpZDogXy5kaXNzaWRcXG4gICAgICAgICAgICAgICAgfSwgMSkpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgY2FzZSAnMic6IC8vIOWPkeeOsFxcbiAgICAgICAgICAgICAgICBfID0gJC5yZXF1aXJlKFxcXCJxcT9ydWxlPeatjOivjemAgumFjVxcXCIpLmFqYXgoXFxcImh0dHA6Ly9jLnkucXEuY29tL3F6b25lL2ZjZy1iaW4vZmNnX3VjY19nZXRjZGluZm9fYnlpZHNfY3AuZmNnP2Zvcm1hdD1qc29uJnR5cGU9MSZkaXNzdGlkPVxcXCIgKyB0MSkuY2RsaXN0WzBdLnNvbmdsaXN0O1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBjYXNlICczJzogLy8g5o6S6KGMXFxuICAgICAgICAgICAgICAgIF8gPSAkLnJlcXVpcmUoXFxcInFxP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuYWpheChgaHR0cHM6Ly91LnkucXEuY29tL2NnaS1iaW4vbXVzaWN1LmZjZz9kYXRhPXtcXFwiZGV0YWlsXFxcIjp7XFxcIm1vZHVsZVxcXCI6XFxcIm11c2ljVG9wbGlzdC5Ub3BsaXN0SW5mb1NlcnZlclxcXCIsXFxcIm1ldGhvZFxcXCI6XFxcIkdldERldGFpbFxcXCIsXFxcInBhcmFtXFxcIjp7XFxcInRvcElkXFxcIjoke3QxfSxcXFwib2Zmc2V0XFxcIjokeyhNWV9QQUdFLTEpKjMwfSxcXFwibnVtXFxcIjozMCxcXFwicGVyaW9kXFxcIjpcXFwiXFxcIn19fWApLmRldGFpbC5kYXRhLnNvbmdJbmZvTGlzdDtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICB9XFxuICAgICAgICBkID0gW107XFxuICAgICAgICBfLm1hcChfID0+IEV4dHJhKHtcXG4gICAgICAgICAgICB0aXRsZTogKF8ubmFtZSB8fCBfLnNvbmduYW1lKSArICcgLSAnICsgXy5zaW5nZXIubWFwKF8gPT4gXy5uYW1lKS5qb2luKCcmJyksXFxuICAgICAgICAgICAgaW1nOiBgaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjMwMHgzMDBNMDAwJHtfLmFsYnVtbWlkfHwoXy5hbGJ1bT9fLmFsYnVtLm1pZDpcXFwiXFxcIil9LmpwZ2AsXFxuICAgICAgICAgICAgY29udGVudDogXy5wYXkucGF5cGxheSxcXG4gICAgICAgICAgICB6eWlkOiBfLm1pZCB8fCBfLnNvbmdtaWRcXG4gICAgICAgIH0sIDEpKTtcXG4gICAgICAgIHNldFJlc3VsdChkKTtcXG4gICAgfSxcXG5cXG5cXG5cXG4gICAgc2VhcmNoOiBmdW5jdGlvbihwbGF0Zm9ybSwga2V5d29yZCwgaXNVKSB7XFxuICAgICAgICBpZiAoaXNVICE9IFxcXCJ1cmxcXFwiKSB7XFxuICAgICAgICAgICAgX18gPSB7XFxuICAgICAgICAgICAgICAgIGxpYjogKF8pID0+IHRydWUsXFxuICAgICAgICAgICAgICAgIHBhaWQ6IChfKSA9PiBfLnBheS5wYXlfcGxheSA9PSAnMScsXFxuICAgICAgICAgICAgICAgIGZyZWU6IChfKSA9PiBfLnBheS5wYXlfcGxheSA9PSAnMCdcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgc3VybCA9IChzdHlwZSkgPT4gJC5yZXF1aXJlKFxcXCJxcT9ydWxlPeatjOivjemAgumFjVxcXCIpLmFqYXgoXFxcImh0dHA6Ly91Ni55LnFxLmNvbS9jZ2ktYmluL211c2ljdS5mY2dcXFwiLCB7XFxuICAgICAgICAgICAgICAgIFxcXCJib2R5XFxcIjogSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICAgICAgXFxcInJlcVxcXCI6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFwibW9kdWxlXFxcIjogXFxcIm11c2ljLnNlYXJjaC5TZWFyY2hDZ2lTZXJ2aWNlXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFwibWV0aG9kXFxcIjogXFxcIkRvU2VhcmNoRm9yUVFNdXNpY0xpdGVcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJwYXJhbVxcXCI6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcInF1ZXJ5XFxcIjoga2V5d29yZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcInNlYXJjaF90eXBlXFxcIjogc3R5cGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJudW1fcGVyX3BhZ2VcXFwiOiAzMCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcInBhZ2VfbnVtXFxcIjogTVlfUEFHRVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgICAgIFxcXCJtZXRob2RcXFwiOiBcXFwiUE9TVFxcXCJcXG4gICAgICAgICAgICB9KS5yZXEuZGF0YS5ib2R5O1xcbiAgICAgICAgICAgIHN3aXRjaCAoU3RyaW5nKHBsYXRmb3JtKSkge1xcbiAgICAgICAgICAgICAgICBjYXNlICcwJzogLy8g5pCc57Si5Y2V5puyXFxuICAgICAgICAgICAgICAgICAgICBzdXJsKDApLml0ZW1fc29uZy5tYXAoXyA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9fW2lzVV0oXykpIEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8ubmFtZSArICcgLSAnICsgXy5zaW5nZXIubWFwKF8gPT4gXy5uYW1lKS5qb2luKCcmJyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogYGh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlIzMDB4MzAwTTAwMCR7Xy5hbGJ1bW1pZHx8KF8uYWxidW0/Xy5hbGJ1bS5taWQ6XFxcIlxcXCIpfS5qcGdgLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBfLnBheS5wYXlfcGxheSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogXy5taWRcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAxKTtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIGNhc2UgJzEnOiAvLyDmkJzntKLmrYzljZVcXG4gICAgICAgICAgICAgICAgICAgIHN1cmwoMykuaXRlbV9zb25nbGlzdC5tYXAoXyA9PiBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8uZGlzc25hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBfLmxvZ28sXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogMixcXG4gICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiBfLmRpc3NpZFxcbiAgICAgICAgICAgICAgICAgICAgfSwgMSkpO1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBlbHNlIHsgLy8g5pCc57SiIOWIhuS6q+mTvuaOpVxcbiAgICAgICAgICAgIHN3aXRjaCAoU3RyaW5nKHBsYXRmb3JtKSkge1xcbiAgICAgICAgICAgICAgICBjYXNlICcwJzogLy8g5pCc57Si5Y2V5puyXFxuICAgICAgICAgICAgICAgICAgICB2YXIgYm9keSA9IEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0OiAnMTknLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdjogJzE4NTknXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlOiAnbXVzaWMucGZfc29uZ19kZXRhaWxfc3ZyJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnZ2V0X3NvbmdfZGV0YWlsX3lxcScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb25nX21pZDoga2V5d29yZFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICBfID0gJC5yZXF1aXJlKFxcXCJxcT9ydWxlPeatjOivjemAgumFjVxcXCIpLmFqYXgoXFxcImh0dHBzOi8vdS55LnFxLmNvbS9jZ2ktYmluL211c2ljdS5mY2dcXFwiLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keTogYm9keSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICAgICAgICAgICAgICAgICAgfSkucmVxLmRhdGEudHJhY2tfaW5mbztcXG4gICAgICAgICAgICAgICAgICAgIEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXy5uYW1lICsgJyAtICcgKyBfLnNpbmdlci5tYXAoXyA9PiBfLm5hbWUpLmpvaW4oJyYnKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IGBodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSMzAweDMwME0wMDAke18uYWxidW0/Xy5hbGJ1bS5taWQ6XFxcIlxcXCJ9LmpwZ2AsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogXy5wYXkucGF5cGxheSxcXG4gICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiBfLm1pZFxcbiAgICAgICAgICAgICAgICAgICAgfSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgY2FzZSAnMSc6IC8vIOaQnOe0ouatjOWNlVxcbiAgICAgICAgICAgICAgICAgICAgXyA9ICQucmVxdWlyZShcXFwicXE/cnVsZT3mrYzor43pgILphY1cXFwiKS5hamF4KFxcXCJodHRwOi8vYy55LnFxLmNvbS9xem9uZS9mY2ctYmluL2ZjZ191Y2NfZ2V0Y2RpbmZvX2J5aWRzX2NwLmZjZz9mb3JtYXQ9anNvbiZ0eXBlPTEmZGlzc3RpZD1cXFwiICsga2V5d29yZCkuY2RsaXN0WzBdO1xcbiAgICAgICAgICAgICAgICAgICAgRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBSaWNoKF8uZGlzc25hbWUpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogXy5sb2dvLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IDIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogXy5kaXNzdGlkXFxuICAgICAgICAgICAgICAgICAgICB9LCAxKTtcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgYWpheDogZnVuY3Rpb24odXJsLCBoZWFkKSB7XFxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShmZXRjaCh1cmwsIE9iamVjdC5hc3NpZ24oe1xcbiAgICAgICAgICAgIFxcXCJoZWFkZXJzXFxcIjoge1xcbiAgICAgICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6IFxcXCJodHRwczovL3kucXEuY29tL1xcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogXFxcIk1vemlsbGEvNS4wIChjb21wYXRpYmxlOyBNU0lFIDkuMDsgV2luZG93cyBOVCA2LjE7IFdPVzY0OyBUcmlkZW50LzUuMClcXFwiXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwgaGVhZCB8fCB7fSkpKTtcXG4gICAgfVxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuKRpFRHWOaUtuiXj1wiLFwicGF0aFwiOlwiY29sbGVjdGlvblwiLFwicnVsZVwiOlwianM6XFxuZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvbGliP3J1bGU95q2M6K+N6YCC6YWNJywge30pKS5ydWxlKTtcXG5sZXQgY19wbGF0Zm9ybSA9IGdldE15VmFyKCdjX3BsYXRmb3JtJywgJ2xpYicpLnRyaW0oKTtcXG5sZXQgc2kgPSBnZXRNeVZhcignc2knLCAnMCcpLnRyaW0oKTtcXG5sZXQgY190MiA9IGdldE15VmFyKCdjX3QyJywgJ2xpYicpLnRyaW0oKTtcXG5sZXQgY190MSA9IHNpID09ICcwJztcXG5kID0gW3tcXG4gICAgdGl0bGU6IGNfdDEgPyBcXFwi5Y2V5puyXFxcIiA6IFxcXCLmrYzljZVcXFwiLFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHNpKSA9PiB7XFxuICAgICAgICBwdXRNeVZhcignc2knLCBzaSk7XFxuICAgICAgICBjbGVhck15VmFyKCdjX3QyJyk7XFxuICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgfSwgY190MSA/ICcxJyA6ICcwJyksXFxuICAgIGNvbF90eXBlOiBcXFwiaWNvbl81XFxcIixcXG4gICAgaW1nOiBcXFwiaGlrZXI6Ly9pbWFnZXMvaWNvbl94aXV0YW5cXFwiXFxufSwge1xcbiAgICB0aXRsZTogXFxcIuaUtuiXj1xcXCIsXFxuICAgIHVybDogXFxcImhpa2VyOi8vY29sbGVjdGlvbj9ydWxlPeatjOivjemAgumFjVxcXCIsXFxuICAgIGNvbF90eXBlOiBcXFwiaWNvbl81XFxcIixcXG4gICAgaW1nOiBcXFwiaGlrZXI6Ly9pbWFnZXMvaWNvbl9kb3dubG9hZFxcXCJcXG59LCB7XFxuICAgIHRpdGxlOiBcXFwi5Y6G5Y+yXFxcIixcXG4gICAgdXJsOiBcXFwiaGlrZXI6Ly9oaXN0b3J5P3J1bGU95q2M6K+N6YCC6YWNXFxcIixcXG4gICAgY29sX3R5cGU6IFxcXCJpY29uXzVcXFwiLFxcbiAgICBpbWc6IFxcXCJoaWtlcjovL2ltYWdlcy9pY29uX2hpc1xcXCJcXG59LCB7XFxuICAgIHRpdGxlOiBcXFwi5pCc57SiXFxcIixcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChfKSA9PiB7XFxuICAgICAgICBjbGVhck15VmFyKCdzX3BsYXRmb3JtJyk7XFxuICAgICAgICBjbGVhck15VmFyKCdzX3QzJyk7XFxuICAgICAgICBjbGVhck15VmFyKCdzX3Q0Jyk7XFxuICAgICAgICBpZiAoXy5iYWNrKVxcbiAgICAgICAgICAgIHJldHVybiBiYWNrKGZhbHNlKSwgJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgZWxzZVxcbiAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9wYWdlL3NlYXJjaCNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSM/cD1meXBhZ2UmcnVsZT3mrYzor43pgILphY1cXFwiO1xcbiAgICB9LCBNWV9QQVJBTVMpLFxcbiAgICBjb2xfdHlwZTogXFxcImljb25fNVxcXCIsXFxuICAgIGltZzogXFxcImhpa2VyOi8vaW1hZ2VzL21lbnVfc2VhcmNoMlxcXCIsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBwYWdlVGl0bGU6IFxcXCLpq5jnuqfmkJzntKJcXFwiLFxcbiAgICAgICAgYmFjazogMVxcbiAgICB9XFxufSwge1xcbiAgICB0aXRsZTogXFxcIuiuvue9rlxcXCIsXFxuICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9ydWxlTGlzdCNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSM/cGFnZVRpdGxlPeino+aekOeuoeeQhiZydWxlPeatjOivjemAgumFjVxcXCIsXFxuICAgIGNvbF90eXBlOiBcXFwiaWNvbl81XFxcIixcXG4gICAgaW1nOiBcXFwiaGlrZXI6Ly9pbWFnZXMv6K6+572uXFxcIlxcbn0sIHtcXG4gICAgY29sX3R5cGU6ICdibGFua19ibG9jaydcXG59XTtcXG5wbGF0Zm9ybXMubWFwKHBsYXRmb3JtID0+IHtcXG4gICAgaWYgKGNfcGxhdGZvcm0gPT0gcGxhdGZvcm0pXFxuICAgICAgICBwbGF0Zm9ybSA9IFJpY2goU3Ryb25nKENvbG9yKHBsYXRmb3JtKSkpO1xcbiAgICByZXR1cm4gZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBwbGF0Zm9ybSxcXG4gICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgocGxhdGZvcm0pID0+IHtcXG4gICAgICAgICAgICBpZiAoIXBsYXRmb3JtLm1hdGNoKC9e4oCY4oCY4oCZ4oCZLykpIHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2NfcGxhdGZvcm0nLCBwbGF0Zm9ybSk7XFxuICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoJ2NfdDInKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgfSwgcGxhdGZvcm0pLFxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICB9KTtcXG59KTtcXG5kLnB1c2goe1xcbiAgICBjb2xfdHlwZTogJ2JsYW5rX2Jsb2NrJ1xcbn0pO1xcbmlmIChzaSA9PSAnMCcpIHtcXG4gICAgc3dpdGNoIChjX3BsYXRmb3JtKSB7XFxuICAgICAgICBjYXNlICc1cyc6XFxuICAgICAgICAgICAgY3RhYiA9IFtcXFwibGliXFxcIiwgXFxcInljXFxcIiwgXFxcImZjXFxcIiwgXFxcImJ6XFxcIl07XFxuICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICBjYXNlICdteSc6XFxuICAgICAgICAgICAgY3RhYiA9IFtcXFwibGliXFxcIiwgXFxcInd5XFxcIiwgXFxcImt3XFxcIiwgXFxcIm1nXFxcIl07XFxuICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICBjYXNlICdxdCc6XFxuICAgICAgICAgICAgY3RhYiA9IHF0cztcXG4gICAgICAgICAgICBicmVhaztcXG4gICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAgICAgY3RhYiA9IFtcXFwibGliXFxcIiwgXFxcInBhaWRcXFwiLCBcXFwiZnJlZVxcXCJdO1xcbiAgICAgICAgICAgIGJyZWFrO1xcbiAgICB9XFxufSBlbHNlIHtcXG4gICAgY3RhYiA9IFtcXFwibGliXFxcIl07XFxuICAgIGlmIChjX3BsYXRmb3JtICE9ICdxdCcpXFxuICAgICAgICBjdGFiLnB1c2goXFxcInNvbmdzXFxcIiwgXFxcImhvdHNcXFwiKTtcXG59XFxuY3RhYi5tYXAocGxhdGZvcm0gPT4ge1xcbiAgICBpZiAoY190MiA9PSBwbGF0Zm9ybSlcXG4gICAgICAgIHBsYXRmb3JtID0gUmljaChTdHJvbmcoQ29sb3IocGxhdGZvcm0pKSk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogcGxhdGZvcm0sXFxuICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHBsYXRmb3JtKSA9PiB7XFxuICAgICAgICAgICAgaWYgKCFwbGF0Zm9ybS5tYXRjaCgvXuKAmOKAmOKAmeKAmS8pKSB7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKCdjX3QyJywgcGxhdGZvcm0pO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICB9LCBwbGF0Zm9ybSksXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxuICAgIH0pO1xcbn0pO1xcbmQucHVzaCh7XFxuICAgIGNvbF90eXBlOiAnYmxhbmtfYmxvY2snXFxufSwge1xcbiAgICBjb2xfdHlwZTogJ2xpbmVfYmxhbmsnXFxufSwge1xcbiAgICBjb2xfdHlwZTogJ2xpbmVfYmxhbmsnXFxufSwge1xcbiAgICBjb2xfdHlwZTogJ2JpZ19ibGFua19ibG9jaydcXG59LCB7XFxuICAgIGNvbF90eXBlOiAnYmlnX2JsYW5rX2Jsb2NrJ1xcbn0sIHtcXG4gICAgY29sX3R5cGU6ICdwaWNfMV9jZW50ZXInLFxcbiAgICBpbWc6IFxcXCJoaWtlcjovL2ltYWdlcy9ydWxlX3R5cGVfYXVkaW9cXFwiLFxcbiAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG59LCB7XFxuICAgIGNvbF90eXBlOiAnYmlnX2JsYW5rX2Jsb2NrJ1xcbn0sIHtcXG4gICAgY29sX3R5cGU6ICdiaWdfYmxhbmtfYmxvY2snXFxufSk7XFxubGV0IHp5ID0gc3RvcmFnZTAuZ2V0SXRlbShcXFwiZGF0YV9cXFwiICsgc2kpO1xcbmlmICh6eSA9PT0gXFxcIlxcXCIgfHwgSlNPTi5zdHJpbmdpZnkoenkpID09ICd7fScpIHp5ID0ge1xcbiAgICBcXFwi5YWo6YOoXFxcIjogW11cXG59LCBzdG9yYWdlMC5zZXRJdGVtKFxcXCJkYXRhX1xcXCIgKyBzaSwgenkpO1xcbmxldCB6dSA9IFtdO1xcbmZvciAoaSBpbiB6eSkgenUucHVzaChpKTtcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5sZXQgdGkgPSBnZXRNeVZhcigndGknLCAnMCcpO1xcbnp1Lm1hcCgobmFtZSwgaWkpID0+IHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiB0aSA9PSBpaSA/IFJpY2goU3Ryb25nKENvbG9yKG5hbWUpKSkgOiBuYW1lLFxcbiAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChpaSkgPT4ge1xcbiAgICAgICAgICAgIHB1dE15VmFyKCd0aScsIGlpKTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgfSwgaWkpLFxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgbG9uZ0NsaWNrOiBbe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuWIoOmZpCBcXFwiICsgbmFtZSxcXG4gICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKHNpLCBuYW1lKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwi56Gu5a6a5Yig6Zmk5YiG57uEIFxcXCIgKyBuYW1lICsgXFxcIiDlkJfvvJ9cXFxcbuatpOaTjeS9nOS4jeWPr+mAhu+8jOiwqOaFjumAieaLqeOAglxcXCIpLmNvbmZpcm0oKHNpLCBuYW1lKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHp5ID0gc3RvcmFnZTAuZ2V0SXRlbShcXFwiZGF0YV9cXFwiICsgc2kpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB6eVtuYW1lXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKCd0aScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJsaWI/cnVsZT3mrYzor43pgILphY1cXFwiKS5zZXREYXRhKHNpLCB6eSk7XFxuICAgICAgICAgICAgICAgICAgICB9LCBzaSwgbmFtZSlcXG4gICAgICAgICAgICAgICAgfSwgc2ksIG5hbWUpXFxuICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuaJk+W8gOS4uuS6jOe6p1xcXCIsXFxuICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKChzaSwgbmFtZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoJ2hpa2VyOi8vZW1wdHkjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjJykucnVsZSgoc2ksIG5hbWUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9saWI/cnVsZT3mrYzor43pgILphY0nLCB7fSkpLnJ1bGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB6eSA9IHN0b3JhZ2UwLmdldEl0ZW0oXFxcImRhdGFfXFxcIiArIHNpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBkID0gW107XFxuICAgICAgICAgICAgICAgICAgICAgICAgenlbbmFtZV0ubWFwKF8gPT4gRXh0cmEoXykpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFJlc3VsdChkKTtcXG4gICAgICAgICAgICAgICAgICAgIH0sIHNpLCBuYW1lKVxcbiAgICAgICAgICAgICAgICB9LCBzaSwgbmFtZSlcXG4gICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi5L+u5pS55ZCN56ewXFxcIixcXG4gICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKHNpLCBuYW1lKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwiXFxcIiwgXFxcIuivt+i+k+WFpeaWsOeahOe7hOWQjVxcXCIpLmlucHV0KChzaSwgbmFtZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB6eSA9IHN0b3JhZ2UwLmdldEl0ZW0oXFxcImRhdGFfXFxcIiArIHNpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBqc29uID0ge307XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpIGluIHp5KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09IG5hbWUpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb25baW5wdXRdID0genlbaV1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb25baV0gPSB6eVtpXVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHp5ID0ganNvbjtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwibGliP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuc2V0RGF0YShzaSwgenkpO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgc2ksIG5hbWUpO1xcbiAgICAgICAgICAgICAgICB9LCBzaSwgbmFtZSlcXG4gICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi5pu05pS55o6S5bqPXFxcIixcXG4gICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKHNpLCB6dSwgbmFtZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgaSA9IHp1LmluZGV4T2YobmFtZSk7XFxuICAgICAgICAgICAgICAgICAgICB6dS5zcGxpY2UoaSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCh6dS5jb25jYXQoXFxcIuacgOWQjumdolxcXCIpLCAyLCAn6K+36YCJ5oup6LWE5rqQ5L2N572uJykuc2VsZWN0KChzaSwgenUsIG5hbWUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgenkgPSBzdG9yYWdlMC5nZXRJdGVtKFxcXCJkYXRhX1xcXCIgKyBzaSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAganNvbiA9IHt9O1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSBvZiB6dSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PSBpbnB1dCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbltuYW1lXSA9IHp5W25hbWVdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3RpJywgenUuaW5kZXhPZihpKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbltpXSA9IHp5W2ldXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcXFwi5pyA5ZCO6Z2iXFxcIiA9PSBpbnB1dCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uW25hbWVdID0genlbbmFtZV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCd0aScsIHp1Lmxlbmd0aCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHp5ID0ganNvbjtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwibGliP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuc2V0RGF0YShzaSwgenkpO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgc2ksIHp1LCBuYW1lKTtcXG4gICAgICAgICAgICAgICAgfSwgc2ksIHp1LCBuYW1lKVxcbiAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLliIbnu4TlkIjlubZcXFwiLFxcbiAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygoc2ksIHp1LCBuYW1lKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBpID0genUuaW5kZXhPZihuYW1lKTtcXG4gICAgICAgICAgICAgICAgICAgIHp1LnNwbGljZShpLCAxKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKHp1LCAzLCAn6YCJ5oup6KaB5ZCI5bm255qE5YiG57uEJykuc2VsZWN0KChzaSwgenUsIG5hbWUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgenkgPSBzdG9yYWdlMC5nZXRJdGVtKFxcXCJkYXRhX1xcXCIgKyBzaSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAganNvbiA9IHt9O1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSBvZiB6dSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PSBpbnB1dCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenlbaV0gPSB6eVtpXS5jb25jYXQoenlbbmFtZV0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3RpJywgenUuaW5kZXhPZihpKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbltpXSA9IHp5W2ldO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB6eSA9IGpzb247XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImxpYj9ydWxlPeatjOivjemAgumFjVxcXCIpLnNldERhdGEoc2ksIHp5KTtcXG4gICAgICAgICAgICAgICAgICAgIH0sIHNpLCB6dSwgbmFtZSk7XFxuICAgICAgICAgICAgICAgIH0sIHNpLCB6dSwgbmFtZSlcXG4gICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi5YiG5LqrIFxcXCIgKyBuYW1lLFxcbiAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygoc2ksIG5hbWUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAganNvbiA9IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogMCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl0Y2g6IDEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpOiBzaSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogc3RvcmFnZTAuZ2V0SXRlbShcXFwiZGF0YV9cXFwiICsgc2kpW25hbWVdXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBiYXNlNjRFbmNvZGUoSlNPTi5zdHJpbmdpZnkoanNvbikpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBzaGFyZVBhc3RlKHQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiY29weTovL+atjOivjemAgumFjeaUtuiXj+WPo+S7pO+8jOaJk+W8gOa1t+mYlOWNs+WPr+WvvOWFpVxcXFxu77+lUGFzdGXvv6VcXFwiICsgdSArIGBAaW1wb3J0PWpzOiQucmVxdWlyZShcXFwiamlleGk/cnVsZT3mrYzor43pgILphY1cXFwiKS5zZXRSdWxlKGlucHV0LDIpO2A7XFxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5YiG5Lqr5aSx6LSlXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSwgc2ksIG5hbWUpXFxuICAgICAgICAgICAgfV1cXG4gICAgICAgIH1cXG4gICAgfSk7XFxufSk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuc3dpdGNoIChjX3QyKSB7XFxuICAgIGNhc2UgJ2ZyZWUnOlxcbiAgICAgICAgY190MiA9ICcwJ1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ3BhaWQnOlxcbiAgICAgICAgY190MiA9ICcxJ1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ3NvbmdzJzpcXG4gICAgICAgIGNfdDIgPSAnMidcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICdob3RzJzpcXG4gICAgICAgIGNfdDIgPSAnMydcXG4gICAgICAgIGJyZWFrO1xcbn1cXG5pZiAoSlNPTi5zdHJpbmdpZnkoenUpID09ICdbXFxcIuWFqOmDqFxcXCJdJyAmJiB6eVtcXFwi5YWo6YOoXFxcIl0ubGVuZ3RoID09IDApIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgIHRpdGxlOiBcXFwi4oCc4oCc4oCd4oCdXFxcIiArIFxcXCJ+fn7ku4DkuYjpg73msqHmnIl+fn5cXFwiLmZvbnRjb2xvcihcXFwiR3JheVxcXCIpXFxuICAgIH0pO1xcbn0gZWxzZSB7XFxuICAgIGlmICh6eVt6dVt0aV1dLmxlbmd0aCA9PT0gMCkge1xcbiAgICAgICAgZGVsZXRlIHp5W3p1W3RpXV07XFxuICAgICAgICBjbGVhck15VmFyKCd0aScpO1xcbiAgICAgICAgJC5yZXF1aXJlKFxcXCJsaWI/cnVsZT3mrYzor43pgILphY1cXFwiKS5zZXREYXRhKHNpLCB6eSk7XFxuICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBpaSA9IDA7XFxuICAgICAgICB6eVt6dVt0aV1dLm1hcCgoXywgaSkgPT4ge1xcbiAgICAgICAgICAgIGlmICgoKGNfcGxhdGZvcm0gPT0gJ2xpYicgfHwgY19wbGF0Zm9ybSA9PSBfLmRlc2MpICYmIChjX3QyID09ICdsaWInIHx8IGNfdDIgPT0gXy5jb250ZW50KSkgfHwgKGNfcGxhdGZvcm0gPT0gJ2xpYicgJiYgKChjX3QyID09IF8uY29udGVudCkgfHwgKGNfdDIgPT0gJzAnICYmIF8uY29udGVudCAhPSAnMScpKSkpIHtcXG4gICAgICAgICAgICAgICAgXy5leHRyYSA9IHtcXG4gICAgICAgICAgICAgICAgICAgIGluaGVyaXRUaXRsZTogZmFsc2UsXFxuICAgICAgICAgICAgICAgICAgICBjbHM6IGlkICsgJzphZGRsaXN0JyxcXG4gICAgICAgICAgICAgICAgICAgIGxvbmdDbGljazogW3tcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLkv67mlLlcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygoc2ksIGtleSwgXykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoW1xcXCLkv67mlLnlkI3np7BcXFwiLCBcXFwi5L+u5pS55bCB6Z2iXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLCBcXFwi5L+u5pS56ZO+5o6lXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwgMSwgJ+mAieaLqeimgeS/ruaUueeahOWPguaVsCcpLnNlbGVjdCgoc2ksIGtleSwgXykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0eXBlLCB0ZXh0XSA9IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIuS/ruaUueWQjeensFxcXCI6IFsndGl0bGUnLCAn6K+36L6T5YWl5paw55qE5ZCN56ewJ10sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCLkv67mlLnlsIHpnaJcXFwiOiBbXy5pbWcgPyAnaW1nJyA6ICdwaWMnLCAn6K+36L6T5YWl5q2j56Gu55qE5bCB6Z2i5Zyw5Z2AJ10sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCLkv67mlLnpk77mjqVcXFwiOiBbJ3VybCcsICflnKh75ZCO6Z2iIOWbnui9pijmjaLooYwp5Yeg5LiL5bCx6KGMJ11cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9W2lucHV0XTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gX1t0eXBlXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChuYW1lLCB0ZXh0KS5pbnB1dCgoc2ksIGtleSwgdHlwZSwgbmFtZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgenkgPSBzdG9yYWdlMC5nZXRJdGVtKFxcXCJkYXRhX1xcXCIgKyBzaSlba2V5XTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenkgPSB6eS5tYXAoXyA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX1t0eXBlXSA9PSBuYW1lKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1t0eXBlXSA9IGlucHV0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF87XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImxpYj9ydWxlPeatjOivjemAgumFjVxcXCIpLnNldERhdGEoc2ksIHp5LCBrZXkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHNpLCBrZXksIHR5cGUsIG5hbWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgc2ksIGtleSwgXyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHNpLCB6dVt0aV0sIF8pXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuWPmOabtFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKChzaSwgenUsIGtleSwgaSwgenlpZCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoW1xcXCLmm7TmlLnmjpLluo9cXFwiLCBcXFwi5YiH5o2i5YiG57uEXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLCBcXFwi5om56YeP5o2i57uEXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwgMSwgJ+mAieaLqeimgeWPmOabtOeahOS6i+S7ticpLnNlbGVjdCgoc2ksIHp1LCBrZXksIGksIHp5aWQpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGlucHV0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ+abtOaUueaOkuW6jyc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6eSA9IHN0b3JhZ2UwLmdldEl0ZW0oXFxcImRhdGFfXFxcIiArIHNpKVtrZXldO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenUgPSB6eS5tYXAoXyA9PiBfLnRpdGxlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSB6eVtpXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5LnNwbGljZShpLCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp1LnNwbGljZShpLCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKHp1LmNvbmNhdChcXFwi5pyA5ZCO6Z2iXFxcIiksIDEsICfor7fpgInmi6notYTmupDkvY3nva4nKS5zZWxlY3QoKHNpLCBrZXksIHp5LCB6dSwgZGF0YSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24gPSBbXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgaW4genUpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHp1W2ldID09IGlucHV0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uLnB1c2goZGF0YSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbi5wdXNoKHp5W2ldKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxcXCLmnIDlkI7pnaJcXFwiID09IGlucHV0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24ucHVzaChkYXRhKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenkgPSBqc29uO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJsaWI/cnVsZT3mrYzor43pgILphY1cXFwiKS5zZXREYXRhKHNpLCB6eSwga2V5KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHNpLCBrZXksIHp5LCB6dSwgZGF0YSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn5YiH5o2i5YiG57uEJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlpID0genUuaW5kZXhPZihrZXkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenUuc3BsaWNlKGlpLCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKHp1LmNvbmNhdCgn5paw57uEJyksIDMsICfor7fpgInmi6notYTmupDkvY3nva4nKS5zZWxlY3QoKHNpLCBrZXksIGkpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6eSA9IHN0b3JhZ2UwLmdldEl0ZW0oXFxcImRhdGFfXFxcIiArIHNpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uID0gW107XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenlba2V5XS5tYXAoKF8sIGlpKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpaSAhPSBpKSBqc29uLnB1c2goXyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgZGF0YSA9IF87XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenlba2V5XSA9IGpzb247XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCfmlrDnu4QnID09IGlucHV0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXCJcXFwiLCBcXFwi6K+36L6T5YWl5paw57uE5ZCN56ewXFxcIikuaW5wdXQoKHNpLCB6eSwgZGF0YSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LnRyaW0oKS5tYXRjaCgvXlxcXFxkK3xeXFxcXHMqKOaWsOe7hCk/XFxcXHMqJC8pKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/nu4TlkI3kuI3og73kuLrnqbogJiDmnIDliY3pnaLkuI3og73mmK/mlbDlrZdcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenlbaW5wdXRdID0gW2RhdGFdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwibGliP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuc2V0RGF0YShzaSwgenkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBzaSwgenksIGRhdGEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6eVtpbnB1dF0ucHVzaChkYXRhKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwibGliP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuc2V0RGF0YShzaSwgenkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgc2ksIGtleSwgaSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn5om56YeP5o2i57uEJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXCJoaWtlcjovL2VtcHR5I25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5I1xcXCIpLnJ1bGUoKHNpKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwiYWRkbGlzdD9ydWxlPXRneOmfs+S5kFxcXCIpKHNpLCAwKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHNpLCBrZXkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgc2ksIHp1LCBrZXksIGksIHp5aWQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBzaSwgenUsIHp1W3RpXSwgaSwgXy56eWlkKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuWIhuS6q1xcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKChfLCBzaSwga2V5LCB6eWlkKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChbXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gXFxcIuWIhuS6q+mTvuaOpVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIuWIhuS6q+WPo+S7pFxcXCIsIFxcXCLmibnph4/liIbkuqtcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLCAxLCAn6YCJ5oup6KaB5Y+Y5pu055qE5LqL5Lu2Jykuc2VsZWN0KChfLCBzaSwga2V5LCB6eWlkKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChpbnB1dCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICfliIbkuqvpk77mjqUnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwibGliP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuY29weXVybChzaSwgenlpZCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn5YiG5Lqr5Y+j5LukJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24gPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogMCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXRjaDogMSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaTogc2ksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXy50aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBbX11cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gYmFzZTY0RW5jb2RlKEpTT04uc3RyaW5naWZ5KGpzb24pKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiY29weTovL+atjOivjemAgumFjeaUtuiXj+WPo+S7pO+8jOaJk+W8gOa1t+mYlOWNs+WPr+WvvOWFpVxcXFxu77+lVGV4dO+/pVxcXCIgKyB0ICsgYEBpbXBvcnQ9anM6JC5yZXF1aXJlKFxcXCJqaWV4aT9ydWxlPeatjOivjemAgumFjVxcXCIpLnNldFJ1bGUoaW5wdXQsMik7YDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICfmibnph4/liIbkuqsnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbiA9IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAxLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpdGNoOiAwLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpOiBzaSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBzdG9yYWdlMC5nZXRJdGVtKFxcXCJkYXRhX1xcXCIgKyBzaSlba2V5XVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShcXFwiaGlrZXI6Ly9maWxlcy9fY2F0Y2gvSW1wb3J0LnR4dFxcXCIsIEpTT04uc3RyaW5naWZ5KGpzb24pKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9wYWdlL3JlbHkyI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5Iz9ydWxlPeatjOivjemAgumFjVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBfLCBzaSwga2V5LCB6eWlkKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgXywgc2ksIHp1W3RpXSwgXy56eWlkKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuWIoOmZpFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKChzaSwga2V5LCBuYW1lKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwi56Gu5a6a5Yig6ZmkXFxcIiArIG5hbWUgKyBcXFwi5ZCX77yfXFxcIikuY29uZmlybSgoc2ksIGtleSwgbmFtZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB6eSA9IHN0b3JhZ2UwLmdldEl0ZW0oXFxcImRhdGFfXFxcIiArIHNpKVtrZXldO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB6dSA9IHp5Lm1hcChfID0+IF8udGl0bGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSB6dS5pbmRleE9mKG5hbWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5LnNwbGljZShpLCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwibGliP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuc2V0RGF0YShzaSwgenksIGtleSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBzaSwga2V5LCBuYW1lKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBzaSwgenVbdGldLCBfLnRpdGxlKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIF1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoTnVtYmVyKF8uY29udGVudC5yZXBsYWNlKC9eKFxcXFxkKlxcXFxEKSskLywgJzAnKSkgPCAyKSBfLmV4dHJhLmxvbmdDbGljay51bnNoaWZ0KHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi4piFIOS4i+i9veatjOabsiDimIVcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKHVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1cmw7XFxuICAgICAgICAgICAgICAgICAgICB9LCBMYXp5KF8uZGVzYywgXy5jb250ZW50LCBfLnp5aWQsIDEpKVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgaWYgKCFfLnVybCkgXy51cmwgPSBMYXp5KF8uZGVzYywgXy5jb250ZW50LCBfLnp5aWQpO1xcbiAgICAgICAgICAgICAgICBfLmNvbF90eXBlID0gJ2NhcmRfcGljXzMnO1xcbiAgICAgICAgICAgICAgICBkLnB1c2goXyk7XFxuICAgICAgICAgICAgICAgIGlpKys7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgICAgICBpZiAoIWlpKSBkLnB1c2goe1xcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLigJzigJzigJ3igJ1cXFwiICsgXFxcIn5+fuS7gOS5iOmDveayoeaciX5+flxcXCIuZm9udGNvbG9yKFxcXCJHcmF5XFxcIilcXG4gICAgICAgIH0pO1xcbiAgICB9XFxufVxcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuKRo+mrmOe6p+aQnOe0olwiLFwicGF0aFwiOlwic2VhcmNoXCIsXCJydWxlXCI6XCJqczpcXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9saWI/cnVsZT3mrYzor43pgILphY0nLCB7fSkpLnJ1bGUpO1xcbmxldCBoaXN0b3J5ID0gc3RvcmFnZTAuZ2V0SXRlbShcXFwic2VhcmNoSGlzdG9yeVxcXCIsIFtdKTtcXG5sZXQgc19wbGF0Zm9ybSA9IGdldE15VmFyKCdzX3BsYXRmb3JtJywgJ2xpYicpXFxubGV0IHNfdDEgPSBnZXRNeVZhcignc190MScsIGdldEl0ZW0oJ3NfdDEnLCAnMCcpKVxcbmxldCBzX3QyID0gZ2V0TXlWYXIoJ3NfdDInLCAnJyk7XFxubGV0IHNfdDMgPSBnZXRNeVZhcignc190MycsICdsaWInKTtcXG5sZXQgc190NCwgcmVnaWQsIGlzUCA9IE1ZX1BBR0UgPT0gMSxcXG4gICAgaXNVID0gL2h0dHBzPzpcXFxcL1xcXFwvLy50ZXN0KHNfdDIpO1xcblxcblxcblxcbmlmIChzX3QxID09ICcwJykge1xcbiAgICBzd2l0Y2ggKHNfcGxhdGZvcm0pIHtcXG4gICAgICAgIGNhc2UgJ2xpYic6XFxuICAgICAgICAgICAgc190MyA9IGdldE15VmFyKCdzX3QzJywgJ2t3Jyk7XFxuICAgICAgICAgICAgdGFicyA9IFsna3cnXTtcXG4gICAgICAgICAgICBicmVhaztcXG4gICAgICAgIGNhc2UgJzVzJzpcXG4gICAgICAgICAgICB0YWJzID0gWydsaWInLCAneWMnLCAnZmMnLCAnYnonXTtcXG4gICAgICAgICAgICBicmVhaztcXG4gICAgICAgIGNhc2UgJ215JzpcXG4gICAgICAgICAgICBzX3Q0ID0gZ2V0TXlWYXIoJ3NfdDQnLCAnMScpID09ICcxJztcXG4gICAgICAgICAgICBzX3QzID0gZ2V0TXlWYXIoJ3NfdDMnLCAnd3knKTtcXG4gICAgICAgICAgICBpZiAoIXNfdDMubWF0Y2goL3d5fGt3fG1nLykgJiYgc190NClcXG4gICAgICAgICAgICAgICAgc190MyA9ICd3eSc7XFxuICAgICAgICAgICAgdGFicyA9IFtcXFwid3lcXFwiLCBcXFwia3dcXFwiLCBcXFwibWdcXFwiLCBcXFwiMXRcXFwiLCBcXFwiZGJcXFwiLCBcXFwiNXlcXFwiLCBcXFwiNWZcXFwiXS5zbGljZSgwLCBzX3Q0ID8gMyA6IDcpO1xcbiAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgY2FzZSAncXQnOlxcbiAgICAgICAgICAgIHNfdDMgPSBnZXRNeVZhcignc190MycsICdiZCcpO1xcbiAgICAgICAgICAgIHRhYnMgPSBxdHMuc2xpY2UoMSk7XFxuICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICAgIHRhYnMgPSBbJ2xpYicsICdwYWlkJywgJ2ZyZWUnXTtcXG4gICAgICAgICAgICBicmVhaztcXG4gICAgfVxcbn0gZWxzZSB7XFxuICAgIHRhYnMgPSBbJ2xpYiddO1xcbn1cXG5cXG5cXG5cXG5pZiAoaXNQKSB7XFxuICAgIGlmIChpc1UpIHtcXG4gICAgICAgIGxldCByZWdzID0gW1xcbiAgICAgICAgICAgIFtcXFwicXFcXFwiLCAveVxcXFwucXFcXFxcLmNvbS9pLCAvLiooXFxcXC9kZXRhaWxzXFxcXC8uKmlkPXxcXFxcL3BsYXlsaXN0XFxcXC8pKFxcXFxkKykvaSwgL1tcXFxcL1xcXFw/XFxcXCZdc29uZyhEZXRhaWxcXFxcL3xtaWRcXFxcPSkoW2EtejAtOV0rKS9pXSxcXG4gICAgICAgICAgICBbXFxcInd5XFxcIiwgL211c2ljXFxcXC4xNjNcXFxcLmNvbS9pLCAvXFxcXC9wbGF5bGlzdChcXFxcL3xcXFxcP2lkPSkoXFxcXGQrKS9pLCAvc29uZ1xcXFw/KC4qXFxcXCYpP2lkPShcXFxcZCspL2ldLFxcbiAgICAgICAgICAgIFtcXFwia3dcXFwiLCAva3V3b1xcXFwuY24vaSwgL1xcXFwvcGxheWxpc3QoX2RldGFpbCk/XFxcXC8oXFxcXGQrKS9pLCAvXFxcXC8oeWlueXVlfHBsYXlfZGV0YWlsKVxcXFwvKFxcXFxkKykvaV0sXFxuICAgICAgICAgICAgW1xcXCJtZ1xcXCIsIC9taWd1XFxcXC5jbi9pLCAvXFxcXC9wbGF5bGlzdFxcXFwvKC4qaWQ9KT8oXFxcXGQrKS9pLCAvXFxcXC9zb25nXFxcXC8oLippZD0pPyhbYS16MC05XSspL2ldLFxcbiAgICAgICAgICAgIC8vIFtcXFwia2dcXFwiLCAuLi5dXFxuICAgICAgICAgICAgW1xcXCI1c1xcXCIsIC81c2luZ1xcXFwuL2ksIC8uKihzb25nbGlzdC4qaWQ9KShbYS16MC05XSspL2ksIC8uKihcXFxcP3NvbmcuKj89fFxcXFwvKShbYS16MC05XSspKFxcXFwmc29uZy4qPz18XFxcXC8pKFthLXowLTldKykvaV0sXFxuICAgICAgICBdO1xcbiAgICAgICAgZm9yIChbcGxhdGZvcm0sIHJlZzEsIHJlZzIsIHJlZzNdIG9mIHJlZ3MpIHtcXG4gICAgICAgICAgICBpZiAoc190Mi5tYXRjaChyZWcxKSkge1xcbiAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgc19wbGF0Zm9ybSA9IHBsYXRmb3JtO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdCA9IHNfdDIubWF0Y2gocmVnMikpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzX3QxID0gJzEnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lkID0gbWF0WzJdO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtYXQgPSBzX3QyLm1hdGNoKHJlZzMpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc190MSA9ICcwJztcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWdpZCA9IG1hdFsyXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGxhdGZvcm0gPT0gJzVzJykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVnaWQubWF0Y2goL1xcXFxELykpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpZCA9IG1hdFs0XSArICcjJyArIHJlZ2lkO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpZCArPSAnIycgKyBtYXRbNF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHt9XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHNfdDIgPSByZWdpZFxcbiAgICB9IGVsc2UgaWYgKHNfdDIudHJpbSgpKSB7XFxuICAgICAgICBsZXQgaWkgPSBoaXN0b3J5LmluZGV4T2Yoc190Mik7XFxuICAgICAgICBpZiAoaWkgPiAtMSkge1xcbiAgICAgICAgICAgIGhpc3Rvcnkuc3BsaWNlKGlpLCAxKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChoaXN0b3J5Lmxlbmd0aCA+IDIwKSB7XFxuICAgICAgICAgICAgaGlzdG9yeS5zcGxpY2UoaGlzdG9yeS5sZW5ndGggLSAxLCAxKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGhpc3RvcnkudW5zaGlmdChzX3QyKTtcXG4gICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0oXFxcInNlYXJjaEhpc3RvcnlcXFwiLCBoaXN0b3J5KTtcXG4gICAgfVxcblxcblxcblxcbiAgICBkID0gW3tcXG4gICAgICAgIGNvbF90eXBlOiAncGljXzFfZnVsbCcsXFxuICAgICAgICB0aXRsZTogJzAnLFxcbiAgICAgICAgaW1nOiAkLnJlcXVpcmUoJ2ltYWdlP3J1bGU95q2M6K+N6YCC6YWNJykoXFxcInRvcFxcXCIpLFxcbiAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChfKSA9PiB7XFxuICAgICAgICAgICAgaWYgKF8uYmFjaylcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGJhY2sodHJ1ZSksICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICBlbHNlXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9wYWdlL2NvbGxlY3Rpb24jbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjP3J1bGU95q2M6K+N6YCC6YWNXFxcIjtcXG4gICAgICAgIH0sIE1ZX1BBUkFNUyksXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIHBhZ2VUaXRsZTogXFxcIlRHWOaUtuiXj1xcXCIsXFxuICAgICAgICAgICAgYmFjazogMVxcbiAgICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAgICB0aXRsZTogU3Ryb25nKFxcXCLmkJzntKJcXFwiICsgKHNfdDEgPT09ICcwJyA/IFxcXCLljZXmm7JcXFwiIDogXFxcIuatjOWNlVxcXCIpKSxcXG4gICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoc190MSkgPT4ge1xcbiAgICAgICAgICAgIHB1dE15VmFyKCdzX3QxJywgc190MSk7XFxuICAgICAgICAgICAgY2xlYXJNeVZhcignc190MycpO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgIH0sIHNfdDEgPT09ICcwJyA/ICcxJyA6ICcwJyksXFxuICAgICAgICBjb2xfdHlwZTogXFxcImljb25fc21hbGxfM1xcXCIsXFxuICAgICAgICBpbWc6IFxcXCJoaWtlcjovL2ltYWdlcy9pY29uX3hpdXRhblxcXCJcXG4gICAgfSwge1xcbiAgICAgICAgdGl0bGU6IFN0cm9uZyhcXFwi5oiR55qE5pS26JePXFxcIiksXFxuICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2NvbGxlY3Rpb24/cnVsZT3mrYzor43pgILphY1cXFwiLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJpY29uX3NtYWxsXzNcXFwiLFxcbiAgICAgICAgaW1nOiBcXFwiaGlrZXI6Ly9pbWFnZXMvaWNvbl9kb3dubG9hZFxcXCJcXG4gICAgfSwge1xcbiAgICAgICAgdGl0bGU6IFN0cm9uZyhcXFwi5Y6G5Y+y6K6w5b2VXFxcIiksXFxuICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2hpc3Rvcnk/cnVsZT3mrYzor43pgILphY1cXFwiLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJpY29uX3NtYWxsXzNcXFwiLFxcbiAgICAgICAgaW1nOiBcXFwiaGlrZXI6Ly9pbWFnZXMvaWNvbl9oaXNcXFwiXFxuICAgIH1dO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfwn5SNJyxcXG4gICAgICAgIGRlc2M6ICfmkJzntKLlhbPplK7or40gLyDliIbkuqvpk77mjqUnLFxcbiAgICAgICAgdXJsOiAkLnRvU3RyaW5nKChzX3BsYXRmb3JtKSA9PiB7XFxuICAgICAgICAgICAgc190MiA9IGlucHV0LnRyaW0oKTtcXG4gICAgICAgICAgICBpZiAoc190MiAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcignc190MicsIHNfdDIpO1xcbiAgICAgICAgICAgICAgICBpZiAoc19wbGF0Zm9ybSA9PSAnbGliJylcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdzX3BsYXRmb3JtJywgZ2V0SXRlbSgnc19wbGF0Zm9ybScsICdrdycpKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgfSwgc19wbGF0Zm9ybSksXFxuICAgICAgICBjb2xfdHlwZTogXFxcImlucHV0XFxcIixcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgaWQ6IGlkICsgXFxcIjpzZWFyY2hcXFwiLFxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0TXlWYXIoXFxcInNfdDJcXFwiKSxcXG4gICAgICAgICAgICBvbkNoYW5nZTogXFxcInB1dE15VmFyKCdzX3QyJyxpbnB1dClcXFwiXFxuICAgICAgICB9XFxuICAgIH0pO1xcbiAgICBwbGF0Zm9ybXMubWFwKHBsYXRmb3JtID0+IHtcXG4gICAgICAgIGlmIChzX3BsYXRmb3JtID09IHBsYXRmb3JtKVxcbiAgICAgICAgICAgIHBsYXRmb3JtID0gUmljaChTdHJvbmcoQ29sb3IocGxhdGZvcm0pKSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBwbGF0Zm9ybSxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHBsYXRmb3JtKSA9PiB7XFxuICAgICAgICAgICAgICAgIGlmICghcGxhdGZvcm0ubWF0Y2goL17igJjigJjigJnigJkvKSkge1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3NfcGxhdGZvcm0nLCBwbGF0Zm9ybSk7XFxuICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKCdzX3QzJyk7XFxuICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKCdzX3Q0Jyk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICB9LCBwbGF0Zm9ybSksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICAgICAgfSk7XFxuICAgIH0pO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgY29sX3R5cGU6ICdibGFua19ibG9jaydcXG4gICAgfSk7XFxuICAgIGlmIChzX3QxID09ICcwJyAmJiBzX3BsYXRmb3JtID09ICdteScpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IFJpY2goU3Ryb25nKENvbG9yKHNfdDQgPyAn5pawJyA6ICfml6cnLCAnMzM5OWNjJykpKSxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHNfdDQpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3NfdDQnLCBzX3Q0KTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgIH0sIHNfdDQgPyAnMCcgOiAnMScpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG4gICAgICAgIH0pO1xcbiAgICB9XFxuICAgIHRhYnMubWFwKG5hbWUgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogc190MyA9PSBuYW1lID8gUmljaChTdHJvbmcoQ29sb3IobmFtZSkpKSA6IG5hbWUsXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh0aWQpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3NfdDMnLCB0aWQpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgfSwgbmFtZSksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICAgICAgfSk7XFxuICAgIH0pO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJ1xcbiAgICB9LCB7XFxuICAgICAgICBjb2xfdHlwZTogJ2xpbmVfYmxhbmsnXFxuICAgIH0pO1xcbiAgICBMb2FkaW5nKCk7XFxuICAgIGlmIChpc1UpIHtcXG4gICAgICAgIGlmICghcmVnaWQpIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLpk77mjqXmoLzlvI/mnKrmlLblvZVcXFwiLFxcbiAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICB9KTtcXG4gICAgICAgIGVsc2Ugc190MyA9IFxcXCJ1cmxcXFwiO1xcbiAgICB9XFxufSBlbHNlIGQgPSBbXTtcXG5cXG5cXG5cXG5pZiAoc19wbGF0Zm9ybSAhPSBcXFwibGliXFxcIiAmJiAhL15cXFxccyokLy50ZXN0KHNfdDIpKSB7XFxuICAgIGlmIChzX3QyLnRyaW0oKSAmJiAoIWlzVSB8fCBpc1ApKSB7XFxuICAgICAgICBpZiAoaXNVKVxcbiAgICAgICAgICAgIHNldFBhZ2VUaXRsZSgn6auY57qn5pCc57SiIC0gJyArIHNfcGxhdGZvcm0gKyAoc190MSA9PSAnMScgPyAn5q2M5Y2VJyA6ICfljZXmm7InKSk7XFxuICAgICAgICBlbHNlXFxuICAgICAgICAgICAgc2V0UGFnZVRpdGxlKCfpq5jnuqfmkJzntKIgLSAnICsgc190MiArICcjJyArIE1ZX1BBR0UpO1xcbiAgICAgICAgJC5yZXF1aXJlKHNfcGxhdGZvcm0gKyBcXFwiP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuc2VhcmNoKHNfdDEsIHNfdDIsIHNfdDMsIHNfdDQpO1xcbiAgICB9XFxufSBlbHNlIGlmIChpc1ApIHtcXG4gICAgc2V0UGFnZVRpdGxlKCfpq5jnuqfmkJzntKInKTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAnPHNwYW4gc3R5bGU9XFxcImNvbG9yOiNmZjY2MDFcXFwiPjxiPuWOhuWPsuaQnOe0ojwvYj48L3NwYW4+JyxcXG4gICAgICAgIHBpY191cmw6IFxcXCJoaWtlcjovL2ltYWdlcy9pY29uX2ZpbmRcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiLFxcbiAgICAgICAgdXJsOiAkKFxcXCLnoa7lrprmuIXpmaTlhajpg6jmkJzntKLorrDlvZXvvJ9cXFwiKS5jb25maXJtKChpZCkgPT4ge1xcbiAgICAgICAgICAgIGNsZWFySXRlbShcXFwic2VhcmNoSGlzdG9yeVxcXCIpO1xcbiAgICAgICAgICAgIGRlbGV0ZUl0ZW1CeUNscyhpZCArIFxcXCI6a2V5XFxcIik7XFxuICAgICAgICAgICAgYWRkSXRlbUFmdGVyKGlkICsgXFxcIjpzZWFyY2hIaXN0b3J5XFxcIiwge1xcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLigJzigJzigJ3igJ1cXFwiICsgXFxcIn5+fuS7gOS5iOmDveayoeacieWTpn5+flxcXCIuZm9udGNvbG9yKFxcXCJHcmF5XFxcIiksXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBjbHM6IGlkICsgXFxcIjprZXlcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgbGluZVZpc2libGU6IGZhbHNlXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH0sIGlkKSxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgaWQ6IGlkICsgXFxcIjpzZWFyY2hIaXN0b3J5XFxcIixcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuICAgIGlmIChoaXN0b3J5Lmxlbmd0aCA9PT0gMCkgZC5wdXNoKHtcXG4gICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgIHRpdGxlOiBcXFwi4oCc4oCc4oCd4oCdXFxcIiArIFxcXCJ+fn7ku4DkuYjpg73msqHmnInlk6Z+fn5cXFwiLmZvbnRjb2xvcihcXFwiR3JheVxcXCIpLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBjbHM6IGlkICsgXFxcIjprZXlcXFwiLFxcbiAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgfVxcbiAgICB9KTtcXG4gICAgZWxzZSBoaXN0b3J5Lm1hcCgoa2V5LCBpKSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBrZXksXFxuICAgICAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChzX3BsYXRmb3JtLCBrZXkpID0+IHtcXG4gICAgICAgICAgICAgICAgaWYgKHNfcGxhdGZvcm0gPT0gJ2xpYicpIHB1dE15VmFyKCdzX3BsYXRmb3JtJywgZ2V0SXRlbSgnc19wbGF0Zm9ybScsICdrdycpKTtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3NfdDInLCBrZXkpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgfSwgc19wbGF0Zm9ybSwga2V5KSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImZsZXhfYnV0dG9uXFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDogaWQgKyBcXFwiOmtleTpcXFwiICsga2V5LFxcbiAgICAgICAgICAgICAgICBjbHM6IGlkICsgXFxcIjprZXlcXFwiLFxcbiAgICAgICAgICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuWIoOmZpOWFs+mUruivjTpcXFwiICsga2V5LFxcbiAgICAgICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKGlkLCBrZXkpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaGlzdG9yeSA9IHN0b3JhZ2UwLmdldEl0ZW0oXFxcInNlYXJjaEhpc3RvcnlcXFwiLCBbXSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlpID0gaGlzdG9yeS5pbmRleE9mKGtleSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaGlzdG9yeS5zcGxpY2UoaWksIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0oXFxcInNlYXJjaEhpc3RvcnlcXFwiLCBoaXN0b3J5KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVJdGVtKGlkICsgXFxcIjprZXk6XFxcIiArIGtleSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhpc3RvcnkubGVuZ3RoID09PSAwKSBhZGRJdGVtQWZ0ZXIoaWQgKyBcXFwiOnNlYXJjaEhpc3RvcnlcXFwiLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuKAnOKAnOKAneKAnVxcXCIgKyBcXFwifn5+5LuA5LmI6YO95rKh5pyJ5ZOmfn5+XFxcIi5mb250Y29sb3IoXFxcIkdyYXlcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsczogaWQgKyBcXFwiOmtleVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgaWQsIGtleSlcXG4gICAgICAgICAgICAgICAgfV1cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgfSk7XFxuICAgIFJlc291ID0gKGlkLCBzX3BsYXRmb3JtLCBwbGF0Zm9ybSwgcmVzb3UpID0+IHtcXG4gICAgICAgIEQgPSBbXTtcXG4gICAgICAgIHJlc291Lm1hcChuYW1lID0+IHtcXG4gICAgICAgICAgICBELnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogbmFtZSxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChzX3BsYXRmb3JtLCBwbGF0Zm9ybSwga2V5d29yZCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNfcGxhdGZvcm0gPT0gJ2xpYicpIHB1dE15VmFyKCdzX3BsYXRmb3JtJywgcGxhdGZvcm0pO1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3NfdDEnLCAnMCcpO1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3NfdDInLCBrZXl3b3JkKTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgICAgIH0sIHNfcGxhdGZvcm0sIHBsYXRmb3JtLCBuYW1lKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdmbGV4X2J1dHRvbicsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBjbHM6IGlkICsgJzpyZXNvdTprZXknXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH0pO1xcbiAgICAgICAgcmV0dXJuIEQ7XFxuICAgIH07XFxuICAgIGQucHVzaCh7XFxuICAgICAgICBjb2xfdHlwZTogJ2xpbmVfYmxhbmsnXFxuICAgIH0sIHtcXG4gICAgICAgIHRpdGxlOiAnPHNwYW4gc3R5bGU9XFxcImNvbG9yOiNmZjY2MDFcXFwiPjxiPuWkp+WutumDveWcqOaQnDwvYj48L3NwYW4+JyxcXG4gICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaWQsIHNfcGxhdGZvcm0sIHBsYXRmb3JtLCBSZXNvdSkgPT4ge1xcbiAgICAgICAgICAgIGRlbGV0ZUl0ZW1CeUNscyhpZCArICc6cmVzb3U6a2V5Jyk7XFxuICAgICAgICAgICAgc3JlYyA9IFtdO1xcbiAgICAgICAgICAgIEpTT04ucGFyc2UoZmV0Y2goXFxcImh0dHA6Ly9zZWFyY2hyZWMua3V3by5jbi9zcmVjLnM/c2VhcmNocmVjYXBpPTAmaWQ9MFxcXCIpKS5hYnNsaXN0Lm1hcChhYmxpc3QgPT4ge1xcbiAgICAgICAgICAgICAgICBhYmxpc3QubWFwKF8gPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgc3JlYy5wdXNoKF8ud29yZClcXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIGFkZEl0ZW1BZnRlcihpZCArICc6cmVzb3UnLCBSZXNvdShpZCwgc19wbGF0Zm9ybSwgcGxhdGZvcm0sIHNyZWMpKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgfSwgaWQsIHNfcGxhdGZvcm0sICdrdycsIFJlc291KSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIixcXG4gICAgICAgIHBpY191cmw6IFxcXCJoaWtlcjovL2ltYWdlcy9ydWxlX3R5cGVfY29taWNzXFxcIixcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgaWQ6IGlkICsgXFxcIjpyZXNvdVxcXCJcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuICAgIHNyZWMgPSBzdG9yYWdlMC5nZXRNeVZhcihcXFwia3dfc3JlY1xcXCIpO1xcbiAgICBpZiAoc3JlYyA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgc3JlYyA9IGZldGNoKCdodHRwOi8vaG90d29yZC5rdXdvLmNuL2hvdHdvcmQucz9lbmNvZGluZz11dGY4JnRhYmlkPTEnKS5zcGxpdCgvXFxcXG4vKS5tYXAodGV4dCA9PiB0ZXh0LnRyaW0oKS5yZXBsYWNlKC9eVEVYVD18KFxcXFxzK1xcXFxkKyl7Mn0kL2dpLCAnJykpO1xcbiAgICAgICAgSlNPTi5wYXJzZShmZXRjaCgnaHR0cDovL3NlYXJjaHJlY3Rlcm0ua3V3by5jbi9yZWN0ZXJtLnM/ZW5jb2Rpbmc9dXRmOCZ2ZXJzaW9uPTEnKSkuY29udGVudC5tYXAoXyA9PiBzcmVjLnB1c2goXy5xdWVyeV93b3JkKSk7XFxuICAgICAgICBzcmVjID0gc3JlYy5maWx0ZXIoKGEsIGIsIGMpID0+IGMuaW5kZXhPZihhKSA9PT0gYiAmJiBhLnRyaW0oKSAhPT0gXFxcIlxcXCIpO1xcbiAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcImt3X3NyZWNcXFwiLCBzcmVjKTtcXG4gICAgfVxcbiAgICBkID0gZC5jb25jYXQoUmVzb3UoaWQsIHNfcGxhdGZvcm0sICdrdycsIHNyZWMpKTtcXG59XFxuXFxuTVlfUEFHRSA9PSAxID8gc2V0UHJlUmVzdWx0KGQpIDogc2V0UmVzdWx0KGQpO1xcbmRlbGV0ZUl0ZW1CeUNscygnbG9hZGluZ19naWYnKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuKdt3d5XCIsXCJwYXRoXCI6XCJ3eVwiLFwicnVsZVwiOlwiZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvbGliP3J1bGU95q2M6K+N6YCC6YWNJykpLnJ1bGUpO1xcbmNvbnN0IHRoaXNfcGxhdGZvcm0gPSBcXFwid3lcXFwiO1xcbiQuZXhwb3J0cyA9IHtcXG4gICAgaVRhZzogZnVuY3Rpb24ocnVuKSB7XFxuICAgICAgICBpVGFnW1xcXCLmjqjojZBcXFwiXSA9IHt9O1xcbiAgICAgICAgaVRhZ1tcXFwi5o6o6I2QXFxcIl1bXFxcIuaOqOiNkFxcXCJdID0gXFxcInBlcnNvbmFsaXplZD9cXFwiO1xcbiAgICAgICAgaVRhZ1tcXFwi5o6o6I2QXFxcIl1bXFxcIuacgOaWsFxcXCJdID0gXFxcIlxcXCI7XFxuICAgICAgICBpVGFnW1xcXCLmjqjojZBcXFwiXVtcXFwi5a6Y5pa5XFxcIl0gPSBcXFwi5a6Y5pa5XFxcIjtcXG4gICAgICAgIEFyciA9IFtcXFwi6K+t56eNXFxcIiwgXFxcIumjjuagvFxcXCIsIFxcXCLlnLrmma9cXFwiLCBcXFwi5oOF5oSfXFxcIiwgXFxcIuS4u+mimFxcXCJdO1xcbiAgICAgICAgZm9yIChrZXkgb2YgQXJyKSBpVGFnW2tleV0gPSB7fTtcXG4gICAgICAgICQucmVxdWlyZSgnd3k/cnVsZT3mrYzor43pgILphY0nKS5hamF4KFxcXCJwbGF5bGlzdC9jYXRsaXN0XFxcIikuc3ViLm1hcChfID0+XFxuICAgICAgICAgICAgaVRhZ1tBcnJbXy5jYXRlZ29yeV1dW18ubmFtZV0gPSBfLm5hbWVcXG4gICAgICAgICk7XFxuICAgICAgICBpVGFnW1xcXCLmjpLooYxcXFwiXSA9IHt9O1xcbiAgICAgICAgaWYgKHJ1bikgcmV0dXJuIHRydWU7XFxuICAgICAgICBpVGFnW1xcXCLmjpLooYxcXFwiXVtcXFwi5YWo6YOoXFxcIl0gPSAkLnJlcXVpcmUoJ3d5P3J1bGU95q2M6K+N6YCC6YWNJykuYWpheChcXFwidG9wbGlzdD9cXFwiKS5saXN0Lm1hcChfID0+IEV4dHJhKHtcXG4gICAgICAgICAgICB0aXRsZTogXy5uYW1lLFxcbiAgICAgICAgICAgIGltZzogXy5jb3ZlckltZ1VybCxcXG4gICAgICAgICAgICBjb250ZW50OiAzLFxcbiAgICAgICAgICAgIHp5aWQ6IF8uaWRcXG4gICAgICAgIH0sIDEsIDEpKTtcXG4gICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKFxcXCJ3eV9pVGFnXFxcIiwgaVRhZyk7XFxuICAgIH0sXFxuICAgIGxhenk6IGZ1bmN0aW9uKHBsYXRmb3JtLCB0MSwgdDIpIHtcXG4gICAgICAgIHN3aXRjaCAoU3RyaW5nKHBsYXRmb3JtKSkge1xcbiAgICAgICAgICAgIGNhc2UgJzAnOiAvLyDor6bmg4VcXG4gICAgICAgICAgICAgICAgXyA9ICQucmVxdWlyZShcXFwid3k/cnVsZT3mrYzor43pgILphY1cXFwiKS5hamF4MihcXFwiaHR0cHM6Ly9tdXNpYy4xNjMuY29tL3dlYXBpL3YzL3NvbmcvZGV0YWlsXFxcIiwge1xcbiAgICAgICAgICAgICAgICAgICAgYzogYFt7XFxcImlkXFxcIjoke3QxfX1dYFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgYSA9IF8uc29uZ3NbMF07XFxuICAgICAgICAgICAgICAgIG5hbWUgPSBhLm5hbWU7XFxuICAgICAgICAgICAgICAgIGFydGlzdCA9IGEuYXIubWFwKF8gPT4gXy5uYW1lKS5qb2luKFxcXCImXFxcIik7XFxuICAgICAgICAgICAgICAgIGlmICh0Mikge1xcbiAgICAgICAgICAgICAgICAgICAgYXJyID0gW3RzWzFdICsgU2l6ZShhLmwgPyBhLmwuc2l6ZSA6IGEubS5zaXplKV07XFxuICAgICAgICAgICAgICAgICAgICBpZiAoYS5oKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKHRzWzJdICsgU2l6ZShhLmguc2l6ZSkpO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGEuc3EpXFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2godHNbM10gKyBTaXplKGEuc3Euc2l6ZSkpO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGEuaHIpXFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2godHNbNF0gKyBTaXplKGEuaHIuc2l6ZSkpO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdldE15VmFyKCd3eWp4X3pxJykgPT0gJzEnKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyMiA9IFtcXFwi6auY5riF546v57uVXFxcIiwgXFxcIuayiea1uOeOr+e7lVxcXCIsIFxcXCLotoXmuIXmr43luKZcXFwiXS5tYXAodCA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBcXFwi44CQXFxcIiArIHQgKyBcXFwi44CR5peg5rOV6K6h566XXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaCh0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyMiA9IFtcXFwi5rKh5pyJ5q+N5bim6Kej5p6QXFxcIl07XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChhcnIsIDEsICfpgInmi6nkuIvovb3pn7PotKgnKS5zZWxlY3QoKGFyciwgYXJyMiwgdDEsIG5hbWUsIGFydGlzdCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBhcnIyLmluZGV4T2YoaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpICE9IC0xKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0gNDtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gYXJyLmluZGV4T2YoaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSAkLnJlcXVpcmUoXFxcImppZXhpP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuR2V0TXVzaWNVcmwoXFxcImRvd25cXFwiLCBcXFwid3lcXFwiLCB0MSwgaSwgbmFtZSwgYXJ0aXN0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXJsLm1hdGNoKFxcXCJ0b2FzdDovL1xcXCIpKSByZXR1cm4gdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnZG93bmxvYWQ6Ly8nICsgdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgYXJyLCBhcnIyLCBhLmlkLCBuYW1lLCBhcnRpc3QpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIC8vIOatjOivjVxcbiAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgbHJjID0gJC5yZXF1aXJlKFxcXCJ3eT9ydWxlPeatjOivjemAgumFjVxcXCIpLmFqYXgyKFxcXCJodHRwczovL211c2ljLjE2My5jb20vd2VhcGkvc29uZy9seXJpY1xcXCIsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogdDEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgbHY6IC0xLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGt2OiAtMSxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0djogLTFcXG4gICAgICAgICAgICAgICAgICAgIH0pLmxyYy5seXJpYztcXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XFxuICAgICAgICAgICAgICAgICAgICBscmMgPSBcXFwiXFxcIlxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmICgoYS5mZWUgPT0gMCB8fCBhLmZlZSA9PSA4KSAmJiAoXy5wcml2aWxlZ2VzWzBdLnN0ID4gLTEpKVxcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gYGh0dHA6Ly9tdXNpYy4xNjMuY29tL3NvbmcvbWVkaWEvb3V0ZXIvdXJsP2lkPSR7dDF9Lm1wM2A7XFxuICAgICAgICAgICAgICAgIGVsc2VcXG4gICAgICAgICAgICAgICAgICAgIHVybCA9ICQucmVxdWlyZShcXFwiamlleGk/cnVsZT3mrYzor43pgILphY1cXFwiKS5HZXRNdXNpY1VybChcXFwib3BlblxcXCIsIFxcXCJ3eVxcXCIsIHQxLCAwLCBuYW1lLCBhcnRpc3QpO1xcbiAgICAgICAgICAgICAgICBpZiAodXJsLm1hdGNoKFxcXCJ0b2FzdDovL1xcXCIpKSByZXR1cm4gdXJsO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICAgICAgdXJsczogW3VybCArIFxcXCIjaXNNdXNpYz10cnVlI1xcXCJdLFxcbiAgICAgICAgICAgICAgICAgICAgbHlyaWM6IGxyY1xcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgY2FzZSAnMSc6IC8v6aaW6aG1XFxuICAgICAgICAgICAgICAgIGlmICghdDEubWF0Y2goL1xcXFw/LykpIHQxID0gXFxcInRvcC9wbGF5bGlzdD9jYXQ9XFxcIiArIHQxICsgXFxcIiZcXFwiO1xcbiAgICAgICAgICAgICAgICBfID0gJC5yZXF1aXJlKCd3eT9ydWxlPeatjOivjemAgumFjScpLmFqYXgodDEpO1xcbiAgICAgICAgICAgICAgICAoXy5yZXN1bHQgfHwgXy5wbGF5bGlzdHMpLm1hcChfID0+IEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfLm5hbWUsXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IF8uY292ZXJJbWdVcmwgfHwgXy5waWNVcmwsXFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAyLFxcbiAgICAgICAgICAgICAgICAgICAgenlpZDogXy5pZFxcbiAgICAgICAgICAgICAgICB9LCAxKSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBjYXNlICcyJzogLy8g5Y+R546wXFxuICAgICAgICAgICAgY2FzZSAnMyc6IC8vIOaOkuihjFxcbiAgICAgICAgICAgICAgICBpZiAoTVlfUEFHRSA9PSAxKVxcbiAgICAgICAgICAgICAgICAgICAgXyA9ICQucmVxdWlyZShcXFwid3k/cnVsZT3mrYzor43pgILphY1cXFwiKS5hamF4KFxcXCJodHRwczovL211c2ljLjE2My5jb20vYXBpL3Y2L3BsYXlsaXN0L2RldGFpbD9saW1pdD05OTk5OSZpZD1cXFwiICsgdDEgKyBcXFwiJm49OTk5OTlcXFwiKS5wbGF5bGlzdC50cmFja3M7XFxuICAgICAgICAgICAgICAgIGVsc2VcXG4gICAgICAgICAgICAgICAgICAgIF8gPSBbXTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICB9XFxuICAgICAgICBkID0gW107XFxuICAgICAgICBfLm1hcChfID0+IEV4dHJhKHtcXG4gICAgICAgICAgICB0aXRsZTogXy5uYW1lICsgJyAtICcgKyBfLmFyLm1hcChfID0+IF8ubmFtZSkuam9pbignJicpLFxcbiAgICAgICAgICAgIGltZzogXy5hbC5waWNVcmwsXFxuICAgICAgICAgICAgY29udGVudDogKChfLmZlZSA9PSAwIHx8IF8uZmVlID09IDgpICYmIChfLnByaXZpbGVnZSA/IChfLnByaXZpbGVnZS5zdCA+IC0xKSA6IDEpKSA/IDAgOiAxLFxcbiAgICAgICAgICAgIHp5aWQ6IF8uaWRcXG4gICAgICAgIH0sIDEpKTtcXG4gICAgICAgIHNldFJlc3VsdChkKTtcXG4gICAgfSxcXG4gICAgc2VhcmNoOiBmdW5jdGlvbihwbGF0Zm9ybSwga2V5d29yZCwgaXNVLCBydW4pIHtcXG4gICAgICAgIGlmIChpc1UgIT0gXFxcInVybFxcXCIpIHtcXG4gICAgICAgICAgICBfXyA9IHtcXG4gICAgICAgICAgICAgICAgbGliOiAoXykgPT4gdHJ1ZSxcXG4gICAgICAgICAgICAgICAgcGFpZDogKF8pID0+ICgoXy5mZWUgPT0gMCB8fCBfLmZlZSA9PSA4KSAmJiAoXy5wcml2aWxlZ2UgPyAoXy5wcml2aWxlZ2Uuc3QgPiAtMSkgOiAxKSkgPyAwIDogMSxcXG4gICAgICAgICAgICAgICAgZnJlZTogKF8pID0+ICgoXy5mZWUgPT0gMCB8fCBfLmZlZSA9PSA4KSAmJiAoXy5wcml2aWxlZ2UgPyAoXy5wcml2aWxlZ2Uuc3QgPiAtMSkgOiAxKSkgPyAxIDogMFxcbiAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgc3VybCA9IChzdHlwZSkgPT4gJC5yZXF1aXJlKFxcXCJ3eT9ydWxlPeatjOivjemAgumFjVxcXCIpLmFqYXgyKFxcXCJodHRwczovL2ludGVyZmFjZS5tdXNpYy4xNjMuY29tL3dlYXBpL3NlYXJjaC9nZXRcXFwiLCB7XFxuICAgICAgICAgICAgICAgIHM6IGtleXdvcmQsXFxuICAgICAgICAgICAgICAgIGxpbWl0OiAzMCxcXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiAoTVlfUEFHRSAtIDEpICogMzAsXFxuICAgICAgICAgICAgICAgIHR5cGU6IHN0eXBlLFxcbiAgICAgICAgICAgICAgICBzdHJhdGVneTogNSxcXG4gICAgICAgICAgICAgICAgcXVlcnlDb3JyZWN0OiB0cnVlXFxuICAgICAgICAgICAgfSkucmVzdWx0O1xcbiAgICAgICAgICAgIHN3aXRjaCAoU3RyaW5nKHBsYXRmb3JtKSkge1xcbiAgICAgICAgICAgICAgICBjYXNlICcwJzogLy8g5pCc57Si5Y2V5puyXFxuICAgICAgICAgICAgICAgICAgICBzdXJsKDEpLnNvbmdzLm1hcChfID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX19baXNVXShfKSkgRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXy5uYW1lICsgJyAtICcgKyBfLmFyLm1hcChfID0+IF8ubmFtZSkuam9pbignJicpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IF8uYWwucGljVXJsLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAoKF8uZmVlID09IDAgfHwgXy5mZWUgPT0gOCkgJiYgKF8ucHJpdmlsZWdlID8gKF8ucHJpdmlsZWdlLnN0ID4gLTEpIDogMSkpID8gMCA6IDEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IF8uaWRcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAxKTtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIGNhc2UgJzEnOiAvLyDmkJzntKLmrYzljZVcXG4gICAgICAgICAgICAgICAgICAgIGxpc3QgPSBzdXJsKDEwMDApLnBsYXlsaXN0cztcXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1UgPT09IDEpIHJldHVybiBsaXN0O1xcbiAgICAgICAgICAgICAgICAgICAgbGlzdC5tYXAoXyA9PiBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8ubmFtZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IF8uY292ZXJJbWdVcmwsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogMixcXG4gICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiBfLmlkXFxuICAgICAgICAgICAgICAgICAgICB9LCAxKSk7XFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGVsc2UgeyAvLyDmkJzntKIg5YiG5Lqr6ZO+5o6lXFxuICAgICAgICAgICAgc3dpdGNoIChTdHJpbmcocGxhdGZvcm0pKSB7XFxuICAgICAgICAgICAgICAgIGNhc2UgJzAnOiAvLyDmkJzntKLljZXmm7JcXG4gICAgICAgICAgICAgICAgICAgIF8gPSAkLnJlcXVpcmUoXFxcInd5P3J1bGU95q2M6K+N6YCC6YWNXFxcIikuYWpheDIoXFxcImh0dHBzOi8vbXVzaWMuMTYzLmNvbS93ZWFwaS92My9zb25nL2RldGFpbFxcXCIsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjOiBgW3tcXFwiaWRcXFwiOiR7a2V5d29yZH19XWBcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgYSA9IF8uc29uZ3NbMF07XFxuICAgICAgICAgICAgICAgICAgICBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGEubmFtZSArICcgLSAnICsgYS5hci5tYXAoXyA9PiBfLm5hbWUpLmpvaW4oJyYnKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IGEuYWwucGljVXJsLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICgoYS5mZWUgPT0gMCB8fCBhLmZlZSA9PSA4KSAmJiAoXy5wcml2aWxlZ2VzWzBdLnN0ID4gLTEpKSA/IDAgOiAxLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IGEuaWRcXG4gICAgICAgICAgICAgICAgICAgIH0sIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIGNhc2UgJzEnOiAvLyDmkJzntKLmrYzljZVcXG4gICAgICAgICAgICAgICAgICAgIF8gPSAkLnJlcXVpcmUoXFxcInd5P3J1bGU95q2M6K+N6YCC6YWNXFxcIikuYWpheChcXFwiaHR0cHM6Ly9tdXNpYy4xNjMuY29tL2FwaS92Ni9wbGF5bGlzdC9kZXRhaWw/aWQ9XFxcIiArIGtleXdvcmQpLnBsYXlsaXN0O1xcbiAgICAgICAgICAgICAgICAgICAgRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfLm5hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBfLmNvdmVySW1nVXJsLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IDIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogXy5pZFxcbiAgICAgICAgICAgICAgICAgICAgfSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8ubmFtZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IF8uY292ZXJJbWdVcmwsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogMixcXG4gICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiBfLmlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICdteSdcXG4gICAgICAgICAgICAgICAgICAgIH0sIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICBhamF4OiBmdW5jdGlvbih1cmkpIHtcXG4gICAgICAgIGlmICghdXJpLm1hdGNoKC9odHRwcz86XFxcXC9cXFxcLy8pKSB7XFxuICAgICAgICAgICAgaWYgKHVyaS5tYXRjaCgvXFxcXD8vKSkgdXJpICs9IFxcXCJsaW1pdD0zMCZvZmZzZXQ9XFxcIiArICgoTVlfUEFHRSAtIDEpICogMzApO1xcbiAgICAgICAgICAgIHVybCA9IFxcXCJodHRwczovL3BsLWZlLmNuL2Nsb3VkLW11c2ljLWFwaS9cXFwiICsgdXJpO1xcbiAgICAgICAgfSBlbHNlIHVybCA9IHVyaTtcXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGZldGNoKHVybCwge1xcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBcXFwiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV09XNjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMDIuMC4wLjAgU2FmYXJpLzUzNy4zNlxcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBcXFwib3M9cGM7IE1VU0lDX1U9MDBCNEMxRTNGRDc3NDEwNzgwRUYxQzA4NDBEMDhGM0Y1RTcwMzBFMkQwNTJDQThFQzk4QTczNjhGN0E3RjY2NDlCMjE2RTk1MzNBMUExNzRENzJDQ0FERjk5NTU0MjI4RTg1MkRFNDZCQkQyRUEyQTZCMkExNDMzQTNERjQ4QjYyRUFBNzZGQzE4Q0Q1OTI1NkZFRjZFNzZEMzlGQjQyREY3NkNFNTA2OEM2OUUzOTQ0RTNBNkU4RTNDMjYxMzVEQkUwRDk3OTFGQ0UwQkQ1MjRCRDI3RjYyMjZGRDY0NjBCMDU2NDZBNTQ5QTVDNDI5RjVFMDFFQkE0RTJEOEQ2MTVCRDcxNUE3RDI0NUIxM0Q5RTU3MEU4N0QwQURBNjA4QTYwN0YyRkFFRjIyQUY4RUU5NEY4MjdBRjE1MEU5RTFDNTE3Q0IwRjE1ODhFRjhGMUQ2MTk0N0M0Mzc4NDk4NUNGNzRGNjk0NTg3NDg5NjBDRTkyMDUzQ0E3MkI1RkVGOTJDOTNGMTJGMzY3MTRGMEIzNDZDMkVBRjg5RkFBNTE2QTg5NzRFOENGNTNENTQ5MkRFOTVFRDg1OTFDQ0NGNDVBRUI2MjdDOTNCMENEMzcwQUVGQjY1NkVBREFEMDMxRjY4OEE2QkIyQ0UzQzlGQTMxQkQ2MTY2QTE2QUJFQkVEQURGQ0ZFRkJEQ0VENUQ0RTEyRkZGMTQwM0M0RjJCNUEzRjI0MjJFRjlEMDg3OEMwQjUyRDA4OTY3RDU4RTJFOURBQ0U3NTQ0MDRFMkQ2RTFGODFGNTJBMUYxNzM1Q0E5RkJCODVENzU4RjgxRTBBN0NCQTQxQzU3MzlEMjlFMjg0RjY4NDMwRUIxM0U0RjQ5Mzg5MDg0MDAzMUQzQkQyN0VcXFwiXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSkpO1xcbiAgICB9LFxcbiAgICBhamF4MjogZnVuY3Rpb24odXJsLCBqc29uKSB7XFxuICAgICAgICBldmFsKGdldENyeXB0b0pTKCkpO1xcbiAgICAgICAgc3RyX2tleSA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKFxcXCIwQ29KVW02UXl3OFc4anVkXFxcIik7XFxuICAgICAgICBzdHJfaXYgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShcXFwiMDEwMjAzMDQwNTA2MDcwOFxcXCIpO1xcbiAgICAgICAgYWVzID0gd29yZCA9PiBDcnlwdG9KUy5BRVMuZW5jcnlwdCh3b3JkLCBzdHJfa2V5LCB7XFxuICAgICAgICAgICAgaXY6IHN0cl9pdixcXG4gICAgICAgICAgICBtb2RlOiBDcnlwdG9KUy5tb2RlLkNCQyxcXG4gICAgICAgICAgICBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczdcXG4gICAgICAgIH0pLnRvU3RyaW5nKCk7XFxuICAgICAgICBwYXJhbXMgPSBhZXMoYWVzKEpTT04uc3RyaW5naWZ5KGpzb24pKSk7XFxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShmZXRjaFBDKHVybCwge1xcbiAgICAgICAgICAgIGJvZHk6IGBwYXJhbXM9JHtwYXJhbXN9JmVuY1NlY0tleT1iZjUwZDBiY2Y1NjgzM2IwNmQ4ZDEyMTk0OTZhNDUyYTFkODYwZmQ1OGExNGMwYWFmYmEzZTc3MDEwNGNhNzdkYzY4NTZjYjMxMGVkMzMwOTAzOWU2ODY1MDgxYmU0ZGRjMmRmNTI2NjMzNzNiMjBiNzBhYzI1YjRkMGM2Y2E0NjZkYWVmNmI1MDE3NGU5MzUzNmUyZDU4MGM0OWU3MDY0OWFkMTkzNjU4NDg5OWU4NTcyMmViODNjZWRkZmI0ZjU2YzExNzJmY2E1ZTYwNTkyZDBlNmVlM2U4ZTAyYmUxZmU2ZTUzZjI4NWIwMzg5MTYyZDhlNmRkYzU1Mzg1N2NkYCxcXG4gICAgICAgICAgICBcXFwibWV0aG9kXFxcIjogXFxcIlBPU1RcXFwiXFxuICAgICAgICB9KSk7XFxuICAgIH1cXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLinbhrZ1wiLFwicGF0aFwiOlwia2dcIixcInJ1bGVcIjpcImV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL2xpYj9ydWxlPeatjOivjemAgumFjScpKS5ydWxlKTtcXG5jb25zdCB0aGlzX3BsYXRmb3JtID0gXFxcImtnXFxcIjtcXG4kLmV4cG9ydHMgPSB7XFxuXFxuXFxuICAgIGlUYWc6IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgXyA9IEpTT04ucGFyc2UoZmV0Y2goXFxcImh0dHA6Ly93d3cyLmt1Z291Lmt1Z291LmNvbS95dWVrdS92OS9zcGVjaWFsL2dldFNwZWNpYWw/aXNfc21hcnR5PTFcXFwiKSkuZGF0YTtcXG4gICAgICAgIGlUYWdbXFxcIuaOqOiNkFxcXCJdID0ge1xcbiAgICAgICAgICAgIOacgOaWsDogXFxcIlxcXCJcXG4gICAgICAgIH07XFxuICAgICAgICBpdHMgPSBfLmhvdFRhZy5kYXRhO1xcbiAgICAgICAgZm9yIChpIGluIGl0cykge1xcbiAgICAgICAgICAgIGl0ID0gaXRzW2ldO1xcbiAgICAgICAgICAgIGlUYWdbXFxcIuaOqOiNkFxcXCJdW2l0LnNwZWNpYWxfbmFtZV0gPSBpdC5zcGVjaWFsX2lkO1xcbiAgICAgICAgfVxcbiAgICAgICAgXyA9IF8udGFnaWRzO1xcbiAgICAgICAgZm9yIChuYW1lIGluIF8pIHtcXG4gICAgICAgICAgICBpVGFnW25hbWVdID0ge307XFxuICAgICAgICAgICAgX1tuYW1lXS5kYXRhLm1hcChcXG4gICAgICAgICAgICAgICAgXyA9PiBpVGFnW25hbWVdW18ubmFtZV0gPSBfLmlkXFxuICAgICAgICAgICAgKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlUYWdbXFxcIuaOkuihjFxcXCJdID0ge307XFxuICAgICAgICBKU09OLnBhcnNlKGZldGNoKCdodHRwOi8vbW9iaWxlY2RuYmoua3Vnb3UuY29tL2FwaS92My9yYW5rL2xpc3QnKSkuZGF0YS5pbmZvLm1hcChfID0+IHtcXG4gICAgICAgICAgICBuYW1lID0gW251bGwsIFxcXCLmjqjojZDmppxcXFwiLCBcXFwi5paw5q2M5qacXFxcIiwgXFxcIueJueiJsuamnFxcXCIsIFxcXCLlhajnkIPmppxcXFwiLCBcXFwi5puy6aOO5qacXFxcIl1bXy5jbGFzc2lmeV07XFxuICAgICAgICAgICAgaWYgKCFpVGFnW1xcXCLmjpLooYxcXFwiXVtuYW1lXSkgaVRhZ1tcXFwi5o6S6KGMXFxcIl1bbmFtZV0gPSBbXTtcXG4gICAgICAgICAgICBpVGFnW1xcXCLmjpLooYxcXFwiXVtuYW1lXS5wdXNoKEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IF8ucmFua25hbWUsXFxuICAgICAgICAgICAgICAgIGltZzogXy5pbWd1cmwsXFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IDMsXFxuICAgICAgICAgICAgICAgIHp5aWQ6IF8ucmFua2lkLFxcbiAgICAgICAgICAgIH0sIDEsIDEpKTtcXG4gICAgICAgIH0pO1xcbiAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcImtnX2lUYWdcXFwiLCBpVGFnKTtcXG4gICAgfSxcXG5cXG5cXG5cXG4gICAgbGF6eTogZnVuY3Rpb24ocGxhdGZvcm0sIHQxLCB0Mikge1xcbiAgICAgICAgc3dpdGNoIChTdHJpbmcocGxhdGZvcm0pKSB7XFxuICAgICAgICAgICAgY2FzZSAnMCc6IC8vIOivpuaDhVxcbiAgICAgICAgICAgICAgICBfID0gJC5yZXF1aXJlKFxcXCJrZz9ydWxlPeatjOivjemAgumFjVxcXCIpLmFqYXgoW3tcXG4gICAgICAgICAgICAgICAgICAgIGhhc2g6IHQxXFxuICAgICAgICAgICAgICAgIH1dKVswXTtcXG4gICAgICAgICAgICAgICAgW2FydGlzdCwgbmFtZV0gPSBfLm5hbWUuc3BsaXQoJyAtICcpO1xcbiAgICAgICAgICAgICAgICBpZiAodDIpIHtcXG4gICAgICAgICAgICAgICAgICAgIGFyciA9IF8ucmVsYXRlX2dvb2RzLm1hcCgoXywgaSkgPT4gdHNbaSArIDFdICsgU2l6ZShfLmluZm8uZmlsZXNpemUpKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKGFyciwgMSwgJ+mAieaLqeS4i+i9vemfs+i0qCcpLnNlbGVjdCgoYXJyLCB0MSwgbmFtZSwgYXJ0aXN0KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGFyci5pbmRleE9mKGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSAkLnJlcXVpcmUoXFxcImppZXhpP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuR2V0TXVzaWNVcmwoXFxcImRvd25cXFwiLCBcXFwia2dcXFwiLCB0MSwgaSwgbmFtZSwgYXJ0aXN0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXJsLm1hdGNoKFxcXCJ0b2FzdDovL1xcXCIpKSByZXR1cm4gdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnZG93bmxvYWQ6Ly8nICsgdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgYXJyLCB0MSwgbmFtZSwgYXJ0aXN0KTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB1cmwgPSBgaHR0cHM6Ly93d3dhcGkua3Vnb3UuY29tL3l5L2luZGV4LnBocD9yPXBsYXklMkZnZXRkYXRhJmhhc2g9JHt0MX0mYWxidW1faWQ9JHtfLnJlY29tbWVuZF9hbGJ1bV9pZH0mbWlkPSR7UigzMil9JnBsYXRpZD00YDtcXG4gICAgICAgICAgICAgICAgXyA9IEpTT04ucGFyc2UoZmV0Y2godXJsKSkuZGF0YTtcXG4gICAgICAgICAgICAgICAgbHJjID0gXy5seXJpY3M7XFxuICAgICAgICAgICAgICAgIGlmIChfLnByaXZpbGVnZSA9PSAwIHx8IF8ucHJpdmlsZWdlID09IDgpXFxuICAgICAgICAgICAgICAgICAgICB1cmwgPSBfLnBsYXlfdXJsIHx8IF8ucGxheV9iYWNrdXBfdXJsO1xcbiAgICAgICAgICAgICAgICBlbHNlXFxuICAgICAgICAgICAgICAgICAgICB1cmwgPSAkLnJlcXVpcmUoXFxcImppZXhpP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuR2V0TXVzaWNVcmwoXFxcIm9wZW5cXFwiLCBcXFwia2dcXFwiLCB0MSwgMCwgbmFtZSwgYXJ0aXN0KTtcXG4gICAgICAgICAgICAgICAgaWYgKHVybC5tYXRjaChcXFwidG9hc3Q6Ly9cXFwiKSkgcmV0dXJuIHVybDtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgIHVybHM6IFt1cmwgKyAnI2lzTXVzaWM9dHJ1ZSMnXSxcXG4gICAgICAgICAgICAgICAgICAgIGx5cmljOiBscmNcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIGNhc2UgJzEnOiAvLyDpppbpobVcXG4gICAgICAgICAgICAgICAgdXJsID0gXFxcImh0dHA6Ly93d3cyLmt1Z291Lmt1Z291LmNvbS95dWVrdS92OS9zcGVjaWFsL2dldFNwZWNpYWw/aXNfYWpheD0xJmNkbj1jZG4mdD01JnBhZ2VzaXplPTMwJmM9XFxcIiArIHQxICsgXFxcIiZwPVxcXCIgKyBNWV9QQUdFO1xcbiAgICAgICAgICAgICAgICBKU09OLnBhcnNlKGZldGNoKHVybCkpLnNwZWNpYWxfZGIubWFwKF8gPT4gRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8uc3BlY2lhbG5hbWUsXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IF8uaW1nLFxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogMixcXG4gICAgICAgICAgICAgICAgICAgIHp5aWQ6IF8uc3BlY2lhbGlkXFxuICAgICAgICAgICAgICAgIH0sIDEpKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIGNhc2UgJzInOiAvLyDlj5HnjrBcXG4gICAgICAgICAgICAgICAgaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgXyA9IGV4ZWN1dGVXZWJSdWxlKGBodHRwOi8vd3d3Mi5rdWdvdS5rdWdvdS5jb20veXVla3Uvdjkvc3BlY2lhbC9zaW5nbGUvJHt0MX0tNS05OTk5OS5odG1sP2pzb249dHJ1ZWAsICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShnbG9iYWwuZGF0YSk7XFxuICAgICAgICAgICAgICAgICAgICB9KSwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrUnVsZXM6IFsnLmpzJywgJy5jc3MnLCAnLmpwZycsICcucG5nJywgJy5naWYnLCAnLnN2ZycsICcuaWNvJ11cXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgXyA9ICQucmVxdWlyZShcXFwia2c/cnVsZT3mrYzor43pgILphY1cXFwiKS5hamF4KEpTT04ucGFyc2UoXykpO1xcbiAgICAgICAgICAgICAgICB9IGVsc2UgXyA9IFtdO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBjYXNlICczJzogLy8g5o6S6KGMXFxuICAgICAgICAgICAgICAgIF8gPSBKU09OLnBhcnNlKGZldGNoKGBodHRwOi8vbW9iaWxlY2RuYmoua3Vnb3UuY29tL2FwaS92My9yYW5rL3Nvbmc/cGFnZXNpemU9MzAmcGFnZT0ke01ZX1BBR0V9JnJhbmtpZD0ke3QxfWApKS5kYXRhLmluZm87XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgfVxcbiAgICAgICAgZCA9IFtdO1xcbiAgICAgICAgXy5tYXAoXyA9PiBFeHRyYSh7XFxuICAgICAgICAgICAgdGl0bGU6IChfLmZpbGVuYW1lIHx8IF8ubmFtZSkuc3BsaXQoJyAtICcpLnJldmVyc2UoKS5qb2luKCcgLSAnKSxcXG4gICAgICAgICAgICBpbWc6IF8uYWxidW1fc2l6YWJsZV9jb3ZlciB8fCBfLmluZm8uaW1hZ2UsXFxuICAgICAgICAgICAgY29udGVudDogKF8ucHJpdmlsZWdlID09IDAgfHwgXy5wcml2aWxlZ2UgPT0gOCkgPyAwIDogMSxcXG4gICAgICAgICAgICB6eWlkOiBfLmhhc2hcXG4gICAgICAgIH0sIDEpKTtcXG4gICAgICAgIHNldFJlc3VsdChkKTtcXG4gICAgfSxcXG5cXG5cXG5cXG4gICAgc2VhcmNoOiBmdW5jdGlvbihwbGF0Zm9ybSwga2V5d29yZCwgaXNVKSB7XFxuICAgICAgICBfXyA9IHtcXG4gICAgICAgICAgICBsaWI6IChfKSA9PiB0cnVlLFxcbiAgICAgICAgICAgIHBhaWQ6IChfKSA9PiAoXy5wcml2aWxlZ2UgIT0gMCAmJiBfLnByaXZpbGVnZSAhPSA4KSxcXG4gICAgICAgICAgICBmcmVlOiAoXykgPT4gKF8ucHJpdmlsZWdlID09IDAgfHwgXy5wcml2aWxlZ2UgPT0gOClcXG4gICAgICAgIH07XFxuICAgICAgICBzdXJsID0gKHN0eXBlKSA9PiBKU09OLnBhcnNlKGZldGNoKGBodHRwOi8vbW9iaWxlY2RuLmt1Z291LmNvbS9hcGkvdjMvc2VhcmNoLyR7c3R5cGV9P2Zvcm1hdD1qc29uJmtleXdvcmQ9JHtrZXl3b3JkfSZwYWdlPSR7TVlfUEFHRX0mcGFnZXNpemU9MzBgKSkuZGF0YS5pbmZvO1xcbiAgICAgICAgc3dpdGNoIChTdHJpbmcocGxhdGZvcm0pKSB7XFxuICAgICAgICAgICAgY2FzZSAnMCc6IC8vIOaQnOe0ouWNleabslxcbiAgICAgICAgICAgICAgICBpZiAoaXNVID09ICdmcmVlJykge1xcbiAgICAgICAgICAgICAgICAgICAgbWlkID0gUigzMik7XFxuICAgICAgICAgICAgICAgICAgICBhcnIgPSBbXFxcInNyY2FwcGlkPTI5MTlcXFwiLCBcXFwiY2xpZW50dmVyPTEwMDBcXFwiLCBcXFwiY2xpZW50dGltZT1cXFwiICsgbmV3IERhdGUoKS5nZXRUaW1lKCksIFxcXCJtaWQ9XFxcIiArIG1pZCwgXFxcInV1aWQ9XFxcIiArIG1pZCwgXFxcImRmaWQ9LVxcXCIsIFxcXCJhcHBpZD0xMDU4XFxcIiwgXFxcInRva2VuPVxcXCIsIFxcXCJ1c2VyaWQ9MFxcXCIsIFxcXCJrZXl3b3JkPVxcXCIgKyBrZXl3b3JkLCBcXFwicGFnZT1cXFwiICsgTVlfUEFHRSwgXFxcInBhZ2VzaXplPTMwXFxcIl0uc29ydCgpO1xcbiAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlID0gXFxcIk5WUGg1b283MTV6NURJV0FlUWxoTURzV1hYUVY0aHd0XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSA9IG1kNShzaWduYXR1cmUgKyBhcnIuam9pbihcXFwiXFxcIikgKyBzaWduYXR1cmUpO1xcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gXFxcImh0dHBzOi8vZ2F0ZXdheS5rdWdvdS5jb20vY29tcGxleHNlYXJjaC92My9zZWFyY2gvc29uZz9cXFwiICsgYXJyLmpvaW4oXFxcIiZcXFwiKSArIFxcXCImc2lnbmF0dXJlPVxcXCIgKyBzaWduYXR1cmU7XFxuICAgICAgICAgICAgICAgICAgICBsaXN0ID0gSlNPTi5wYXJzZShmZXRjaCh1cmwpKS5kYXRhLmxpc3RzO1xcbiAgICAgICAgICAgICAgICB9IGVsc2UgbGlzdCA9IHN1cmwoJ3NvbmcnKTtcXG4gICAgICAgICAgICAgICAgJC5yZXF1aXJlKFxcXCJrZz9ydWxlPeatjOivjemAgumFjVxcXCIpLmFqYXgobGlzdCkubWFwKF8gPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9fW2lzVV0oXykpIEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogKF8uZmlsZW5hbWUgfHwgXy5uYW1lKS5zcGxpdCgnIC0gJykucmV2ZXJzZSgpLmpvaW4oJyAtICcpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogXy5hbGJ1bV9zaXphYmxlX2NvdmVyIHx8IF8uaW5mby5pbWFnZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAoXy5wcml2aWxlZ2UgPT0gMCB8fCBfLnByaXZpbGVnZSA9PSA4KSA/IDAgOiAxLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IF8uaGFzaFxcbiAgICAgICAgICAgICAgICAgICAgfSwgMSk7XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBjYXNlICcxJzogLy8g5pCc57Si5q2M5Y2VXFxuICAgICAgICAgICAgICAgIHN1cmwoJ3NwZWNpYWwnKS5tYXAoXyA9PiBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXy5zcGVjaWFsbmFtZSxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogXy5pbWd1cmwsXFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAyLFxcbiAgICAgICAgICAgICAgICAgICAgenlpZDogXy5zcGVjaWFsaWRcXG4gICAgICAgICAgICAgICAgfSwgMSkpO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgIH1cXG4gICAgfSxcXG5cXG5cXG4gICAgYWpheDogZnVuY3Rpb24ocmVzb3VyY2UpIHtcXG4gICAgICAgIHJlc291cmNlID0gSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgIFxcXCJyZWxhdGVcXFwiOiAxLFxcbiAgICAgICAgICAgIFxcXCJ1c2VyaWRcXFwiOiBcXFwiMjYyNjQzMTUzNlxcXCIsXFxuICAgICAgICAgICAgXFxcInZpcFxcXCI6IDEsXFxuICAgICAgICAgICAgXFxcInRva2VuXFxcIjogXFxcIlxcXCIsXFxuICAgICAgICAgICAgXFxcImFwcGlkXFxcIjogMTAwMSxcXG4gICAgICAgICAgICBcXFwiYmVoYXZpb3JcXFwiOiBcXFwicGxheVxcXCIsXFxuICAgICAgICAgICAgXFxcImFyZWFfY29kZVxcXCI6IFxcXCIxXFxcIixcXG4gICAgICAgICAgICBcXFwiY2xpZW50dmVyXFxcIjogXFxcIjg5OTBcXFwiLFxcbiAgICAgICAgICAgIFxcXCJuZWVkX2hhc2hfb2Zmc2V0XFxcIjogMSxcXG4gICAgICAgICAgICBcXFwicmVzb3VyY2VcXFwiOiByZXNvdXJjZS5tYXAoXyA9PiAoe1xcbiAgICAgICAgICAgICAgICBcXFwiaWRcXFwiOiAwLFxcbiAgICAgICAgICAgICAgICBcXFwidHlwZVxcXCI6IFxcXCJhdWRpb1xcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCJoYXNoXFxcIjogXy5oYXNoIHx8IF8uRmlsZUhhc2hcXG4gICAgICAgICAgICB9KSlcXG4gICAgICAgIH0pO1xcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZmV0Y2goXFxcImh0dHA6Ly9tZWRpYS5zdG9yZS5rdWdvdS5jb20vdjEvZ2V0X3Jlc19wcml2aWxlZ2VcXFwiLCB7XFxuICAgICAgICAgICAgYm9keTogcmVzb3VyY2UsXFxuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcXG4gICAgICAgIH0pKS5kYXRhO1xcbiAgICB9LFxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuKduWt3XCIsXCJwYXRoXCI6XCJrd1wiLFwicnVsZVwiOlwiZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvbGliP3J1bGU95q2M6K+N6YCC6YWNJykpLnJ1bGUpO1xcbmNvbnN0IHRoaXNfcGxhdGZvcm0gPSBcXFwia3dcXFwiO1xcbmNvbnN0IHBjYXBpID0gXFxcImh0dHBzOi8vd3d3Lmt1d28uY24vYXBpL3d3dy9cXFwiO1xcblxcblxcbiQuZXhwb3J0cyA9IHtcXG4gICAgaVRhZzogZnVuY3Rpb24oKSB7XFxuICAgICAgICBpVGFnW1xcXCLmjqjojZBcXFwiXSA9IHt9O1xcbiAgICAgICAgaVRhZ1tcXFwi5o6o6I2QXFxcIl1bXFxcIuavj+aXpeaOqOiNkFxcXCJdID0gXFxcInJjbS9pbmRleC9wbGF5bGlzdD9pZD1yY21cXFwiO1xcbiAgICAgICAgaVRhZ1tcXFwi5o6o6I2QXFxcIl1bXFxcIuacgOaWsOeyvumAiVxcXCJdID0gXFxcImNsYXNzaWZ5L3BsYXlsaXN0L2dldFJjbVBsYXlMaXN0P29yZGVyPW5ld1xcXCI7XFxuICAgICAgICBpVGFnW1xcXCLmjqjojZBcXFwiXVtcXFwi54Ot6Zeo57K+6YCJXFxcIl0gPSBcXFwiY2xhc3NpZnkvcGxheWxpc3QvZ2V0UmNtUGxheUxpc3Q/b3JkZXI9aG90XFxcIjtcXG4gICAgICAgICQucmVxdWlyZShcXFwia3c/cnVsZT3mrYzor43pgILphY1cXFwiKS5hamF4KHBjYXBpICsgXFxcInBsYXlsaXN0L2dldFRhZ0xpc3Q/XFxcIikubWFwKF8gPT4ge1xcbiAgICAgICAgICAgIGlmIChfLmRhdGEubGVuZ3RoKSB7XFxuICAgICAgICAgICAgICAgIF8ubmFtZSA9IF8ubmFtZS5yZXBsYWNlKCfmtYHmtL4nLCAnJyk7XFxuICAgICAgICAgICAgICAgIGlUYWdbXy5uYW1lXSA9IHt9O1xcbiAgICAgICAgICAgICAgICBfLmRhdGEubWFwKF9fID0+XFxuICAgICAgICAgICAgICAgICAgICBpVGFnW18ubmFtZV1bX18ubmFtZV0gPSBcXFwiY2xhc3NpZnkvcGxheWxpc3QvZ2V0VGFnUGxheUxpc3Q/aWQ9XFxcIiArIF9fLmlkXFxuICAgICAgICAgICAgICAgICk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgICAgICBpVGFnW1xcXCLmjpLooYxcXFwiXSA9IHt9O1xcbiAgICAgICAgJC5yZXF1aXJlKFxcXCJrdz9ydWxlPeatjOivjemAgumFjVxcXCIpLmFqYXgocGNhcGkgKyBcXFwiYmFuZy9iYW5nL2JhbmdNZW51P1xcXCIpLm1hcChfID0+IHtcXG4gICAgICAgICAgICBpVGFnW1xcXCLmjpLooYxcXFwiXVtfLm5hbWVdID0gXy5saXN0Lm1hcChfID0+IEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IF8ubmFtZSxcXG4gICAgICAgICAgICAgICAgaW1nOiBfLnBpYyxcXG4gICAgICAgICAgICAgICAgY29udGVudDogMyxcXG4gICAgICAgICAgICAgICAgenlpZDogXy5zb3VyY2VpZFxcbiAgICAgICAgICAgIH0sIDEsIDEpKTtcXG4gICAgICAgIH0pO1xcbiAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcImt3X2lUYWdcXFwiLCBpVGFnKTtcXG4gICAgfSxcXG5cXG5cXG5cXG4gICAgbGF6eTogZnVuY3Rpb24ocGxhdGZvcm0sIHQxLCB0Mikge1xcbiAgICAgICAgc3dpdGNoIChTdHJpbmcocGxhdGZvcm0pKSB7XFxuICAgICAgICAgICAgY2FzZSAnMCc6IC8vIOatjOabsuivpuaDhVxcbiAgICAgICAgICAgICAgICBpZiAodDIpIHtcXG4gICAgICAgICAgICAgICAgICAgIGFyciA9IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgaSA9IDE7XFxuICAgICAgICAgICAgICAgICAgICBfID0gSlNPTi5wYXJzZShmZXRjaChcXFwiaHR0cDovL2RhdGFjZW50ZXIua3V3by5jbi9kLmM/Y21rZXk9cGxpc3RfcGwyMDEyJmZ0PW11c2ljJnJlc2VuYz11dGY4Jmlkcz1cXFwiICsgdDEpKVswXTtcXG4gICAgICAgICAgICAgICAgICAgIG4gPSBfLk5fTUlORk87XFxuICAgICAgICAgICAgICAgICAgICBmb3IgKGsgb2YgWzEyOCwgMzIwLCAyMDAwLCA0MDAwXSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZyA9IG5ldyBSZWdFeHAoJ2JpdHJhdGU6JyArIGsgKyAnLGZvcm1hdDpbXixdKyxzaXplOihbXjtdKyknKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVnID0gbi5tYXRjaChyZWcpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKHRzW2ldICsgcmVnWzFdLnJlcGxhY2UoL1xcXFxzKm1iL2ksIFxcXCIgTUJcXFwiKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChhcnIsIDEsICfpgInmi6nkuIvovb3pn7PotKgnKS5zZWxlY3QoKGFyciwgdDEsIG5hbWUsIGFydGlzdCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBhcnIuaW5kZXhPZihpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gJC5yZXF1aXJlKFxcXCJqaWV4aT9ydWxlPeatjOivjemAgumFjVxcXCIpLkdldE11c2ljVXJsKFxcXCJkb3duXFxcIiwgXFxcImt3XFxcIiwgdDEsIGksIG5hbWUsIGFydGlzdCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVybC5tYXRjaChcXFwidG9hc3Q6Ly9cXFwiKSkgcmV0dXJuIHVybDtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2Rvd25sb2FkOi8vJyArIHVybDtcXG4gICAgICAgICAgICAgICAgICAgIH0sIGFyciwgdDEsIF8ubmFtZSwgXy5hcnRpc3QpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIC8vIOatjOivjVxcbiAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgJC5yZXF1aXJlKFxcXCJrdz9ydWxlPeatjOivjemAgumFjVxcXCIpLmFqYXgoXFxcImh0dHA6Ly9tLmt1d28uY24vbmV3aDUvc2luZ2xlcy9zb25naW5mb2FuZGxyYz9tdXNpY0lkPVxcXCIgKyB0MSArIFxcXCImXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICBscmMgPSBfLmxyY2xpc3QubWFwKF8gPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIG0gPSBNYXRoLmZsb29yKF8udGltZSAvIDYwKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzID0gKF8udGltZSAlIDYwKS50b0ZpeGVkKDMpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgWyR7bS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9OiR7cy5wYWRTdGFydCg2LCAnMCcpfV1gICsgXy5saW5lTHlyaWNcXG4gICAgICAgICAgICAgICAgICAgIH0pLmpvaW4oJ1xcXFxuJyk7XFxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xcbiAgICAgICAgICAgICAgICAgICAgbHJjID0gXFxcIlxcXCJcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBfXyA9IF8uc29uZ2luZm87XFxuICAgICAgICAgICAgICAgIC8vIOmTvuaOpVxcbiAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gJC5yZXF1aXJlKFxcXCJrdz9ydWxlPeatjOivjemAgumFjVxcXCIpLmFqYXgocGNhcGkucmVwbGFjZSgvKGFwaVxcXFwvKS8sICckMXYxLycpICsgXFxcIm11c2ljL3BsYXlVcmw/bWlkPVxcXCIgKyB0MSArIFxcXCImdHlwZT1tdXNpYyZcXFwiKS51cmw7XFxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGlzX3ZpcE11c2ljKSB7XFxuICAgICAgICAgICAgICAgICAgICB1cmwgPSAkLnJlcXVpcmUoXFxcImppZXhpP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuR2V0TXVzaWNVcmwoXFxcIm9wZW5cXFwiLCBcXFwia3dcXFwiLCB0MSwgMCwgX18uc29uZ05hbWUsIF9fLmFydGlzdCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKHVybC5tYXRjaChcXFwidG9hc3Q6Ly9cXFwiKSkgcmV0dXJuIHVybDtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgIHVybHM6IFt1cmwgKyAnI2lzTXVzaWM9dHJ1ZSMnXSxcXG4gICAgICAgICAgICAgICAgICAgIGx5cmljOiBscmNcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIGNhc2UgJzEnOiAvLyDpppbpobVcXG4gICAgICAgICAgICAgICAgaWYgKCF0MS5tYXRjaCgnaWQ9cmNtJykgfHwgTVlfUEFHRSA9PT0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgXyA9ICQucmVxdWlyZShcXFwia3c/cnVsZT3mrYzor43pgILphY1cXFwiKS5hamF4KHBjYXBpICsgdDEgKyBcXFwiJnBuPVxcXCIgKyBNWV9QQUdFICsgXFxcIiZybj0zMCZcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIChfLmRhdGEgfHwgXy5saXN0KS5tYXAoXyA9PiBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8ubmFtZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IF8uaW1nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IDIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogXy5pZFxcbiAgICAgICAgICAgICAgICAgICAgfSwgMSkpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBjYXNlICcyJzogLy8g5Y+R546wXFxuICAgICAgICAgICAgICAgIF8gPSAkLnJlcXVpcmUoXFxcImt3P3J1bGU95q2M6K+N6YCC6YWNXFxcIikuYWpheChwY2FwaSArIFxcXCJwbGF5bGlzdC9wbGF5TGlzdEluZm8/cGlkPVxcXCIgKyB0MSArIFxcXCImcG49XFxcIiArIE1ZX1BBR0UgKyBcXFwiJnJuPTMwJlxcXCIpO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBjYXNlICczJzogLy8g5o6S6KGMXFxuICAgICAgICAgICAgICAgIF8gPSAkLnJlcXVpcmUoXFxcImt3P3J1bGU95q2M6K+N6YCC6YWNXFxcIikuYWpheChwY2FwaSArIFxcXCJiYW5nL2JhbmcvbXVzaWNMaXN0P2JhbmdJZD1cXFwiICsgdDEgKyBcXFwiJnBuPVxcXCIgKyBNWV9QQUdFICsgXFxcIiZybj0zMCZcXFwiKTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICB9XFxuICAgICAgICBkID0gW107XFxuICAgICAgICBfLm11c2ljTGlzdC5tYXAoXyA9PiBFeHRyYSh7XFxuICAgICAgICAgICAgdGl0bGU6IChfLnNvbmdOYW1lIHx8IF8ubmFtZSkgKyAnIC0gJyArIF8uYXJ0aXN0LFxcbiAgICAgICAgICAgIGltZzogXy5waWMgfHwgXy5pbWcgfHwgZmV0Y2goJ2h0dHA6Ly9hcnRpc3RwaWNzZXJ2ZXIua3V3by5jbi9waWMud2ViP3R5cGU9cmlkX3BpYyZwaWN0eXBlPXVybCZzaXplPTUwMCZyaWQ9JyArIF8uaWQpLFxcbiAgICAgICAgICAgIGNvbnRlbnQ6IF8uaXNMaXN0ZW5GZWUgPT0gdHJ1ZSA/IDEgOiAwLFxcbiAgICAgICAgICAgIHp5aWQ6IF8uaWQgfHwgXy5yaWRcXG4gICAgICAgIH0sIDEpKTtcXG4gICAgICAgIHNldFJlc3VsdChkKTtcXG4gICAgfSxcXG5cXG5cXG5cXG4gICAgc2VhcmNoOiBmdW5jdGlvbihwbGF0Zm9ybSwga2V5d29yZCwgaXNVKSB7XFxuICAgICAgICBpZiAoaXNVICE9IFxcXCJ1cmxcXFwiKSB7XFxuICAgICAgICAgICAgX18gPSB7XFxuICAgICAgICAgICAgICAgIGxpYjogKF8pID0+IHRydWUsXFxuICAgICAgICAgICAgICAgIHBhaWQ6IChfKSA9PiBfLnRwYXkgPT0gJzEnLFxcbiAgICAgICAgICAgICAgICBmcmVlOiAoXykgPT4gXy50cGF5ID09ICcwJ1xcbiAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgc3VybCA9IChzdHlwZSkgPT4gJC5yZXF1aXJlKFxcXCJrdz9ydWxlPeatjOivjemAgumFjVxcXCIpLmFqYXgocGNhcGkgKyBcXFwic2VhcmNoL3NlYXJjaFxcXCIgKyBzdHlwZSArIFxcXCJCeWtleVdvcmQ/a2V5PVxcXCIgKyBrZXl3b3JkICsgXFxcIiZwbj1cXFwiICsgTVlfUEFHRSArIFxcXCImcm49MzAmXFxcIikubGlzdDtcXG4gICAgICAgICAgICBzd2l0Y2ggKFN0cmluZyhwbGF0Zm9ybSkpIHtcXG4gICAgICAgICAgICAgICAgY2FzZSAnMCc6IC8vIOaQnOe0ouWNleabslxcbiAgICAgICAgICAgICAgICAgICAgLy8gc3VybCgnTXVzaWMnKS5tYXAoKTtcXG4gICAgICAgICAgICAgICAgICAgIHVybCA9IFxcXCJodHRwOi8vc2VhcmNoLmt1d28uY24vci5zP2NsaWVudD1rdCZmdD1tdXNpYyZwbGF0PXBjJmNsdXN0ZXI9MSZyZXN1bHQ9anNvbiZyZm9ybWF0PWpzb24mdmVyPW1ib3gmc2hvd19jb3B5cmlnaHRfb2ZmPTEmdmlwdmVyPU1VU0lDXzguMS4yLjBfVzQmZW5jb2Rpbmc9dXRmOCZwbj1cXFwiICsgKE1ZX1BBR0UgLSAxKSArIFxcXCImcm49MzAmYWxsPVxcXCIgKyBrZXl3b3JkO1xcbiAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZShmZXRjaCh1cmwpLnJlcGxhY2UoLycvZywgJ1xcXCInKSkuYWJzbGlzdC5tYXAoXyA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmlkID0gXy5NVVNJQ1JJRC5zcGxpdCgnXycpWzFdICsgJyc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9fW2lzVV0oXykpIEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8uU09OR05BTUUgKyAnIC0gJyArIF8uQVJUSVNULFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IF8ud2ViX2FsYnVtcGljX3Nob3J0ID8gXFxcImh0dHA6Ly9pbWcxLmt3Y2RuLmt1d28uY24vc3Rhci9hbGJ1bWNvdmVyL1xcXCIgKyBfLndlYl9hbGJ1bXBpY19zaG9ydC5yZXBsYWNlKC9eMTIwLywgJzUwMCcpIDogZmV0Y2goJ2h0dHA6Ly9hcnRpc3RwaWNzZXJ2ZXIua3V3by5jbi9waWMud2ViP3R5cGU9cmlkX3BpYyZwaWN0eXBlPXVybCZzaXplPTUwMCZyaWQ9JyArIHJpZCksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IF8udHBheSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogcmlkXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICBjYXNlICcxJzogLy8g5pCc57Si5q2M5Y2VXFxuICAgICAgICAgICAgICAgICAgICBzdXJsKCdQbGF5TGlzdCcpLm1hcChfID0+IEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXy5uYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogXy5pbWcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogMixcXG4gICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiBfLmlkXFxuICAgICAgICAgICAgICAgICAgICB9LCAxKSk7XFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGVsc2UgeyAvLyDmkJzntKIg5YiG5Lqr6ZO+5o6lXFxuICAgICAgICAgICAgc3dpdGNoIChTdHJpbmcocGxhdGZvcm0pKSB7XFxuICAgICAgICAgICAgICAgIGNhc2UgJzAnOiAvLyDmkJzntKLljZXmm7JcXG4gICAgICAgICAgICAgICAgICAgIF8gPSAkLnJlcXVpcmUoXFxcImt3P3J1bGU95q2M6K+N6YCC6YWNXFxcIikuYWpheChcXFwiaHR0cDovL20ua3V3by5jbi9uZXdoNS9zaW5nbGVzL3NvbmdpbmZvYW5kbHJjP211c2ljSWQ9XFxcIiArIGtleXdvcmQgKyBcXFwiJlxcXCIpLnNvbmdpbmZvO1xcbiAgICAgICAgICAgICAgICAgICAgX18gPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8uc29uZ05hbWUgKyAnIC0gJyArIF8uYXJ0aXN0LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogXy5waWNcXG4gICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICQucmVxdWlyZShcXFwia3c/cnVsZT3mrYzor43pgILphY1cXFwiKS5hamF4KHBjYXBpLnJlcGxhY2UoLyhhcGlcXFxcLykvLCAnJDF2MS8nKSArIFxcXCJtdXNpYy9wbGF5VXJsP21pZD1cXFwiICsga2V5d29yZCArIFxcXCImdHlwZT1tdXNpYyZcXFwiKS51cmw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgX18uY29udGVudCA9IDA7XFxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoICh2aXApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBfXy5jb250ZW50ID0gMTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIF9fLnp5aWQgPSBrZXl3b3JkO1xcbiAgICAgICAgICAgICAgICAgICAgRXh0cmEoX18sIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIGNhc2UgJzEnOiAvLyDmkJzntKLmrYzljZVcXG4gICAgICAgICAgICAgICAgICAgIF8gPSAkLnJlcXVpcmUoXFxcImt3P3J1bGU95q2M6K+N6YCC6YWNXFxcIikuYWpheChwY2FwaSArIFxcXCJwbGF5bGlzdC9wbGF5TGlzdEluZm8/cGlkPVxcXCIgKyBrZXl3b3JkICsgXFxcIiZwbj0xJnJuPTEmXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8ubmFtZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IF8uaW1nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IDIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogXy5pZFxcbiAgICAgICAgICAgICAgICAgICAgfSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH0sXFxuXFxuXFxuXFxuICAgIGFqYXg6IGZ1bmN0aW9uKHVybCkge1xcbiAgICAgICAgQ29va2llID0gSlNPTi5wYXJzZShmZXRjaFBDKCdodHRwczovL3d3dy5rdXdvLmNuL2Zhdmljb24uaWNvP3Y9MScsIHtcXG4gICAgICAgICAgICB3aXRoSGVhZGVyczogdHJ1ZVxcbiAgICAgICAgfSkpLmhlYWRlcnNbJ3NldC1jb29raWUnXTtcXG4gICAgICAgIENvb2tpZSA9IFN0cmluZyhDb29raWUpLnJlcGxhY2UoLzsuKi8sICcnKTtcXG4gICAgICAgIFtlLCB0XSA9IENvb2tpZS5zcGxpdCgnPScpO1xcbiAgICAgICAgdCA9IHVuZXNjYXBlKHQpO1xcbiAgICAgICAgZm9yICh2YXIgbiA9IFxcXCJcXFwiLCBpID0gMDsgaSA8IGUubGVuZ3RoOyBpKyspIG4gKz0gZS5jaGFyQ29kZUF0KGkpLnRvU3RyaW5nKCk7XFxuICAgICAgICBuID0gU3RyaW5nKG4pO1xcbiAgICAgICAgdmFyIHIgPSBNYXRoLmZsb29yKG4ubGVuZ3RoIC8gNSksXFxuICAgICAgICAgICAgbyA9IHBhcnNlSW50KG4uY2hhckF0KHIpICsgbi5jaGFyQXQoMiAqIHIpICsgbi5jaGFyQXQoMyAqIHIpICsgbi5jaGFyQXQoNCAqIHIpICsgbi5jaGFyQXQoNSAqIHIpKSxcXG4gICAgICAgICAgICBsID0gTWF0aC5jZWlsKGUubGVuZ3RoIC8gMiksXFxuICAgICAgICAgICAgYyA9IE1hdGgucG93KDIsIDMxKSAtIDE7XFxuICAgICAgICB2YXIgZCA9IE1hdGgucm91bmQoMWU5ICogTWF0aC5yYW5kb20oKSkgJSAxZTg7XFxuICAgICAgICBmb3IgKG4gKz0gZDsgbi5sZW5ndGggPiAxMDspXFxuICAgICAgICAgICAgbiA9IChwYXJzZUludChuLnN1YnN0cmluZygwLCAxMCkpICsgcGFyc2VJbnQobi5zdWJzdHJpbmcoMTAsIG4ubGVuZ3RoKSkpLnRvU3RyaW5nKCk7XFxuICAgICAgICBuID0gKG8gKiBuICsgbCkgJSBjO1xcbiAgICAgICAgdmFyIGggPSBcXFwiXFxcIixcXG4gICAgICAgICAgICBmID0gXFxcIlxcXCI7XFxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdC5sZW5ndGg7IGkrKylcXG4gICAgICAgICAgICBmICs9IChoID0gcGFyc2VJbnQodC5jaGFyQ29kZUF0KGkpIF4gTWF0aC5mbG9vcihuIC8gYyAqIDI1NSkpKSA8IDE2ID8gXFxcIjBcXFwiICsgaC50b1N0cmluZygxNikgOiBoLnRvU3RyaW5nKDE2KSxcXG4gICAgICAgICAgICBuID0gKG8gKiBuICsgbCkgJSBjO1xcbiAgICAgICAgZm9yIChkID0gZC50b1N0cmluZygxNik7IGQubGVuZ3RoIDwgODspXFxuICAgICAgICAgICAgZCA9IFxcXCIwXFxcIiArIGQ7XFxuICAgICAgICBTZWNyZXQgPSBmICsgZDtcXG4gICAgICAgIHVybCArPSBgaHR0cHNTdGF0dXM9MSZyZXFJZD0ke1IoOCl9LSR7Uig0KX0tJHtSKDQpfS0ke1IoNCl9LSR7UigxMil9JnBsYXQ9d2ViX3d3dyZmcm9tPWA7XFxuICAgICAgICBnZXRkYXRhID0gKGFqYXhlcnIpID0+IHtcXG4gICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXyA9IEpTT04ucGFyc2UoZmV0Y2hQQyh1cmwsIHtcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcic6ICdodHRwczovL2t1d28uY24vJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAnQ29va2llJzogQ29va2llLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICdTZWNyZXQnOiBTZWNyZXRcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSkpLmRhdGE7XFxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBhamF4ZXJyIDwgMiA/IGdldGRhdGEoYWpheGVyciArIDEpIDogXFxcIlxcXCI7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIGdldGRhdGEoMCk7XFxuICAgIH0sXFxuXFxuXFxuXFxuICAgIGRlczogZnVuY3Rpb24odCkge1xcbiAgICAgICAgcmV0dXJuIGV4ZWN1dGVXZWJSdWxlKFxcXCJcXFwiLCAkLnRvU3RyaW5nKCh0KSA9PiB7XFxuICAgICAgICAgICAgY29uc3QgQnVmZmVyID0ge1xcbiAgICAgICAgICAgICAgICBmcm9tOiB0ID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHIgPSB0Lmxlbmd0aDtcXG4gICAgICAgICAgICAgICAgICAgIGUgPSBuZXcgVWludDhBcnJheShyKTtcXG4gICAgICAgICAgICAgICAgICAgIGZvciAobiA9IDA7IG4gPCByOyBuKyspXFxuICAgICAgICAgICAgICAgICAgICAgICAgZVtuXSA9IHQuY2hhckNvZGVBdChuKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmFuZ2UgPSB0ID0+IEFycmF5LmZyb20obmV3IEFycmF5KHQpLmtleXMoKSk7XFxuICAgICAgICAgICAgTG9uZyA9IHQgPT4ge1xcbiAgICAgICAgICAgICAgICBjb25zdCByID0gQmlnSW50KHQpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xcbiAgICAgICAgICAgICAgICAgICAgdG9TdHJpbmc6ICgpID0+IHIudG9TdHJpbmcoKSxcXG4gICAgICAgICAgICAgICAgICAgIGlzTmVnYXRpdmU6ICgpID0+IHIgPCAwLFxcbiAgICAgICAgICAgICAgICAgICAgbm90OiAoKSA9PiBMb25nKH5yKSxcXG4gICAgICAgICAgICAgICAgICAgIGxvdzogTnVtYmVyKHIpLFxcbiAgICAgICAgICAgICAgICAgICAgb3I6IHQgPT4gTG9uZyhyIHwgQmlnSW50KHQpKSxcXG4gICAgICAgICAgICAgICAgICAgIHhvcjogdCA9PiBMb25nKHIgXiBCaWdJbnQodCkpLFxcbiAgICAgICAgICAgICAgICAgICAgYW5kOiB0ID0+IExvbmcociAmIEJpZ0ludCh0KSksXFxuICAgICAgICAgICAgICAgICAgICBlcXVhbHM6IHQgPT4gciA9PT0gQmlnSW50KHQpLFxcbiAgICAgICAgICAgICAgICAgICAgc2hpZnRMZWZ0OiB0ID0+IExvbmcociA8PCBCaWdJbnQodCkpLFxcbiAgICAgICAgICAgICAgICAgICAgc2hpZnRSaWdodDogdCA9PiBMb25nKHIgPj4gQmlnSW50KHQpKVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICBMb25nQXJyYXkgPSB0ID0+IHQubWFwKHQgPT4gTG9uZyh0KSk7XFxuICAgICAgICAgICAgYXJyYXlFID0gTG9uZ0FycmF5KFtcXG4gICAgICAgICAgICAgICAgMzEsIDAsIDEsIDIsIDMsIDQsIC0xLCAtMSxcXG4gICAgICAgICAgICAgICAgMywgNCwgNSwgNiwgNywgOCwgLTEsIC0xLFxcbiAgICAgICAgICAgICAgICA3LCA4LCA5LCAxMCwgMTEsIDEyLCAtMSwgLTEsXFxuICAgICAgICAgICAgICAgIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIC0xLCAtMSxcXG4gICAgICAgICAgICAgICAgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgLTEsIC0xLFxcbiAgICAgICAgICAgICAgICAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAtMSwgLTEsXFxuICAgICAgICAgICAgICAgIDIzLCAyNCwgMjUsIDI2LCAyNywgMjgsIC0xLCAtMSxcXG4gICAgICAgICAgICAgICAgMjcsIDI4LCAyOSwgMzAsIDMxLCAzMCwgLTEsIC0xXFxuICAgICAgICAgICAgXSlcXG4gICAgICAgICAgICBhcnJheUlQID0gTG9uZ0FycmF5KFtcXG4gICAgICAgICAgICAgICAgNTcsIDQ5LCA0MSwgMzMsIDI1LCAxNywgOSwgMSxcXG4gICAgICAgICAgICAgICAgNTksIDUxLCA0MywgMzUsIDI3LCAxOSwgMTEsIDMsXFxuICAgICAgICAgICAgICAgIDYxLCA1MywgNDUsIDM3LCAyOSwgMjEsIDEzLCA1LFxcbiAgICAgICAgICAgICAgICA2MywgNTUsIDQ3LCAzOSwgMzEsIDIzLCAxNSwgNyxcXG4gICAgICAgICAgICAgICAgNTYsIDQ4LCA0MCwgMzIsIDI0LCAxNiwgOCwgMCxcXG4gICAgICAgICAgICAgICAgNTgsIDUwLCA0MiwgMzQsIDI2LCAxOCwgMTAsIDIsXFxuICAgICAgICAgICAgICAgIDYwLCA1MiwgNDQsIDM2LCAyOCwgMjAsIDEyLCA0LFxcbiAgICAgICAgICAgICAgICA2MiwgNTQsIDQ2LCAzOCwgMzAsIDIyLCAxNCwgNlxcbiAgICAgICAgICAgIF0pXFxuICAgICAgICAgICAgYXJyYXlJUF8xID0gTG9uZ0FycmF5KFtcXG4gICAgICAgICAgICAgICAgMzksIDcsIDQ3LCAxNSwgNTUsIDIzLCA2MywgMzEsXFxuICAgICAgICAgICAgICAgIDM4LCA2LCA0NiwgMTQsIDU0LCAyMiwgNjIsIDMwLFxcbiAgICAgICAgICAgICAgICAzNywgNSwgNDUsIDEzLCA1MywgMjEsIDYxLCAyOSxcXG4gICAgICAgICAgICAgICAgMzYsIDQsIDQ0LCAxMiwgNTIsIDIwLCA2MCwgMjgsXFxuICAgICAgICAgICAgICAgIDM1LCAzLCA0MywgMTEsIDUxLCAxOSwgNTksIDI3LFxcbiAgICAgICAgICAgICAgICAzNCwgMiwgNDIsIDEwLCA1MCwgMTgsIDU4LCAyNixcXG4gICAgICAgICAgICAgICAgMzMsIDEsIDQxLCA5LCA0OSwgMTcsIDU3LCAyNSxcXG4gICAgICAgICAgICAgICAgMzIsIDAsIDQwLCA4LCA0OCwgMTYsIDU2LCAyNFxcbiAgICAgICAgICAgIF0pXFxuICAgICAgICAgICAgYXJyYXlMcyA9IFtcXG4gICAgICAgICAgICAgICAgMSwgMSwgMiwgMiwgMiwgMiwgMiwgMixcXG4gICAgICAgICAgICAgICAgMSwgMiwgMiwgMiwgMiwgMiwgMiwgMVxcbiAgICAgICAgICAgIF1cXG4gICAgICAgICAgICBhcnJheUxzTWFzayA9IExvbmdBcnJheShbMCwgMTA0ODU3NywgMzE0NTczMV0pXFxuICAgICAgICAgICAgYXJyYXlNYXNrID0gcmFuZ2UoNjQpLm1hcCh0ID0+IE1hdGgucG93KDIsIHQpKVxcbiAgICAgICAgICAgIGFycmF5TWFza1s2M10gKj0gLTFcXG4gICAgICAgICAgICBhcnJheVAgPSBMb25nQXJyYXkoW1xcbiAgICAgICAgICAgICAgICAxNSwgNiwgMTksIDIwLCAyOCwgMTEsIDI3LCAxNixcXG4gICAgICAgICAgICAgICAgMCwgMTQsIDIyLCAyNSwgNCwgMTcsIDMwLCA5LFxcbiAgICAgICAgICAgICAgICAxLCA3LCAyMywgMTMsIDMxLCAyNiwgMiwgOCxcXG4gICAgICAgICAgICAgICAgMTgsIDEyLCAyOSwgNSwgMjEsIDEwLCAzLCAyNFxcbiAgICAgICAgICAgIF0pXFxuICAgICAgICAgICAgYXJyYXlQQ18xID0gTG9uZ0FycmF5KFtcXG4gICAgICAgICAgICAgICAgNTYsIDQ4LCA0MCwgMzIsIDI0LCAxNiwgOCwgMCxcXG4gICAgICAgICAgICAgICAgNTcsIDQ5LCA0MSwgMzMsIDI1LCAxNywgOSwgMSxcXG4gICAgICAgICAgICAgICAgNTgsIDUwLCA0MiwgMzQsIDI2LCAxOCwgMTAsIDIsXFxuICAgICAgICAgICAgICAgIDU5LCA1MSwgNDMsIDM1LCA2MiwgNTQsIDQ2LCAzOCxcXG4gICAgICAgICAgICAgICAgMzAsIDIyLCAxNCwgNiwgNjEsIDUzLCA0NSwgMzcsXFxuICAgICAgICAgICAgICAgIDI5LCAyMSwgMTMsIDUsIDYwLCA1MiwgNDQsIDM2LFxcbiAgICAgICAgICAgICAgICAyOCwgMjAsIDEyLCA0LCAyNywgMTksIDExLCAzXFxuICAgICAgICAgICAgXSlcXG4gICAgICAgICAgICBhcnJheVBDXzIgPSBMb25nQXJyYXkoW1xcbiAgICAgICAgICAgICAgICAxMywgMTYsIDEwLCAyMywgMCwgNCwgLTEsIC0xLFxcbiAgICAgICAgICAgICAgICAyLCAyNywgMTQsIDUsIDIwLCA5LCAtMSwgLTEsXFxuICAgICAgICAgICAgICAgIDIyLCAxOCwgMTEsIDMsIDI1LCA3LCAtMSwgLTEsXFxuICAgICAgICAgICAgICAgIDE1LCA2LCAyNiwgMTksIDEyLCAxLCAtMSwgLTEsXFxuICAgICAgICAgICAgICAgIDQwLCA1MSwgMzAsIDM2LCA0NiwgNTQsIC0xLCAtMSxcXG4gICAgICAgICAgICAgICAgMjksIDM5LCA1MCwgNDQsIDMyLCA0NywgLTEsIC0xLFxcbiAgICAgICAgICAgICAgICA0MywgNDgsIDM4LCA1NSwgMzMsIDUyLCAtMSwgLTEsXFxuICAgICAgICAgICAgICAgIDQ1LCA0MSwgNDksIDM1LCAyOCwgMzEsIC0xLCAtMVxcbiAgICAgICAgICAgIF0pXFxuICAgICAgICAgICAgbWF0cml4TlNCb3ggPSBbXFxuICAgICAgICAgICAgICAgIFtcXG4gICAgICAgICAgICAgICAgICAgIDE0LCA0LCAzLCAxNSwgMiwgMTMsIDUsIDMsXFxuICAgICAgICAgICAgICAgICAgICAxMywgMTQsIDYsIDksIDExLCAyLCAwLCA1LFxcbiAgICAgICAgICAgICAgICAgICAgNCwgMSwgMTAsIDEyLCAxNSwgNiwgOSwgMTAsXFxuICAgICAgICAgICAgICAgICAgICAxLCA4LCAxMiwgNywgOCwgMTEsIDcsIDAsXFxuICAgICAgICAgICAgICAgICAgICAwLCAxNSwgMTAsIDUsIDE0LCA0LCA5LCAxMCxcXG4gICAgICAgICAgICAgICAgICAgIDcsIDgsIDEyLCAzLCAxMywgMSwgMywgNixcXG4gICAgICAgICAgICAgICAgICAgIDE1LCAxMiwgNiwgMTEsIDIsIDksIDUsIDAsXFxuICAgICAgICAgICAgICAgICAgICA0LCAyLCAxMSwgMTQsIDEsIDcsIDgsIDEzXFxuICAgICAgICAgICAgICAgIF0sXFxuICAgICAgICAgICAgICAgIFtcXG4gICAgICAgICAgICAgICAgICAgIDE1LCAwLCA5LCA1LCA2LCAxMCwgMTIsIDksXFxuICAgICAgICAgICAgICAgICAgICA4LCA3LCAyLCAxMiwgMywgMTMsIDUsIDIsXFxuICAgICAgICAgICAgICAgICAgICAxLCAxNCwgNywgOCwgMTEsIDQsIDAsIDMsXFxuICAgICAgICAgICAgICAgICAgICAxNCwgMTEsIDEzLCA2LCA0LCAxLCAxMCwgMTUsXFxuICAgICAgICAgICAgICAgICAgICAzLCAxMywgMTIsIDExLCAxNSwgMywgNiwgMCxcXG4gICAgICAgICAgICAgICAgICAgIDQsIDEwLCAxLCA3LCA4LCA0LCAxMSwgMTQsXFxuICAgICAgICAgICAgICAgICAgICAxMywgOCwgMCwgNiwgMiwgMTUsIDksIDUsXFxuICAgICAgICAgICAgICAgICAgICA3LCAxLCAxMCwgMTIsIDE0LCAyLCA1LCA5XFxuICAgICAgICAgICAgICAgIF0sXFxuICAgICAgICAgICAgICAgIFtcXG4gICAgICAgICAgICAgICAgICAgIDEwLCAxMywgMSwgMTEsIDYsIDgsIDExLCA1LFxcbiAgICAgICAgICAgICAgICAgICAgOSwgNCwgMTIsIDIsIDE1LCAzLCAyLCAxNCxcXG4gICAgICAgICAgICAgICAgICAgIDAsIDYsIDEzLCAxLCAzLCAxNSwgNCwgMTAsXFxuICAgICAgICAgICAgICAgICAgICAxNCwgOSwgNywgMTIsIDUsIDAsIDgsIDcsXFxuICAgICAgICAgICAgICAgICAgICAxMywgMSwgMiwgNCwgMywgNiwgMTIsIDExLFxcbiAgICAgICAgICAgICAgICAgICAgMCwgMTMsIDUsIDE0LCA2LCA4LCAxNSwgMixcXG4gICAgICAgICAgICAgICAgICAgIDcsIDEwLCA4LCAxNSwgNCwgOSwgMTEsIDUsXFxuICAgICAgICAgICAgICAgICAgICA5LCAwLCAxNCwgMywgMTAsIDcsIDEsIDEyXFxuICAgICAgICAgICAgICAgIF0sXFxuICAgICAgICAgICAgICAgIFtcXG4gICAgICAgICAgICAgICAgICAgIDcsIDEwLCAxLCAxNSwgMCwgMTIsIDExLCA1LFxcbiAgICAgICAgICAgICAgICAgICAgMTQsIDksIDgsIDMsIDksIDcsIDQsIDgsXFxuICAgICAgICAgICAgICAgICAgICAxMywgNiwgMiwgMSwgNiwgMTEsIDEyLCAyLFxcbiAgICAgICAgICAgICAgICAgICAgMywgMCwgNSwgMTQsIDEwLCAxMywgMTUsIDQsXFxuICAgICAgICAgICAgICAgICAgICAxMywgMywgNCwgOSwgNiwgMTAsIDEsIDEyLFxcbiAgICAgICAgICAgICAgICAgICAgMTEsIDAsIDIsIDUsIDAsIDEzLCAxNCwgMixcXG4gICAgICAgICAgICAgICAgICAgIDgsIDE1LCA3LCA0LCAxNSwgMSwgMTAsIDcsXFxuICAgICAgICAgICAgICAgICAgICA1LCA2LCAxMiwgMTEsIDMsIDgsIDksIDE0XFxuICAgICAgICAgICAgICAgIF0sXFxuICAgICAgICAgICAgICAgIFtcXG4gICAgICAgICAgICAgICAgICAgIDIsIDQsIDgsIDE1LCA3LCAxMCwgMTMsIDYsXFxuICAgICAgICAgICAgICAgICAgICA0LCAxLCAzLCAxMiwgMTEsIDcsIDE0LCAwLFxcbiAgICAgICAgICAgICAgICAgICAgMTIsIDIsIDUsIDksIDEwLCAxMywgMCwgMyxcXG4gICAgICAgICAgICAgICAgICAgIDEsIDExLCAxNSwgNSwgNiwgOCwgOSwgMTQsXFxuICAgICAgICAgICAgICAgICAgICAxNCwgMTEsIDUsIDYsIDQsIDEsIDMsIDEwLFxcbiAgICAgICAgICAgICAgICAgICAgMiwgMTIsIDE1LCAwLCAxMywgMiwgOCwgNSxcXG4gICAgICAgICAgICAgICAgICAgIDExLCA4LCAwLCAxNSwgNywgMTQsIDksIDQsXFxuICAgICAgICAgICAgICAgICAgICAxMiwgNywgMTAsIDksIDEsIDEzLCA2LCAzXFxuICAgICAgICAgICAgICAgIF0sXFxuICAgICAgICAgICAgICAgIFtcXG4gICAgICAgICAgICAgICAgICAgIDEyLCA5LCAwLCA3LCA5LCAyLCAxNCwgMSxcXG4gICAgICAgICAgICAgICAgICAgIDEwLCAxNSwgMywgNCwgNiwgMTIsIDUsIDExLFxcbiAgICAgICAgICAgICAgICAgICAgMSwgMTQsIDEzLCAwLCAyLCA4LCA3LCAxMyxcXG4gICAgICAgICAgICAgICAgICAgIDE1LCA1LCA0LCAxMCwgOCwgMywgMTEsIDYsXFxuICAgICAgICAgICAgICAgICAgICAxMCwgNCwgNiwgMTEsIDcsIDksIDAsIDYsXFxuICAgICAgICAgICAgICAgICAgICA0LCAyLCAxMywgMSwgOSwgMTUsIDMsIDgsXFxuICAgICAgICAgICAgICAgICAgICAxNSwgMywgMSwgMTQsIDEyLCA1LCAxMSwgMCxcXG4gICAgICAgICAgICAgICAgICAgIDIsIDEyLCAxNCwgNywgNSwgMTAsIDgsIDEzXFxuICAgICAgICAgICAgICAgIF0sXFxuICAgICAgICAgICAgICAgIFtcXG4gICAgICAgICAgICAgICAgICAgIDQsIDEsIDMsIDEwLCAxNSwgMTIsIDUsIDAsXFxuICAgICAgICAgICAgICAgICAgICAyLCAxMSwgOSwgNiwgOCwgNywgNiwgOSxcXG4gICAgICAgICAgICAgICAgICAgIDExLCA0LCAxMiwgMTUsIDAsIDMsIDEwLCA1LFxcbiAgICAgICAgICAgICAgICAgICAgMTQsIDEzLCA3LCA4LCAxMywgMTQsIDEsIDIsXFxuICAgICAgICAgICAgICAgICAgICAxMywgNiwgMTQsIDksIDQsIDEsIDIsIDE0LFxcbiAgICAgICAgICAgICAgICAgICAgMTEsIDEzLCA1LCAwLCAxLCAxMCwgOCwgMyxcXG4gICAgICAgICAgICAgICAgICAgIDAsIDExLCAzLCA1LCA5LCA0LCAxNSwgMixcXG4gICAgICAgICAgICAgICAgICAgIDcsIDgsIDEyLCAxNSwgMTAsIDcsIDYsIDEyXFxuICAgICAgICAgICAgICAgIF0sXFxuICAgICAgICAgICAgICAgIFtcXG4gICAgICAgICAgICAgICAgICAgIDEzLCA3LCAxMCwgMCwgNiwgOSwgNSwgMTUsXFxuICAgICAgICAgICAgICAgICAgICA4LCA0LCAzLCAxMCwgMTEsIDE0LCAxMiwgNSxcXG4gICAgICAgICAgICAgICAgICAgIDIsIDExLCA5LCA2LCAxNSwgMTIsIDAsIDMsXFxuICAgICAgICAgICAgICAgICAgICA0LCAxLCAxNCwgMTMsIDEsIDIsIDcsIDgsXFxuICAgICAgICAgICAgICAgICAgICAxLCAyLCAxMiwgMTUsIDEwLCA0LCAwLCAzLFxcbiAgICAgICAgICAgICAgICAgICAgMTMsIDE0LCA2LCA5LCA3LCA4LCA5LCA2LFxcbiAgICAgICAgICAgICAgICAgICAgMTUsIDEsIDUsIDEyLCAzLCAxMCwgMTQsIDUsXFxuICAgICAgICAgICAgICAgICAgICA4LCA3LCAxMSwgMCwgNCwgMTMsIDIsIDExXFxuICAgICAgICAgICAgICAgIF1cXG4gICAgICAgICAgICBdXFxuICAgICAgICAgICAgYml0VHJhbnNmb3JtID0gKHQsIHIsIGUpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IG4gPSBMb25nKDApO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gcmFuZ2UocikuZm9yRWFjaChyID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHRbcl0uaXNOZWdhdGl2ZSgpIHx8IGUuYW5kKGFycmF5TWFza1t0W3JdLmxvd10pLmVxdWFscygwKSB8fCAobiA9IG4ub3IoYXJyYXlNYXNrW3JdKSlcXG4gICAgICAgICAgICAgICAgfSksIG5cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgREVTNjQgPSAodCwgcikgPT4ge1xcbiAgICAgICAgICAgICAgICBlID0gW10sXFxuICAgICAgICAgICAgICAgICAgICBuID0gW107XFxuICAgICAgICAgICAgICAgIGYgPSBiaXRUcmFuc2Zvcm0oYXJyYXlJUCwgNjQsIHIpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gblswXSA9IGYuYW5kKDQyOTQ5NjcyOTUpLFxcbiAgICAgICAgICAgICAgICAgICAgblsxXSA9IGYuYW5kKC00Mjk0OTY3Mjk2KS5zaGlmdFJpZ2h0KDMyKSxcXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlKDE2KS5mb3JFYWNoKHIgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmID0gTG9uZygwKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gTG9uZyhuWzFdKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGJpdFRyYW5zZm9ybShhcnJheUUsIDY0LCBpKS54b3IodFtyXSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlKDgpLmZvckVhY2godCA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW3RdID0gaS5zaGlmdFJpZ2h0KDggKiB0KS5hbmQoMjU1KVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UoOCkucmV2ZXJzZSgpLmZvckVhY2godCA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gZi5zaGlmdExlZnQoNCkub3IobWF0cml4TlNCb3hbdF1bZVt0XV0pXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gYml0VHJhbnNmb3JtKGFycmF5UCwgMzIsIGYpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvID0gTG9uZyhuWzBdKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgblswXSA9IExvbmcoblsxXSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5bMV0gPSBvLnhvcihpKVxcbiAgICAgICAgICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgICAgICAgICBuLnJldmVyc2UoKSxcXG4gICAgICAgICAgICAgICAgICAgIGYgPSBuWzFdLnNoaWZ0TGVmdCgzMikuYW5kKC00Mjk0OTY3Mjk2KS5vcihuWzBdLmFuZCg0Mjk0OTY3Mjk1KSksXFxuICAgICAgICAgICAgICAgICAgICBmID0gYml0VHJhbnNmb3JtKGFycmF5SVBfMSwgNjQsIGYpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHN1YktleXMgPSAodCwgcikgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgbiA9IGJpdFRyYW5zZm9ybShhcnJheVBDXzEsIDU2LCB0KTtcXG4gICAgICAgICAgICAgICAgcmFuZ2UoMTYpLmZvckVhY2godCA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBuID0gbi5hbmQoYXJyYXlMc01hc2tbYXJyYXlMc1t0XV0pLnNoaWZ0TGVmdCgyOCAtIGFycmF5THNbdF0pLm9yKG4uYW5kKGFycmF5THNNYXNrW2FycmF5THNbdF1dLm5vdCgpKS5zaGlmdFJpZ2h0KGFycmF5THNbdF0pKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICByW3RdID0gYml0VHJhbnNmb3JtKGFycmF5UENfMiwgNjQsIG4pXFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGIgPSBmdW5jdGlvbih0KSB7XFxuICAgICAgICAgICAgICAgIGNvbnN0IHIgPSBCdWZmZXIuZnJvbShcXFwieWx6c3hrd21cXFwiKTtcXG4gICAgICAgICAgICAgICAgbGV0IG4gPSBMb25nKDApO1xcbiAgICAgICAgICAgICAgICByYW5nZSg4KS5mb3JFYWNoKHQgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgbiA9IExvbmcoclt0XSkuc2hpZnRMZWZ0KDggKiB0KS5vcihuKVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgY29uc3QgbyA9IE1hdGguZmxvb3IodC5sZW5ndGggLyA4KSxcXG4gICAgICAgICAgICAgICAgICAgIGkgPSByYW5nZSgxNikubWFwKCgpID0+IExvbmcoMCkpO1xcbiAgICAgICAgICAgICAgICBzdWJLZXlzKG4sIGkpO1xcbiAgICAgICAgICAgICAgICBjb25zdCBmID0gcmFuZ2UobykubWFwKCgpID0+IExvbmcoMCkpO1xcbiAgICAgICAgICAgICAgICByYW5nZShvKS5mb3JFYWNoKHIgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2UoOCkuZm9yRWFjaChlID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBmW3JdID0gTG9uZyh0W2UgKyA4ICogcl0pLnNoaWZ0TGVmdCg4ICogZSkub3IoZltyXSlcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBjb25zdCBzID0gW107XFxuICAgICAgICAgICAgICAgIHJhbmdlKG8pLmZvckVhY2godCA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBzW3RdID0gREVTNjQoaSwgZlt0XSlcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGNvbnN0IHUgPSB0LnNsaWNlKDggKiBvKTtcXG4gICAgICAgICAgICAgICAgbGV0IGggPSBMb25nKDApO1xcbiAgICAgICAgICAgICAgICByYW5nZSh0Lmxlbmd0aCAlIDgpLmZvckVhY2godCA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBoID0gTG9uZyh1W3RdKS5zaGlmdExlZnQoOCAqIHQpLm9yKGgpXFxuICAgICAgICAgICAgICAgIH0pLCBzW29dID0gREVTNjQoaSwgaCk7XFxuICAgICAgICAgICAgICAgIGNvbnN0IGEgPSBbXTtcXG4gICAgICAgICAgICAgICAgbGV0IGMgPSAwO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gcy5mb3JFYWNoKHQgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2UoOCkuZm9yRWFjaChyID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBhW2NdID0gdC5zaGlmdFJpZ2h0KDggKiByKS5hbmQoMjU1KS5sb3c7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYysrXFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICB9KSwgYTtcXG4gICAgICAgICAgICB9KEJ1ZmZlci5mcm9tKHQpKTtcXG4gICAgICAgICAgICByZXR1cm4gd2luZG93LmJ0b2EoU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBiKSk7XFxuICAgICAgICB9LCB0KSk7XFxuICAgIH1cXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLinbptZ1wiLFwicGF0aFwiOlwibWdcIixcInJ1bGVcIjpcImV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL2xpYj9ydWxlPeatjOivjemAgumFjScpKS5ydWxlKTtcXG5jb25zdCB0aGlzX3BsYXRmb3JtID0gXFxcIm1nXFxcIjtcXG4kLmV4cG9ydHMgPSB7XFxuXFxuXFxuXFxuICAgIGlUYWc6IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgaVRhZ1tcXFwi5o6o6I2QXFxcIl0gPSB7fTtcXG4gICAgICAgIGlUYWdbXFxcIuaOqOiNkFxcXCJdW1xcXCLmnIDmlrDmrYzljZVcXFwiXSA9IFxcXCJwbGF5bGlzdC9saXN0P2NvbHVtbklkPTE1MTI3MjcyJnRhZ0lkPVxcXCI7XFxuICAgICAgICBpVGFnW1xcXCLmjqjojZBcXFwiXVtcXFwi6aaW6aG15o6o6I2QXFxcIl0gPSBcXFwiaG9tZS9zb25nbGlzdFxcXCI7XFxuICAgICAgICBpVGFnW1xcXCLmjqjojZBcXFwiXVtcXFwi572u6aG254Ot6ZeoXFxcIl0gPSBcXFwicGxheWxpc3QvbGlzdD9jb2x1bW5JZD0zODE5OTU4OFxcXCI7XFxuICAgICAgICAkLnJlcXVpcmUoJ21nP3J1bGU95q2M6K+N6YCC6YWNJykuYWpheChcXFwicGxheWxpc3QvYWxsVGFnXFxcIikudGFncy5tYXAoXyA9PiB7XFxuICAgICAgICAgICAgaVRhZ1tfLnRhZ05hbWVdID0ge307XFxuICAgICAgICAgICAgXy50YWdzLm1hcChfXyA9PlxcbiAgICAgICAgICAgICAgICBpVGFnW18udGFnTmFtZV1bX18udGFnTmFtZV0gPSBpVGFnW1xcXCLmjqjojZBcXFwiXVtcXFwi5pyA5paw5q2M5Y2VXFxcIl0gKyBfXy50YWdJZFxcbiAgICAgICAgICAgICk7XFxuICAgICAgICB9KTtcXG4gICAgICAgIGlUYWdbXFxcIuaOkuihjFxcXCJdID0ge307XFxuICAgICAgICAkLnJlcXVpcmUoJ21nP3J1bGU95q2M6K+N6YCC6YWNJykuYWpheChcXFwiYmlsbGJvYXJkL3RyZWVcXFwiKS5tYXAoXyA9PiB7XFxuICAgICAgICAgICAgaWYgKCEv5LmQwrfmppwvLnRlc3QoXy5jb2x1bW5UaXRsZSkpIHtcXG4gICAgICAgICAgICAgICAgaVRhZ1tcXFwi5o6S6KGMXFxcIl1bXy5jb2x1bW5UaXRsZV0gPSBfLmJpbGxCb2FyZFZvcy5tYXAoXyA9PiBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXy5jb2x1bW5UaXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogJ2h0dHBzOicgKyBfLmNvbHVtblNtYWxsUGljLFxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogMyxcXG4gICAgICAgICAgICAgICAgICAgIHp5aWQ6IF8ucGF0aE5hbWVcXG4gICAgICAgICAgICAgICAgfSwgMSwgMSkpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcIm1nX2lUYWdcXFwiLCBpVGFnKTtcXG4gICAgfSxcXG5cXG5cXG5cXG4gICAgbGF6eTogZnVuY3Rpb24ocGxhdGZvcm0sIHQxLCB0Mikge1xcbiAgICAgICAgc3dpdGNoIChTdHJpbmcocGxhdGZvcm0pKSB7XFxuICAgICAgICAgICAgY2FzZSAnMCc6IC8vIOatjOabsuivpuaDhVxcbiAgICAgICAgICAgICAgICBfID0gSlNPTi5wYXJzZShmZXRjaChcXFwiaHR0cHM6Ly9jLm11c2ljYXBwLm1pZ3UuY24vTUlHVU0yLjAvdjEuMC9jb250ZW50L3Jlc291cmNlaW5mby5kbz9yZXNvdXJjZVR5cGU9MiZyZXNvdXJjZUlkPVxcXCIgKyB0MSkpLnJlc291cmNlWzBdO1xcbiAgICAgICAgICAgICAgICBpZiAodDIpIHtcXG4gICAgICAgICAgICAgICAgICAgIGYgPSBfLmNvZGVSYXRlO1xcbiAgICAgICAgICAgICAgICAgICAgdCA9IF8ubmV3UmF0ZUZvcm1hdHM7XFxuICAgICAgICAgICAgICAgICAgICBhcnIgPSBbdHNbMV0gKyBTaXplKHRbMF0uYW5kcm9pZFNpemUgfHwgdFswXS5zaXplKV07XFxuICAgICAgICAgICAgICAgICAgICBpZiAoZi5IUSlcXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaCh0c1syXSArIFNpemUodFsxXS5hbmRyb2lkU2l6ZSB8fCB0WzFdLnNpemUpKTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChmLlNRKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKHRzWzNdICsgU2l6ZSh0WzJdLmFuZHJvaWRTaXplIHx8IHRbMl0uc2l6ZSkpO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGYuWlEpXFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2godHNbNF0gKyBTaXplKHRbM10uYW5kcm9pZFNpemUgfHwgdFsyXS5zaXplKSk7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoZi5aM0QgJiYgZ2V0TXlWYXIoJ21nanhfenEnKT09ICcxJylcXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaCh0c1s1XSArIFNpemUoXy56M2RDb2RlLmFuZHJvaWRTaXplIHx8IF8uejNkQ29kZS5zaXplKSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChhcnIsIDEsICfpgInmi6nkuIvovb3pn7PotKgnKS5zZWxlY3QoKGFyciwgdDEsIG5hbWUsIGFydGlzdCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBhcnIuaW5kZXhPZihpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gJC5yZXF1aXJlKFxcXCJqaWV4aT9ydWxlPeatjOivjemAgumFjVxcXCIpLkdldE11c2ljVXJsKFxcXCJkb3duXFxcIiwgXFxcIm1nXFxcIiwgdDEsIGksIG5hbWUsIGFydGlzdCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVybC5tYXRjaChcXFwidG9hc3Q6Ly9cXFwiKSkgcmV0dXJuIHVybDtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2Rvd25sb2FkOi8vJyArIHVybDtcXG4gICAgICAgICAgICAgICAgICAgIH0sIGFyciwgdDEsIF8uc29uZ05hbWUsIF8uYXJ0aXN0cy5tYXAoXyA9PiBfLm5hbWUpLmpvaW4oXFxcIiZcXFwiKSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgbHJjID0gXy5scmNVcmw7XFxuICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICB1cmwgPSAnaHR0cHM6JyArICQucmVxdWlyZShcXFwibWc/cnVsZT3mrYzor43pgILphY1cXFwiKS5hamF4KGBwbGF5L2F1dGgvZ2V0U29uZ1BsYXlJbmZvP3R5cGU9MSZjb3B5cmlnaHRJZD0ke3QxfWApLnBsYXlVcmw7XFxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGlzX3ZpcE11c2ljKSB7XFxuICAgICAgICAgICAgICAgICAgICB1cmwgPSAkLnJlcXVpcmUoXFxcImppZXhpP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuR2V0TXVzaWNVcmwoXFxcIm9wZW5cXFwiLCBcXFwibWdcXFwiLCB0MSwgMCwgXy5zb25nTmFtZSwgXy5hcnRpc3RzLm1hcChfID0+IF8ubmFtZSkuam9pbihcXFwiJlxcXCIpKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAodXJsLm1hdGNoKFxcXCJ0b2FzdDovL1xcXCIpKSByZXR1cm4gdXJsO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICAgICAgdXJsczogW3VybCArICcjaXNNdXNpYz10cnVlIyddLFxcbiAgICAgICAgICAgICAgICAgICAgbHlyaWM6IGxyY1xcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgY2FzZSAnMSc6IC8vIOmmlumhtVxcbiAgICAgICAgICAgICAgICBfID0gJC5yZXF1aXJlKCdtZz9ydWxlPeatjOivjemAgumFjScpLmFqYXgodXJpKTtcXG4gICAgICAgICAgICAgICAgaWYgKCFfKSBfID0ge1xcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtdXFxuICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgIChfLml0ZW1zIHx8IF9bMF0uaXRlbXMpLm1hcChfID0+IEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfLm5hbWUgfHwgXy50aXRsZSB8fCBfLnBsYXlMaXN0TmFtZSxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogXy5pbWcgfHwgXy5pbWFnZSxcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IDIsXFxuICAgICAgICAgICAgICAgICAgICB6eWlkOiBfLmlkIHx8IF8ucGxheUxpc3RJZFxcbiAgICAgICAgICAgICAgICB9LCAxKSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBjYXNlICcyJzogLy8g5Y+R546wXFxuICAgICAgICAgICAgICAgIGlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgIHQyID0gJC5yZXF1aXJlKFxcXCJtZz9ydWxlPeatjOivjemAgumFjVxcXCIpLmFqYXgoYHBsYXlsaXN0L2luZm8/c29uZ0xpc3RJZD0ke3QxfWApLmNvbnRlbnRDb3VudDtcXG4gICAgICAgICAgICAgICAgICAgIF8gPSAkLnJlcXVpcmUoXFxcIm1nP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuYWpheChgcGxheWxpc3Qvc29uZ3NJbmZvP3BhbHlsaXN0SWQ9JHt0MX1gLCB0Mik7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSBfID0ge1xcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtdXFxuICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIGNhc2UgJzMnOiAvLyDmjpLooYxcXG4gICAgICAgICAgICAgICAgXyA9ICQucmVxdWlyZShcXFwibWc/cnVsZT3mrYzor43pgILphY1cXFwiKS5hamF4KGBiaWxsYm9hcmQvaG9tZT9wYXRoTmFtZT0ke3QxfWApLnNvbmdzO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgIH1cXG4gICAgICAgIGQgPSBbXTtcXG4gICAgICAgIF8uaXRlbXMubWFwKF8gPT4ge1xcbiAgICAgICAgICAgIGlmIChfLmZ1bGxTb25nKSBFeHRyYSh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBfLm5hbWUgKyAoXy5zaW5nZXJzID8gJyAtICcgKyBfLnNpbmdlcnMubWFwKF8gPT4gXy5uYW1lKS5qb2luKCcmJykgOiAnJyksXFxuICAgICAgICAgICAgICAgIGltZzogJ2h0dHBzOicgKyBfLm1lZGl1bVBpYyxcXG4gICAgICAgICAgICAgICAgY29udGVudDogXy5mdWxsU29uZy52aXBGbGFnLFxcbiAgICAgICAgICAgICAgICB6eWlkOiBfLmNvcHlyaWdodElkXFxuICAgICAgICAgICAgfSwgMSk7XFxuICAgICAgICB9KTtcXG4gICAgICAgIHNldFJlc3VsdChkKTtcXG4gICAgfSxcXG5cXG5cXG5cXG5cXG4gICAgc2VhcmNoOiBmdW5jdGlvbihwbGF0Zm9ybSwga2V5d29yZCwgaXNVKSB7XFxuICAgICAgICBpZiAoaXNVICE9IFxcXCJ1cmxcXFwiKSB7XFxuICAgICAgICAgICAgX18gPSB7XFxuICAgICAgICAgICAgICAgIGxpYjogKF8pID0+IHRydWUsXFxuICAgICAgICAgICAgICAgIHBhaWQ6IChfKSA9PiBfLmZ1bGxTb25nLnZpcEZsYWcgPT0gJzEnLFxcbiAgICAgICAgICAgICAgICBmcmVlOiAoXykgPT4gXy5mdWxsU29uZy52aXBGbGFnID09ICcwJ1xcbiAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgc3VybCA9IChzdHlwZSkgPT4gJC5yZXF1aXJlKFxcXCJtZz9ydWxlPeatjOivjemAgumFjVxcXCIpLmFqYXgoXFxcInNlYXJjaC9zb25nXFxcIiArIHN0eXBlICsgXFxcIj90ZXh0PVxcXCIgKyBrZXl3b3JkKS5pdGVtcztcXG4gICAgICAgICAgICBzd2l0Y2ggKFN0cmluZyhwbGF0Zm9ybSkpIHtcXG4gICAgICAgICAgICAgICAgY2FzZSAnMCc6IC8vIOaQnOe0ouWNleabslxcbiAgICAgICAgICAgICAgICAgICAgc3VybCgnJykubWFwKF8gPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfLmZ1bGxTb25nICYmIF9fW2lzVV0oXykpIEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8ubmFtZSArIChfLnNpbmdlcnMgPyAnIC0gJyArIF8uc2luZ2Vycy5tYXAoXyA9PiBfLm5hbWUpLmpvaW4oJyYnKSA6ICcnKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiAnaHR0cHM6JyArIF8ubWVkaXVtUGljLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBfLmZ1bGxTb25nLnZpcEZsYWcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IF8uY29weXJpZ2h0SWRcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAxKTtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIGNhc2UgJzEnOiAvLyDmkJzntKLmrYzljZVcXG4gICAgICAgICAgICAgICAgICAgIHN1cmwoJ0xpc3QnKS5tYXAoXyA9PiBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8ubmFtZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IF8uaW1nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IDIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogXy5pZFxcbiAgICAgICAgICAgICAgICAgICAgfSwgMSkpO1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBlbHNlIHsgLy8g5pCc57SiIOWIhuS6q+mTvuaOpVxcbiAgICAgICAgICAgIHN3aXRjaCAoU3RyaW5nKHBsYXRmb3JtKSkge1xcbiAgICAgICAgICAgICAgICBjYXNlICcwJzogLy8g5pCc57Si5Y2V5puyXFxuICAgICAgICAgICAgICAgICAgICBfID0gSlNPTi5wYXJzZShmZXRjaChcXFwiaHR0cHM6Ly9jLm11c2ljYXBwLm1pZ3UuY24vTUlHVU0yLjAvdjEuMC9jb250ZW50L3Jlc291cmNlaW5mby5kbz9yZXNvdXJjZVR5cGU9MiZyZXNvdXJjZUlkPVxcXCIgKyBrZXl3b3JkKSkucmVzb3VyY2VbMF07XFxuICAgICAgICAgICAgICAgICAgICBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8uc29uZ05hbWUgKyAnIC0gJyArIF8uc2luZ2VyLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogXy5hbGJ1bUltZ3NbMF0uaW1nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IF8udmlwVHlwZSA/IDEgOiAwLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IF8uY29weXJpZ2h0SWRcXG4gICAgICAgICAgICAgICAgICAgIH0sIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIGNhc2UgJzEnOiAvLyDmkJzntKLmrYzljZVcXG4gICAgICAgICAgICAgICAgICAgIF8gPSAkLnJlcXVpcmUoXFxcIm1nP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuYWpheChgcGxheWxpc3QvaW5mbz9zb25nTGlzdElkPSR7a2V5d29yZH1gKTtcXG4gICAgICAgICAgICAgICAgICAgIEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXy5wbGF5TGlzdE5hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBfLmltYWdlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IDIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogXy5wbGF5TGlzdElkXFxuICAgICAgICAgICAgICAgICAgICB9LCAxKTtcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfSxcXG5cXG5cXG5cXG5cXG5cXG4gICAgYWpheDogZnVuY3Rpb24odXJpLCBzaXplLCBoZWFkKSB7XFxuICAgICAgICB1cmkgPSBTdHJpbmcodXJpKTtcXG4gICAgICAgIGlmICh1cmkubWF0Y2goL3BsYXlsaXN0XFxcXC8obGlzdHxzb25nc0luZm8pfGJpbGxib2FyZFxcXFwvaG9tZXxzZWFyY2hcXFxcL3NvbmcvKSAmJiAhdXJpLm1hdGNoKCdjb2x1bW5JZD0zODE5OTU4OCcpKVxcbiAgICAgICAgICAgIHVyaSArPSBcXFwiJnBhZ2VOdW09XFxcIiArIE1ZX1BBR0UgKyBcXFwiJnBhZ2VTaXplPVxcXCIgKyAoc2l6ZSB8fCAzMCk7XFxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShmZXRjaChcXFwiaHR0cHM6Ly9tLm11c2ljLm1pZ3UuY24vbWlndW11c2ljL2g1L1xcXCIgKyB1cmksIHtcXG4gICAgICAgICAgICBcXFwiaGVhZGVyc1xcXCI6IE9iamVjdC5hc3NpZ24oe1xcbiAgICAgICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6IFxcXCJodHRwczovL20ubXVzaWMubWlndS5jbi92NC9cXFwiLFxcbiAgICAgICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IE1PQklMRV9VQSxcXG4gICAgICAgICAgICAgICAgXFxcIkJ5XFxcIjogbWQ1KE1PQklMRV9VQSksXFxuICAgICAgICAgICAgfSwgaGVhZCB8fCB7fSlcXG4gICAgICAgIH0pKS5kYXRhO1xcbiAgICB9XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi4p27NXNcIixcInBhdGhcIjpcIjVzXCIsXCJydWxlXCI6XCJldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9saWI/cnVsZT3mrYzor43pgILphY0nKSkucnVsZSk7XFxuY29uc3QgdGhpc19wbGF0Zm9ybSA9IFxcXCI1c1xcXCI7XFxuJC5leHBvcnRzID0ge1xcblxcbiAgICBpVGFnOiBmdW5jdGlvbigpIHtcXG4gICAgICAgIGlUYWdbXFxcIuaOqOiNkFxcXCJdID0ge307XFxuICAgICAgICBpVGFnW1xcXCLmjqjojZBcXFwiXVtcXFwi5pyA54OtXFxcIl0gPSBcXFwiXFxcIjtcXG4gICAgICAgIGlUYWdbXFxcIuaOqOiNkFxcXCJdW1xcXCLmnIDmlrBcXFwiXSA9IFxcXCImdHlwZT0xXFxcIjtcXG4gICAgICAgIGxldCBsaXN0ID0gcGRmYShmZXRjaChcXFwiaHR0cDovLzVzaW5nLmt1Z291LmNvbS9nZC9nZExpc3RcXFwiKSwgXFxcImJvZHkmJi5yX2xpc3RfdFxcXCIpO1xcbiAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBsaXN0KSB7XFxuICAgICAgICAgICAgbGV0IHQxID0gcGRmaChpdGVtLCBcXFwiaDMmJlRleHRcXFwiKTtcXG4gICAgICAgICAgICBpVGFnW3QxXSA9IHt9O1xcbiAgICAgICAgICAgIHBkZmEoaXRlbSwgXFxcInVsJiZsaVxcXCIpLm1hcChpdCA9PiB7XFxuICAgICAgICAgICAgICAgIHQyID0gcGRmaChpdCwgXFxcImEmJlRleHRcXFwiKTtcXG4gICAgICAgICAgICAgICAgaVRhZ1t0MV1bdDJdID0gdDI7XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuICAgICAgICBpVGFnW1xcXCLmjpLooYxcXFwiXSA9IHtcXG4gICAgICAgICAgICDlhajpg6g6IFtdXFxuICAgICAgICB9O1xcbiAgICAgICAgJC5yZXF1aXJlKFxcXCI1cz9ydWxlPeatjOivjemAgumFjVxcXCIpLmFqYXgoXFxcInJhbmsvbGlzdFxcXCIpLm1hcChfID0+IHtcXG4gICAgICAgICAgICBpZiAoXy5uYW1lICE9ICfmlK/mjIHmppwnKSBpVGFnW1xcXCLmjpLooYxcXFwiXVtcXFwi5YWo6YOoXFxcIl0ucHVzaChFeHRyYSh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBfLm5hbWUsXFxuICAgICAgICAgICAgICAgIGltZzogXy5waG90b0JpZyB8fCBfLnBob3RvLFxcbiAgICAgICAgICAgICAgICBjb250ZW50OiAzLFxcbiAgICAgICAgICAgICAgICB6eWlkOiBfLmlkXFxuICAgICAgICAgICAgfSwgMSwgMSkpO1xcbiAgICAgICAgfSk7XFxuICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihcXFwiNXNfaVRhZ1xcXCIsIGlUYWcpO1xcbiAgICB9LFxcblxcblxcbiAgICBsYXp5OiBmdW5jdGlvbihwbGF0Zm9ybSwgdDEsIHQyKSB7XFxuICAgICAgICBzd2l0Y2ggKFN0cmluZyhwbGF0Zm9ybSkpIHtcXG4gICAgICAgICAgICBjYXNlICcwJzogLy8g5q2M5puy6K+m5oOFXFxuICAgICAgICAgICAgICAgIFt0MSwgdHlwZV0gPSB0MS5zcGxpdCgnIycpO1xcbiAgICAgICAgICAgICAgICB1cmkgPSBgc29uZy9nZXRTb25nVXJsP3NvbmdpZD0ke3QxfSZzb25ndHlwZT0ke3R5cGV9YDtcXG4gICAgICAgICAgICAgICAgXyA9ICQucmVxdWlyZShcXFwiNXM/cnVsZT3mrYzor43pgILphY1cXFwiKS5hamF4KHVyaSk7XFxuICAgICAgICAgICAgICAgIGlmICh0Mikge1xcbiAgICAgICAgICAgICAgICAgICAgYXJyID0gW107XFxuICAgICAgICAgICAgICAgICAgICBhcnIyID0gW107XFxuICAgICAgICAgICAgICAgICAgICBpZiAoXy5scXVybClcXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaCh0c1sxXSArIFNpemUoXy5scXNpemUpKSwgYXJyMi5wdXNoKF8ubHF1cmwpO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKF8uaHF1cmwpXFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2godHNbMl0gKyBTaXplKF8uaHFzaXplKSksIGFycjIucHVzaChfLmhxdXJsKTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChfLnNxdXJsKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKHRzWzNdICsgU2l6ZShfLnNxc2l6ZSkpLCBhcnIyLnB1c2goXy5zcXVybCk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChhcnIsIDEsICfpgInmi6nkuIvovb3pn7PotKgnKS5zZWxlY3QoKGFyciwgYXJyMikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBhcnIuaW5kZXhPZihpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdkb3dubG9hZDovLycgKyBhcnIyW2ldO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgYXJyLCBhcnIyKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAvLyDmrYzor41cXG4gICAgICAgICAgICAgICAgdHlwZSA9IHtcXG4gICAgICAgICAgICAgICAgICAgIHljOiAxLFxcbiAgICAgICAgICAgICAgICAgICAgZmM6IDIsXFxuICAgICAgICAgICAgICAgICAgICBiejogM1xcbiAgICAgICAgICAgICAgICB9W3R5cGVdO1xcbiAgICAgICAgICAgICAgICB1cmwgPSBgaHR0cDovL3NlcnZpY2UuNXNpbmcua3Vnb3UuY29tL3NvbmcvZGV0YWlsP3NvbmdJZD0ke3QxfSZzb25nVHlwZT0ke3R5cGV9YDtcXG4gICAgICAgICAgICAgICAgbHJjID0gSlNPTi5wYXJzZShmZXRjaFBDKHVybCkpLmRhdGEubHlyaWNzLnJlcGxhY2UoLzxiclxcXFwvPz4vZ2ksIFxcXCJcXFxcblxcXCIpO1xcbiAgICAgICAgICAgICAgICAvLyDpk77mjqVcXG4gICAgICAgICAgICAgICAgdXJsID0gXy5scXVybCB8fCBfLmhxdXJsIHx8IF8uc3F1cmw7XFxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgICAgICB1cmxzOiBbdXJsICsgJyNpc011c2ljPXRydWUjJ10sXFxuICAgICAgICAgICAgICAgICAgICBseXJpYzogbHJjXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBjYXNlICcxJzogLy/pppbpobVcXG4gICAgICAgICAgICAgICAgbGV0IGh0bWwgPSBmZXRjaChcXFwiaHR0cDovLzVzaW5nLmt1Z291LmNvbS9nZC9nZExpc3Q/JnRhZ05hbWU9XFxcIiArIHQxICsgXFxcIiZwYWdlPVxcXCIgKyBNWV9QQUdFKTtcXG4gICAgICAgICAgICAgICAgbGV0IGxpc3QgPSBwZGZhKGh0bWwsIFxcXCJib2R5JiYuYWxidW1cXFwiKTtcXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBsaXN0KSB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBwZGZoKGl0ZW0sIFxcXCIuanhfbmFtZSYmVGV4dFxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGltZyA9IHBkZmgoaXRlbSwgXFxcImltZyYmc3JjXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgenlpZCA9IHBkZmgoaXRlbSwgXFxcImEsMSYmc29uZ2xpc3RpZFxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IGltZyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAyLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IHp5aWRcXG4gICAgICAgICAgICAgICAgICAgIH0sIDEpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBjYXNlICcyJzogLy8g5Y+R546wXFxuICAgICAgICAgICAgICAgIGlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgIHVyaSA9IFxcXCJzb25nL2dldHNvbmdsaXN0c29uZz9pZD1cXFwiICsgdDE7XFxuICAgICAgICAgICAgICAgICAgICBfID0gJC5yZXF1aXJlKFxcXCI1cz9ydWxlPeatjOivjemAgumFjVxcXCIpLmFqYXgodXJpKTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIF8gPSBbXTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgY2FzZSAnMyc6IC8vIOaOkuihjFxcbiAgICAgICAgICAgICAgICB1cmkgPSBcXFwicmFuay9kZXRhaWw/cGFnZXNpemU9MzAmcGFnZWluZGV4PVxcXCIgKyBNWV9QQUdFICsgXFxcIiZpZD1cXFwiICsgdDE7XFxuICAgICAgICAgICAgICAgIF8gPSAkLnJlcXVpcmUoXFxcIjVzP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuYWpheCh1cmkpLnNvbmdzO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgIH1cXG4gICAgICAgIGQgPSBbXTtcXG4gICAgICAgIF8ubWFwKF8gPT4ge1xcbiAgICAgICAgICAgIGlmIChfLlNUID09IHVuZGVmaW5lZCB8fCBfLlNUID4gMCkgRXh0cmEoe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogXy5TTiArICcgLSAnICsgXy51c2VyLk5OLFxcbiAgICAgICAgICAgICAgICBpbWc6IF8udXNlci5JLFxcbiAgICAgICAgICAgICAgICBjb250ZW50OiBfLlNLLFxcbiAgICAgICAgICAgICAgICB6eWlkOiBfLklEICsgJyMnICsgXy5TS1xcbiAgICAgICAgICAgIH0sIDEpO1xcbiAgICAgICAgfSk7XFxuICAgICAgICBzZXRSZXN1bHQoZCk7XFxuICAgIH0sXFxuXFxuXFxuXFxuICAgIHNlYXJjaDogZnVuY3Rpb24ocGxhdGZvcm0sIGtleXdvcmQsIGlzVSkge1xcbiAgICAgICAgaWYgKGlzVSAhPSBcXFwidXJsXFxcIikge1xcbiAgICAgICAgICAgIGZpbHRlciA9IHtcXG4gICAgICAgICAgICAgICAgbGliOiAwLFxcbiAgICAgICAgICAgICAgICB5YzogMSxcXG4gICAgICAgICAgICAgICAgZmM6IDIsXFxuICAgICAgICAgICAgICAgIGJ6OiAzXFxuICAgICAgICAgICAgfVtpc1VdO1xcbiAgICAgICAgICAgIHN1cmwgPSAoc3R5cGUpID0+IEpTT04ucGFyc2UoZmV0Y2hQQyhcXFwiaHR0cDovL3NlYXJjaC41c2luZy5rdWdvdS5jb20vaG9tZS9qc29uP2tleXdvcmQ9XFxcIiArIGtleXdvcmQgKyBcXFwiJnNvcnQ9MSZwYWdlPVxcXCIgKyBNWV9QQUdFICsgXFxcIiZmaWx0ZXI9XFxcIiArIGZpbHRlciArIFxcXCImdHlwZT1cXFwiICsgc3R5cGUpKS5saXN0O1xcbiAgICAgICAgICAgIHN3aXRjaCAoU3RyaW5nKHBsYXRmb3JtKSkge1xcbiAgICAgICAgICAgICAgICBjYXNlICcwJzogLy8g5pCc57Si5Y2V5puyXFxuICAgICAgICAgICAgICAgICAgICBzdXJsKCcwJykubWFwKF8gPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oXywgSlNPTi5wYXJzZShmZXRjaFBDKGBodHRwOi8vc2VydmljZS41c2luZy5rdWdvdS5jb20vc29uZy9kZXRhaWw/c29uZ0lkPSR7Xy5zb25nSWR9JnNvbmdUeXBlPSR7Xy50eXBlfWApKS5kYXRhKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfLnNvbmdOYW1lICsgJyAtICcgKyBfLm5pY2tOYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IF8uaW1hZ2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IF8udHlwZUVuYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiBfLnNvbmdJZCArICcjJyArIF8udHlwZUVuYW1lXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICBjYXNlICcxJzogLy8g5pCc57Si5q2M5Y2VXFxuICAgICAgICAgICAgICAgICAgICBzdXJsKCcxJykubWFwKF8gPT4gRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfLnRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogXy5waWN0dXJlVXJsLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IDIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogXy5zb25nTGlzdElkXFxuICAgICAgICAgICAgICAgICAgICB9LCAxKSk7XFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGVsc2UgeyAvLyDmkJzntKIg5YiG5Lqr6ZO+5o6lXFxuICAgICAgICAgICAgc3dpdGNoIChTdHJpbmcocGxhdGZvcm0pKSB7XFxuICAgICAgICAgICAgICAgIGNhc2UgJzAnOiAvLyDmkJzntKLljZXmm7JcXG4gICAgICAgICAgICAgICAgICAgIFt0MSwgdDJdID0ga2V5d29yZC5zcGxpdCgnIycpO1xcbiAgICAgICAgICAgICAgICAgICAgdDMgPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgeWM6IDEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZmM6IDIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgYno6IDNcXG4gICAgICAgICAgICAgICAgICAgIH1bdDJdO1xcbiAgICAgICAgICAgICAgICAgICAgXyA9IEpTT04ucGFyc2UoZmV0Y2hQQyhgaHR0cDovL3NlcnZpY2UuNXNpbmcua3Vnb3UuY29tL3NvbmcvZGV0YWlsP3NvbmdJZD0ke3QxfSZzb25nVHlwZT0ke3QzfWApKS5kYXRhO1xcbiAgICAgICAgICAgICAgICAgICAgRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfLnNvbmdOYW1lICsgJyAtICcgKyBfLm5pY2tOYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogXy5pbWFnZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiB0MixcXG4gICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiBrZXl3b3JkXFxuICAgICAgICAgICAgICAgICAgICB9LCAxKTtcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICBjYXNlICcxJzogLy8g5pCc57Si5q2M5Y2VXFxuICAgICAgICAgICAgICAgICAgICB1cmkgPSBcXFwic29uZy9nZXRzb25nbGlzdD9pZD1cXFwiICsga2V5d29yZDtcXG4gICAgICAgICAgICAgICAgICAgIF8gPSAkLnJlcXVpcmUoXFxcIjVzP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuYWpheCh1cmkpO1xcbiAgICAgICAgICAgICAgICAgICAgRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfLlQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBfLlAgfHwgXy51c2VyLmwsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogMixcXG4gICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiBfLklEXFxuICAgICAgICAgICAgICAgICAgICB9LCAxKTtcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgYWpheDogZnVuY3Rpb24odXJpKSB7XFxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShmZXRjaChcXFwiaHR0cDovL21vYmlsZWFwaS41c2luZy5rdWdvdS5jb20vXFxcIiArIHVyaSkpLmRhdGE7XFxuICAgIH1cXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLinbxteVwiLFwicGF0aFwiOlwibXlcIixcInJ1bGVcIjpcImV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL2xpYj9ydWxlPeatjOivjemAgumFjScpKS5ydWxlKTtcXG5jb25zdCB0aGlzX3BsYXRmb3JtID0gXFxcIm15XFxcIjtcXG4kLmV4cG9ydHMgPSB7XFxuXFxuICAgIGlUYWc6IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgJC5yZXF1aXJlKCd3eT9ydWxlPeatjOivjemAgumFjScpLmlUYWcoMSk7XFxuICAgICAgICBpVGFnW1xcXCLmjpLooYxcXFwiXVtcXFwi5YWo6YOoXFxcIl0gPSAkLnJlcXVpcmUoJ3d5P3J1bGU95q2M6K+N6YCC6YWNJykuYWpheChcXFwidG9wbGlzdD9cXFwiKS5saXN0Lm1hcChfID0+IEV4dHJhKHtcXG4gICAgICAgICAgICB0aXRsZTogXy5uYW1lLFxcbiAgICAgICAgICAgIGltZzogXy5jb3ZlckltZ1VybCxcXG4gICAgICAgICAgICBjb250ZW50OiAzLFxcbiAgICAgICAgICAgIHp5aWQ6IF8uaWRcXG4gICAgICAgIH0sIDEsIDEpKTtcXG4gICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKFxcXCJteV9pVGFnXFxcIiwgaVRhZyk7XFxuICAgIH0sXFxuXFxuXFxuICAgIGxhenk6IGZ1bmN0aW9uKHBsYXRmb3JtLCB0MSwgdDIpIHtcXG4gICAgICAgIHN3aXRjaCAoU3RyaW5nKHBsYXRmb3JtKSkge1xcbiAgICAgICAgICAgIGNhc2UgJzAnOiAvLyDor6bmg4VcXG4gICAgICAgICAgICAgICAgaWYgKHQyKSB7XFxuICAgICAgICAgICAgICAgICAgICBhcnIgPSBbdHNbMF0gKyA5NiwgdHNbMV0gKyAxMjgsIHRzWzJdICsgMzIwLCB0c1szXSArIDIwMDBdO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoYXJyLCAxLCAn6YCJ5oup5LiL6L296Z+z6LSoJykuc2VsZWN0KCh0MSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHQyID0gaW5wdXQuc3BsaXQoJ+OAkScpWzFdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9ICQucmVxdWlyZShcXFwibXk/cnVsZT3mrYzor43pgILphY1cXFwiKS5hamF4KFxcXCJsaW5rXFxcIiwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogdDEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YWxpdHk6IHQyXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gSlNPTi5wYXJzZShmZXRjaCh1cmwsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25seUhlYWRlcnM6IHRydWVcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSkudXJsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnZG93bmxvYWQ6Ly8nICsgdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgdDEpO1xcbiAgICAgICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgICAgIGxyYyA9ICQucmVxdWlyZShcXFwibXk/cnVsZT3mrYzor43pgILphY1cXFwiKS5hamF4KFxcXCJseXJpY1xcXCIsIHtcXG4gICAgICAgICAgICAgICAgICAgIGlkOiB0MVxcbiAgICAgICAgICAgICAgICB9KS5scmM7XFxuICAgICAgICAgICAgICAgIHVybHMgPSBbXTtcXG4gICAgICAgICAgICAgICAgZm9yIChxdWFsaXR5IG9mIFs5NiwgMTI4LCAzMjAsIDIwMDBdKVxcbiAgICAgICAgICAgICAgICAgICAgdXJscy5wdXNoKCQucmVxdWlyZShcXFwibXk/cnVsZT3mrYzor43pgILphY1cXFwiKS5hamF4KFxcXCJsaW5rXFxcIiwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB0MSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWFsaXR5OiBxdWFsaXR5ICsgJydcXG4gICAgICAgICAgICAgICAgICAgIH0pICsgJyNpc011c2ljPXRydWUjJyk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgICAgICB1cmxzOiB1cmxzLFxcbiAgICAgICAgICAgICAgICAgICAgbmFtZXM6IFsn5rWB55WFJywgJ+agh+WHhicsICfpq5jlk4EnLCAn5peg5o2fJ10sXFxuICAgICAgICAgICAgICAgICAgICBseXJpYzogbHJjXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBjYXNlICcxJzogLy/pppbpobVcXG4gICAgICAgICAgICAgICAgaWYgKCF0MS5tYXRjaCgvXFxcXD8vKSkgdDEgPSBcXFwidG9wL3BsYXlsaXN0P2NhdD1cXFwiICsgdDEgKyBcXFwiJlxcXCI7XFxuICAgICAgICAgICAgICAgIF8gPSAkLnJlcXVpcmUoJ3d5P3J1bGU95q2M6K+N6YCC6YWNJykuYWpheCh0MSk7XFxuICAgICAgICAgICAgICAgIChfLnJlc3VsdCB8fCBfLnBsYXlsaXN0cykubWFwKF8gPT4gRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8ubmFtZSxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogXy5jb3ZlckltZ1VybCB8fCBfLnBpY1VybCxcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IDIsXFxuICAgICAgICAgICAgICAgICAgICB6eWlkOiBfLmlkXFxuICAgICAgICAgICAgICAgIH0sIDEpKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIGNhc2UgJzInOiAvLyDlj5HnjrBcXG4gICAgICAgICAgICBjYXNlICczJzogLy8g5o6S6KGMXFxuICAgICAgICAgICAgICAgIGlmIChNWV9QQUdFID09IDEpXFxuICAgICAgICAgICAgICAgICAgICBfID0gJC5yZXF1aXJlKFxcXCJteT9ydWxlPeatjOivjemAgumFjVxcXCIpLmFqYXgoXFxcInNlYXJjaC9wbGF5bGlzdFxcXCIsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXFxcImRcXFwiICsgdDFcXG4gICAgICAgICAgICAgICAgICAgIH0pLmxpc3Q7XFxuICAgICAgICAgICAgICAgIGVsc2VcXG4gICAgICAgICAgICAgICAgICAgIF8gPSBbXTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICB9XFxuICAgICAgICBkID0gW107XFxuICAgICAgICBfLm1hcChfID0+IEV4dHJhKHtcXG4gICAgICAgICAgICB0aXRsZTogXy5uYW1lICsgKF8uYXJ0aXN0ID8gJyAtICcgKyBfLmFydGlzdC5tYXAoXyA9PiBfLm5hbWUpLmpvaW4oJyYnKSA6IFxcXCJcXFwiKSxcXG4gICAgICAgICAgICBpbWc6IF8ucGljIHx8IF8uYWxidW0ucGljLFxcbiAgICAgICAgICAgIGNvbnRlbnQ6ICd3eScsXFxuICAgICAgICAgICAgenlpZDogXy5oYXNoIHx8IF8uaWRcXG4gICAgICAgIH0sIDEpKTtcXG4gICAgICAgIHNldFJlc3VsdChkKTtcXG4gICAgfSxcXG5cXG5cXG5cXG5cXG4gICAgc2VhcmNoOiBmdW5jdGlvbihwbGF0Zm9ybSwga2V5d29yZCwgc3R5cGUsIGlzTmV3KSB7XFxuICAgICAgICBzd2l0Y2ggKFN0cmluZyhwbGF0Zm9ybSkpIHtcXG4gICAgICAgICAgICBjYXNlICcwJzogLy8g5pCc57Si5Y2V5puyXFxuICAgICAgICAgICAgICAgIHN0eXBlID0gc3R5cGUgfHwgJ3d5JztcXG4gICAgICAgICAgICAgICAgc3R5cGUyID0ge1xcbiAgICAgICAgICAgICAgICAgICAgJ3d5JzogJ1lRRCcsXFxuICAgICAgICAgICAgICAgICAgICAna3cnOiAnWVFCJyxcXG4gICAgICAgICAgICAgICAgICAgICdtZyc6IGlzTmV3ID8gJ1lRTScgOiAnbWlndScsXFxuICAgICAgICAgICAgICAgICAgICAnMXQnOiAnMXRpbmcnLFxcbiAgICAgICAgICAgICAgICAgICAgJ2RiJzogJ2RvdWJhbicsXFxuICAgICAgICAgICAgICAgICAgICAnNXknOiAnd3VzaW5neWMnLFxcbiAgICAgICAgICAgICAgICAgICAgJzVmJzogJ3d1c2luZ2ZjJ1xcbiAgICAgICAgICAgICAgICB9W3N0eXBlXTtcXG5cXG4gICAgICAgICAgICAgICAgaWYgKGlzTmV3KSB7XFxuICAgICAgICAgICAgICAgICAgICBfID0gJC5yZXF1aXJlKFxcXCJteT9ydWxlPeatjOivjemAgumFjVxcXCIpLmFqYXgoJ3NlYXJjaCcsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBzdHlwZTIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDoga2V5d29yZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiBNWV9QQUdFLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHY6ICdiZXRhJ1xcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAoXy5saXN0IHx8IFtdKS5tYXAoXyA9PiBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8ubmFtZSArIChfLmFydGlzdCA/ICcgLSAnICsgXy5hcnRpc3QubWFwKF8gPT4gXy5uYW1lKS5qb2luKCcmJykgOiBcXFwiXFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBfLnBpYyB8fCBfLmFsYnVtLnBpYyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBzdHlwZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiBfLmhhc2ggfHwgXy5pZFxcbiAgICAgICAgICAgICAgICAgICAgfSwgMSkpO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgYm9keSA9IFxcXCJ0ZXh0PVxcXCIgKyBrZXl3b3JkICsgXFxcIiZwYWdlPVxcXCIgKyBNWV9QQUdFICsgXFxcIiZ0eXBlPVxcXCIgKyBzdHlwZTI7XFxuICAgICAgICAgICAgICAgICAgICBib2R5ID0gJC5yZXF1aXJlKFxcXCJteT9ydWxlPeatjOivjemAgumFjVxcXCIpLm9sZF9lbmNvZGUoYm9keSk7XFxuICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKGZldGNoKFxcXCJodHRwOi8vYXBpMi5saXVtaW5neWUuY24vbS9hcGkvc2VhcmNoXFxcIiwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBNT0JJTEVfVUEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdPcmlnaW4nOiAnaHR0cHM6Ly90b29sLmxpdW1pbmd5ZS5jbidcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IGJvZHksXFxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcXFwiUE9TVFxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH0pKS5kYXRhLmxpc3QubWFwKF8gPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIExhenkoJ215JywgXy5pZClcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmxzID0gW107XFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXMgPSBbXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXy51cmxfbTRhKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxzLnB1c2goXy51cmxfbTRhICsgJyNpc011c2ljPXRydWUjJyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzLnB1c2godHNbMF0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfLnVybF8xMjgpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybHMucHVzaChfLnVybF8xMjggKyAnI2lzTXVzaWM9dHJ1ZSMnKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXMucHVzaCh0c1sxXSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF8udXJsXzMyMClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJscy5wdXNoKF8udXJsXzMyMCArICcjaXNNdXNpYz10cnVlIycpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lcy5wdXNoKHRzWzJdKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXy51cmxfZmxhYylcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJscy5wdXNoKF8udXJsX2ZsYWMgKyAnI2lzTXVzaWM9dHJ1ZSMnKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXMucHVzaCh0c1szXSk7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXy5uYW1lICsgJyAtICcgKyBfLmFydGlzdCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBfLmNvdmVyIHx8IF8ucGljLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBzdHlwZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogXy5pZFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEsIDAsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsczogdXJscyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXM6IG5hbWVzLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBseXJpYzogXy5scmNcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIGNhc2UgJzEnOiAvLyDmkJzntKLmrYzljZVcXG4gICAgICAgICAgICAgICAgJC5yZXF1aXJlKFxcXCJ3eT9ydWxlPeatjOivjemAgumFjVxcXCIpLnNlYXJjaCgxLCBrZXl3b3JkLCAxKS5tYXAoXyA9PiBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXy5uYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgaW1nOiBfLmNvdmVySW1nVXJsLFxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogMixcXG4gICAgICAgICAgICAgICAgICAgIHp5aWQ6IF8uaWRcXG4gICAgICAgICAgICAgICAgfSwgMSkpO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgIH1cXG4gICAgfSxcXG5cXG5cXG5cXG5cXG5cXG4gICAgYWpheDogZnVuY3Rpb24ocGF0aCwgYm9keSkge1xcbiAgICAgICAgdXJsID0gXFxcImh0dHBzOi8vYXBpLmxpdW1pbmd5ZS5jbi9tL2FwaS9cXFwiICsgcGF0aDtcXG4gICAgICAgIGJvZHkuX3QgPSBEYXRlLm5vdygpICsgJydcXG4gICAgICAgIGJvZHkudG9rZW4gPSAkLnJlcXVpcmUoXFxcIm15P3J1bGU95q2M6K+N6YCC6YWNXFxcIikubmV3X3Rva2VuKGJvZHkpO1xcbiAgICAgICAgaWYgKGJvZHkucXVhbGl0eSAhPSB1bmRlZmluZWQpIHtcXG4gICAgICAgICAgICB1cmkgPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICBmb3IgKGtleSBpbiBib2R5KVxcbiAgICAgICAgICAgICAgICB1cmkgKz0gJyYnICsga2V5ICsgJz0nICsgYm9keVtrZXldO1xcbiAgICAgICAgICAgIHVyaSA9IFN0cmluZyh1cmkpLnJlcGxhY2UoL14mLywgJz8nKTtcXG4gICAgICAgICAgICByZXR1cm4gdXJsICsgdXJpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShmZXRjaCh1cmwsIHtcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBNT0JJTEVfVUEsXFxuICAgICAgICAgICAgICAgICAgICAnT3JpZ2luJzogJ2h0dHBzOi8vdG9vbC5saXVtaW5neWUuY24nLFxcbiAgICAgICAgICAgICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoYm9keSksXFxuICAgICAgICAgICAgICAgIG1ldGhvZDogXFxcIlBPU1RcXFwiXFxuICAgICAgICAgICAgfSkpLmRhdGE7XFxuICAgICAgICB9XFxuICAgIH0sXFxuXFxuXFxuXFxuICAgIG5ld190b2tlbjogZnVuY3Rpb24oYm9keSkge1xcbiAgICAgICAgW3QsIGUsIEFzXSA9IFtcXG4gICAgICAgICAgICBbXFxuICAgICAgICAgICAgICAgIFxcXCIyMDIzMDMyNy5cXFwiLFxcbiAgICAgICAgICAgICAgICBcXFwieUd6NG45WEU5eFl5Mk9qNVViN0U2dTlhNXA1YUlXWlllNTNPcnE1d0U1VWduamJXcTA0MTBXVHZtTEJPMVoyTlxcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCJwVzhqZy9ta2U2Y08xRjRDVHVhaXN3aFpmUUd6TXlxNU5KUkxQVkl2RHhsQTc9RTNZclNVb0gwYjJCWEtuOXRkK1xcXCJcXG4gICAgICAgICAgICBdLFxcbiAgICAgICAgICAgIFtcXG4gICAgICAgICAgICAgICAgXFxcIjIwMjIxMjIyLlxcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCJIMmh1dXdYZjh3TjlDeDVLM2xFUWtkZzRWVENKcUliNDQwUVFYOTVPUXllMUQwOTIyOTJCSTZyZ2pGZ0s5bWN4XFxcIixcXG4gICAgICAgICAgICAgICAgXFxcIlFzVm10NHJwcVBGSnlXY2cxWS9TUkF1TE1UZWRCMzc1WFpORGxPR3hqNmIydmFuOT1DOFVoSEtFK3dpZklrb3owXFxcIlxcbiAgICAgICAgICAgIF1cXG4gICAgICAgIF1bMF07XFxuICAgICAgICB2YXIgYSwgYiwgYywgZCxcXG4gICAgICAgICAgICB2ID0gMCxcXG4gICAgICAgICAgICB0ayA9IFxcXCJcXFwiO1xcbiAgICAgICAgZSA9IGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShib2R5KSkuc3BsaXQoXFxcIlxcXCIpXFxuICAgICAgICAgICAgLm1hcCgodCwgaSkgPT4ge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdC5jaGFyQ29kZUF0KDApIF4gZS5jaGFyQ29kZUF0KE1hdGguZmxvb3IoaSAlIDY0KSlcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgaSA9IGUubGVuZ3RoICUgM1xcbiAgICAgICAgZG8ge1xcbiAgICAgICAgICAgIGEgPSBlW3YrK11cXG4gICAgICAgICAgICBiID0gZVt2KytdXFxuICAgICAgICAgICAgYyA9IGVbdisrXVxcbiAgICAgICAgICAgIGQgPSBhIDw8IDE2IHwgYiA8PCA4IHwgY1xcbiAgICAgICAgICAgIGEgPSBkID4+IDE4ICYgNjNcXG4gICAgICAgICAgICBiID0gZCA+PiAxMiAmIDYzXFxuICAgICAgICAgICAgYyA9IGQgPj4gNiAmIDYzXFxuICAgICAgICAgICAgZCA9IGQgJiA2M1xcbiAgICAgICAgICAgIHRrICs9IEFzLmNoYXJBdChhKSArIEFzLmNoYXJBdChiKSArIEFzLmNoYXJBdChjKSArIEFzLmNoYXJBdChkKVxcbiAgICAgICAgfSB3aGlsZSAodiA8IGUubGVuZ3RoKVxcbiAgICAgICAgcmV0dXJuIHQgKyBtZDUoaSA9PSAwID8gdGsgOiB0ay5zbGljZSgwLCBpIC0gMykgKyAnPT09Jy5zbGljZShpIHx8IDMpKVxcbiAgICB9LFxcblxcblxcblxcbiAgICBvbGRfZW5jb2RlOiBmdW5jdGlvbihlKSB7XFxuICAgICAgICB2YXIgcCA9IG1kNShcXFwiPEc2c1gsTGt+XjI6WSU0WlxcXCIpO1xcbiAgICAgICAgdmFyIGEgPSBtZDUocC5zdWJzdHIoMTYsIDMyKSk7XFxuICAgICAgICB2YXIgdCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCArIDg2NDAwID4+IDA7XFxuICAgICAgICB2YXIgdCA9IHQgKyBtZDUoZSArIGEpLnN1YnN0cigwLCAxNikgKyBlO1xcbiAgICAgICAgdmFyIEUgPSBlID0gXFxcIlxcXCI7XFxuICAgICAgICB2YXIgUjQgPSBSKDQpO1xcbiAgICAgICAgZm9yIChpIGluIHQpIHtcXG4gICAgICAgICAgICBpID0gdC5jaGFyQ29kZUF0KGkpXFxuICAgICAgICAgICAgaWYgKGkgPCAxMjgpIHtcXG4gICAgICAgICAgICAgICAgZSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgZSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGkgPj4gMTIgfCAyMjQpXFxuICAgICAgICAgICAgICAgIGUgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShpID4+IDYgJiA2MyB8IDEyOClcXG4gICAgICAgICAgICAgICAgZSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGkgJiA2MyB8IDEyOClcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgYSA9IG1kNShwLnN1YnN0cigwLCAxNikpO1xcbiAgICAgICAgdmFyIGEgPSBhICsgbWQ1KGEgKyBSNCk7XFxuICAgICAgICBwID0gW107XFxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHBbaV0gPSBpO1xcbiAgICAgICAgSSA9IGIgPSBjID0gdCA9IDA7XFxuICAgICAgICBmb3IgKGkgaW4gcCkge1xcbiAgICAgICAgICAgIEkgPSAoSSArIHBbaV0gKyBhW2kgJSA2NF0uY2hhckNvZGVBdCgpKSAlIDI1NlxcbiAgICAgICAgICAgIFggPSBwW2ldXFxuICAgICAgICAgICAgcFtpXSA9IHBbSV1cXG4gICAgICAgICAgICBwW0ldID0gWFxcbiAgICAgICAgfVxcbiAgICAgICAgZm9yIChpIGluIGUpIHtcXG4gICAgICAgICAgICBJID0gTnVtYmVyKGkpICsgMTtcXG4gICAgICAgICAgICBYID0gcFtJXTtcXG4gICAgICAgICAgICBiID0gKGIgKyBYKSAlIDI1NjtcXG4gICAgICAgICAgICBwW0ldID0gcFtiXTtcXG4gICAgICAgICAgICBwW2JdID0gWDtcXG4gICAgICAgICAgICBFICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoXFxuICAgICAgICAgICAgICAgIGVbaV0uY2hhckNvZGVBdCgpIF5cXG4gICAgICAgICAgICAgICAgcFsocFtJXSArIHBbYl0pICUgMjU2XVxcbiAgICAgICAgICAgICk7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgWiA9IFxcXCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OS1fXFxcIjtcXG4gICAgICAgIGZvciAoXFxuICAgICAgICAgICAgdmFyIE8gPSBcXFwiXFxcIjsgRS5jaGFyQXQodCB8IDApIHx8IChaID0gJz0nLCB0ICUgMSk7IE8gKz0gWi5jaGFyQXQoNjMgJiBjID4+IDggLSB0ICUgMSAqIDgpXFxuICAgICAgICApIGMgPSBjIDw8IDggfCBFLmNoYXJDb2RlQXQodCArPSAwLjc1KTtcXG4gICAgICAgIHJldHVybiBcXFwiZGF0YT1cXFwiICsgUjQgKyBPICsgXFxcIiZ2PTJcXFwiO1xcbiAgICB9XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi4p29cXRcIixcInBhdGhcIjpcInF0XCIsXCJydWxlXCI6XCJldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9saWI/cnVsZT3mrYzor43pgILphY0nKSkucnVsZSk7XFxuY29uc3QgdGhpc19wbGF0Zm9ybSA9ICdxdCc7XFxuTHJjID0gbHJjID0+IHtcXG4gICAgbiA9IGxyYy5yZXBsYWNlKC9cXFxccyooKFxcXFxufChcXFxcdTAwM2N8PClcXFxcLz8oYnJ8cClcXFxcLz8oXFxcXHUwMDNlfD4pKVxcXFxzKikrXFxcXHMqL2dpLCAnXFxcXG4nKS50cmltKCkuc3BsaXQoL1xcXFxuLyk7XFxuICAgIHJldHVybiBuLm1hcCgobGluZUx5cmljLCBpKSA9PiB7XFxuICAgICAgICB0aW1lID0gaSAvIG4ubGVuZ3RoICogMjAwO1xcbiAgICAgICAgbSA9IE1hdGguZmxvb3IodGltZSAvIDYwKTtcXG4gICAgICAgIHMgPSAodGltZSAlIDYwKS50b0ZpeGVkKDMpO1xcbiAgICAgICAgcmV0dXJuIGBbJHttLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX06JHtzLnBhZFN0YXJ0KDYsICcwJyl9XWAgKyBsaW5lTHlyaWNcXG4gICAgfSkuam9pbignXFxcXG4nKTtcXG59XFxuanVpY2VzID0gXyA9PiBfLnJlc3BvbnNlO1xcbnFpYW5xaWFuID0gKHVyaSwganNvbikgPT4ge1xcbiAgICBqc29uLmFwcGlkID0gXFxcIjE2MDczMzYwXFxcIjtcXG4gICAganNvbi50aW1lc3RhbXAgPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxZTMpO1xcbiAgICBib2R5ID0gT2JqZWN0LmtleXMoanNvbikuc29ydCgpXFxuICAgICAgICAubWFwKGtleSA9PiBrZXkgKyAnPScgKyBqc29uW2tleV0pLmpvaW4oJyYnKTtcXG4gICAgYm9keSArPSBcXFwiJnNpZ249XFxcIiArIG1kNShib2R5ICsgXFxcIjBiNTBiMDJmZDBkNzNhOWM0YzhjM2E3ODFjMzA4NDVmXFxcIik7XFxuICAgIHUgPSBgaHR0cHM6Ly9tdXNpYy45MXEuY29tL3YxLyR7dXJpfT9gICsgYm9keTtcXG4gICAgcmV0dXJuIEpTT04ucGFyc2UoZmV0Y2godSkpLmRhdGE7XFxufVxcbiQuZXhwb3J0cyA9IHtcXG4gICAgc2VhcmNoOiBmdW5jdGlvbihwbGF0Zm9ybSwga2V5d29yZCwgcGxhdGZvcm0yKSB7XFxuICAgICAgICBzd2l0Y2ggKFN0cmluZyhwbGF0Zm9ybSkpIHtcXG4gICAgICAgICAgICBjYXNlICcwJzpcXG4gICAgICAgICAgICAgICAgc3dpdGNoIChTdHJpbmcocGxhdGZvcm0yKSkge1xcblxcblxcblxcblxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnYmQnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHFpYW5xaWFuKFxcXCJzZWFyY2hcXFwiLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQ6IGtleXdvcmQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VObzogTVlfUEFHRVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLnR5cGVUcmFjay5tYXAoXyA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghXy5pc1ZpcCkgRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8udGl0bGUgKyAnIC0gJyArIF8uYXJ0aXN0Lm1hcChfID0+IF8ubmFtZSkuam9pbignJicpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBfLnBpYyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICdiZCcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiBfLmlkICsgJyNiZCdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgICAgICAgICBjYXNlICd6eic6XFxuICAgICAgICAgICAgICAgICAgICAgICAgdSA9ICdodHRwczovL3p6MTIzLmNvbSc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZShwb3N0KHUgKyAnL2FqYXgvJywge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5OiBcXFwiYWN0PXNlYXJjaCZrZXk9XFxcIiArIGtleXdvcmQgKyBcXFwiJmxhbmc9JnBhZ2U9XFxcIiArIE1ZX1BBR0VcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSkuZGF0YS5tYXAoXyA9PiBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfLm1uYW1lICsgJyAtICcgKyBfLnNuYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IHUgKyBfLnBpYy5yZXBsYWNlKC9cXFxcPy4qLywgJycpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnenonLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiBfLmlkICsgJyN6eidcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAxKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgICAgICAgICBjYXNlICduaSc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE1ZX1BBR0UgPT0gMSkgaHRtID0gXFxcIi0xLmh0bVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBodG0gPSBcXFwiLTEtXFxcIiArIE1ZX1BBR0UgKyBcXFwiLmh0bVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5d29yZCA9IGVuY29kZVVSSUNvbXBvbmVudChrZXl3b3JkKS5yZXBsYWNlKC8tL2csICdfMmQnKS5yZXBsYWNlKC8lL2csICdfJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCA9IGZldGNoQ29kZUJ5V2ViVmlldyhcXFwiaHR0cHM6Ly93d3cuaGlmaW5pLmNvbS9zZWFyY2gtXFxcIiArIGtleXdvcmQgKyBodG0sIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Jsb2NrUnVsZXMnOiBbJy5qcycsICcuY3NzJywgJy5wbmcnXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dDogNTAwMFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBwZGZhKGh0bWwsIFxcXCJib2R5JiZsaS5tZWRpYVtkYXRhLXRpZF1cXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGl0ZW0gb2YgbGlzdCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGRmaChpdGVtLCBcXFwiYSwyJiZUZXh0XFxcIikgIT0gXFxcIueJueS+m1xcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlID1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZoKGl0ZW0sIFxcXCJhLDEmJlRleHRcXFwiKS5zcGxpdChcXFwi44CLXFxcIilbMF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHRpdGxlLnNwbGl0KFxcXCLjgIpcXFwiKS5yZXZlcnNlKCkuam9pbignIC0gJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogXFxcImh0dHBzOi8vd3d3LmhpZmluaS5jb20vXFxcIiArIHBkZmgoaXRlbSwgXFxcImltZyYmc3JjXFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogJ25pJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiBwZGZoKGl0ZW0sIFxcXCJhLDEmJmhyZWZcXFwiKS5yZXBsYWNlKC9cXFxcRC9nLCAnJykgKyAnI25pJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgICAgICAgICBjYXNlICdmcCc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gcGRmYShmZXRjaChcXFwiaHR0cHM6Ly93d3cuZmFuZ3BpLm5ldC9zL1xcXCIgKyBrZXl3b3JkKSwgXFxcImJvZHkmJltjbGFzcz1yb3ddXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaXRlbSBvZiBsaXN0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoaXRlbSwgXFxcImRpdiwxJiZUZXh0XFxcIikgKyAnIC0gJyArIHBkZmgoaXRlbSwgXFxcImRpdiwyJiZUZXh0XFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiAkLnJlcXVpcmUoJ2ltYWdlP3J1bGU95q2M6K+N6YCC6YWNJykoJ2ZwJyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogJ2ZwJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiBwZGZoKGl0ZW0sIFxcXCJhLDAmJmhyZWZcXFwiKS5yZXBsYWNlKC9cXFxcRC9nLCAnJykgKyAnI2ZwJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgICAgICAgICBjYXNlICdzdCc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IHBkZmEoZmV0Y2goYGh0dHA6Ly93d3cuc29uZ3Rhc3RlLmNvL2RhbmNlL3NlYXJjaD9rZXk9JHtrZXl3b3JkfSZwYWdlPSR7TVlfUEFHRX1gKSwgXFxcImJvZHkmJi5tbGlzdCYmbGlcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGl0ZW0gb2YgbGlzdCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChpdGVtLCBcXFwiLnRkMyYmVGV4dFxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBwZGZoKGl0ZW0sIFxcXCJpbWcmJnNyY1xcXCIpLnJlcGxhY2UoJ3BpY2RhdGEnLCAnYXR0YWNobWVudCcpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogJ3N0JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IHBkZmgoaXRlbSwgXFxcIi50ZDMmJmEmJmhyZWZcXFwiKS5yZXBsYWNlKC8uKlxcXFwvLywgJycpICsgJyNzdCdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnaHQnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IHBkZmEoZmV0Y2goXFxcImh0dHA6Ly9tLmh0cXl5LmNvbS9zZWFyY2gvcmVzdWx0P2lkPVxcXCIgKyBrZXl3b3JkKSwgXFxcImJvZHkmJmxpXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaXRlbSBvZiBsaXN0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoaXRlbSwgXFxcImEsMCYmVGV4dFxcXCIpICsgJyAtICcgKyBwZGZoKGl0ZW0sIFxcXCJlbSwwJiZUZXh0XFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBwZGZoKGl0ZW0sIFxcXCJpbWcmJnNyY1xcXCIpICsgJzBAaGVhZGVycz17XFxcInJlZmVyZXJcXFwiOlxcXCJodHRwOi8vbS5odHF5eS5jb21cXFwifScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogJ2h0JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiBwZGZoKGl0ZW0sIFxcXCIucGxheSYmZGF0YS1pZFxcXCIpICsgJyNodCdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnMXQnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIEpTT04ucGFyc2UoZmV0Y2goYGh0dHBzOi8vc28uMXRpbmcuY29tL3NvbmcvanNvbj9xPSR7a2V5d29yZH0mcGFnZT0ke01ZX1BBR0V9JnNpemU9MzBgKSkucmVzdWx0cy5tYXAoXyA9PiBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfLnNvbmdfbmFtZSArICcgLSAnICsgXy5zaW5nZXJfbmFtZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiAnaHR0cHM6JyArIF8uYWxidW1fY292ZXIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICcxdCcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IF8uc29uZ19pZCArICcjMXQnXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnOXQnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZShmZXRjaChgaHR0cDovL25ldy45c2t5LmNvbS9hcGkvd2VpYm8vY29udGVudC9zZWFyY2g/Y29udGVudD0ke2tleXdvcmR9YCkpLmRhdGEuc29uZ19saXN0Lm1hcChfID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvXk4kL2kudGVzdChfLmlzX3N0YXRpb24pKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IFxcXCJodHRwOi8vbmV3Ljlza3kuY29tL2FwaS9zb25nL2RldGFpbD9pZD1cXFwiICsgXy5zb25nX2lkICsgXFxcIiZpc19sb2dpbj1OXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfID0gSlNPTi5wYXJzZShmZXRjaCh1KSkuZGF0YTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfLnNvbmdfbmFtZSArICcgLSAnICsgXy5tdXNpY2lhbl9uYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IF8uZGlzY19pbWdfdXJsLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnOXQnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiBfLnNvbmdfaWQgKyAnIzl0J1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEsIDAsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXM6IFt0c1sxXV0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybHM6IFtfLnNvbmdfdXJsICsgJyNpc011c2ljPXRydWUjJ10sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxyYzogXy5seXJpY191cmwgfHwgTHJjKF8uZGVzaWduX25vdGVzKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgICAgICAgICBjYXNlICc1bmQnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IHBkZmEoZmV0Y2goXFxcImh0dHA6Ly9tLjVuZC5jb20vc28vc19cXFwiICsga2V5d29yZCksIFxcXCJib2R5JiYubGlzdC1zb25nJiZsaVxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGl0ZW0gb2YgbGlzdCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGl0ZW0sIFxcXCIuc29uZyYmVGV4dFxcXCIpICsgJyAtICcgKyBwZGZoKGl0ZW0sIFxcXCIuYXJ0aXN0JiZUZXh0XFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBwZGZoKGl0ZW0sIFxcXCJpbWcmJnNyY1xcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICc1bmQnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IHBkZmgoaXRlbSwgXFxcImEmJmhyZWZcXFwiKS5yZXBsYWNlKC8uKlxcXFwvfFxcXFwuLiovZywgJycpICsgJyM1bmQnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG5cXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2JpdSc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IHBkZmEoZmV0Y2goXFxcImh0dHBzOi8vYml1Lm1vZS9pbmRleC5waHA/bT0mYz1Tb25nJmE9c2VhcmNoJmRhdGE9XFxcIiArIGtleXdvcmQgKyBcXFwiJnA9XFxcIiArIE1ZX1BBR0UpLCBcXFwiYm9keSYmdGJvZHkmJnRyXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpdGVtIG9mIGxpc3QpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYml1X3NpZCA9IHBkZmgoaXRlbSwgXFxcImEsMCYmaHJlZlxcXCIpLnJlcGxhY2UoL1xcXFxEKy8sIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoaXRlbSwgXFxcImEsMCYmSHRtbFxcXCIpLnJlcGxhY2UoL1xcXFxzKjxzcGFuW1xcXFxzXFxcXFNdKy9pLCBcXFwiXFxcIikgKyAnIC0gJyArIHBkZmgoaXRlbSwgXFxcImEsMSYmVGV4dFxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBcXFwiaHR0cHM6Ly9iaXUubW9lL1Nvbmcvc2hvd0NvdmVyL3NpZC9cXFwiICsgYml1X3NpZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICdiaXUnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogYml1X3NpZCArICcjYml1J1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgICAgICAgICBjYXNlICdibG0nOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIEpTT04ucGFyc2UoZmV0Y2goYGh0dHBzOi8vYmxhY2tibG0uYmFpbGVtaS5jb20vaW5kZXgucGhwL2RhbmNlL3NlYXJjaD9rZXk9JHtrZXl3b3JkfSZwYWdlPSR7TVlfUEFHRX1gKSkuZGFuY2VsaXN0Lm1hcChfID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gXy5kb3dudXJsIHx8IF8ucGxheXVybDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVybCAmJiBfLm5hbWUpIEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfLm5hbWUgKyAnIC0gJyArIChfLnNpbmdlciB8fCBfLnVwX3VzZXIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBfLmNvdmVyIHx8IF8udXBfdXNlcl9sb2dvLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogJ2JsbScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiBfLnNvbmdpZCArICcjYmxtJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxLCAwLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lczogW3RzWzFdXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybHM6IFt1cmwgKyAnI2lzTXVzaWM9dHJ1ZSMnXVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG5cXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ211cyc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IHBkZmEoZmV0Y2goXFxcImh0dHBzOi8vc2t5bXVzLm9yZy90cmFja3MvXFxcIiArIGtleXdvcmQgKyBcXFwiL1xcXCIgKyBNWV9QQUdFKSwgXFxcImJvZHkmJi5mLXRhYmxlXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpdGVtIG9mIGxpc3QpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoaXRlbSwgXFxcIi5hcnRpc3QtbmFtZSYmVGV4dFxcXCIpICsgJyAtICcgKyBwZGZoKGl0ZW0sIFxcXCIudHJhY2stbmFtZSYmVGV4dFxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBwZGZoKGl0ZW0sIFxcXCJpbWcmJnNyY1xcXCIpLnJlcGxhY2UoL14oLispLywgJ2h0dHBzOiQxJykgfHwgJC5yZXF1aXJlKCdpbWFnZT9ydWxlPeatjOivjemAgumFjScpKCdtdXMnKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICdtdXMnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogJ3VuZGVmaW5lZCdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMSwgMCwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXM6IFt0c1sxXV0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxzOiBbXFxcImh0dHBzOlxcXCIgKyBwZGZoKGl0ZW0sIFxcXCIubXAzJiZocmVmXFxcIikgKyAnI2lzTXVzaWM9dHJ1ZSMnXVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgICAgICAgICBjYXNlICdqYW0nOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIEpTT04ucGFyc2UoZmV0Y2goXFxcImh0dHBzOi8vc29scmNsb3VkLmphbWVuZG8uY29tL3NvbHIvamFtY29tP3d0PWpzb24mcm93cz0zMCZxPVxcXCIgKyBrZXl3b3JkICsgXFxcIiZzdGFydD1cXFwiICsgKChNWV9QQUdFIC0gMSkgKiAzMCkpKS5yZXNwb25zZS5kb2NzLm1hcChfID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gXFxcImh0dHBzOi8vcHJvZC0xLnN0b3JhZ2UuamFtZW5kby5jb20vZG93bmxvYWQvdHJhY2svXFxcIiArIF8uaWQgKyBcXFwiL21wMzVcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXy5uYW1lLnJlcGxhY2UoXy5hcnRpc3RfbmFtZSArICcgLSAnLCAnJykgKyAnIC0gJyArIF8uYXJ0aXN0X25hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IFxcXCJodHRwczovL3VzZXJjb250ZW50LmphbWVuZG8uY29tLz90eXBlPWFsYnVtJmlkPVxcXCIgKyBfLmFsYnVtX2lkLnJlcGxhY2UoL1xcXFxEL2csICcnKSArIFxcXCImd2lkdGg9NTAwJnRyYWNraWQ9XFxcIiArIF8uaWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnamFtJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6ICd1bmRlZmluZWQnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEsIDAsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzOiBbdHNbMV1dLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsczogW3VybCArICcjaXNNdXNpYz10cnVlIyddXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnanVpJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gZXZhbChwb3N0KCdodHRwczovL25ldy5teWZyZWVtcDNqdWljZXMuY2MvYXBpL2FwaV9zZWFyY2gucGhwP2NhbGxiYWNrPWp1aWNlcycsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keTogXFxcInE9XFxcIiArIGtleXdvcmQgKyBcXFwiJnBhZ2U9XFxcIiArIE1ZX1BBR0VcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHUgPSBcXFwiaHR0cHM6Ly9ucGxheS5pZG1wM3MuY29tL3N0cmVhbS9cXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvID0gXFxcIkFCQ0RFRkdISktNTlBRUlNUVVZXWFlaYWJjZGVmZ2hqa21ucHFyc3R1dnh5ejEyM1xcXCI7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24ganVpX2QodCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZSA9IFxcXCJcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PSB0KSByZXR1cm4gb1swXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh0IDwgMCAmJiAodCAqPSAtMSwgZSArPSBcXFwiLVxcXCIpOyAwIDwgdDspIHZhbCA9IHBhcnNlSW50KHQgJSA0OCksIHQgPSBwYXJzZUludCh0IC8gNDgpLCBlICs9IG9bdmFsXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMTsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXyA9IGxpc3RbaV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXR0eUlkID0ganVpX2QoXy5vd25lcl9pZCkgKyBcXFwiOlxcXCIgKyBqdWlfZChfLmlkKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8udGl0bGUgKyAnIC0gJyArIF8uYXJ0aXN0LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiAkLnJlcXVpcmUoJ2ltYWdlP3J1bGU95q2M6K+N6YCC6YWNJykoJ2p1aScpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogJ2p1aScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiBfLnByZXR0eUlkXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEsIDAsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzOiBbdHNbMV1dLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsczogW3UgKyBwcmV0dHlJZCArICcjaXNNdXNpYz10cnVlIyddXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG5cXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3kzJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAkc29uZ19kYXRhID0gW107XFxuICAgICAgICAgICAgICAgICAgICAgICAgc29uZ19saXN0ID0gKGksIGlpKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSAkc29uZ19kYXRhW2ldLnNwbGl0KFxcXCJ8fFxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGl0ZW0gb2YgbGlzdCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyA9IGl0ZW0uc3BsaXQoXFxcInxcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfWzRdKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gXFxcImh0dHA6Ly90aW5nNi55eW1wMy5uZXQ6ODIvXFxcIiArIFN0cmluZyhfWzRdKS5yZXBsYWNlKCcud21hJywgJy5tcDMnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfWzFdICsgJyAtICcgKyBfWzNdLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6ICQucmVxdWlyZSgnaW1hZ2U/cnVsZT3mrYzor43pgILphY0nKSgneTMnKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogJ3kzJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogXy5wcmV0dHlJZFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEsIDAsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXM6IFt0c1sxXV0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybHM6IFt1cmwgKyAnI2lzTXVzaWM9dHJ1ZSMnXVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoZmV0Y2hQQyhcXFwiaHR0cDovL3d3dy55eW1wMy5jb20vcC9nZXRzZXIuYXNweD9rZXk9XFxcIiArIGtleXdvcmQgKyBcXFwiJnBhZ2U9XFxcIiArIE1ZX1BBR0UpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG5cXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzM2NSc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAkMzY1X1NlYXJjaFJlc3VsdCh0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGRmYShcXFwiPGJvZHk+XFxcIiArIHQgKyBcXFwiPC9ib2R5PlxcXCIsIFxcXCJib2R5JiZsaVxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBldmFsKFxcXCIkMzY1X1xcXCIgKyBmZXRjaChcXFwiaHR0cDovL2hpdC55dWUzNjUuY29tL3NlYXJjaC5hc3A/cm5kPVxcXCIgKyBNYXRoLnJhbmRvbSgpICsgXFxcIiZrZXl3b3Jkcz1cXFwiICsgZXNjYXBlKGtleXdvcmQpICsgXFxcIiZ0PTFcXFwiKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaXRlbSBvZiBsaXN0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNdXNpY0lkID0gcGRmaChpdGVtLCBcXFwiYSwwJiZocmVmXFxcIikucmVwbGFjZSgvLipcXFxcL3xcXFxcLi4qL2csICcnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IFxcXCJodHRwOi8vOTYuaWVyZ2UuY24vXFxcIiArIHBhcnNlSW50KE11c2ljSWQgLyAzMDAwMCkgKyBcXFwiL1xcXCIgKyBwYXJzZUludChNdXNpY0lkIC8gMjAwMCkgKyBcXFwiL1xcXCIgKyBNdXNpY0lkICsgXFxcIi5tcDNcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGl0ZW0sIFxcXCIubmFtZSYmVGV4dFxcXCIpICsgJyAtICcgKyBwZGZoKGl0ZW0sIFxcXCIuc2luZ2VyJiZUZXh0XFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiAkLnJlcXVpcmUoJ2ltYWdlP3J1bGU95q2M6K+N6YCC6YWNJykoJzM2NScpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICczNjUnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6ICd1bmRlZmluZWQnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxLCAwLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXM6IFt0c1sxXV0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsczogW3VybCArICcjaXNNdXNpYz10cnVlIyddXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG5cXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2t6JzpcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoTVlfUEFHRSA9PSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBcXFwiaHR0cHM6Ly9zbGlkZXIua3ovXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZShmZXRjaCh1ICsgXFxcInZrX2F1dGgucGhwP3E9XFxcIiArIGtleXdvcmQpKVtcXFwiYXVkaW9zXFxcIl1bXFxcIlxcXCJdLm1hcChfID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXy50aXRfYXJ0LnNwbGl0KCcgLSAnKS5yZXZlcnNlKCkuam9pbignIC0gJyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiAkLnJlcXVpcmUoJ2ltYWdlP3J1bGU95q2M6K+N6YCC6YWNJykoJ2t6JyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogJ2t6JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiBfLnp5aWRcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEsIDAsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lczogW3RzWzFdXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxzOiBbdSArIF8udXJsICsgJyNpc011c2ljPXRydWUjJ11cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgICAgICAgICBjYXNlICdreSc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZShwb3N0KCdodHRwOi8vYXBpLmt1YWl5aW4xMjMubmV0L3Evc2VhcmNoJywge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5OiBcXFwicT1cXFwiICsga2V5d29yZCArIFxcXCImY2xpZW50X3Y9Mi43LjEmcGFnZT1cXFwiICsgTVlfUEFHRSArIFxcXCImcGxhdGZvcm09QW5kcm9pZFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJjbGllbnQtdlxcXCI6IFxcXCIyLjcuMVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiZGV2aWNlLWlkXFxcIjogUigxNiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwicGxhdGZvcm1cXFwiOiBcXFwiQW5kcm9pZFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFxcXCJva2h0dHAvMy4xNC40XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJDb25uZWN0aW9uXFxcIjogXFxcIktlZXAtQWxpdmVcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIkNvbnRlbnQtVHlwZVxcXCI6IFxcXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSkuZGF0YS5tdXNpY19saXN0LnJvd3MubWFwKF8gPT4gRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXy50aXRsZSArICcgLSAnICsgXy51c2VyX2luZm8ubmlja25hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogXy5jb3ZlcixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogJ2t5JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogXy56eWlkXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMSwgMCwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lczogW3RzWzFdXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsczogW18ucGxheV91cmwgKyAnI2lzTXVzaWM9dHJ1ZSMnXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbHlyaWM6IF8ubHJjX3VybFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG5cXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RqMSc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgdSA9IFxcXCJodHRwOi8vd3d3Lnp6emRqLmNvbVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IHBkZmEoZmV0Y2hQQyh1ICsgXFxcIi9tdXNpYy9zZWFyY2gtXFxcIiArIGtleXdvcmQgKyBcXFwiP2NhdF9pZD0wJnBhZ2U9XFxcIiArIE1ZX1BBR0UpLCBcXFwiYm9keSYmdGJvZHkmJnRyXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpdGVtIG9mIGxpc3QpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0ubWF0Y2goL2FsdD1cXFwiKC4rPylcXFwiLylbMV0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IHUgKyBpdGVtLm1hdGNoKC9zcmM9XFxcIiguKz8pXFxcIi8pWzFdLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogJ2RqMScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiBpdGVtLm1hdGNoKC9kYXRhLWlkPVxcXCIoXFxcXGQrKVxcXCIvKVsxXSArICcjZGoxJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgICAgICAgICBjYXNlICdkajInOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBwZGZhKGZldGNoUEMoXFxcImh0dHBzOi8vd3d3LmRqdXUuY29tL3NlYXJjaD9tdXNpY25hbWU9XFxcIiArIGtleXdvcmQgKyBcXFwiJmxpc3Q9MiZjaWQ9MCZwYWdlPVxcXCIgKyBNWV9QQUdFKSwgXFxcImJvZHkmJi5saXN0X211c2ljbGlzdCYmdHJbY2xhc3NdXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpdGVtIG9mIGxpc3QpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0ubWF0Y2goL3RpdGxlPVxcXCIoLis/KVxcXCIvKVsxXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogXFxcImh0dHBzOlxcXCIgKyBpdGVtLm1hdGNoKC9zcmM9XFxcIiguKz8pXFxcIi8pWzFdLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogJ2RqMicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiBpdGVtLm1hdGNoKC92YWx1ZT1cXFwiKFxcXFxkKylcXFwiLylbMV0gKyAnI2RqMidcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGozJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICB1ID0gXFxcImh0dHA6Ly93d3cubGFsYWRqLmNvbVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IHBkZmEoZmV0Y2hQQyh1ICsgXFxcIi9zZWFyY2g/c2VhcmNoPVxcXCIgKyBrZXl3b3JkICsgXFxcIiZwYWdlPVxcXCIgKyBNWV9QQUdFKSwgXFxcImJvZHkmJi5saXN0X211c2ljbGlzdCYmdHJbY2xhc3NdXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpdGVtIG9mIGxpc3QpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoaXRlbSwgXFxcIi50MSYmVGV4dFxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiB1ICsgaXRlbS5tYXRjaCgvc3JjPVxcXCIoLis/KVxcXCIvKVsxXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICdkajMnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogaXRlbS5tYXRjaCgvdmFsdWU9XFxcIihcXFxcZCspXFxcIi8pWzFdICsgJyNkajMnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG5cXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RqNCc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IHBkZmEoZmV0Y2hQQyhcXFwiaHR0cHM6Ly9tLmFoYWRqLmNvbS9zZWFyY2gvP2tleT1cXFwiICsga2V5d29yZCArIFxcXCImcGFnZT1cXFwiICsgTVlfUEFHRSArIFxcXCIuaHRtbFxcXCIpLCBcXFwiYm9keSYmLnlpbnl1ZV9saXN0JiZsaVxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaXRlbSBvZiBsaXN0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gcGRmaChpdGVtLCBcXFwiaDMmJlRleHRcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gXFxcImh0dHBzOi8vc3QuOTJrdS5jb20vendjcy9cXFwiICsgdGl0bGUgKyBcXFwiLm1wNFxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogcGRmaChpdGVtLCBcXFwiaW1nJiZzcmNcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICdkajQnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogcGRmaChpdGVtLCBcXFwiYSwwJiZocmVmXFxcIikucmVwbGFjZSgvXFxcXEQvZywgJycpICsgJyNkajQnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEsIDAsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzOiBbdHNbMF1dLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsczogW3VybCArICcjaXNNdXNpYz10cnVlIyddXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG5cXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RqNSc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgdSA9ICdodHRwczovL3d3dy5kai5uZXQvJztcXG4gICAgICAgICAgICAgICAgICAgICAgICBfID0gcG9zdCh1ICsgJ3NlYXJjaC5waHA/bW9kPW11c2ljJmZvcm1oYXNoPThjOTY0ZThhJnNyY2h0eHQ9JyArIGVuY29kZVN0cihrZXl3b3JkLCAnR0JLJykgKyAnJnNlYXJjaHN1Ym1pdD15ZXMnLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb250ZW50LXR5cGUnOiAndGV4dC9odG1sOyBjaGFyc2V0PWdiaycsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0OiBmYWxzZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25seUhlYWRlcnM6IHRydWVcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSB1ICsgSlNPTi5wYXJzZShfKS5oZWFkZXJzLmxvY2F0aW9uWzBdICsgXFxcIiZwYWdlPVxcXCIgKyBNWV9QQUdFO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBwZGZhKGZldGNoKHVybCksIFxcXCJib2R5JiYubXVzaWMtbGlzdCYmbGlcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGl0ZW0gb2YgbGlzdCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChpdGVtLCBcXFwiYSwxJiZUZXh0XFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IHUgKyBwZGZoKGl0ZW0sIFxcXCJpbWcmJnNyY1xcXCIpLnJlcGxhY2UoXFxcIiZzaXplPXNtYWxsXFxcIiwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogJ2RqNScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiBwZGZoKGl0ZW0sIFxcXCJhLDEmJmhyZWZcXFwiKS5tYXRjaCgvaWQ9KFxcXFxkKykvKVsxXSArICcjZGo1J1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgICAgICAgICBjYXNlICdkajYnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHUgPSAnaHR0cDovL3d3dy4zNmRqLmNvbS9lL3NlYXJjaC8nO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIF8gPSBwb3N0KHUgKyAnaW5kZXgucGhwJywge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5OiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc2lkOiAnMSwyLDMsNCcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlib2FyZDoga2V5d29yZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1pdDogJycsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93OiAndGl0bGUnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGlkOiAnMSdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3Q6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmx5SGVhZGVyczogdHJ1ZVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHUgKz0gSlNPTi5wYXJzZShfKS5oZWFkZXJzLmxvY2F0aW9uWzBdICsgXFxcIiZwYWdlPVxcXCIgKyAoTVlfUEFHRSAtIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBwZGZhKGZldGNoKHUpLCBcXFwiYm9keSYmI3BsYXlsaXN0JiZsaVxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaXRlbSBvZiBsaXN0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGl0ZW0sIFxcXCJhLDAmJlRleHRcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogJC5yZXF1aXJlKCdpbWFnZT9ydWxlPeatjOivjemAgumFjScpKCdkajYnKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICdkajYnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogaXRlbS5tYXRjaCgvdmFsdWU9XFxcIihcXFxcZCspXFxcIi8pWzFdICsgJyNkajYnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG5cXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RqNyc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgdSA9ICdodHRwczovL3d3dy43aWRqLmNvbS9lL3NlYXJjaC8nXFxuICAgICAgICAgICAgICAgICAgICAgICAgXyA9IHBvc3QodSArICdpbmRleC5waHAnLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWJvYXJkOiBrZXl3b3JkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdzogJ3RpdGxlJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdDogZmFsc2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ubHlIZWFkZXJzOiB0cnVlXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdSArPSBKU09OLnBhcnNlKF8pLmhlYWRlcnMubG9jYXRpb25bMF0gKyBcXFwiJnBhZ2U9XFxcIiArIChNWV9QQUdFIC0gMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IHBkZmEoZmV0Y2godSksIFxcXCJib2R5JiZsaVtkYXRhLWlkXVxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaXRlbSBvZiBsaXN0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGl0ZW0sIFxcXCJhLDAmJlRleHRcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogJC5yZXF1aXJlKCdpbWFnZT9ydWxlPeatjOivjemAgumFjScpKCdkajcnKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICdkajcnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogaXRlbS5tYXRjaCgvZGF0YS1pZD1cXFwiKFxcXFxkKylcXFwiLylbMV0gKyAnI2RqNydcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcblxcblxcblxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGo4JzpcXG4gICAgICAgICAgICAgICAgICAgICAgICB1ID0gJ2h0dHBzOi8vd3d3LmRqdTguY29tLyc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSA9IGZldGNoUEModSArICdrZXkvbWxfJyArIGVuY29kZVN0cihrZXl3b3JkLCAnR0JLJykgKyAnXycgKyBNWV9QQUdFICsgJy5odG1sJywge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29udGVudC10eXBlJzogJ3RleHQvaHRtbDsgY2hhcnNldD1nYjIzMTInLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlZmVyZXInOiB1XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gcGRmYShpdGVtLCBcXFwiYm9keSYmI2Rqb3VyJiZsaVtvbm1vdXNlb3Zlcl1cXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGl0ZW0gb2YgbGlzdCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChpdGVtLCBcXFwiYSwwJiZUZXh0XFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6ICQucmVxdWlyZSgnaW1hZ2U/cnVsZT3mrYzor43pgILphY0nKSgnZGo4JyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnZGo4JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IGl0ZW0ubWF0Y2goL3ZhbHVlPVxcXCIoXFxcXGQrKVxcXCIvKVsxXSArICcjZGo4J1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgICAgICAgICBjYXNlICdkajknOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHUgPSAnaHR0cHM6Ly93d3cuZGp5eXkuY29tL3NlYXJjaC5waHA/YWM9ZGoma2V5PScgKyBrZXl3b3JkICsgJyZwYWdlcz0nICsgTVlfUEFHRTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gcGRmYShmZXRjaFBDKHUpLCBcXFwiYm9keSYmbGlbZGF0YS1pZF0gXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpdGVtIG9mIGxpc3QpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoaXRlbSwgXFxcImEsMCYmVGV4dFxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiAkLnJlcXVpcmUoJ2ltYWdlP3J1bGU95q2M6K+N6YCC6YWNJykoJ2RqOScpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogJ2RqOScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiBpdGVtLm1hdGNoKC9kYXRhLWlkPVxcXCIoXFxcXGQrKVxcXCIvKVsxXSArICcjZGo5J1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi5o6l5Y+j6ZSZ6K+vflxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuayoeacieWPr+S7peaQnOe0ouatjOWNleeahOaOpeWPo35cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIGxhenk6IGZ1bmN0aW9uKHBsYXRmb3JtLCB0MSwgdDIpIHtcXG4gICAgICAgIFt0MSwgcGxhdGZvcm0sIHR5cGVdID0gdDEuc3BsaXQoJyMnKTtcXG4gICAgICAgIHN3aXRjaCAoU3RyaW5nKHBsYXRmb3JtKSkge1xcblxcblxcblxcblxcbiAgICAgICAgICAgIGNhc2UgJ2JkJzpcXG4gICAgICAgICAgICAgICAgXyA9IHFpYW5xaWFuKFxcXCJzb25nL3RyYWNrbGlua1xcXCIsIHtcXG4gICAgICAgICAgICAgICAgICAgIFRTSUQ6IHQxXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBpZiAodDIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFt0c1sxXV0sIDEsICfpgInmi6nkuIvovb3pn7PotKgnKS5zZWxlY3QoKHVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnZG93bmxvYWQ6Ly8nICsgdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgXy5wYXRoKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICAgICAgdXJsczogW18ucGF0aCArICcjaXNNdXNpYz10cnVlIyddLFxcbiAgICAgICAgICAgICAgICAgICAgbHJjOiBfLmx5cmljXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG5cXG4gICAgICAgICAgICBjYXNlICd6eic6XFxuICAgICAgICAgICAgICAgIHUgPSAnaHR0cHM6Ly96ejEyMy5jb20nO1xcbiAgICAgICAgICAgICAgICBfID0gSlNPTi5wYXJzZShwb3N0KHUgKyAnL2FqYXgvJywge1xcbiAgICAgICAgICAgICAgICAgICAgYm9keTogXFxcImFjdD1zb25naW5mbyZpZD1cXFwiICsgdDEgKyBcXFwiJmxhbmc9XFxcIlxcbiAgICAgICAgICAgICAgICB9KSkuZGF0YTtcXG4gICAgICAgICAgICAgICAgdXJsID0gdSArIF8ubXAzO1xcbiAgICAgICAgICAgICAgICBpZiAodDIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFt0c1sxXV0sIDEsICfpgInmi6nkuIvovb3pn7PotKgnKS5zZWxlY3QoKHVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IEpTT04ucGFyc2UocmVxdWVzdCh1cmwsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25seUhlYWRlcnM6IHRydWVcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSkudXJsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnZG93bmxvYWQ6Ly8nICsgdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgdXJsKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICAgICAgdXJsczogW3VybCArICcjaXNNdXNpYz10cnVlIyddLFxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogW3tcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVyOiB1XFxuICAgICAgICAgICAgICAgICAgICB9XSxcXG4gICAgICAgICAgICAgICAgICAgIGx5cmljOiBfLmxyYy5yZXBsYWNlKC9cXFxcci9nLCAnJylcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcbiAgICAgICAgICAgIGNhc2UgJ25pJzpcXG4gICAgICAgICAgICAgICAgdSA9IFxcXCJodHRwczovL3d3dy5oaWZpbmkuY29tL1xcXCI7XFxuICAgICAgICAgICAgICAgIGl0ZW0gPSBwZGZoKGZldGNoKHUgKyBgdGhyZWFkLSR7dDF9Lmh0bWApLCBcXFwiZGl2Lm1lc3NhZ2UuYnJlYWstYWxsJiZIdG1sXFxcIik7XFxuICAgICAgICAgICAgICAgIHVybCA9IHUgKyBpdGVtLm1hdGNoKC91cmw6XFxcXHMqW1xcXCInXShbXlxcXCInXSspLylbMV07XFxuICAgICAgICAgICAgICAgIGlmICh0Mikge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoW3RzWzFdXSwgMSwgJ+mAieaLqeS4i+i9vemfs+i0qCcpLnNlbGVjdCgodXJsKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdkb3dubG9hZDovLycgKyB1cmw7XFxuICAgICAgICAgICAgICAgICAgICB9LCB1cmwpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGxyYyA9IGl0ZW0ucmVwbGFjZSgvXltcXFxcc1xcXFxTXSs/PFxcXFwvaDU+fDxoNVtePl0qPltcXFxcc1xcXFxTXSsvZ2ksIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgIHVybHM6IFt1cmwgKyAnI2lzTXVzaWM9dHJ1ZSMnXSxcXG4gICAgICAgICAgICAgICAgICAgIGx5cmljOiBMcmMobHJjKVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgY2FzZSAnZnAnOlxcbiAgICAgICAgICAgICAgICB1cmwgPSBKU09OLnBhcnNlKGZldGNoKFxcXCJodHRwczovL3d3dy5mYW5ncGkubmV0L2FwaS9wbGF5X3VybD9pZD1cXFwiICsgdDEgKyBcXFwiJmpzb249MVxcXCIpKS5kYXRhLnVybDtcXG4gICAgICAgICAgICAgICAgaWYgKHQyKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChbdHNbMV1dLCAxLCAn6YCJ5oup5LiL6L296Z+z6LSoJykuc2VsZWN0KCh1cmwpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2Rvd25sb2FkOi8vJyArIHVybDtcXG4gICAgICAgICAgICAgICAgICAgIH0sIHVybCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgIHVybHM6IFt1cmwgKyAnI2lzTXVzaWM9dHJ1ZSMnXSxcXG4gICAgICAgICAgICAgICAgICAgIGx5cmljOiBcXFwiaHR0cHM6Ly93d3cuZmFuZ3BpLm5ldC9kb3dubG9hZC9scmMvXFxcIiArIHQxXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG5cXG5cXG4gICAgICAgICAgICBjYXNlICdzdCc6XFxuICAgICAgICAgICAgICAgIGl0ZW0gPSBmZXRjaFBDKFxcXCJodHRwOi8vd3d3LnNvbmd0YXN0ZS5jby9zb25nL1xcXCIgKyB0MSk7XFxuICAgICAgICAgICAgICAgIHVybCA9IHBkZmgoaXRlbSwgXFxcInNvdXJjZSwwJiZzcmNcXFwiKTtcXG4gICAgICAgICAgICAgICAgaWYgKHQyKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChbdHNbMV1dLCAxLCAn6YCJ5oup5LiL6L296Z+z6LSoJykuc2VsZWN0KCh1cmwpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2Rvd25sb2FkOi8vJyArIHVybDtcXG4gICAgICAgICAgICAgICAgICAgIH0sIHVybCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgZXZhbChTdHJpbmcoaXRlbS5tYXRjaCgvbHJjID0gYFtcXFxcc1xcXFxTXSo/YDsvKVswXSkpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICAgICAgdXJsczogW3VybCArICcjaXNNdXNpYz10cnVlIyddLFxcbiAgICAgICAgICAgICAgICAgICAgbHlyaWM6IExyYyhscmMpXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG5cXG4gICAgICAgICAgICBjYXNlICdodCc6XFxuICAgICAgICAgICAgICAgIHUgPSBcXFwiaHR0cDovL20uaHRxeXkuY29tL3BsYXkvXFxcIiArIHQxO1xcbiAgICAgICAgICAgICAgICBjb2RlID0gZXhlY3V0ZVdlYlJ1bGUodSwgJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29kZTtcXG4gICAgICAgICAgICAgICAgfSksIHtcXG4gICAgICAgICAgICAgICAgICAgIGJsb2NrUnVsZXM6IFsnLmpzJywgJy5jc3MnLCAnLmpwZycsICcucG5nJywgJy5naWYnLCAnLnN2ZycsICcuaWNvJ11cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIHVybCA9IFxcXCJodHRwOi8vZjUuaHRxeXkuY29tL3BsYXk5L1xcXCIgKyB0MSArIFxcXCIvbXAzL1xcXCIgKyBjb2RlO1xcbiAgICAgICAgICAgICAgICBpZiAodDIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFt0c1sxXV0sIDEsICfpgInmi6nkuIvovb3pn7PotKgnKS5zZWxlY3QoKHVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnZG93bmxvYWQ6Ly8nICsgdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgdXJsKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICAgICAgdXJsczogW3VybCArICcjaXNNdXNpYz10cnVlIyddLFxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogW3tcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVyOiB1XFxuICAgICAgICAgICAgICAgICAgICB9XVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgY2FzZSAnMXQnOlxcbiAgICAgICAgICAgICAgICB1ID0gXFxcImh0dHBzOi8vd3d3LjF0aW5nLmNvbVxcXCI7XFxuICAgICAgICAgICAgICAgIHBhdGggPSBleGVjdXRlV2ViUnVsZShgaHR0cHM6Ly9oNS4xdGluZy5jb20vc29uZy9gICsgdDEsICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdfc29uZ19tZXRhLnNvbmdfcGF0aDtcXG4gICAgICAgICAgICAgICAgfSksIHtcXG4gICAgICAgICAgICAgICAgICAgIGJsb2NrUnVsZXM6IFsnLmpzJywgJy5jc3MnLCAnLmpwZycsICcucG5nJywgJy5naWYnLCAnLnN2ZycsICcuaWNvJ11cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIHVybCA9IHUgKyBcXFwiL2FwaS9hdWRpbz9cXFwiICsgcGF0aDtcXG4gICAgICAgICAgICAgICAgaGVhZCA9IHtcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVyOiB1XFxuICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgb25seUhlYWRlcnM6IHRydWVcXG4gICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgaWYgKHQyKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChbdHNbMV1dLCAxLCAn6YCJ5oup5LiL6L296Z+z6LSoJykuc2VsZWN0KCh1cmwsIGhlYWQpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSBKU09OLnBhcnNlKGZldGNoKHVybCwgaGVhZCkpLnVybDtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2Rvd25sb2FkOi8vJyArIHVybDtcXG4gICAgICAgICAgICAgICAgICAgIH0sIHVybCwgaGVhZCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgbHJjID0gdSArIFxcXCIvdG91Y2gvYXBpL2x5cmljL1xcXCIgKyB0MTtcXG4gICAgICAgICAgICAgICAgbHJjID0gSlNPTi5wYXJzZShmZXRjaChscmMpKS5seXJpY19jb250ZW50O1xcbiAgICAgICAgICAgICAgICBpZiAoIWxyYy5tYXRjaCgvXFxcXFtcXFxcZCs6XFxcXGQrLykpXFxuICAgICAgICAgICAgICAgICAgICBscmMgPSBMcmMobHJjKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgIHVybHM6IFt1cmwgKyAnI2lzTXVzaWM9dHJ1ZSMnXSxcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IFt7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlcjogdVxcbiAgICAgICAgICAgICAgICAgICAgfV0sXFxuICAgICAgICAgICAgICAgICAgICBseXJpYzogbHJjXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG5cXG4gICAgICAgICAgICBjYXNlICc5dCc6XFxuICAgICAgICAgICAgICAgIHUgPSBcXFwiaHR0cDovL25ldy45c2t5LmNvbS9hcGkvc29uZy9kZXRhaWw/aWQ9XFxcIiArIHQxICsgXFxcIiZpc19sb2dpbj1OXFxcIjtcXG4gICAgICAgICAgICAgICAgXyA9IEpTT04ucGFyc2UoZmV0Y2godSkpLmRhdGE7XFxuICAgICAgICAgICAgICAgIGlmICh0Mikge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoW3RzWzFdXSwgMSwgJ+mAieaLqeS4i+i9vemfs+i0qCcpLnNlbGVjdCgodXJsKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdkb3dubG9hZDovLycgKyB1cmw7XFxuICAgICAgICAgICAgICAgICAgICB9LCBfLnNvbmdfdXJsKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICAgICAgdXJsczogW18uc29uZ191cmwgKyAnI2lzTXVzaWM9dHJ1ZSMnXSxcXG4gICAgICAgICAgICAgICAgICAgIGxyYzogXy5seXJpY191cmwgfHwgTHJjKF8uZGVzaWduX25vdGVzKVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgY2FzZSAnNW5kJzpcXG4gICAgICAgICAgICAgICAgaXRlbSA9IGZldGNoKGBodHRwOi8vbS41bmQuY29tL3RpbmcvJHt0MX0uaHRtbGApO1xcbiAgICAgICAgICAgICAgICBldmFsKGl0ZW0ubWF0Y2goL21wMyA9IC4qPzsvKVswXSk7XFxuICAgICAgICAgICAgICAgIHVybCA9ICdodHRwOi8vbXBnZS41bmQuY29tLycgKyBtcDM7XFxuICAgICAgICAgICAgICAgIGlmICh0Mikge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoW3RzWzFdXSwgMSwgJ+mAieaLqeS4i+i9vemfs+i0qCcpLnNlbGVjdCgodXJsKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdkb3dubG9hZDovLycgKyB1cmw7XFxuICAgICAgICAgICAgICAgICAgICB9LCB1cmwpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGxyYyA9IHBkZmgoaXRlbSwgXFxcIiNscmNjb250JiZIdG1sXFxcIikucmVwbGFjZSgvPFxcXFwhLS0uKj8tLT58PGJyXFxcXC8/Pi9naSwgJ1xcXFxuJylcXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgIHVybHM6IFt1cmwgKyAnI2lzTXVzaWM9dHJ1ZSMnXSxcXG4gICAgICAgICAgICAgICAgICAgIGx5cmljOiBscmNcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcbiAgICAgICAgICAgIGNhc2UgJ2JpdSc6XFxuICAgICAgICAgICAgICAgIHVybCA9IEpTT04ucGFyc2UoZmV0Y2goXFxcImh0dHBzOi8vYml1Lm1vZS9Tb25nL3BsYXlTSUQvc2lkL1xcXCIgKyB0MSkpLnVybGluZm8udXJsO1xcbiAgICAgICAgICAgICAgICBpZiAodDIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFt0c1sxXV0sIDEsICfpgInmi6nkuIvovb3pn7PotKgnKS5zZWxlY3QoKHVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnZG93bmxvYWQ6Ly8nICsgdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgdXJsKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBscmMgPSBwZGZoKGZldGNoKFxcXCJodHRwczovL2JpdS5tb2Uvc1xcXCIgKyB0MSksIFxcXCIuYW0tcG9wdXAtYmQmJkh0bWxcXFwiKS5yZXBsYWNlKC88KGJ1dHRvbikuKj9cXFxcMT58PFxcXFwvP2JyXFxcXC8/Pi9naSwgXFxcIlxcXFxuXFxcIik7XFxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgICAgICB1cmxzOiBbdXJsICsgJyNpc011c2ljPXRydWUjJ10sXFxuICAgICAgICAgICAgICAgICAgICBseXJpYzogbHJjXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG5cXG4gICAgICAgICAgICBjYXNlICdibG0nOlxcbiAgICAgICAgICAgICAgICB1ID0gJ2h0dHBzOi8vYmxhY2tibG0uYmFpbGVtaS5jb20vaW5kZXgucGhwL2RhbmNlL3BsYXkvaWQvJyArIHQxO1xcbiAgICAgICAgICAgICAgICBfID0gSlNPTi5wYXJzZShmZXRjaCh1KSk7XFxuICAgICAgICAgICAgICAgIHVybCA9IF8uZG93bnVybCB8fCBfLnBsYXl1cmw7XFxuICAgICAgICAgICAgICAgIGlmICh0Mikge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoW3RzWzFdXSwgMSwgJ+mAieaLqeS4i+i9vemfs+i0qCcpLnNlbGVjdCgodXJsKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdkb3dubG9hZDovLycgKyB1cmw7XFxuICAgICAgICAgICAgICAgICAgICB9LCB1cmwpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiB1cmwgKyAnI2lzTXVzaWM9dHJ1ZSMnO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG5cXG4gICAgICAgICAgICBjYXNlICdkajEnOlxcbiAgICAgICAgICAgICAgICBpdGVtID0gZmV0Y2hQQyhcXFwiaHR0cDovL3d3dy56enpkai5jb20vbXVzaWMvaW5mby1cXFwiICsgdDEpO1xcbiAgICAgICAgICAgICAgICB1cmwgPSBwZGZoKGl0ZW0sIFxcXCJhdWRpbyYmc3JjXFxcIik7XFxuICAgICAgICAgICAgICAgIGlmICh0Mikge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoW3RzWzBdXSwgMSwgJ+mAieaLqeS4i+i9vemfs+i0qCcpLnNlbGVjdCgodXJsKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdkb3dubG9hZDovLycgKyB1cmw7XFxuICAgICAgICAgICAgICAgICAgICB9LCB1cmwpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiB1cmwgKyAnI2lzTXVzaWM9dHJ1ZSMnO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG5cXG4gICAgICAgICAgICBjYXNlICdkajInOlxcbiAgICAgICAgICAgICAgICB1cmkgPSBKU09OLnBhcnNlKGZldGNoUEMoXFxcImh0dHBzOi8vd3d3LmRqdXUuY29tL3dhcC9wbGF5L3BsYXk/aWQ9XFxcIiArIHQxKSkuZGF0YS5saXN0ZW51cmw7XFxuICAgICAgICAgICAgICAgIHVybCA9IGBodHRwOi8vbXA0LmRqdXUuY29tLyR7dXJpfS5tNGFgO1xcbiAgICAgICAgICAgICAgICBpZiAodDIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFt0c1swXV0sIDEsICfpgInmi6nkuIvovb3pn7PotKgnKS5zZWxlY3QoKHVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnZG93bmxvYWQ6Ly8nICsgdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgdXJsKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gdXJsICsgJyNpc011c2ljPXRydWUjJztcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgY2FzZSAnZGozJzpcXG4gICAgICAgICAgICAgICAgdXJsID0gSlNPTi5wYXJzZShmZXRjaFBDKFxcXCJodHRwOi8vd3d3LmxhbGFkai5jb20vaW5kZXgvaW5kZXgvZ2V0X2Nvb2tpZVxcXCIsIHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJoZWFkZXJzXFxcIjoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBgc29uZ19saXN0PXRoaW5rOlt7XFxcImlkXFxcIjpcXFwiJHt0MX1cXFwifV07YFxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KSkuZGF0YVswXS5wYXRoO1xcbiAgICAgICAgICAgICAgICBpZiAodDIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFt0c1swXV0sIDEsICfpgInmi6nkuIvovb3pn7PotKgnKS5zZWxlY3QoKHVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnZG93bmxvYWQ6Ly8nICsgdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgdXJsKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gdXJsICsgJyNpc011c2ljPXRydWUjJztcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgY2FzZSAnZGo0JzpcXG4gICAgICAgICAgICAgICAgdXJpID0gZXhlY3V0ZVdlYlJ1bGUoXFxcImh0dHBzOi8vd3d3LmFoYWRqLmNvbS9tdXNpYy9cXFwiICsgdDEgKyBcXFwiLmh0bWxcXFwiLCAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYW5jZUZpbGVQYXRoO1xcbiAgICAgICAgICAgICAgICB9KSwge1xcbiAgICAgICAgICAgICAgICAgICAgYmxvY2tSdWxlczogWycuanMnLCAnLmNzcycsICcuanBnJywgJy5wbmcnLCAnLmdpZicsICcuc3ZnJywgJy5pY28nXVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgdXJsID0gYGh0dHBzOi8vc3QuOTJrdS5jb20vYCArIHVyaTtcXG4gICAgICAgICAgICAgICAgaWYgKHQyKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChbdHNbMF1dLCAxLCAn6YCJ5oup5LiL6L296Z+z6LSoJykuc2VsZWN0KCh1cmwpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2Rvd25sb2FkOi8vJyArIHVybDtcXG4gICAgICAgICAgICAgICAgICAgIH0sIHVybCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVybCArICcjaXNNdXNpYz10cnVlIyc7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcbiAgICAgICAgICAgIGNhc2UgJ2RqNSc6XFxuICAgICAgICAgICAgICAgIF8gPSBwb3N0KCdodHRwczovL20uZGoubmV0L3RlbXBsYXRlL3poemhfZHptdXNpYy9hamF4Lz9hY3Rpb249Z2V0dXJsJywge1xcbiAgICAgICAgICAgICAgICAgICAgYm9keTogXFxcImlkPVxcXCIgKyB0MVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgdXJsID0gXFxcImh0dHBzOi8vZGpuZXQuc3JjLmRqLm5ldDo0NDMxL1xcXCIgKyBKU09OLnBhcnNlKF8pLmRhdGFbMF0uc3JjO1xcbiAgICAgICAgICAgICAgICBpZiAodDIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFt0c1swXV0sIDEsICfpgInmi6nkuIvovb3pn7PotKgnKS5zZWxlY3QoKHVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnZG93bmxvYWQ6Ly8nICsgdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgdXJsKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gdXJsICsgJyNpc011c2ljPXRydWUjJztcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgY2FzZSAnZGo2JzpcXG4gICAgICAgICAgICAgICAgdXJpID0gZXhlY3V0ZVdlYlJ1bGUoXFxcImh0dHA6Ly93d3cuMzZkai5jb20vcGxheS9cXFwiICsgdDEgKyBcXFwiLmh0bWxcXFwiLCAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmZvLnBsYXl1cmw7XFxuICAgICAgICAgICAgICAgIH0pLCB7XFxuICAgICAgICAgICAgICAgICAgICBibG9ja1J1bGVzOiBbJy5qcycsICcuY3NzJywgJy5qcGcnLCAnLnBuZycsICcuZ2lmJywgJy5zdmcnLCAnLmljbycsICcvZS8nXVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgdXJsID0gYGh0dHA6Ly90bjEuNzJkamFwcC5jbjo4Mzk5L2AgKyB1cmk7XFxuICAgICAgICAgICAgICAgIGlmICh0Mikge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoW3RzWzBdXSwgMSwgJ+mAieaLqeS4i+i9vemfs+i0qCcpLnNlbGVjdCgodXJsKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdkb3dubG9hZDovLycgKyB1cmw7XFxuICAgICAgICAgICAgICAgICAgICB9LCB1cmwpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiB1cmwgKyAnI2lzTXVzaWM9dHJ1ZSMnO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG5cXG4gICAgICAgICAgICBjYXNlICdkajcnOlxcbiAgICAgICAgICAgICAgICB1cmwgPSBleGVjdXRlV2ViUnVsZShcXFwiaHR0cHM6Ly93d3cuN2lkai5jb20vZGovXFxcIiArIHQxICsgXFxcIi5odG1sXFxcIiwgJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGxheXVybDtcXG4gICAgICAgICAgICAgICAgfSksIHtcXG4gICAgICAgICAgICAgICAgICAgIGJsb2NrUnVsZXM6IFsnLmpzJywgJy5jc3MnLCAnLmpwZycsICcucG5nJywgJy5naWYnLCAnLnN2ZycsICcuaWNvJ11cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGlmICh0Mikge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoW3RzWzBdXSwgMSwgJ+mAieaLqeS4i+i9vemfs+i0qCcpLnNlbGVjdCgodXJsKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdkb3dubG9hZDovLycgKyB1cmw7XFxuICAgICAgICAgICAgICAgICAgICB9LCB1cmwpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiB1cmwgKyAnI2lzTXVzaWM9dHJ1ZSMnO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG5cXG4gICAgICAgICAgICBjYXNlICdkajgnOlxcbiAgICAgICAgICAgICAgICB1ID0gJ2h0dHBzOi8vd3d3LmRqdTguY29tJztcXG4gICAgICAgICAgICAgICAgaXRlbSA9IHUgKyAnL2lrL3ovPycgKyBleGVjdXRlV2ViUnVsZSh1ICsgJy9kaXNjby8nICsgdDEgKyAnLycsICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1cmw7XFxuICAgICAgICAgICAgICAgIH0pLCB7XFxuICAgICAgICAgICAgICAgICAgICBibG9ja1J1bGVzOiBbJy5qcycsICcuY3NzJywgJy5qcGcnLCAnLnBuZycsICcuZ2lmJywgJy5zdmcnLCAnLmljbyddXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBpdGVtID0gZmV0Y2hDb2RlQnlXZWJWaWV3KGl0ZW0sIHtcXG4gICAgICAgICAgICAgICAgICAgIGJsb2NrUnVsZXM6IFsnLmNzcycsICcuanBnJywgJy5wbmcnLCAnLmdpZicsICcuc3ZnJywgJy5pY28nXVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgdXJsID0gcGRmaChpdGVtLCBcXFwiYXVkaW8mJnNyY1xcXCIpO1xcbiAgICAgICAgICAgICAgICBpZiAodDIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFt0c1swXV0sIDEsICfpgInmi6nkuIvovb3pn7PotKgnKS5zZWxlY3QoKHVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnZG93bmxvYWQ6Ly8nICsgdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgdXJsKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gdXJsICsgJyNpc011c2ljPXRydWUjJztcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgY2FzZSAnZGo5JzpcXG4gICAgICAgICAgICAgICAgdXJsID0gZXhlY3V0ZVdlYlJ1bGUoJ2h0dHBzOi8vbS5kanl5eS5jb20vcGxheS8nICsgdDEgKyAnLmh0bWwnLCAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwbGF5dXJsO1xcbiAgICAgICAgICAgICAgICB9KSwge1xcbiAgICAgICAgICAgICAgICAgICAgYmxvY2tSdWxlczogWycuanMnLCAnLmNzcycsICcuanBnJywgJy5wbmcnLCAnLmdpZicsICcuc3ZnJywgJy5pY28nXVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgaWYgKHQyKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChbdHNbMF1dLCAxLCAn6YCJ5oup5LiL6L296Z+z6LSoJykuc2VsZWN0KCh1cmwpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2Rvd25sb2FkOi8vJyArIHVybDtcXG4gICAgICAgICAgICAgICAgICAgIH0sIHVybCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVybCArICcjaXNNdXNpYz10cnVlIyc7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgfVxcbiAgICB9XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi4pGi56iL5bqP6aaW6aG1XCIsXCJwYXRoXCI6XCJob21lXCIsXCJydWxlXCI6XCJqczpcXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9saWI/cnVsZT3mrYzor43pgILphY0nLCB7fSkpLnJ1bGUpO1xcbmQgPSBbXTtcXG50cnkge1xcbiAgICBpVGFnID0gc3RvcmFnZTAuZ2V0TXlWYXIocGxhdGZvcm0gKyBcXFwiX2lUYWdcXFwiKTtcXG4gICAgaWYgKGlUYWcgPT0gXFxcIlxcXCIpXFxuICAgICAgICBpVGFnID0ge30sXFxuICAgICAgICAkLnJlcXVpcmUocGxhdGZvcm0gKyAnP3J1bGU95q2M6K+N6YCC6YWNJykuaVRhZygpO1xcbiAgICB0aWQgPSBnZXRNeVZhcigndGlkJywgJ+aOqOiNkCcpO1xcbiAgICB0cnIgPSBPYmplY3Qua2V5cyhpVGFnW3RpZF0pO1xcbiAgICB0aWkgPSBnZXRNeVZhcigndGlpJywgJzAnKTtcXG4gICAgaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICAgICAgT2JqZWN0LmtleXMoaVRhZykubWFwKChuYW1lLCBpaSkgPT4ge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aWQgPT0gbmFtZSA/IFJpY2goU3Ryb25nKENvbG9yKG5hbWUpKSkgOiBuYW1lLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHRpZCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3RpZCcsIHRpZCk7XFxuICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKCd0aWknKTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgICAgIH0sIG5hbWUpLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJ1xcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZV9ibGFuaydcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJzxzcGFuIHN0eWxlPVxcXCJjb2xvcjojZmY2NjAxXFxcIj48Yj7liIfmjaLmjqXlj6M8L2I+PC9zcGFuPicsXFxuICAgICAgICAgICAgdXJsOiAkKHBsYXRmb3Jtcy5zbGljZSgwLCA4KS5tYXAodGl0bGUgPT4ge1xcbiAgICAgICAgICAgICAgICBpZiAodGl0bGUgPT0gcGxhdGZvcm0pXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IFJpY2goU3Ryb25nKENvbG9yKHRpdGxlKSkpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdGl0bGVcXG4gICAgICAgICAgICB9KSwgMiwgJ+mAieaLqeaOpeWPo+W5s+WPsCcpLnNlbGVjdCgoKSA9PiB7XFxuICAgICAgICAgICAgICAgIGlmICghaW5wdXQubWF0Y2goL17igJjigJjigJnigJkvKSkge1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3BsYXRmb3JtJywgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcigndGlkJyk7XFxuICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKCd0aWknKTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgIGltZzogJC5yZXF1aXJlKCdpbWFnZT9ydWxlPeatjOivjemAgumFjScpKHBsYXRmb3JtKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2ljb25fc21hbGxfMydcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJzxzcGFuIHN0eWxlPVxcXCJjb2xvcjojZmY2NjAxXFxcIj48Yj5UR1jmlLbol488L2I+PC9zcGFuPicsXFxuICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL2NvbGxlY3Rpb24jbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjP3J1bGU95q2M6K+N6YCC6YWNXFxcIixcXG4gICAgICAgICAgICBpbWc6ICQucmVxdWlyZSgnaW1hZ2U/cnVsZT3mrYzor43pgILphY0nKSgn5pS26JePJyksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdpY29uX3NtYWxsXzMnLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIHBhZ2VUaXRsZTogXFxcIlRHWOaUtuiXj1xcXCIsXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAnPHNwYW4gc3R5bGU9XFxcImNvbG9yOiNmZjY2MDFcXFwiPjxiPueoi+W6j+iuvue9rjwvYj48L3NwYW4+JyxcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvcnVsZUxpc3Qjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjP3BhZ2VUaXRsZT3op6PmnpDnrqHnkIYmcnVsZT3mrYzor43pgILphY1cXFwiLFxcbiAgICAgICAgICAgIGltZzogJC5yZXF1aXJlKCdpbWFnZT9ydWxlPeatjOivjemAgumFjScpKCforr7nva4nKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2ljb25fc21hbGxfMydcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJ/CflI0nLFxcbiAgICAgICAgICAgIGRlc2M6ICfmkJzntKLlhbPplK7or40gLyDliIbkuqvpk77mjqUnLFxcbiAgICAgICAgICAgIHVybDogJC50b1N0cmluZygoc19wbGF0Zm9ybSkgPT4ge1xcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQudHJpbSgpKSB7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignc19wbGF0Zm9ybScsIHNfcGxhdGZvcm0pO1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3NfdDInLCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKCdzX3BsYXRmb3JtJyk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgY2xlYXJNeVZhcignc190MycpO1xcbiAgICAgICAgICAgICAgICBjbGVhck15VmFyKCdzX3Q0Jyk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9wYWdlL3NlYXJjaCNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSM/cD1meXBhZ2UmcnVsZT3mrYzor43pgILphY1cXFwiO1xcbiAgICAgICAgICAgIH0sIHBsYXRmb3JtKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImlucHV0XFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDogaWQgKyBcXFwiOnNlYXJjaDFcXFwiLFxcbiAgICAgICAgICAgICAgICBwYWdlVGl0bGU6IFxcXCLpq5jnuqfmkJzntKJcXFwiLFxcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldE15VmFyKFxcXCJzX3QyXFxcIiksXFxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBcXFwicHV0TXlWYXIoJ3NfdDInLCBpbnB1dClcXFwiXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn5oiR55qE5pS26JePJyxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL2NvbGxlY3Rpb24/cnVsZT3mrYzor43pgILphY0nLFxcbiAgICAgICAgICAgIGltZzogJ2hpa2VyOi8vaW1hZ2VzL2ljb24xJyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgdGl0bGU6ICfljoblj7LorrDlvZUnLFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vaGlzdG9yeT9ydWxlPeatjOivjemAgumFjScsXFxuICAgICAgICAgICAgaW1nOiAnaGlrZXI6Ly9pbWFnZXMvaWNvbjMnLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICB0aXRsZTogJ+mrmOe6p+aQnOe0oicsXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgY2xlYXJNeVZhcignc19wbGF0Zm9ybScpO1xcbiAgICAgICAgICAgICAgICBjbGVhck15VmFyKCdzX3QzJyk7XFxuICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoJ3NfdDQnKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL3BhZ2Uvc2VhcmNoI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5Iz9wPWZ5cGFnZSZydWxlPeatjOivjemAgumFjVxcXCI7XFxuICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgaW1nOiAnaGlrZXI6Ly9pbWFnZXMvaWNvbjInLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmVfYmxhbmsnXFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfigJjigJjigJnigJk8Yj48Zm9udCBjb2xvcj0jZmY2NjAxPicgKyB0aWQgKyAnPC9mb250PjwvYj4nLFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgbGluZVZpc2libGU6IGZhbHNlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgICAgICB0cnIubWFwKChuYW1lLCBpaSkgPT4ge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aWkgPT0gaWkgPyBSaWNoKFN0cm9uZyhDb2xvcihuYW1lKSkpIDogbmFtZSxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh0aWkpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCd0aWknLCB0aWkpO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICAgICAgfSwgaWkpLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgY29sX3R5cGU6ICdibGFua19ibG9jaydcXG4gICAgICAgIH0pO1xcbiAgICAgICAgTG9hZGluZygpO1xcbiAgICB9XFxuICAgIHVyaSA9IGlUYWdbdGlkXVt0cnJbdGlpXV07XFxuICAgIGlmICghQXJyYXkuaXNBcnJheSh1cmkpKSAkLnJlcXVpcmUocGxhdGZvcm0gKyBcXFwiP3J1bGU95q2M6K+N6YCC6YWNXFxcIikubGF6eSgxLCB1cmkpO1xcbiAgICBlbHNlIGQgPSBkLmNvbmNhdCh1cmkpO1xcbn0gY2F0Y2ggKGZldGNoX2Vycm9yKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIue9kee7nOW8guW4uCAvIOaOpeWPo+W0qea6g+S6hlxcXCIsXFxuICAgICAgICBkZXNjOiBcXFwi5o2i5Liq5o6l5Y+j55yL55yL44CCXFxcIixcXG4gICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgbGluZVZpc2libGU6IGZhbHNlXFxuICAgICAgICB9XFxuICAgIH0pO1xcbiAgICBwbGF0Zm9ybXMuc2xpY2UoMSwgOClcXG4gICAgICAgIC5maWx0ZXIodGl0bGUgPT4gdGl0bGUgIT0gcGxhdGZvcm0pXFxuICAgICAgICAubWFwKHRpdGxlID0+IHtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnaWNvbl8yX3JvdW5kJyxcXG4gICAgICAgICAgICAgICAgaW1nOiAkLnJlcXVpcmUoJ2ltYWdlP3J1bGU95q2M6K+N6YCC6YWNJykodGl0bGUpLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHRpdGxlKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcigncGxhdGZvcm0nLCB0aXRsZSk7XFxuICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKCd0aWQnKTtcXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoJ3RpaScpO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgICAgIH0sIHRpdGxlKVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfSk7XFxufVxcbk1ZX1BBR0UgPT0gMSA/IHNldFByZVJlc3VsdChkKSA6IHNldFJlc3VsdChkKTtcXG5kZWxldGVJdGVtQnlDbHMoJ2xvYWRpbmdfZ2lmJyk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLikabop4TliJnnvJbovpFcIixcInBhdGhcIjpcInJ1bGVFZGl0XCIsXCJydWxlXCI6XCJqczpcXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9saWI/cnVsZT3mrYzor43pgILphY0nLCB7fSkpLnJ1bGUpO1xcbmQgPSBbXTtcXG5qeF9zMSA9IGdldE15VmFyKCdqeF9zMScsICcwJykgPT0gJzAnO1xcbmp4X3MyID0gZ2V0TXlWYXIoJ2p4X3MyJywgJzAnKSA9PSAnMCc7XFxuanhfczMgPSBnZXRNeVZhcignanhfczInLCAnMCcpID09ICcxJztcXG5qeF90eXBlID0gZ2V0TXlWYXIoJ2p4X3R5cGUnLCAna3cnKTtcXG5qeF9vcGVuID0gZ2V0TXlWYXIoJ2p4X29wZW4nLCAnMScpID09ICcxJztcXG5qeF9kb3duID0gZ2V0TXlWYXIoJ2p4X2Rvd24nLCAnMCcpID09ICcxJztcXG5qeF90aWQgPSBnZXRNeVZhcignanhfdGlkJywgTVlfUEFSQU1TLm5ldyA/ICfln7rmnKwnIDogJ+mihOiniCcpO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAnPHNwYW4gc3R5bGU9XFxcImNvbG9yOiNmZjY2MDFcXFwiPjxiPuino+aekOW5s+WPsDwvYj48L3NwYW4+JyxcXG4gICAgdXJsOiAkKHBsYXRmb3Jtcy5zbGljZSgxLCA2KS5tYXAodGl0bGUgPT4ge1xcbiAgICAgICAgaWYgKHRpdGxlID09IGp4X3R5cGUpXFxuICAgICAgICAgICAgdGl0bGUgPSBSaWNoKFN0cm9uZyhDb2xvcih0aXRsZSkpKTtcXG4gICAgICAgIHJldHVybiB0aXRsZVxcbiAgICB9KSwgMSwgJ+mAieaLqeaOpeWPo+W5s+WPsCcpLnNlbGVjdCgoKSA9PiB7XFxuICAgICAgICBpZiAoIWlucHV0Lm1hdGNoKC9e4oCY4oCY4oCZ4oCZLykpIHtcXG4gICAgICAgICAgICBwdXRNeVZhcignanhfdHlwZScsIGlucHV0KTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICB9KSxcXG4gICAgaW1nOiAkLnJlcXVpcmUoJ2ltYWdlP3J1bGU95q2M6K+N6YCC6YWNJykoanhfdHlwZSksXFxuICAgIGNvbF90eXBlOiAnaWNvbl9zbWFsbF8zJ1xcbn0pO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAnPHNwYW4gc3R5bGU9XFxcImNvbG9yOiNmZjY2MDFcXFwiPjxiPuWQr+eUqOivleWQrDwvYj48L3NwYW4+JyxcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChLLCBvcGVuKSA9PiB7XFxuICAgICAgICBpZiAoSykge1xcbiAgICAgICAgICAgIHB1dE15VmFyKCdqeF9vcGVuJywgb3Blbik7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHJldHVybiAkKFxcXCJcXFwiLCBcXFwi6K+36L6T5YWl5r+A5rS75a+G5YyZXFxcIikuaW5wdXQoKG9wZW4pID0+IHtcXG4gICAgICAgICAgICAgICAgaWYgKG1kNShpbnB1dCkgPT0gZ2V0TXlWYXIoJ2p4X20xJykpIHtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdqeF9zMScsICcwJyk7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignanhfb3BlbicsIG9wZW4pO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5r+A5rS75aSx6LSlXFxcIjtcXG4gICAgICAgICAgICB9LCBvcGVuKTtcXG4gICAgICAgIH1cXG4gICAgfSwganhfczEsIGp4X29wZW4gPyAnMCcgOiAnMScpLFxcbiAgICBpbWc6ICdodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL21lc3N5LycgKyAoanhfb3BlbiA/IDU1IDogNjMpICsgJy5zdmcnLFxcbiAgICBjb2xfdHlwZTogJ2ljb25fc21hbGxfMydcXG59KTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJzxzcGFuIHN0eWxlPVxcXCJjb2xvcjojZmY2NjAxXFxcIj48Yj7lkK/nlKjkuIvovb08L2I+PC9zcGFuPicsXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoSywgZG93bikgPT4ge1xcbiAgICAgICAgaWYgKEspIHtcXG4gICAgICAgICAgICBwdXRNeVZhcignanhfZG93bicsIGRvd24pO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICByZXR1cm4gJChcXFwiXFxcIiwgXFxcIuivt+i+k+WFpea/gOa0u+WvhuWMmVxcXCIpLmlucHV0KChkb3duKSA9PiB7XFxuICAgICAgICAgICAgICAgIGlmIChtZDUoaW5wdXQpID09IGdldE15VmFyKCdqeF9tMScpKSB7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignanhfczEnLCAnMCcpO1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2p4X2Rvd24nLCBkb3duKTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+a/gOa0u+Wksei0pVxcXCI7XFxuICAgICAgICAgICAgfSwgZG93bik7XFxuICAgICAgICB9XFxuICAgIH0sIGp4X3MxLCBqeF9kb3duID8gJzAnIDogJzEnKSxcXG4gICAgaW1nOiAnaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9tZXNzeS8nICsgKGp4X2Rvd24gPyA1NSA6IDYzKSArICcuc3ZnJyxcXG4gICAgY29sX3R5cGU6ICdpY29uX3NtYWxsXzMnXFxufSk7XFxuW1xcXCLpooTop4hcXFwiLCBcXFwi5Z+65pysXFxcIiwgXFxcIumfs+i0qFxcXCIsIFxcXCLop6PmnpBcXFwiLCBcXFwi5ouT5bGVXFxcIl0ubWFwKG5hbWUgPT4ge1xcbiAgICBpID0ganhfdGlkID09IG5hbWVcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBSaWNoKFN0cm9uZyhpID8gQ29sb3IobmFtZSkgOiBuYW1lKSksXFxuICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHRpZCwgdGlpLCBmZWcpID0+IHtcXG4gICAgICAgICAgICBpZiAodGlpKSB7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKCdqeF90aWQnLCB0aWQpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICB9LCBuYW1lLCAhaSwgIWp4X3MyKSxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF81J1xcbiAgICB9KTtcXG59KTtcXG5zd2l0Y2ggKGp4X3RpZCkge1xcbiAgICBjYXNlICfpooTop4gnOlxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogU3Ryb25nKGdldE15VmFyKCdqeF90aXRsZScpKSxcXG4gICAgICAgICAgICBkZXNjOiBbXFxcIm1wM1xcXCIsIFxcXCJocVxcXCIsIFxcXCJzcVxcXCIsIFxcXCJoclxcXCIsIFxcXCJ6cVxcXCJdLm1hcCh0ID0+IGdldE15VmFyKFxcXCJqeF9cXFwiICsgdCkgIT0gXFxcIlxcXCIgPyAn4piFJyA6ICfimIYnKS5qb2luKFxcXCJcXFwiKSxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcicsXFxuICAgICAgICAgICAgaW1nOiBnZXRNeVZhcignanhfaW1nJykgfHwgJC5yZXF1aXJlKCdpbWFnZT9ydWxlPeatjOivjemAgumFjScpKClcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIoJ2p4X2Rlc2MnKSArICfkuKgnICsgZ2V0TXlWYXIoJ2p4X3VybCcpLFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF8xJyxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJ1xcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBnZXRNeVZhcignanhfY29udGVudCcsICdcXFxcblxcXFxuXFxcXG5cXFxcblxcXFxuJykucmVwbGFjZSgvXFxcXG4vZywgJzxicj4nKSxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCdcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmVfYmxhbmsnXFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfkvb/nlKjmnYPpmZAnLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoSykgPT4ge1xcbiAgICAgICAgICAgICAgICBpZiAoSykgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcIlxcXCIsIFxcXCLor7fovpPlhaXlr4bljJlcXFwiKS5pbnB1dCgoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAobWQ1KGlucHV0KSA9PSBnZXRNeVZhcignanhfbTEnKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdqeF9zMScsICcwJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/pqozor4HmiJDlip9cXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+mqjOivgeWksei0pVxcXCI7XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH0sIGp4X3MxKSxcXG4gICAgICAgICAgICBpbWc6ICdodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL21lc3N5LycgKyAoanhfczEgPyA1NSA6IDYzKSArICcuc3ZnJyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2ljb25fMl9yb3VuZCcsXFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfnvJbovpHmnYPpmZAnLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoSykgPT4ge1xcbiAgICAgICAgICAgICAgICBpZiAoSykgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcIlxcXCIsIFxcXCLor7fovpPlhaXlr4bljJlcXFwiKS5pbnB1dCgoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAobWQ1KGlucHV0KSA9PSBnZXRNeVZhcignanhfbTInKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdqeF9zMicsICcwJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/pqozor4HmiJDlip9cXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+mqjOivgeWksei0pVxcXCI7XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH0sIGp4X3MyKSxcXG4gICAgICAgICAgICBpbWc6ICdodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL21lc3N5LycgKyAoanhfczIgPyA1NSA6IDYzKSArICcuc3ZnJyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2ljb25fMl9yb3VuZCdcXG4gICAgICAgIH0pO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+WfuuacrCc6XFxuICAgICAgICBbXFxuICAgICAgICAgICAgWyflv4XloavvvIzmupDmoIfor4YnLCAndXJsJ10sXFxuICAgICAgICAgICAgWyflv4XloavvvIzmupDlkI3np7AnLCAndGl0bGUnXSxcXG4gICAgICAgICAgICBbJ+mAieWhq++8jOa6kOWbvuaghycsICdpbWcnXSxcXG4gICAgICAgICAgICBbJ+mAieWhq++8jOa6kOWIhue7hCcsICdkZXNjJ10sXFxuICAgICAgICAgICAgWyfpgInloavvvIzmupDms6jph4onLCAnY29udGVudCddXFxuICAgICAgICBdLm1hcChbYSwgYl0gPT4ge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIGRlc2M6IGEsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRNeVZhcihcXFwianhfXFxcIiArIGIpLFxcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6IGBwdXRNeVZhcihcXFwianhfJHtifVxcXCIsIGlucHV0KWAsXFxuICAgICAgICAgICAgICAgICAgICBoaWdobGlnaHQ6IHRydWVcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfSk7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn6Z+z6LSoJzpcXG4gICAgICAgIFtcXG4gICAgICAgICAgICBbJ+mAieWhq++8jOagh+WHhumfs+i0qOOAguS+i++8mnQyPVxcXCIxMjhrXFxcIicsICdtcDMnXSxcXG4gICAgICAgICAgICBbJ+mAieWhq++8jOmrmOWTgemfs+i0qOOAguS+i++8mnQyPVxcXCIzMjBrXFxcIicsICdocSddLFxcbiAgICAgICAgICAgIFsn6YCJ5aGr77yM5peg5o2f6Z+z6LSo44CC5L6L77yadDI9XFxcIjIwMDBrXFxcIicsICdzcSddLFxcbiAgICAgICAgICAgIFsn6YCJ5aGr77yM6auY5ZOB5peg5o2f44CC5L6L77yadDI9XFxcIjQwMDBrXFxcIicsICdociddLFxcbiAgICAgICAgICAgIFsn6YCJ5aGr77yM56uL5L2T5peg5o2f44CC5L6L77yadDI9XFxcIjIwMDAwa1xcXCInLCAnenEnXVxcbiAgICAgICAgXS5tYXAoW2EsIGJdID0+IHtcXG4gICAgICAgICAgICBfID0ge1xcbiAgICAgICAgICAgICAgICBoaWdobGlnaHQ6IHRydWVcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKGp4X3MyIHx8IGp4X3MzKSB7XFxuICAgICAgICAgICAgICAgIF8uZGVmYXVsdFZhbHVlID0gYWVzRGVjb2RlKCdoazY2NjY2NjYxMDknLCBnZXRNeVZhcihcXFwianhfXFxcIiArIGIpKTtcXG4gICAgICAgICAgICAgICAgXy5vbkNoYW5nZSA9ICQudG9TdHJpbmcoKG5hbWUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dC50cmltKCkgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihuYW1lLCBnZXRQcml2YXRlSlMoaW5wdXQudHJpbSgpKSk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKG5hbWUsIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSwgXFxcImp4X1xcXCIgKyBiKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBfLmRlZmF1bHRWYWx1ZSA9IFxcXCLmsqHmnInmnYPpmZDvvIzor7fop6PplIHjgIJcXFwiXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIGRlc2M6IGEsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcbiAgICAgICAgICAgICAgICBleHRyYTogX1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfSk7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn6Kej5p6QJzpcXG4gICAgICAgIF8gPSB7XFxuICAgICAgICAgICAgaGlnaGxpZ2h0OiB0cnVlLFxcbiAgICAgICAgICAgIHR5cGU6IFxcXCJ0ZXh0YXJlYVxcXCIsXFxuICAgICAgICAgICAgaGVpZ2h0OiA3XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoanhfczIgfHwganhfczMpIHtcXG4gICAgICAgICAgICBfLmRlZmF1bHRWYWx1ZSA9IGFlc0RlY29kZSgnaGs2NjY2NjY2MTA5JywgZ2V0TXlWYXIoXFxcImp4X2ppZXhpXFxcIikpO1xcbiAgICAgICAgICAgIF8ub25DaGFuZ2UgPSAkLnRvU3RyaW5nKChuYW1lKSA9PiB7XFxuICAgICAgICAgICAgICAgIGlmIChpbnB1dC50cmltKCkgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKG5hbWUsIGdldFByaXZhdGVKUyhpbnB1dC50cmltKCkpKTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKG5hbWUsIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0sIFxcXCJqeF9qaWV4aVxcXCIpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBfLmRlZmF1bHRWYWx1ZSA9IFxcXCLmsqHmnInmnYPpmZDvvIzor7fop6PplIHjgIJcXFwiXFxuICAgICAgICB9XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIGRlc2M6ICflj5jph4/vvJp0MSAmIHQyICYgbmFtZSAmIGFydGlzdFxcXFxuXFxcXG7or7TmmI7vvJrlj6/ku6Xku47pn7PotKjpgqPph4zkvKDlj5jph4/ov4fmnaXjgIJcXFxcblxcXFxu6I635Y+WdXJs5bCx6KGM77yM56S65L6L77yaXFxcXG51cmkgPSBgaHR0cHM6Ly9iYWlkdS5jb20/YT0ke3QxfSZiPSR7dDJ9JmM9JHtuYW1lfSZkPSR7YXV0aG9yfWA7XFxcXG51cmwgPSBKU09OLnBhcnNlKGZldGNoKHVyaSkpLnVybDsnLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcbiAgICAgICAgICAgIGV4dHJhOiBfXFxuICAgICAgICB9KTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfmi5PlsZUnOlxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJ+Whq+WGmeWvhuWMmeWQju+8jOWPr+S7peWvuemfs+a6kOWBmuS4gOS6m+mZkOWItuOAgicsXFxuICAgICAgICAgICAgZGVzYzogJ+WvhuWMmeaXoOazlei/veWbnu+8jOWhq+iusOW+l+S9j+eahO+8gScsXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJyxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IFN0cm9uZygn57yW6L6R5rqQ55qE6ZmQ5Yi2JyksXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInLFxcbiAgICAgICAgICAgIGltZzogJ2hpa2VyOi8vaW1hZ2VzL2hvbWVfaWNvbl9lZGl0J1xcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn5Y+v5Lul55yL77yM5Y+v5Lul57yW6L6RKOWkp+eIseaXoOeWhiknLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoSykgPT4ge1xcbiAgICAgICAgICAgICAgICBpZiAoSykgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcIlxcXCIsIFxcXCLor7fovpPlhaXlr4bljJlcXFwiKS5pbnB1dCgoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAobWQ1KGlucHV0KSA9PSBnZXRNeVZhcignanhfbTInKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdqeF9zMicsICcwJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2p4X20yJywgJycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5pu05pS55oiQ5YqfXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/pqozor4HlpLHotKVcXFwiO1xcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9LCBqeF9zMiksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2ljb24nLFxcbiAgICAgICAgICAgIGltZzogJ2h0dHBzOi8vaGlrZXJmYW5zLmNvbS90dWJpYW8vbWVzc3kvJyArIChqeF9zMiA/IDU1IDogNjMpICsgJy5zdmcnXFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICflj6/ku6XnnIvvvIzkuI3og73nvJbovpEo6Ziy5q2i5LqM5pS5KScsXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChLMSwgSzIpID0+IHtcXG4gICAgICAgICAgICAgICAgaWYgKGdldE15VmFyKCdqeF9tMicpID09IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwiXFxcIiwgXFxcIuivt+i+k+WFpeWvhuWMmVxcXCIpLmlucHV0KCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwiXFxcIiwgXFxcIuivt+ehruiupOWvhuWMmVxcXCIpLmlucHV0KChpbnB1dDIpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0ID09IGlucHV0Mikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2p4X3MyJywgJzEnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdqeF9tMicsIG1kNShpbnB1dCkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WKoOWvhuaIkOWKn1xcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WKoOWvhuWksei0pVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoSzEpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXCJcXFwiLCBcXFwi5pON5L2c57G75Z6L77ya5pu05pS55a+G5YyZXFxcXG7or7fovpPlhaXljp/lr4bljJlcXFwiKS5pbnB1dCgoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1kNShpbnB1dCkgPT0gZ2V0TXlWYXIoJ2p4X20yJykpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcIlxcXCIsIFxcXCLor7fovpPlhaXlr4bljJlcXFwiKS5pbnB1dCgoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwiXFxcIiwgXFxcIuivt+ehruiupOWvhuWMmVxcXCIpLmlucHV0KChpbnB1dDIpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT0gaW5wdXQyKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdqeF9zMicsICcxJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdqeF9tMicsIG1kNShpbnB1dCkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/liqDlr4bmiJDlip9cXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5Yqg5a+G5aSx6LSlXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/ljp/lr4bljJnpqozor4HlpLHotKVcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoSzIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXCJcXFwiLCBcXFwi5pON5L2c57G75Z6L77ya5p2D6ZmQ6ZmN57qnXFxcXG7or7fovpPlhaXlr4bljJlcXFwiKS5pbnB1dCgoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1kNShpbnB1dCkgPT0gZ2V0TXlWYXIoJ2p4X20yJykpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2p4X3MyJywgJzEnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5a+G5YyZ6ZSZ6K+v77yM6ZmN57qn5aSx6LSlXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2p4X3MyJywgJzEnKTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9LCBqeF9zMywgIWp4X3MyKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfaWNvbicsXFxuICAgICAgICAgICAgaW1nOiAnaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9tZXNzeS8nICsgKGp4X3MyID8gNjMgOiBqeF9zMyA/IDU1IDogNjMpICsgJy5zdmcnXFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfkuI3og73nnIvvvIzkuI3og73nvJbovpEo6IO955So5bCx6KGMKScsXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChLMSwgSzIpID0+IHtcXG4gICAgICAgICAgICAgICAgaWYgKGdldE15VmFyKCdqeF9tMicpID09IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwiXFxcIiwgXFxcIuivt+i+k+WFpeWvhuWMmVxcXCIpLmlucHV0KCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwiXFxcIiwgXFxcIuivt+ehruiupOWvhuWMmVxcXCIpLmlucHV0KChpbnB1dDIpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0ID09IGlucHV0Mikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2p4X3MyJywgJzInKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdqeF9tMicsIG1kNShpbnB1dCkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WKoOWvhuaIkOWKn1xcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WKoOWvhuWksei0pVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoSzEgJiYgSzIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXCJcXFwiLCBcXFwi5pON5L2c57G75Z6L77ya5pu05pS55a+G5YyZXFxcXG7or7fovpPlhaXljp/lr4bljJlcXFwiKS5pbnB1dCgoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1kNShpbnB1dCkgPT0gZ2V0TXlWYXIoJ2p4X20yJykpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcIlxcXCIsIFxcXCLor7fovpPlhaXlr4bljJlcXFwiKS5pbnB1dCgoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwiXFxcIiwgXFxcIuivt+ehruiupOWvhuWMmVxcXCIpLmlucHV0KChpbnB1dDIpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT0gaW5wdXQyKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdqeF9zMicsICcyJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdqeF9tMicsIG1kNShpbnB1dCkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/liqDlr4bmiJDlip9cXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5Yqg5a+G5aSx6LSlXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/ljp/lr4bljJnpqozor4HlpLHotKVcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignanhfczInLCAnMicpO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0sICFqeF9zMywgIWp4X3MyKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfaWNvbicsXFxuICAgICAgICAgICAgaW1nOiAnaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9tZXNzeS8nICsgKGp4X3MyID8gNjMgOiBqeF9zMyA/IDYzIDogNTUpICsgJy5zdmcnXFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IFN0cm9uZygn5L2/55So5rqQ55qE6ZmQ5Yi2JyksXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInLFxcbiAgICAgICAgICAgIGltZzogJ2hpa2VyOi8vaW1hZ2VzL2hvbWVfaWNvbl9jb2RlJ1xcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn5rKh5pyJ6aqM6K+BKOS4jeaQnuiKseeahCknLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoSykgPT4ge1xcbiAgICAgICAgICAgICAgICBpZiAoSykgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcIlxcXCIsIFxcXCLor7fovpPlhaXlr4bljJlcXFwiKS5pbnB1dCgoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAobWQ1KGlucHV0KSA9PSBnZXRNeVZhcignanhfbTEnKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdqeF9zMScsICcwJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2p4X20xJywgJycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v6aqM6K+B5oiQ5YqfXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/pqozor4HlpLHotKVcXFwiO1xcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9LCBqeF9zMSksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2ljb24nLFxcbiAgICAgICAgICAgIGltZzogJ2h0dHBzOi8vaGlrZXJmYW5zLmNvbS90dWJpYW8vbWVzc3kvJyArIChqeF9zMSA/IDU1IDogNjMpICsgJy5zdmcnXFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfmv4DmtLvpqozor4Eo6aqM6K+B5LiA5LiLKScsXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChLKSA9PiB7XFxuICAgICAgICAgICAgICAgIGlmIChnZXRNeVZhcignanhfbTEnKSA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcIlxcXCIsIFxcXCLor7fovpPlhaXlr4bljJlcXFwiKS5pbnB1dCgoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcIlxcXCIsIFxcXCLor7fnoa7orqTlr4bljJlcXFwiKS5pbnB1dCgoaW5wdXQyKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PSBpbnB1dDIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdqeF9zMScsICcxJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignanhfbTEnLCBtZDUoaW5wdXQpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/liqDlr4bmiJDlip9cXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/liqDlr4blpLHotKVcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKEspIHtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdqeF9zMScsICcxJyk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcIlxcXCIsIFxcXCLmk43kvZznsbvlnovvvJrmm7TmlLnlr4bljJlcXFxcbuivt+i+k+WFpeWOn+WvhuWMmVxcXCIpLmlucHV0KCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWQ1KGlucHV0KSA9PSBnZXRNeVZhcignanhfbTEnKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwiXFxcIiwgXFxcIuivt+i+k+WFpeWvhuWMmVxcXCIpLmlucHV0KCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXCJcXFwiLCBcXFwi6K+356Gu6K6k5a+G5YyZXFxcIikuaW5wdXQoKGlucHV0MikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PSBpbnB1dDIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2p4X3MxJywgJzEnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2p4X20xJywgbWQ1KGlucHV0KSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WKoOWvhuaIkOWKn1xcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/liqDlr4blpLHotKVcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WOn+WvhuWMmemqjOivgeWksei0pVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0sIGp4X3MxKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfaWNvbicsXFxuICAgICAgICAgICAgaW1nOiAnaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9tZXNzeS8nICsgKGp4X3MxID8gNjMgOiA1NSkgKyAnLnN2ZydcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJ+aXtuaViOmqjOivgSjnrYnlvoXlrozlloQpJyxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfaWNvbicsXFxuICAgICAgICAgICAgaW1nOiAnaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9tZXNzeS82My5zdmcnXFxuICAgICAgICB9KTtcXG4gICAgICAgIGJyZWFrO1xcbn1cXG5kLnB1c2goe1xcbiAgICB0aXRsZTogUmljaChTdHJvbmcoQ29sb3IoJ+S/neWtmOW5tumAgOWHuicpKSksXFxuICAgIGRlc2M6ICfkuIrmrKHnvJbovpHvvJonICsgJC5kYXRlRm9ybWF0KE51bWJlcihnZXRNeVZhcihcXFwianhfdGltZVxcXCIpKSB8fCBuZXcgRGF0ZSgpLmdldFRpbWUoKSwgJ3l5eXktTU0tZGQgaGg6bW06c3MnKSxcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgIGlmIChnZXRNeVZhcignanhfbTInKSAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgIHJldHVybiAkKFxcXCJcXFwiLCBcXFwi6K+36L6T5YWl5a+G5YyZXFxcIikuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICBpZiAobWQ1KGlucHV0KSA9PSBnZXRNeVZhcignanhfbTInKSkge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwiamlleGk/cnVsZT3mrYzor43pgILphY1cXFwiKS5zZXRFZGl0KCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+mqjOivgeWksei0pe+8jOS4jeaUr+aMgeS/neWtmO+8jOivt+W3puS4iuinkuaJi+WKqOmAgOWHuuOAglxcXCI7XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImppZXhpP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuc2V0RWRpdCgpO1xcbiAgICAgICAgfVxcbiAgICB9KSxcXG4gICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJyxcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICB9XFxufSk7XFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi4pGl6KeE5YiZ5YiX6KGoXCIsXCJwYXRoXCI6XCJydWxlTGlzdFwiLFwicnVsZVwiOlwianM6XFxuZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvbGliP3J1bGU95q2M6K+N6YCC6YWNJywge30pKS5ydWxlKTtcXG5kID0gW107XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICfmlrDlop7op6PmnpAnLFxcbiAgICBjb2xfdHlwZTogJ3RleHRfMicsXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICBbXFxcInR5cGVcXFwiLCBcXFwib3BlblxcXCIsIFxcXCJkb3duXFxcIiwgXFxcImltZ1xcXCIsIFxcXCJ0aXRsZVxcXCIsIFxcXCJkZXNjXFxcIiwgXFxcInVybFxcXCIsIFxcXCJjb250ZW50XFxcIiwgXFxcIm1wM1xcXCIsIFxcXCJocVxcXCIsIFxcXCJzcVxcXCIsIFxcXCJoclxcXCIsIFxcXCJ6cVxcXCIsIFxcXCJqaWV4aVxcXCIsIFxcXCJzMVxcXCIsIFxcXCJtMVxcXCIsIFxcXCJzMlxcXCIsIFxcXCJtMlxcXCIsIFxcXCJ0aW1lXFxcIiwgXFxcInRpZFxcXCIsIFxcXCJ1aWRcXFwiXS5tYXAodCA9PiB7XFxuICAgICAgICAgICAgY2xlYXJNeVZhcignanhfJyArIHQpXFxuICAgICAgICB9KTtcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL3J1bGVFZGl0I25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5Iz9wYWdlVGl0bGU96KeE5YiZ57yW6L6RJnJ1bGU95q2M6K+N6YCC6YWNJ1xcbiAgICB9KSxcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIG5ldzogMVxcbiAgICB9XFxufSk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICfliIbkuqvpgInkuK0nLFxcbiAgICBjb2xfdHlwZTogJ3RleHRfMicsXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICB6eSA9IHN0b3JhZ2UwLmdldE15VmFyKFxcXCJqeGxpc3QyXFxcIiwge30pO1xcbiAgICAgICAgenUgPSBPYmplY3Qua2V5cyh6eSk7XFxuICAgICAgICBpZiAoenUubGVuZ3RoID09IDApIHtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5rKh5pyJ6YCJ5Lit6Kej5p6QXFxcIjtcXG4gICAgICAgIH0gZWxzZSBpZiAoenUubGVuZ3RoID09IDEpIHtcXG4gICAgICAgICAgICBfID0genlbenVbMF1dO1xcbiAgICAgICAgICAgIGlmIChfLm0xICYmIF8ubTEgIT0gXFxcIlxcXCIgJiYgXy5tMS5sZW5ndGggPT0gMzIpIF8uczEgPSBcXFwiMVxcXCIsIF8ub3BlbiA9IFxcXCIwXFxcIiwgXy5kb3duID0gXFxcIjBcXFwiO1xcbiAgICAgICAgICAgIGlmIChfLm0yICYmIF8ubTIgIT0gXFxcIlxcXCIgJiYgXy5tMS5sZW5ndGggPT0gMzIgJiYgXy5zMiA9PSBcXFwiMFxcXCIpIF8uczIgPSBcXFwiMlxcXCI7XFxuICAgICAgICAgICAgX18gPSB7fTtcXG4gICAgICAgICAgICBfX1tfLnR5cGVdID0gW19dO1xcbiAgICAgICAgICAgIF9fID0gSlNPTi5zdHJpbmdpZnkoX18pO1xcbiAgICAgICAgICAgIF8gPSBiYXNlNjRFbmNvZGUoX18pO1xcbiAgICAgICAgICAgIGNsZWFyTXlWYXIoJ2p4bGlzdDInKTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJjb3B5Oi8v5q2M6K+N6YCC6YWN6Kej5p6Q5Y+j5Luk77yM5omT5byA5rW36ZiU5Y2z5Y+v5a+85YWlXFxcXG7vv6VUZXh077+lXFxcIiArIF8gKyAnQGltcG9ydD1qczokLnJlcXVpcmUoXFxcImppZXhpP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuc2V0UnVsZShpbnB1dCk7JztcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAganNvbiA9IHt9O1xcbiAgICAgICAgICAgIHp1Lm1hcChrZXkgPT4ge1xcbiAgICAgICAgICAgICAgICBfID0genlba2V5XTtcXG4gICAgICAgICAgICAgICAgaWYgKCFqc29uW18udHlwZV0pIHtcXG4gICAgICAgICAgICAgICAgICAgIGpzb25bXy50eXBlXSA9IFtdO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmIChfLm0xICYmIF8ubTEgIT0gXFxcIlxcXCIgJiYgXy5tMS5sZW5ndGggPT0gMzIpIHtcXG4gICAgICAgICAgICAgICAgICAgIF8uczEgPSBcXFwiMVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICBfLm9wZW4gPSBcXFwiMFxcXCI7XFxuICAgICAgICAgICAgICAgICAgICBfLmRvd24gPSBcXFwiMFxcXCI7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKF8ubTIgJiYgXy5tMiAhPSBcXFwiXFxcIiAmJiBfLm0xLmxlbmd0aCA9PSAzMiAmJiBfLnMyID09IFxcXCIwXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgXy5zMiA9IFxcXCIyXFxcIjtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBqc29uW18udHlwZV0ucHVzaChfKTtcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB0ID0gYmFzZTY0RW5jb2RlKEpTT04uc3RyaW5naWZ5KGpzb24pKTtcXG4gICAgICAgICAgICB1ID0gc2hhcmVQYXN0ZSh0KTtcXG4gICAgICAgICAgICBjbGVhck15VmFyKCdqeGxpc3QyJyk7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiY29weTovL+atjOivjemAgumFjeino+aekOWPo+S7pO+8jOaJk+W8gOa1t+mYlOWNs+WPr+WvvOWFpVxcXFxu77+lUGFzdGXvv6VcXFwiICsgdSArICdAaW1wb3J0PWpzOiQucmVxdWlyZShcXFwiamlleGk/cnVsZT3mrYzor43pgILphY1cXFwiKS5zZXRSdWxlKGlucHV0KTsnO1xcbiAgICAgICAgfVxcbiAgICB9KSxcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIG5ldzogMVxcbiAgICB9XFxufSk7XFxubGV0IGp4X3BsYXRmb3JtID0gZ2V0TXlWYXIoJ2p4X3BsYXRmb3JtJywgJ2xpYicpO1xcbnBsYXRmb3Jtcy5zbGljZSgwLCA2KS5tYXAocGxhdGZvcm0gPT4ge1xcbiAgICBpZiAoanhfcGxhdGZvcm0gPT0gcGxhdGZvcm0pXFxuICAgICAgICBwbGF0Zm9ybSA9IFJpY2goU3Ryb25nKENvbG9yKHBsYXRmb3JtKSkpO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHBsYXRmb3JtLFxcbiAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChwbGF0Zm9ybSkgPT4ge1xcbiAgICAgICAgICAgIGlmICghcGxhdGZvcm0ubWF0Y2goL17igJjigJjigJnigJkvKSkge1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcignanhfcGxhdGZvcm0nLCBwbGF0Zm9ybSk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgIH0sIHBsYXRmb3JtKSxcXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG4gICAgfSk7XFxufSk7XFxuanhsaXN0ID0gW107XFxuaWYgKGp4X3BsYXRmb3JtID09IFxcXCJsaWJcXFwiKSB7XFxuICAgIHBsYXRmb3Jtcy5zbGljZSgxLCA2KS5tYXAocGxhdGZvcm0gPT4ge1xcbiAgICAgICAganhsaXN0ID0ganhsaXN0LmNvbmNhdChzdG9yYWdlMC5nZXRJdGVtKCdqeGxpc3RfJyArIHBsYXRmb3JtLCBbXSkpO1xcbiAgICB9KTtcXG59IGVsc2Uge1xcbiAgICBqeGxpc3QgPSBzdG9yYWdlMC5nZXRJdGVtKCdqeGxpc3RfJyArIGp4X3BsYXRmb3JtLCBbXSk7XFxufVxcbmlmIChqeGxpc3QubGVuZ3RoID09IDApIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBSaWNoKFN0cm9uZyhDb2xvcihcXFwi5rKh5pyJ6Kej5p6QXFxcIikpKSxcXG4gICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgbGluZVZpc2libGU6IGZhbHNlXFxuICAgICAgICB9XFxuICAgIH0pO1xcbn0gZWxzZSB7XFxuICAgIGp4bGlzdC5tYXAoXyA9PiB7XFxuICAgICAgICBpID0gT2JqZWN0LmtleXMoc3RvcmFnZTAuZ2V0TXlWYXIoXFxcImp4bGlzdDJcXFwiLCB7fSkpLmluZGV4T2YobWQ1KF8udHlwZSArICc6JyArIF8udGl0bGUgKyAnOicgKyBfLnVybCkpID09IC0xO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogU3Ryb25nKGkgPyBfLnRpdGxlIDogQ29sb3IoXy50aXRsZSkpLFxcbiAgICAgICAgICAgIGRlc2M6IFtcXFwibXAzXFxcIiwgXFxcImhxXFxcIiwgXFxcInNxXFxcIiwgXFxcImhyXFxcIiwgXFxcInpxXFxcIl0ubWFwKHQgPT4gX1t0XSA/ICfimIUnIDogJ+KYhicpLmpvaW4oXFxcIlxcXCIpLFxcbiAgICAgICAgICAgIHVybDogJChbXFxcIuWIhuS6q1xcXCIsIFxcXCLnvJbovpFcXFwiLCBcXFwi5Yig6ZmkXFxcIiwgXFxcIuenu+WKqFxcXCJdLmNvbmNhdChpID8gJ+mAieS4rScgOiAn5Y+W5raI6YCJ5LitJyksIDIsICfpgInmi6nkuIvovb3pn7PotKgnKS5zZWxlY3QoKHR5cGUsIHVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICBqeGxpc3QgPSBzdG9yYWdlMC5nZXRJdGVtKCdqeGxpc3RfJyArIHR5cGUsIFtdKTtcXG4gICAgICAgICAgICAgICAgaSA9IGp4bGlzdC5tYXAoXyA9PiBfLnVybCkuaW5kZXhPZih1cmwpO1xcbiAgICAgICAgICAgICAgICBfID0ganhsaXN0W2ldO1xcbiAgICAgICAgICAgICAgICBtID0gbWQ1KF8udHlwZSArICc6JyArIF8udGl0bGUgKyAnOicgKyBfLnVybCk7XFxuICAgICAgICAgICAgICAgIHN3aXRjaCAoaW5wdXQpIHtcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ+WIhuS6qyc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF8ubTEgJiYgXy5tMSAhPSBcXFwiXFxcIiAmJiBfLm0xLmxlbmd0aCA9PSAzMikgXy5zMSA9IFxcXCIxXFxcIiwgXy5vcGVuID0gXFxcIjBcXFwiLCBfLmRvd24gPSBcXFwiMFxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF8ubTIgJiYgXy5tMiAhPSBcXFwiXFxcIiAmJiBfLm0xLmxlbmd0aCA9PSAzMiAmJiBfLnMyID09IFxcXCIwXFxcIikgXy5zMiA9IFxcXCIyXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICBfXyA9IHt9O1xcbiAgICAgICAgICAgICAgICAgICAgICAgIF9fW3R5cGVdID0gW19dO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIF9fID0gSlNPTi5zdHJpbmdpZnkoX18pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIF8gPSBiYXNlNjRFbmNvZGUoX18pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiY29weTovL+atjOivjemAgumFjeino+aekOWPo+S7pO+8jOaJk+W8gOa1t+mYlOWNs+WPr+WvvOWFpVxcXFxu77+lVGV4dO+/pVxcXCIgKyBfICsgJ0BpbXBvcnQ9anM6JC5yZXF1aXJlKFxcXCJqaWV4aT9ydWxlPeatjOivjemAgumFjVxcXCIpLnNldFJ1bGUoaW5wdXQpOyc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlICfnvJbovpEnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcXFwidHlwZVxcXCIsIFxcXCJvcGVuXFxcIiwgXFxcImRvd25cXFwiLCBcXFwiaW1nXFxcIiwgXFxcInRpdGxlXFxcIiwgXFxcImRlc2NcXFwiLCBcXFwidXJsXFxcIiwgXFxcImNvbnRlbnRcXFwiLCBcXFwibXAzXFxcIiwgXFxcImhxXFxcIiwgXFxcInNxXFxcIiwgXFxcImhyXFxcIiwgXFxcInpxXFxcIiwgXFxcImppZXhpXFxcIiwgXFxcInMxXFxcIiwgXFxcIm0xXFxcIiwgXFxcInMyXFxcIiwgXFxcIm0yXFxcIiwgXFxcInRpbWVcXFwiLCBcXFwidGlkXFxcIiwgXFxcInVpZFxcXCJdLm1hcCh0ID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcignanhfJyArIHQpXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2p4X3VpZCcsIG0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKF8pLm1hcCh0ID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2p4XycgKyB0LCBfW3RdIHx8IFxcXCJcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9ydWxlRWRpdCNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSM/cGFnZVRpdGxlPeinhOWImee8lui+kSZydWxlPeatjOivjemAgumFjSc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlICfliKDpmaQnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXCLnoa7lrprliKDpmaRcXFwiICsgXy50eXBlICsgXFxcIuino+aekOKAnFxcXCIgKyBfLnRpdGxlICsgJ+KAneWQl++8n1xcXFxu5q2k5pON5L2c5LiN5Y+v6YCG77yM6K+36LCo5oWO6YCJ5oup44CCJykuY29uZmlybSgodHlwZSwganhsaXN0LCBpKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp4bGlzdC5zcGxpY2UoaSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0oJ2p4bGlzdF8nICsgdHlwZSwganhsaXN0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHR5cGUsIGp4bGlzdCwgaSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlICfnp7vliqgnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGp4bGlzdC5zcGxpY2UoaSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgenUgPSBqeGxpc3QubWFwKF8gPT4gXy50aXRsZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoenUuY29uY2F0KFxcXCLmnIDlkI7pnaJcXFwiKSwgMiwgJ+ivt+mAieaLqeenu+WKqOS9jee9ricpLnNlbGVjdCgodHlwZSwganhsaXN0LCBfLCB6dSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0genUuaW5kZXhPZihpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09IC0xKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganhsaXN0LnB1c2goXyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp4bGlzdC5zcGxpY2UoaSwgMCwgXyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0oXFxcImp4bGlzdF9cXFwiICsgdHlwZSwganhsaXN0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHR5cGUsIGp4bGlzdCwgXywgenUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAn6YCJ5LitJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICBqeGxpc3QyID0gc3RvcmFnZTAuZ2V0TXlWYXIoXFxcImp4bGlzdDJcXFwiLCB7fSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAganhsaXN0MlttXSA9IF87XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcImp4bGlzdDJcXFwiLCBqeGxpc3QyKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlICflj5bmtojpgInkuK0nOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGp4bGlzdDIgPSBzdG9yYWdlMC5nZXRNeVZhcihcXFwianhsaXN0MlxcXCIsIHt9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUganhsaXN0MlttXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihcXFwianhsaXN0MlxcXCIsIGp4bGlzdDIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0sIF8udHlwZSwgXy51cmwpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJyxcXG4gICAgICAgICAgICBpbWc6IF8uaW1nIHx8ICQucmVxdWlyZSgnaW1hZ2U/cnVsZT3mrYzor43pgILphY0nKSgpXFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IF8udHlwZSArICfkuKgnICsgXy5kZXNjICsgJ+S4qCcgKyBfLnVybCxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHR5cGUsIHVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICBqeGxpc3QgPSBzdG9yYWdlMC5nZXRJdGVtKCdqeGxpc3RfJyArIHR5cGUsIFtdKTtcXG4gICAgICAgICAgICAgICAgaSA9IGp4bGlzdC5tYXAoXyA9PiBfLnVybCkuaW5kZXhPZih1cmwpO1xcbiAgICAgICAgICAgICAgICBqeF9vcGVuID0gKF8pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChfLnMxID09ICcwJykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIF8ub3BlbiA9IF8ub3BlbiA9PSAnMScgPyAnMCcgOiAnMSc7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKF8ub3BlbiA9PSAnMCcpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwiXFxcIiwgXFxcIuivt+i+k+WFpea/gOa0u+WvhuWMmVxcXCIpLmlucHV0KChqeGxpc3QsIGksIF8pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1kNShpbnB1dCkgPT0gXy5tMSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXy5zMSA9ICcwJztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8ub3BlbiA9ICcxJztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp4bGlzdFtpXSA9IF87XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKCdqeGxpc3RfJyArIF8udHlwZSwganhsaXN0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly/mv4DmtLvmiJDlip/vvIzmrKLov47kvb/nlKgnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lr4bljJnplJnor6/vvIzml6Dms5XlkK/nlKhcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGp4bGlzdCwgaSwgXyk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIF8ub3BlbiA9ICcwJ1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAganhsaXN0W2ldID0gXztcXG4gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0oJ2p4bGlzdF8nICsgdHlwZSwganhsaXN0KTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIGp4X29wZW4oanhsaXN0W2ldKTtcXG4gICAgICAgICAgICB9LCBfLnR5cGUsIF8udXJsKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfaWNvbicsXFxuICAgICAgICAgICAgaW1nOiAnaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9tZXNzeS8nICsgKF8ub3BlbiA9PSAnMScgPyA1NSA6IDYzKSArICcuc3ZnJyxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgfSk7XFxufVxcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuKRp+ino+aekOWkhOeQhlwiLFwicGF0aFwiOlwiamlleGlcIixcInJ1bGVcIjpcIiQuZXhwb3J0cyA9IHtcXG5cXG4gICAgR2V0TXVzaWNVcmw6IGZ1bmN0aW9uKHVUeXBlLCBwbGF0Zm9ybSwgdDEsIHQyLCBuYW1lLCBhcnRpc3QpIHtcXG4gICAgICAgIHF1YWxpdHkgPSBbXFxcIm1wM1xcXCIsIFxcXCJocVxcXCIsIFxcXCJzcVxcXCIsIFxcXCJoclxcXCIsIFxcXCJ6cVxcXCIsIFxcXCJ6cVxcXCIsIFxcXCJ6cVxcXCJdW3QyIHx8IDBdIHx8IFxcXCJtcDNcXFwiO1xcbiAgICAgICAganhsaXN0ID0gc3RvcmFnZTAuZ2V0SXRlbShcXFwianhsaXN0X1xcXCIgKyBwbGF0Zm9ybSwgW10pLmZpbHRlcihfID0+IF9bdVR5cGVdID09PSBcXFwiMVxcXCIgJiYgXy5zMSA9PT0gXFxcIjBcXFwiICYmIGFlc0RlY29kZSgnaGs2NjY2NjY2MTA5JywgX1txdWFsaXR5XSkpO1xcbiAgICAgICAgaWYgKGp4bGlzdC5sZW5ndGggPT0gMCkge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/msqHmnInlj6/nlKjnmoRcXFwiICsgKHVUeXBlID09IFxcXCJvcGVuXFxcIiA/IFxcXCLor5XlkKxcXFwiIDogXFxcIuS4i+i9vVxcXCIpICsgXFxcIuino+aekFxcXCI7XFxuICAgICAgICB9XFxuICAgICAgICBmb3IgKF8gb2YganhsaXN0KSB7XFxuICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgdXJsID0gZmFsc2VcXG4gICAgICAgICAgICAgICAgZXZhbChTdHJpbmcoYWVzRGVjb2RlKCdoazY2NjY2NjYxMDknLCBfW3F1YWxpdHldKSkpO1xcbiAgICAgICAgICAgICAgICBldmFsKFN0cmluZyhhZXNEZWNvZGUoJ2hrNjY2NjY2NjEwOScsIF8uamlleGkpKSk7XFxuICAgICAgICAgICAgICAgIGlmICh1cmwgJiYgdXJsICE9IFxcXCJcXFwiICYmICF1cmwubWF0Y2goXFxcIuS4i+i9veWksei0pVxcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXJsO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBjYXRjaCAoanNFcnJvcikge31cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/op6PmnpDlpLHotKVcXFwiXFxuICAgIH0sXFxuXFxuXFxuXFxuICAgIHNldFJ1bGU6IGZ1bmN0aW9uKGlucHV0LCBUeXBlKSB7XFxuICAgICAgICBbbG9nVCwgdHlwZSwgdGV4dF0gPSBTdHJpbmcoaW5wdXQpLnNwbGl0KFxcXCLvv6VcXFwiKTtcXG4gICAgICAgIHN3aXRjaCAoU3RyaW5nKHR5cGUpKSB7XFxuICAgICAgICAgICAgY2FzZSAnUGFzdGUnOlxcbiAgICAgICAgICAgICAgICB0ZXh0ID0gcGFyc2VQYXN0ZSh0ZXh0KTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgY2FzZSAnTGFuem91JzpcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICB9XFxuICAgICAgICB3cml0ZUZpbGUoXFxcImhpa2VyOi8vZmlsZXMvX2NhdGNoL0ltcG9ydC50eHRcXFwiLCBiYXNlNjREZWNvZGUodGV4dCkpO1xcbiAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL3BhZ2UvcmVseVxcXCIgKyAoVHlwZSB8fCAxKSArIFxcXCIjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjP3J1bGU95q2M6K+N6YCC6YWNXFxcIjtcXG4gICAgfSxcXG5cXG5cXG5cXG4gICAgc2V0RWRpdDogZnVuY3Rpb24oKSB7XFxuICAgICAgICBfID0ge1xcbiAgICAgICAgICAgIHR5cGU6IGdldE15VmFyKFxcXCJqeF90eXBlXFxcIiwgXFxcImt3XFxcIiksXFxuICAgICAgICAgICAgb3BlbjogZ2V0TXlWYXIoXFxcImp4X29wZW5cXFwiLCBcXFwiMVxcXCIpLFxcbiAgICAgICAgICAgIGRvd246IGdldE15VmFyKFxcXCJqeF9kb3duXFxcIiwgXFxcIjBcXFwiKSxcXG5cXG4gICAgICAgICAgICBpbWc6IGdldE15VmFyKFxcXCJqeF9pbWdcXFwiLCBcXFwiXFxcIiksXFxuICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKFxcXCJqeF90aXRsZVxcXCIsIFxcXCJcXFwiKSxcXG4gICAgICAgICAgICBkZXNjOiBnZXRNeVZhcihcXFwianhfZGVzY1xcXCIsIFxcXCJcXFwiKSxcXG4gICAgICAgICAgICB1cmw6IGdldE15VmFyKFxcXCJqeF91cmxcXFwiLCBcXFwiXFxcIiksXFxuICAgICAgICAgICAgY29udGVudDogZ2V0TXlWYXIoXFxcImp4X2NvbnRlbnRcXFwiLCBcXFwiXFxcIiksXFxuXFxuICAgICAgICAgICAgbXAzOiBnZXRNeVZhcihcXFwianhfbXAzXFxcIiwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgIGhxOiBnZXRNeVZhcihcXFwianhfaHFcXFwiLCBcXFwiXFxcIiksXFxuICAgICAgICAgICAgc3E6IGdldE15VmFyKFxcXCJqeF9zcVxcXCIsIFxcXCJcXFwiKSxcXG4gICAgICAgICAgICBocjogZ2V0TXlWYXIoXFxcImp4X2hyXFxcIiwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgIHpxOiBnZXRNeVZhcihcXFwianhfenFcXFwiLCBcXFwiXFxcIiksXFxuICAgICAgICAgICAgamlleGk6IGdldE15VmFyKFxcXCJqeF9qaWV4aVxcXCIsIFxcXCJcXFwiKSxcXG5cXG4gICAgICAgICAgICBzMTogZ2V0TXlWYXIoXFxcImp4X3MxXFxcIiwgXFxcIjBcXFwiKSxcXG4gICAgICAgICAgICBtMTogZ2V0TXlWYXIoXFxcImp4X20xXFxcIiwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgIHMyOiBnZXRNeVZhcihcXFwianhfczJcXFwiLCBcXFwiMFxcXCIpLFxcbiAgICAgICAgICAgIG0yOiBnZXRNeVZhcihcXFwianhfbTJcXFwiLCBcXFwiXFxcIiksXFxuICAgICAgICAgICAgdGltZTogbmV3IERhdGUoKS5nZXRUaW1lKClcXG4gICAgICAgIH07XFxuICAgICAgICBpZiAoXy50aXRsZSAhPSBcXFwiXFxcIiAmJiBfLnVybCAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgIGZvciAodCBpbiBfKSB7XFxuICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoJ2p4XycgKyB0KTtcXG4gICAgICAgICAgICAgICAgaWYgKF9bdF0gPT0gXFxcIlxcXCIgfHwgX1t0XSA9PSBcXFwiVmZhbmFocy95MGlaeGNTTDBQSkFjUT09XFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIF9bdF07XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAganhsaXN0ID0gc3RvcmFnZTAuZ2V0SXRlbSgnanhsaXN0XycgKyBfLnR5cGUsIFtdKTtcXG4gICAgICAgICAgICB1aWRzID0ganhsaXN0Lm1hcChfXyA9PiBtZDUoX18udHlwZSArICc6JyArIF9fLnRpdGxlICsgJzonICsgX18udXJsKSk7XFxuICAgICAgICAgICAgaSA9IHVpZHMuaW5kZXhPZihnZXRNeVZhcignanhfdWlkJywgJy0xJykpO1xcbiAgICAgICAgICAgIGlmIChpID09IC0xKSB7XFxuICAgICAgICAgICAgICAgIGp4bGlzdC5wdXNoKF8pO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGp4bGlzdC5zcGxpY2UoaSwgMSwgXyk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGNsZWFyTXlWYXIoJ2p4X3RpZCcpO1xcbiAgICAgICAgICAgIGNsZWFyTXlWYXIoJ2p4X3VpZCcpO1xcbiAgICAgICAgICAgIGp4bGlzdCA9IGp4bGlzdC5maWx0ZXIoKG9iaiwgaW5kZXgsIGFycikgPT4ge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJyLmZpbmRJbmRleChvID0+IG1kNShvYmoudGl0bGUgKyBvYmoudXJsKSA9PT0gbWQ1KG8udGl0bGUgKyBvLnVybCkpID09PSBpbmRleDtcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKCdqeGxpc3RfJyArIF8udHlwZSwganhsaXN0KTtcXG4gICAgICAgICAgICByZXR1cm4gYmFjayh0cnVlKSwgJ3RvYXN0Oi8v5L+d5a2Y5oiQ5YqfJztcXG4gICAgICAgIH0gZWxzZSBpZiAoXy50aXRsZSA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/or7floavlhpnmupDlkI3np7AnO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6K+35aGr5YaZ5rqQ5qCH6K+GJztcXG4gICAgICAgIH1cXG4gICAgfSxcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLikajop6PmnpDlr7zlhaVcIixcInBhdGhcIjpcInJlbHkxXCIsXCJydWxlXCI6XCJqczpcXG5pbmRleCA9IDA7XFxuaW5kZXgyID0gMDtcXG5qc29uID0gSlNPTi5wYXJzZShmZXRjaChcXFwiaGlrZXI6Ly9maWxlcy9fY2F0Y2gvSW1wb3J0LnR4dFxcXCIpKTtcXG5mb3IgKGtleSBpbiBqc29uKSB7XFxuICAgIGlmIChqc29uW2tleV0ubGVuZ3RoICE9IDApIHtcXG4gICAgICAgIGluZGV4ICs9IGpzb25ba2V5XS5sZW5ndGg7XFxuICAgICAgICBqeGxpc3QgPSBzdG9yYWdlMC5nZXRJdGVtKFxcXCJqeGxpc3RfXFxcIiArIGtleSwgW10pO1xcbiAgICAgICAgaW5kZXgzID0ganhsaXN0Lmxlbmd0aDtcXG4gICAgICAgIGp4bGlzdCA9IGpzb25ba2V5XS5jb25jYXQoanhsaXN0KTtcXG4gICAgICAgIGp4bGlzdCA9IGp4bGlzdC5maWx0ZXIoKG9iaiwgaW5kZXgsIGFycikgPT4ge1xcbiAgICAgICAgICAgIHJldHVybiBhcnIuZmluZEluZGV4KG8gPT4gbWQ1KG9iai50aXRsZSArIG9iai51cmwpID09PSBtZDUoby50aXRsZSArIG8udXJsKSkgPT09IGluZGV4O1xcbiAgICAgICAgfSk7XFxuICAgICAgICBpbmRleDIgKz0ganhsaXN0Lmxlbmd0aCAtIGluZGV4MztcXG4gICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0oXFxcImp4bGlzdF9cXFwiICsga2V5LCBqeGxpc3QpO1xcbiAgICB9XFxufVxcbnRvYXN0KFxcXCLop6PmnpDlr7zlhaXmiJDlip/vvIzlkIjorqEgXFxcIiArIGluZGV4ICsgXFxcIiDkuKrvvIzlr7zlhaUgXFxcIiArIGluZGV4MiArIFxcXCIg5LiqXFxcIik7XFxuYmFjayhmYWxzZSk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLikanmlLbol4/lr7zlhaVcIixcInBhdGhcIjpcInJlbHkyXCIsXCJydWxlXCI6XCJqczpcXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9saWI/cnVsZT3mrYzor43pgILphY0nLCB7fSkpLnJ1bGUpO1xcbl8gPSBKU09OLnBhcnNlKGZldGNoKFxcXCJoaWtlcjovL2ZpbGVzL19jYXRjaC9JbXBvcnQudHh0XFxcIikpO1xcbnNldFBhZ2VUaXRsZSgn5om56YeP5pON5L2c77ya5pS26JePJyArIFtcXFwi5a+85YWlXFxcIiwgXFxcIuWIhuS6q1xcXCIsIFxcXCLliKDpmaRcXFwiXVtfLnR5cGVdKTtcXG5cXG5cXG5cXG5cXG5cXG5hZGRsaXN0ID0gc3RvcmFnZTAuZ2V0TXlWYXIoXFxcImFkZGxpc3RcXFwiLCBbXSk7XFxuaWYgKGFkZGxpc3QubGVuZ3RoID09IDAgJiYgXy5waXRjaCA9PSAxICYmIGdldE15VmFyKCdhZGRwaXRjaCcpICE9ICcxJykge1xcbiAgICBmb3IgKGkgPSAwOyBpIDwgXy5kYXRhLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICBhZGRsaXN0LnB1c2goaSk7XFxuICAgIH1cXG4gICAgcHV0TXlWYXIoJ2FkZGxpc3QnLCBhZGRsaXN0KTtcXG4gICAgcHV0TXlWYXIoJ2FkZHBpdGNoJywgJzEnKTtcXG59XFxuZCA9IF8uZGF0YS5tYXAoKF8sIGkpID0+IHtcXG4gICAgZGVsZXRlIF8uZXh0cmE7XFxuICAgIF8uY29sX3R5cGUgPSAnY2FyZF9waWNfMyc7XFxuICAgIF8udGl0bGUgPSBhZGRsaXN0LmluY2x1ZGVzKGkpID8gUmljaChTdHJvbmcoQ29sb3IoXy50aXRsZSkpKSA6IF8udGl0bGU7XFxuICAgIF8udXJsID0gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoYWRkbGlzdCwgaSkgPT4ge1xcbiAgICAgICAgaWYgKGFkZGxpc3QuaW5jbHVkZXMoaSkpIGFkZGxpc3QgPSBhZGRsaXN0LmZpbHRlcihJID0+IEkgIT09IGkpO1xcbiAgICAgICAgZWxzZSBhZGRsaXN0LnB1c2goaSk7XFxuICAgICAgICBwdXRNeVZhcignYWRkbGlzdCcsIGFkZGxpc3QpO1xcbiAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgfSwgYWRkbGlzdCwgaSk7XFxuICAgIHJldHVybiBfO1xcbn0pO1xcbmlmIChkLmxlbmd0aCA9PSBhZGRsaXN0Lmxlbmd0aCkge1xcbiAgICB0aXRsZSA9ICfimIUg5Y+W5raI5YWo6YCJIOKYhSc7XFxuICAgIHVybCA9ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICAgICAgY2xlYXJNeVZhcignYWRkbGlzdCcpO1xcbiAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgIH0pO1xcbn0gZWxzZSB7XFxuICAgIHRpdGxlID0gJ+KYhSDpgInmi6nlhajpg6gg4piFJztcXG4gICAgdXJsID0gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgobGVuKSA9PiB7XFxuICAgICAgICBhZGRsaXN0ID0gW107XFxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIGFkZGxpc3QucHVzaChpKTtcXG4gICAgICAgIHB1dE15VmFyKCdhZGRsaXN0JywgYWRkbGlzdCk7XFxuICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICB9LCBkLmxlbmd0aCk7XFxufVxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn56Gu5a6a6YCJ5oupJyxcXG4gICAgY29sX3R5cGU6ICdjYXJkX3BpY18zJyxcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChhZGRsaXN0LCBzaSwgdHlwZSwgbmFtZSkgPT4ge1xcbiAgICAgICAgaWYgKGFkZGxpc3QubGVuZ3RoID09PSAwKSByZXR1cm4gXFxcInRvYXN0Oi8v5rKh5pyJ6YCJ5Lit5q2M5puyXFxcIjtcXG5cXG4gICAgICAgIG5ld0RhdGFzID0gSlNPTi5wYXJzZShmZXRjaChcXFwiaGlrZXI6Ly9maWxlcy9fY2F0Y2gvSW1wb3J0LnR4dFxcXCIpKS5kYXRhO1xcbiAgICAgICAgbmV3RGF0YXMgPSBhZGRsaXN0Lm1hcChpID0+IHtcXG4gICAgICAgICAgICBfID0gbmV3RGF0YXNbaV07XFxuICAgICAgICAgICAgZGVsZXRlIF8uZXh0cmE7XFxuICAgICAgICAgICAgZGVsZXRlIF8uY29sX3R5cGU7XFxuICAgICAgICAgICAgcmV0dXJuIF87XFxuICAgICAgICB9KTtcXG4gICAgICAgIGNsZWFyTXlWYXIoJ2FkZGxpc3QnKTtcXG4gICAgICAgIGNsZWFyTXlWYXIoJ2FkZHBpdGNoJyk7XFxuICAgICAgICBpZiAodHlwZSA9PT0gMClcXG4gICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJsaWI/cnVsZT3mrYzor43pgILphY1cXFwiKS5sb2dEYXRhKG5ld0RhdGFzLCBzaSwgbmFtZSB8fCBcXFwiXFxcIik7XFxuICAgICAgICBlbHNlIGlmICh0eXBlID09PSAxKVxcbiAgICAgICAgICAgIHJldHVybiAkKG5hbWUgfHwgXFxcIlxcXCIsIFxcXCLnoa7lrprliIbnu4TlkI3np7BcXFwiKS5pbnB1dCgoc2ksIG5ld0RhdGFzKSA9PiB7XFxuICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICBqc29uID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IDAsXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGl0Y2g6IDEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgc2k6IHNpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGlucHV0LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IG5ld0RhdGFzXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB0ID0gYmFzZTY0RW5jb2RlKEpTT04uc3RyaW5naWZ5KGpzb24pKTtcXG4gICAgICAgICAgICAgICAgICAgIHUgPSBzaGFyZVBhc3RlKHQpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJjb3B5Oi8v5q2M6K+N6YCC6YWN5pS26JeP5Y+j5Luk77yM5omT5byA5rW36ZiU5Y2z5Y+v5a+85YWlXFxcXG7vv6VQYXN0Ze+/pVxcXCIgKyB1ICsgYEBpbXBvcnQ9anM6JC5yZXF1aXJlKFxcXCJqaWV4aT9ydWxlPeatjOivjemAgumFjVxcXCIpLnNldFJ1bGUoaW5wdXQsMik7YDtcXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5YiG5Lqr5aSx6LSlXFxcIjtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0sIHNpLCBuZXdEYXRhcyk7XFxuXFxuICAgIH0sIGFkZGxpc3QsIF8uc2ksIF8udHlwZSwgXy5uYW1lKSxcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIGxvbmdDbGljazogW3tcXG4gICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKHVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdXJsXFxuICAgICAgICAgICAgfSwgdXJsKVxcbiAgICAgICAgfV1cXG4gICAgfSxcXG4gICAgaW1nOiAkLnJlcXVpcmUoJ2ltYWdlP3J1bGU95q2M6K+N6YCC6YWNJykoJ2FkZCcpXFxufSk7XFxuc2V0UmVzdWx0KGQpO1wifV0iLCJpY29uIjoiaHR0cDovL21tYml6LnFwaWMuY24vbW1iaXpfcG5nLzVzN0oyOFU5R0hWaWNEN2d1dnliYXNlODZIaEhDMTJvT0RidHJzZ0s3Q3hyajVRcEw2Z0tueWliZVpEd0VLSVZLVU90UG9IY3hwZndhMHBvbloxaWE1bmxBLzA/d3hfZm10PXBuZyIsInByb3h5IjoiIn0=
Add Comment
Please, Sign In to add comment