xiaomianao666

小程序:歌词适配

Mar 2nd, 2024
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@歌词适配@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoi5q2M6K+N6YCC6YWNIiwiYXV0aG9yIjoiVGhvbWFz5ZayIiwidXJsIjoiaGlrZXI6Ly9lbXB0eT9wPWZ5cGFnZSIsInZlcnNpb24iOjIwMjMxMjEyLCJjb2xfdHlwZSI6Im1vdmllXzMiLCJjbGFzc19uYW1lIjoiIiwidHlwZSI6ImFsbCIsImNsYXNzX3VybCI6IiIsImFyZWFfbmFtZSI6IiIsImFyZWFfdXJsIjoiIiwic29ydF9uYW1lIjoiIiwieWVhcl9uYW1lIjoiIiwic29ydF91cmwiOiIiLCJ5ZWFyX3VybCI6IiIsImZpbmRfcnVsZSI6ImpzOiQucmVxdWlyZSgnaG9tZT9ydWxlPeatjOivjemAgumFjScpOyIsInNlYXJjaF91cmwiOiJoaWtlcjovL2VtcHR5P3M9KioiLCJncm91cCI6IuKRqOmfs+S5kCIsInNlYXJjaEZpbmQiOiJqczpcbnNldFJlc3VsdChbe1xuICAgIHRpdGxlOiBcIuaQnOe0oiA9PiBcIiArIE1ZX0tFWVdPUkQsXG4gICAgZGVzYzogJ+mAmui/h1wi6auY57qn5pCc57SiXCLpobXpnaLmkJzntKInLFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoc190MikgPT4ge1xuICAgICAgICBpZiAoZ2V0TXlWYXIoJ3NfcGxhdGZvcm0nLCAnbGliJykgPT0gJ2xpYicpXG4gICAgICAgICAgICBwdXRNeVZhcignc19wbGF0Zm9ybScsIGdldEl0ZW0oJ3NfcGxhdGZvcm0nLCAna3cnKSk7XG4gICAgICAgIHB1dE15VmFyKCdzX3QyJywgc190Mik7XG4gICAgICAgIHJldHVybiBcImhpa2VyOi8vcGFnZS9zZWFyY2gjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjP3A9ZnlwYWdlJnJ1bGU95q2M6K+N6YCC6YWNXCI7XG4gICAgfSwgTVlfS0VZV09SRCksXG4gICAgZXh0cmE6IHtcbiAgICAgICAgcGFnZVRpdGxlOiBcIumrmOe6p+aQnOe0olwiXG4gICAgfVxufV0pOyIsImRldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJkZXRhaWxfZmluZF9ydWxlIjoiIiwic2RldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJzZGV0YWlsX2ZpbmRfcnVsZSI6IiIsInVhIjoibW9iaWxlIiwicHJlUnVsZSI6IiIsInBhZ2VzIjoiW3tcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLikaBsaWJcIixcInBhdGhcIjpcImxpYlwiLFwicnVsZVwiOlwiYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgY2xlYXJNeVZhcignYWRkbGlzdCcpO1xcbiAgICBjbGVhck15VmFyKCdhZGRwaXRjaCcpO1xcbn0pKTtcXG5jb25zdCBpZCA9IFxcXCJnY3NwMTk5OVxcXCI7XFxuY29uc3QgZW1wdHkgPSAnaGlrZXI6Ly9lbXB0eT9wPWZ5cGFnZSc7XFxuY29uc3QgQ29sb3IgPSAodGVzdCwgY29sb3IpID0+IHtcXG4gICAgcmV0dXJuICc8Zm9udCBjb2xvcj1cXFwiIycgKyAoY29sb3IgfHwgJ0ZBNzI5OCcpICsgJ1xcXCI+JyArIHRlc3QgKyAnPC9mcm9udD4nO1xcbn1cXG5jb25zdCBTdHJvbmcgPSAodGVzdCkgPT4ge1xcbiAgICByZXR1cm4gJzxzdHJvbmc+JyArIHRlc3QgKyAnPC9zdHJvbmc+JztcXG59XFxuY29uc3QgUmljaCA9ICh0ZXN0KSA9PiB7XFxuICAgIHJldHVybiBcXFwi4oCY4oCY4oCZ4oCZXFxcIiArIFN0cmluZyh0ZXN0KVxcbiAgICAgICAgLnJlcGxhY2UoL1xcXFxcXFxcbnwoPHxcXFxccyspYnJcXFxccypcXFxcLz9cXFxccyo+L2dpLCAnXFxcXG4nKVxcbiAgICAgICAgLnJlcGxhY2UoL1xcXFxcXFxcci9nLCAnXFxcXHInKVxcbiAgICAgICAgLnJlcGxhY2UoL1xcXFxcXFxcZi9nLCAnXFxcXGYnKVxcbiAgICAgICAgLnJlcGxhY2UoL1xcXFxcXFxcdC9nLCAnXFxcXHQnKVxcbiAgICAgICAgLnJlcGxhY2UoLyYobHR8Z3R8bmJzcHxhbXB8cXVvdCk7L2dpLCAoJDAsICQxKSA9PiAoe1xcbiAgICAgICAgICAgICdsdCc6ICc8JyxcXG4gICAgICAgICAgICAnZ3QnOiAnPicsXFxuICAgICAgICAgICAgJ25ic3AnOiAnICcsXFxuICAgICAgICAgICAgJ2FtcCc6ICcmJyxcXG4gICAgICAgICAgICAncXVvdCc6ICdcXFwiJ1xcbiAgICAgICAgfVskMS50b0xvd2VyQ2FzZSgpXSkpXFxuICAgICAgICAucmVwbGFjZSgvPFxcXFwvP2VtW14+XSo+L2dpLCAnJyk7XFxufVxcbmNvbnN0IFIgPSB4ID0+IHtcXG4gICAgdCA9IFxcXCJcXFwiO1xcbiAgICBmb3IgKGkgPSAwOyBpIDwgeDsgaSsrKSB0ICs9IFxcXCIxMjM0NTY3ODkwYWJjZGVmXFxcIiBbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTYpXTtcXG4gICAgcmV0dXJuIHRcXG59XFxuY29uc3QgU2l6ZSA9IHNpemUgPT4ge1xcbiAgICBpZiAoIXNpemUpIHJldHVybiAnJztcXG4gICAgdW5pdHMgPSBbJ0InLCAnS0InLCAnTUInLCAnR0InXTtcXG4gICAgbGV0IGkgPSAwO1xcbiAgICB3aGlsZSAoc2l6ZSA+PSAxMDI0KSB7XFxuICAgICAgICBzaXplIC89IDEwMjQ7XFxuICAgICAgICBpKys7XFxuICAgIH1cXG4gICAgc2l6ZSA9IGkgPyBzaXplLnRvRml4ZWQoMikgOiBzaXplO1xcbiAgICByZXR1cm4gYCR7c2l6ZX0gJHt1bml0c1tpXX1gO1xcbn1cXG5jb25zdCBMb2FkaW5nID0gKCkgPT4ge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdXJsOiBcXFwidG9hc3Q6Ly/liqDovb3kuK0uLi5cXFwiLFxcbiAgICAgICAgaW1nOiBcXFwiaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3dlaXN5ci9pbWcvTG9hZGluZzEuZ2lmXFxcIixcXG4gICAgICAgIGNvbF90eXBlOiBcXFwicGljXzFfY2VudGVyXFxcIixcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgY2xzOiBcXFwibG9hZGluZ19naWZcXFwiXFxuICAgICAgICB9XFxuICAgIH0pO1xcbiAgICBzZXRQcmVSZXN1bHQoZCk7XFxufTtcXG5bJ3d5JywgJ21nJ10ubWFwKHQgPT4ge1xcbiAgICBpZiAoZ2V0TXlWYXIodCArICdqeF96cScpID09IFxcXCJcXFwiKSB7XFxuICAgICAgICBpZiAoc3RvcmFnZTAuZ2V0SXRlbShcXFwianhsaXN0X1xcXCIgKyB0LCBbXSkuZmlsdGVyKF8gPT4gXy5kb3duID09PSBcXFwiMVxcXCIgJiYgXy5zMSA9PT0gXFxcIjBcXFwiICYmIGFlc0RlY29kZSgnaGs2NjY2NjY2MTA5JywgXy56cSkpLmxlbmd0aCAhPSAwKSB7XFxuICAgICAgICAgICAgcHV0TXlWYXIodCArICdqeF96cScsICcxJyk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHB1dE15VmFyKHQgKyAnanhfenEnLCAnMCcpO1xcbiAgICAgICAgfVxcbiAgICB9XFxufSk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxucGxhdGZvcm1zID0gW1xcXCJsaWJcXFwiLCBcXFwicXFcXFwiLCBcXFwid3lcXFwiLCBcXFwia2dcXFwiLCBcXFwia3dcXFwiLCBcXFwibWdcXFwiLCBcXFwiNXNcXFwiLCBcXFwibXlcXFwiLCBcXFwicXRcXFwiXTtcXG5wbGF0Zm9ybSA9IGdldE15VmFyKCdwbGF0Zm9ybScsIGdldEl0ZW0oJ3BsYXRmb3JtJywgJ2t3JykpO1xcbmlmIChwbGF0Zm9ybSA9PSAnbGliJykge1xcbiAgICB2YXIgbmV3QXJyID0gcGxhdGZvcm1zLnNsaWNlKDEsIDgpO1xcbiAgICB2YXIgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBuZXdBcnIubGVuZ3RoKTtcXG4gICAgdmFyIHBsYXRmb3JtID0gbmV3QXJyW3JhbmRvbUluZGV4XTtcXG4gICAgcHV0TXlWYXIoJ3BsYXRmb3JtJywgcGxhdGZvcm0pO1xcbn1cXG50cyA9IFtcXFwi44CQ5rWB55WF6Z+z6LSo44CRXFxcIiwgXFxcIuOAkOagh+WHhumfs+i0qOOAkVxcXCIsIFxcXCLjgJDpq5jlk4Hpn7PotKjjgJFcXFwiLCBcXFwi44CQ5peg5o2f6Z+z6LSo44CRXFxcIiwgXFxcIuOAkOmrmOWTgeaXoOaNn+OAkVxcXCIsIFxcXCLjgJDnq4vkvZPml6DmjZ/jgJFcXFwiXTtcXG5xdHMgPSBbXFxcImxpYlxcXCIsIFxcXCJiZFxcXCIsIFxcXCJ6elxcXCIsIFxcXCJuaVxcXCIsIFxcXCJmcFxcXCIsIFxcXCJzdFxcXCIsIFxcXCJodFxcXCIsIFxcXCIxdFxcXCIsIFxcXCI5dFxcXCIsIFxcXCI1bmRcXFwiLCBcXFwiYml1XFxcIiwgXFxcImJsbVxcXCIsIFxcXCJtdXNcXFwiLCBcXFwiamFtXFxcIiwgXFxcImp1aVxcXCIsIFxcXCJ5M1xcXCIsIFxcXCIzNjVcXFwiLCBcXFwia3pcXFwiLCBcXFwia3lcXFwiLCBcXFwiZGoxXFxcIiwgXFxcImRqMlxcXCIsIFxcXCJkajNcXFwiLCBcXFwiZGo0XFxcIiwgXFxcImRqNVxcXCIsIFxcXCJkajZcXFwiLCBcXFwiZGo3XFxcIiwgXFxcImRqOFxcXCIsIFxcXCJkajlcXFwiXTtcXG5cXG5cXG5cXG5jb25zdCBMYXp5ID0gKHBsYXRmb3JtLCB0MSwgdDIsIHQzKSA9PiB7XFxuICAgIGlmICh0MSA9PSAyIHx8IHQxID09IDMpXFxuICAgICAgICByZXR1cm4gJChlbXB0eSkucnVsZSgoYSwgYiwgYykgPT4ge1xcbiAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoYSArIFxcXCI/cnVsZT3mrYzor43pgILphY1cXFwiKS5sYXp5KGIsIGMpO1xcbiAgICAgICAgfSwgcGxhdGZvcm0sIHQxLCB0MilcXG4gICAgZWxzZVxcbiAgICAgICAgcmV0dXJuICQoXFxcIiNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSNcXFwiKS5sYXp5UnVsZSgoYSwgYiwgYykgPT4ge1xcbiAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoYSArIFxcXCI/cnVsZT3mrYzor43pgILphY1cXFwiKS5sYXp5KDAsIGIsIGMpO1xcbiAgICAgICAgfSwgcGxhdGZvcm0sIHQyLCB0MyB8fCAwKTtcXG59XFxuXFxuXFxuXFxuXFxuXFxuXFxuY29uc3QgRXh0cmEgPSAoXywgcjEsIHIyLCByMykgPT4ge1xcbiAgICBpZiAocjEpIHtcXG4gICAgICAgIF8udGl0bGUgPSBSaWNoKF8udGl0bGUpLnJlcGxhY2UoXFxcIuKAmOKAmOKAmeKAmVxcXCIsICcnKTtcXG4gICAgICAgIF8uaW1nID0gU3RyaW5nKF8uaW1nKS5yZXBsYWNlKC97c2l6ZX0vZ2ksICc0ODAnKTtcXG4gICAgICAgIF8uY29udGVudCA9IF8uY29udGVudCArICcnO1xcbiAgICAgICAgXy56eWlkID0gXy56eWlkICsgJyc7XFxuICAgICAgICBpZiAoIV8uZGVzYykgXy5kZXNjID0gdGhpc19wbGF0Zm9ybTtcXG4gICAgfVxcbiAgICB0MSA9IE51bWJlcihfLmNvbnRlbnQucmVwbGFjZSgvXihcXFxcZD9cXFxcRFxcXFxkPykrJC8sICcwJykpIDwgMiA/IDAgOiAxO1xcbiAgICBfLmV4dHJhID0ge1xcbiAgICAgICAgaW5oZXJpdFRpdGxlOiBmYWxzZSxcXG4gICAgICAgIGNsczogaWQgKyAnOmFkZGxpc3QnLFxcbiAgICAgICAgbG9uZ0NsaWNrOiBbXFxuICAgICAgICAgICAgLyp7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLimIUg5YiG5Lqr6ZO+5o6lIOKYhVxcXCIsXFxuICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKGEsIGIsIGMpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwibGliP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuY29weXVybChhLCBiLCBjKTtcXG4gICAgICAgICAgICB9LCBfLmRlc2MsIF8uY29udGVudCwgXy56eWlkKVxcbiAgICAgICAgfSwgKi9cXG4gICAgICAgICAgICB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi4piFIOaUtuiXj1xcXCIgKyAodDEgPyAn5q2M5Y2VJyA6ICfljZXmm7InKSArIFxcXCIg4piFXFxcIixcXG4gICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKHQxLCBfKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJsaWI/cnVsZT3mrYzor43pgILphY1cXFwiKS5sb2dEYXRhKF8sIHQxKTtcXG4gICAgICAgICAgICAgICAgfSwgdDEsIF8pXFxuICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuKYhSDmibnph4/mlLbol48g4piFXFxcIixcXG4gICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKGNsc0lkLCBzaSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAganNvbiA9IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAwLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBpdGNoOiAwLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpOiBzaSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBmaW5kSXRlbXNCeUNscyhjbHNJZClcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShcXFwiaGlrZXI6Ly9maWxlcy9fY2F0Y2gvSW1wb3J0LnR4dFxcXCIsIEpTT04uc3RyaW5naWZ5KGpzb24pKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9wYWdlL3JlbHkyI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5Iz9ydWxlPeatjOivjemAgumFjVxcXCI7XFxuICAgICAgICAgICAgICAgIH0sIGlkICsgJzphZGRsaXN0JywgdDEpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgXVxcbiAgICB9O1xcbiAgICBpZiAocjMpIHtcXG4gICAgICAgIF8udXJsID0gcjM7XFxuICAgICAgICBfLmV4dHJhLmxvbmdDbGljay51bnNoaWZ0KHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIuKYhSDkuIvovb3mrYzmm7Ig4piFXFxcIixcXG4gICAgICAgICAgICBqczogJC50b1N0cmluZygobmFtZXMsIHVybHMpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQobmFtZXMsIDEsICfpgInmi6nkuIvovb3pn7PotKgnKS5zZWxlY3QoKG5hbWVzLCB1cmxzKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBpID0gbmFtZXMuaW5kZXhPZihpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2Rvd25sb2FkOi8vJyArIHVybHNbaV07XFxuICAgICAgICAgICAgICAgIH0sIG5hbWVzLCB1cmxzKTtcXG4gICAgICAgICAgICB9LCByMy5uYW1lcywgcjMudXJscylcXG4gICAgICAgIH0pO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgXy51cmwgPSBMYXp5KF8uZGVzYywgXy5jb250ZW50LCBfLnp5aWQpO1xcbiAgICAgICAgaWYgKCF0MSkgXy5leHRyYS5sb25nQ2xpY2sudW5zaGlmdCh7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLimIUg5LiL6L295q2M5puyIOKYhVxcXCIsXFxuICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKHVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdXJsO1xcbiAgICAgICAgICAgIH0sIExhenkoXy5kZXNjLCBfLmNvbnRlbnQsIF8uenlpZCwgMSkpXFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICBfLmNvbF90eXBlID0gJ2NhcmRfcGljXzMnO1xcbiAgICBpZiAocjIpIHJldHVybiBfO1xcbiAgICBkLnB1c2goXyk7XFxufVxcblxcblxcblxcblxcblxcblxcblxcblxcblxcbiQuZXhwb3J0cyA9IHtcXG5cXG5cXG5cXG4gICAgbG9nRGF0YTogZnVuY3Rpb24obmV3RGF0YSwgc2ksIG5hbWUpIHtcXG4gICAgICAgIGlmIChuZXdEYXRhLnp5aWQgPT09IFxcXCJ1bmRlZmluZWRcXFwiKVxcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/kuI3mlK/mjIHmlLbol49+XFxcIjtcXG5cXG4gICAgICAgIGxldCB6eSA9IHN0b3JhZ2UwLmdldEl0ZW0oXFxcImRhdGFfXFxcIiArIHNpKTtcXG4gICAgICAgIGlmICh6eSA9PT0gXFxcIlxcXCIpIHp5ID0ge1xcbiAgICAgICAgICAgIFxcXCLlhajpg6hcXFwiOiBbXVxcbiAgICAgICAgfSwgc3RvcmFnZTAuc2V0SXRlbShcXFwiZGF0YV9cXFwiICsgc2ksIHp5KTtcXG4gICAgICAgIGxldCB6dSA9IE9iamVjdC5rZXlzKHp5KTtcXG5cXG5cXG4gICAgICAgIHJldHVybiAkKHp1LmNvbmNhdChcXFwi5paw57uEXFxcIiksIDMsIFxcXCLpgInmi6nnu4RcXFwiKS5zZWxlY3QoKHp5LCB6dSwgbmV3RGF0YSwgc2ksIG5hbWUpID0+IHtcXG4gICAgICAgICAgICBpZiAoaW5wdXQgPT0gXFxcIuaWsOe7hFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgaWYgKCF6dS5pbmNsdWRlcyhpbnB1dCkpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKG5hbWUsIFxcXCLor7fovpPlhaXmlrDnu4TlkI3np7BcXFwiKS5pbnB1dCgoenksIHp1LCBuZXdEYXRhLCBzaSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dC50cmltKCkubWF0Y2goL15cXFxcZCt8XlxcXFxzKijmlrDnu4QpP1xcXFxzKiQvKSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+e7hOWQjeS4jeiDveS4uuepuiAmIOacgOWJjemdouS4jeiDveaYr+aVsOWtlyAmIOS5n+S4jeiDveWPq+aWsOe7hFxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoenUuY29uY2F0KFxcXCLmnIDlkI7pnaJcXFwiKSwgMywgJ+ivt+mAieaLqeaWsOe7hOS9jee9ricpLnNlbGVjdCgoenksIGlucHV0MiwgbmV3RGF0YXMsIHNpKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0RhdGEgPSBBcnJheS5pc0FycmF5KG5ld0RhdGFzKSA/IG5ld0RhdGFzIDogW25ld0RhdGFzXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0ID09IFxcXCLmnIDlkI7pnaJcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6eVtpbnB1dDJdID0gbmV3RGF0YTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24gPSB7fTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSBpbiB6eSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09IGlucHV0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb25baW5wdXQyXSA9IG5ld0RhdGE7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb25baV0gPSB6eVtpXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5ID0ganNvbjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShuZXdEYXRhcykpIGJhY2sodHJ1ZSksIHRvYXN0KCfmiJDlip8nKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwibGliP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuc2V0RGF0YShzaSwgenkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHp5LCBpbnB1dCwgbmV3RGF0YSwgc2kpO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgenksIHp1LCBuZXdEYXRhLCBzaSwgbmFtZSk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5YiG57uE5ZCN56ew6YeN5aSN5LqGflxcXCI7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgenkgPSB6eVtpbnB1dF07XFxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobmV3RGF0YSkpIHtcXG4gICAgICAgICAgICAgICAgenkgPSB6eS5jb25jYXQobmV3RGF0YSk7XFxuICAgICAgICAgICAgICAgIGJhY2sodHJ1ZSk7XFxuICAgICAgICAgICAgICAgIHRvYXN0KCfmiJDlip8nKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwibGliP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuc2V0RGF0YShzaSwgenksIGlucHV0KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgenUgPSB6eS5tYXAoaXQgPT4gaXQudGl0bGUpO1xcbiAgICAgICAgICAgIHJldHVybiAkKHp1LmNvbmNhdChcXFwi5pyA5ZCO6Z2iXFxcIiksIDIsICfor7fpgInmi6notYTmupDkvY3nva4nKS5zZWxlY3QoKHp5LCB6dSwgaW5wdXQyLCBuZXdEYXRhLCBzaSkgPT4ge1xcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT0gXFxcIuacgOWQjumdolxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHp5LnB1c2gobmV3RGF0YSk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBpID0genUuaW5kZXhPZihpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICB6eS5zcGxpY2UoaSwgMCwgbmV3RGF0YSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwibGliP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuc2V0RGF0YShzaSwgenksIGlucHV0Mik7XFxuICAgICAgICAgICAgfSwgenksIHp1LCBpbnB1dCwgbmV3RGF0YSwgc2kpO1xcbiAgICAgICAgfSwgenksIHp1LCBuZXdEYXRhLCBzaSk7XFxuICAgIH0sXFxuXFxuXFxuXFxuICAgIHNldERhdGE6IGZ1bmN0aW9uKHNpLCB6eTIsIGtleSkge1xcbiAgICAgICAgbGV0IHp5ID0gc3RvcmFnZTAuZ2V0SXRlbShcXFwiZGF0YV9cXFwiICsgc2kpO1xcbiAgICAgICAgaWYgKGtleSkge1xcbiAgICAgICAgICAgIHp5W2tleV0gPSB6eTI7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHp5ID0genkyO1xcbiAgICAgICAgfVxcbiAgICAgICAgc3RvcmFnZTAuc2V0SXRlbShcXFwiZGF0YV9cXFwiICsgc2ksIHp5KTtcXG4gICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/miJDlip9cXFwiO1xcbiAgICB9LFxcblxcblxcblxcbiAgICBjb3B5dXJsOiBmdW5jdGlvbihzaSwgenlpZCkge1xcbiAgICAgICAgY3VybCA9IFxcXCJodHRwczovL3d3dy5rdXdvLmNuL1xcXCJcXG4gICAgICAgIGlmIChTdHJpbmcoenlpZCkudHJpbSgpLm1hdGNoKC9eXFxcXGQrJC8pKSB7XFxuICAgICAgICAgICAgaWYgKHNpID09ICcxJylcXG4gICAgICAgICAgICAgICAgY3VybCArPSBcXFwicGxheV9kZXRhaWwvXFxcIjtcXG4gICAgICAgICAgICBlbHNlIGlmIChzaSA9PSAyKVxcbiAgICAgICAgICAgICAgICBjdXJsICs9IFxcXCJhbGJ1bV9kZXRhaWwvXFxcIjtcXG4gICAgICAgICAgICBlbHNlIGlmIChzaSA9PSAzKVxcbiAgICAgICAgICAgICAgICBjdXJsICs9IFxcXCJtdnBsYXkvXFxcIjtcXG4gICAgICAgICAgICBlbHNlIGlmIChzaSA9PSA0KVxcbiAgICAgICAgICAgICAgICBjdXJsICs9IFxcXCJwbGF5bGlzdF9kZXRhaWwvXFxcIjtcXG4gICAgICAgICAgICBlbHNlIGlmIChzaSA9PSA1KVxcbiAgICAgICAgICAgICAgICBjdXJsICs9IFxcXCJzaW5nZXJfZGV0YWlsL1xcXCI7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gXFxcImNvcHk6Ly9cXFwiICsgY3VybCArIHp5aWQ7XFxuICAgIH0sXFxuXFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi4pGhaW1hZ2VcIixcInBhdGhcIjpcImltYWdlXCIsXCJydWxlXCI6XCIkLmV4cG9ydHMgPSBmdW5jdGlvbihpbWFnZWlkKSB7XFxuICAgIHN3aXRjaCAoU3RyaW5nKGltYWdlaWQpKSB7XFxuICAgICAgICBjYXNlICd6eic6XFxuICAgICAgICAgICAgcmV0dXJuICdodHRwczovL2docHJveHkuY29tL2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9sczEyNTc4MTAwMy90dWJpYW8vbWFpbi9tb3JlLzg2LnBuZyc7XFxuICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICBjYXNlICd5dW4nOlxcbiAgICAgICAgICAgIHJldHVybiAnaHR0cDovL21tYml6LnFwaWMuY24vbW1iaXpfcG5nLzVzN0oyOFU5R0hWaWNEN2d1dnliYXNlODZIaEhDMTJvT0RidHJzZ0s3Q3hyajVRcEw2Z0tueWliZVpEd0VLSVZLVU90UG9IY3hwZndhMHBvbloxaWE1bmxBLzA/d3hfZm10PXBuZyc7XFxuICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuICAgICAgICBjYXNlICdxcSc6XFxuICAgICAgICAgICAgcmV0dXJuICdodHRwczovL2FuZHJvaWQtYXJ0d29ya3MuMjVwcC5jb20vZnMwOC8yMDIzLzA4LzIxLzkvMTI1XzJlOWNhODI3ODZmMzA1ZTQ0MGQxMGI3MGYyZWZlOTMwX2Nvbl8xMzB4MTMwLnBuZyc7XFxuICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICBjYXNlICd3eSc6XFxuICAgICAgICAgICAgcmV0dXJuICdodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL211c2ljLzE1MS5zdmcnO1xcbiAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgY2FzZSAna2cnOlxcbiAgICAgICAgICAgIHJldHVybiAnaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9tdXNpYy8xNTAuc3ZnJztcXG4gICAgICAgICAgICBicmVhaztcXG4gICAgICAgIGNhc2UgJ2t3JzpcXG4gICAgICAgICAgICByZXR1cm4gJ2h0dHBzOi8vaGlrZXJmYW5zLmNvbS90dWJpYW8vbXVzaWMvODIuc3ZnJztcXG4gICAgICAgICAgICBicmVhaztcXG4gICAgICAgIGNhc2UgJ21nJzpcXG4gICAgICAgICAgICByZXR1cm4gJ2h0dHBzOi8vYW5kcm9pZC1hcnR3b3Jrcy4yNXBwLmNvbS9mczA4LzIwMjMvMTAvMTcvMi8xMTBfMWI2MWU1YWZiYzY1OGRkNWQzN2RkOTA5NDFlODI3YTJfY29uXzEzMHgxMzAucG5nJztcXG4gICAgICAgICAgICBicmVhaztcXG4gICAgICAgIGNhc2UgJzVzJzpcXG4gICAgICAgICAgICByZXR1cm4gJ2h0dHBzOi8vb3QtZ2Rvd24uYmFpZHUuY29tL2ltZy8wLzUxMl81MTIvZmI1OGU3YTFlM2FiODk1ZDBhYmE3Mzc3NzAwMWFhMTUucG5nJztcXG4gICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG4gICAgICAgIGNhc2UgJ+iuvue9ric6XFxuICAgICAgICAgICAgcmV0dXJuICdodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL21lc3N5LzMwLnN2Zyc7XFxuICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICBjYXNlICfmlLbol48nOlxcbiAgICAgICAgICAgIHJldHVybiAnaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9tb3JlLzEyOS5wbmcnO1xcbiAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgY2FzZSAndG9wJzpcXG4gICAgICAgICAgICByZXR1cm4gJ2h0dHBzOi8vaGlrZXJmYW5zLmNvbS93ZWlzeXIvaW1nL1RvcEltZzAucG5nJztcXG4gICAgICAgICAgICBicmVhaztcXG4gICAgICAgIGNhc2UgJ2FkZCc6XFxuICAgICAgICAgICAgcmV0dXJuICdkYXRhOmltYWdlL2pwZWc7YmFzZTY0LC85ai80UUZBUlhocFpnQUFUVTBBS2dBQUFBZ0FCd0VBQUFRQUFBQUJBQUFCOUFFUUFBSUFBQUFDTUFBQUFBRUJBQVFBQUFBQkFBQUI5QUVQQUFJQUFBQUNNQUFBQUlkcEFBUUFBQUFCQUFBQVlnRVNBQVFBQUFBQkFBQUFBSWdsQUFRQUFBQUJBQUFBMkFBQUFBQUFDSktSQUFJQUFBQUNNQUFBQUtRREFBTUFBQUFCQUFBQUFJS2FBQVVBQUFBQkFBQUF5SWduQUFNQUFBQUJBQUFBQUpJSkFBTUFBQUFCQUFBQUFKS1FBQUlBQUFBQ01BQUFBSklJQUFRQUFBQUJBQUFBQUlLZEFBVUFBQUFCQUFBQTBBQUFBQUFBQUFBQUFBQW5FQUFBQUFBQUFDY1FBQVVBQVFBQ0FBQUFBazRBQUFBQUJRQUJBQUFBQVFBQUFBQUFHd0FDQUFBQUFqQUFBQUFBQXdBQ0FBQUFBa1VBQUFBQUhRQUNBQUFBQWpBQUFBQUFBQUFBQUFJQkVBQUNBQUFBQWpBQUFBQUJEd0FDQUFBQUFqQUFBQUFBQUFBQS8rQUFFRXBHU1VZQUFRRUJBRWdBU0FBQS85c0FRd0FJQmdZSEJnVUlCd2NIQ1FrSUNnd1VEUXdMQ3d3WkVoTVBGQjBhSHg0ZEdod2NJQ1F1SnlBaUxDTWNIQ2czS1N3d01UUTBOQjhuT1QwNE1qd3VNelF5LzlzQVF3RUpDUWtNQ3d3WURRMFlNaUVjSVRJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXkvOEFBRVFnQjlBSDBBd0VpQUFJUkFRTVJBZi9FQUJ3QUFRQUNBZ01CQUFBQUFBQUFBQUFBQUFBSENBRUdBZ1FGQS8vRUFGUVFBQUVDQkFJRENRc0tCUUlFQXdrQUFBQUJBZ01FQlJFR0lRY1NNUmRCVVZSV1lYR1VzeE1ZTWpZM2RaR3kwZExUQ0JVV0lsVnljNUtUOEJRMVFuU0JJNkZTWTdIQkpFVmlKVE5EUkZPRW9zTGgvOFFBRkFFQkFBQUFBQUFBQUFBQUFBQUFBQUFBQVAvRUFCUVJBUUFBQUFBQUFBQUFBQUFBQUFBQUFBRC8yZ0FNQXdFQUFoRURFUUEvQUoyQUFEYmtlUlg4VDBYREVwL0ZWbWZnU3NQYXhybHU5K3krcTFNM2JVMlhXMlpvZWtuUzdJNFlnVFZLcEVWc3pYRS8wM0xhOE9XVlV6VlYySzVQK0hlWGJ3RmJxdFY1K3VWR05VS25OUG1adUxuRWl4RnpWZjhBR1Z1QkV5UUNZc1MvS0VtWTBPTkF3MVRFbDBYSms1TnVSNzBSV3FpMmhwa2lvNnlvcXFxWlpwbllqT3M2UU1XMTFIcFVhL094R1BoZHhmRGh4TzVNZTNPNkt4bG1yZSthcW1acTRBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFkbVFucHltenNPY2tKcVBLek1PNnNqUUlpc2UyNktpMlZNMHlWVTZGT3NBTjhvR2wzR2RBYzNVcTc1NkVpdVZZTStuZG11dWx2Q1ZkZXliYkk1RXlKVnd6OG9DbFQ3NGN2WDVKOU1pcWpmL0FCTUpWaXdsZGJPN2JJNXQxMmVGYSsxTEZiakxkb0Y3cE9kbGFoS01tNUtaZ3pNdEZ6aHhvTGtlMTZJdHJvNU1senVmY3B4aERTRFhjRlRXdFRwaElrczlGMTVTT3F1aE92YTY2dDhuWmJVLzNMVDRQeGhUY2FVVmxScDc3T1JFU1BBY3YxNEQvd0RoWG00RjMwQTJBQUFBQUFBQUFBQUNLOUwya2lGaG1seEtQU1p1MWJqdFJIT2hLaXJMc1hhcThEbFRKRTJwdDREZk1UMStCaGZEVTlXWm0vYzVlR3Jtc1QrdHlyWnJiMlhOWEtpWDNyNWxNcXRWWnl0MVNacVZRajkzbTVoeXZpUkZzbDEvN0lsa1MzTWdIVGU5WWpuT1Z5cXE1cXE1M1BrQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHVytFbWRqWU1KNHJxT0VLMURxVk1pV2VuMVlrSitiSXJOOXJrNFA4QXB0TmVPVEZzN0xiMGdYWndsaWFUeGZoeVhyTWsxekdSYnRmQ2VxSzZFOXEyVnEyLzI0VXNwN1pVM1JEakw2SzR5Z3dvOHc1S2JQdVNYanRWMW10VmZCaUxkVVM2TGtxcnNSVkxZM1M2NTdWVlU2QU1nQUFBQUFBQXI5OG9URXpZMDVUc05RSXlLa3ZlYW0yTjFWVFhjbG9hS3FMZEZSTlpWUmJaT2F1WkJSdEdrR3NwWHNmMXVvTmlRSHNmTnVaRGZCVzdIdzJXWXh5TGRiM2ExRnZ2M05YQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQTVOMi80TGdhS3NTUHhQby9wODNIakpGbklDTEt6Sy9XVlZlekpGVlYydVZxdGNxN0x1NlVLZnN0clo3Q2JmazVWUFVydGJwZmM3cEhsb2N4M1RYOEh1YnRUVnR6OTEveHE4NEZod042NEFBQUFBQUtFZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBU1BvTW00OHZwU2tZTUtJclljekFqdzR6Ykl1dTFJYXZSTTluMW1OWC9CSEJJR2hQeXNVajdreDJFUUMycUlpWi93RFhhWkMrRXZTQUFBQUFBQ2hJQUFBQUFMSGJwZFBqVmFyeVZObDFZa2VianNnUTFldG1vNTdrYWwxNExxU2Yzdk9NT04wZnJML2hnUkxZV0phNzNuR0hHNlAxbC93eDN2T01PTjBmckwvaGdSTFlXSmE3M25HSEc2UDFsL3d4M3ZPTU9OMGZyTC9oZ1JMWVdKYTczbkdIRzZQMWwvd3gzdk9NT04wZnJML2hnUkxZV0phNzNuR0hHNlAxbC93eDN2T01PTjBmckwvaGdSTFlXSmE3M25HSEc2UDFsL3d4M3ZPTU9OMGZyTC9oZ1JMWVdKYTczbkdIRzZQMWwvd3gzdk9NT04wZnJML2hnUkxZV0phNzNuR0hHNlAxbC93eDN2T01PTjBmckwvaGdSTFlXSmE3M25HSEc2UDFsL3d4M3ZPTU9OMGZyTC9oZ1JMWVdKYTczbkdIRzZQMWwvd3gzdk9NT04wZnJML2hnUkxZV0phNzNuR0hHNlAxbC93eDN2T01PTjBmckwvaGdSTFlXSmE3M25HSEc2UDFsL3d4M3ZPTU9OMGZyTC9oZ1JMWVdKYTczbkdIRzZQMWwvd3gzdk9NT04wZnJML2hnUkxZV0phNzNuR0hHNlAxbC93eDN2T01PTjBmckwvaGdSTFlXSmE3M25HSEc2UDFsL3d4M3ZPTU9OMGZyTC9oZ1JMWVdKYTczbkdIRzZQMWwvd3gzdk9NT04wZnJML2hnUkxZV0phNzNuR0hHNlAxbC93eDN2T01PTjBmckwvaGdSTFlXSmE3M25HSEc2UDFsL3d4M3ZPTU9OMGZyTC9oZ1JMWVdKYTczbkdIRzZQMWwvd3gzdk9NT04wZnJML2hnUkxZV0phNzNuR0hHNlAxbC93eDN2T01PTjBmckwvaGdSTFlXSmE3M25HSEc2UDFsL3d4M3ZPTU9OMGZyTC9oZ1JMWVdKYTczbkdIRzZQMWwvd3gzdk9NT04wZnJML2hnUkxZV0phNzNuR0hHNlAxbC93eDN2T01PTjBmckwvaGdSTFlXSmE3M25HSEc2UDFsL3d4M3ZPTU9OMGZyTC9oZ1JOWXhZaytxNkRjVlVTa1RsVm1abWxPbDVPQytQRVNITVBWeXRhbDFzbXB0c1JtN1phL1NnSEFBQUNRTkNmbFlwSDNKanNJaEg1SUdoUHlzVWo3a3gyRVFDMjYrRXZTWU1yNFM5SmdBQUFBQUFvU0FBQUFBOTdCSGo3aDN6bkxkcTB1eXUxU2syQ1BIM0R2bk9XN1ZwZGxkcWdZQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWE5ajd5ZDRsODJUSHFLVXNkdFhwVXVuajd5ZDRsODJUSHFLVXNkdFhwVURpQUFCSUdoUHlzVWo3a3gyRVFqOGtEUW41V0tSOXlZN0NJQmJkZkNYcE1HVjhKZWt3QUFBQUFBVUpBQUFBQWU5Z2p4OXc3NXpsdTFhWFpYYXBTYkJIajdoM3puTGRxMHV5dTFRTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFOZXg5NU84UytiSmoxRktXTzJyMHFYVHg5NU84UytiSmoxRktXTzJyMHFCeEFBQWtEUW41V0tSOXlZN0NJUitTQm9UOHJGSSs1TWRoRUF0dXZoTDBtREsrRXZTWUFBQUFBQUtFZ0FBQUFQZXdSNCs0ZDg1eTNhdExzcnRVcE5nang5dzc1emx1MWFYWlhhb0dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR3ZZKzhuZUpmTmt4NmlsTEhiVjZWTHA0KzhuZUpmTmt4NmlsTEhiVjZWQTRnQUFTQm9UOHJGSSs1TWRoRUkvSkEwSitWaWtmY21Pd2lBVzNYd2w2VEJsZkNYcE1BQUFBQUFGQ1FBQUFBSHZZSThmY08rYzVidFdsMlYycVVtd1I0KzRkODV5M2F0THNydFVEQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQURYc2ZlVHZFdm15WTlSU2xqdHE5S2wwOGZlVHZFdm15WTlSU2xqdHE5S2djUUFBSkEwSitWaWtmY21Pd2lFZmtnYUUvS3hTUHVUSFlSQUxicjRTOUpneXZoTDBtQUFBQUFBQ2hJQUFBQUQzc0VlUHVIZk9jdDJyUzdLN1ZLVFlJOGZjTytjNWJ0V2wyVjJxQmdBQUFBQUFQak9PY3lSbVhOY3JYTmhQVkZSYktpNnE1Z2ZYV1MvTndqV2J3b1UxWFNUalJMV3hQVmRuR0hISGRLeHJ5b3FuV0hBWE0xbThLRFdid29VejNTc2E4cUtwMWh3M1NzYThxS3AxaHdGek5aTDJ1WnkzbHZ6bFVzRFkreGJVTWVVR1RtOFJWS05MeHA2RXlKRGZIVld2YXJrUlVWQzFpS3RrdXZPQmtBQUJmOTNCR09uS3VWU2c0UGtKbWsxQ1lrb3o1OUlibndINnF1YjNONjJ2MG9nRW02eWNJMW04S0ZORjBrNDBUWmlpcTlaY1kzU3NhOHFLcDFod0Z6Tlp2Q2cxbThLRk05MHJHdktpcWRZY04wckd2S2lxZFljQmN6V2J3b05adkNoVFBkS3hyeW9xbldIRGRLeHJ5b3FuV0hBWE0xbThLRFdid29VejNTc2E4cUtwMWh3M1NzYThxS3AxaHdGek5adkNnMW04S0ZNOTByR3ZLaXFkWWNOMHJHdktpcWRZY0Jjeldid29OWnZDaFRQZEt4cnlvcW5XSERkS3hyeW9xbldIQVhNMW04S0RXYndvVXozU3NhOHFLcDFodzNTc2E4cUtwMWh3RnpOWnZDZzFtOEtGTTkwckd2S2lxZFljTjByR3ZLaXFkWWNCY3pXYndvTlp2Q2hUUGRLeHJ5b3FuV0hEZEt4cnlvcW5XSEFYTTFtOEtEV2J3b1V6M1NzYThxS3AxaHczU3NhOHFLcDFod0Z6Tlp2Q2cxbThLRk05MHJHdktpcWRZY04wckd2S2lxZFljQmN2WFRoTTM0TEtuU1UwM1NjYThxS3AxaHh1R2k3SEdLS3RwSW8wbFAxK296TXJGaVBSOEtMSFZ6WEozTjY1cDBvZ0ZuQUFBQUFBQUFhOWo3eWQ0bDgyVEhxS1VzZHRYcFV1bmo3eWQ0bDgyVEhxS1VzZHRYcFVEaUFBQklHaFB5c1VqN2t4MkVRajhrRFFuNVdLUjl5WTdDSUJiZGZDWHBNR1Y4SmVrd0FBQUFBQVVKQUFBQUFlOWdqeDl3NzV6bHUxYVhaWGFwU2JCSGo3aDN6bkxkcTB1eXUxUU1BQUFBQUIxNTcrWFRYNEwvVlU3QjE1NytYVFg0TC9WVUNpYnQ3b09KeWR2ZEJ4QUFBRFo5SFhsSXczNXhnK3VoYzVOaWRCVEhSMTVTTU4rY1lQcm9YT1RZblFCa0FBQ0lmbEUrSXROODVKMlVRbDRpSDVSUGlMVGZPU2RsRUFyUXBneXBnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRytiM29kOHExQi9GZjJUelJOODN2UTc1VnFEK0svc25nVzdBQUFBQUFBQnIyUHZKM2lYelpNZW9wU3gyMWVsUzZlUHZKM2lYelpNZW9wU3gyMWVsUU9JQUFFZ2FFL0t4U1B1VEhZUkNQeVFOQ2ZsWXBIM0pqc0lnRnQxOEpla3daWHdsNlRBQUFBQUFCUWtBQUFBQjcyQ1BIM0R2bk9XN1ZwZGxkcWxKc0VlUHVIZk9jdDJyUzdLN1ZBd0FBQUFBSFhudjVkTmZndjlWVHNIWG4xdFRwcFYvd0RvdjlWUUtKdTN1ZzRuTnpVVkV6VFltK1kxZWRQU0J4QnkxZWRQU05YblQwZ2JMbzY4cEdHL09NSDEwTG5Kc1RvS1phTzB0cEl3M21uOHhnNy9BUDYwTG1wc1JGdGUyd0RJQUFFUS9LSjhSYWI1eVRzb2hMeEVQeWlMZlFlbUlxLytaSnYvQVBLaUFWb1V3YzFibnRUMG1OWG5UMGdjUWN0WG5UMGpWNTA5SUhFSExWNTA5STFlZFBTQnhCeTFlZFBTTlhuVDBnY1FjdFhuVDBqVjUwOUlIRUhMVjUwOUkxZWRQU0J4QnkxZWRQU05YblQwZ2NRY3RYblQwalY1MDlJSEVITFY1MDlJMWVkUFNCeEJ5MWVkUFNOWG5UMGdjUWN0WG5UMGpWNTA5SUhIZk43ME8rVmFnL2l2N0o1bzJyenA2VGV0RHlJbWxXZzVwZnVyOS84QTVUd0xkQUFBQUFBQUExN0gzazd4TDVzbVBVVXBZN2F2U3BkUEgzazd4TDVzbVBVVXBZN2F2U29IRUFBQ1FOQ2ZsWXBIM0pqc0loSDVJR2hQeXNVajdreDJFUUMyNitFdlNZTXI0UzlKZ0FBQUFBQW9TQUFBQUE5N0JIajdoM3puTGRxMHV5dTFTazJDUEgzRHZuT1c3VnBkbGRxZ1lBQUFBQUFxSXFXVkxvb0FIVVNsMDlNa2tKVzI4bmNHWmY3R2ZteW44UWxQMEdldzdRQTZ2elpUK0lTbjZEUFlQbXluOFFsUDBHZXc3UUE2ektkSlEzdGZEazVaajJyZHJtd1dvcUx3cGtkbkxnQUFBQUFmT05Md1pocU5qd1ljVnJWdWlSR0k2eThLWFBvQU9yODJVL2ZrWlg5Qm5zSHpaVCtJU242RFBZZG9BZFg1c3AvRUpUOUJuc0h6WlQrSVNuNkRQWWRvQWRYNXNwL0VKVDlCbnNIelpUK0lTbjZEUFlkb0FkWDVzcC9FSlQ5Qm5zSHpaVCtJU242RFBZZG9BZFg1c3AvRUpUOUJuc0h6WlQrSVNuNkRQWWRvQWRYNXNwL0VKVDlCbnNIelpUK0lTbjZEUFlkb0FkWDVzcC9FSlQ5Qm5zSHpaVCtJU242RFBZZG9BZFg1c3AvRUpUOUJuc0h6WlQrSVNuNkRQWWRvQWRYNXNwL0VKVDlCbnNIelpUK0lTbjZEUFlkb0FkWDVzcC9FSlQ5Qm5zSHpaVCtJU242RFBZZG9BZFg1c3AvRUpUOUJuc0h6WlQrSVNuNkRQWWRvQWRYNXNwL0VKVDlCbnNNdzVDVGhQYStIS1M3SHR6YTVzRnFLblJsa2RrQUFBQUFBQUFBYTlqN3lkNGw4MlRIcUtVc2R0WHBVdW5qN3lkNGw4MlRIcUtVc2R0WHBVRGlBQUJJR2hQeXNVajdreDJFUWo4a0RRbjVXS1I5eVk3Q0lCYmRmQ1hwTUdWOEpla3dBQUFBQUFVSkFBQUFBZTlnang5dzc1emx1MWFYWlhhcFNiQkhqN2gzem5MZHEwdXl1MVFNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU5leDk1TzhTK2JKajFGS1dPMnIwcVhUeDk1TzhTK2JKajFGS1dPMnIwcUJ4QUFBa0RRbjVXS1I5eVk3Q0lSK1NCb1Q4ckZJKzVNZGhFQXR1dmhMMG1ESytFdlNZQUFBQUFBS0VnQUFBQVBld1I0KzRkODV5M2F0THNydFVwTmdqeDl3NzV6bHUxYVhaWGFvR0FBQUFBQXc5N1liSFBlcUkxcUs1VlhlUkRKOEo3K1h6WDRML0FGVkExZmRTd1B5bGtmUzczUnVwWUg1U3lQNW5lNlU3Y3FwYk5kaHgxbDRWQXVOdXBZSDVTeVA1bmU2TjFMQS9LV1IvTTczU25Pc3ZDbzFsNFZBdWJKYVJzSVZHZWdTVW5YNU9OTXgzcERoUTJLNjczTGtpSmx2bTBiY3ltR2pwVlhTUmh1Ni8rWXdmWFF1YzN3VTZBTWdBQWViV3NRVW5Ec3BEbXF2UFFaT0JFZjNOajRxcWlLNnlyYkpGM2tVOUlpSDVST1dCNllxS3QvbkpPeWlBYmh1cFlINVN5UDVuZTZZM1VzRDhwWkg4enZkS2RLNWVGVEdzdkNvRnh0MUxBL0tXUi9NNzNSdXBZSDVTeVA1bmU2VTUxbDRWR3N2Q29GeHQxTEEvS1dSL003M1J1cFlINVN5UDVuZTZVNTFsNFZHc3ZDb0Z4dDFMQS9LV1IvTTczUnVwWUg1U3lQNW5lNlU1MWw0VkdzdkNvRnh0MUxBL0tXUi9NNzNSdXBZSDVTeVA1bmU2VTUxbDRWR3N2Q29GeHQxTEEvS1dSL003M1J1cFlINVN5UDVuZTZVNTFsNFZHc3ZDb0Z4dDFMQS9LV1IvTTczUnVwWUg1U3lQNW5lNlU1MWw0VkdzdkNvRnh0MUxBL0tXUi9NNzNSdXBZSDVTeVA1bmU2VTUxbDRWR3N2Q29GeHQxTEEvS1dSL003M1J1cFlINVN5UDVuZTZVNTFsNFZHc3ZDb0Z4dDFMQS9LV1IvTTczUnVwWUg1U3lQNW5lNlU1MWw0VlBwcXJhOTdwc3ZleVhBdUZ1cFlINVN5UDVuZTZOMUxBL0tXUi9NNzNTc3RCMGQ0cHhHNkc2UnBFMGtCeXN2SGpKM09IWjJ4MTEydDM3dFJTUXFOOG5pb3hWaHZyVllsNVpxUkxSSVV1aXhISzNtZXRrdnQycGtCTEc2bGdmbExJL21kN3AyNmJqN0N0WnFNR1FwMWRsSmlhaktxUTRVTlhYZFpMNVhUZ1JUVTVEUVBnK1ZsdTV6U1QwM0UxcjkxZk1MRFczQlp1UnRkSHdCaFdneDVXWXA5RmxZVTFMSi9wekNvcXhFVzFycTVkcTJWY3dObEFBQUFBQUFCcjJQdkozaVh6Wk1lb3BTeDIxZWxTNzJLYWRIckdFcXhUSlZXSk1Ua25GZ1F0ZGJOMW5OVkV1dkJtVlhyV2lqR05GN3MrTlJZMGVCRGVqZTdTcXBGUjE3VzFVVDZ5N2Y4QWhBMGNIMWpRWFFudlk1cXRjeGJPUjJTb3ZCWStRQWtEUW41V0tSOXlZN0NJUitTQm9UOHJGSSs1TWRoRUF0dXZoTDBtREsrRXZTWUFBQUFBQUtFZ0FBQUFQZXdSNCs0ZDg1eTNhdExzcnRVcE5nang5dzc1emx1MWFYWlhhb0dBQUFBQUE2ODkvTHByOEYvcXFkZzY4OS9McHI4Ri9xcUJSTjI5MEhFNU8zdWc0Z0FBQnMranJ5a1liODR3ZlhRdWNteE9ncGpvNjhwR0cvT01IMTBMbkpzVG9BeUFBQkVQeWlmRVdtK2NrN0tJUzhSRDhvbnhGcHZuSk95aUFWb1V3WlV3QUFBQUFBQUFBQUFBQUFBQUFBUHJEaE9pT2ExakZlNXkyUkVUTlFQa2VoUzZQUDF1ZWh5Vk1rbzAzTXYyUTRMVmN0c2t2bHNSTDVxdVNFbzRJMEYxS3I5d244Uk9kVHBUVzFsazFhcVIzdFJjMGNpLys3UmVITmVaTG9wWUtoNGVwR0hKQkpLajArQkp3TXRaSWJjM3J3dWN0MWN2T3Fxb0VENGErVDNVWmlJeUxpU2RaSndGYWpsZ1NpOTBpM3p1MVhLbXExVVcyYWF5THZjSk1HRzlIR0Y4THc0U3lWTGd4Sm1GOVpaeVpSSWtWVlZMS3VzdXk2YnlaWnJ3bTE3YmMyd3dxSTdhbHdNMnMxR3BraWJFVFloaXlKYm0yS1pBRGJ2SUFBQUFBQUFBQUFHK0UrcmEyM2hBQThERUdDOE9ZbmhOWldLWEFqcTFmcXhFdXlJbWQ3YTdiTFpWMjVrUllwK1R5c0tBK1l3MVB1aVBhaXIvQUFrNWE3dHEyYTlFdGZZaUlxZEtvVDRBS1FWckRWWHc5RzdqVjZaTXlUOWR6RVdMRFZHdlZ1M1ZkNEx0cWVDcTdUYTlDaVcwcjBqN2t4MkVRdExWcUpUSzdUM1NOVmtvTTNMTG4zT0syNkl0bFM2TC9TdG5MOVpNMHVSL1NORDBoaGpIMGppR2l6a1JzckJTTDNXU2o1cXhIUTRqZnFQMzdhekUxWFo3VlZ5Z1NndmhMMG1Cd3JuNk1nQUFBQUFBVUpBQUFBQWU5Z2p4OXc3NXpsdTFhWFpYYXBTYkJIajdoM3puTGRxMHV5dTFRTUFBQUFBQjE1NytYVFg0TC9WVTdCOHBxRzZMS1I0YmZDZkRjMUxyYk5VVkFLSU8zdWc0a25Mb0l4c3RyeTBqczQ0MHh1RDQyNHZJOWNhQkdRSk4zQjhiY1hrZXVORzRQamJpOGoxeG9HczZPdktSaHZ6akI5ZEM1eWJFNkN1T0VORFdMcUxqR2pWT2JnU2FTMHJPUTQwVld6VFhLald1UlZzbS9rV09Ud1VBeUFBQkVQeWlmRVdtK2NrN0tJUzhSOXBld2pWY1pZWmtaQ2tNaFBqUVp4SXowaXhVWW1ycU9idFhuY2dGUzFNRW5Mb0l4c3YvQU12STljYVkzQjhiY1hrZXVOQWpJRW03ZytOdUx5UFhHamNIeHR4ZVI2NDBDTWdTYnVENDI0dkk5Y2FOd2ZHM0Y1SHJqUUl5Qkp1NFBqYmk4ajF4bzNCOGJjWGtldU5BaklFbTdnK051THlQWEdqY0h4dHhlUjY0MENNZ1NidUQ0MjR2STljYU53ZkczRjVIcmpRSXlCSnU0UGpiaThqMXhwNnVIZEFkY2kxbUNsZmRMeTlPYjllTTZCSFI3M1cvb1JFMkt2RHZlZ0RRTUtZS3JPTVoxc3ZTNVZ6bUk5R3hwbDZLa0tBaXBlNzNkQ0xsdFVzeGdIUmpSOEV5MEdQcU1tYTByRmJGbkZSYm9xK0UxaUxrMXU5ZmF1L2t0amFLQmgrbTRabzhDbDB1WGJCbG9LZExuTzMzT1hmY3Urdi9BR1JFUFRWTHBiZUF3aUlsbFJMS1pBQUFBQUFBQU9Mb2pFWXI3NnJXcGR5cW16TGgySGpWREYySGFYTHBNVGxja0lVSlhJMUhmeERYWFcyeks0SHRnMENvYVo4RDArWWJDK2RIek4yYTJ0S3dYUkdwbnNWY3M4dG5PZFRkMXdQeG1kNm03MmdTVUNOZDNYQS9HWjNxYnZhZmFWMDNZSW1wcUhBU2Vqd3RkYmQwanl6bU1ienF1OGdFaUExK21ZM3d4VjN2U1Jyc2hHV0dpSzlPN28yeUxzWDYxajI0TXhDbUlUWTBHTERpUW5YMVh3M0k1Ri95bVc4QjlRQUFBQUFjSE5tQUJoRVJGVlVUYnRNZ0FBQUFBQUZDUUFBQUFIdllJOGZjTytjNWJ0V2wyVjJxVW13UjQrNGQ4NXkzYXRMc3J0VURBQUFBQUFBQUd4TEFBQUFBRnh2Z0FBQUFBQUM2Z0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR0w1V1ZGL3dhWGpQU2RRTUVxNlhuSXo1aW9xM1diSndFdTVFVkZzcmxYSnFMYmZ6elJkVlN1MkxkS09KOFhLNkZNenFTc2txSi80V1V1eGkyc3YxbDJ1elMrYXJaVnlBc0xYdExtRHFDOVliNm9rM0hhcUk2RkpKM1cxMHZlL2cyM3NsWGJ6RVMxN1Q5WDUxVlpSNU9CVDROOG54UDlWNnBxMnN0OGtXOTF1aUlRN3JMd2k2cHZnZTFVOFg0aXJMbU9xRlpuWmhXTVZpYThaZkJYYW1XMDhWSEtpM1RJd0FNcTV5N1ZVd0FBQ0xaYm9BQm5XVmRxMzZUMXFOaWF0MEdMclVxcVRjb3F0Vm4rbEVWRXNxb3E1Yk5xSWVRQUphb0duZkUxT2p3RzFWSU5SbEd0YkRjaXNSa1JVUzEzYTZiWFdSZHVTM3VTcGh6VFZoV3ZSWVV0TVJvbExtb2pmQm0wVHVhT3ZheVAyYythSWhWTFdXNkxkY2pMRmRyWlo4S1gyZ1h5aHZiRlkxN0hJNWprMWtjMWJvcUxzVTVGTjhOYVJNVDRWWjNLbVZOMzhPcW9xeThkcVJHYmJyWkYyWHRaVlN5MkxBWUoweDBURmNaa2xNb2xNcUZrVkljeEVUdWNSVmRxb2pINVhYTlBxcWlMblpOYmVDU0FPSHAzd0FBQUFBQUFBQlFrQUFBQUI3MkNQSDNEdm5PVzdWcGRsZHFsSnNFZVB1SGZPY3QyclM3SzdWQXdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWRlZG5KZW5TY1djbkk3SUV0QWFyNHNXSzZ6V3RUZlVENnZlMkd4OFI3MnNodGFybk9ldVRlZFYza3NoQW1rTFRqRWpJNm00UmpSSVRVYzVzV29LeEx2VFphRndKdjZ5MlhndHROVjBsNlZKN0Y4N0VrcWRHanlkR2hxckd3a1ZXck1vdjlVUzIxTWtzM1luVHNqSmI3NmdaZTk3M3E1N25PY3EzVlZXNnF2Q1l1dkNZQUFBQUFBQUFBQUFBQUFBQUFDNjhKelpkWGI5emdBSmQwYmFaSnZEZjhIUjYyaXpOR2F1bzJQWlhSWlpGdGEyZjFtSm45VzEwUmNseVJxMk1wTldrSzNUSUZScHN5eVpsSmh1dENpTTMwMlo3NktpN1VYTkZ5V3lsR0dxcXU0ZVpUZHNBYVI2cmdXY2k5d2IvR1UrT3Q0MG5FZnFvcnJaUFJjOVYyVnIyVzZaTHZLZ1crQjQrR2NTMHpGbEZoVldsUnRlQS9KekhXUjhKMWt1eHlieXAvdnRTNktld0FBQUFBQVVKQUFBQUFlOWdqeDl3NzV6bHUxYVhaWGFwU2JCSGo3aDN6bkxkcTB1eXUxUU1BQUFBQUI4cGlLc0NWalJXb2lxeGpuSWk3RnNpcWZVNjg5L0xwcjhGL3FxQkFmZkhWQkVSVnc1S1hYTy84Uy8yRHZqNmh5Y2src3Y4QVlRZTdlNkRpQk9YZkgxRGs1SjlaZjdCM3g5UTVPU2ZXWCt3ZzBBV0d3M3A0bnE5aWVsMGw5QmxZVEp5YWh3SFJHekQxVnFPV3lxaVdKdlJiNTNSVXR2Rk1kSFhsSXczNXhnK3VoYzVOaUFaQUFBMHpTVmphUGdPaFNsU2dTTUtjZEhta2dLeUk5VzJUVWM2NktuM1RjeUlmbEUrSXROODVKMlVRRFd1K09xQ0w0dVNmV1grd3gzeDlRNU9TZldYK3dnNVRBRTVkOGZVT1RrbjFsL3NIZkgxRGs1SjlaZjdDRFFCT1hmSDFEazVKOVpmN0IzeDlRNU9TZldYK3dnMEFUbDN4OVE1T1NmV1grd2Q4ZlVPVGtuMWwvc0lOQUU1ZDhmVU9Uc24xbC9zSkUwYVk5cTJQb003Tng2Ukx5VWpMS2tOc1ZrWnpsaVJGenNsMHRrbWEvZWFWWW85TW1xMVZKV215VVBYbVptS2tKaWIxMXl1dkFpYlZYZVM1ZExEbEFrc01VQ1VwTWpEYTJGTHcwYXJrYWlMRWRiTjdyZjFLdDFYcEE5VUFBQUFCd2U5a05yNGtTSTJIRGExWFBjN1lpY0tydklpSVZaMHA2U3BuRjlUaTAyVGlyQ28wckZWSWJXT3VreTVGdDNSeTc2YjdVM2s1OW0xNmNkSWZkb3NYQ1ZNYzVFaFBhcy9HYS9KNjJ1a0xMYWlaSzYrK2x0NWJ3UHZnWnpSZHVaZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQzZwc1VBRGM5RzJPNCtCY1FyTkxEZEdrWmhxUTVxQzExbFZ0N281dTlySnZYNTAzeTJ0SXFzbFhLWkFxTlBtR1RFckhham1SR2JGNXVaVTJLbThVWmJ0dmJZU2RvZzBnL1JXc2ZOYys5aVV1ZmlON3BGZTVVN2crMWtmZmczbDlPOEJhWUdHdmJFYTE3YzBjbDBWRnVpcHpjeGtBQUFLRWdBQUFBUGV3UjQrNGQ4NXkzYXRMc3J0VXBOZ2p4OXc3NXpsdTFhWFpYYW9HQUFBQUFBNjg5L0xwcjhGL3FxZGc2ODkvTHByOEYvcXFCUk4yOTBIRTVPM3VnNGdBQUJzK2pyeWtZYjg0d2ZYUXVjbXhPZ3BqbzY4cEdHL09NSDEwTG5Kc1RvQXlBQUJFUHlpZkVXbStjazdLSVM4UkQ4b254RnB2bkpPeWlBVm9Vd1pVd0FBQUFBQUFEbXpOTGJFMytFQ1pmay9ZVVdlcmt4aWFPMTNjS2Yvb3k2M3RyUm5KbnNYZVl0cktsbDEwNEN4MXJiMXVZMVBSeGh0bUZzRDAyU1dEM0thaVEwanpkN0s1WXJrdXFLcmR0cjZxY0NJaHRhTGRNcjIySmZhQmtBQURTOUoyTTF3VGhPTE9TN21mT0VkeVFaTnI3S211dTF5cGZOR29sOS9OVzNUTTNQYmttVjFUL0pVUFNqaTFjWDQzbXBtQy9XazVaUDRhVnl0ZGpWemRtaUw5WnlxdGx6UzlnTklpUGMrSzk3M09Wem5LcXE1YnFxODV4TXJ0VXdBQUFBQUFBQUFPMUt5Y3hQVExKYVVsb3N4TVB1aklVRml2YzViWHNpSm11UjFkODN2UTc1VnFEK0svc25nZUI5RHNVY25LeDFHTDdvK2gyS09UbFk2akY5MHUzckx3cjZSckx3cjZRS1NmUTdGSEp5c2RSaSs2WlRCdUo3NTRjckZ2N0dMN3BkcldYaFgwaldYaFgwZ1VYcU5MbjZVOXNLb3lNekp4WHQxbXNtSUxvYXVUaFJISWwwdmM2Qk0zeWkxdml1azM0Z3ZhdUlaQUFBQUFBQUFBSE9HaXE3WmM0QUMwV2hYSEMxK2dPbzlRbTJ4S3BJNU5WN3J2aXdiWkxzUytyNE8xVjJLU21pV1crYWJ5b3FsS2NHWWxqNFR4VEpWZUNybGJDZWlSWWFYLzFJYTVPYXFJcVh5elJGVzEwUzVkQ1NtNEUvSlFaeVdpdGl5OGRpUklVUnJrY2ptcWwwelRMMEFmY0FBVUpBQUFBQWU5Z2p4OXc3NXpsdTFhWFpYYXBTYkJIajdoM3puTGRxMHV5dTFRTUFBQUFBQjE1NytYVFg0TC9WVTdCd2l3MGpRWWtKMTlWN1ZhdGxzdWFXQW9jN2U2RGlXa1hRSGd2WnJWUlYvdWt5L3dEd01iZ09ET0dxZGFUM0FLdUF0SHVBNE00YXAxcFBjRzREZ3pocW5Xazl3Q0E5SFhsSXczNXhnK3VoYzVOaWRCSFZJMEs0VW90WWs2bksvT1A4UktSbXhvZXZNb3JkWnEzUzZhcVpYSkd0cXBhMWw1Z0FBQUVRL0tKOFJhYjV5VHNvaEx4citMc0gwckd0TWcwK3JMTUpCZ3h1N3Q3aEUxRjFySzNnWEt6bEFwVXBndEd1Z0xCbkRWRi8rNmI3ZzNBY0djTlU2MG51QVZjQmFQY0J3WncxVHJTZTROd0hCbkRWT3RKN2dGWEFXajNBY0djTlU2MG51RGNCd1p3MVRyU2U0QlZ3MnpSelFGeEpqaWxTRG9hdWdkMlNMSFh1WGRFN216Nnk2eWJOVmJJMWIvOEFFVHZ1QTRNNGFwMXBQY1Bkd3BvdHc5ZzJyclZLV3M2c3dzTllQK3ZIUnpiT1ZMNUkxTThrQTNWTElpSTFFUkV5UkVTMWpJQUFBQWFOcGNyNzZCbzdxTVNHcm14NXBFbElUa1JGdHI3YjMzdFZISmx3b1ZEWGFwTVduK3ZMUFlybEtLMXp1NHlFTFdlMzZ0dTZQenZ3M1J0a1cvQVE2cTNWVkF3QUFBQUFBQUFBQUcrYjNvZDhxMUIvRmYyVHpSTjgzdlE3NVZxRCtLL3NuZ1c3QUFBQUFWditVWDQxMG4rd1h0WEVNa3pmS0w4YTZUL1lMMnJpR1FBQUFBQUFBQUFBQTV3MXM3ZVRudVdaMEI0bGRWTUpURkhtSSt2TVUyTC9BS1NMZTZRSFp0elhhaU9SeUlpYkVSQ3NadnVoNnZKUU5Jc2hFaUxhQk9Ya290bTZ5MmllRGJnK3VqTStDNEZ1UUVhNWIyUkZ6NkFCUWtBQUFBQjcyQ1BIM0R2bk9XN1ZwZGxkcWxKc0VlUHVIZk9jdDJyUzdLN1ZBd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCeGM1clc2ejNOYTFxcmR5cmF5Yi93RHRtY2p4TVhWQ0RTOElWaWNtV3ZXRERsSXF1UnFJcXJkdXJrblNxQVUveGhWVnJlTUt0VVhOWTFaaWFlNjBOYnR0ZXlXWGZ5UThReTVGUjFsU3lvWUFBQUFBQUFPM0p5c2FmblplVWw0ZmRaaVBFYkRoTVJVVFdjNWJJbWUrcW0zN2p1UHVUc2Y5YUY3NEdpZzNyY2R4OXlkai9yUXZmRzQ3ajdrN0gvV2hlK0JveUptYjFvZFJkMWFnNWY4QXhYOWs4eHVPNCs1T3h2MW9Ydm0yNk50RzJMNkZwRHBGU3FORWpTOGxBaXVXSkVkRmhxalVXRzlFVmJPVmRxZ1dQQUFBQVoyeTJnVnYrVVg0MTBuK3dYdFhFTWxpTk5lQnNTWXF4RlRwcWkwcUpOd1lVbjNON214R04xWGQwY3R2ck9UZVZDTWR4M0gzSjJQK3RDOThEUlFiMXVPNCs1T3gvd0JhRjc0M0hjZmNuWS82MEwzd05GQnZhYUhzZXR6WERzZTNOR2hlK2FoVktmTjBpb3pGT25vVG9NMUx2V0hGaHFxTHF1VGFsMHVub0E2WUFBQUFBZGlTbVk4bk9RWnFWZXNPWWd2YkVoUkUyc2MxYm9xYzZLaDF6a3kyWUY1cUhVR1ZxZ1U2cW8xMEpzN0xRNWhHT1ZGVnFQYWpyS3YrUWFib1ZuSWNUUlhTbXRpUTRqNFQ0ekhvanJxeGU2dVZFWGdYVlZxMjRGUUFWSkFBQUFBZTlnang5dzc1emx1MWFYWlhhcFNiQkhqN2gzem5MZHEwdXl1MVFNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFhQnBvcUVhUTBZMUx1VFlhL3hEb2N1N1dSY211ZG1xWjdjamZ5TmRPM2t4bVA3cUI2eWdWVWN0M0t2Q1lBQUFBQUFBUGR3YjQ3MER6akw5cTB1MDd3bDZTa3VEZkhlZ2VjWmZ0V2wybmVFdlNCZ0FBQUFBQUFBQUFBQUFBQUdIZUN2UVUyMG5lVXpFWDk5RUxrdThGZWdwdHBPOHBtSXY3NklCcVlBQUFBQVpRd0FMQ2FDc1IwT2tZSW5aZXAxbW5TVVoxUmU5c09abW1RM0szdVVKTG9qbFJiWFJVdnpLQ3ZZQUFBQUFBUGV3UjQrNGQ4NXkzYXRMc3J0VXBOZ2p4OXc3NXpsdTFhWFpYYW9HQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFJMTA3ZVRHWS91b0hyS1NVUjNwdWxZODFveG51NFExaWR4aXdZejdmMHNSMmE5Q1hBcWFBcVdXeWdBQUFBQUE5M0J2anZRUE9NdjJyUzdUdkNYcEtTNE44ZDZDdTk4NHkvYXRMdE84SmVrREFBQUFYQzVMWmRvQUFBQUFBQTRlWmJBQUFBTU84RmVncHRwTzhwbUl2NzZJWEpYd1Y2Q20razd5bVlpL3ZvZ0dwQUFBQUFBUkZVSEpvSEVFejZKOUhHSGNZWVdtYWhWMlRUcGlGT3ZnTldGSDFFMVVZeDJ5M0M1Y3dCREFPeFBTTXpUcWhNeU0zRDduTXkwVjBHS3pXUmRWN1ZzcVhSYkxtaTVvZGNBQUFQZXdSNC9ZZDg2UzNhdExzcnQ2U2hMVlZya1ZGVkZSY2xUZUxuNEN4Ykw0MHd2SzFTQWlOam9pUVpwbW9yVVpHYTFGZWlYMnBtaXBtdVNwZXlnYk1EQ0tpcGRGeTRUSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQThERzlNZFY4RDFxUlNJa05ZMG8rejFiZEVzbXQvK3A3NThwaUN5WmdSWU1adXZDaU1Wam0zdGtxS2kyNE1sVUNoN2x1NVY0Y3pCNitKcU0rZzRucVZLZHFLc3JNUGhKcU9WeVdSY3Mxc3E1V1BJQUFBQUFBTzlTcWkrbDFhU3FFSkd2aVNrZGtkalg3RlZqa2NpTGJldWhMQy9LTXJ5cmY1a3BmcGkrOFF5QUptNzR1dmZZbEwvTkY5NGQ4WFh2c1NsL21pKzhReUFKbTc0dXZmWWxMOU1YM2pZOERhYTZ4aW5HVk9va3pTNmZCZ1RVUnpYUGhMRTFrc3h6c3JyYitrcnR2bTk2SGZLdFFmeFg5azhDM1lBQUFBQ0s5S1dsS280RHJVbEpTTlBrNWxreExyR2M2T3I3b3V1cmJKcXFtV1JvZmZGMTc3RXBmNW92dkQ1UmZqWFNmN0JlMWNReUJNM2ZGMTc3RXBmNW92dkR2aTY5OWlVdjhBTkY5NGhrQVROM3hkZVhMNWxwYWM5NHZ2RVc0aHJVWEVOZW5xdkhodzRVV2NqTEZleUhmVlJWM2t2bWVXQUFBQUFBQVpiYk13Y21aWFVDMW1oQ1FsWmJSaEpSMGE1SXMzSGpSb3FxNVZ1NUhyRHVuQjlXRzFMY3dOeW9OSmJSc09VdWw5MDdwL0J5a0tBc1JyRWJycTFxSnJXc3RyMnZ0QUZXOUx0QVdnYVI2b3pVY2tLY2NrN0NjNTZPMWtpWFZ5NWJQcjY2V1hlUTBNc2o4b0RERHAraFNtSUlFTkZpeURsaHpIMVVSeXczMnNxcnRXemsyWjIxbkxrVnYxVjRBTUFBQW0wMmJCK09LdmdxcFBtNlhHYXJJcmRXTkx4a1YwS0tuOUt1UkxMZEZWVlJVelRvVlVYV1FCYUxEK25uQ2xUbGtXcmQycE0xZEVXR3NOMFZpM3ZtMXpVMkpadDFWRTI3Nkc1ZlQ3QjEvR21qZGNaN1NsaVpLaHlWeVdzaS81VUM2UDArd2R5cW8zWEdlMGZUN0IzS3FqZGNaN1NsdCtjWDV3THBmVDdCM0txamRjWjdSOVBzSGNxcU4xeG50S1czNXhmbkF1bDlQc0hjcXFOMXhudEgwK3dkeXFvM1hHZTBwYmZuRitjQzZYMCt3ZHlxbzNYR2UwZlQ3QjNLcWpkY1o3U2x0K2NYNXdMcGZUN0IzS3FqZGNaN1I5UHNIY3FxTjF4bnRLVzM1eGZuQXVsOVBzSGNxcU4xeG50SDArd2R5cW8zWEdlMHBiZm5GK2NDNlgwK3dkeXFvM1hHZTBmVDdCM0txamRjWjdTbHQrY1g1d0xwZlQ3QjNLcWpkY1o3UjlQc0hjcXFOMXhudEtXMzV4Zm5BdWw5UHNIY3FxTjF4bnRIMCt3ZHlxbzNYR2UwcGJmbkYrY0M2WDArd2R5cW8zWEdlMGZUN0IzS3FqZGNaN1NsdCtjWDV3THBmVDdCM0txamRjWjdUdVU3Rk9INnhNL3dBTlRLM1Q1MlkxVmYzS1htR3ZkcXB0V3lMc0tRMzV6ZHRFOWErWmRJMUlqT2p2aFFZMFJaZUtyVzYyczErU05WTGJGZHFBVytBc3FiZHUrQUFBQXJGcDNvRWFuWTNTcU5nTVpLVkNFMVd2aHcxUkZpTlN6OVpiVzFsMjc2cWk1a1RydFV0YnBwdzQrdllGaXpFdEJTSk4wNkovRXNWTDYyb2lXZWlXMzdXWFBlYVZUVnE2eXB0NStFRGlBQUFBQUFBQUFBRytiM29kOHExQi9GZjJUelJOODN2UTc1VnFEK0svc25nVzdBQUFBQVZ2K1VYNDEwbit3WHRYRU1remZLTDhhNlQvQUdDOXE0aGtBQUFBQUFBQUFBQU1vaXFpOHh1T2k2aXhhNXBEbzh1eFh0YkJtR3pVUjdZZXNqR3cxMTgrQkZWR3R2dks1TnV3MDV1MHNWOG5yRDM4UFNLblhvekZSMHk5SmVBNVlTWDFHNXVjMXk1MlZ5MlZPRmlBVFVya2F1YWJjOThHVTJyc1QvRjdnRDRUc25MMUdRbVpHYmhwRmxwbUdzS0xEVmJJNXFvcUtuK1VLZlkvd2ZId1ZpaVlwcjdQbG5wM1dXaVh2clFsVmRXNjI4SkxXWC8rbHlEWDhZWVBwbU02SzZuMUJsbnR1NkJNTlQ2OEIrOHFjMjhxYkZBcFZxcm5sc01HdzRzd25VOElWbUpUYW5EMVhJbXRDaXM4Q0t6WWptcXU5LzBVOEJXS2w3NWRJSEVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQStzS0tzTFZjeDZzZTExMGMzSlVYZVZGUGtBTHI0THhDekZPRDZiV0dzVmpvOE8wUnRsczJJMWRWNkpmYWwwWE05OUZ1bHlBL2s4NG9oUWxuc016RVJHdmlxczFMSzUyMWJJajJwZGR0a1JVUkV6K3N1OFQ1ZStlWCtFQUFBRGc5aVJHUFk1clhNY2xsYTVMbzVGMm9xY0c5WXAzcEZ3MDNDdU41K21RdFpaYldTTkFXeTVRMy9BRmtTNjdiWHRmaExqa2NhWXNGUHhWaGYrS2ttSjg1VTdYalEwc3Q0a08zMTJKYmFxMlJVNThrMmdWUlhhcGc1cXhiN3lkSndBQUFBQUFBQUFKdE43MFBaYVZhQ3YvTmYyVHpSRTJuY3A5VW5LUlB3cDZuek1XWG1vS3FzT05EZFp6VlZGVEwvQUFxcC9rQzlOMDRVOUl1bkNucEtiYnAyTnVVMVMvV0c2ZGpibFBVdjFnTGszVGhUMGk2THZwNlNtMjZkamJsUFV2MWpPNmRqYmxOVXYxZ041K1VYNDFVbit3WHRYRU1ucVZyRU5WeERIaHg2dlVKaWRpdzJhakh4blhWRzN2YjBubGdBQUFBQUFBQURLSmUrekl3Y21acUI2RkJwRTFYYTNLVXVVYnJURTFFU0d6SzlyN1Y2RVM2OUNGMDZGUjVYRDlFazZUSnQxWUVyQ1NHbVNYVlUydVd5WnFxNTMzeUtOQkdDRmtLYkV4TlB5N1ZqVGFJMlNWMWxWc0xmZW5BcXJsMElUUUFBQUFBQWVKaWJDVkd4ZFRteWRZbGU3TVlxdWh2YTVXdmhPVkxYYTVNLzhiRnNsMEswNHgwUTRqd3FzZVloUUhWR210Y3FwTVM2YXl0Ym5uRVp0YmtpcXFwZEU0UzJKaFV5V3lxaTcxbEFvWWpGVkZ0WmVZd3JWUkw1ZWt1RGlYUlhoTEZFV05IbTZja3ZOeFUrdE5TamxoUFZkYldWeXA0TGxWZDl5S3R2OEVXVlA1T2RWWXNQNXJyOGxNSXV0M1QrS2hQZzZ1eTF0WFh2djhGdWNDRUFTUE9hRE1kUzAyK0RCcDh0TncyK0RIZ3pjTnJIOUNQVnJ1Yk5FUGh1SjZRUHNSblhZSHZnUitDUU54UFNCOWlNNjdBOThiaWVrRDdFWjEyQjc0RWZna0RjVDBnZllqT3V3UGZHNG5wQSt4R2RkZ2UrQkg0SkEzRTlJSDJJenJzRDN4dUo2UVBzUm5YWUh2Z1IrQ1FOeFBTQjlpTTY3QTk4Ymlla0Q3RVoxMkI3NEVmZ2tEY1QwZ2ZZak91d1BmRzRucEEreEdkZGdlK0JINEpBM0U5SUgySXpyc0QzeHVKNlFQc1JuWFlIdmdSK0NRTnhQU0I5aU02N0E5OGJpZWtEN0VaMTJCNzRFZmdrRGNUMGdmWWpPdXdQZkc0bnBBK3hHZGRnZStCSDRKQTNFOUlIMkl6cnNEM3h1SjZRUHNSblhZSHZnUitDUU54UFNCOWlNNjdBOThiaWVrRDdFWjEyQjc0RWZna0RjVDBnZllqT3V3UGZHNG5wQSt4R2RkZ2UrQnFWQnJFM2grdHlkWGtYNnN4S1JVaU51NVVSMXRyVnRuWlV1MWVaVkxxVVNyeWxlb2tuVnBKK3RMVFVKSXJicWwyMzJvdGxWTG91UzVyWlVVcTF1S1kvUkUvOWhzNjdBOThtWFE3UnNXNFpwYzNSTVJVNUlNb2owalNrVkppSEVScXI0VFBxdld5S3RuSlpMWFY2cnRBazhDOTh3QUcvZTY3TEFBVmwweGFOMXcxVXZudWl5U3RvMHd2K3FqTTBsNHFyc3RiNnJGeXR0UzZxbVdTTEV1b3Q3V0x6MVdreUZicGN6VGFsTE1tSlNZYnF4SVQ5aTc2TGxtaW91YUttYUxtbVpVN1NSZ0dZd0pYbXk2eC80aW56YU9mS1JuS211clVYTnIwLzRrdWwxVEpiM1RmUkEwY0RmQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0pjQWlYTjYwWTRDaTQzeEVrR1liSGgwcVhUWG00OE5QUXhGWCtwMytiSm5ZOFBDZUZLcGkrdFE2WlRJYU9jcWEwV0s2K3BCWmRMdWN2Qi91cTVJVzd3amhhUndmaDJEUjVGWHVZeHl2ZkZldjFvajF0clA1dG14TjcvQUNvSHNTOENIS3k4T0JCYnF3NFRHc2EyNjVJaVdSUFFmVXdsNzd5SWlXUkVUWVpBQUFBQUFBQUFDMThsQUF4Yi90djc1blA5cUFBei9halA5cUFBei9halA5cUFBei9halA4QWFnQU0vd0JxTS8yb0FEUDlxTS8yb0FEUDlxTS8yb0FEUDlxTS93QnFBQXovQUdvei9hZ0FNLzJvei9hZ0FNLzJvei9hZ0FNLzJvei9BR29BRFA4QWFqYW1lMjM3L3dDb0FEL0lBQUFBQWVQaWJERk54YlE0dEtxc0pZa0YrYkhwNGNKKzg5cTd5cGZvVk1sdWluc0FDbkdOOUhkYXdUT0wvSFEwaXlVU0k1c0NiaCtCRXRtbDAvcFcyOHZBdHJwbWFscTVvbHk4MVhvOGhYYVpIcDFTbDJURXJIYnF4SWJrL3dCMFhhaXB0UmQ1U3RPa0xRL1VzS2EwOVRPN1ZHbWFpdmlSRVltdkFzdWVzaWIxcmZXVG52WUNMUWMwaE9YWm1jQUFBQUFBQUFBQUFBQUFBQUFBTW9sNzlCbEczQXdpS3EyUTkzQ21FNnBpK3R3NlpTNGFPY3FhMFdLN3dJTE45emw0T2JhcTVJZTNnTFJqV01iUjJ4NEtObHFXeUtqSTAzRS8zUmlmMU81dG1hWExRWVZ3alI4SDB4Wkdqd0hRMk9kcnhJcjExb2tWZi9VN2Z0bWx0aWVrRHI0SndWVGNEMGQxUHA3NHNSejM5MGpSb3FOMW9qdFZFM2s4SExKRnZiV1hNMlJFdHo4NjdRaVc1K2RkcGtBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFjWHNiRVlySHBkcTN1bkNuQWNnQkZlT05DMUlyL0FQRTFDa0traFZIM2ZxSmxBaXV5VE52OU43TG1tK3VaWHpFdUM2OWhPYVdCVjVDSkJSWGFySXFKclE0bWEyMVhKbG5xclpOdHQ0dXNpS2xycmUydytVM0p5cy9MUkphYmw0Y2VYaU5WcjRVVnVzMXlLbGxTeWdVUlZpcGZtMm5FczdpVFFKUUtvNk5NVWVhajB1WWRtMkVpZDBnSXV0ZGZxcm1tV1NJaTJTeVpFUDE3UTdqS2dwcnZwcXpzRkViZUpJcjNiTmQ3VnlmMC9WdHpnYUVEc1RNbE1TVXkrV200TVdCSGhycXZoUldLMTdGNEZhdWFMMG54MWNsekE0Z3pZd0FBUkxyWTVhdk9CeEJ5VnVWN21kU3kyY3RnT0tKZFRLTjV6Y0tKb3R4aFhKaEdRS0pOUzdFZTFyNHM0eFlEV0k3K3I2OWxWRXNxcnFvdHVETkNXY1AvQUNlcWZBVmthdTFhTE5PUldLNkJMTjdteTlydWFybFZWVkw3RlRWWExZQkE5SG9GVXJzNjJWcGNsR21vNi8wd20zdHpxdXhFNTFzVDNnblFUSXlLd0ovRXNSSnlNcmJySUluK2t4VlRZNWRybFM2N012UVN4U0tIVEtESk5rNlZKUUpTQTMrbUV4RTFseXpYaFhMTTlEZjlnSHlsNWFES3dVZ3dJVU9IQ2JzWkRhalVTKzJ5SWZTeTMyNUp2SWhrQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEQ051dXJmTE5BQU9sVUtMU3EwMUdWV215YzgyRTVWWTJaZ05pSTFWVE5VdW1TbW5SOUN1QTVpQkZSdEhmQmZGWS82OEtiaW9yRjNsUkZjcmNyM1JGUlV5MkFBYVhpTFFYaGlrWVlxMVRsNTZydWpTY2xHbUliWWthR3JWY3hpdVJGdERSYlhUaEsrQUFDWjlIR2lpaFl3d2hEcTFRbTZsQ21IVEVXRXJaZUl4ckxOdGJKV0t0OCtFQUNTS1pvUHdOTHljTmtlbnpFNUUxbHZHanpjUnJsUlYyV1lyVzVkQnVkSncvUnFQRGlmTmxKa1pQdWpVN29zdkxzWnI2dXk5a3p0ZGRvQUhwM1ZXdTVyaFhmV3RaTnR2OXJnQVpBQUFBQUFBQUFBQUFBZi85bXg2ZUhDZnZQYXU4cVg2RlRKYm9wN0FBcHhqZlIzV3NFemkveDBOSXNsRWlPYkFtNGZnUkxacGRQNlZ0dkx3TGE2Wm1wYXVhSmN2TlY2UElWMm1SNmRVcGRreEt4MjZzU0c1UDhBZEYyb3FiVVhlVXJUcEMwUDFMQ210UFV6dTFScG1vcjRrUkdKcndMTG5ySW05YTMxazU3MkFpMEhOSVRsMlpuQUFBQUFBQUFBQUFBQUFBQUFBREtKZS9RWlJ0d01JaXF0a1Bkd3BoT3FZdnJjT21VdUdqbkttdEZpdThDQ3pmYzVlRG0ycXVTSHQ0QzBZMWpHMGRzZUNqWmFsc2lveU5OeFA5MFluOVR1YlptbHkwR0ZjSTBmQjlNV1JvOEIwTmpuYThTSzlkYUpGWC8xTzM3WnBiWW5wQTYrQ2NGVTNBOUhkVDZlJztcXG4gICAgICAgICAgICBicmVhaztcXG4gICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2ltYWdlcy9ydWxlX3R5cGVfYXVkaW8nO1xcbiAgICAgICAgICAgIGJyZWFrO1xcbiAgICB9XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi4p22cXFcIixcInBhdGhcIjpcInFxXCIsXCJydWxlXCI6XCJldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9saWI/cnVsZT3mrYzor43pgILphY0nKSkucnVsZSk7XFxuY29uc3QgdGhpc19wbGF0Zm9ybSA9IFxcXCJxcVxcXCI7XFxuJC5leHBvcnRzID0ge1xcblxcblxcbiAgICBpVGFnOiBmdW5jdGlvbigpIHtcXG4gICAgICAgICQucmVxdWlyZSgncXE/cnVsZT3mrYzor43pgILphY0nKS5hamF4KFxcXCJodHRwczovL2MueS5xcS5jb20vc3BsY2xvdWQvZmNnaS1iaW4vZmNnX2dldF9kaXNzX3RhZ19jb25mLmZjZz9mb3JtYXQ9anNvblxcXCIpLmRhdGEuY2F0ZWdvcmllcy5tYXAoXyA9PiB7XFxuICAgICAgICAgICAgbmFtZSA9IF8uY2F0ZWdvcnlHcm91cE5hbWUucmVwbGFjZSgn54Ot6ZeoJywgJ+aOqOiNkCcpO1xcbiAgICAgICAgICAgIGlUYWdbbmFtZV0gPSB7fTtcXG4gICAgICAgICAgICBfLml0ZW1zLm1hcChfID0+IHtcXG4gICAgICAgICAgICAgICAgaVRhZ1tuYW1lXVtfLmNhdGVnb3J5TmFtZV0gPSBfLmNhdGVnb3J5SWQ7XFxuICAgICAgICAgICAgICAgIGlmIChfLmNhdGVnb3J5TmFtZSA9PSAn5YWo6YOoJylcXG4gICAgICAgICAgICAgICAgICAgIGlUYWdbbmFtZV1bXFxcIuacgOaWsFxcXCJdID0gXy5jYXRlZ29yeUlkICsgXFxcIiZzb3J0SWQ9MlxcXCI7XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9KTtcXG4gICAgICAgIGlUYWdbXFxcIuaOkuihjFxcXCJdID0ge307XFxuICAgICAgICAkLnJlcXVpcmUoJ3FxP3J1bGU95q2M6K+N6YCC6YWNJykuYWpheCgnaHR0cHM6Ly91LnkucXEuY29tL2NnaS1iaW4vbXVzaWN1LmZjZz9kYXRhPXtcXFwidG9wTGlzdFxcXCI6e1xcXCJtb2R1bGVcXFwiOlxcXCJtdXNpY1RvcGxpc3QuVG9wbGlzdEluZm9TZXJ2ZXJcXFwiLFxcXCJtZXRob2RcXFwiOlxcXCJHZXRBbGxcXFwiLFxcXCJwYXJhbVxcXCI6e319fScpLnRvcExpc3QuZGF0YS5ncm91cC5tYXAoXyA9PiB7XFxuICAgICAgICAgICAgaVRhZ1tcXFwi5o6S6KGMXFxcIl1bXy5ncm91cE5hbWVdID0gXy50b3BsaXN0Lm1hcChfID0+IEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IF8udGl0bGUsXFxuICAgICAgICAgICAgICAgIGltZzogXy5oZWFkUGljVXJsIHx8IF8uZnJvbnRQaWNVcmwsXFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IDMsXFxuICAgICAgICAgICAgICAgIHp5aWQ6IF8udG9wSWRcXG4gICAgICAgICAgICB9LCAxLCAxKSk7XFxuICAgICAgICB9KTtcXG4gICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKFxcXCJxcV9pVGFnXFxcIiwgaVRhZyk7XFxuICAgIH0sXFxuXFxuXFxuXFxuICAgIGxhenk6IGZ1bmN0aW9uKHBsYXRmb3JtLCB0MSwgdDIsIGlzdXJsKSB7XFxuICAgICAgICBzd2l0Y2ggKFN0cmluZyhwbGF0Zm9ybSkpIHtcXG4gICAgICAgICAgICBjYXNlICcwJzogLy8g6K+m5oOFICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgIHUgPSBcXFwiaHR0cHM6Ly91LnkucXEuY29tL2NnaS1iaW4vbXVzaWN1LmZjZ1xcXCI7XFxuICAgICAgICAgICAgICAgIHZhciBib2R5ID0gSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICAgICAgY29tbToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0OiAnMTknLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGN2OiAnMTg1OSdcXG4gICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICByZXE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGU6ICdtdXNpYy5wZl9zb25nX2RldGFpbF9zdnInLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ2dldF9zb25nX2RldGFpbF95cXEnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvbmdfbWlkOiB0MVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIF8gPSAkLnJlcXVpcmUoXFxcInFxP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuYWpheCh1LCB7XFxuICAgICAgICAgICAgICAgICAgICBib2R5OiBib2R5LFxcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcXG4gICAgICAgICAgICAgICAgfSkucmVxLmRhdGEudHJhY2tfaW5mbztcXG4gICAgICAgICAgICAgICAgbmFtZSA9IF8ubmFtZTtcXG4gICAgICAgICAgICAgICAgYXJ0aXN0ID0gXy5zaW5nZXIubWFwKF8gPT4gXy5uYW1lKS5qb2luKFxcXCImXFxcIik7XFxuICAgICAgICAgICAgICAgIGlmICh0MikgeyAvLyDkuIvovb1cXG4gICAgICAgICAgICAgICAgICAgIGYgPSBfLmZpbGU7XFxuICAgICAgICAgICAgICAgICAgICBhcnIgPSBbXTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChmLnNpemVfMTI4bXAzICE9IDApXFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2godHNbMV0gKyBTaXplKGYuc2l6ZV8xMjhtcDMpKTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChmLnNpemVfMzIwbXAzICE9IDApXFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2godHNbMl0gKyBTaXplKGYuc2l6ZV8zMjBtcDMpKTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChmLnNpemVfZmxhYyAhPSAwKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKHRzWzNdICsgU2l6ZShmLnNpemVfZmxhYykpO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGYuc2l6ZV9oaXJlcyAhPSAwKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKHRzWzRdICsgU2l6ZShmLnNpemVfaGlyZXMpKTtcXG5cXG5cXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKGFyciwgMSwgJ+mAieaLqeS4i+i9vemfs+i0qCcpLnNlbGVjdCgoYXJyLCB0MSwgbmFtZSwgYXJ0aXN0KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGFyci5pbmRleE9mKGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSAkLnJlcXVpcmUoXFxcImppZXhpP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuR2V0TXVzaWNVcmwoXFxcImRvd25cXFwiLCBcXFwicXFcXFwiLCB0MSwgaSwgbmFtZSwgYXJ0aXN0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXJsLm1hdGNoKFxcXCJ0b2FzdDovL1xcXCIpKSByZXR1cm4gdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnZG93bmxvYWQ6Ly8nICsgdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgYXJyLCB0MSwgbmFtZSwgYXJ0aXN0KTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAvLyDmrYzor41cXG4gICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgIGxyYyA9ICQucmVxdWlyZShcXFwicXE/cnVsZT3mrYzor43pgILphY1cXFwiKS5hamF4KFxcXCJodHRwOi8vYy55LnFxLmNvbS9seXJpYy9mY2dpLWJpbi9mY2dfcXVlcnlfbHlyaWNfbmV3LmZjZz9mb3JtYXQ9anNvbiZzb25nbWlkPVxcXCIgKyB0MSkubHlyaWM7XFxuICAgICAgICAgICAgICAgICAgICBscmMgPSBiYXNlNjREZWNvZGUobHJjKTtcXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XFxuICAgICAgICAgICAgICAgICAgICBscmMgPSBcXFwiXFxcIlxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIC8vIOmTvuaOpVxcbiAgICAgICAgICAgICAgICBpZiAoXy5wYXkucGF5X3BsYXkpIHtcXG4gICAgICAgICAgICAgICAgICAgIHVybCA9ICQucmVxdWlyZShcXFwiamlleGk/cnVsZT3mrYzor43pgILphY1cXFwiKS5HZXRNdXNpY1VybChcXFwib3BlblxcXCIsIFxcXCJxcVxcXCIsIHQxLCAwLCBuYW1lLCBhcnRpc3QpO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgdSArPSBgP2RhdGE9e1xcXCJyZXFfMFxcXCI6e1xcXCJtb2R1bGVcXFwiOlxcXCJ2a2V5LkdldFZrZXlTZXJ2ZXJcXFwiLFxcXCJtZXRob2RcXFwiOlxcXCJDZ2lHZXRWa2V5XFxcIixcXFwicGFyYW1cXFwiOntcXFwiZ3VpZFxcXCI6XFxcIjBcXFwiLFxcXCJwbGF0Zm9ybVxcXCI6XFxcIjIwXFxcIixcXFwiZmlsZW5hbWVcXFwiOltcXFwiTTUwMCR7dDErdDF9Lm1wM1xcXCJdLFxcXCJzb25nbWlkXFxcIjpbXFxcIiR7dDF9XFxcIl19fX1gO1xcbiAgICAgICAgICAgICAgICAgICAgXyA9ICQucmVxdWlyZShcXFwicXE/cnVsZT3mrYzor43pgILphY1cXFwiKS5hamF4KHUpLnJlcV8wLmRhdGE7XFxuICAgICAgICAgICAgICAgICAgICB1cmwgPSBfLnNpcFswXSArIF8ubWlkdXJsaW5mb1swXS5wdXJsO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmICh1cmwubWF0Y2goXFxcInRvYXN0Oi8vXFxcIikpIHJldHVybiB1cmw7XFxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgICAgICB1cmxzOiBbdXJsICsgJyNpc011c2ljPXRydWUjJ10sXFxuICAgICAgICAgICAgICAgICAgICBseXJpYzogbHJjXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBjYXNlICcxJzpcXG4gICAgICAgICAgICAgICAgdXJsID0gXFxcImh0dHBzOi8vYy55LnFxLmNvbS9zcGxjbG91ZC9mY2dpLWJpbi9mY2dfZ2V0X2Rpc3NfYnlfdGFnLmZjZz9mb3JtYXQ9anNvbiZjYXRlZ29yeUlkPVxcXCIgKyB0MSArIFxcXCImc2luPVxcXCIgKyAoKE1ZX1BBR0UgLSAxKSAqIDMwKSArIFxcXCImZWluPVxcXCIgKyAoKE1ZX1BBR0UgKiAzMCkgLSAxKTtcXG4gICAgICAgICAgICAgICAgJC5yZXF1aXJlKCdxcT9ydWxlPeatjOivjemAgumFjScpLmFqYXgodXJsKS5kYXRhLmxpc3QubWFwKF8gPT4gRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8uZGlzc25hbWUsXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IF8uaW1ndXJsLFxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogMixcXG4gICAgICAgICAgICAgICAgICAgIHp5aWQ6IF8uZGlzc2lkXFxuICAgICAgICAgICAgICAgIH0sIDEpKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIGNhc2UgJzInOiAvLyDlj5HnjrBcXG4gICAgICAgICAgICAgICAgXyA9ICQucmVxdWlyZShcXFwicXE/cnVsZT3mrYzor43pgILphY1cXFwiKS5hamF4KFxcXCJodHRwOi8vYy55LnFxLmNvbS9xem9uZS9mY2ctYmluL2ZjZ191Y2NfZ2V0Y2RpbmZvX2J5aWRzX2NwLmZjZz9mb3JtYXQ9anNvbiZ0eXBlPTEmZGlzc3RpZD1cXFwiICsgdDEpLmNkbGlzdFswXS5zb25nbGlzdDtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgY2FzZSAnMyc6IC8vIOaOkuihjFxcbiAgICAgICAgICAgICAgICBfID0gJC5yZXF1aXJlKFxcXCJxcT9ydWxlPeatjOivjemAgumFjVxcXCIpLmFqYXgoYGh0dHBzOi8vdS55LnFxLmNvbS9jZ2ktYmluL211c2ljdS5mY2c/ZGF0YT17XFxcImRldGFpbFxcXCI6e1xcXCJtb2R1bGVcXFwiOlxcXCJtdXNpY1RvcGxpc3QuVG9wbGlzdEluZm9TZXJ2ZXJcXFwiLFxcXCJtZXRob2RcXFwiOlxcXCJHZXREZXRhaWxcXFwiLFxcXCJwYXJhbVxcXCI6e1xcXCJ0b3BJZFxcXCI6JHt0MX0sXFxcIm9mZnNldFxcXCI6JHsoTVlfUEFHRS0xKSozMH0sXFxcIm51bVxcXCI6MzAsXFxcInBlcmlvZFxcXCI6XFxcIlxcXCJ9fX1gKS5kZXRhaWwuZGF0YS5zb25nSW5mb0xpc3Q7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgfVxcbiAgICAgICAgZCA9IFtdO1xcbiAgICAgICAgXy5tYXAoXyA9PiBFeHRyYSh7XFxuICAgICAgICAgICAgdGl0bGU6IChfLm5hbWUgfHwgXy5zb25nbmFtZSkgKyAnIC0gJyArIF8uc2luZ2VyLm1hcChfID0+IF8ubmFtZSkuam9pbignJicpLFxcbiAgICAgICAgICAgIGltZzogYGh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlIzMDB4MzAwTTAwMCR7Xy5hbGJ1bW1pZHx8KF8uYWxidW0/Xy5hbGJ1bS5taWQ6XFxcIlxcXCIpfS5qcGdgLFxcbiAgICAgICAgICAgIGNvbnRlbnQ6IF8ucGF5LnBheXBsYXksXFxuICAgICAgICAgICAgenlpZDogXy5taWQgfHwgXy5zb25nbWlkXFxuICAgICAgICB9LCAxKSk7XFxuICAgICAgICBzZXRSZXN1bHQoZCk7XFxuICAgIH0sXFxuXFxuXFxuXFxuICAgIHNlYXJjaDogZnVuY3Rpb24ocGxhdGZvcm0sIGtleXdvcmQsIGlzVSkge1xcbiAgICAgICAgaWYgKGlzVSAhPSBcXFwidXJsXFxcIikge1xcbiAgICAgICAgICAgIF9fID0ge1xcbiAgICAgICAgICAgICAgICBsaWI6IChfKSA9PiB0cnVlLFxcbiAgICAgICAgICAgICAgICBwYWlkOiAoXykgPT4gXy5wYXkucGF5X3BsYXkgPT0gJzEnLFxcbiAgICAgICAgICAgICAgICBmcmVlOiAoXykgPT4gXy5wYXkucGF5X3BsYXkgPT0gJzAnXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHN1cmwgPSAoc3R5cGUpID0+ICQucmVxdWlyZShcXFwicXE/cnVsZT3mrYzor43pgILphY1cXFwiKS5hamF4KFxcXCJodHRwOi8vdTYueS5xcS5jb20vY2dpLWJpbi9tdXNpY3UuZmNnXFxcIiwge1xcbiAgICAgICAgICAgICAgICBcXFwiYm9keVxcXCI6IEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJyZXFcXFwiOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcIm1vZHVsZVxcXCI6IFxcXCJtdXNpYy5zZWFyY2guU2VhcmNoQ2dpU2VydmljZVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcIm1ldGhvZFxcXCI6IFxcXCJEb1NlYXJjaEZvclFRTXVzaWNMaXRlXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFwicGFyYW1cXFwiOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJxdWVyeVxcXCI6IGtleXdvcmQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJzZWFyY2hfdHlwZVxcXCI6IHN0eXBlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwibnVtX3Blcl9wYWdlXFxcIjogMzAsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJwYWdlX251bVxcXCI6IE1ZX1BBR0VcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgICAgICBcXFwibWV0aG9kXFxcIjogXFxcIlBPU1RcXFwiXFxuICAgICAgICAgICAgfSkucmVxLmRhdGEuYm9keTtcXG4gICAgICAgICAgICBzd2l0Y2ggKFN0cmluZyhwbGF0Zm9ybSkpIHtcXG4gICAgICAgICAgICAgICAgY2FzZSAnMCc6IC8vIOaQnOe0ouWNleabslxcbiAgICAgICAgICAgICAgICAgICAgc3VybCgwKS5pdGVtX3NvbmcubWFwKF8gPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfX1tpc1VdKF8pKSBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfLm5hbWUgKyAnIC0gJyArIF8uc2luZ2VyLm1hcChfID0+IF8ubmFtZSkuam9pbignJicpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IGBodHRwczovL3kuZ3RpbWcuY24vbXVzaWMvcGhvdG9fbmV3L1QwMDJSMzAweDMwME0wMDAke18uYWxidW1taWR8fChfLmFsYnVtP18uYWxidW0ubWlkOlxcXCJcXFwiKX0uanBnYCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogXy5wYXkucGF5X3BsYXksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IF8ubWlkXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICBjYXNlICcxJzogLy8g5pCc57Si5q2M5Y2VXFxuICAgICAgICAgICAgICAgICAgICBzdXJsKDMpLml0ZW1fc29uZ2xpc3QubWFwKF8gPT4gRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfLmRpc3NuYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogXy5sb2dvLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IDIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogXy5kaXNzaWRcXG4gICAgICAgICAgICAgICAgICAgIH0sIDEpKTtcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0gZWxzZSB7IC8vIOaQnOe0oiDliIbkuqvpk77mjqVcXG4gICAgICAgICAgICBzd2l0Y2ggKFN0cmluZyhwbGF0Zm9ybSkpIHtcXG4gICAgICAgICAgICAgICAgY2FzZSAnMCc6IC8vIOaQnOe0ouWNleabslxcbiAgICAgICAgICAgICAgICAgICAgdmFyIGJvZHkgPSBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY29tbToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdDogJzE5JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Y6ICcxODU5J1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZTogJ211c2ljLnBmX3NvbmdfZGV0YWlsX3N2cicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ2dldF9zb25nX2RldGFpbF95cXEnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29uZ19taWQ6IGtleXdvcmRcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgXyA9ICQucmVxdWlyZShcXFwicXE/cnVsZT3mrYzor43pgILphY1cXFwiKS5hamF4KFxcXCJodHRwczovL3UueS5xcS5jb20vY2dpLWJpbi9tdXNpY3UuZmNnXFxcIiwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IGJvZHksXFxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcXG4gICAgICAgICAgICAgICAgICAgIH0pLnJlcS5kYXRhLnRyYWNrX2luZm87XFxuICAgICAgICAgICAgICAgICAgICBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8ubmFtZSArICcgLSAnICsgXy5zaW5nZXIubWFwKF8gPT4gXy5uYW1lKS5qb2luKCcmJyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBgaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjMwMHgzMDBNMDAwJHtfLmFsYnVtP18uYWxidW0ubWlkOlxcXCJcXFwifS5qcGdgLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IF8ucGF5LnBheXBsYXksXFxuICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogXy5taWRcXG4gICAgICAgICAgICAgICAgICAgIH0sIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIGNhc2UgJzEnOiAvLyDmkJzntKLmrYzljZVcXG4gICAgICAgICAgICAgICAgICAgIF8gPSAkLnJlcXVpcmUoXFxcInFxP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuYWpheChcXFwiaHR0cDovL2MueS5xcS5jb20vcXpvbmUvZmNnLWJpbi9mY2dfdWNjX2dldGNkaW5mb19ieWlkc19jcC5mY2c/Zm9ybWF0PWpzb24mdHlwZT0xJmRpc3N0aWQ9XFxcIiArIGtleXdvcmQpLmNkbGlzdFswXTtcXG4gICAgICAgICAgICAgICAgICAgIEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogUmljaChfLmRpc3NuYW1lKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IF8ubG9nbyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAyLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IF8uZGlzc3RpZFxcbiAgICAgICAgICAgICAgICAgICAgfSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIGFqYXg6IGZ1bmN0aW9uKHVybCwgaGVhZCkge1xcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZmV0Y2godXJsLCBPYmplY3QuYXNzaWduKHtcXG4gICAgICAgICAgICBcXFwiaGVhZGVyc1xcXCI6IHtcXG4gICAgICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly95LnFxLmNvbS9cXFwiLFxcbiAgICAgICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFxcXCJNb3ppbGxhLzUuMCAoY29tcGF0aWJsZTsgTVNJRSA5LjA7IFdpbmRvd3MgTlQgNi4xOyBXT1c2NDsgVHJpZGVudC81LjApXFxcIlxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIGhlYWQgfHwge30pKSk7XFxuICAgIH1cXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLikaRUR1jmlLbol49cIixcInBhdGhcIjpcImNvbGxlY3Rpb25cIixcInJ1bGVcIjpcImpzOlxcbmV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL2xpYj9ydWxlPeatjOivjemAgumFjScsIHt9KSkucnVsZSk7XFxubGV0IGNfcGxhdGZvcm0gPSBnZXRNeVZhcignY19wbGF0Zm9ybScsICdsaWInKS50cmltKCk7XFxubGV0IHNpID0gZ2V0TXlWYXIoJ3NpJywgJzAnKS50cmltKCk7XFxubGV0IGNfdDIgPSBnZXRNeVZhcignY190MicsICdsaWInKS50cmltKCk7XFxubGV0IGNfdDEgPSBzaSA9PSAnMCc7XFxuZCA9IFt7XFxuICAgIHRpdGxlOiBjX3QxID8gXFxcIuWNleabslxcXCIgOiBcXFwi5q2M5Y2VXFxcIixcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChzaSkgPT4ge1xcbiAgICAgICAgcHV0TXlWYXIoJ3NpJywgc2kpO1xcbiAgICAgICAgY2xlYXJNeVZhcignY190MicpO1xcbiAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgIH0sIGNfdDEgPyAnMScgOiAnMCcpLFxcbiAgICBjb2xfdHlwZTogXFxcImljb25fNVxcXCIsXFxuICAgIGltZzogXFxcImhpa2VyOi8vaW1hZ2VzL2ljb25feGl1dGFuXFxcIlxcbn0sIHtcXG4gICAgdGl0bGU6IFxcXCLmlLbol49cXFwiLFxcbiAgICB1cmw6IFxcXCJoaWtlcjovL2NvbGxlY3Rpb24/cnVsZT3mrYzor43pgILphY1cXFwiLFxcbiAgICBjb2xfdHlwZTogXFxcImljb25fNVxcXCIsXFxuICAgIGltZzogXFxcImhpa2VyOi8vaW1hZ2VzL2ljb25fZG93bmxvYWRcXFwiXFxufSwge1xcbiAgICB0aXRsZTogXFxcIuWOhuWPslxcXCIsXFxuICAgIHVybDogXFxcImhpa2VyOi8vaGlzdG9yeT9ydWxlPeatjOivjemAgumFjVxcXCIsXFxuICAgIGNvbF90eXBlOiBcXFwiaWNvbl81XFxcIixcXG4gICAgaW1nOiBcXFwiaGlrZXI6Ly9pbWFnZXMvaWNvbl9oaXNcXFwiXFxufSwge1xcbiAgICB0aXRsZTogXFxcIuaQnOe0olxcXCIsXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoXykgPT4ge1xcbiAgICAgICAgY2xlYXJNeVZhcignc19wbGF0Zm9ybScpO1xcbiAgICAgICAgY2xlYXJNeVZhcignc190MycpO1xcbiAgICAgICAgY2xlYXJNeVZhcignc190NCcpO1xcbiAgICAgICAgaWYgKF8uYmFjaylcXG4gICAgICAgICAgICByZXR1cm4gYmFjayhmYWxzZSksICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgIGVsc2VcXG4gICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vcGFnZS9zZWFyY2gjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjP3A9ZnlwYWdlJnJ1bGU95q2M6K+N6YCC6YWNXFxcIjtcXG4gICAgfSwgTVlfUEFSQU1TKSxcXG4gICAgY29sX3R5cGU6IFxcXCJpY29uXzVcXFwiLFxcbiAgICBpbWc6IFxcXCJoaWtlcjovL2ltYWdlcy9tZW51X3NlYXJjaDJcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgcGFnZVRpdGxlOiBcXFwi6auY57qn5pCc57SiXFxcIixcXG4gICAgICAgIGJhY2s6IDFcXG4gICAgfVxcbn0sIHtcXG4gICAgdGl0bGU6IFxcXCLorr7nva5cXFwiLFxcbiAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvcnVsZUxpc3Qjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjP3BhZ2VUaXRsZT3op6PmnpDnrqHnkIYmcnVsZT3mrYzor43pgILphY1cXFwiLFxcbiAgICBjb2xfdHlwZTogXFxcImljb25fNVxcXCIsXFxuICAgIGltZzogXFxcImhpa2VyOi8vaW1hZ2VzL+iuvue9rlxcXCJcXG59LCB7XFxuICAgIGNvbF90eXBlOiAnYmxhbmtfYmxvY2snXFxufV07XFxucGxhdGZvcm1zLm1hcChwbGF0Zm9ybSA9PiB7XFxuICAgIGlmIChjX3BsYXRmb3JtID09IHBsYXRmb3JtKVxcbiAgICAgICAgcGxhdGZvcm0gPSBSaWNoKFN0cm9uZyhDb2xvcihwbGF0Zm9ybSkpKTtcXG4gICAgcmV0dXJuIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogcGxhdGZvcm0sXFxuICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHBsYXRmb3JtKSA9PiB7XFxuICAgICAgICAgICAgaWYgKCFwbGF0Zm9ybS5tYXRjaCgvXuKAmOKAmOKAmeKAmS8pKSB7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKCdjX3BsYXRmb3JtJywgcGxhdGZvcm0pO1xcbiAgICAgICAgICAgICAgICBjbGVhck15VmFyKCdjX3QyJyk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgIH0sIHBsYXRmb3JtKSxcXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG4gICAgfSk7XFxufSk7XFxuZC5wdXNoKHtcXG4gICAgY29sX3R5cGU6ICdibGFua19ibG9jaydcXG59KTtcXG5pZiAoc2kgPT0gJzAnKSB7XFxuICAgIHN3aXRjaCAoY19wbGF0Zm9ybSkge1xcbiAgICAgICAgY2FzZSAnNXMnOlxcbiAgICAgICAgICAgIGN0YWIgPSBbXFxcImxpYlxcXCIsIFxcXCJ5Y1xcXCIsIFxcXCJmY1xcXCIsIFxcXCJielxcXCJdO1xcbiAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgY2FzZSAnbXknOlxcbiAgICAgICAgICAgIGN0YWIgPSBbXFxcImxpYlxcXCIsIFxcXCJ3eVxcXCIsIFxcXCJrd1xcXCIsIFxcXCJtZ1xcXCJdO1xcbiAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgY2FzZSAncXQnOlxcbiAgICAgICAgICAgIGN0YWIgPSBxdHM7XFxuICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICAgIGN0YWIgPSBbXFxcImxpYlxcXCIsIFxcXCJwYWlkXFxcIiwgXFxcImZyZWVcXFwiXTtcXG4gICAgICAgICAgICBicmVhaztcXG4gICAgfVxcbn0gZWxzZSB7XFxuICAgIGN0YWIgPSBbXFxcImxpYlxcXCJdO1xcbiAgICBpZiAoY19wbGF0Zm9ybSAhPSAncXQnKVxcbiAgICAgICAgY3RhYi5wdXNoKFxcXCJzb25nc1xcXCIsIFxcXCJob3RzXFxcIik7XFxufVxcbmN0YWIubWFwKHBsYXRmb3JtID0+IHtcXG4gICAgaWYgKGNfdDIgPT0gcGxhdGZvcm0pXFxuICAgICAgICBwbGF0Zm9ybSA9IFJpY2goU3Ryb25nKENvbG9yKHBsYXRmb3JtKSkpO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHBsYXRmb3JtLFxcbiAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChwbGF0Zm9ybSkgPT4ge1xcbiAgICAgICAgICAgIGlmICghcGxhdGZvcm0ubWF0Y2goL17igJjigJjigJnigJkvKSkge1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcignY190MicsIHBsYXRmb3JtKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgfSwgcGxhdGZvcm0pLFxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICB9KTtcXG59KTtcXG5kLnB1c2goe1xcbiAgICBjb2xfdHlwZTogJ2JsYW5rX2Jsb2NrJ1xcbn0sIHtcXG4gICAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJ1xcbn0sIHtcXG4gICAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJ1xcbn0sIHtcXG4gICAgY29sX3R5cGU6ICdiaWdfYmxhbmtfYmxvY2snXFxufSwge1xcbiAgICBjb2xfdHlwZTogJ2JpZ19ibGFua19ibG9jaydcXG59LCB7XFxuICAgIGNvbF90eXBlOiAncGljXzFfY2VudGVyJyxcXG4gICAgaW1nOiBcXFwiaGlrZXI6Ly9pbWFnZXMvcnVsZV90eXBlX2F1ZGlvXFxcIixcXG4gICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxufSwge1xcbiAgICBjb2xfdHlwZTogJ2JpZ19ibGFua19ibG9jaydcXG59LCB7XFxuICAgIGNvbF90eXBlOiAnYmlnX2JsYW5rX2Jsb2NrJ1xcbn0pO1xcbmxldCB6eSA9IHN0b3JhZ2UwLmdldEl0ZW0oXFxcImRhdGFfXFxcIiArIHNpKTtcXG5pZiAoenkgPT09IFxcXCJcXFwiIHx8IEpTT04uc3RyaW5naWZ5KHp5KSA9PSAne30nKSB6eSA9IHtcXG4gICAgXFxcIuWFqOmDqFxcXCI6IFtdXFxufSwgc3RvcmFnZTAuc2V0SXRlbShcXFwiZGF0YV9cXFwiICsgc2ksIHp5KTtcXG5sZXQgenUgPSBbXTtcXG5mb3IgKGkgaW4genkpIHp1LnB1c2goaSk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxubGV0IHRpID0gZ2V0TXlWYXIoJ3RpJywgJzAnKTtcXG56dS5tYXAoKG5hbWUsIGlpKSA9PiB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogdGkgPT0gaWkgPyBSaWNoKFN0cm9uZyhDb2xvcihuYW1lKSkpIDogbmFtZSxcXG4gICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaWkpID0+IHtcXG4gICAgICAgICAgICBwdXRNeVZhcigndGknLCBpaSk7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgIH0sIGlpKSxcXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGxvbmdDbGljazogW3tcXG4gICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLliKDpmaQgXFxcIiArIG5hbWUsXFxuICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKChzaSwgbmFtZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcIuehruWumuWIoOmZpOWIhue7hCBcXFwiICsgbmFtZSArIFxcXCIg5ZCX77yfXFxcXG7mraTmk43kvZzkuI3lj6/pgIbvvIzosKjmhY7pgInmi6njgIJcXFwiKS5jb25maXJtKChzaSwgbmFtZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB6eSA9IHN0b3JhZ2UwLmdldEl0ZW0oXFxcImRhdGFfXFxcIiArIHNpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgenlbbmFtZV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcigndGknKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwibGliP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuc2V0RGF0YShzaSwgenkpO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgc2ksIG5hbWUpXFxuICAgICAgICAgICAgICAgIH0sIHNpLCBuYW1lKVxcbiAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLmiZPlvIDkuLrkuoznuqdcXFwiLFxcbiAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygoc2ksIG5hbWUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKCdoaWtlcjovL2VtcHR5I25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5IycpLnJ1bGUoKHNpLCBuYW1lKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvbGliP3J1bGU95q2M6K+N6YCC6YWNJywge30pKS5ydWxlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgenkgPSBzdG9yYWdlMC5nZXRJdGVtKFxcXCJkYXRhX1xcXCIgKyBzaSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZCA9IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHp5W25hbWVdLm1hcChfID0+IEV4dHJhKF8pKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHQoZCk7XFxuICAgICAgICAgICAgICAgICAgICB9LCBzaSwgbmFtZSlcXG4gICAgICAgICAgICAgICAgfSwgc2ksIG5hbWUpXFxuICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuS/ruaUueWQjeensFxcXCIsXFxuICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKChzaSwgbmFtZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcIlxcXCIsIFxcXCLor7fovpPlhaXmlrDnmoTnu4TlkI1cXFwiKS5pbnB1dCgoc2ksIG5hbWUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgenkgPSBzdG9yYWdlMC5nZXRJdGVtKFxcXCJkYXRhX1xcXCIgKyBzaSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAganNvbiA9IHt9O1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSBpbiB6eSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PSBuYW1lKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uW2lucHV0XSA9IHp5W2ldXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uW2ldID0genlbaV1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB6eSA9IGpzb247XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImxpYj9ydWxlPeatjOivjemAgumFjVxcXCIpLnNldERhdGEoc2ksIHp5KTtcXG4gICAgICAgICAgICAgICAgICAgIH0sIHNpLCBuYW1lKTtcXG4gICAgICAgICAgICAgICAgfSwgc2ksIG5hbWUpXFxuICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuabtOaUueaOkuW6j1xcXCIsXFxuICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKChzaSwgenUsIG5hbWUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGkgPSB6dS5pbmRleE9mKG5hbWUpO1xcbiAgICAgICAgICAgICAgICAgICAgenUuc3BsaWNlKGksIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoenUuY29uY2F0KFxcXCLmnIDlkI7pnaJcXFwiKSwgMiwgJ+ivt+mAieaLqei1hOa6kOS9jee9ricpLnNlbGVjdCgoc2ksIHp1LCBuYW1lKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHp5ID0gc3RvcmFnZTAuZ2V0SXRlbShcXFwiZGF0YV9cXFwiICsgc2kpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzb24gPSB7fTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgb2YgenUpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gaW5wdXQpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb25bbmFtZV0gPSB6eVtuYW1lXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCd0aScsIHp1LmluZGV4T2YoaSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb25baV0gPSB6eVtpXVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXFxcIuacgOWQjumdolxcXCIgPT0gaW5wdXQpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbltuYW1lXSA9IHp5W25hbWVdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcigndGknLCB6dS5sZW5ndGgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB6eSA9IGpzb247XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImxpYj9ydWxlPeatjOivjemAgumFjVxcXCIpLnNldERhdGEoc2ksIHp5KTtcXG4gICAgICAgICAgICAgICAgICAgIH0sIHNpLCB6dSwgbmFtZSk7XFxuICAgICAgICAgICAgICAgIH0sIHNpLCB6dSwgbmFtZSlcXG4gICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi5YiG57uE5ZCI5bm2XFxcIixcXG4gICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKHNpLCB6dSwgbmFtZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgaSA9IHp1LmluZGV4T2YobmFtZSk7XFxuICAgICAgICAgICAgICAgICAgICB6dS5zcGxpY2UoaSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCh6dSwgMywgJ+mAieaLqeimgeWQiOW5tueahOWIhue7hCcpLnNlbGVjdCgoc2ksIHp1LCBuYW1lKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHp5ID0gc3RvcmFnZTAuZ2V0SXRlbShcXFwiZGF0YV9cXFwiICsgc2kpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzb24gPSB7fTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgb2YgenUpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gaW5wdXQpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5W2ldID0genlbaV0uY29uY2F0KHp5W25hbWVdKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCd0aScsIHp1LmluZGV4T2YoaSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb25baV0gPSB6eVtpXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgenkgPSBqc29uO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJsaWI/cnVsZT3mrYzor43pgILphY1cXFwiKS5zZXREYXRhKHNpLCB6eSk7XFxuICAgICAgICAgICAgICAgICAgICB9LCBzaSwgenUsIG5hbWUpO1xcbiAgICAgICAgICAgICAgICB9LCBzaSwgenUsIG5hbWUpXFxuICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuWIhuS6qyBcXFwiICsgbmFtZSxcXG4gICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKHNpLCBuYW1lKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzb24gPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IDAsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpdGNoOiAxLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaTogc2ksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHN0b3JhZ2UwLmdldEl0ZW0oXFxcImRhdGFfXFxcIiArIHNpKVtuYW1lXVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB0ID0gYmFzZTY0RW5jb2RlKEpTT04uc3RyaW5naWZ5KGpzb24pKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB1ID0gc2hhcmVQYXN0ZSh0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImNvcHk6Ly/mrYzor43pgILphY3mlLbol4/lj6Pku6TvvIzmiZPlvIDmtbfpmJTljbPlj6/lr7zlhaVcXFxcbu+/pVBhc3Rl77+lXFxcIiArIHUgKyBgQGltcG9ydD1qczokLnJlcXVpcmUoXFxcImppZXhpP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuc2V0UnVsZShpbnB1dCwyKTtgO1xcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WIhuS6q+Wksei0pVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0sIHNpLCBuYW1lKVxcbiAgICAgICAgICAgIH1dXFxuICAgICAgICB9XFxuICAgIH0pO1xcbn0pO1xcblxcblxcblxcblxcblxcblxcbnN3aXRjaCAoY190Mikge1xcbiAgICBjYXNlICdmcmVlJzpcXG4gICAgICAgIGNfdDIgPSAnMCdcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICdwYWlkJzpcXG4gICAgICAgIGNfdDIgPSAnMSdcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICdzb25ncyc6XFxuICAgICAgICBjX3QyID0gJzInXFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAnaG90cyc6XFxuICAgICAgICBjX3QyID0gJzMnXFxuICAgICAgICBicmVhaztcXG59XFxuaWYgKEpTT04uc3RyaW5naWZ5KHp1KSA9PSAnW1xcXCLlhajpg6hcXFwiXScgJiYgenlbXFxcIuWFqOmDqFxcXCJdLmxlbmd0aCA9PSAwKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICB0aXRsZTogXFxcIuKAnOKAnOKAneKAnVxcXCIgKyBcXFwifn5+5LuA5LmI6YO95rKh5pyJfn5+XFxcIi5mb250Y29sb3IoXFxcIkdyYXlcXFwiKVxcbiAgICB9KTtcXG59IGVsc2Uge1xcbiAgICBpZiAoenlbenVbdGldXS5sZW5ndGggPT09IDApIHtcXG4gICAgICAgIGRlbGV0ZSB6eVt6dVt0aV1dO1xcbiAgICAgICAgY2xlYXJNeVZhcigndGknKTtcXG4gICAgICAgICQucmVxdWlyZShcXFwibGliP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuc2V0RGF0YShzaSwgenkpO1xcbiAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgaWkgPSAwO1xcbiAgICAgICAgenlbenVbdGldXS5tYXAoKF8sIGkpID0+IHtcXG4gICAgICAgICAgICBpZiAoKChjX3BsYXRmb3JtID09ICdsaWInIHx8IGNfcGxhdGZvcm0gPT0gXy5kZXNjKSAmJiAoY190MiA9PSAnbGliJyB8fCBjX3QyID09IF8uY29udGVudCkpIHx8IChjX3BsYXRmb3JtID09ICdsaWInICYmICgoY190MiA9PSBfLmNvbnRlbnQpIHx8IChjX3QyID09ICcwJyAmJiBfLmNvbnRlbnQgIT0gJzEnKSkpKSB7XFxuICAgICAgICAgICAgICAgIF8uZXh0cmEgPSB7XFxuICAgICAgICAgICAgICAgICAgICBpbmhlcml0VGl0bGU6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAgY2xzOiBpZCArICc6YWRkbGlzdCcsXFxuICAgICAgICAgICAgICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi5L+u5pS5XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKHNpLCBrZXksIF8pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFtcXFwi5L+u5pS55ZCN56ewXFxcIiwgXFxcIuS/ruaUueWwgemdolxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLywgXFxcIuS/ruaUuemTvuaOpVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sIDEsICfpgInmi6nopoHkv67mlLnnmoTlj4LmlbAnKS5zZWxlY3QoKHNpLCBrZXksIF8pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdHlwZSwgdGV4dF0gPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCLkv67mlLnlkI3np7BcXFwiOiBbJ3RpdGxlJywgJ+ivt+i+k+WFpeaWsOeahOWQjeensCddLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwi5L+u5pS55bCB6Z2iXFxcIjogW18uaW1nID8gJ2ltZycgOiAncGljJywgJ+ivt+i+k+WFpeato+ehrueahOWwgemdouWcsOWdgCddLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwi5L+u5pS56ZO+5o6lXFxcIjogWyd1cmwnLCAn5Zyoe+WQjumdoiDlm57ovaYo5o2i6KGMKeWHoOS4i+WwseihjCddXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVtpbnB1dF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IF9bdHlwZV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQobmFtZSwgdGV4dCkuaW5wdXQoKHNpLCBrZXksIHR5cGUsIG5hbWUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHp5ID0gc3RvcmFnZTAuZ2V0SXRlbShcXFwiZGF0YV9cXFwiICsgc2kpW2tleV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5ID0genkubWFwKF8gPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9bdHlwZV0gPT0gbmFtZSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9bdHlwZV0gPSBpbnB1dDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJsaWI/cnVsZT3mrYzor43pgILphY1cXFwiKS5zZXREYXRhKHNpLCB6eSwga2V5KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBzaSwga2V5LCB0eXBlLCBuYW1lKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHNpLCBrZXksIF8pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBzaSwgenVbdGldLCBfKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLlj5jmm7RcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygoc2ksIHp1LCBrZXksIGksIHp5aWQpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFtcXFwi5pu05pS55o6S5bqPXFxcIiwgXFxcIuWIh+aNouWIhue7hFxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLywgXFxcIuaJuemHj+aNoue7hFxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sIDEsICfpgInmi6nopoHlj5jmm7TnmoTkuovku7YnKS5zZWxlY3QoKHNpLCB6dSwga2V5LCBpLCB6eWlkKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChpbnB1dCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICfmm7TmlLnmjpLluo8nOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenkgPSBzdG9yYWdlMC5nZXRJdGVtKFxcXCJkYXRhX1xcXCIgKyBzaSlba2V5XTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp1ID0genkubWFwKF8gPT4gXy50aXRsZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0genlbaV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6eS5zcGxpY2UoaSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6dS5zcGxpY2UoaSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCh6dS5jb25jYXQoXFxcIuacgOWQjumdolxcXCIpLCAxLCAn6K+36YCJ5oup6LWE5rqQ5L2N572uJykuc2VsZWN0KChzaSwga2V5LCB6eSwgenUsIGRhdGEpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uID0gW107XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpIGluIHp1KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh6dVtpXSA9PSBpbnB1dCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbi5wdXNoKGRhdGEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24ucHVzaCh6eVtpXSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcXFwi5pyA5ZCO6Z2iXFxcIiA9PSBpbnB1dCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uLnB1c2goZGF0YSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5ID0ganNvbjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwibGliP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuc2V0RGF0YShzaSwgenksIGtleSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBzaSwga2V5LCB6eSwgenUsIGRhdGEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ+WIh+aNouWIhue7hCc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpaSA9IHp1LmluZGV4T2Yoa2V5KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp1LnNwbGljZShpaSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCh6dS5jb25jYXQoJ+aWsOe7hCcpLCAzLCAn6K+36YCJ5oup6LWE5rqQ5L2N572uJykuc2VsZWN0KChzaSwga2V5LCBpKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenkgPSBzdG9yYWdlMC5nZXRJdGVtKFxcXCJkYXRhX1xcXCIgKyBzaSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbiA9IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5W2tleV0ubWFwKChfLCBpaSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaWkgIT0gaSkganNvbi5wdXNoKF8pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGRhdGEgPSBfO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5W2tleV0gPSBqc29uO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgn5paw57uEJyA9PSBpbnB1dCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwiXFxcIiwgXFxcIuivt+i+k+WFpeaWsOe7hOWQjeensFxcXCIpLmlucHV0KChzaSwgenksIGRhdGEpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dC50cmltKCkubWF0Y2goL15cXFxcZCt8XlxcXFxzKijmlrDnu4QpP1xcXFxzKiQvKSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v57uE5ZCN5LiN6IO95Li656m6ICYg5pyA5YmN6Z2i5LiN6IO95piv5pWw5a2XXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5W2lucHV0XSA9IFtkYXRhXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImxpYj9ydWxlPeatjOivjemAgumFjVxcXCIpLnNldERhdGEoc2ksIHp5KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgc2ksIHp5LCBkYXRhKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenlbaW5wdXRdLnB1c2goZGF0YSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImxpYj9ydWxlPeatjOivjemAgumFjVxcXCIpLnNldERhdGEoc2ksIHp5KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHNpLCBrZXksIGkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ+aJuemHj+aNoue7hCc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwiaGlrZXI6Ly9lbXB0eSNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSNcXFwiKS5ydWxlKChzaSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImFkZGxpc3Q/cnVsZT10Z3jpn7PkuZBcXFwiKShzaSwgMCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBzaSwga2V5KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHNpLCB6dSwga2V5LCBpLCB6eWlkKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgc2ksIHp1LCB6dVt0aV0sIGksIF8uenlpZClcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLliIbkuqtcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygoXywgc2ksIGtleSwgenlpZCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoW1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFxcXCLliIbkuqvpk77mjqVcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCLliIbkuqvlj6Pku6RcXFwiLCBcXFwi5om56YeP5YiG5LqrXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwgMSwgJ+mAieaLqeimgeWPmOabtOeahOS6i+S7ticpLnNlbGVjdCgoXywgc2ksIGtleSwgenlpZCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoaW5wdXQpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn5YiG5Lqr6ZO+5o6lJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImxpYj9ydWxlPeatjOivjemAgumFjVxcXCIpLmNvcHl1cmwoc2ksIHp5aWQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ+WIhuS6q+WPo+S7pCc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IDAsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl0Y2g6IDEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2k6IHNpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IF8udGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogW19dXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IGJhc2U2NEVuY29kZShKU09OLnN0cmluZ2lmeShqc29uKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImNvcHk6Ly/mrYzor43pgILphY3mlLbol4/lj6Pku6TvvIzmiZPlvIDmtbfpmJTljbPlj6/lr7zlhaVcXFxcbu+/pVRleHTvv6VcXFwiICsgdCArIGBAaW1wb3J0PWpzOiQucmVxdWlyZShcXFwiamlleGk/cnVsZT3mrYzor43pgILphY1cXFwiKS5zZXRSdWxlKGlucHV0LDIpO2A7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn5om56YeP5YiG5LqrJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24gPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogMSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXRjaDogMCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaTogc2ksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogc3RvcmFnZTAuZ2V0SXRlbShcXFwiZGF0YV9cXFwiICsgc2kpW2tleV1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoXFxcImhpa2VyOi8vZmlsZXMvX2NhdGNoL0ltcG9ydC50eHRcXFwiLCBKU09OLnN0cmluZ2lmeShqc29uKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vcGFnZS9yZWx5MiNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSM/cnVsZT3mrYzor43pgILphY1cXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgXywgc2ksIGtleSwgenlpZCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIF8sIHNpLCB6dVt0aV0sIF8uenlpZClcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLliKDpmaRcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygoc2ksIGtleSwgbmFtZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcIuehruWumuWIoOmZpFxcXCIgKyBuYW1lICsgXFxcIuWQl++8n1xcXCIpLmNvbmZpcm0oKHNpLCBrZXksIG5hbWUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgenkgPSBzdG9yYWdlMC5nZXRJdGVtKFxcXCJkYXRhX1xcXCIgKyBzaSlba2V5XTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgenUgPSB6eS5tYXAoXyA9PiBfLnRpdGxlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0genUuaW5kZXhPZihuYW1lKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6eS5zcGxpY2UoaSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImxpYj9ydWxlPeatjOivjemAgumFjVxcXCIpLnNldERhdGEoc2ksIHp5LCBrZXkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgc2ksIGtleSwgbmFtZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgc2ksIHp1W3RpXSwgXy50aXRsZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBdXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKE51bWJlcihfLmNvbnRlbnQucmVwbGFjZSgvXihcXFxcZCpcXFxcRCkrJC8sICcwJykpIDwgMikgXy5leHRyYS5sb25nQ2xpY2sudW5zaGlmdCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuKYhSDkuIvovb3mrYzmm7Ig4piFXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCh1cmwpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgTGF6eShfLmRlc2MsIF8uY29udGVudCwgXy56eWlkLCAxKSlcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGlmICghXy51cmwpIF8udXJsID0gTGF6eShfLmRlc2MsIF8uY29udGVudCwgXy56eWlkKTtcXG4gICAgICAgICAgICAgICAgXy5jb2xfdHlwZSA9ICdjYXJkX3BpY18zJztcXG4gICAgICAgICAgICAgICAgZC5wdXNoKF8pO1xcbiAgICAgICAgICAgICAgICBpaSsrO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICAgICAgaWYgKCFpaSkgZC5wdXNoKHtcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi4oCc4oCc4oCd4oCdXFxcIiArIFxcXCJ+fn7ku4DkuYjpg73msqHmnIl+fn5cXFwiLmZvbnRjb2xvcihcXFwiR3JheVxcXCIpXFxuICAgICAgICB9KTtcXG4gICAgfVxcbn1cXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLikaPpq5jnuqfmkJzntKJcIixcInBhdGhcIjpcInNlYXJjaFwiLFwicnVsZVwiOlwianM6XFxuZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvbGliP3J1bGU95q2M6K+N6YCC6YWNJywge30pKS5ydWxlKTtcXG5sZXQgaGlzdG9yeSA9IHN0b3JhZ2UwLmdldEl0ZW0oXFxcInNlYXJjaEhpc3RvcnlcXFwiLCBbXSk7XFxubGV0IHNfcGxhdGZvcm0gPSBnZXRNeVZhcignc19wbGF0Zm9ybScsICdsaWInKVxcbmxldCBzX3QxID0gZ2V0TXlWYXIoJ3NfdDEnLCBnZXRJdGVtKCdzX3QxJywgJzAnKSlcXG5sZXQgc190MiA9IGdldE15VmFyKCdzX3QyJywgJycpO1xcbmxldCBzX3QzID0gZ2V0TXlWYXIoJ3NfdDMnLCAnbGliJyk7XFxubGV0IHNfdDQsIHJlZ2lkLCBpc1AgPSBNWV9QQUdFID09IDEsXFxuICAgIGlzVSA9IC9odHRwcz86XFxcXC9cXFxcLy8udGVzdChzX3QyKTtcXG5cXG5cXG5cXG5pZiAoc190MSA9PSAnMCcpIHtcXG4gICAgc3dpdGNoIChzX3BsYXRmb3JtKSB7XFxuICAgICAgICBjYXNlICdsaWInOlxcbiAgICAgICAgICAgIHNfdDMgPSBnZXRNeVZhcignc190MycsICdrdycpO1xcbiAgICAgICAgICAgIHRhYnMgPSBbJ2t3J107XFxuICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICBjYXNlICc1cyc6XFxuICAgICAgICAgICAgdGFicyA9IFsnbGliJywgJ3ljJywgJ2ZjJywgJ2J6J107XFxuICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICBjYXNlICdteSc6XFxuICAgICAgICAgICAgc190NCA9IGdldE15VmFyKCdzX3Q0JywgJzEnKSA9PSAnMSc7XFxuICAgICAgICAgICAgc190MyA9IGdldE15VmFyKCdzX3QzJywgJ3d5Jyk7XFxuICAgICAgICAgICAgaWYgKCFzX3QzLm1hdGNoKC93eXxrd3xtZy8pICYmIHNfdDQpXFxuICAgICAgICAgICAgICAgIHNfdDMgPSAnd3knO1xcbiAgICAgICAgICAgIHRhYnMgPSBbXFxcInd5XFxcIiwgXFxcImt3XFxcIiwgXFxcIm1nXFxcIiwgXFxcIjF0XFxcIiwgXFxcImRiXFxcIiwgXFxcIjV5XFxcIiwgXFxcIjVmXFxcIl0uc2xpY2UoMCwgc190NCA/IDMgOiA3KTtcXG4gICAgICAgICAgICBicmVhaztcXG4gICAgICAgIGNhc2UgJ3F0JzpcXG4gICAgICAgICAgICBzX3QzID0gZ2V0TXlWYXIoJ3NfdDMnLCAnYmQnKTtcXG4gICAgICAgICAgICB0YWJzID0gcXRzLnNsaWNlKDEpO1xcbiAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgZGVmYXVsdDpcXG4gICAgICAgICAgICB0YWJzID0gWydsaWInLCAncGFpZCcsICdmcmVlJ107XFxuICAgICAgICAgICAgYnJlYWs7XFxuICAgIH1cXG59IGVsc2Uge1xcbiAgICB0YWJzID0gWydsaWInXTtcXG59XFxuXFxuXFxuXFxuaWYgKGlzUCkge1xcbiAgICBpZiAoaXNVKSB7XFxuICAgICAgICBsZXQgcmVncyA9IFtcXG4gICAgICAgICAgICBbXFxcInFxXFxcIiwgL3lcXFxcLnFxXFxcXC5jb20vaSwgLy4qKFxcXFwvZGV0YWlsc1xcXFwvLippZD18XFxcXC9wbGF5bGlzdFxcXFwvKShcXFxcZCspL2ksIC9bXFxcXC9cXFxcP1xcXFwmXXNvbmcoRGV0YWlsXFxcXC98bWlkXFxcXD0pKFthLXowLTldKykvaV0sXFxuICAgICAgICAgICAgW1xcXCJ3eVxcXCIsIC9tdXNpY1xcXFwuMTYzXFxcXC5jb20vaSwgL1xcXFwvcGxheWxpc3QoXFxcXC98XFxcXD9pZD0pKFxcXFxkKykvaSwgL3NvbmdcXFxcPyguKlxcXFwmKT9pZD0oXFxcXGQrKS9pXSxcXG4gICAgICAgICAgICBbXFxcImt3XFxcIiwgL2t1d29cXFxcLmNuL2ksIC9cXFxcL3BsYXlsaXN0KF9kZXRhaWwpP1xcXFwvKFxcXFxkKykvaSwgL1xcXFwvKHlpbnl1ZXxwbGF5X2RldGFpbClcXFxcLyhcXFxcZCspL2ldLFxcbiAgICAgICAgICAgIFtcXFwibWdcXFwiLCAvbWlndVxcXFwuY24vaSwgL1xcXFwvcGxheWxpc3RcXFxcLyguKmlkPSk/KFxcXFxkKykvaSwgL1xcXFwvc29uZ1xcXFwvKC4qaWQ9KT8oW2EtejAtOV0rKS9pXSxcXG4gICAgICAgICAgICAvLyBbXFxcImtnXFxcIiwgLi4uXVxcbiAgICAgICAgICAgIFtcXFwiNXNcXFwiLCAvNXNpbmdcXFxcLi9pLCAvLiooc29uZ2xpc3QuKmlkPSkoW2EtejAtOV0rKS9pLCAvLiooXFxcXD9zb25nLio/PXxcXFxcLykoW2EtejAtOV0rKShcXFxcJnNvbmcuKj89fFxcXFwvKShbYS16MC05XSspL2ldLFxcbiAgICAgICAgXTtcXG4gICAgICAgIGZvciAoW3BsYXRmb3JtLCByZWcxLCByZWcyLCByZWczXSBvZiByZWdzKSB7XFxuICAgICAgICAgICAgaWYgKHNfdDIubWF0Y2gocmVnMSkpIHtcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgIHNfcGxhdGZvcm0gPSBwbGF0Zm9ybTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXQgPSBzX3QyLm1hdGNoKHJlZzIpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc190MSA9ICcxJztcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWdpZCA9IG1hdFsyXTtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWF0ID0gc190Mi5tYXRjaChyZWczKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHNfdDEgPSAnMCc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVnaWQgPSBtYXRbMl07XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBsYXRmb3JtID09ICc1cycpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZ2lkLm1hdGNoKC9cXFxcRC8pKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaWQgPSBtYXRbNF0gKyAnIycgKyByZWdpZDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaWQgKz0gJyMnICsgbWF0WzRdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7fVxcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICBzX3QyID0gcmVnaWRcXG4gICAgfSBlbHNlIGlmIChzX3QyLnRyaW0oKSkge1xcbiAgICAgICAgbGV0IGlpID0gaGlzdG9yeS5pbmRleE9mKHNfdDIpO1xcbiAgICAgICAgaWYgKGlpID4gLTEpIHtcXG4gICAgICAgICAgICBoaXN0b3J5LnNwbGljZShpaSwgMSk7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoaGlzdG9yeS5sZW5ndGggPiAyMCkge1xcbiAgICAgICAgICAgIGhpc3Rvcnkuc3BsaWNlKGhpc3RvcnkubGVuZ3RoIC0gMSwgMSk7XFxuICAgICAgICB9XFxuICAgICAgICBoaXN0b3J5LnVuc2hpZnQoc190Mik7XFxuICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKFxcXCJzZWFyY2hIaXN0b3J5XFxcIiwgaGlzdG9yeSk7XFxuICAgIH1cXG5cXG5cXG5cXG4gICAgZCA9IFt7XFxuICAgICAgICBjb2xfdHlwZTogJ3BpY18xX2Z1bGwnLFxcbiAgICAgICAgdGl0bGU6ICcwJyxcXG4gICAgICAgIGltZzogJC5yZXF1aXJlKCdpbWFnZT9ydWxlPeatjOivjemAgumFjScpKFxcXCJ0b3BcXFwiKSxcXG4gICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoXykgPT4ge1xcbiAgICAgICAgICAgIGlmIChfLmJhY2spXFxuICAgICAgICAgICAgICAgIHJldHVybiBiYWNrKHRydWUpLCAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgZWxzZVxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vcGFnZS9jb2xsZWN0aW9uI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5Iz9ydWxlPeatjOivjemAgumFjVxcXCI7XFxuICAgICAgICB9LCBNWV9QQVJBTVMpLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBwYWdlVGl0bGU6IFxcXCJUR1jmlLbol49cXFwiLFxcbiAgICAgICAgICAgIGJhY2s6IDFcXG4gICAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgICAgdGl0bGU6IFN0cm9uZyhcXFwi5pCc57SiXFxcIiArIChzX3QxID09PSAnMCcgPyBcXFwi5Y2V5puyXFxcIiA6IFxcXCLmrYzljZVcXFwiKSksXFxuICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHNfdDEpID0+IHtcXG4gICAgICAgICAgICBwdXRNeVZhcignc190MScsIHNfdDEpO1xcbiAgICAgICAgICAgIGNsZWFyTXlWYXIoJ3NfdDMnKTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICB9LCBzX3QxID09PSAnMCcgPyAnMScgOiAnMCcpLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJpY29uX3NtYWxsXzNcXFwiLFxcbiAgICAgICAgaW1nOiBcXFwiaGlrZXI6Ly9pbWFnZXMvaWNvbl94aXV0YW5cXFwiXFxuICAgIH0sIHtcXG4gICAgICAgIHRpdGxlOiBTdHJvbmcoXFxcIuaIkeeahOaUtuiXj1xcXCIpLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9jb2xsZWN0aW9uP3J1bGU95q2M6K+N6YCC6YWNXFxcIixcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiaWNvbl9zbWFsbF8zXFxcIixcXG4gICAgICAgIGltZzogXFxcImhpa2VyOi8vaW1hZ2VzL2ljb25fZG93bmxvYWRcXFwiXFxuICAgIH0sIHtcXG4gICAgICAgIHRpdGxlOiBTdHJvbmcoXFxcIuWOhuWPsuiusOW9lVxcXCIpLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9oaXN0b3J5P3J1bGU95q2M6K+N6YCC6YWNXFxcIixcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiaWNvbl9zbWFsbF8zXFxcIixcXG4gICAgICAgIGltZzogXFxcImhpa2VyOi8vaW1hZ2VzL2ljb25faGlzXFxcIlxcbiAgICB9XTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn8J+UjScsXFxuICAgICAgICBkZXNjOiAn5pCc57Si5YWz6ZSu6K+NIC8g5YiG5Lqr6ZO+5o6lJyxcXG4gICAgICAgIHVybDogJC50b1N0cmluZygoc19wbGF0Zm9ybSkgPT4ge1xcbiAgICAgICAgICAgIHNfdDIgPSBpbnB1dC50cmltKCk7XFxuICAgICAgICAgICAgaWYgKHNfdDIgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3NfdDInLCBzX3QyKTtcXG4gICAgICAgICAgICAgICAgaWYgKHNfcGxhdGZvcm0gPT0gJ2xpYicpXFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignc19wbGF0Zm9ybScsIGdldEl0ZW0oJ3NfcGxhdGZvcm0nLCAna3cnKSk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgIH0sIHNfcGxhdGZvcm0pLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJpbnB1dFxcXCIsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGlkOiBpZCArIFxcXCI6c2VhcmNoXFxcIixcXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldE15VmFyKFxcXCJzX3QyXFxcIiksXFxuICAgICAgICAgICAgb25DaGFuZ2U6IFxcXCJwdXRNeVZhcignc190MicsaW5wdXQpXFxcIlxcbiAgICAgICAgfVxcbiAgICB9KTtcXG4gICAgcGxhdGZvcm1zLm1hcChwbGF0Zm9ybSA9PiB7XFxuICAgICAgICBpZiAoc19wbGF0Zm9ybSA9PSBwbGF0Zm9ybSlcXG4gICAgICAgICAgICBwbGF0Zm9ybSA9IFJpY2goU3Ryb25nKENvbG9yKHBsYXRmb3JtKSkpO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogcGxhdGZvcm0sXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChwbGF0Zm9ybSkgPT4ge1xcbiAgICAgICAgICAgICAgICBpZiAoIXBsYXRmb3JtLm1hdGNoKC9e4oCY4oCY4oCZ4oCZLykpIHtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdzX3BsYXRmb3JtJywgcGxhdGZvcm0pO1xcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcignc190MycpO1xcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcignc190NCcpO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgfSwgcGxhdGZvcm0pLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG4gICAgICAgIH0pO1xcbiAgICB9KTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIGNvbF90eXBlOiAnYmxhbmtfYmxvY2snXFxuICAgIH0pO1xcbiAgICBpZiAoc190MSA9PSAnMCcgJiYgc19wbGF0Zm9ybSA9PSAnbXknKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBSaWNoKFN0cm9uZyhDb2xvcihzX3Q0ID8gJ+aWsCcgOiAn5penJywgJzMzOTljYycpKSksXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChzX3Q0KSA9PiB7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKCdzX3Q0Jywgc190NCk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICB9LCBzX3Q0ID8gJzAnIDogJzEnKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICB0YWJzLm1hcChuYW1lID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHNfdDMgPT0gbmFtZSA/IFJpY2goU3Ryb25nKENvbG9yKG5hbWUpKSkgOiBuYW1lLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgodGlkKSA9PiB7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKCdzX3QzJywgdGlkKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgIH0sIG5hbWUpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG4gICAgICAgIH0pO1xcbiAgICB9KTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIGNvbF90eXBlOiAnbGluZV9ibGFuaydcXG4gICAgfSwge1xcbiAgICAgICAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJ1xcbiAgICB9KTtcXG4gICAgTG9hZGluZygpO1xcbiAgICBpZiAoaXNVKSB7XFxuICAgICAgICBpZiAoIXJlZ2lkKSBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi6ZO+5o6l5qC85byP5pyq5pS25b2VXFxcIixcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgfSk7XFxuICAgICAgICBlbHNlIHNfdDMgPSBcXFwidXJsXFxcIjtcXG4gICAgfVxcbn0gZWxzZSBkID0gW107XFxuXFxuXFxuXFxuaWYgKHNfcGxhdGZvcm0gIT0gXFxcImxpYlxcXCIgJiYgIS9eXFxcXHMqJC8udGVzdChzX3QyKSkge1xcbiAgICBpZiAoc190Mi50cmltKCkgJiYgKCFpc1UgfHwgaXNQKSkge1xcbiAgICAgICAgaWYgKGlzVSlcXG4gICAgICAgICAgICBzZXRQYWdlVGl0bGUoJ+mrmOe6p+aQnOe0oiAtICcgKyBzX3BsYXRmb3JtICsgKHNfdDEgPT0gJzEnID8gJ+atjOWNlScgOiAn5Y2V5puyJykpO1xcbiAgICAgICAgZWxzZVxcbiAgICAgICAgICAgIHNldFBhZ2VUaXRsZSgn6auY57qn5pCc57SiIC0gJyArIHNfdDIgKyAnIycgKyBNWV9QQUdFKTtcXG4gICAgICAgICQucmVxdWlyZShzX3BsYXRmb3JtICsgXFxcIj9ydWxlPeatjOivjemAgumFjVxcXCIpLnNlYXJjaChzX3QxLCBzX3QyLCBzX3QzLCBzX3Q0KTtcXG4gICAgfVxcbn0gZWxzZSBpZiAoaXNQKSB7XFxuICAgIHNldFBhZ2VUaXRsZSgn6auY57qn5pCc57SiJyk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJzxzcGFuIHN0eWxlPVxcXCJjb2xvcjojZmY2NjAxXFxcIj48Yj7ljoblj7LmkJzntKI8L2I+PC9zcGFuPicsXFxuICAgICAgICBwaWNfdXJsOiBcXFwiaGlrZXI6Ly9pbWFnZXMvaWNvbl9maW5kXFxcIixcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIixcXG4gICAgICAgIHVybDogJChcXFwi56Gu5a6a5riF6Zmk5YWo6YOo5pCc57Si6K6w5b2V77yfXFxcIikuY29uZmlybSgoaWQpID0+IHtcXG4gICAgICAgICAgICBjbGVhckl0ZW0oXFxcInNlYXJjaEhpc3RvcnlcXFwiKTtcXG4gICAgICAgICAgICBkZWxldGVJdGVtQnlDbHMoaWQgKyBcXFwiOmtleVxcXCIpO1xcbiAgICAgICAgICAgIGFkZEl0ZW1BZnRlcihpZCArIFxcXCI6c2VhcmNoSGlzdG9yeVxcXCIsIHtcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi4oCc4oCc4oCd4oCdXFxcIiArIFxcXCJ+fn7ku4DkuYjpg73msqHmnInlk6Z+fn5cXFwiLmZvbnRjb2xvcihcXFwiR3JheVxcXCIpLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgY2xzOiBpZCArIFxcXCI6a2V5XFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9LCBpZCksXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGlkOiBpZCArIFxcXCI6c2VhcmNoSGlzdG9yeVxcXCIsXFxuICAgICAgICB9XFxuICAgIH0pO1xcbiAgICBpZiAoaGlzdG9yeS5sZW5ndGggPT09IDApIGQucHVzaCh7XFxuICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICB0aXRsZTogXFxcIuKAnOKAnOKAneKAnVxcXCIgKyBcXFwifn5+5LuA5LmI6YO95rKh5pyJ5ZOmfn5+XFxcIi5mb250Y29sb3IoXFxcIkdyYXlcXFwiKSxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgY2xzOiBpZCArIFxcXCI6a2V5XFxcIixcXG4gICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuICAgIGVsc2UgaGlzdG9yeS5tYXAoKGtleSwgaSkgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZToga2V5LFxcbiAgICAgICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoc19wbGF0Zm9ybSwga2V5KSA9PiB7XFxuICAgICAgICAgICAgICAgIGlmIChzX3BsYXRmb3JtID09ICdsaWInKSBwdXRNeVZhcignc19wbGF0Zm9ybScsIGdldEl0ZW0oJ3NfcGxhdGZvcm0nLCAna3cnKSk7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKCdzX3QyJywga2V5KTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgIH0sIHNfcGxhdGZvcm0sIGtleSksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJmbGV4X2J1dHRvblxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgaWQ6IGlkICsgXFxcIjprZXk6XFxcIiArIGtleSxcXG4gICAgICAgICAgICAgICAgY2xzOiBpZCArIFxcXCI6a2V5XFxcIixcXG4gICAgICAgICAgICAgICAgbG9uZ0NsaWNrOiBbe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLliKDpmaTlhbPplK7or406XFxcIiArIGtleSxcXG4gICAgICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKChpZCwga2V5KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGhpc3RvcnkgPSBzdG9yYWdlMC5nZXRJdGVtKFxcXCJzZWFyY2hIaXN0b3J5XFxcIiwgW10pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpaSA9IGhpc3RvcnkuaW5kZXhPZihrZXkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpc3Rvcnkuc3BsaWNlKGlpLCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKFxcXCJzZWFyY2hIaXN0b3J5XFxcIiwgaGlzdG9yeSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlSXRlbShpZCArIFxcXCI6a2V5OlxcXCIgKyBrZXkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoaXN0b3J5Lmxlbmd0aCA9PT0gMCkgYWRkSXRlbUFmdGVyKGlkICsgXFxcIjpzZWFyY2hIaXN0b3J5XFxcIiwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLigJzigJzigJ3igJ1cXFwiICsgXFxcIn5+fuS7gOS5iOmDveayoeacieWTpn5+flxcXCIuZm9udGNvbG9yKFxcXCJHcmF5XFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHM6IGlkICsgXFxcIjprZXlcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZVZpc2libGU6IGZhbHNlXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIH0sIGlkLCBrZXkpXFxuICAgICAgICAgICAgICAgIH1dXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgIH0pO1xcbiAgICBSZXNvdSA9IChpZCwgc19wbGF0Zm9ybSwgcGxhdGZvcm0sIHJlc291KSA9PiB7XFxuICAgICAgICBEID0gW107XFxuICAgICAgICByZXNvdS5tYXAobmFtZSA9PiB7XFxuICAgICAgICAgICAgRC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IG5hbWUsXFxuICAgICAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoc19wbGF0Zm9ybSwgcGxhdGZvcm0sIGtleXdvcmQpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChzX3BsYXRmb3JtID09ICdsaWInKSBwdXRNeVZhcignc19wbGF0Zm9ybScsIHBsYXRmb3JtKTtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdzX3QxJywgJzAnKTtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdzX3QyJywga2V5d29yZCk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgICAgICB9LCBzX3BsYXRmb3JtLCBwbGF0Zm9ybSwgbmFtZSksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnZmxleF9idXR0b24nLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgY2xzOiBpZCArICc6cmVzb3U6a2V5J1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9KTtcXG4gICAgICAgIHJldHVybiBEO1xcbiAgICB9O1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJ1xcbiAgICB9LCB7XFxuICAgICAgICB0aXRsZTogJzxzcGFuIHN0eWxlPVxcXCJjb2xvcjojZmY2NjAxXFxcIj48Yj7lpKflrrbpg73lnKjmkJw8L2I+PC9zcGFuPicsXFxuICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGlkLCBzX3BsYXRmb3JtLCBwbGF0Zm9ybSwgUmVzb3UpID0+IHtcXG4gICAgICAgICAgICBkZWxldGVJdGVtQnlDbHMoaWQgKyAnOnJlc291OmtleScpO1xcbiAgICAgICAgICAgIHNyZWMgPSBbXTtcXG4gICAgICAgICAgICBKU09OLnBhcnNlKGZldGNoKFxcXCJodHRwOi8vc2VhcmNocmVjLmt1d28uY24vc3JlYy5zP3NlYXJjaHJlY2FwaT0wJmlkPTBcXFwiKSkuYWJzbGlzdC5tYXAoYWJsaXN0ID0+IHtcXG4gICAgICAgICAgICAgICAgYWJsaXN0Lm1hcChfID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHNyZWMucHVzaChfLndvcmQpXFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICBhZGRJdGVtQWZ0ZXIoaWQgKyAnOnJlc291JywgUmVzb3UoaWQsIHNfcGxhdGZvcm0sIHBsYXRmb3JtLCBzcmVjKSk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgIH0sIGlkLCBzX3BsYXRmb3JtLCAna3cnLCBSZXNvdSksXFxuICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCIsXFxuICAgICAgICBwaWNfdXJsOiBcXFwiaGlrZXI6Ly9pbWFnZXMvcnVsZV90eXBlX2NvbWljc1xcXCIsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGlkOiBpZCArIFxcXCI6cmVzb3VcXFwiXFxuICAgICAgICB9XFxuICAgIH0pO1xcbiAgICBzcmVjID0gc3RvcmFnZTAuZ2V0TXlWYXIoXFxcImt3X3NyZWNcXFwiKTtcXG4gICAgaWYgKHNyZWMgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgIHNyZWMgPSBmZXRjaCgnaHR0cDovL2hvdHdvcmQua3V3by5jbi9ob3R3b3JkLnM/ZW5jb2Rpbmc9dXRmOCZ0YWJpZD0xJykuc3BsaXQoL1xcXFxuLykubWFwKHRleHQgPT4gdGV4dC50cmltKCkucmVwbGFjZSgvXlRFWFQ9fChcXFxccytcXFxcZCspezJ9JC9naSwgJycpKTtcXG4gICAgICAgIEpTT04ucGFyc2UoZmV0Y2goJ2h0dHA6Ly9zZWFyY2hyZWN0ZXJtLmt1d28uY24vcmVjdGVybS5zP2VuY29kaW5nPXV0ZjgmdmVyc2lvbj0xJykpLmNvbnRlbnQubWFwKF8gPT4gc3JlYy5wdXNoKF8ucXVlcnlfd29yZCkpO1xcbiAgICAgICAgc3JlYyA9IHNyZWMuZmlsdGVyKChhLCBiLCBjKSA9PiBjLmluZGV4T2YoYSkgPT09IGIgJiYgYS50cmltKCkgIT09IFxcXCJcXFwiKTtcXG4gICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKFxcXCJrd19zcmVjXFxcIiwgc3JlYyk7XFxuICAgIH1cXG4gICAgZCA9IGQuY29uY2F0KFJlc291KGlkLCBzX3BsYXRmb3JtLCAna3cnLCBzcmVjKSk7XFxufVxcblxcbk1ZX1BBR0UgPT0gMSA/IHNldFByZVJlc3VsdChkKSA6IHNldFJlc3VsdChkKTtcXG5kZWxldGVJdGVtQnlDbHMoJ2xvYWRpbmdfZ2lmJyk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLinbd3eVwiLFwicGF0aFwiOlwid3lcIixcInJ1bGVcIjpcImV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL2xpYj9ydWxlPeatjOivjemAgumFjScpKS5ydWxlKTtcXG5jb25zdCB0aGlzX3BsYXRmb3JtID0gXFxcInd5XFxcIjtcXG4kLmV4cG9ydHMgPSB7XFxuICAgIGlUYWc6IGZ1bmN0aW9uKHJ1bikge1xcbiAgICAgICAgaVRhZ1tcXFwi5o6o6I2QXFxcIl0gPSB7fTtcXG4gICAgICAgIGlUYWdbXFxcIuaOqOiNkFxcXCJdW1xcXCLmjqjojZBcXFwiXSA9IFxcXCJwZXJzb25hbGl6ZWQ/XFxcIjtcXG4gICAgICAgIGlUYWdbXFxcIuaOqOiNkFxcXCJdW1xcXCLmnIDmlrBcXFwiXSA9IFxcXCJcXFwiO1xcbiAgICAgICAgaVRhZ1tcXFwi5o6o6I2QXFxcIl1bXFxcIuWumOaWuVxcXCJdID0gXFxcIuWumOaWuVxcXCI7XFxuICAgICAgICBBcnIgPSBbXFxcIuivreenjVxcXCIsIFxcXCLpo47moLxcXFwiLCBcXFwi5Zy65pmvXFxcIiwgXFxcIuaDheaEn1xcXCIsIFxcXCLkuLvpophcXFwiXTtcXG4gICAgICAgIGZvciAoa2V5IG9mIEFycikgaVRhZ1trZXldID0ge307XFxuICAgICAgICAkLnJlcXVpcmUoJ3d5P3J1bGU95q2M6K+N6YCC6YWNJykuYWpheChcXFwicGxheWxpc3QvY2F0bGlzdFxcXCIpLnN1Yi5tYXAoXyA9PlxcbiAgICAgICAgICAgIGlUYWdbQXJyW18uY2F0ZWdvcnldXVtfLm5hbWVdID0gXy5uYW1lXFxuICAgICAgICApO1xcbiAgICAgICAgaVRhZ1tcXFwi5o6S6KGMXFxcIl0gPSB7fTtcXG4gICAgICAgIGlmIChydW4pIHJldHVybiB0cnVlO1xcbiAgICAgICAgaVRhZ1tcXFwi5o6S6KGMXFxcIl1bXFxcIuWFqOmDqFxcXCJdID0gJC5yZXF1aXJlKCd3eT9ydWxlPeatjOivjemAgumFjScpLmFqYXgoXFxcInRvcGxpc3Q/XFxcIikubGlzdC5tYXAoXyA9PiBFeHRyYSh7XFxuICAgICAgICAgICAgdGl0bGU6IF8ubmFtZSxcXG4gICAgICAgICAgICBpbWc6IF8uY292ZXJJbWdVcmwsXFxuICAgICAgICAgICAgY29udGVudDogMyxcXG4gICAgICAgICAgICB6eWlkOiBfLmlkXFxuICAgICAgICB9LCAxLCAxKSk7XFxuICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihcXFwid3lfaVRhZ1xcXCIsIGlUYWcpO1xcbiAgICB9LFxcbiAgICBsYXp5OiBmdW5jdGlvbihwbGF0Zm9ybSwgdDEsIHQyKSB7XFxuICAgICAgICBzd2l0Y2ggKFN0cmluZyhwbGF0Zm9ybSkpIHtcXG4gICAgICAgICAgICBjYXNlICcwJzogLy8g6K+m5oOFXFxuICAgICAgICAgICAgICAgIF8gPSAkLnJlcXVpcmUoXFxcInd5P3J1bGU95q2M6K+N6YCC6YWNXFxcIikuYWpheDIoXFxcImh0dHBzOi8vbXVzaWMuMTYzLmNvbS93ZWFwaS92My9zb25nL2RldGFpbFxcXCIsIHtcXG4gICAgICAgICAgICAgICAgICAgIGM6IGBbe1xcXCJpZFxcXCI6JHt0MX19XWBcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGEgPSBfLnNvbmdzWzBdO1xcbiAgICAgICAgICAgICAgICBuYW1lID0gYS5uYW1lO1xcbiAgICAgICAgICAgICAgICBhcnRpc3QgPSBhLmFyLm1hcChfID0+IF8ubmFtZSkuam9pbihcXFwiJlxcXCIpO1xcbiAgICAgICAgICAgICAgICBpZiAodDIpIHtcXG4gICAgICAgICAgICAgICAgICAgIGFyciA9IFt0c1sxXSArIFNpemUoYS5sID8gYS5sLnNpemUgOiBhLm0uc2l6ZSldO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGEuaClcXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaCh0c1syXSArIFNpemUoYS5oLnNpemUpKTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChhLnNxKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKHRzWzNdICsgU2l6ZShhLnNxLnNpemUpKTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChhLmhyKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKHRzWzRdICsgU2l6ZShhLmhyLnNpemUpKTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChnZXRNeVZhcignd3lqeF96cScpID09ICcxJykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycjIgPSBbXFxcIumrmOa4heeOr+e7lVxcXCIsIFxcXCLmsonmtbjnjq/nu5VcXFwiLCBcXFwi6LaF5riF5q+N5bimXFxcIl0ubWFwKHQgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gXFxcIuOAkFxcXCIgKyB0ICsgXFxcIuOAkeaXoOazleiuoeeul1xcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2godCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycjIgPSBbXFxcIuayoeacieavjeW4puino+aekFxcXCJdO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoYXJyLCAxLCAn6YCJ5oup5LiL6L296Z+z6LSoJykuc2VsZWN0KChhcnIsIGFycjIsIHQxLCBuYW1lLCBhcnRpc3QpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gYXJyMi5pbmRleE9mKGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPSAtMSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICs9IDQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGFyci5pbmRleE9mKGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gJC5yZXF1aXJlKFxcXCJqaWV4aT9ydWxlPeatjOivjemAgumFjVxcXCIpLkdldE11c2ljVXJsKFxcXCJkb3duXFxcIiwgXFxcInd5XFxcIiwgdDEsIGksIG5hbWUsIGFydGlzdCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVybC5tYXRjaChcXFwidG9hc3Q6Ly9cXFwiKSkgcmV0dXJuIHVybDtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2Rvd25sb2FkOi8vJyArIHVybDtcXG4gICAgICAgICAgICAgICAgICAgIH0sIGFyciwgYXJyMiwgYS5pZCwgbmFtZSwgYXJ0aXN0KTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAvLyDmrYzor41cXG4gICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgIGxyYyA9ICQucmVxdWlyZShcXFwid3k/cnVsZT3mrYzor43pgILphY1cXFwiKS5hamF4MihcXFwiaHR0cHM6Ly9tdXNpYy4xNjMuY29tL3dlYXBpL3NvbmcvbHlyaWNcXFwiLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHQxLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGx2OiAtMSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBrdjogLTEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdHY6IC0xXFxuICAgICAgICAgICAgICAgICAgICB9KS5scmMubHlyaWM7XFxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xcbiAgICAgICAgICAgICAgICAgICAgbHJjID0gXFxcIlxcXCJcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoKGEuZmVlID09IDAgfHwgYS5mZWUgPT0gOCkgJiYgKF8ucHJpdmlsZWdlc1swXS5zdCA+IC0xKSlcXG4gICAgICAgICAgICAgICAgICAgIHVybCA9IGBodHRwOi8vbXVzaWMuMTYzLmNvbS9zb25nL21lZGlhL291dGVyL3VybD9pZD0ke3QxfS5tcDNgO1xcbiAgICAgICAgICAgICAgICBlbHNlXFxuICAgICAgICAgICAgICAgICAgICB1cmwgPSAkLnJlcXVpcmUoXFxcImppZXhpP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuR2V0TXVzaWNVcmwoXFxcIm9wZW5cXFwiLCBcXFwid3lcXFwiLCB0MSwgMCwgbmFtZSwgYXJ0aXN0KTtcXG4gICAgICAgICAgICAgICAgaWYgKHVybC5tYXRjaChcXFwidG9hc3Q6Ly9cXFwiKSkgcmV0dXJuIHVybDtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgIHVybHM6IFt1cmwgKyBcXFwiI2lzTXVzaWM9dHJ1ZSNcXFwiXSxcXG4gICAgICAgICAgICAgICAgICAgIGx5cmljOiBscmNcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIGNhc2UgJzEnOiAvL+mmlumhtVxcbiAgICAgICAgICAgICAgICBpZiAoIXQxLm1hdGNoKC9cXFxcPy8pKSB0MSA9IFxcXCJ0b3AvcGxheWxpc3Q/Y2F0PVxcXCIgKyB0MSArIFxcXCImXFxcIjtcXG4gICAgICAgICAgICAgICAgXyA9ICQucmVxdWlyZSgnd3k/cnVsZT3mrYzor43pgILphY0nKS5hamF4KHQxKTtcXG4gICAgICAgICAgICAgICAgKF8ucmVzdWx0IHx8IF8ucGxheWxpc3RzKS5tYXAoXyA9PiBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXy5uYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgaW1nOiBfLmNvdmVySW1nVXJsIHx8IF8ucGljVXJsLFxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogMixcXG4gICAgICAgICAgICAgICAgICAgIHp5aWQ6IF8uaWRcXG4gICAgICAgICAgICAgICAgfSwgMSkpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgY2FzZSAnMic6IC8vIOWPkeeOsFxcbiAgICAgICAgICAgIGNhc2UgJzMnOiAvLyDmjpLooYxcXG4gICAgICAgICAgICAgICAgaWYgKE1ZX1BBR0UgPT0gMSlcXG4gICAgICAgICAgICAgICAgICAgIF8gPSAkLnJlcXVpcmUoXFxcInd5P3J1bGU95q2M6K+N6YCC6YWNXFxcIikuYWpheChcXFwiaHR0cHM6Ly9tdXNpYy4xNjMuY29tL2FwaS92Ni9wbGF5bGlzdC9kZXRhaWw/bGltaXQ9OTk5OTkmaWQ9XFxcIiArIHQxICsgXFxcIiZuPTk5OTk5XFxcIikucGxheWxpc3QudHJhY2tzO1xcbiAgICAgICAgICAgICAgICBlbHNlXFxuICAgICAgICAgICAgICAgICAgICBfID0gW107XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgfVxcbiAgICAgICAgZCA9IFtdO1xcbiAgICAgICAgXy5tYXAoXyA9PiBFeHRyYSh7XFxuICAgICAgICAgICAgdGl0bGU6IF8ubmFtZSArICcgLSAnICsgXy5hci5tYXAoXyA9PiBfLm5hbWUpLmpvaW4oJyYnKSxcXG4gICAgICAgICAgICBpbWc6IF8uYWwucGljVXJsLFxcbiAgICAgICAgICAgIGNvbnRlbnQ6ICgoXy5mZWUgPT0gMCB8fCBfLmZlZSA9PSA4KSAmJiAoXy5wcml2aWxlZ2UgPyAoXy5wcml2aWxlZ2Uuc3QgPiAtMSkgOiAxKSkgPyAwIDogMSxcXG4gICAgICAgICAgICB6eWlkOiBfLmlkXFxuICAgICAgICB9LCAxKSk7XFxuICAgICAgICBzZXRSZXN1bHQoZCk7XFxuICAgIH0sXFxuICAgIHNlYXJjaDogZnVuY3Rpb24ocGxhdGZvcm0sIGtleXdvcmQsIGlzVSwgcnVuKSB7XFxuICAgICAgICBpZiAoaXNVICE9IFxcXCJ1cmxcXFwiKSB7XFxuICAgICAgICAgICAgX18gPSB7XFxuICAgICAgICAgICAgICAgIGxpYjogKF8pID0+IHRydWUsXFxuICAgICAgICAgICAgICAgIHBhaWQ6IChfKSA9PiAoKF8uZmVlID09IDAgfHwgXy5mZWUgPT0gOCkgJiYgKF8ucHJpdmlsZWdlID8gKF8ucHJpdmlsZWdlLnN0ID4gLTEpIDogMSkpID8gMCA6IDEsXFxuICAgICAgICAgICAgICAgIGZyZWU6IChfKSA9PiAoKF8uZmVlID09IDAgfHwgXy5mZWUgPT0gOCkgJiYgKF8ucHJpdmlsZWdlID8gKF8ucHJpdmlsZWdlLnN0ID4gLTEpIDogMSkpID8gMSA6IDBcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIHN1cmwgPSAoc3R5cGUpID0+ICQucmVxdWlyZShcXFwid3k/cnVsZT3mrYzor43pgILphY1cXFwiKS5hamF4MihcXFwiaHR0cHM6Ly9pbnRlcmZhY2UubXVzaWMuMTYzLmNvbS93ZWFwaS9zZWFyY2gvZ2V0XFxcIiwge1xcbiAgICAgICAgICAgICAgICBzOiBrZXl3b3JkLFxcbiAgICAgICAgICAgICAgICBsaW1pdDogMzAsXFxuICAgICAgICAgICAgICAgIG9mZnNldDogKE1ZX1BBR0UgLSAxKSAqIDMwLFxcbiAgICAgICAgICAgICAgICB0eXBlOiBzdHlwZSxcXG4gICAgICAgICAgICAgICAgc3RyYXRlZ3k6IDUsXFxuICAgICAgICAgICAgICAgIHF1ZXJ5Q29ycmVjdDogdHJ1ZVxcbiAgICAgICAgICAgIH0pLnJlc3VsdDtcXG4gICAgICAgICAgICBzd2l0Y2ggKFN0cmluZyhwbGF0Zm9ybSkpIHtcXG4gICAgICAgICAgICAgICAgY2FzZSAnMCc6IC8vIOaQnOe0ouWNleabslxcbiAgICAgICAgICAgICAgICAgICAgc3VybCgxKS5zb25ncy5tYXAoXyA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9fW2lzVV0oXykpIEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8ubmFtZSArICcgLSAnICsgXy5hci5tYXAoXyA9PiBfLm5hbWUpLmpvaW4oJyYnKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBfLmFsLnBpY1VybCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogKChfLmZlZSA9PSAwIHx8IF8uZmVlID09IDgpICYmIChfLnByaXZpbGVnZSA/IChfLnByaXZpbGVnZS5zdCA+IC0xKSA6IDEpKSA/IDAgOiAxLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiBfLmlkXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICBjYXNlICcxJzogLy8g5pCc57Si5q2M5Y2VXFxuICAgICAgICAgICAgICAgICAgICBsaXN0ID0gc3VybCgxMDAwKS5wbGF5bGlzdHM7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNVID09PSAxKSByZXR1cm4gbGlzdDtcXG4gICAgICAgICAgICAgICAgICAgIGxpc3QubWFwKF8gPT4gRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfLm5hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBfLmNvdmVySW1nVXJsLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IDIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogXy5pZFxcbiAgICAgICAgICAgICAgICAgICAgfSwgMSkpO1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBlbHNlIHsgLy8g5pCc57SiIOWIhuS6q+mTvuaOpVxcbiAgICAgICAgICAgIHN3aXRjaCAoU3RyaW5nKHBsYXRmb3JtKSkge1xcbiAgICAgICAgICAgICAgICBjYXNlICcwJzogLy8g5pCc57Si5Y2V5puyXFxuICAgICAgICAgICAgICAgICAgICBfID0gJC5yZXF1aXJlKFxcXCJ3eT9ydWxlPeatjOivjemAgumFjVxcXCIpLmFqYXgyKFxcXCJodHRwczovL211c2ljLjE2My5jb20vd2VhcGkvdjMvc29uZy9kZXRhaWxcXFwiLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYzogYFt7XFxcImlkXFxcIjoke2tleXdvcmR9fV1gXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIGEgPSBfLnNvbmdzWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBhLm5hbWUgKyAnIC0gJyArIGEuYXIubWFwKF8gPT4gXy5uYW1lKS5qb2luKCcmJyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBhLmFsLnBpY1VybCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAoKGEuZmVlID09IDAgfHwgYS5mZWUgPT0gOCkgJiYgKF8ucHJpdmlsZWdlc1swXS5zdCA+IC0xKSkgPyAwIDogMSxcXG4gICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiBhLmlkXFxuICAgICAgICAgICAgICAgICAgICB9LCAxKTtcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICBjYXNlICcxJzogLy8g5pCc57Si5q2M5Y2VXFxuICAgICAgICAgICAgICAgICAgICBfID0gJC5yZXF1aXJlKFxcXCJ3eT9ydWxlPeatjOivjemAgumFjVxcXCIpLmFqYXgoXFxcImh0dHBzOi8vbXVzaWMuMTYzLmNvbS9hcGkvdjYvcGxheWxpc3QvZGV0YWlsP2lkPVxcXCIgKyBrZXl3b3JkKS5wbGF5bGlzdDtcXG4gICAgICAgICAgICAgICAgICAgIEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXy5uYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogXy5jb3ZlckltZ1VybCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAyLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IF8uaWRcXG4gICAgICAgICAgICAgICAgICAgIH0sIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfLm5hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBfLmNvdmVySW1nVXJsLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IDIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogXy5pZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiAnbXknXFxuICAgICAgICAgICAgICAgICAgICB9LCAxKTtcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgYWpheDogZnVuY3Rpb24odXJpKSB7XFxuICAgICAgICBpZiAoIXVyaS5tYXRjaCgvaHR0cHM/OlxcXFwvXFxcXC8vKSkge1xcbiAgICAgICAgICAgIGlmICh1cmkubWF0Y2goL1xcXFw/LykpIHVyaSArPSBcXFwibGltaXQ9MzAmb2Zmc2V0PVxcXCIgKyAoKE1ZX1BBR0UgLSAxKSAqIDMwKTtcXG4gICAgICAgICAgICB1cmwgPSBcXFwiaHR0cHM6Ly9wbC1mZS5jbi9jbG91ZC1tdXNpYy1hcGkvXFxcIiArIHVyaTtcXG4gICAgICAgIH0gZWxzZSB1cmwgPSB1cmk7XFxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShmZXRjaCh1cmwsIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogXFxcIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdPVzY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTAyLjAuMC4wIFNhZmFyaS81MzcuMzZcXFwiLFxcbiAgICAgICAgICAgICAgICBcXFwiQ29va2llXFxcIjogXFxcIm9zPXBjOyBNVVNJQ19VPTAwQjRDMUUzRkQ3NzQxMDc4MEVGMUMwODQwRDA4RjNGNUU3MDMwRTJEMDUyQ0E4RUM5OEE3MzY4RjdBN0Y2NjQ5QjIxNkU5NTMzQTFBMTc0RDcyQ0NBREY5OTU1NDIyOEU4NTJERTQ2QkJEMkVBMkE2QjJBMTQzM0EzREY0OEI2MkVBQTc2RkMxOENENTkyNTZGRUY2RTc2RDM5RkI0MkRGNzZDRTUwNjhDNjlFMzk0NEUzQTZFOEUzQzI2MTM1REJFMEQ5NzkxRkNFMEJENTI0QkQyN0Y2MjI2RkQ2NDYwQjA1NjQ2QTU0OUE1QzQyOUY1RTAxRUJBNEUyRDhENjE1QkQ3MTVBN0QyNDVCMTNEOUU1NzBFODdEMEFEQTYwOEE2MDdGMkZBRUYyMkFGOEVFOTRGODI3QUYxNTBFOUUxQzUxN0NCMEYxNTg4RUY4RjFENjE5NDdDNDM3ODQ5ODVDRjc0RjY5NDU4NzQ4OTYwQ0U5MjA1M0NBNzJCNUZFRjkyQzkzRjEyRjM2NzE0RjBCMzQ2QzJFQUY4OUZBQTUxNkE4OTc0RThDRjUzRDU0OTJERTk1RUQ4NTkxQ0NDRjQ1QUVCNjI3QzkzQjBDRDM3MEFFRkI2NTZFQURBRDAzMUY2ODhBNkJCMkNFM0M5RkEzMUJENjE2NkExNkFCRUJFREFERkNGRUZCRENFRDVENEUxMkZGRjE0MDNDNEYyQjVBM0YyNDIyRUY5RDA4NzhDMEI1MkQwODk2N0Q1OEUyRTlEQUNFNzU0NDA0RTJENkUxRjgxRjUyQTFGMTczNUNBOUZCQjg1RDc1OEY4MUUwQTdDQkE0MUM1NzM5RDI5RTI4NEY2ODQzMEVCMTNFNEY0OTM4OTA4NDAwMzFEM0JEMjdFXFxcIlxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pKTtcXG4gICAgfSxcXG4gICAgYWpheDI6IGZ1bmN0aW9uKHVybCwganNvbikge1xcbiAgICAgICAgZXZhbChnZXRDcnlwdG9KUygpKTtcXG4gICAgICAgIHN0cl9rZXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShcXFwiMENvSlVtNlF5dzhXOGp1ZFxcXCIpO1xcbiAgICAgICAgc3RyX2l2ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoXFxcIjAxMDIwMzA0MDUwNjA3MDhcXFwiKTtcXG4gICAgICAgIGFlcyA9IHdvcmQgPT4gQ3J5cHRvSlMuQUVTLmVuY3J5cHQod29yZCwgc3RyX2tleSwge1xcbiAgICAgICAgICAgIGl2OiBzdHJfaXYsXFxuICAgICAgICAgICAgbW9kZTogQ3J5cHRvSlMubW9kZS5DQkMsXFxuICAgICAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3XFxuICAgICAgICB9KS50b1N0cmluZygpO1xcbiAgICAgICAgcGFyYW1zID0gYWVzKGFlcyhKU09OLnN0cmluZ2lmeShqc29uKSkpO1xcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZmV0Y2hQQyh1cmwsIHtcXG4gICAgICAgICAgICBib2R5OiBgcGFyYW1zPSR7cGFyYW1zfSZlbmNTZWNLZXk9YmY1MGQwYmNmNTY4MzNiMDZkOGQxMjE5NDk2YTQ1MmExZDg2MGZkNThhMTRjMGFhZmJhM2U3NzAxMDRjYTc3ZGM2ODU2Y2IzMTBlZDMzMDkwMzllNjg2NTA4MWJlNGRkYzJkZjUyNjYzMzczYjIwYjcwYWMyNWI0ZDBjNmNhNDY2ZGFlZjZiNTAxNzRlOTM1MzZlMmQ1ODBjNDllNzA2NDlhZDE5MzY1ODQ4OTllODU3MjJlYjgzY2VkZGZiNGY1NmMxMTcyZmNhNWU2MDU5MmQwZTZlZTNlOGUwMmJlMWZlNmU1M2YyODViMDM4OTE2MmQ4ZTZkZGM1NTM4NTdjZGAsXFxuICAgICAgICAgICAgXFxcIm1ldGhvZFxcXCI6IFxcXCJQT1NUXFxcIlxcbiAgICAgICAgfSkpO1xcbiAgICB9XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi4p24a2dcIixcInBhdGhcIjpcImtnXCIsXCJydWxlXCI6XCJldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9saWI/cnVsZT3mrYzor43pgILphY0nKSkucnVsZSk7XFxuY29uc3QgdGhpc19wbGF0Zm9ybSA9IFxcXCJrZ1xcXCI7XFxuJC5leHBvcnRzID0ge1xcblxcblxcbiAgICBpVGFnOiBmdW5jdGlvbigpIHtcXG4gICAgICAgIF8gPSBKU09OLnBhcnNlKGZldGNoKFxcXCJodHRwOi8vd3d3Mi5rdWdvdS5rdWdvdS5jb20veXVla3Uvdjkvc3BlY2lhbC9nZXRTcGVjaWFsP2lzX3NtYXJ0eT0xXFxcIikpLmRhdGE7XFxuICAgICAgICBpVGFnW1xcXCLmjqjojZBcXFwiXSA9IHtcXG4gICAgICAgICAgICDmnIDmlrA6IFxcXCJcXFwiXFxuICAgICAgICB9O1xcbiAgICAgICAgaXRzID0gXy5ob3RUYWcuZGF0YTtcXG4gICAgICAgIGZvciAoaSBpbiBpdHMpIHtcXG4gICAgICAgICAgICBpdCA9IGl0c1tpXTtcXG4gICAgICAgICAgICBpVGFnW1xcXCLmjqjojZBcXFwiXVtpdC5zcGVjaWFsX25hbWVdID0gaXQuc3BlY2lhbF9pZDtcXG4gICAgICAgIH1cXG4gICAgICAgIF8gPSBfLnRhZ2lkcztcXG4gICAgICAgIGZvciAobmFtZSBpbiBfKSB7XFxuICAgICAgICAgICAgaVRhZ1tuYW1lXSA9IHt9O1xcbiAgICAgICAgICAgIF9bbmFtZV0uZGF0YS5tYXAoXFxuICAgICAgICAgICAgICAgIF8gPT4gaVRhZ1tuYW1lXVtfLm5hbWVdID0gXy5pZFxcbiAgICAgICAgICAgICk7XFxuICAgICAgICB9XFxuICAgICAgICBpVGFnW1xcXCLmjpLooYxcXFwiXSA9IHt9O1xcbiAgICAgICAgSlNPTi5wYXJzZShmZXRjaCgnaHR0cDovL21vYmlsZWNkbmJqLmt1Z291LmNvbS9hcGkvdjMvcmFuay9saXN0JykpLmRhdGEuaW5mby5tYXAoXyA9PiB7XFxuICAgICAgICAgICAgbmFtZSA9IFtudWxsLCBcXFwi5o6o6I2Q5qacXFxcIiwgXFxcIuaWsOatjOamnFxcXCIsIFxcXCLnibnoibLmppxcXFwiLCBcXFwi5YWo55CD5qacXFxcIiwgXFxcIuabsumjjuamnFxcXCJdW18uY2xhc3NpZnldO1xcbiAgICAgICAgICAgIGlmICghaVRhZ1tcXFwi5o6S6KGMXFxcIl1bbmFtZV0pIGlUYWdbXFxcIuaOkuihjFxcXCJdW25hbWVdID0gW107XFxuICAgICAgICAgICAgaVRhZ1tcXFwi5o6S6KGMXFxcIl1bbmFtZV0ucHVzaChFeHRyYSh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBfLnJhbmtuYW1lLFxcbiAgICAgICAgICAgICAgICBpbWc6IF8uaW1ndXJsLFxcbiAgICAgICAgICAgICAgICBjb250ZW50OiAzLFxcbiAgICAgICAgICAgICAgICB6eWlkOiBfLnJhbmtpZCxcXG4gICAgICAgICAgICB9LCAxLCAxKSk7XFxuICAgICAgICB9KTtcXG4gICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKFxcXCJrZ19pVGFnXFxcIiwgaVRhZyk7XFxuICAgIH0sXFxuXFxuXFxuXFxuICAgIGxhenk6IGZ1bmN0aW9uKHBsYXRmb3JtLCB0MSwgdDIpIHtcXG4gICAgICAgIHN3aXRjaCAoU3RyaW5nKHBsYXRmb3JtKSkge1xcbiAgICAgICAgICAgIGNhc2UgJzAnOiAvLyDor6bmg4VcXG4gICAgICAgICAgICAgICAgXyA9ICQucmVxdWlyZShcXFwia2c/cnVsZT3mrYzor43pgILphY1cXFwiKS5hamF4KFt7XFxuICAgICAgICAgICAgICAgICAgICBoYXNoOiB0MVxcbiAgICAgICAgICAgICAgICB9XSlbMF07XFxuICAgICAgICAgICAgICAgIFthcnRpc3QsIG5hbWVdID0gXy5uYW1lLnNwbGl0KCcgLSAnKTtcXG4gICAgICAgICAgICAgICAgaWYgKHQyKSB7XFxuICAgICAgICAgICAgICAgICAgICBhcnIgPSBfLnJlbGF0ZV9nb29kcy5tYXAoKF8sIGkpID0+IHRzW2kgKyAxXSArIFNpemUoXy5pbmZvLmZpbGVzaXplKSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChhcnIsIDEsICfpgInmi6nkuIvovb3pn7PotKgnKS5zZWxlY3QoKGFyciwgdDEsIG5hbWUsIGFydGlzdCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBhcnIuaW5kZXhPZihpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gJC5yZXF1aXJlKFxcXCJqaWV4aT9ydWxlPeatjOivjemAgumFjVxcXCIpLkdldE11c2ljVXJsKFxcXCJkb3duXFxcIiwgXFxcImtnXFxcIiwgdDEsIGksIG5hbWUsIGFydGlzdCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVybC5tYXRjaChcXFwidG9hc3Q6Ly9cXFwiKSkgcmV0dXJuIHVybDtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2Rvd25sb2FkOi8vJyArIHVybDtcXG4gICAgICAgICAgICAgICAgICAgIH0sIGFyciwgdDEsIG5hbWUsIGFydGlzdCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdXJsID0gYGh0dHBzOi8vd3d3YXBpLmt1Z291LmNvbS95eS9pbmRleC5waHA/cj1wbGF5JTJGZ2V0ZGF0YSZoYXNoPSR7dDF9JmFsYnVtX2lkPSR7Xy5yZWNvbW1lbmRfYWxidW1faWR9Jm1pZD0ke1IoMzIpfSZwbGF0aWQ9NGA7XFxuICAgICAgICAgICAgICAgIF8gPSBKU09OLnBhcnNlKGZldGNoKHVybCkpLmRhdGE7XFxuICAgICAgICAgICAgICAgIGxyYyA9IF8ubHlyaWNzO1xcbiAgICAgICAgICAgICAgICBpZiAoXy5wcml2aWxlZ2UgPT0gMCB8fCBfLnByaXZpbGVnZSA9PSA4KVxcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gXy5wbGF5X3VybCB8fCBfLnBsYXlfYmFja3VwX3VybDtcXG4gICAgICAgICAgICAgICAgZWxzZVxcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gJC5yZXF1aXJlKFxcXCJqaWV4aT9ydWxlPeatjOivjemAgumFjVxcXCIpLkdldE11c2ljVXJsKFxcXCJvcGVuXFxcIiwgXFxcImtnXFxcIiwgdDEsIDAsIG5hbWUsIGFydGlzdCk7XFxuICAgICAgICAgICAgICAgIGlmICh1cmwubWF0Y2goXFxcInRvYXN0Oi8vXFxcIikpIHJldHVybiB1cmw7XFxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgICAgICB1cmxzOiBbdXJsICsgJyNpc011c2ljPXRydWUjJ10sXFxuICAgICAgICAgICAgICAgICAgICBseXJpYzogbHJjXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBjYXNlICcxJzogLy8g6aaW6aG1XFxuICAgICAgICAgICAgICAgIHVybCA9IFxcXCJodHRwOi8vd3d3Mi5rdWdvdS5rdWdvdS5jb20veXVla3Uvdjkvc3BlY2lhbC9nZXRTcGVjaWFsP2lzX2FqYXg9MSZjZG49Y2RuJnQ9NSZwYWdlc2l6ZT0zMCZjPVxcXCIgKyB0MSArIFxcXCImcD1cXFwiICsgTVlfUEFHRTtcXG4gICAgICAgICAgICAgICAgSlNPTi5wYXJzZShmZXRjaCh1cmwpKS5zcGVjaWFsX2RiLm1hcChfID0+IEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfLnNwZWNpYWxuYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgaW1nOiBfLmltZyxcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IDIsXFxuICAgICAgICAgICAgICAgICAgICB6eWlkOiBfLnNwZWNpYWxpZFxcbiAgICAgICAgICAgICAgICB9LCAxKSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBjYXNlICcyJzogLy8g5Y+R546wXFxuICAgICAgICAgICAgICAgIGlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgIF8gPSBleGVjdXRlV2ViUnVsZShgaHR0cDovL3d3dzIua3Vnb3Uua3Vnb3UuY29tL3l1ZWt1L3Y5L3NwZWNpYWwvc2luZ2xlLyR7dDF9LTUtOTk5OTkuaHRtbD9qc29uPXRydWVgLCAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZ2xvYmFsLmRhdGEpO1xcbiAgICAgICAgICAgICAgICAgICAgfSksIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBibG9ja1J1bGVzOiBbJy5qcycsICcuY3NzJywgJy5qcGcnLCAnLnBuZycsICcuZ2lmJywgJy5zdmcnLCAnLmljbyddXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIF8gPSAkLnJlcXVpcmUoXFxcImtnP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuYWpheChKU09OLnBhcnNlKF8pKTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIF8gPSBbXTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgY2FzZSAnMyc6IC8vIOaOkuihjFxcbiAgICAgICAgICAgICAgICBfID0gSlNPTi5wYXJzZShmZXRjaChgaHR0cDovL21vYmlsZWNkbmJqLmt1Z291LmNvbS9hcGkvdjMvcmFuay9zb25nP3BhZ2VzaXplPTMwJnBhZ2U9JHtNWV9QQUdFfSZyYW5raWQ9JHt0MX1gKSkuZGF0YS5pbmZvO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgIH1cXG4gICAgICAgIGQgPSBbXTtcXG4gICAgICAgIF8ubWFwKF8gPT4gRXh0cmEoe1xcbiAgICAgICAgICAgIHRpdGxlOiAoXy5maWxlbmFtZSB8fCBfLm5hbWUpLnNwbGl0KCcgLSAnKS5yZXZlcnNlKCkuam9pbignIC0gJyksXFxuICAgICAgICAgICAgaW1nOiBfLmFsYnVtX3NpemFibGVfY292ZXIgfHwgXy5pbmZvLmltYWdlLFxcbiAgICAgICAgICAgIGNvbnRlbnQ6IChfLnByaXZpbGVnZSA9PSAwIHx8IF8ucHJpdmlsZWdlID09IDgpID8gMCA6IDEsXFxuICAgICAgICAgICAgenlpZDogXy5oYXNoXFxuICAgICAgICB9LCAxKSk7XFxuICAgICAgICBzZXRSZXN1bHQoZCk7XFxuICAgIH0sXFxuXFxuXFxuXFxuICAgIHNlYXJjaDogZnVuY3Rpb24ocGxhdGZvcm0sIGtleXdvcmQsIGlzVSkge1xcbiAgICAgICAgX18gPSB7XFxuICAgICAgICAgICAgbGliOiAoXykgPT4gdHJ1ZSxcXG4gICAgICAgICAgICBwYWlkOiAoXykgPT4gKF8ucHJpdmlsZWdlICE9IDAgJiYgXy5wcml2aWxlZ2UgIT0gOCksXFxuICAgICAgICAgICAgZnJlZTogKF8pID0+IChfLnByaXZpbGVnZSA9PSAwIHx8IF8ucHJpdmlsZWdlID09IDgpXFxuICAgICAgICB9O1xcbiAgICAgICAgc3VybCA9IChzdHlwZSkgPT4gSlNPTi5wYXJzZShmZXRjaChgaHR0cDovL21vYmlsZWNkbi5rdWdvdS5jb20vYXBpL3YzL3NlYXJjaC8ke3N0eXBlfT9mb3JtYXQ9anNvbiZrZXl3b3JkPSR7a2V5d29yZH0mcGFnZT0ke01ZX1BBR0V9JnBhZ2VzaXplPTMwYCkpLmRhdGEuaW5mbztcXG4gICAgICAgIHN3aXRjaCAoU3RyaW5nKHBsYXRmb3JtKSkge1xcbiAgICAgICAgICAgIGNhc2UgJzAnOiAvLyDmkJzntKLljZXmm7JcXG4gICAgICAgICAgICAgICAgaWYgKGlzVSA9PSAnZnJlZScpIHtcXG4gICAgICAgICAgICAgICAgICAgIG1pZCA9IFIoMzIpO1xcbiAgICAgICAgICAgICAgICAgICAgYXJyID0gW1xcXCJzcmNhcHBpZD0yOTE5XFxcIiwgXFxcImNsaWVudHZlcj0xMDAwXFxcIiwgXFxcImNsaWVudHRpbWU9XFxcIiArIG5ldyBEYXRlKCkuZ2V0VGltZSgpLCBcXFwibWlkPVxcXCIgKyBtaWQsIFxcXCJ1dWlkPVxcXCIgKyBtaWQsIFxcXCJkZmlkPS1cXFwiLCBcXFwiYXBwaWQ9MTA1OFxcXCIsIFxcXCJ0b2tlbj1cXFwiLCBcXFwidXNlcmlkPTBcXFwiLCBcXFwia2V5d29yZD1cXFwiICsga2V5d29yZCwgXFxcInBhZ2U9XFxcIiArIE1ZX1BBR0UsIFxcXCJwYWdlc2l6ZT0zMFxcXCJdLnNvcnQoKTtcXG4gICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSA9IFxcXCJOVlBoNW9vNzE1ejVESVdBZVFsaE1Ec1dYWFFWNGh3dFxcXCI7XFxuICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUgPSBtZDUoc2lnbmF0dXJlICsgYXJyLmpvaW4oXFxcIlxcXCIpICsgc2lnbmF0dXJlKTtcXG4gICAgICAgICAgICAgICAgICAgIHVybCA9IFxcXCJodHRwczovL2dhdGV3YXkua3Vnb3UuY29tL2NvbXBsZXhzZWFyY2gvdjMvc2VhcmNoL3Nvbmc/XFxcIiArIGFyci5qb2luKFxcXCImXFxcIikgKyBcXFwiJnNpZ25hdHVyZT1cXFwiICsgc2lnbmF0dXJlO1xcbiAgICAgICAgICAgICAgICAgICAgbGlzdCA9IEpTT04ucGFyc2UoZmV0Y2godXJsKSkuZGF0YS5saXN0cztcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGxpc3QgPSBzdXJsKCdzb25nJyk7XFxuICAgICAgICAgICAgICAgICQucmVxdWlyZShcXFwia2c/cnVsZT3mrYzor43pgILphY1cXFwiKS5hamF4KGxpc3QpLm1hcChfID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChfX1tpc1VdKF8pKSBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IChfLmZpbGVuYW1lIHx8IF8ubmFtZSkuc3BsaXQoJyAtICcpLnJldmVyc2UoKS5qb2luKCcgLSAnKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IF8uYWxidW1fc2l6YWJsZV9jb3ZlciB8fCBfLmluZm8uaW1hZ2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogKF8ucHJpdmlsZWdlID09IDAgfHwgXy5wcml2aWxlZ2UgPT0gOCkgPyAwIDogMSxcXG4gICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiBfLmhhc2hcXG4gICAgICAgICAgICAgICAgICAgIH0sIDEpO1xcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgY2FzZSAnMSc6IC8vIOaQnOe0ouatjOWNlVxcbiAgICAgICAgICAgICAgICBzdXJsKCdzcGVjaWFsJykubWFwKF8gPT4gRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8uc3BlY2lhbG5hbWUsXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IF8uaW1ndXJsLFxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogMixcXG4gICAgICAgICAgICAgICAgICAgIHp5aWQ6IF8uc3BlY2lhbGlkXFxuICAgICAgICAgICAgICAgIH0sIDEpKTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICB9XFxuICAgIH0sXFxuXFxuXFxuICAgIGFqYXg6IGZ1bmN0aW9uKHJlc291cmNlKSB7XFxuICAgICAgICByZXNvdXJjZSA9IEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICBcXFwicmVsYXRlXFxcIjogMSxcXG4gICAgICAgICAgICBcXFwidXNlcmlkXFxcIjogXFxcIjI2MjY0MzE1MzZcXFwiLFxcbiAgICAgICAgICAgIFxcXCJ2aXBcXFwiOiAxLFxcbiAgICAgICAgICAgIFxcXCJ0b2tlblxcXCI6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIFxcXCJhcHBpZFxcXCI6IDEwMDEsXFxuICAgICAgICAgICAgXFxcImJlaGF2aW9yXFxcIjogXFxcInBsYXlcXFwiLFxcbiAgICAgICAgICAgIFxcXCJhcmVhX2NvZGVcXFwiOiBcXFwiMVxcXCIsXFxuICAgICAgICAgICAgXFxcImNsaWVudHZlclxcXCI6IFxcXCI4OTkwXFxcIixcXG4gICAgICAgICAgICBcXFwibmVlZF9oYXNoX29mZnNldFxcXCI6IDEsXFxuICAgICAgICAgICAgXFxcInJlc291cmNlXFxcIjogcmVzb3VyY2UubWFwKF8gPT4gKHtcXG4gICAgICAgICAgICAgICAgXFxcImlkXFxcIjogMCxcXG4gICAgICAgICAgICAgICAgXFxcInR5cGVcXFwiOiBcXFwiYXVkaW9cXFwiLFxcbiAgICAgICAgICAgICAgICBcXFwiaGFzaFxcXCI6IF8uaGFzaCB8fCBfLkZpbGVIYXNoXFxuICAgICAgICAgICAgfSkpXFxuICAgICAgICB9KTtcXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGZldGNoKFxcXCJodHRwOi8vbWVkaWEuc3RvcmUua3Vnb3UuY29tL3YxL2dldF9yZXNfcHJpdmlsZWdlXFxcIiwge1xcbiAgICAgICAgICAgIGJvZHk6IHJlc291cmNlLFxcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgICAgICB9KSkuZGF0YTtcXG4gICAgfSxcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLinblrd1wiLFwicGF0aFwiOlwia3dcIixcInJ1bGVcIjpcImV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL2xpYj9ydWxlPeatjOivjemAgumFjScpKS5ydWxlKTtcXG5jb25zdCB0aGlzX3BsYXRmb3JtID0gXFxcImt3XFxcIjtcXG5jb25zdCBwY2FwaSA9IFxcXCJodHRwczovL3d3dy5rdXdvLmNuL2FwaS93d3cvXFxcIjtcXG5cXG5cXG4kLmV4cG9ydHMgPSB7XFxuICAgIGlUYWc6IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgaVRhZ1tcXFwi5o6o6I2QXFxcIl0gPSB7fTtcXG4gICAgICAgIGlUYWdbXFxcIuaOqOiNkFxcXCJdW1xcXCLmr4/ml6XmjqjojZBcXFwiXSA9IFxcXCJyY20vaW5kZXgvcGxheWxpc3Q/aWQ9cmNtXFxcIjtcXG4gICAgICAgIGlUYWdbXFxcIuaOqOiNkFxcXCJdW1xcXCLmnIDmlrDnsr7pgIlcXFwiXSA9IFxcXCJjbGFzc2lmeS9wbGF5bGlzdC9nZXRSY21QbGF5TGlzdD9vcmRlcj1uZXdcXFwiO1xcbiAgICAgICAgaVRhZ1tcXFwi5o6o6I2QXFxcIl1bXFxcIueDremXqOeyvumAiVxcXCJdID0gXFxcImNsYXNzaWZ5L3BsYXlsaXN0L2dldFJjbVBsYXlMaXN0P29yZGVyPWhvdFxcXCI7XFxuICAgICAgICAkLnJlcXVpcmUoXFxcImt3P3J1bGU95q2M6K+N6YCC6YWNXFxcIikuYWpheChwY2FwaSArIFxcXCJwbGF5bGlzdC9nZXRUYWdMaXN0P1xcXCIpLm1hcChfID0+IHtcXG4gICAgICAgICAgICBpZiAoXy5kYXRhLmxlbmd0aCkge1xcbiAgICAgICAgICAgICAgICBfLm5hbWUgPSBfLm5hbWUucmVwbGFjZSgn5rWB5rS+JywgJycpO1xcbiAgICAgICAgICAgICAgICBpVGFnW18ubmFtZV0gPSB7fTtcXG4gICAgICAgICAgICAgICAgXy5kYXRhLm1hcChfXyA9PlxcbiAgICAgICAgICAgICAgICAgICAgaVRhZ1tfLm5hbWVdW19fLm5hbWVdID0gXFxcImNsYXNzaWZ5L3BsYXlsaXN0L2dldFRhZ1BsYXlMaXN0P2lkPVxcXCIgKyBfXy5pZFxcbiAgICAgICAgICAgICAgICApO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICAgICAgaVRhZ1tcXFwi5o6S6KGMXFxcIl0gPSB7fTtcXG4gICAgICAgICQucmVxdWlyZShcXFwia3c/cnVsZT3mrYzor43pgILphY1cXFwiKS5hamF4KHBjYXBpICsgXFxcImJhbmcvYmFuZy9iYW5nTWVudT9cXFwiKS5tYXAoXyA9PiB7XFxuICAgICAgICAgICAgaVRhZ1tcXFwi5o6S6KGMXFxcIl1bXy5uYW1lXSA9IF8ubGlzdC5tYXAoXyA9PiBFeHRyYSh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBfLm5hbWUsXFxuICAgICAgICAgICAgICAgIGltZzogXy5waWMsXFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IDMsXFxuICAgICAgICAgICAgICAgIHp5aWQ6IF8uc291cmNlaWRcXG4gICAgICAgICAgICB9LCAxLCAxKSk7XFxuICAgICAgICB9KTtcXG4gICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKFxcXCJrd19pVGFnXFxcIiwgaVRhZyk7XFxuICAgIH0sXFxuXFxuXFxuXFxuICAgIGxhenk6IGZ1bmN0aW9uKHBsYXRmb3JtLCB0MSwgdDIpIHtcXG4gICAgICAgIHN3aXRjaCAoU3RyaW5nKHBsYXRmb3JtKSkge1xcbiAgICAgICAgICAgIGNhc2UgJzAnOiAvLyDmrYzmm7Lor6bmg4VcXG4gICAgICAgICAgICAgICAgaWYgKHQyKSB7XFxuICAgICAgICAgICAgICAgICAgICBhcnIgPSBbXTtcXG4gICAgICAgICAgICAgICAgICAgIGkgPSAxO1xcbiAgICAgICAgICAgICAgICAgICAgXyA9IEpTT04ucGFyc2UoZmV0Y2goXFxcImh0dHA6Ly9kYXRhY2VudGVyLmt1d28uY24vZC5jP2Nta2V5PXBsaXN0X3BsMjAxMiZmdD1tdXNpYyZyZXNlbmM9dXRmOCZpZHM9XFxcIiArIHQxKSlbMF07XFxuICAgICAgICAgICAgICAgICAgICBuID0gXy5OX01JTkZPO1xcbiAgICAgICAgICAgICAgICAgICAgZm9yIChrIG9mIFsxMjgsIDMyMCwgMjAwMCwgNDAwMF0pIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWcgPSBuZXcgUmVnRXhwKCdiaXRyYXRlOicgKyBrICsgJyxmb3JtYXQ6W14sXSssc2l6ZTooW147XSspJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZyA9IG4ubWF0Y2gocmVnKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaCh0c1tpXSArIHJlZ1sxXS5yZXBsYWNlKC9cXFxccyptYi9pLCBcXFwiIE1CXFxcIikpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoYXJyLCAxLCAn6YCJ5oup5LiL6L296Z+z6LSoJykuc2VsZWN0KChhcnIsIHQxLCBuYW1lLCBhcnRpc3QpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gYXJyLmluZGV4T2YoaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9ICQucmVxdWlyZShcXFwiamlleGk/cnVsZT3mrYzor43pgILphY1cXFwiKS5HZXRNdXNpY1VybChcXFwiZG93blxcXCIsIFxcXCJrd1xcXCIsIHQxLCBpLCBuYW1lLCBhcnRpc3QpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1cmwubWF0Y2goXFxcInRvYXN0Oi8vXFxcIikpIHJldHVybiB1cmw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdkb3dubG9hZDovLycgKyB1cmw7XFxuICAgICAgICAgICAgICAgICAgICB9LCBhcnIsIHQxLCBfLm5hbWUsIF8uYXJ0aXN0KTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAvLyDmrYzor41cXG4gICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgICQucmVxdWlyZShcXFwia3c/cnVsZT3mrYzor43pgILphY1cXFwiKS5hamF4KFxcXCJodHRwOi8vbS5rdXdvLmNuL25ld2g1L3NpbmdsZXMvc29uZ2luZm9hbmRscmM/bXVzaWNJZD1cXFwiICsgdDEgKyBcXFwiJlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgbHJjID0gXy5scmNsaXN0Lm1hcChfID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBtID0gTWF0aC5mbG9vcihfLnRpbWUgLyA2MCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcyA9IChfLnRpbWUgJSA2MCkudG9GaXhlZCgzKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFske20udG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfToke3MucGFkU3RhcnQoNiwgJzAnKX1dYCArIF8ubGluZUx5cmljXFxuICAgICAgICAgICAgICAgICAgICB9KS5qb2luKCdcXFxcbicpO1xcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcXG4gICAgICAgICAgICAgICAgICAgIGxyYyA9IFxcXCJcXFwiXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgX18gPSBfLnNvbmdpbmZvO1xcbiAgICAgICAgICAgICAgICAvLyDpk77mjqVcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgIHVybCA9ICQucmVxdWlyZShcXFwia3c/cnVsZT3mrYzor43pgILphY1cXFwiKS5hamF4KHBjYXBpLnJlcGxhY2UoLyhhcGlcXFxcLykvLCAnJDF2MS8nKSArIFxcXCJtdXNpYy9wbGF5VXJsP21pZD1cXFwiICsgdDEgKyBcXFwiJnR5cGU9bXVzaWMmXFxcIikudXJsO1xcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChpc192aXBNdXNpYykge1xcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gJC5yZXF1aXJlKFxcXCJqaWV4aT9ydWxlPeatjOivjemAgumFjVxcXCIpLkdldE11c2ljVXJsKFxcXCJvcGVuXFxcIiwgXFxcImt3XFxcIiwgdDEsIDAsIF9fLnNvbmdOYW1lLCBfXy5hcnRpc3QpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmICh1cmwubWF0Y2goXFxcInRvYXN0Oi8vXFxcIikpIHJldHVybiB1cmw7XFxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgICAgICB1cmxzOiBbdXJsICsgJyNpc011c2ljPXRydWUjJ10sXFxuICAgICAgICAgICAgICAgICAgICBseXJpYzogbHJjXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBjYXNlICcxJzogLy8g6aaW6aG1XFxuICAgICAgICAgICAgICAgIGlmICghdDEubWF0Y2goJ2lkPXJjbScpIHx8IE1ZX1BBR0UgPT09IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgIF8gPSAkLnJlcXVpcmUoXFxcImt3P3J1bGU95q2M6K+N6YCC6YWNXFxcIikuYWpheChwY2FwaSArIHQxICsgXFxcIiZwbj1cXFwiICsgTVlfUEFHRSArIFxcXCImcm49MzAmXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAoXy5kYXRhIHx8IF8ubGlzdCkubWFwKF8gPT4gRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfLm5hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBfLmltZyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAyLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IF8uaWRcXG4gICAgICAgICAgICAgICAgICAgIH0sIDEpKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgY2FzZSAnMic6IC8vIOWPkeeOsFxcbiAgICAgICAgICAgICAgICBfID0gJC5yZXF1aXJlKFxcXCJrdz9ydWxlPeatjOivjemAgumFjVxcXCIpLmFqYXgocGNhcGkgKyBcXFwicGxheWxpc3QvcGxheUxpc3RJbmZvP3BpZD1cXFwiICsgdDEgKyBcXFwiJnBuPVxcXCIgKyBNWV9QQUdFICsgXFxcIiZybj0zMCZcXFwiKTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgY2FzZSAnMyc6IC8vIOaOkuihjFxcbiAgICAgICAgICAgICAgICBfID0gJC5yZXF1aXJlKFxcXCJrdz9ydWxlPeatjOivjemAgumFjVxcXCIpLmFqYXgocGNhcGkgKyBcXFwiYmFuZy9iYW5nL211c2ljTGlzdD9iYW5nSWQ9XFxcIiArIHQxICsgXFxcIiZwbj1cXFwiICsgTVlfUEFHRSArIFxcXCImcm49MzAmXFxcIik7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgfVxcbiAgICAgICAgZCA9IFtdO1xcbiAgICAgICAgXy5tdXNpY0xpc3QubWFwKF8gPT4gRXh0cmEoe1xcbiAgICAgICAgICAgIHRpdGxlOiAoXy5zb25nTmFtZSB8fCBfLm5hbWUpICsgJyAtICcgKyBfLmFydGlzdCxcXG4gICAgICAgICAgICBpbWc6IF8ucGljIHx8IF8uaW1nIHx8IGZldGNoKCdodHRwOi8vYXJ0aXN0cGljc2VydmVyLmt1d28uY24vcGljLndlYj90eXBlPXJpZF9waWMmcGljdHlwZT11cmwmc2l6ZT01MDAmcmlkPScgKyBfLmlkKSxcXG4gICAgICAgICAgICBjb250ZW50OiBfLmlzTGlzdGVuRmVlID09IHRydWUgPyAxIDogMCxcXG4gICAgICAgICAgICB6eWlkOiBfLmlkIHx8IF8ucmlkXFxuICAgICAgICB9LCAxKSk7XFxuICAgICAgICBzZXRSZXN1bHQoZCk7XFxuICAgIH0sXFxuXFxuXFxuXFxuICAgIHNlYXJjaDogZnVuY3Rpb24ocGxhdGZvcm0sIGtleXdvcmQsIGlzVSkge1xcbiAgICAgICAgaWYgKGlzVSAhPSBcXFwidXJsXFxcIikge1xcbiAgICAgICAgICAgIF9fID0ge1xcbiAgICAgICAgICAgICAgICBsaWI6IChfKSA9PiB0cnVlLFxcbiAgICAgICAgICAgICAgICBwYWlkOiAoXykgPT4gXy50cGF5ID09ICcxJyxcXG4gICAgICAgICAgICAgICAgZnJlZTogKF8pID0+IF8udHBheSA9PSAnMCdcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIHN1cmwgPSAoc3R5cGUpID0+ICQucmVxdWlyZShcXFwia3c/cnVsZT3mrYzor43pgILphY1cXFwiKS5hamF4KHBjYXBpICsgXFxcInNlYXJjaC9zZWFyY2hcXFwiICsgc3R5cGUgKyBcXFwiQnlrZXlXb3JkP2tleT1cXFwiICsga2V5d29yZCArIFxcXCImcG49XFxcIiArIE1ZX1BBR0UgKyBcXFwiJnJuPTMwJlxcXCIpLmxpc3Q7XFxuICAgICAgICAgICAgc3dpdGNoIChTdHJpbmcocGxhdGZvcm0pKSB7XFxuICAgICAgICAgICAgICAgIGNhc2UgJzAnOiAvLyDmkJzntKLljZXmm7JcXG4gICAgICAgICAgICAgICAgICAgIC8vIHN1cmwoJ011c2ljJykubWFwKCk7XFxuICAgICAgICAgICAgICAgICAgICB1cmwgPSBcXFwiaHR0cDovL3NlYXJjaC5rdXdvLmNuL3Iucz9jbGllbnQ9a3QmZnQ9bXVzaWMmcGxhdD1wYyZjbHVzdGVyPTEmcmVzdWx0PWpzb24mcmZvcm1hdD1qc29uJnZlcj1tYm94JnNob3dfY29weXJpZ2h0X29mZj0xJnZpcHZlcj1NVVNJQ184LjEuMi4wX1c0JmVuY29kaW5nPXV0ZjgmcG49XFxcIiArIChNWV9QQUdFIC0gMSkgKyBcXFwiJnJuPTMwJmFsbD1cXFwiICsga2V5d29yZDtcXG4gICAgICAgICAgICAgICAgICAgIEpTT04ucGFyc2UoZmV0Y2godXJsKS5yZXBsYWNlKC8nL2csICdcXFwiJykpLmFic2xpc3QubWFwKF8gPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJpZCA9IF8uTVVTSUNSSUQuc3BsaXQoJ18nKVsxXSArICcnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfX1tpc1VdKF8pKSBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfLlNPTkdOQU1FICsgJyAtICcgKyBfLkFSVElTVCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBfLndlYl9hbGJ1bXBpY19zaG9ydCA/IFxcXCJodHRwOi8vaW1nMS5rd2Nkbi5rdXdvLmNuL3N0YXIvYWxidW1jb3Zlci9cXFwiICsgXy53ZWJfYWxidW1waWNfc2hvcnQucmVwbGFjZSgvXjEyMC8sICc1MDAnKSA6IGZldGNoKCdodHRwOi8vYXJ0aXN0cGljc2VydmVyLmt1d28uY24vcGljLndlYj90eXBlPXJpZF9waWMmcGljdHlwZT11cmwmc2l6ZT01MDAmcmlkPScgKyByaWQpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBfLnRwYXksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IHJpZFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgY2FzZSAnMSc6IC8vIOaQnOe0ouatjOWNlVxcbiAgICAgICAgICAgICAgICAgICAgc3VybCgnUGxheUxpc3QnKS5tYXAoXyA9PiBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8ubmFtZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IF8uaW1nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IDIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogXy5pZFxcbiAgICAgICAgICAgICAgICAgICAgfSwgMSkpO1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBlbHNlIHsgLy8g5pCc57SiIOWIhuS6q+mTvuaOpVxcbiAgICAgICAgICAgIHN3aXRjaCAoU3RyaW5nKHBsYXRmb3JtKSkge1xcbiAgICAgICAgICAgICAgICBjYXNlICcwJzogLy8g5pCc57Si5Y2V5puyXFxuICAgICAgICAgICAgICAgICAgICBfID0gJC5yZXF1aXJlKFxcXCJrdz9ydWxlPeatjOivjemAgumFjVxcXCIpLmFqYXgoXFxcImh0dHA6Ly9tLmt1d28uY24vbmV3aDUvc2luZ2xlcy9zb25naW5mb2FuZGxyYz9tdXNpY0lkPVxcXCIgKyBrZXl3b3JkICsgXFxcIiZcXFwiKS5zb25naW5mbztcXG4gICAgICAgICAgICAgICAgICAgIF9fID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfLnNvbmdOYW1lICsgJyAtICcgKyBfLmFydGlzdCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IF8ucGljXFxuICAgICAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAkLnJlcXVpcmUoXFxcImt3P3J1bGU95q2M6K+N6YCC6YWNXFxcIikuYWpheChwY2FwaS5yZXBsYWNlKC8oYXBpXFxcXC8pLywgJyQxdjEvJykgKyBcXFwibXVzaWMvcGxheVVybD9taWQ9XFxcIiArIGtleXdvcmQgKyBcXFwiJnR5cGU9bXVzaWMmXFxcIikudXJsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIF9fLmNvbnRlbnQgPSAwO1xcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAodmlwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgX18uY29udGVudCA9IDE7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBfXy56eWlkID0ga2V5d29yZDtcXG4gICAgICAgICAgICAgICAgICAgIEV4dHJhKF9fLCAxKTtcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICBjYXNlICcxJzogLy8g5pCc57Si5q2M5Y2VXFxuICAgICAgICAgICAgICAgICAgICBfID0gJC5yZXF1aXJlKFxcXCJrdz9ydWxlPeatjOivjemAgumFjVxcXCIpLmFqYXgocGNhcGkgKyBcXFwicGxheWxpc3QvcGxheUxpc3RJbmZvP3BpZD1cXFwiICsga2V5d29yZCArIFxcXCImcG49MSZybj0xJlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfLm5hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBfLmltZyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAyLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IF8uaWRcXG4gICAgICAgICAgICAgICAgICAgIH0sIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICB9LFxcblxcblxcblxcbiAgICBhamF4OiBmdW5jdGlvbih1cmwpIHtcXG4gICAgICAgIENvb2tpZSA9IEpTT04ucGFyc2UoZmV0Y2hQQygnaHR0cHM6Ly93d3cua3V3by5jbi9mYXZpY29uLmljbz92PTEnLCB7XFxuICAgICAgICAgICAgd2l0aEhlYWRlcnM6IHRydWVcXG4gICAgICAgIH0pKS5oZWFkZXJzWydzZXQtY29va2llJ107XFxuICAgICAgICBDb29raWUgPSBTdHJpbmcoQ29va2llKS5yZXBsYWNlKC87LiovLCAnJyk7XFxuICAgICAgICBbZSwgdF0gPSBDb29raWUuc3BsaXQoJz0nKTtcXG4gICAgICAgIHQgPSB1bmVzY2FwZSh0KTtcXG4gICAgICAgIGZvciAodmFyIG4gPSBcXFwiXFxcIiwgaSA9IDA7IGkgPCBlLmxlbmd0aDsgaSsrKSBuICs9IGUuY2hhckNvZGVBdChpKS50b1N0cmluZygpO1xcbiAgICAgICAgbiA9IFN0cmluZyhuKTtcXG4gICAgICAgIHZhciByID0gTWF0aC5mbG9vcihuLmxlbmd0aCAvIDUpLFxcbiAgICAgICAgICAgIG8gPSBwYXJzZUludChuLmNoYXJBdChyKSArIG4uY2hhckF0KDIgKiByKSArIG4uY2hhckF0KDMgKiByKSArIG4uY2hhckF0KDQgKiByKSArIG4uY2hhckF0KDUgKiByKSksXFxuICAgICAgICAgICAgbCA9IE1hdGguY2VpbChlLmxlbmd0aCAvIDIpLFxcbiAgICAgICAgICAgIGMgPSBNYXRoLnBvdygyLCAzMSkgLSAxO1xcbiAgICAgICAgdmFyIGQgPSBNYXRoLnJvdW5kKDFlOSAqIE1hdGgucmFuZG9tKCkpICUgMWU4O1xcbiAgICAgICAgZm9yIChuICs9IGQ7IG4ubGVuZ3RoID4gMTA7KVxcbiAgICAgICAgICAgIG4gPSAocGFyc2VJbnQobi5zdWJzdHJpbmcoMCwgMTApKSArIHBhcnNlSW50KG4uc3Vic3RyaW5nKDEwLCBuLmxlbmd0aCkpKS50b1N0cmluZygpO1xcbiAgICAgICAgbiA9IChvICogbiArIGwpICUgYztcXG4gICAgICAgIHZhciBoID0gXFxcIlxcXCIsXFxuICAgICAgICAgICAgZiA9IFxcXCJcXFwiO1xcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHQubGVuZ3RoOyBpKyspXFxuICAgICAgICAgICAgZiArPSAoaCA9IHBhcnNlSW50KHQuY2hhckNvZGVBdChpKSBeIE1hdGguZmxvb3IobiAvIGMgKiAyNTUpKSkgPCAxNiA/IFxcXCIwXFxcIiArIGgudG9TdHJpbmcoMTYpIDogaC50b1N0cmluZygxNiksXFxuICAgICAgICAgICAgbiA9IChvICogbiArIGwpICUgYztcXG4gICAgICAgIGZvciAoZCA9IGQudG9TdHJpbmcoMTYpOyBkLmxlbmd0aCA8IDg7KVxcbiAgICAgICAgICAgIGQgPSBcXFwiMFxcXCIgKyBkO1xcbiAgICAgICAgU2VjcmV0ID0gZiArIGQ7XFxuICAgICAgICB1cmwgKz0gYGh0dHBzU3RhdHVzPTEmcmVxSWQ9JHtSKDgpfS0ke1IoNCl9LSR7Uig0KX0tJHtSKDQpfS0ke1IoMTIpfSZwbGF0PXdlYl93d3cmZnJvbT1gO1xcbiAgICAgICAgZ2V0ZGF0YSA9IChhamF4ZXJyKSA9PiB7XFxuICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8gPSBKU09OLnBhcnNlKGZldGNoUEModXJsLCB7XFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1JlZmVyZXInOiAnaHR0cHM6Ly9rdXdvLmNuLycsXFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0Nvb2tpZSc6IENvb2tpZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAnU2VjcmV0JzogU2VjcmV0XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pKS5kYXRhO1xcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gYWpheGVyciA8IDIgPyBnZXRkYXRhKGFqYXhlcnIgKyAxKSA6IFxcXCJcXFwiO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBnZXRkYXRhKDApO1xcbiAgICB9LFxcblxcblxcblxcbiAgICBkZXM6IGZ1bmN0aW9uKHQpIHtcXG4gICAgICAgIHJldHVybiBleGVjdXRlV2ViUnVsZShcXFwiXFxcIiwgJC50b1N0cmluZygodCkgPT4ge1xcbiAgICAgICAgICAgIGNvbnN0IEJ1ZmZlciA9IHtcXG4gICAgICAgICAgICAgICAgZnJvbTogdCA9PiB7XFxuICAgICAgICAgICAgICAgICAgICByID0gdC5sZW5ndGg7XFxuICAgICAgICAgICAgICAgICAgICBlID0gbmV3IFVpbnQ4QXJyYXkocik7XFxuICAgICAgICAgICAgICAgICAgICBmb3IgKG4gPSAwOyBuIDwgcjsgbisrKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVbbl0gPSB0LmNoYXJDb2RlQXQobik7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJhbmdlID0gdCA9PiBBcnJheS5mcm9tKG5ldyBBcnJheSh0KS5rZXlzKCkpO1xcbiAgICAgICAgICAgIExvbmcgPSB0ID0+IHtcXG4gICAgICAgICAgICAgICAgY29uc3QgciA9IEJpZ0ludCh0KTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgICAgICAgICAgIHRvU3RyaW5nOiAoKSA9PiByLnRvU3RyaW5nKCksXFxuICAgICAgICAgICAgICAgICAgICBpc05lZ2F0aXZlOiAoKSA9PiByIDwgMCxcXG4gICAgICAgICAgICAgICAgICAgIG5vdDogKCkgPT4gTG9uZyh+ciksXFxuICAgICAgICAgICAgICAgICAgICBsb3c6IE51bWJlcihyKSxcXG4gICAgICAgICAgICAgICAgICAgIG9yOiB0ID0+IExvbmcociB8IEJpZ0ludCh0KSksXFxuICAgICAgICAgICAgICAgICAgICB4b3I6IHQgPT4gTG9uZyhyIF4gQmlnSW50KHQpKSxcXG4gICAgICAgICAgICAgICAgICAgIGFuZDogdCA9PiBMb25nKHIgJiBCaWdJbnQodCkpLFxcbiAgICAgICAgICAgICAgICAgICAgZXF1YWxzOiB0ID0+IHIgPT09IEJpZ0ludCh0KSxcXG4gICAgICAgICAgICAgICAgICAgIHNoaWZ0TGVmdDogdCA9PiBMb25nKHIgPDwgQmlnSW50KHQpKSxcXG4gICAgICAgICAgICAgICAgICAgIHNoaWZ0UmlnaHQ6IHQgPT4gTG9uZyhyID4+IEJpZ0ludCh0KSlcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgTG9uZ0FycmF5ID0gdCA9PiB0Lm1hcCh0ID0+IExvbmcodCkpO1xcbiAgICAgICAgICAgIGFycmF5RSA9IExvbmdBcnJheShbXFxuICAgICAgICAgICAgICAgIDMxLCAwLCAxLCAyLCAzLCA0LCAtMSwgLTEsXFxuICAgICAgICAgICAgICAgIDMsIDQsIDUsIDYsIDcsIDgsIC0xLCAtMSxcXG4gICAgICAgICAgICAgICAgNywgOCwgOSwgMTAsIDExLCAxMiwgLTEsIC0xLFxcbiAgICAgICAgICAgICAgICAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAtMSwgLTEsXFxuICAgICAgICAgICAgICAgIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIC0xLCAtMSxcXG4gICAgICAgICAgICAgICAgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgLTEsIC0xLFxcbiAgICAgICAgICAgICAgICAyMywgMjQsIDI1LCAyNiwgMjcsIDI4LCAtMSwgLTEsXFxuICAgICAgICAgICAgICAgIDI3LCAyOCwgMjksIDMwLCAzMSwgMzAsIC0xLCAtMVxcbiAgICAgICAgICAgIF0pXFxuICAgICAgICAgICAgYXJyYXlJUCA9IExvbmdBcnJheShbXFxuICAgICAgICAgICAgICAgIDU3LCA0OSwgNDEsIDMzLCAyNSwgMTcsIDksIDEsXFxuICAgICAgICAgICAgICAgIDU5LCA1MSwgNDMsIDM1LCAyNywgMTksIDExLCAzLFxcbiAgICAgICAgICAgICAgICA2MSwgNTMsIDQ1LCAzNywgMjksIDIxLCAxMywgNSxcXG4gICAgICAgICAgICAgICAgNjMsIDU1LCA0NywgMzksIDMxLCAyMywgMTUsIDcsXFxuICAgICAgICAgICAgICAgIDU2LCA0OCwgNDAsIDMyLCAyNCwgMTYsIDgsIDAsXFxuICAgICAgICAgICAgICAgIDU4LCA1MCwgNDIsIDM0LCAyNiwgMTgsIDEwLCAyLFxcbiAgICAgICAgICAgICAgICA2MCwgNTIsIDQ0LCAzNiwgMjgsIDIwLCAxMiwgNCxcXG4gICAgICAgICAgICAgICAgNjIsIDU0LCA0NiwgMzgsIDMwLCAyMiwgMTQsIDZcXG4gICAgICAgICAgICBdKVxcbiAgICAgICAgICAgIGFycmF5SVBfMSA9IExvbmdBcnJheShbXFxuICAgICAgICAgICAgICAgIDM5LCA3LCA0NywgMTUsIDU1LCAyMywgNjMsIDMxLFxcbiAgICAgICAgICAgICAgICAzOCwgNiwgNDYsIDE0LCA1NCwgMjIsIDYyLCAzMCxcXG4gICAgICAgICAgICAgICAgMzcsIDUsIDQ1LCAxMywgNTMsIDIxLCA2MSwgMjksXFxuICAgICAgICAgICAgICAgIDM2LCA0LCA0NCwgMTIsIDUyLCAyMCwgNjAsIDI4LFxcbiAgICAgICAgICAgICAgICAzNSwgMywgNDMsIDExLCA1MSwgMTksIDU5LCAyNyxcXG4gICAgICAgICAgICAgICAgMzQsIDIsIDQyLCAxMCwgNTAsIDE4LCA1OCwgMjYsXFxuICAgICAgICAgICAgICAgIDMzLCAxLCA0MSwgOSwgNDksIDE3LCA1NywgMjUsXFxuICAgICAgICAgICAgICAgIDMyLCAwLCA0MCwgOCwgNDgsIDE2LCA1NiwgMjRcXG4gICAgICAgICAgICBdKVxcbiAgICAgICAgICAgIGFycmF5THMgPSBbXFxuICAgICAgICAgICAgICAgIDEsIDEsIDIsIDIsIDIsIDIsIDIsIDIsXFxuICAgICAgICAgICAgICAgIDEsIDIsIDIsIDIsIDIsIDIsIDIsIDFcXG4gICAgICAgICAgICBdXFxuICAgICAgICAgICAgYXJyYXlMc01hc2sgPSBMb25nQXJyYXkoWzAsIDEwNDg1NzcsIDMxNDU3MzFdKVxcbiAgICAgICAgICAgIGFycmF5TWFzayA9IHJhbmdlKDY0KS5tYXAodCA9PiBNYXRoLnBvdygyLCB0KSlcXG4gICAgICAgICAgICBhcnJheU1hc2tbNjNdICo9IC0xXFxuICAgICAgICAgICAgYXJyYXlQID0gTG9uZ0FycmF5KFtcXG4gICAgICAgICAgICAgICAgMTUsIDYsIDE5LCAyMCwgMjgsIDExLCAyNywgMTYsXFxuICAgICAgICAgICAgICAgIDAsIDE0LCAyMiwgMjUsIDQsIDE3LCAzMCwgOSxcXG4gICAgICAgICAgICAgICAgMSwgNywgMjMsIDEzLCAzMSwgMjYsIDIsIDgsXFxuICAgICAgICAgICAgICAgIDE4LCAxMiwgMjksIDUsIDIxLCAxMCwgMywgMjRcXG4gICAgICAgICAgICBdKVxcbiAgICAgICAgICAgIGFycmF5UENfMSA9IExvbmdBcnJheShbXFxuICAgICAgICAgICAgICAgIDU2LCA0OCwgNDAsIDMyLCAyNCwgMTYsIDgsIDAsXFxuICAgICAgICAgICAgICAgIDU3LCA0OSwgNDEsIDMzLCAyNSwgMTcsIDksIDEsXFxuICAgICAgICAgICAgICAgIDU4LCA1MCwgNDIsIDM0LCAyNiwgMTgsIDEwLCAyLFxcbiAgICAgICAgICAgICAgICA1OSwgNTEsIDQzLCAzNSwgNjIsIDU0LCA0NiwgMzgsXFxuICAgICAgICAgICAgICAgIDMwLCAyMiwgMTQsIDYsIDYxLCA1MywgNDUsIDM3LFxcbiAgICAgICAgICAgICAgICAyOSwgMjEsIDEzLCA1LCA2MCwgNTIsIDQ0LCAzNixcXG4gICAgICAgICAgICAgICAgMjgsIDIwLCAxMiwgNCwgMjcsIDE5LCAxMSwgM1xcbiAgICAgICAgICAgIF0pXFxuICAgICAgICAgICAgYXJyYXlQQ18yID0gTG9uZ0FycmF5KFtcXG4gICAgICAgICAgICAgICAgMTMsIDE2LCAxMCwgMjMsIDAsIDQsIC0xLCAtMSxcXG4gICAgICAgICAgICAgICAgMiwgMjcsIDE0LCA1LCAyMCwgOSwgLTEsIC0xLFxcbiAgICAgICAgICAgICAgICAyMiwgMTgsIDExLCAzLCAyNSwgNywgLTEsIC0xLFxcbiAgICAgICAgICAgICAgICAxNSwgNiwgMjYsIDE5LCAxMiwgMSwgLTEsIC0xLFxcbiAgICAgICAgICAgICAgICA0MCwgNTEsIDMwLCAzNiwgNDYsIDU0LCAtMSwgLTEsXFxuICAgICAgICAgICAgICAgIDI5LCAzOSwgNTAsIDQ0LCAzMiwgNDcsIC0xLCAtMSxcXG4gICAgICAgICAgICAgICAgNDMsIDQ4LCAzOCwgNTUsIDMzLCA1MiwgLTEsIC0xLFxcbiAgICAgICAgICAgICAgICA0NSwgNDEsIDQ5LCAzNSwgMjgsIDMxLCAtMSwgLTFcXG4gICAgICAgICAgICBdKVxcbiAgICAgICAgICAgIG1hdHJpeE5TQm94ID0gW1xcbiAgICAgICAgICAgICAgICBbXFxuICAgICAgICAgICAgICAgICAgICAxNCwgNCwgMywgMTUsIDIsIDEzLCA1LCAzLFxcbiAgICAgICAgICAgICAgICAgICAgMTMsIDE0LCA2LCA5LCAxMSwgMiwgMCwgNSxcXG4gICAgICAgICAgICAgICAgICAgIDQsIDEsIDEwLCAxMiwgMTUsIDYsIDksIDEwLFxcbiAgICAgICAgICAgICAgICAgICAgMSwgOCwgMTIsIDcsIDgsIDExLCA3LCAwLFxcbiAgICAgICAgICAgICAgICAgICAgMCwgMTUsIDEwLCA1LCAxNCwgNCwgOSwgMTAsXFxuICAgICAgICAgICAgICAgICAgICA3LCA4LCAxMiwgMywgMTMsIDEsIDMsIDYsXFxuICAgICAgICAgICAgICAgICAgICAxNSwgMTIsIDYsIDExLCAyLCA5LCA1LCAwLFxcbiAgICAgICAgICAgICAgICAgICAgNCwgMiwgMTEsIDE0LCAxLCA3LCA4LCAxM1xcbiAgICAgICAgICAgICAgICBdLFxcbiAgICAgICAgICAgICAgICBbXFxuICAgICAgICAgICAgICAgICAgICAxNSwgMCwgOSwgNSwgNiwgMTAsIDEyLCA5LFxcbiAgICAgICAgICAgICAgICAgICAgOCwgNywgMiwgMTIsIDMsIDEzLCA1LCAyLFxcbiAgICAgICAgICAgICAgICAgICAgMSwgMTQsIDcsIDgsIDExLCA0LCAwLCAzLFxcbiAgICAgICAgICAgICAgICAgICAgMTQsIDExLCAxMywgNiwgNCwgMSwgMTAsIDE1LFxcbiAgICAgICAgICAgICAgICAgICAgMywgMTMsIDEyLCAxMSwgMTUsIDMsIDYsIDAsXFxuICAgICAgICAgICAgICAgICAgICA0LCAxMCwgMSwgNywgOCwgNCwgMTEsIDE0LFxcbiAgICAgICAgICAgICAgICAgICAgMTMsIDgsIDAsIDYsIDIsIDE1LCA5LCA1LFxcbiAgICAgICAgICAgICAgICAgICAgNywgMSwgMTAsIDEyLCAxNCwgMiwgNSwgOVxcbiAgICAgICAgICAgICAgICBdLFxcbiAgICAgICAgICAgICAgICBbXFxuICAgICAgICAgICAgICAgICAgICAxMCwgMTMsIDEsIDExLCA2LCA4LCAxMSwgNSxcXG4gICAgICAgICAgICAgICAgICAgIDksIDQsIDEyLCAyLCAxNSwgMywgMiwgMTQsXFxuICAgICAgICAgICAgICAgICAgICAwLCA2LCAxMywgMSwgMywgMTUsIDQsIDEwLFxcbiAgICAgICAgICAgICAgICAgICAgMTQsIDksIDcsIDEyLCA1LCAwLCA4LCA3LFxcbiAgICAgICAgICAgICAgICAgICAgMTMsIDEsIDIsIDQsIDMsIDYsIDEyLCAxMSxcXG4gICAgICAgICAgICAgICAgICAgIDAsIDEzLCA1LCAxNCwgNiwgOCwgMTUsIDIsXFxuICAgICAgICAgICAgICAgICAgICA3LCAxMCwgOCwgMTUsIDQsIDksIDExLCA1LFxcbiAgICAgICAgICAgICAgICAgICAgOSwgMCwgMTQsIDMsIDEwLCA3LCAxLCAxMlxcbiAgICAgICAgICAgICAgICBdLFxcbiAgICAgICAgICAgICAgICBbXFxuICAgICAgICAgICAgICAgICAgICA3LCAxMCwgMSwgMTUsIDAsIDEyLCAxMSwgNSxcXG4gICAgICAgICAgICAgICAgICAgIDE0LCA5LCA4LCAzLCA5LCA3LCA0LCA4LFxcbiAgICAgICAgICAgICAgICAgICAgMTMsIDYsIDIsIDEsIDYsIDExLCAxMiwgMixcXG4gICAgICAgICAgICAgICAgICAgIDMsIDAsIDUsIDE0LCAxMCwgMTMsIDE1LCA0LFxcbiAgICAgICAgICAgICAgICAgICAgMTMsIDMsIDQsIDksIDYsIDEwLCAxLCAxMixcXG4gICAgICAgICAgICAgICAgICAgIDExLCAwLCAyLCA1LCAwLCAxMywgMTQsIDIsXFxuICAgICAgICAgICAgICAgICAgICA4LCAxNSwgNywgNCwgMTUsIDEsIDEwLCA3LFxcbiAgICAgICAgICAgICAgICAgICAgNSwgNiwgMTIsIDExLCAzLCA4LCA5LCAxNFxcbiAgICAgICAgICAgICAgICBdLFxcbiAgICAgICAgICAgICAgICBbXFxuICAgICAgICAgICAgICAgICAgICAyLCA0LCA4LCAxNSwgNywgMTAsIDEzLCA2LFxcbiAgICAgICAgICAgICAgICAgICAgNCwgMSwgMywgMTIsIDExLCA3LCAxNCwgMCxcXG4gICAgICAgICAgICAgICAgICAgIDEyLCAyLCA1LCA5LCAxMCwgMTMsIDAsIDMsXFxuICAgICAgICAgICAgICAgICAgICAxLCAxMSwgMTUsIDUsIDYsIDgsIDksIDE0LFxcbiAgICAgICAgICAgICAgICAgICAgMTQsIDExLCA1LCA2LCA0LCAxLCAzLCAxMCxcXG4gICAgICAgICAgICAgICAgICAgIDIsIDEyLCAxNSwgMCwgMTMsIDIsIDgsIDUsXFxuICAgICAgICAgICAgICAgICAgICAxMSwgOCwgMCwgMTUsIDcsIDE0LCA5LCA0LFxcbiAgICAgICAgICAgICAgICAgICAgMTIsIDcsIDEwLCA5LCAxLCAxMywgNiwgM1xcbiAgICAgICAgICAgICAgICBdLFxcbiAgICAgICAgICAgICAgICBbXFxuICAgICAgICAgICAgICAgICAgICAxMiwgOSwgMCwgNywgOSwgMiwgMTQsIDEsXFxuICAgICAgICAgICAgICAgICAgICAxMCwgMTUsIDMsIDQsIDYsIDEyLCA1LCAxMSxcXG4gICAgICAgICAgICAgICAgICAgIDEsIDE0LCAxMywgMCwgMiwgOCwgNywgMTMsXFxuICAgICAgICAgICAgICAgICAgICAxNSwgNSwgNCwgMTAsIDgsIDMsIDExLCA2LFxcbiAgICAgICAgICAgICAgICAgICAgMTAsIDQsIDYsIDExLCA3LCA5LCAwLCA2LFxcbiAgICAgICAgICAgICAgICAgICAgNCwgMiwgMTMsIDEsIDksIDE1LCAzLCA4LFxcbiAgICAgICAgICAgICAgICAgICAgMTUsIDMsIDEsIDE0LCAxMiwgNSwgMTEsIDAsXFxuICAgICAgICAgICAgICAgICAgICAyLCAxMiwgMTQsIDcsIDUsIDEwLCA4LCAxM1xcbiAgICAgICAgICAgICAgICBdLFxcbiAgICAgICAgICAgICAgICBbXFxuICAgICAgICAgICAgICAgICAgICA0LCAxLCAzLCAxMCwgMTUsIDEyLCA1LCAwLFxcbiAgICAgICAgICAgICAgICAgICAgMiwgMTEsIDksIDYsIDgsIDcsIDYsIDksXFxuICAgICAgICAgICAgICAgICAgICAxMSwgNCwgMTIsIDE1LCAwLCAzLCAxMCwgNSxcXG4gICAgICAgICAgICAgICAgICAgIDE0LCAxMywgNywgOCwgMTMsIDE0LCAxLCAyLFxcbiAgICAgICAgICAgICAgICAgICAgMTMsIDYsIDE0LCA5LCA0LCAxLCAyLCAxNCxcXG4gICAgICAgICAgICAgICAgICAgIDExLCAxMywgNSwgMCwgMSwgMTAsIDgsIDMsXFxuICAgICAgICAgICAgICAgICAgICAwLCAxMSwgMywgNSwgOSwgNCwgMTUsIDIsXFxuICAgICAgICAgICAgICAgICAgICA3LCA4LCAxMiwgMTUsIDEwLCA3LCA2LCAxMlxcbiAgICAgICAgICAgICAgICBdLFxcbiAgICAgICAgICAgICAgICBbXFxuICAgICAgICAgICAgICAgICAgICAxMywgNywgMTAsIDAsIDYsIDksIDUsIDE1LFxcbiAgICAgICAgICAgICAgICAgICAgOCwgNCwgMywgMTAsIDExLCAxNCwgMTIsIDUsXFxuICAgICAgICAgICAgICAgICAgICAyLCAxMSwgOSwgNiwgMTUsIDEyLCAwLCAzLFxcbiAgICAgICAgICAgICAgICAgICAgNCwgMSwgMTQsIDEzLCAxLCAyLCA3LCA4LFxcbiAgICAgICAgICAgICAgICAgICAgMSwgMiwgMTIsIDE1LCAxMCwgNCwgMCwgMyxcXG4gICAgICAgICAgICAgICAgICAgIDEzLCAxNCwgNiwgOSwgNywgOCwgOSwgNixcXG4gICAgICAgICAgICAgICAgICAgIDE1LCAxLCA1LCAxMiwgMywgMTAsIDE0LCA1LFxcbiAgICAgICAgICAgICAgICAgICAgOCwgNywgMTEsIDAsIDQsIDEzLCAyLCAxMVxcbiAgICAgICAgICAgICAgICBdXFxuICAgICAgICAgICAgXVxcbiAgICAgICAgICAgIGJpdFRyYW5zZm9ybSA9ICh0LCByLCBlKSA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCBuID0gTG9uZygwKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlKHIpLmZvckVhY2gociA9PiB7XFxuICAgICAgICAgICAgICAgICAgICB0W3JdLmlzTmVnYXRpdmUoKSB8fCBlLmFuZChhcnJheU1hc2tbdFtyXS5sb3ddKS5lcXVhbHMoMCkgfHwgKG4gPSBuLm9yKGFycmF5TWFza1tyXSkpXFxuICAgICAgICAgICAgICAgIH0pLCBuXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIERFUzY0ID0gKHQsIHIpID0+IHtcXG4gICAgICAgICAgICAgICAgZSA9IFtdLFxcbiAgICAgICAgICAgICAgICAgICAgbiA9IFtdO1xcbiAgICAgICAgICAgICAgICBmID0gYml0VHJhbnNmb3JtKGFycmF5SVAsIDY0LCByKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5bMF0gPSBmLmFuZCg0Mjk0OTY3Mjk1KSxcXG4gICAgICAgICAgICAgICAgICAgIG5bMV0gPSBmLmFuZCgtNDI5NDk2NzI5Nikuc2hpZnRSaWdodCgzMiksXFxuICAgICAgICAgICAgICAgICAgICByYW5nZSgxNikuZm9yRWFjaChyID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZiA9IExvbmcoMCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IExvbmcoblsxXSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBiaXRUcmFuc2Zvcm0oYXJyYXlFLCA2NCwgaSkueG9yKHRbcl0pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZSg4KS5mb3JFYWNoKHQgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVt0XSA9IGkuc2hpZnRSaWdodCg4ICogdCkuYW5kKDI1NSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlKDgpLnJldmVyc2UoKS5mb3JFYWNoKHQgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGYuc2hpZnRMZWZ0KDQpLm9yKG1hdHJpeE5TQm94W3RdW2VbdF1dKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGJpdFRyYW5zZm9ybShhcnJheVAsIDMyLCBmKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbyA9IExvbmcoblswXSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5bMF0gPSBMb25nKG5bMV0pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuWzFdID0gby54b3IoaSlcXG4gICAgICAgICAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgbi5yZXZlcnNlKCksXFxuICAgICAgICAgICAgICAgICAgICBmID0gblsxXS5zaGlmdExlZnQoMzIpLmFuZCgtNDI5NDk2NzI5Nikub3IoblswXS5hbmQoNDI5NDk2NzI5NSkpLFxcbiAgICAgICAgICAgICAgICAgICAgZiA9IGJpdFRyYW5zZm9ybShhcnJheUlQXzEsIDY0LCBmKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBzdWJLZXlzID0gKHQsIHIpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IG4gPSBiaXRUcmFuc2Zvcm0oYXJyYXlQQ18xLCA1NiwgdCk7XFxuICAgICAgICAgICAgICAgIHJhbmdlKDE2KS5mb3JFYWNoKHQgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgbiA9IG4uYW5kKGFycmF5THNNYXNrW2FycmF5THNbdF1dKS5zaGlmdExlZnQoMjggLSBhcnJheUxzW3RdKS5vcihuLmFuZChhcnJheUxzTWFza1thcnJheUxzW3RdXS5ub3QoKSkuc2hpZnRSaWdodChhcnJheUxzW3RdKSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgclt0XSA9IGJpdFRyYW5zZm9ybShhcnJheVBDXzIsIDY0LCBuKVxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBiID0gZnVuY3Rpb24odCkge1xcbiAgICAgICAgICAgICAgICBjb25zdCByID0gQnVmZmVyLmZyb20oXFxcInlsenN4a3dtXFxcIik7XFxuICAgICAgICAgICAgICAgIGxldCBuID0gTG9uZygwKTtcXG4gICAgICAgICAgICAgICAgcmFuZ2UoOCkuZm9yRWFjaCh0ID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIG4gPSBMb25nKHJbdF0pLnNoaWZ0TGVmdCg4ICogdCkub3IobilcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGNvbnN0IG8gPSBNYXRoLmZsb29yKHQubGVuZ3RoIC8gOCksXFxuICAgICAgICAgICAgICAgICAgICBpID0gcmFuZ2UoMTYpLm1hcCgoKSA9PiBMb25nKDApKTtcXG4gICAgICAgICAgICAgICAgc3ViS2V5cyhuLCBpKTtcXG4gICAgICAgICAgICAgICAgY29uc3QgZiA9IHJhbmdlKG8pLm1hcCgoKSA9PiBMb25nKDApKTtcXG4gICAgICAgICAgICAgICAgcmFuZ2UobykuZm9yRWFjaChyID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlKDgpLmZvckVhY2goZSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZltyXSA9IExvbmcodFtlICsgOCAqIHJdKS5zaGlmdExlZnQoOCAqIGUpLm9yKGZbcl0pXFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgY29uc3QgcyA9IFtdO1xcbiAgICAgICAgICAgICAgICByYW5nZShvKS5mb3JFYWNoKHQgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgc1t0XSA9IERFUzY0KGksIGZbdF0pXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBjb25zdCB1ID0gdC5zbGljZSg4ICogbyk7XFxuICAgICAgICAgICAgICAgIGxldCBoID0gTG9uZygwKTtcXG4gICAgICAgICAgICAgICAgcmFuZ2UodC5sZW5ndGggJSA4KS5mb3JFYWNoKHQgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgaCA9IExvbmcodVt0XSkuc2hpZnRMZWZ0KDggKiB0KS5vcihoKVxcbiAgICAgICAgICAgICAgICB9KSwgc1tvXSA9IERFUzY0KGksIGgpO1xcbiAgICAgICAgICAgICAgICBjb25zdCBhID0gW107XFxuICAgICAgICAgICAgICAgIGxldCBjID0gMDtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHMuZm9yRWFjaCh0ID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlKDgpLmZvckVhY2gociA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYVtjXSA9IHQuc2hpZnRSaWdodCg4ICogcikuYW5kKDI1NSkubG93O1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGMrK1xcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgfSksIGE7XFxuICAgICAgICAgICAgfShCdWZmZXIuZnJvbSh0KSk7XFxuICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5idG9hKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgYikpO1xcbiAgICAgICAgfSwgdCkpO1xcbiAgICB9XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi4p26bWdcIixcInBhdGhcIjpcIm1nXCIsXCJydWxlXCI6XCJldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9saWI/cnVsZT3mrYzor43pgILphY0nKSkucnVsZSk7XFxuY29uc3QgdGhpc19wbGF0Zm9ybSA9IFxcXCJtZ1xcXCI7XFxuJC5leHBvcnRzID0ge1xcblxcblxcblxcbiAgICBpVGFnOiBmdW5jdGlvbigpIHtcXG4gICAgICAgIGlUYWdbXFxcIuaOqOiNkFxcXCJdID0ge307XFxuICAgICAgICBpVGFnW1xcXCLmjqjojZBcXFwiXVtcXFwi5pyA5paw5q2M5Y2VXFxcIl0gPSBcXFwicGxheWxpc3QvbGlzdD9jb2x1bW5JZD0xNTEyNzI3MiZ0YWdJZD1cXFwiO1xcbiAgICAgICAgaVRhZ1tcXFwi5o6o6I2QXFxcIl1bXFxcIummlumhteaOqOiNkFxcXCJdID0gXFxcImhvbWUvc29uZ2xpc3RcXFwiO1xcbiAgICAgICAgaVRhZ1tcXFwi5o6o6I2QXFxcIl1bXFxcIue9rumhtueDremXqFxcXCJdID0gXFxcInBsYXlsaXN0L2xpc3Q/Y29sdW1uSWQ9MzgxOTk1ODhcXFwiO1xcbiAgICAgICAgJC5yZXF1aXJlKCdtZz9ydWxlPeatjOivjemAgumFjScpLmFqYXgoXFxcInBsYXlsaXN0L2FsbFRhZ1xcXCIpLnRhZ3MubWFwKF8gPT4ge1xcbiAgICAgICAgICAgIGlUYWdbXy50YWdOYW1lXSA9IHt9O1xcbiAgICAgICAgICAgIF8udGFncy5tYXAoX18gPT5cXG4gICAgICAgICAgICAgICAgaVRhZ1tfLnRhZ05hbWVdW19fLnRhZ05hbWVdID0gaVRhZ1tcXFwi5o6o6I2QXFxcIl1bXFxcIuacgOaWsOatjOWNlVxcXCJdICsgX18udGFnSWRcXG4gICAgICAgICAgICApO1xcbiAgICAgICAgfSk7XFxuICAgICAgICBpVGFnW1xcXCLmjpLooYxcXFwiXSA9IHt9O1xcbiAgICAgICAgJC5yZXF1aXJlKCdtZz9ydWxlPeatjOivjemAgumFjScpLmFqYXgoXFxcImJpbGxib2FyZC90cmVlXFxcIikubWFwKF8gPT4ge1xcbiAgICAgICAgICAgIGlmICghL+S5kMK35qacLy50ZXN0KF8uY29sdW1uVGl0bGUpKSB7XFxuICAgICAgICAgICAgICAgIGlUYWdbXFxcIuaOkuihjFxcXCJdW18uY29sdW1uVGl0bGVdID0gXy5iaWxsQm9hcmRWb3MubWFwKF8gPT4gRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8uY29sdW1uVGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICBpbWc6ICdodHRwczonICsgXy5jb2x1bW5TbWFsbFBpYyxcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IDMsXFxuICAgICAgICAgICAgICAgICAgICB6eWlkOiBfLnBhdGhOYW1lXFxuICAgICAgICAgICAgICAgIH0sIDEsIDEpKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKFxcXCJtZ19pVGFnXFxcIiwgaVRhZyk7XFxuICAgIH0sXFxuXFxuXFxuXFxuICAgIGxhenk6IGZ1bmN0aW9uKHBsYXRmb3JtLCB0MSwgdDIpIHtcXG4gICAgICAgIHN3aXRjaCAoU3RyaW5nKHBsYXRmb3JtKSkge1xcbiAgICAgICAgICAgIGNhc2UgJzAnOiAvLyDmrYzmm7Lor6bmg4VcXG4gICAgICAgICAgICAgICAgXyA9IEpTT04ucGFyc2UoZmV0Y2goXFxcImh0dHBzOi8vYy5tdXNpY2FwcC5taWd1LmNuL01JR1VNMi4wL3YxLjAvY29udGVudC9yZXNvdXJjZWluZm8uZG8/cmVzb3VyY2VUeXBlPTImcmVzb3VyY2VJZD1cXFwiICsgdDEpKS5yZXNvdXJjZVswXTtcXG4gICAgICAgICAgICAgICAgaWYgKHQyKSB7XFxuICAgICAgICAgICAgICAgICAgICBmID0gXy5jb2RlUmF0ZTtcXG4gICAgICAgICAgICAgICAgICAgIHQgPSBfLm5ld1JhdGVGb3JtYXRzO1xcbiAgICAgICAgICAgICAgICAgICAgYXJyID0gW3RzWzFdICsgU2l6ZSh0WzBdLmFuZHJvaWRTaXplIHx8IHRbMF0uc2l6ZSldO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGYuSFEpXFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2godHNbMl0gKyBTaXplKHRbMV0uYW5kcm9pZFNpemUgfHwgdFsxXS5zaXplKSk7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoZi5TUSlcXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaCh0c1szXSArIFNpemUodFsyXS5hbmRyb2lkU2l6ZSB8fCB0WzJdLnNpemUpKTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChmLlpRKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKHRzWzRdICsgU2l6ZSh0WzNdLmFuZHJvaWRTaXplIHx8IHRbMl0uc2l6ZSkpO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGYuWjNEICYmIGdldE15VmFyKCdtZ2p4X3pxJyk9PSAnMScpXFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2godHNbNV0gKyBTaXplKF8uejNkQ29kZS5hbmRyb2lkU2l6ZSB8fCBfLnozZENvZGUuc2l6ZSkpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoYXJyLCAxLCAn6YCJ5oup5LiL6L296Z+z6LSoJykuc2VsZWN0KChhcnIsIHQxLCBuYW1lLCBhcnRpc3QpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gYXJyLmluZGV4T2YoaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9ICQucmVxdWlyZShcXFwiamlleGk/cnVsZT3mrYzor43pgILphY1cXFwiKS5HZXRNdXNpY1VybChcXFwiZG93blxcXCIsIFxcXCJtZ1xcXCIsIHQxLCBpLCBuYW1lLCBhcnRpc3QpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1cmwubWF0Y2goXFxcInRvYXN0Oi8vXFxcIikpIHJldHVybiB1cmw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdkb3dubG9hZDovLycgKyB1cmw7XFxuICAgICAgICAgICAgICAgICAgICB9LCBhcnIsIHQxLCBfLnNvbmdOYW1lLCBfLmFydGlzdHMubWFwKF8gPT4gXy5uYW1lKS5qb2luKFxcXCImXFxcIikpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGxyYyA9IF8ubHJjVXJsO1xcbiAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gJ2h0dHBzOicgKyAkLnJlcXVpcmUoXFxcIm1nP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuYWpheChgcGxheS9hdXRoL2dldFNvbmdQbGF5SW5mbz90eXBlPTEmY29weXJpZ2h0SWQ9JHt0MX1gKS5wbGF5VXJsO1xcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChpc192aXBNdXNpYykge1xcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gJC5yZXF1aXJlKFxcXCJqaWV4aT9ydWxlPeatjOivjemAgumFjVxcXCIpLkdldE11c2ljVXJsKFxcXCJvcGVuXFxcIiwgXFxcIm1nXFxcIiwgdDEsIDAsIF8uc29uZ05hbWUsIF8uYXJ0aXN0cy5tYXAoXyA9PiBfLm5hbWUpLmpvaW4oXFxcIiZcXFwiKSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKHVybC5tYXRjaChcXFwidG9hc3Q6Ly9cXFwiKSkgcmV0dXJuIHVybDtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgIHVybHM6IFt1cmwgKyAnI2lzTXVzaWM9dHJ1ZSMnXSxcXG4gICAgICAgICAgICAgICAgICAgIGx5cmljOiBscmNcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIGNhc2UgJzEnOiAvLyDpppbpobVcXG4gICAgICAgICAgICAgICAgXyA9ICQucmVxdWlyZSgnbWc/cnVsZT3mrYzor43pgILphY0nKS5hamF4KHVyaSk7XFxuICAgICAgICAgICAgICAgIGlmICghXykgXyA9IHtcXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbXVxcbiAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICAoXy5pdGVtcyB8fCBfWzBdLml0ZW1zKS5tYXAoXyA9PiBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXy5uYW1lIHx8IF8udGl0bGUgfHwgXy5wbGF5TGlzdE5hbWUsXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IF8uaW1nIHx8IF8uaW1hZ2UsXFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAyLFxcbiAgICAgICAgICAgICAgICAgICAgenlpZDogXy5pZCB8fCBfLnBsYXlMaXN0SWRcXG4gICAgICAgICAgICAgICAgfSwgMSkpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgY2FzZSAnMic6IC8vIOWPkeeOsFxcbiAgICAgICAgICAgICAgICBpZiAoTVlfUEFHRSA9PSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICB0MiA9ICQucmVxdWlyZShcXFwibWc/cnVsZT3mrYzor43pgILphY1cXFwiKS5hamF4KGBwbGF5bGlzdC9pbmZvP3NvbmdMaXN0SWQ9JHt0MX1gKS5jb250ZW50Q291bnQ7XFxuICAgICAgICAgICAgICAgICAgICBfID0gJC5yZXF1aXJlKFxcXCJtZz9ydWxlPeatjOivjemAgumFjVxcXCIpLmFqYXgoYHBsYXlsaXN0L3NvbmdzSW5mbz9wYWx5bGlzdElkPSR7dDF9YCwgdDIpO1xcbiAgICAgICAgICAgICAgICB9IGVsc2UgXyA9IHtcXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbXVxcbiAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBjYXNlICczJzogLy8g5o6S6KGMXFxuICAgICAgICAgICAgICAgIF8gPSAkLnJlcXVpcmUoXFxcIm1nP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuYWpheChgYmlsbGJvYXJkL2hvbWU/cGF0aE5hbWU9JHt0MX1gKS5zb25ncztcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICB9XFxuICAgICAgICBkID0gW107XFxuICAgICAgICBfLml0ZW1zLm1hcChfID0+IHtcXG4gICAgICAgICAgICBpZiAoXy5mdWxsU29uZykgRXh0cmEoe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogXy5uYW1lICsgKF8uc2luZ2VycyA/ICcgLSAnICsgXy5zaW5nZXJzLm1hcChfID0+IF8ubmFtZSkuam9pbignJicpIDogJycpLFxcbiAgICAgICAgICAgICAgICBpbWc6ICdodHRwczonICsgXy5tZWRpdW1QaWMsXFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IF8uZnVsbFNvbmcudmlwRmxhZyxcXG4gICAgICAgICAgICAgICAgenlpZDogXy5jb3B5cmlnaHRJZFxcbiAgICAgICAgICAgIH0sIDEpO1xcbiAgICAgICAgfSk7XFxuICAgICAgICBzZXRSZXN1bHQoZCk7XFxuICAgIH0sXFxuXFxuXFxuXFxuXFxuICAgIHNlYXJjaDogZnVuY3Rpb24ocGxhdGZvcm0sIGtleXdvcmQsIGlzVSkge1xcbiAgICAgICAgaWYgKGlzVSAhPSBcXFwidXJsXFxcIikge1xcbiAgICAgICAgICAgIF9fID0ge1xcbiAgICAgICAgICAgICAgICBsaWI6IChfKSA9PiB0cnVlLFxcbiAgICAgICAgICAgICAgICBwYWlkOiAoXykgPT4gXy5mdWxsU29uZy52aXBGbGFnID09ICcxJyxcXG4gICAgICAgICAgICAgICAgZnJlZTogKF8pID0+IF8uZnVsbFNvbmcudmlwRmxhZyA9PSAnMCdcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIHN1cmwgPSAoc3R5cGUpID0+ICQucmVxdWlyZShcXFwibWc/cnVsZT3mrYzor43pgILphY1cXFwiKS5hamF4KFxcXCJzZWFyY2gvc29uZ1xcXCIgKyBzdHlwZSArIFxcXCI/dGV4dD1cXFwiICsga2V5d29yZCkuaXRlbXM7XFxuICAgICAgICAgICAgc3dpdGNoIChTdHJpbmcocGxhdGZvcm0pKSB7XFxuICAgICAgICAgICAgICAgIGNhc2UgJzAnOiAvLyDmkJzntKLljZXmm7JcXG4gICAgICAgICAgICAgICAgICAgIHN1cmwoJycpLm1hcChfID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXy5mdWxsU29uZyAmJiBfX1tpc1VdKF8pKSBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfLm5hbWUgKyAoXy5zaW5nZXJzID8gJyAtICcgKyBfLnNpbmdlcnMubWFwKF8gPT4gXy5uYW1lKS5qb2luKCcmJykgOiAnJyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogJ2h0dHBzOicgKyBfLm1lZGl1bVBpYyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogXy5mdWxsU29uZy52aXBGbGFnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiBfLmNvcHlyaWdodElkXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICBjYXNlICcxJzogLy8g5pCc57Si5q2M5Y2VXFxuICAgICAgICAgICAgICAgICAgICBzdXJsKCdMaXN0JykubWFwKF8gPT4gRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfLm5hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBfLmltZyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAyLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IF8uaWRcXG4gICAgICAgICAgICAgICAgICAgIH0sIDEpKTtcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0gZWxzZSB7IC8vIOaQnOe0oiDliIbkuqvpk77mjqVcXG4gICAgICAgICAgICBzd2l0Y2ggKFN0cmluZyhwbGF0Zm9ybSkpIHtcXG4gICAgICAgICAgICAgICAgY2FzZSAnMCc6IC8vIOaQnOe0ouWNleabslxcbiAgICAgICAgICAgICAgICAgICAgXyA9IEpTT04ucGFyc2UoZmV0Y2goXFxcImh0dHBzOi8vYy5tdXNpY2FwcC5taWd1LmNuL01JR1VNMi4wL3YxLjAvY29udGVudC9yZXNvdXJjZWluZm8uZG8/cmVzb3VyY2VUeXBlPTImcmVzb3VyY2VJZD1cXFwiICsga2V5d29yZCkpLnJlc291cmNlWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfLnNvbmdOYW1lICsgJyAtICcgKyBfLnNpbmdlcixcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IF8uYWxidW1JbWdzWzBdLmltZyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBfLnZpcFR5cGUgPyAxIDogMCxcXG4gICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiBfLmNvcHlyaWdodElkXFxuICAgICAgICAgICAgICAgICAgICB9LCAxKTtcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICBjYXNlICcxJzogLy8g5pCc57Si5q2M5Y2VXFxuICAgICAgICAgICAgICAgICAgICBfID0gJC5yZXF1aXJlKFxcXCJtZz9ydWxlPeatjOivjemAgumFjVxcXCIpLmFqYXgoYHBsYXlsaXN0L2luZm8/c29uZ0xpc3RJZD0ke2tleXdvcmR9YCk7XFxuICAgICAgICAgICAgICAgICAgICBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8ucGxheUxpc3ROYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogXy5pbWFnZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAyLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IF8ucGxheUxpc3RJZFxcbiAgICAgICAgICAgICAgICAgICAgfSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH0sXFxuXFxuXFxuXFxuXFxuXFxuICAgIGFqYXg6IGZ1bmN0aW9uKHVyaSwgc2l6ZSwgaGVhZCkge1xcbiAgICAgICAgdXJpID0gU3RyaW5nKHVyaSk7XFxuICAgICAgICBpZiAodXJpLm1hdGNoKC9wbGF5bGlzdFxcXFwvKGxpc3R8c29uZ3NJbmZvKXxiaWxsYm9hcmRcXFxcL2hvbWV8c2VhcmNoXFxcXC9zb25nLykgJiYgIXVyaS5tYXRjaCgnY29sdW1uSWQ9MzgxOTk1ODgnKSlcXG4gICAgICAgICAgICB1cmkgKz0gXFxcIiZwYWdlTnVtPVxcXCIgKyBNWV9QQUdFICsgXFxcIiZwYWdlU2l6ZT1cXFwiICsgKHNpemUgfHwgMzApO1xcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZmV0Y2goXFxcImh0dHBzOi8vbS5tdXNpYy5taWd1LmNuL21pZ3VtdXNpYy9oNS9cXFwiICsgdXJpLCB7XFxuICAgICAgICAgICAgXFxcImhlYWRlcnNcXFwiOiBPYmplY3QuYXNzaWduKHtcXG4gICAgICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly9tLm11c2ljLm1pZ3UuY24vdjQvXFxcIixcXG4gICAgICAgICAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBNT0JJTEVfVUEsXFxuICAgICAgICAgICAgICAgIFxcXCJCeVxcXCI6IG1kNShNT0JJTEVfVUEpLFxcbiAgICAgICAgICAgIH0sIGhlYWQgfHwge30pXFxuICAgICAgICB9KSkuZGF0YTtcXG4gICAgfVxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuKduzVzXCIsXCJwYXRoXCI6XCI1c1wiLFwicnVsZVwiOlwiZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvbGliP3J1bGU95q2M6K+N6YCC6YWNJykpLnJ1bGUpO1xcbmNvbnN0IHRoaXNfcGxhdGZvcm0gPSBcXFwiNXNcXFwiO1xcbiQuZXhwb3J0cyA9IHtcXG5cXG4gICAgaVRhZzogZnVuY3Rpb24oKSB7XFxuICAgICAgICBpVGFnW1xcXCLmjqjojZBcXFwiXSA9IHt9O1xcbiAgICAgICAgaVRhZ1tcXFwi5o6o6I2QXFxcIl1bXFxcIuacgOeDrVxcXCJdID0gXFxcIlxcXCI7XFxuICAgICAgICBpVGFnW1xcXCLmjqjojZBcXFwiXVtcXFwi5pyA5pawXFxcIl0gPSBcXFwiJnR5cGU9MVxcXCI7XFxuICAgICAgICBsZXQgbGlzdCA9IHBkZmEoZmV0Y2goXFxcImh0dHA6Ly81c2luZy5rdWdvdS5jb20vZ2QvZ2RMaXN0XFxcIiksIFxcXCJib2R5JiYucl9saXN0X3RcXFwiKTtcXG4gICAgICAgIGZvciAobGV0IGl0ZW0gb2YgbGlzdCkge1xcbiAgICAgICAgICAgIGxldCB0MSA9IHBkZmgoaXRlbSwgXFxcImgzJiZUZXh0XFxcIik7XFxuICAgICAgICAgICAgaVRhZ1t0MV0gPSB7fTtcXG4gICAgICAgICAgICBwZGZhKGl0ZW0sIFxcXCJ1bCYmbGlcXFwiKS5tYXAoaXQgPT4ge1xcbiAgICAgICAgICAgICAgICB0MiA9IHBkZmgoaXQsIFxcXCJhJiZUZXh0XFxcIik7XFxuICAgICAgICAgICAgICAgIGlUYWdbdDFdW3QyXSA9IHQyO1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICAgICAgaVRhZ1tcXFwi5o6S6KGMXFxcIl0gPSB7XFxuICAgICAgICAgICAg5YWo6YOoOiBbXVxcbiAgICAgICAgfTtcXG4gICAgICAgICQucmVxdWlyZShcXFwiNXM/cnVsZT3mrYzor43pgILphY1cXFwiKS5hamF4KFxcXCJyYW5rL2xpc3RcXFwiKS5tYXAoXyA9PiB7XFxuICAgICAgICAgICAgaWYgKF8ubmFtZSAhPSAn5pSv5oyB5qacJykgaVRhZ1tcXFwi5o6S6KGMXFxcIl1bXFxcIuWFqOmDqFxcXCJdLnB1c2goRXh0cmEoe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogXy5uYW1lLFxcbiAgICAgICAgICAgICAgICBpbWc6IF8ucGhvdG9CaWcgfHwgXy5waG90byxcXG4gICAgICAgICAgICAgICAgY29udGVudDogMyxcXG4gICAgICAgICAgICAgICAgenlpZDogXy5pZFxcbiAgICAgICAgICAgIH0sIDEsIDEpKTtcXG4gICAgICAgIH0pO1xcbiAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcIjVzX2lUYWdcXFwiLCBpVGFnKTtcXG4gICAgfSxcXG5cXG5cXG4gICAgbGF6eTogZnVuY3Rpb24ocGxhdGZvcm0sIHQxLCB0Mikge1xcbiAgICAgICAgc3dpdGNoIChTdHJpbmcocGxhdGZvcm0pKSB7XFxuICAgICAgICAgICAgY2FzZSAnMCc6IC8vIOatjOabsuivpuaDhVxcbiAgICAgICAgICAgICAgICBbdDEsIHR5cGVdID0gdDEuc3BsaXQoJyMnKTtcXG4gICAgICAgICAgICAgICAgdXJpID0gYHNvbmcvZ2V0U29uZ1VybD9zb25naWQ9JHt0MX0mc29uZ3R5cGU9JHt0eXBlfWA7XFxuICAgICAgICAgICAgICAgIF8gPSAkLnJlcXVpcmUoXFxcIjVzP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuYWpheCh1cmkpO1xcbiAgICAgICAgICAgICAgICBpZiAodDIpIHtcXG4gICAgICAgICAgICAgICAgICAgIGFyciA9IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgYXJyMiA9IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKF8ubHF1cmwpXFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2godHNbMV0gKyBTaXplKF8ubHFzaXplKSksIGFycjIucHVzaChfLmxxdXJsKTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChfLmhxdXJsKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKHRzWzJdICsgU2l6ZShfLmhxc2l6ZSkpLCBhcnIyLnB1c2goXy5ocXVybCk7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoXy5zcXVybClcXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaCh0c1szXSArIFNpemUoXy5zcXNpemUpKSwgYXJyMi5wdXNoKF8uc3F1cmwpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoYXJyLCAxLCAn6YCJ5oup5LiL6L296Z+z6LSoJykuc2VsZWN0KChhcnIsIGFycjIpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gYXJyLmluZGV4T2YoaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnZG93bmxvYWQ6Ly8nICsgYXJyMltpXTtcXG4gICAgICAgICAgICAgICAgICAgIH0sIGFyciwgYXJyMik7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgLy8g5q2M6K+NXFxuICAgICAgICAgICAgICAgIHR5cGUgPSB7XFxuICAgICAgICAgICAgICAgICAgICB5YzogMSxcXG4gICAgICAgICAgICAgICAgICAgIGZjOiAyLFxcbiAgICAgICAgICAgICAgICAgICAgYno6IDNcXG4gICAgICAgICAgICAgICAgfVt0eXBlXTtcXG4gICAgICAgICAgICAgICAgdXJsID0gYGh0dHA6Ly9zZXJ2aWNlLjVzaW5nLmt1Z291LmNvbS9zb25nL2RldGFpbD9zb25nSWQ9JHt0MX0mc29uZ1R5cGU9JHt0eXBlfWA7XFxuICAgICAgICAgICAgICAgIGxyYyA9IEpTT04ucGFyc2UoZmV0Y2hQQyh1cmwpKS5kYXRhLmx5cmljcy5yZXBsYWNlKC88YnJcXFxcLz8+L2dpLCBcXFwiXFxcXG5cXFwiKTtcXG4gICAgICAgICAgICAgICAgLy8g6ZO+5o6lXFxuICAgICAgICAgICAgICAgIHVybCA9IF8ubHF1cmwgfHwgXy5ocXVybCB8fCBfLnNxdXJsO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICAgICAgdXJsczogW3VybCArICcjaXNNdXNpYz10cnVlIyddLFxcbiAgICAgICAgICAgICAgICAgICAgbHlyaWM6IGxyY1xcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgY2FzZSAnMSc6IC8v6aaW6aG1XFxuICAgICAgICAgICAgICAgIGxldCBodG1sID0gZmV0Y2goXFxcImh0dHA6Ly81c2luZy5rdWdvdS5jb20vZ2QvZ2RMaXN0PyZ0YWdOYW1lPVxcXCIgKyB0MSArIFxcXCImcGFnZT1cXFwiICsgTVlfUEFHRSk7XFxuICAgICAgICAgICAgICAgIGxldCBsaXN0ID0gcGRmYShodG1sLCBcXFwiYm9keSYmLmFsYnVtXFxcIik7XFxuICAgICAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgbGlzdCkge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gcGRmaChpdGVtLCBcXFwiLmp4X25hbWUmJlRleHRcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBpbWcgPSBwZGZoKGl0ZW0sIFxcXCJpbWcmJnNyY1xcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHp5aWQgPSBwZGZoKGl0ZW0sIFxcXCJhLDEmJnNvbmdsaXN0aWRcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogMixcXG4gICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiB6eWlkXFxuICAgICAgICAgICAgICAgICAgICB9LCAxKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgY2FzZSAnMic6IC8vIOWPkeeOsFxcbiAgICAgICAgICAgICAgICBpZiAoTVlfUEFHRSA9PSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICB1cmkgPSBcXFwic29uZy9nZXRzb25nbGlzdHNvbmc/aWQ9XFxcIiArIHQxO1xcbiAgICAgICAgICAgICAgICAgICAgXyA9ICQucmVxdWlyZShcXFwiNXM/cnVsZT3mrYzor43pgILphY1cXFwiKS5hamF4KHVyaSk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSBfID0gW107XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIGNhc2UgJzMnOiAvLyDmjpLooYxcXG4gICAgICAgICAgICAgICAgdXJpID0gXFxcInJhbmsvZGV0YWlsP3BhZ2VzaXplPTMwJnBhZ2VpbmRleD1cXFwiICsgTVlfUEFHRSArIFxcXCImaWQ9XFxcIiArIHQxO1xcbiAgICAgICAgICAgICAgICBfID0gJC5yZXF1aXJlKFxcXCI1cz9ydWxlPeatjOivjemAgumFjVxcXCIpLmFqYXgodXJpKS5zb25ncztcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICB9XFxuICAgICAgICBkID0gW107XFxuICAgICAgICBfLm1hcChfID0+IHtcXG4gICAgICAgICAgICBpZiAoXy5TVCA9PSB1bmRlZmluZWQgfHwgXy5TVCA+IDApIEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IF8uU04gKyAnIC0gJyArIF8udXNlci5OTixcXG4gICAgICAgICAgICAgICAgaW1nOiBfLnVzZXIuSSxcXG4gICAgICAgICAgICAgICAgY29udGVudDogXy5TSyxcXG4gICAgICAgICAgICAgICAgenlpZDogXy5JRCArICcjJyArIF8uU0tcXG4gICAgICAgICAgICB9LCAxKTtcXG4gICAgICAgIH0pO1xcbiAgICAgICAgc2V0UmVzdWx0KGQpO1xcbiAgICB9LFxcblxcblxcblxcbiAgICBzZWFyY2g6IGZ1bmN0aW9uKHBsYXRmb3JtLCBrZXl3b3JkLCBpc1UpIHtcXG4gICAgICAgIGlmIChpc1UgIT0gXFxcInVybFxcXCIpIHtcXG4gICAgICAgICAgICBmaWx0ZXIgPSB7XFxuICAgICAgICAgICAgICAgIGxpYjogMCxcXG4gICAgICAgICAgICAgICAgeWM6IDEsXFxuICAgICAgICAgICAgICAgIGZjOiAyLFxcbiAgICAgICAgICAgICAgICBiejogM1xcbiAgICAgICAgICAgIH1baXNVXTtcXG4gICAgICAgICAgICBzdXJsID0gKHN0eXBlKSA9PiBKU09OLnBhcnNlKGZldGNoUEMoXFxcImh0dHA6Ly9zZWFyY2guNXNpbmcua3Vnb3UuY29tL2hvbWUvanNvbj9rZXl3b3JkPVxcXCIgKyBrZXl3b3JkICsgXFxcIiZzb3J0PTEmcGFnZT1cXFwiICsgTVlfUEFHRSArIFxcXCImZmlsdGVyPVxcXCIgKyBmaWx0ZXIgKyBcXFwiJnR5cGU9XFxcIiArIHN0eXBlKSkubGlzdDtcXG4gICAgICAgICAgICBzd2l0Y2ggKFN0cmluZyhwbGF0Zm9ybSkpIHtcXG4gICAgICAgICAgICAgICAgY2FzZSAnMCc6IC8vIOaQnOe0ouWNleabslxcbiAgICAgICAgICAgICAgICAgICAgc3VybCgnMCcpLm1hcChfID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKF8sIEpTT04ucGFyc2UoZmV0Y2hQQyhgaHR0cDovL3NlcnZpY2UuNXNpbmcua3Vnb3UuY29tL3NvbmcvZGV0YWlsP3NvbmdJZD0ke18uc29uZ0lkfSZzb25nVHlwZT0ke18udHlwZX1gKSkuZGF0YSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXy5zb25nTmFtZSArICcgLSAnICsgXy5uaWNrTmFtZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBfLmltYWdlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBfLnR5cGVFbmFtZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogXy5zb25nSWQgKyAnIycgKyBfLnR5cGVFbmFtZVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgY2FzZSAnMSc6IC8vIOaQnOe0ouatjOWNlVxcbiAgICAgICAgICAgICAgICAgICAgc3VybCgnMScpLm1hcChfID0+IEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXy50aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IF8ucGljdHVyZVVybCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAyLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IF8uc29uZ0xpc3RJZFxcbiAgICAgICAgICAgICAgICAgICAgfSwgMSkpO1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBlbHNlIHsgLy8g5pCc57SiIOWIhuS6q+mTvuaOpVxcbiAgICAgICAgICAgIHN3aXRjaCAoU3RyaW5nKHBsYXRmb3JtKSkge1xcbiAgICAgICAgICAgICAgICBjYXNlICcwJzogLy8g5pCc57Si5Y2V5puyXFxuICAgICAgICAgICAgICAgICAgICBbdDEsIHQyXSA9IGtleXdvcmQuc3BsaXQoJyMnKTtcXG4gICAgICAgICAgICAgICAgICAgIHQzID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHljOiAxLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZjOiAyLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ6OiAzXFxuICAgICAgICAgICAgICAgICAgICB9W3QyXTtcXG4gICAgICAgICAgICAgICAgICAgIF8gPSBKU09OLnBhcnNlKGZldGNoUEMoYGh0dHA6Ly9zZXJ2aWNlLjVzaW5nLmt1Z291LmNvbS9zb25nL2RldGFpbD9zb25nSWQ9JHt0MX0mc29uZ1R5cGU9JHt0M31gKSkuZGF0YTtcXG4gICAgICAgICAgICAgICAgICAgIEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXy5zb25nTmFtZSArICcgLSAnICsgXy5uaWNrTmFtZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IF8uaW1hZ2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogdDIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgenlpZDoga2V5d29yZFxcbiAgICAgICAgICAgICAgICAgICAgfSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgY2FzZSAnMSc6IC8vIOaQnOe0ouatjOWNlVxcbiAgICAgICAgICAgICAgICAgICAgdXJpID0gXFxcInNvbmcvZ2V0c29uZ2xpc3Q/aWQ9XFxcIiArIGtleXdvcmQ7XFxuICAgICAgICAgICAgICAgICAgICBfID0gJC5yZXF1aXJlKFxcXCI1cz9ydWxlPeatjOivjemAgumFjVxcXCIpLmFqYXgodXJpKTtcXG4gICAgICAgICAgICAgICAgICAgIEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXy5ULFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogXy5QIHx8IF8udXNlci5sLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IDIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogXy5JRFxcbiAgICAgICAgICAgICAgICAgICAgfSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIGFqYXg6IGZ1bmN0aW9uKHVyaSkge1xcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZmV0Y2goXFxcImh0dHA6Ly9tb2JpbGVhcGkuNXNpbmcua3Vnb3UuY29tL1xcXCIgKyB1cmkpKS5kYXRhO1xcbiAgICB9XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi4p28bXlcIixcInBhdGhcIjpcIm15XCIsXCJydWxlXCI6XCJldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9saWI/cnVsZT3mrYzor43pgILphY0nKSkucnVsZSk7XFxuY29uc3QgdGhpc19wbGF0Zm9ybSA9IFxcXCJteVxcXCI7XFxuJC5leHBvcnRzID0ge1xcblxcbiAgICBpVGFnOiBmdW5jdGlvbigpIHtcXG4gICAgICAgICQucmVxdWlyZSgnd3k/cnVsZT3mrYzor43pgILphY0nKS5pVGFnKDEpO1xcbiAgICAgICAgaVRhZ1tcXFwi5o6S6KGMXFxcIl1bXFxcIuWFqOmDqFxcXCJdID0gJC5yZXF1aXJlKCd3eT9ydWxlPeatjOivjemAgumFjScpLmFqYXgoXFxcInRvcGxpc3Q/XFxcIikubGlzdC5tYXAoXyA9PiBFeHRyYSh7XFxuICAgICAgICAgICAgdGl0bGU6IF8ubmFtZSxcXG4gICAgICAgICAgICBpbWc6IF8uY292ZXJJbWdVcmwsXFxuICAgICAgICAgICAgY29udGVudDogMyxcXG4gICAgICAgICAgICB6eWlkOiBfLmlkXFxuICAgICAgICB9LCAxLCAxKSk7XFxuICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihcXFwibXlfaVRhZ1xcXCIsIGlUYWcpO1xcbiAgICB9LFxcblxcblxcbiAgICBsYXp5OiBmdW5jdGlvbihwbGF0Zm9ybSwgdDEsIHQyKSB7XFxuICAgICAgICBzd2l0Y2ggKFN0cmluZyhwbGF0Zm9ybSkpIHtcXG4gICAgICAgICAgICBjYXNlICcwJzogLy8g6K+m5oOFXFxuICAgICAgICAgICAgICAgIGlmICh0Mikge1xcbiAgICAgICAgICAgICAgICAgICAgYXJyID0gW3RzWzBdICsgOTYsIHRzWzFdICsgMTI4LCB0c1syXSArIDMyMCwgdHNbM10gKyAyMDAwXTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKGFyciwgMSwgJ+mAieaLqeS4i+i9vemfs+i0qCcpLnNlbGVjdCgodDEpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0MiA9IGlucHV0LnNwbGl0KCfjgJEnKVsxXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSAkLnJlcXVpcmUoXFxcIm15P3J1bGU95q2M6K+N6YCC6YWNXFxcIikuYWpheChcXFwibGlua1xcXCIsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHQxLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFsaXR5OiB0MlxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IEpTT04ucGFyc2UoZmV0Y2godXJsLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ubHlIZWFkZXJzOiB0cnVlXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpLnVybDtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2Rvd25sb2FkOi8vJyArIHVybDtcXG4gICAgICAgICAgICAgICAgICAgIH0sIHQxKTtcXG4gICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgICBscmMgPSAkLnJlcXVpcmUoXFxcIm15P3J1bGU95q2M6K+N6YCC6YWNXFxcIikuYWpheChcXFwibHlyaWNcXFwiLCB7XFxuICAgICAgICAgICAgICAgICAgICBpZDogdDFcXG4gICAgICAgICAgICAgICAgfSkubHJjO1xcbiAgICAgICAgICAgICAgICB1cmxzID0gW107XFxuICAgICAgICAgICAgICAgIGZvciAocXVhbGl0eSBvZiBbOTYsIDEyOCwgMzIwLCAyMDAwXSlcXG4gICAgICAgICAgICAgICAgICAgIHVybHMucHVzaCgkLnJlcXVpcmUoXFxcIm15P3J1bGU95q2M6K+N6YCC6YWNXFxcIikuYWpheChcXFwibGlua1xcXCIsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogdDEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgcXVhbGl0eTogcXVhbGl0eSArICcnXFxuICAgICAgICAgICAgICAgICAgICB9KSArICcjaXNNdXNpYz10cnVlIycpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICAgICAgdXJsczogdXJscyxcXG4gICAgICAgICAgICAgICAgICAgIG5hbWVzOiBbJ+a1geeVhScsICfmoIflh4YnLCAn6auY5ZOBJywgJ+aXoOaNnyddLFxcbiAgICAgICAgICAgICAgICAgICAgbHlyaWM6IGxyY1xcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgY2FzZSAnMSc6IC8v6aaW6aG1XFxuICAgICAgICAgICAgICAgIGlmICghdDEubWF0Y2goL1xcXFw/LykpIHQxID0gXFxcInRvcC9wbGF5bGlzdD9jYXQ9XFxcIiArIHQxICsgXFxcIiZcXFwiO1xcbiAgICAgICAgICAgICAgICBfID0gJC5yZXF1aXJlKCd3eT9ydWxlPeatjOivjemAgumFjScpLmFqYXgodDEpO1xcbiAgICAgICAgICAgICAgICAoXy5yZXN1bHQgfHwgXy5wbGF5bGlzdHMpLm1hcChfID0+IEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfLm5hbWUsXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IF8uY292ZXJJbWdVcmwgfHwgXy5waWNVcmwsXFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAyLFxcbiAgICAgICAgICAgICAgICAgICAgenlpZDogXy5pZFxcbiAgICAgICAgICAgICAgICB9LCAxKSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBjYXNlICcyJzogLy8g5Y+R546wXFxuICAgICAgICAgICAgY2FzZSAnMyc6IC8vIOaOkuihjFxcbiAgICAgICAgICAgICAgICBpZiAoTVlfUEFHRSA9PSAxKVxcbiAgICAgICAgICAgICAgICAgICAgXyA9ICQucmVxdWlyZShcXFwibXk/cnVsZT3mrYzor43pgILphY1cXFwiKS5hamF4KFxcXCJzZWFyY2gvcGxheWxpc3RcXFwiLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFxcXCJkXFxcIiArIHQxXFxuICAgICAgICAgICAgICAgICAgICB9KS5saXN0O1xcbiAgICAgICAgICAgICAgICBlbHNlXFxuICAgICAgICAgICAgICAgICAgICBfID0gW107XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgfVxcbiAgICAgICAgZCA9IFtdO1xcbiAgICAgICAgXy5tYXAoXyA9PiBFeHRyYSh7XFxuICAgICAgICAgICAgdGl0bGU6IF8ubmFtZSArIChfLmFydGlzdCA/ICcgLSAnICsgXy5hcnRpc3QubWFwKF8gPT4gXy5uYW1lKS5qb2luKCcmJykgOiBcXFwiXFxcIiksXFxuICAgICAgICAgICAgaW1nOiBfLnBpYyB8fCBfLmFsYnVtLnBpYyxcXG4gICAgICAgICAgICBjb250ZW50OiAnd3knLFxcbiAgICAgICAgICAgIHp5aWQ6IF8uaGFzaCB8fCBfLmlkXFxuICAgICAgICB9LCAxKSk7XFxuICAgICAgICBzZXRSZXN1bHQoZCk7XFxuICAgIH0sXFxuXFxuXFxuXFxuXFxuICAgIHNlYXJjaDogZnVuY3Rpb24ocGxhdGZvcm0sIGtleXdvcmQsIHN0eXBlLCBpc05ldykge1xcbiAgICAgICAgc3dpdGNoIChTdHJpbmcocGxhdGZvcm0pKSB7XFxuICAgICAgICAgICAgY2FzZSAnMCc6IC8vIOaQnOe0ouWNleabslxcbiAgICAgICAgICAgICAgICBzdHlwZSA9IHN0eXBlIHx8ICd3eSc7XFxuICAgICAgICAgICAgICAgIHN0eXBlMiA9IHtcXG4gICAgICAgICAgICAgICAgICAgICd3eSc6ICdZUUQnLFxcbiAgICAgICAgICAgICAgICAgICAgJ2t3JzogJ1lRQicsXFxuICAgICAgICAgICAgICAgICAgICAnbWcnOiBpc05ldyA/ICdZUU0nIDogJ21pZ3UnLFxcbiAgICAgICAgICAgICAgICAgICAgJzF0JzogJzF0aW5nJyxcXG4gICAgICAgICAgICAgICAgICAgICdkYic6ICdkb3ViYW4nLFxcbiAgICAgICAgICAgICAgICAgICAgJzV5JzogJ3d1c2luZ3ljJyxcXG4gICAgICAgICAgICAgICAgICAgICc1Zic6ICd3dXNpbmdmYydcXG4gICAgICAgICAgICAgICAgfVtzdHlwZV07XFxuXFxuICAgICAgICAgICAgICAgIGlmIChpc05ldykge1xcbiAgICAgICAgICAgICAgICAgICAgXyA9ICQucmVxdWlyZShcXFwibXk/cnVsZT3mrYzor43pgILphY1cXFwiKS5hamF4KCdzZWFyY2gnLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogc3R5cGUyLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGtleXdvcmQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogTVlfUEFHRSxcXG4gICAgICAgICAgICAgICAgICAgICAgICB2OiAnYmV0YSdcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgKF8ubGlzdCB8fCBbXSkubWFwKF8gPT4gRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfLm5hbWUgKyAoXy5hcnRpc3QgPyAnIC0gJyArIF8uYXJ0aXN0Lm1hcChfID0+IF8ubmFtZSkuam9pbignJicpIDogXFxcIlxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogXy5waWMgfHwgXy5hbGJ1bS5waWMsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogc3R5cGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogXy5oYXNoIHx8IF8uaWRcXG4gICAgICAgICAgICAgICAgICAgIH0sIDEpKTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIGJvZHkgPSBcXFwidGV4dD1cXFwiICsga2V5d29yZCArIFxcXCImcGFnZT1cXFwiICsgTVlfUEFHRSArIFxcXCImdHlwZT1cXFwiICsgc3R5cGUyO1xcbiAgICAgICAgICAgICAgICAgICAgYm9keSA9ICQucmVxdWlyZShcXFwibXk/cnVsZT3mrYzor43pgILphY1cXFwiKS5vbGRfZW5jb2RlKGJvZHkpO1xcbiAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZShmZXRjaChcXFwiaHR0cDovL2FwaTIubGl1bWluZ3llLmNuL20vYXBpL3NlYXJjaFxcXCIsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogTU9CSUxFX1VBLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnT3JpZ2luJzogJ2h0dHBzOi8vdG9vbC5saXVtaW5neWUuY24nXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5OiBib2R5LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogXFxcIlBPU1RcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9KSkuZGF0YS5saXN0Lm1hcChfID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBMYXp5KCdteScsIF8uaWQpXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJscyA9IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzID0gW107XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF8udXJsX200YSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJscy5wdXNoKF8udXJsX200YSArICcjaXNNdXNpYz10cnVlIycpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lcy5wdXNoKHRzWzBdKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXy51cmxfMTI4KVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxzLnB1c2goXy51cmxfMTI4ICsgJyNpc011c2ljPXRydWUjJyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzLnB1c2godHNbMV0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfLnVybF8zMjApXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybHMucHVzaChfLnVybF8zMjAgKyAnI2lzTXVzaWM9dHJ1ZSMnKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXMucHVzaCh0c1syXSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF8udXJsX2ZsYWMpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybHMucHVzaChfLnVybF9mbGFjICsgJyNpc011c2ljPXRydWUjJyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzLnB1c2godHNbM10pO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgIEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8ubmFtZSArICcgLSAnICsgXy5hcnRpc3QsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogXy5jb3ZlciB8fCBfLnBpYyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogc3R5cGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IF8uaWRcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAxLCAwLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybHM6IHVybHMsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzOiBuYW1lcyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbHlyaWM6IF8ubHJjXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBjYXNlICcxJzogLy8g5pCc57Si5q2M5Y2VXFxuICAgICAgICAgICAgICAgICQucmVxdWlyZShcXFwid3k/cnVsZT3mrYzor43pgILphY1cXFwiKS5zZWFyY2goMSwga2V5d29yZCwgMSkubWFwKF8gPT4gRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8ubmFtZSxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogXy5jb3ZlckltZ1VybCxcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IDIsXFxuICAgICAgICAgICAgICAgICAgICB6eWlkOiBfLmlkXFxuICAgICAgICAgICAgICAgIH0sIDEpKTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICB9XFxuICAgIH0sXFxuXFxuXFxuXFxuXFxuXFxuICAgIGFqYXg6IGZ1bmN0aW9uKHBhdGgsIGJvZHkpIHtcXG4gICAgICAgIHVybCA9IFxcXCJodHRwczovL2FwaS5saXVtaW5neWUuY24vbS9hcGkvXFxcIiArIHBhdGg7XFxuICAgICAgICBib2R5Ll90ID0gRGF0ZS5ub3coKSArICcnXFxuICAgICAgICBib2R5LnRva2VuID0gJC5yZXF1aXJlKFxcXCJteT9ydWxlPeatjOivjemAgumFjVxcXCIpLm5ld190b2tlbihib2R5KTtcXG4gICAgICAgIGlmIChib2R5LnF1YWxpdHkgIT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgdXJpID0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgZm9yIChrZXkgaW4gYm9keSlcXG4gICAgICAgICAgICAgICAgdXJpICs9ICcmJyArIGtleSArICc9JyArIGJvZHlba2V5XTtcXG4gICAgICAgICAgICB1cmkgPSBTdHJpbmcodXJpKS5yZXBsYWNlKC9eJi8sICc/Jyk7XFxuICAgICAgICAgICAgcmV0dXJuIHVybCArIHVyaTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZmV0Y2godXJsLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogTU9CSUxFX1VBLFxcbiAgICAgICAgICAgICAgICAgICAgJ09yaWdpbic6ICdodHRwczovL3Rvb2wubGl1bWluZ3llLmNuJyxcXG4gICAgICAgICAgICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJvZHkpLFxcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFxcXCJQT1NUXFxcIlxcbiAgICAgICAgICAgIH0pKS5kYXRhO1xcbiAgICAgICAgfVxcbiAgICB9LFxcblxcblxcblxcbiAgICBuZXdfdG9rZW46IGZ1bmN0aW9uKGJvZHkpIHtcXG4gICAgICAgIFt0LCBlLCBBc10gPSBbXFxuICAgICAgICAgICAgW1xcbiAgICAgICAgICAgICAgICBcXFwiMjAyMzAzMjcuXFxcIixcXG4gICAgICAgICAgICAgICAgXFxcInlHejRuOVhFOXhZeTJPajVVYjdFNnU5YTVwNWFJV1pZZTUzT3JxNXdFNVVnbmpiV3EwNDEwV1R2bUxCTzFaMk5cXFwiLFxcbiAgICAgICAgICAgICAgICBcXFwicFc4amcvbWtlNmNPMUY0Q1R1YWlzd2haZlFHek15cTVOSlJMUFZJdkR4bEE3PUUzWXJTVW9IMGIyQlhLbjl0ZCtcXFwiXFxuICAgICAgICAgICAgXSxcXG4gICAgICAgICAgICBbXFxuICAgICAgICAgICAgICAgIFxcXCIyMDIyMTIyMi5cXFwiLFxcbiAgICAgICAgICAgICAgICBcXFwiSDJodXV3WGY4d045Q3g1SzNsRVFrZGc0VlRDSnFJYjQ0MFFRWDk1T1F5ZTFEMDkyMjkyQkk2cmdqRmdLOW1jeFxcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCJRc1ZtdDRycHFQRkp5V2NnMVkvU1JBdUxNVGVkQjM3NVhaTkRsT0d4ajZiMnZhbjk9QzhVaEhLRSt3aWZJa296MFxcXCJcXG4gICAgICAgICAgICBdXFxuICAgICAgICBdWzBdO1xcbiAgICAgICAgdmFyIGEsIGIsIGMsIGQsXFxuICAgICAgICAgICAgdiA9IDAsXFxuICAgICAgICAgICAgdGsgPSBcXFwiXFxcIjtcXG4gICAgICAgIGUgPSBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoYm9keSkpLnNwbGl0KFxcXCJcXFwiKVxcbiAgICAgICAgICAgIC5tYXAoKHQsIGkpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHQuY2hhckNvZGVBdCgwKSBeIGUuY2hhckNvZGVBdChNYXRoLmZsb29yKGkgJSA2NCkpXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIGkgPSBlLmxlbmd0aCAlIDNcXG4gICAgICAgIGRvIHtcXG4gICAgICAgICAgICBhID0gZVt2KytdXFxuICAgICAgICAgICAgYiA9IGVbdisrXVxcbiAgICAgICAgICAgIGMgPSBlW3YrK11cXG4gICAgICAgICAgICBkID0gYSA8PCAxNiB8IGIgPDwgOCB8IGNcXG4gICAgICAgICAgICBhID0gZCA+PiAxOCAmIDYzXFxuICAgICAgICAgICAgYiA9IGQgPj4gMTIgJiA2M1xcbiAgICAgICAgICAgIGMgPSBkID4+IDYgJiA2M1xcbiAgICAgICAgICAgIGQgPSBkICYgNjNcXG4gICAgICAgICAgICB0ayArPSBBcy5jaGFyQXQoYSkgKyBBcy5jaGFyQXQoYikgKyBBcy5jaGFyQXQoYykgKyBBcy5jaGFyQXQoZClcXG4gICAgICAgIH0gd2hpbGUgKHYgPCBlLmxlbmd0aClcXG4gICAgICAgIHJldHVybiB0ICsgbWQ1KGkgPT0gMCA/IHRrIDogdGsuc2xpY2UoMCwgaSAtIDMpICsgJz09PScuc2xpY2UoaSB8fCAzKSlcXG4gICAgfSxcXG5cXG5cXG5cXG4gICAgb2xkX2VuY29kZTogZnVuY3Rpb24oZSkge1xcbiAgICAgICAgdmFyIHAgPSBtZDUoXFxcIjxHNnNYLExrfl4yOlklNFpcXFwiKTtcXG4gICAgICAgIHZhciBhID0gbWQ1KHAuc3Vic3RyKDE2LCAzMikpO1xcbiAgICAgICAgdmFyIHQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDAgKyA4NjQwMCA+PiAwO1xcbiAgICAgICAgdmFyIHQgPSB0ICsgbWQ1KGUgKyBhKS5zdWJzdHIoMCwgMTYpICsgZTtcXG4gICAgICAgIHZhciBFID0gZSA9IFxcXCJcXFwiO1xcbiAgICAgICAgdmFyIFI0ID0gUig0KTtcXG4gICAgICAgIGZvciAoaSBpbiB0KSB7XFxuICAgICAgICAgICAgaSA9IHQuY2hhckNvZGVBdChpKVxcbiAgICAgICAgICAgIGlmIChpIDwgMTI4KSB7XFxuICAgICAgICAgICAgICAgIGUgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShpKVxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGUgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShpID4+IDEyIHwgMjI0KVxcbiAgICAgICAgICAgICAgICBlICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoaSA+PiA2ICYgNjMgfCAxMjgpXFxuICAgICAgICAgICAgICAgIGUgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShpICYgNjMgfCAxMjgpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgdmFyIGEgPSBtZDUocC5zdWJzdHIoMCwgMTYpKTtcXG4gICAgICAgIHZhciBhID0gYSArIG1kNShhICsgUjQpO1xcbiAgICAgICAgcCA9IFtdO1xcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSBwW2ldID0gaTtcXG4gICAgICAgIEkgPSBiID0gYyA9IHQgPSAwO1xcbiAgICAgICAgZm9yIChpIGluIHApIHtcXG4gICAgICAgICAgICBJID0gKEkgKyBwW2ldICsgYVtpICUgNjRdLmNoYXJDb2RlQXQoKSkgJSAyNTZcXG4gICAgICAgICAgICBYID0gcFtpXVxcbiAgICAgICAgICAgIHBbaV0gPSBwW0ldXFxuICAgICAgICAgICAgcFtJXSA9IFhcXG4gICAgICAgIH1cXG4gICAgICAgIGZvciAoaSBpbiBlKSB7XFxuICAgICAgICAgICAgSSA9IE51bWJlcihpKSArIDE7XFxuICAgICAgICAgICAgWCA9IHBbSV07XFxuICAgICAgICAgICAgYiA9IChiICsgWCkgJSAyNTY7XFxuICAgICAgICAgICAgcFtJXSA9IHBbYl07XFxuICAgICAgICAgICAgcFtiXSA9IFg7XFxuICAgICAgICAgICAgRSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKFxcbiAgICAgICAgICAgICAgICBlW2ldLmNoYXJDb2RlQXQoKSBeXFxuICAgICAgICAgICAgICAgIHBbKHBbSV0gKyBwW2JdKSAlIDI1Nl1cXG4gICAgICAgICAgICApO1xcbiAgICAgICAgfVxcbiAgICAgICAgdmFyIFogPSBcXFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODktX1xcXCI7XFxuICAgICAgICBmb3IgKFxcbiAgICAgICAgICAgIHZhciBPID0gXFxcIlxcXCI7IEUuY2hhckF0KHQgfCAwKSB8fCAoWiA9ICc9JywgdCAlIDEpOyBPICs9IFouY2hhckF0KDYzICYgYyA+PiA4IC0gdCAlIDEgKiA4KVxcbiAgICAgICAgKSBjID0gYyA8PCA4IHwgRS5jaGFyQ29kZUF0KHQgKz0gMC43NSk7XFxuICAgICAgICByZXR1cm4gXFxcImRhdGE9XFxcIiArIFI0ICsgTyArIFxcXCImdj0yXFxcIjtcXG4gICAgfVxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuKdvXF0XCIsXCJwYXRoXCI6XCJxdFwiLFwicnVsZVwiOlwiZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvbGliP3J1bGU95q2M6K+N6YCC6YWNJykpLnJ1bGUpO1xcbmNvbnN0IHRoaXNfcGxhdGZvcm0gPSAncXQnO1xcbkxyYyA9IGxyYyA9PiB7XFxuICAgIG4gPSBscmMucmVwbGFjZSgvXFxcXHMqKChcXFxcbnwoXFxcXHUwMDNjfDwpXFxcXC8/KGJyfHApXFxcXC8/KFxcXFx1MDAzZXw+KSlcXFxccyopK1xcXFxzKi9naSwgJ1xcXFxuJykudHJpbSgpLnNwbGl0KC9cXFxcbi8pO1xcbiAgICByZXR1cm4gbi5tYXAoKGxpbmVMeXJpYywgaSkgPT4ge1xcbiAgICAgICAgdGltZSA9IGkgLyBuLmxlbmd0aCAqIDIwMDtcXG4gICAgICAgIG0gPSBNYXRoLmZsb29yKHRpbWUgLyA2MCk7XFxuICAgICAgICBzID0gKHRpbWUgJSA2MCkudG9GaXhlZCgzKTtcXG4gICAgICAgIHJldHVybiBgWyR7bS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9OiR7cy5wYWRTdGFydCg2LCAnMCcpfV1gICsgbGluZUx5cmljXFxuICAgIH0pLmpvaW4oJ1xcXFxuJyk7XFxufVxcbmp1aWNlcyA9IF8gPT4gXy5yZXNwb25zZTtcXG5xaWFucWlhbiA9ICh1cmksIGpzb24pID0+IHtcXG4gICAganNvbi5hcHBpZCA9IFxcXCIxNjA3MzM2MFxcXCI7XFxuICAgIGpzb24udGltZXN0YW1wID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMWUzKTtcXG4gICAgYm9keSA9IE9iamVjdC5rZXlzKGpzb24pLnNvcnQoKVxcbiAgICAgICAgLm1hcChrZXkgPT4ga2V5ICsgJz0nICsganNvbltrZXldKS5qb2luKCcmJyk7XFxuICAgIGJvZHkgKz0gXFxcIiZzaWduPVxcXCIgKyBtZDUoYm9keSArIFxcXCIwYjUwYjAyZmQwZDczYTljNGM4YzNhNzgxYzMwODQ1ZlxcXCIpO1xcbiAgICB1ID0gYGh0dHBzOi8vbXVzaWMuOTFxLmNvbS92MS8ke3VyaX0/YCArIGJvZHk7XFxuICAgIHJldHVybiBKU09OLnBhcnNlKGZldGNoKHUpKS5kYXRhO1xcbn1cXG4kLmV4cG9ydHMgPSB7XFxuICAgIHNlYXJjaDogZnVuY3Rpb24ocGxhdGZvcm0sIGtleXdvcmQsIHBsYXRmb3JtMikge1xcbiAgICAgICAgc3dpdGNoIChTdHJpbmcocGxhdGZvcm0pKSB7XFxuICAgICAgICAgICAgY2FzZSAnMCc6XFxuICAgICAgICAgICAgICAgIHN3aXRjaCAoU3RyaW5nKHBsYXRmb3JtMikpIHtcXG5cXG5cXG5cXG5cXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2JkJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICBxaWFucWlhbihcXFwic2VhcmNoXFxcIiwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkOiBrZXl3b3JkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlTm86IE1ZX1BBR0VcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS50eXBlVHJhY2subWFwKF8gPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIV8uaXNWaXApIEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfLnRpdGxlICsgJyAtICcgKyBfLmFydGlzdC5tYXAoXyA9PiBfLm5hbWUpLmpvaW4oJyYnKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogXy5waWMsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnYmQnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogXy5pZCArICcjYmQnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnenonOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHUgPSAnaHR0cHM6Ly96ejEyMy5jb20nO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIEpTT04ucGFyc2UocG9zdCh1ICsgJy9hamF4LycsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keTogXFxcImFjdD1zZWFyY2gma2V5PVxcXCIgKyBrZXl3b3JkICsgXFxcIiZsYW5nPSZwYWdlPVxcXCIgKyBNWV9QQUdFXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpLmRhdGEubWFwKF8gPT4gRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXy5tbmFtZSArICcgLSAnICsgXy5zbmFtZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiB1ICsgXy5waWMucmVwbGFjZSgvXFxcXD8uKi8sICcnKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogJ3p6JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogXy5pZCArICcjenonXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnbmknOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChNWV9QQUdFID09IDEpIGh0bSA9IFxcXCItMS5odG1cXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaHRtID0gXFxcIi0xLVxcXCIgKyBNWV9QQUdFICsgXFxcIi5odG1cXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleXdvcmQgPSBlbmNvZGVVUklDb21wb25lbnQoa2V5d29yZCkucmVwbGFjZSgvLS9nLCAnXzJkJykucmVwbGFjZSgvJS9nLCAnXycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgPSBmZXRjaENvZGVCeVdlYlZpZXcoXFxcImh0dHBzOi8vd3d3LmhpZmluaS5jb20vc2VhcmNoLVxcXCIgKyBrZXl3b3JkICsgaHRtLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdibG9ja1J1bGVzJzogWycuanMnLCAnLmNzcycsICcucG5nJ10sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ6IDUwMDBcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gcGRmYShodG1sLCBcXFwiYm9keSYmbGkubWVkaWFbZGF0YS10aWRdXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpdGVtIG9mIGxpc3QpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBkZmgoaXRlbSwgXFxcImEsMiYmVGV4dFxcXCIpICE9IFxcXCLnibnkvptcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSA9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGRmaChpdGVtLCBcXFwiYSwxJiZUZXh0XFxcIikuc3BsaXQoXFxcIuOAi1xcXCIpWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSB0aXRsZS5zcGxpdChcXFwi44CKXFxcIikucmV2ZXJzZSgpLmpvaW4oJyAtICcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IFxcXCJodHRwczovL3d3dy5oaWZpbmkuY29tL1xcXCIgKyBwZGZoKGl0ZW0sIFxcXCJpbWcmJnNyY1xcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICduaScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogcGRmaChpdGVtLCBcXFwiYSwxJiZocmVmXFxcIikucmVwbGFjZSgvXFxcXEQvZywgJycpICsgJyNuaSdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZnAnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IHBkZmEoZmV0Y2goXFxcImh0dHBzOi8vd3d3LmZhbmdwaS5uZXQvcy9cXFwiICsga2V5d29yZCksIFxcXCJib2R5JiZbY2xhc3M9cm93XVxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGl0ZW0gb2YgbGlzdCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGl0ZW0sIFxcXCJkaXYsMSYmVGV4dFxcXCIpICsgJyAtICcgKyBwZGZoKGl0ZW0sIFxcXCJkaXYsMiYmVGV4dFxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogJC5yZXF1aXJlKCdpbWFnZT9ydWxlPeatjOivjemAgumFjScpKCdmcCcpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICdmcCcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogcGRmaChpdGVtLCBcXFwiYSwwJiZocmVmXFxcIikucmVwbGFjZSgvXFxcXEQvZywgJycpICsgJyNmcCdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnc3QnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBwZGZhKGZldGNoKGBodHRwOi8vd3d3LnNvbmd0YXN0ZS5jby9kYW5jZS9zZWFyY2g/a2V5PSR7a2V5d29yZH0mcGFnZT0ke01ZX1BBR0V9YCksIFxcXCJib2R5JiYubWxpc3QmJmxpXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpdGVtIG9mIGxpc3QpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoaXRlbSwgXFxcIi50ZDMmJlRleHRcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogcGRmaChpdGVtLCBcXFwiaW1nJiZzcmNcXFwiKS5yZXBsYWNlKCdwaWNkYXRhJywgJ2F0dGFjaG1lbnQnKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICdzdCcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiBwZGZoKGl0ZW0sIFxcXCIudGQzJiZhJiZocmVmXFxcIikucmVwbGFjZSgvLipcXFxcLy8sICcnKSArICcjc3QnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG5cXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2h0JzpcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoTVlfUEFHRSA9PSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBwZGZhKGZldGNoKFxcXCJodHRwOi8vbS5odHF5eS5jb20vc2VhcmNoL3Jlc3VsdD9pZD1cXFwiICsga2V5d29yZCksIFxcXCJib2R5JiZsaVxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGl0ZW0gb2YgbGlzdCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGl0ZW0sIFxcXCJhLDAmJlRleHRcXFwiKSArICcgLSAnICsgcGRmaChpdGVtLCBcXFwiZW0sMCYmVGV4dFxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogcGRmaChpdGVtLCBcXFwiaW1nJiZzcmNcXFwiKSArICcwQGhlYWRlcnM9e1xcXCJyZWZlcmVyXFxcIjpcXFwiaHR0cDovL20uaHRxeXkuY29tXFxcIn0nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICdodCcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogcGRmaChpdGVtLCBcXFwiLnBsYXkmJmRhdGEtaWRcXFwiKSArICcjaHQnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG5cXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzF0JzpcXG4gICAgICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKGZldGNoKGBodHRwczovL3NvLjF0aW5nLmNvbS9zb25nL2pzb24/cT0ke2tleXdvcmR9JnBhZ2U9JHtNWV9QQUdFfSZzaXplPTMwYCkpLnJlc3VsdHMubWFwKF8gPT4gRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXy5zb25nX25hbWUgKyAnIC0gJyArIF8uc2luZ2VyX25hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogJ2h0dHBzOicgKyBfLmFsYnVtX2NvdmVyLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnMXQnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiBfLnNvbmdfaWQgKyAnIzF0J1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG5cXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzl0JzpcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoTVlfUEFHRSA9PSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTT04ucGFyc2UoZmV0Y2goYGh0dHA6Ly9uZXcuOXNreS5jb20vYXBpL3dlaWJvL2NvbnRlbnQvc2VhcmNoP2NvbnRlbnQ9JHtrZXl3b3JkfWApKS5kYXRhLnNvbmdfbGlzdC5tYXAoXyA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoL15OJC9pLnRlc3QoXy5pc19zdGF0aW9uKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBcXFwiaHR0cDovL25ldy45c2t5LmNvbS9hcGkvc29uZy9kZXRhaWw/aWQ9XFxcIiArIF8uc29uZ19pZCArIFxcXCImaXNfbG9naW49TlxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyA9IEpTT04ucGFyc2UoZmV0Y2godSkpLmRhdGE7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXy5zb25nX25hbWUgKyAnIC0gJyArIF8ubXVzaWNpYW5fbmFtZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBfLmRpc2NfaW1nX3VybCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogJzl0JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogXy5zb25nX2lkICsgJyM5dCdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxLCAwLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzOiBbdHNbMV1dLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxzOiBbXy5zb25nX3VybCArICcjaXNNdXNpYz10cnVlIyddLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBscmM6IF8ubHlyaWNfdXJsIHx8IExyYyhfLmRlc2lnbl9ub3RlcylcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnNW5kJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoTVlfUEFHRSA9PSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBwZGZhKGZldGNoKFxcXCJodHRwOi8vbS41bmQuY29tL3NvL3NfXFxcIiArIGtleXdvcmQpLCBcXFwiYm9keSYmLmxpc3Qtc29uZyYmbGlcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpdGVtIG9mIGxpc3QpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChpdGVtLCBcXFwiLnNvbmcmJlRleHRcXFwiKSArICcgLSAnICsgcGRmaChpdGVtLCBcXFwiLmFydGlzdCYmVGV4dFxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogcGRmaChpdGVtLCBcXFwiaW1nJiZzcmNcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnNW5kJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiBwZGZoKGl0ZW0sIFxcXCJhJiZocmVmXFxcIikucmVwbGFjZSgvLipcXFxcL3xcXFxcLi4qL2csICcnKSArICcjNW5kJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgICAgICAgICBjYXNlICdiaXUnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBwZGZhKGZldGNoKFxcXCJodHRwczovL2JpdS5tb2UvaW5kZXgucGhwP209JmM9U29uZyZhPXNlYXJjaCZkYXRhPVxcXCIgKyBrZXl3b3JkICsgXFxcIiZwPVxcXCIgKyBNWV9QQUdFKSwgXFxcImJvZHkmJnRib2R5JiZ0clxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaXRlbSBvZiBsaXN0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdV9zaWQgPSBwZGZoKGl0ZW0sIFxcXCJhLDAmJmhyZWZcXFwiKS5yZXBsYWNlKC9cXFxcRCsvLCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGl0ZW0sIFxcXCJhLDAmJkh0bWxcXFwiKS5yZXBsYWNlKC9cXFxccyo8c3BhbltcXFxcc1xcXFxTXSsvaSwgXFxcIlxcXCIpICsgJyAtICcgKyBwZGZoKGl0ZW0sIFxcXCJhLDEmJlRleHRcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogXFxcImh0dHBzOi8vYml1Lm1vZS9Tb25nL3Nob3dDb3Zlci9zaWQvXFxcIiArIGJpdV9zaWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnYml1JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IGJpdV9zaWQgKyAnI2JpdSdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnYmxtJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKGZldGNoKGBodHRwczovL2JsYWNrYmxtLmJhaWxlbWkuY29tL2luZGV4LnBocC9kYW5jZS9zZWFyY2g/a2V5PSR7a2V5d29yZH0mcGFnZT0ke01ZX1BBR0V9YCkpLmRhbmNlbGlzdC5tYXAoXyA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IF8uZG93bnVybCB8fCBfLnBsYXl1cmw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1cmwgJiYgXy5uYW1lKSBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXy5uYW1lICsgJyAtICcgKyAoXy5zaW5nZXIgfHwgXy51cF91c2VyKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogXy5jb3ZlciB8fCBfLnVwX3VzZXJfbG9nbyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICdibG0nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogXy5zb25naWQgKyAnI2JsbSdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMSwgMCwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXM6IFt0c1sxXV0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxzOiBbdXJsICsgJyNpc011c2ljPXRydWUjJ11cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgICAgICAgICBjYXNlICdtdXMnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBwZGZhKGZldGNoKFxcXCJodHRwczovL3NreW11cy5vcmcvdHJhY2tzL1xcXCIgKyBrZXl3b3JkICsgXFxcIi9cXFwiICsgTVlfUEFHRSksIFxcXCJib2R5JiYuZi10YWJsZVxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaXRlbSBvZiBsaXN0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGl0ZW0sIFxcXCIuYXJ0aXN0LW5hbWUmJlRleHRcXFwiKSArICcgLSAnICsgcGRmaChpdGVtLCBcXFwiLnRyYWNrLW5hbWUmJlRleHRcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogcGRmaChpdGVtLCBcXFwiaW1nJiZzcmNcXFwiKS5yZXBsYWNlKC9eKC4rKS8sICdodHRwczokMScpIHx8ICQucmVxdWlyZSgnaW1hZ2U/cnVsZT3mrYzor43pgILphY0nKSgnbXVzJyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnbXVzJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6ICd1bmRlZmluZWQnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEsIDAsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzOiBbdHNbMV1dLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsczogW1xcXCJodHRwczpcXFwiICsgcGRmaChpdGVtLCBcXFwiLm1wMyYmaHJlZlxcXCIpICsgJyNpc011c2ljPXRydWUjJ11cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnamFtJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKGZldGNoKFxcXCJodHRwczovL3NvbHJjbG91ZC5qYW1lbmRvLmNvbS9zb2xyL2phbWNvbT93dD1qc29uJnJvd3M9MzAmcT1cXFwiICsga2V5d29yZCArIFxcXCImc3RhcnQ9XFxcIiArICgoTVlfUEFHRSAtIDEpICogMzApKSkucmVzcG9uc2UuZG9jcy5tYXAoXyA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IFxcXCJodHRwczovL3Byb2QtMS5zdG9yYWdlLmphbWVuZG8uY29tL2Rvd25sb2FkL3RyYWNrL1xcXCIgKyBfLmlkICsgXFxcIi9tcDM1XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8ubmFtZS5yZXBsYWNlKF8uYXJ0aXN0X25hbWUgKyAnIC0gJywgJycpICsgJyAtICcgKyBfLmFydGlzdF9uYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBcXFwiaHR0cHM6Ly91c2VyY29udGVudC5qYW1lbmRvLmNvbS8/dHlwZT1hbGJ1bSZpZD1cXFwiICsgXy5hbGJ1bV9pZC5yZXBsYWNlKC9cXFxcRC9nLCAnJykgKyBcXFwiJndpZHRoPTUwMCZ0cmFja2lkPVxcXCIgKyBfLmlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogJ2phbScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiAndW5kZWZpbmVkJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxLCAwLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lczogW3RzWzFdXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybHM6IFt1cmwgKyAnI2lzTXVzaWM9dHJ1ZSMnXVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG5cXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2p1aSc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IGV2YWwocG9zdCgnaHR0cHM6Ly9uZXcubXlmcmVlbXAzanVpY2VzLmNjL2FwaS9hcGlfc2VhcmNoLnBocD9jYWxsYmFjaz1qdWljZXMnLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IFxcXCJxPVxcXCIgKyBrZXl3b3JkICsgXFxcIiZwYWdlPVxcXCIgKyBNWV9QQUdFXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1ID0gXFxcImh0dHBzOi8vbnBsYXkuaWRtcDNzLmNvbS9zdHJlYW0vXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbyA9IFxcXCJBQkNERUZHSEpLTU5QUVJTVFVWV1hZWmFiY2RlZmdoamttbnBxcnN0dXZ4eXoxMjNcXFwiO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGp1aV9kKHQpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGUgPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDAgPT0gdCkgcmV0dXJuIG9bMF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodCA8IDAgJiYgKHQgKj0gLTEsIGUgKz0gXFxcIi1cXFwiKTsgMCA8IHQ7KSB2YWwgPSBwYXJzZUludCh0ICUgNDgpLCB0ID0gcGFyc2VJbnQodCAvIDQ4KSwgZSArPSBvW3ZhbF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDE7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gPSBsaXN0W2ldO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV0dHlJZCA9IGp1aV9kKF8ub3duZXJfaWQpICsgXFxcIjpcXFwiICsganVpX2QoXy5pZCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfLnRpdGxlICsgJyAtICcgKyBfLmFydGlzdCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogJC5yZXF1aXJlKCdpbWFnZT9ydWxlPeatjOivjemAgumFjScpKCdqdWknKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICdqdWknLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogXy5wcmV0dHlJZFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxLCAwLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lczogW3RzWzFdXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybHM6IFt1ICsgcHJldHR5SWQgKyAnI2lzTXVzaWM9dHJ1ZSMnXVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgICAgICAgICBjYXNlICd5Myc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgJHNvbmdfZGF0YSA9IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvbmdfbGlzdCA9IChpLCBpaSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gJHNvbmdfZGF0YVtpXS5zcGxpdChcXFwifHxcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpdGVtIG9mIGxpc3QpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gPSBpdGVtLnNwbGl0KFxcXCJ8XFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX1s0XSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IFxcXCJodHRwOi8vdGluZzYueXltcDMubmV0OjgyL1xcXCIgKyBTdHJpbmcoX1s0XSkucmVwbGFjZSgnLndtYScsICcubXAzJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogX1sxXSArICcgLSAnICsgX1szXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiAkLnJlcXVpcmUoJ2ltYWdlP3J1bGU95q2M6K+N6YCC6YWNJykoJ3kzJyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICd5MycsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IF8ucHJldHR5SWRcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxLCAwLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzOiBbdHNbMV1dLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxzOiBbdXJsICsgJyNpc011c2ljPXRydWUjJ11cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBldmFsKGZldGNoUEMoXFxcImh0dHA6Ly93d3cueXltcDMuY29tL3AvZ2V0c2VyLmFzcHg/a2V5PVxcXCIgKyBrZXl3b3JkICsgXFxcIiZwYWdlPVxcXCIgKyBNWV9QQUdFKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgICAgICAgICBjYXNlICczNjUnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gJDM2NV9TZWFyY2hSZXN1bHQodCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBkZmEoXFxcIjxib2R5PlxcXCIgKyB0ICsgXFxcIjwvYm9keT5cXFwiLCBcXFwiYm9keSYmbGlcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gZXZhbChcXFwiJDM2NV9cXFwiICsgZmV0Y2goXFxcImh0dHA6Ly9oaXQueXVlMzY1LmNvbS9zZWFyY2guYXNwP3JuZD1cXFwiICsgTWF0aC5yYW5kb20oKSArIFxcXCIma2V5d29yZHM9XFxcIiArIGVzY2FwZShrZXl3b3JkKSArIFxcXCImdD0xXFxcIikpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGl0ZW0gb2YgbGlzdCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTXVzaWNJZCA9IHBkZmgoaXRlbSwgXFxcImEsMCYmaHJlZlxcXCIpLnJlcGxhY2UoLy4qXFxcXC98XFxcXC4uKi9nLCAnJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSBcXFwiaHR0cDovLzk2LmllcmdlLmNuL1xcXCIgKyBwYXJzZUludChNdXNpY0lkIC8gMzAwMDApICsgXFxcIi9cXFwiICsgcGFyc2VJbnQoTXVzaWNJZCAvIDIwMDApICsgXFxcIi9cXFwiICsgTXVzaWNJZCArIFxcXCIubXAzXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChpdGVtLCBcXFwiLm5hbWUmJlRleHRcXFwiKSArICcgLSAnICsgcGRmaChpdGVtLCBcXFwiLnNpbmdlciYmVGV4dFxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogJC5yZXF1aXJlKCdpbWFnZT9ydWxlPeatjOivjemAgumFjScpKCczNjUnKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnMzY1JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiAndW5kZWZpbmVkJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMSwgMCwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzOiBbdHNbMV1dLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybHM6IFt1cmwgKyAnI2lzTXVzaWM9dHJ1ZSMnXVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgICAgICAgICBjYXNlICdreic6XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gXFxcImh0dHBzOi8vc2xpZGVyLmt6L1xcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTT04ucGFyc2UoZmV0Y2godSArIFxcXCJ2a19hdXRoLnBocD9xPVxcXCIgKyBrZXl3b3JkKSlbXFxcImF1ZGlvc1xcXCJdW1xcXCJcXFwiXS5tYXAoXyA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8udGl0X2FydC5zcGxpdCgnIC0gJykucmV2ZXJzZSgpLmpvaW4oJyAtICcpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogJC5yZXF1aXJlKCdpbWFnZT9ydWxlPeatjOivjemAgumFjScpKCdreicpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICdreicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogXy56eWlkXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxLCAwLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXM6IFt0c1sxXV0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsczogW3UgKyBfLnVybCArICcjaXNNdXNpYz10cnVlIyddXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAna3knOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIEpTT04ucGFyc2UocG9zdCgnaHR0cDovL2FwaS5rdWFpeWluMTIzLm5ldC9xL3NlYXJjaCcsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keTogXFxcInE9XFxcIiArIGtleXdvcmQgKyBcXFwiJmNsaWVudF92PTIuNy4xJnBhZ2U9XFxcIiArIE1ZX1BBR0UgKyBcXFwiJnBsYXRmb3JtPUFuZHJvaWRcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiY2xpZW50LXZcXFwiOiBcXFwiMi43LjFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcImRldmljZS1pZFxcXCI6IFIoMTYpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcInBsYXRmb3JtXFxcIjogXFxcIkFuZHJvaWRcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBcXFwib2todHRwLzMuMTQuNFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiQ29ubmVjdGlvblxcXCI6IFxcXCJLZWVwLUFsaXZlXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJDb250ZW50LVR5cGVcXFwiOiBcXFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpLmRhdGEubXVzaWNfbGlzdC5yb3dzLm1hcChfID0+IEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8udGl0bGUgKyAnIC0gJyArIF8udXNlcl9pbmZvLm5pY2tuYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IF8uY292ZXIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICdreScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IF8uenlpZFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEsIDAsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXM6IFt0c1sxXV0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybHM6IFtfLnBsYXlfdXJsICsgJyNpc011c2ljPXRydWUjJ10sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx5cmljOiBfLmxyY191cmxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgICAgICAgICBjYXNlICdkajEnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBcXFwiaHR0cDovL3d3dy56enpkai5jb21cXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBwZGZhKGZldGNoUEModSArIFxcXCIvbXVzaWMvc2VhcmNoLVxcXCIgKyBrZXl3b3JkICsgXFxcIj9jYXRfaWQ9MCZwYWdlPVxcXCIgKyBNWV9QQUdFKSwgXFxcImJvZHkmJnRib2R5JiZ0clxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaXRlbSBvZiBsaXN0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLm1hdGNoKC9hbHQ9XFxcIiguKz8pXFxcIi8pWzFdLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiB1ICsgaXRlbS5tYXRjaCgvc3JjPVxcXCIoLis/KVxcXCIvKVsxXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICdkajEnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogaXRlbS5tYXRjaCgvZGF0YS1pZD1cXFwiKFxcXFxkKylcXFwiLylbMV0gKyAnI2RqMSdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGoyJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gcGRmYShmZXRjaFBDKFxcXCJodHRwczovL3d3dy5kanV1LmNvbS9zZWFyY2g/bXVzaWNuYW1lPVxcXCIgKyBrZXl3b3JkICsgXFxcIiZsaXN0PTImY2lkPTAmcGFnZT1cXFwiICsgTVlfUEFHRSksIFxcXCJib2R5JiYubGlzdF9tdXNpY2xpc3QmJnRyW2NsYXNzXVxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaXRlbSBvZiBsaXN0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLm1hdGNoKC90aXRsZT1cXFwiKC4rPylcXFwiLylbMV0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IFxcXCJodHRwczpcXFwiICsgaXRlbS5tYXRjaCgvc3JjPVxcXCIoLis/KVxcXCIvKVsxXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICdkajInLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogaXRlbS5tYXRjaCgvdmFsdWU9XFxcIihcXFxcZCspXFxcIi8pWzFdICsgJyNkajInXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG5cXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RqMyc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgdSA9IFxcXCJodHRwOi8vd3d3LmxhbGFkai5jb21cXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBwZGZhKGZldGNoUEModSArIFxcXCIvc2VhcmNoP3NlYXJjaD1cXFwiICsga2V5d29yZCArIFxcXCImcGFnZT1cXFwiICsgTVlfUEFHRSksIFxcXCJib2R5JiYubGlzdF9tdXNpY2xpc3QmJnRyW2NsYXNzXVxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaXRlbSBvZiBsaXN0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGl0ZW0sIFxcXCIudDEmJlRleHRcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogdSArIGl0ZW0ubWF0Y2goL3NyYz1cXFwiKC4rPylcXFwiLylbMV0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnZGozJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IGl0ZW0ubWF0Y2goL3ZhbHVlPVxcXCIoXFxcXGQrKVxcXCIvKVsxXSArICcjZGozJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgICAgICAgICBjYXNlICdkajQnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBwZGZhKGZldGNoUEMoXFxcImh0dHBzOi8vbS5haGFkai5jb20vc2VhcmNoLz9rZXk9XFxcIiArIGtleXdvcmQgKyBcXFwiJnBhZ2U9XFxcIiArIE1ZX1BBR0UgKyBcXFwiLmh0bWxcXFwiKSwgXFxcImJvZHkmJi55aW55dWVfbGlzdCYmbGlcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGl0ZW0gb2YgbGlzdCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHBkZmgoaXRlbSwgXFxcImgzJiZUZXh0XFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IFxcXCJodHRwczovL3N0Ljkya3UuY29tL3p3Y3MvXFxcIiArIHRpdGxlICsgXFxcIi5tcDRcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IHBkZmgoaXRlbSwgXFxcImltZyYmc3JjXFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnZGo0JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IHBkZmgoaXRlbSwgXFxcImEsMCYmaHJlZlxcXCIpLnJlcGxhY2UoL1xcXFxEL2csICcnKSArICcjZGo0J1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxLCAwLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lczogW3RzWzBdXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybHM6IFt1cmwgKyAnI2lzTXVzaWM9dHJ1ZSMnXVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgICAgICAgICBjYXNlICdkajUnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHUgPSAnaHR0cHM6Ly93d3cuZGoubmV0Lyc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgXyA9IHBvc3QodSArICdzZWFyY2gucGhwP21vZD1tdXNpYyZmb3JtaGFzaD04Yzk2NGU4YSZzcmNodHh0PScgKyBlbmNvZGVTdHIoa2V5d29yZCwgJ0dCSycpICsgJyZzZWFyY2hzdWJtaXQ9eWVzJywge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29udGVudC10eXBlJzogJ3RleHQvaHRtbDsgY2hhcnNldD1nYmsnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdDogZmFsc2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ubHlIZWFkZXJzOiB0cnVlXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gdSArIEpTT04ucGFyc2UoXykuaGVhZGVycy5sb2NhdGlvblswXSArIFxcXCImcGFnZT1cXFwiICsgTVlfUEFHRTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gcGRmYShmZXRjaCh1cmwpLCBcXFwiYm9keSYmLm11c2ljLWxpc3QmJmxpXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpdGVtIG9mIGxpc3QpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoaXRlbSwgXFxcImEsMSYmVGV4dFxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiB1ICsgcGRmaChpdGVtLCBcXFwiaW1nJiZzcmNcXFwiKS5yZXBsYWNlKFxcXCImc2l6ZT1zbWFsbFxcXCIsIFxcXCJcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICdkajUnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogcGRmaChpdGVtLCBcXFwiYSwxJiZocmVmXFxcIikubWF0Y2goL2lkPShcXFxcZCspLylbMV0gKyAnI2RqNSdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGo2JzpcXG4gICAgICAgICAgICAgICAgICAgICAgICB1ID0gJ2h0dHA6Ly93d3cuMzZkai5jb20vZS9zZWFyY2gvJztcXG4gICAgICAgICAgICAgICAgICAgICAgICBfID0gcG9zdCh1ICsgJ2luZGV4LnBocCcsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NpZDogJzEsMiwzLDQnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Ym9hcmQ6IGtleXdvcmQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJtaXQ6ICcnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdzogJ3RpdGxlJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBpZDogJzEnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0OiBmYWxzZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25seUhlYWRlcnM6IHRydWVcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB1ICs9IEpTT04ucGFyc2UoXykuaGVhZGVycy5sb2NhdGlvblswXSArIFxcXCImcGFnZT1cXFwiICsgKE1ZX1BBR0UgLSAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gcGRmYShmZXRjaCh1KSwgXFxcImJvZHkmJiNwbGF5bGlzdCYmbGlcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGl0ZW0gb2YgbGlzdCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChpdGVtLCBcXFwiYSwwJiZUZXh0XFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6ICQucmVxdWlyZSgnaW1hZ2U/cnVsZT3mrYzor43pgILphY0nKSgnZGo2JyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnZGo2JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IGl0ZW0ubWF0Y2goL3ZhbHVlPVxcXCIoXFxcXGQrKVxcXCIvKVsxXSArICcjZGo2J1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgICAgICAgICBjYXNlICdkajcnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHUgPSAnaHR0cHM6Ly93d3cuN2lkai5jb20vZS9zZWFyY2gvJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgIF8gPSBwb3N0KHUgKyAnaW5kZXgucGhwJywge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5OiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlib2FyZDoga2V5d29yZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3c6ICd0aXRsZSdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3Q6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmx5SGVhZGVyczogdHJ1ZVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHUgKz0gSlNPTi5wYXJzZShfKS5oZWFkZXJzLmxvY2F0aW9uWzBdICsgXFxcIiZwYWdlPVxcXCIgKyAoTVlfUEFHRSAtIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBwZGZhKGZldGNoKHUpLCBcXFwiYm9keSYmbGlbZGF0YS1pZF1cXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGl0ZW0gb2YgbGlzdCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHRyYSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChpdGVtLCBcXFwiYSwwJiZUZXh0XFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6ICQucmVxdWlyZSgnaW1hZ2U/cnVsZT3mrYzor43pgILphY0nKSgnZGo3JyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnZGo3JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHp5aWQ6IGl0ZW0ubWF0Y2goL2RhdGEtaWQ9XFxcIihcXFxcZCspXFxcIi8pWzFdICsgJyNkajcnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RqOCc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgdSA9ICdodHRwczovL3d3dy5kanU4LmNvbS8nO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBmZXRjaFBDKHUgKyAna2V5L21sXycgKyBlbmNvZGVTdHIoa2V5d29yZCwgJ0dCSycpICsgJ18nICsgTVlfUEFHRSArICcuaHRtbCcsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICd0ZXh0L2h0bWw7IGNoYXJzZXQ9Z2IyMzEyJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWZlcmVyJzogdVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IHBkZmEoaXRlbSwgXFxcImJvZHkmJiNkam91ciYmbGlbb25tb3VzZW92ZXJdXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpdGVtIG9mIGxpc3QpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRXh0cmEoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoaXRlbSwgXFxcImEsMCYmVGV4dFxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiAkLnJlcXVpcmUoJ2ltYWdlP3J1bGU95q2M6K+N6YCC6YWNJykoJ2RqOCcpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogJ2RqOCcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6eWlkOiBpdGVtLm1hdGNoKC92YWx1ZT1cXFwiKFxcXFxkKylcXFwiLylbMV0gKyAnI2RqOCdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGo5JzpcXG4gICAgICAgICAgICAgICAgICAgICAgICB1ID0gJ2h0dHBzOi8vd3d3LmRqeXl5LmNvbS9zZWFyY2gucGhwP2FjPWRqJmtleT0nICsga2V5d29yZCArICcmcGFnZXM9JyArIE1ZX1BBR0U7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IHBkZmEoZmV0Y2hQQyh1KSwgXFxcImJvZHkmJmxpW2RhdGEtaWRdIFxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaXRlbSBvZiBsaXN0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4dHJhKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGl0ZW0sIFxcXCJhLDAmJlRleHRcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogJC5yZXF1aXJlKCdpbWFnZT9ydWxlPeatjOivjemAgumFjScpKCdkajknKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICdkajknLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenlpZDogaXRlbS5tYXRjaCgvZGF0YS1pZD1cXFwiKFxcXFxkKylcXFwiLylbMV0gKyAnI2RqOSdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcXG4gICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuaOpeWPo+mUmeivr35cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLmsqHmnInlj6/ku6XmkJzntKLmrYzljZXnmoTmjqXlj6N+XFxcIixcXG4gICAgICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICBsYXp5OiBmdW5jdGlvbihwbGF0Zm9ybSwgdDEsIHQyKSB7XFxuICAgICAgICBbdDEsIHBsYXRmb3JtLCB0eXBlXSA9IHQxLnNwbGl0KCcjJyk7XFxuICAgICAgICBzd2l0Y2ggKFN0cmluZyhwbGF0Zm9ybSkpIHtcXG5cXG5cXG5cXG5cXG4gICAgICAgICAgICBjYXNlICdiZCc6XFxuICAgICAgICAgICAgICAgIF8gPSBxaWFucWlhbihcXFwic29uZy90cmFja2xpbmtcXFwiLCB7XFxuICAgICAgICAgICAgICAgICAgICBUU0lEOiB0MVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgaWYgKHQyKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChbdHNbMV1dLCAxLCAn6YCJ5oup5LiL6L296Z+z6LSoJykuc2VsZWN0KCh1cmwpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2Rvd25sb2FkOi8vJyArIHVybDtcXG4gICAgICAgICAgICAgICAgICAgIH0sIF8ucGF0aCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgIHVybHM6IFtfLnBhdGggKyAnI2lzTXVzaWM9dHJ1ZSMnXSxcXG4gICAgICAgICAgICAgICAgICAgIGxyYzogXy5seXJpY1xcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgY2FzZSAnenonOlxcbiAgICAgICAgICAgICAgICB1ID0gJ2h0dHBzOi8venoxMjMuY29tJztcXG4gICAgICAgICAgICAgICAgXyA9IEpTT04ucGFyc2UocG9zdCh1ICsgJy9hamF4LycsIHtcXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IFxcXCJhY3Q9c29uZ2luZm8maWQ9XFxcIiArIHQxICsgXFxcIiZsYW5nPVxcXCJcXG4gICAgICAgICAgICAgICAgfSkpLmRhdGE7XFxuICAgICAgICAgICAgICAgIHVybCA9IHUgKyBfLm1wMztcXG4gICAgICAgICAgICAgICAgaWYgKHQyKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChbdHNbMV1dLCAxLCAn6YCJ5oup5LiL6L296Z+z6LSoJykuc2VsZWN0KCh1cmwpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSBKU09OLnBhcnNlKHJlcXVlc3QodXJsLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ubHlIZWFkZXJzOiB0cnVlXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpLnVybDtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2Rvd25sb2FkOi8vJyArIHVybDtcXG4gICAgICAgICAgICAgICAgICAgIH0sIHVybCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgIHVybHM6IFt1cmwgKyAnI2lzTXVzaWM9dHJ1ZSMnXSxcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IFt7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlcjogdVxcbiAgICAgICAgICAgICAgICAgICAgfV0sXFxuICAgICAgICAgICAgICAgICAgICBseXJpYzogXy5scmMucmVwbGFjZSgvXFxcXHIvZywgJycpXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG5cXG4gICAgICAgICAgICBjYXNlICduaSc6XFxuICAgICAgICAgICAgICAgIHUgPSBcXFwiaHR0cHM6Ly93d3cuaGlmaW5pLmNvbS9cXFwiO1xcbiAgICAgICAgICAgICAgICBpdGVtID0gcGRmaChmZXRjaCh1ICsgYHRocmVhZC0ke3QxfS5odG1gKSwgXFxcImRpdi5tZXNzYWdlLmJyZWFrLWFsbCYmSHRtbFxcXCIpO1xcbiAgICAgICAgICAgICAgICB1cmwgPSB1ICsgaXRlbS5tYXRjaCgvdXJsOlxcXFxzKltcXFwiJ10oW15cXFwiJ10rKS8pWzFdO1xcbiAgICAgICAgICAgICAgICBpZiAodDIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFt0c1sxXV0sIDEsICfpgInmi6nkuIvovb3pn7PotKgnKS5zZWxlY3QoKHVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnZG93bmxvYWQ6Ly8nICsgdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgdXJsKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBscmMgPSBpdGVtLnJlcGxhY2UoL15bXFxcXHNcXFxcU10rPzxcXFxcL2g1Pnw8aDVbXj5dKj5bXFxcXHNcXFxcU10rL2dpLCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgICAgICB1cmxzOiBbdXJsICsgJyNpc011c2ljPXRydWUjJ10sXFxuICAgICAgICAgICAgICAgICAgICBseXJpYzogTHJjKGxyYylcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcbiAgICAgICAgICAgIGNhc2UgJ2ZwJzpcXG4gICAgICAgICAgICAgICAgdXJsID0gSlNPTi5wYXJzZShmZXRjaChcXFwiaHR0cHM6Ly93d3cuZmFuZ3BpLm5ldC9hcGkvcGxheV91cmw/aWQ9XFxcIiArIHQxICsgXFxcIiZqc29uPTFcXFwiKSkuZGF0YS51cmw7XFxuICAgICAgICAgICAgICAgIGlmICh0Mikge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoW3RzWzFdXSwgMSwgJ+mAieaLqeS4i+i9vemfs+i0qCcpLnNlbGVjdCgodXJsKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdkb3dubG9hZDovLycgKyB1cmw7XFxuICAgICAgICAgICAgICAgICAgICB9LCB1cmwpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgICAgICB1cmxzOiBbdXJsICsgJyNpc011c2ljPXRydWUjJ10sXFxuICAgICAgICAgICAgICAgICAgICBseXJpYzogXFxcImh0dHBzOi8vd3d3LmZhbmdwaS5uZXQvZG93bmxvYWQvbHJjL1xcXCIgKyB0MVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgY2FzZSAnc3QnOlxcbiAgICAgICAgICAgICAgICBpdGVtID0gZmV0Y2hQQyhcXFwiaHR0cDovL3d3dy5zb25ndGFzdGUuY28vc29uZy9cXFwiICsgdDEpO1xcbiAgICAgICAgICAgICAgICB1cmwgPSBwZGZoKGl0ZW0sIFxcXCJzb3VyY2UsMCYmc3JjXFxcIik7XFxuICAgICAgICAgICAgICAgIGlmICh0Mikge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoW3RzWzFdXSwgMSwgJ+mAieaLqeS4i+i9vemfs+i0qCcpLnNlbGVjdCgodXJsKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdkb3dubG9hZDovLycgKyB1cmw7XFxuICAgICAgICAgICAgICAgICAgICB9LCB1cmwpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGV2YWwoU3RyaW5nKGl0ZW0ubWF0Y2goL2xyYyA9IGBbXFxcXHNcXFxcU10qP2A7LylbMF0pKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgIHVybHM6IFt1cmwgKyAnI2lzTXVzaWM9dHJ1ZSMnXSxcXG4gICAgICAgICAgICAgICAgICAgIGx5cmljOiBMcmMobHJjKVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgY2FzZSAnaHQnOlxcbiAgICAgICAgICAgICAgICB1ID0gXFxcImh0dHA6Ly9tLmh0cXl5LmNvbS9wbGF5L1xcXCIgKyB0MTtcXG4gICAgICAgICAgICAgICAgY29kZSA9IGV4ZWN1dGVXZWJSdWxlKHUsICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGU7XFxuICAgICAgICAgICAgICAgIH0pLCB7XFxuICAgICAgICAgICAgICAgICAgICBibG9ja1J1bGVzOiBbJy5qcycsICcuY3NzJywgJy5qcGcnLCAnLnBuZycsICcuZ2lmJywgJy5zdmcnLCAnLmljbyddXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB1cmwgPSBcXFwiaHR0cDovL2Y1Lmh0cXl5LmNvbS9wbGF5OS9cXFwiICsgdDEgKyBcXFwiL21wMy9cXFwiICsgY29kZTtcXG4gICAgICAgICAgICAgICAgaWYgKHQyKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChbdHNbMV1dLCAxLCAn6YCJ5oup5LiL6L296Z+z6LSoJykuc2VsZWN0KCh1cmwpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2Rvd25sb2FkOi8vJyArIHVybDtcXG4gICAgICAgICAgICAgICAgICAgIH0sIHVybCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgIHVybHM6IFt1cmwgKyAnI2lzTXVzaWM9dHJ1ZSMnXSxcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IFt7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlcjogdVxcbiAgICAgICAgICAgICAgICAgICAgfV1cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcbiAgICAgICAgICAgIGNhc2UgJzF0JzpcXG4gICAgICAgICAgICAgICAgdSA9IFxcXCJodHRwczovL3d3dy4xdGluZy5jb21cXFwiO1xcbiAgICAgICAgICAgICAgICBwYXRoID0gZXhlY3V0ZVdlYlJ1bGUoYGh0dHBzOi8vaDUuMXRpbmcuY29tL3NvbmcvYCArIHQxLCAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnX3NvbmdfbWV0YS5zb25nX3BhdGg7XFxuICAgICAgICAgICAgICAgIH0pLCB7XFxuICAgICAgICAgICAgICAgICAgICBibG9ja1J1bGVzOiBbJy5qcycsICcuY3NzJywgJy5qcGcnLCAnLnBuZycsICcuZ2lmJywgJy5zdmcnLCAnLmljbyddXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB1cmwgPSB1ICsgXFxcIi9hcGkvYXVkaW8/XFxcIiArIHBhdGg7XFxuICAgICAgICAgICAgICAgIGhlYWQgPSB7XFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlcjogdVxcbiAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgIG9ubHlIZWFkZXJzOiB0cnVlXFxuICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgIGlmICh0Mikge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoW3RzWzFdXSwgMSwgJ+mAieaLqeS4i+i9vemfs+i0qCcpLnNlbGVjdCgodXJsLCBoZWFkKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gSlNPTi5wYXJzZShmZXRjaCh1cmwsIGhlYWQpKS51cmw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdkb3dubG9hZDovLycgKyB1cmw7XFxuICAgICAgICAgICAgICAgICAgICB9LCB1cmwsIGhlYWQpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGxyYyA9IHUgKyBcXFwiL3RvdWNoL2FwaS9seXJpYy9cXFwiICsgdDE7XFxuICAgICAgICAgICAgICAgIGxyYyA9IEpTT04ucGFyc2UoZmV0Y2gobHJjKSkubHlyaWNfY29udGVudDtcXG4gICAgICAgICAgICAgICAgaWYgKCFscmMubWF0Y2goL1xcXFxbXFxcXGQrOlxcXFxkKy8pKVxcbiAgICAgICAgICAgICAgICAgICAgbHJjID0gTHJjKGxyYyk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgICAgICB1cmxzOiBbdXJsICsgJyNpc011c2ljPXRydWUjJ10sXFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBbe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZXI6IHVcXG4gICAgICAgICAgICAgICAgICAgIH1dLFxcbiAgICAgICAgICAgICAgICAgICAgbHlyaWM6IGxyY1xcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgY2FzZSAnOXQnOlxcbiAgICAgICAgICAgICAgICB1ID0gXFxcImh0dHA6Ly9uZXcuOXNreS5jb20vYXBpL3NvbmcvZGV0YWlsP2lkPVxcXCIgKyB0MSArIFxcXCImaXNfbG9naW49TlxcXCI7XFxuICAgICAgICAgICAgICAgIF8gPSBKU09OLnBhcnNlKGZldGNoKHUpKS5kYXRhO1xcbiAgICAgICAgICAgICAgICBpZiAodDIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFt0c1sxXV0sIDEsICfpgInmi6nkuIvovb3pn7PotKgnKS5zZWxlY3QoKHVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnZG93bmxvYWQ6Ly8nICsgdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgXy5zb25nX3VybCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgIHVybHM6IFtfLnNvbmdfdXJsICsgJyNpc011c2ljPXRydWUjJ10sXFxuICAgICAgICAgICAgICAgICAgICBscmM6IF8ubHlyaWNfdXJsIHx8IExyYyhfLmRlc2lnbl9ub3RlcylcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcbiAgICAgICAgICAgIGNhc2UgJzVuZCc6XFxuICAgICAgICAgICAgICAgIGl0ZW0gPSBmZXRjaChgaHR0cDovL20uNW5kLmNvbS90aW5nLyR7dDF9Lmh0bWxgKTtcXG4gICAgICAgICAgICAgICAgZXZhbChpdGVtLm1hdGNoKC9tcDMgPSAuKj87LylbMF0pO1xcbiAgICAgICAgICAgICAgICB1cmwgPSAnaHR0cDovL21wZ2UuNW5kLmNvbS8nICsgbXAzO1xcbiAgICAgICAgICAgICAgICBpZiAodDIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFt0c1sxXV0sIDEsICfpgInmi6nkuIvovb3pn7PotKgnKS5zZWxlY3QoKHVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnZG93bmxvYWQ6Ly8nICsgdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgdXJsKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBscmMgPSBwZGZoKGl0ZW0sIFxcXCIjbHJjY29udCYmSHRtbFxcXCIpLnJlcGxhY2UoLzxcXFxcIS0tLio/LS0+fDxiclxcXFwvPz4vZ2ksICdcXFxcbicpXFxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgICAgICB1cmxzOiBbdXJsICsgJyNpc011c2ljPXRydWUjJ10sXFxuICAgICAgICAgICAgICAgICAgICBseXJpYzogbHJjXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG5cXG4gICAgICAgICAgICBjYXNlICdiaXUnOlxcbiAgICAgICAgICAgICAgICB1cmwgPSBKU09OLnBhcnNlKGZldGNoKFxcXCJodHRwczovL2JpdS5tb2UvU29uZy9wbGF5U0lEL3NpZC9cXFwiICsgdDEpKS51cmxpbmZvLnVybDtcXG4gICAgICAgICAgICAgICAgaWYgKHQyKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChbdHNbMV1dLCAxLCAn6YCJ5oup5LiL6L296Z+z6LSoJykuc2VsZWN0KCh1cmwpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2Rvd25sb2FkOi8vJyArIHVybDtcXG4gICAgICAgICAgICAgICAgICAgIH0sIHVybCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgbHJjID0gcGRmaChmZXRjaChcXFwiaHR0cHM6Ly9iaXUubW9lL3NcXFwiICsgdDEpLCBcXFwiLmFtLXBvcHVwLWJkJiZIdG1sXFxcIikucmVwbGFjZSgvPChidXR0b24pLio/XFxcXDE+fDxcXFxcLz9iclxcXFwvPz4vZ2ksIFxcXCJcXFxcblxcXCIpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICAgICAgdXJsczogW3VybCArICcjaXNNdXNpYz10cnVlIyddLFxcbiAgICAgICAgICAgICAgICAgICAgbHlyaWM6IGxyY1xcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgY2FzZSAnYmxtJzpcXG4gICAgICAgICAgICAgICAgdSA9ICdodHRwczovL2JsYWNrYmxtLmJhaWxlbWkuY29tL2luZGV4LnBocC9kYW5jZS9wbGF5L2lkLycgKyB0MTtcXG4gICAgICAgICAgICAgICAgXyA9IEpTT04ucGFyc2UoZmV0Y2godSkpO1xcbiAgICAgICAgICAgICAgICB1cmwgPSBfLmRvd251cmwgfHwgXy5wbGF5dXJsO1xcbiAgICAgICAgICAgICAgICBpZiAodDIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFt0c1sxXV0sIDEsICfpgInmi6nkuIvovb3pn7PotKgnKS5zZWxlY3QoKHVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnZG93bmxvYWQ6Ly8nICsgdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgdXJsKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gdXJsICsgJyNpc011c2ljPXRydWUjJztcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgY2FzZSAnZGoxJzpcXG4gICAgICAgICAgICAgICAgaXRlbSA9IGZldGNoUEMoXFxcImh0dHA6Ly93d3cuenp6ZGouY29tL211c2ljL2luZm8tXFxcIiArIHQxKTtcXG4gICAgICAgICAgICAgICAgdXJsID0gcGRmaChpdGVtLCBcXFwiYXVkaW8mJnNyY1xcXCIpO1xcbiAgICAgICAgICAgICAgICBpZiAodDIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFt0c1swXV0sIDEsICfpgInmi6nkuIvovb3pn7PotKgnKS5zZWxlY3QoKHVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnZG93bmxvYWQ6Ly8nICsgdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgdXJsKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gdXJsICsgJyNpc011c2ljPXRydWUjJztcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgY2FzZSAnZGoyJzpcXG4gICAgICAgICAgICAgICAgdXJpID0gSlNPTi5wYXJzZShmZXRjaFBDKFxcXCJodHRwczovL3d3dy5kanV1LmNvbS93YXAvcGxheS9wbGF5P2lkPVxcXCIgKyB0MSkpLmRhdGEubGlzdGVudXJsO1xcbiAgICAgICAgICAgICAgICB1cmwgPSBgaHR0cDovL21wNC5kanV1LmNvbS8ke3VyaX0ubTRhYDtcXG4gICAgICAgICAgICAgICAgaWYgKHQyKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChbdHNbMF1dLCAxLCAn6YCJ5oup5LiL6L296Z+z6LSoJykuc2VsZWN0KCh1cmwpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2Rvd25sb2FkOi8vJyArIHVybDtcXG4gICAgICAgICAgICAgICAgICAgIH0sIHVybCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVybCArICcjaXNNdXNpYz10cnVlIyc7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcbiAgICAgICAgICAgIGNhc2UgJ2RqMyc6XFxuICAgICAgICAgICAgICAgIHVybCA9IEpTT04ucGFyc2UoZmV0Y2hQQyhcXFwiaHR0cDovL3d3dy5sYWxhZGouY29tL2luZGV4L2luZGV4L2dldF9jb29raWVcXFwiLCB7XFxuICAgICAgICAgICAgICAgICAgICBcXFwiaGVhZGVyc1xcXCI6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFwiQ29va2llXFxcIjogYHNvbmdfbGlzdD10aGluazpbe1xcXCJpZFxcXCI6XFxcIiR7dDF9XFxcIn1dO2BcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSkpLmRhdGFbMF0ucGF0aDtcXG4gICAgICAgICAgICAgICAgaWYgKHQyKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChbdHNbMF1dLCAxLCAn6YCJ5oup5LiL6L296Z+z6LSoJykuc2VsZWN0KCh1cmwpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2Rvd25sb2FkOi8vJyArIHVybDtcXG4gICAgICAgICAgICAgICAgICAgIH0sIHVybCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVybCArICcjaXNNdXNpYz10cnVlIyc7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcbiAgICAgICAgICAgIGNhc2UgJ2RqNCc6XFxuICAgICAgICAgICAgICAgIHVyaSA9IGV4ZWN1dGVXZWJSdWxlKFxcXCJodHRwczovL3d3dy5haGFkai5jb20vbXVzaWMvXFxcIiArIHQxICsgXFxcIi5odG1sXFxcIiwgJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGFuY2VGaWxlUGF0aDtcXG4gICAgICAgICAgICAgICAgfSksIHtcXG4gICAgICAgICAgICAgICAgICAgIGJsb2NrUnVsZXM6IFsnLmpzJywgJy5jc3MnLCAnLmpwZycsICcucG5nJywgJy5naWYnLCAnLnN2ZycsICcuaWNvJ11cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIHVybCA9IGBodHRwczovL3N0Ljkya3UuY29tL2AgKyB1cmk7XFxuICAgICAgICAgICAgICAgIGlmICh0Mikge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoW3RzWzBdXSwgMSwgJ+mAieaLqeS4i+i9vemfs+i0qCcpLnNlbGVjdCgodXJsKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdkb3dubG9hZDovLycgKyB1cmw7XFxuICAgICAgICAgICAgICAgICAgICB9LCB1cmwpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiB1cmwgKyAnI2lzTXVzaWM9dHJ1ZSMnO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG5cXG5cXG5cXG5cXG4gICAgICAgICAgICBjYXNlICdkajUnOlxcbiAgICAgICAgICAgICAgICBfID0gcG9zdCgnaHR0cHM6Ly9tLmRqLm5ldC90ZW1wbGF0ZS96aHpoX2R6bXVzaWMvYWpheC8/YWN0aW9uPWdldHVybCcsIHtcXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IFxcXCJpZD1cXFwiICsgdDFcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIHVybCA9IFxcXCJodHRwczovL2RqbmV0LnNyYy5kai5uZXQ6NDQzMS9cXFwiICsgSlNPTi5wYXJzZShfKS5kYXRhWzBdLnNyYztcXG4gICAgICAgICAgICAgICAgaWYgKHQyKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChbdHNbMF1dLCAxLCAn6YCJ5oup5LiL6L296Z+z6LSoJykuc2VsZWN0KCh1cmwpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2Rvd25sb2FkOi8vJyArIHVybDtcXG4gICAgICAgICAgICAgICAgICAgIH0sIHVybCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVybCArICcjaXNNdXNpYz10cnVlIyc7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcbiAgICAgICAgICAgIGNhc2UgJ2RqNic6XFxuICAgICAgICAgICAgICAgIHVyaSA9IGV4ZWN1dGVXZWJSdWxlKFxcXCJodHRwOi8vd3d3LjM2ZGouY29tL3BsYXkvXFxcIiArIHQxICsgXFxcIi5odG1sXFxcIiwgJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5mby5wbGF5dXJsO1xcbiAgICAgICAgICAgICAgICB9KSwge1xcbiAgICAgICAgICAgICAgICAgICAgYmxvY2tSdWxlczogWycuanMnLCAnLmNzcycsICcuanBnJywgJy5wbmcnLCAnLmdpZicsICcuc3ZnJywgJy5pY28nLCAnL2UvJ11cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIHVybCA9IGBodHRwOi8vdG4xLjcyZGphcHAuY246ODM5OS9gICsgdXJpO1xcbiAgICAgICAgICAgICAgICBpZiAodDIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFt0c1swXV0sIDEsICfpgInmi6nkuIvovb3pn7PotKgnKS5zZWxlY3QoKHVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnZG93bmxvYWQ6Ly8nICsgdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgdXJsKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gdXJsICsgJyNpc011c2ljPXRydWUjJztcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgY2FzZSAnZGo3JzpcXG4gICAgICAgICAgICAgICAgdXJsID0gZXhlY3V0ZVdlYlJ1bGUoXFxcImh0dHBzOi8vd3d3LjdpZGouY29tL2RqL1xcXCIgKyB0MSArIFxcXCIuaHRtbFxcXCIsICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBsYXl1cmw7XFxuICAgICAgICAgICAgICAgIH0pLCB7XFxuICAgICAgICAgICAgICAgICAgICBibG9ja1J1bGVzOiBbJy5qcycsICcuY3NzJywgJy5qcGcnLCAnLnBuZycsICcuZ2lmJywgJy5zdmcnLCAnLmljbyddXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBpZiAodDIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFt0c1swXV0sIDEsICfpgInmi6nkuIvovb3pn7PotKgnKS5zZWxlY3QoKHVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnZG93bmxvYWQ6Ly8nICsgdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgdXJsKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gdXJsICsgJyNpc011c2ljPXRydWUjJztcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuXFxuXFxuXFxuICAgICAgICAgICAgY2FzZSAnZGo4JzpcXG4gICAgICAgICAgICAgICAgdSA9ICdodHRwczovL3d3dy5kanU4LmNvbSc7XFxuICAgICAgICAgICAgICAgIGl0ZW0gPSB1ICsgJy9pay96Lz8nICsgZXhlY3V0ZVdlYlJ1bGUodSArICcvZGlzY28vJyArIHQxICsgJy8nLCAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmdXJsO1xcbiAgICAgICAgICAgICAgICB9KSwge1xcbiAgICAgICAgICAgICAgICAgICAgYmxvY2tSdWxlczogWycuanMnLCAnLmNzcycsICcuanBnJywgJy5wbmcnLCAnLmdpZicsICcuc3ZnJywgJy5pY28nXVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgaXRlbSA9IGZldGNoQ29kZUJ5V2ViVmlldyhpdGVtLCB7XFxuICAgICAgICAgICAgICAgICAgICBibG9ja1J1bGVzOiBbJy5jc3MnLCAnLmpwZycsICcucG5nJywgJy5naWYnLCAnLnN2ZycsICcuaWNvJ11cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIHVybCA9IHBkZmgoaXRlbSwgXFxcImF1ZGlvJiZzcmNcXFwiKTtcXG4gICAgICAgICAgICAgICAgaWYgKHQyKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChbdHNbMF1dLCAxLCAn6YCJ5oup5LiL6L296Z+z6LSoJykuc2VsZWN0KCh1cmwpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2Rvd25sb2FkOi8vJyArIHVybDtcXG4gICAgICAgICAgICAgICAgICAgIH0sIHVybCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVybCArICcjaXNNdXNpYz10cnVlIyc7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcblxcblxcblxcbiAgICAgICAgICAgIGNhc2UgJ2RqOSc6XFxuICAgICAgICAgICAgICAgIHVybCA9IGV4ZWN1dGVXZWJSdWxlKCdodHRwczovL20uZGp5eXkuY29tL3BsYXkvJyArIHQxICsgJy5odG1sJywgJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGxheXVybDtcXG4gICAgICAgICAgICAgICAgfSksIHtcXG4gICAgICAgICAgICAgICAgICAgIGJsb2NrUnVsZXM6IFsnLmpzJywgJy5jc3MnLCAnLmpwZycsICcucG5nJywgJy5naWYnLCAnLnN2ZycsICcuaWNvJ11cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGlmICh0Mikge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoW3RzWzBdXSwgMSwgJ+mAieaLqeS4i+i9vemfs+i0qCcpLnNlbGVjdCgodXJsKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdkb3dubG9hZDovLycgKyB1cmw7XFxuICAgICAgICAgICAgICAgICAgICB9LCB1cmwpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiB1cmwgKyAnI2lzTXVzaWM9dHJ1ZSMnO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgIH1cXG4gICAgfVxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuKRoueoi+W6j+mmlumhtVwiLFwicGF0aFwiOlwiaG9tZVwiLFwicnVsZVwiOlwianM6XFxuZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvbGliP3J1bGU95q2M6K+N6YCC6YWNJywge30pKS5ydWxlKTtcXG5kID0gW107XFxudHJ5IHtcXG4gICAgaVRhZyA9IHN0b3JhZ2UwLmdldE15VmFyKHBsYXRmb3JtICsgXFxcIl9pVGFnXFxcIik7XFxuICAgIGlmIChpVGFnID09IFxcXCJcXFwiKVxcbiAgICAgICAgaVRhZyA9IHt9LFxcbiAgICAgICAgJC5yZXF1aXJlKHBsYXRmb3JtICsgJz9ydWxlPeatjOivjemAgumFjScpLmlUYWcoKTtcXG4gICAgdGlkID0gZ2V0TXlWYXIoJ3RpZCcsICfmjqjojZAnKTtcXG4gICAgdHJyID0gT2JqZWN0LmtleXMoaVRhZ1t0aWRdKTtcXG4gICAgdGlpID0gZ2V0TXlWYXIoJ3RpaScsICcwJyk7XFxuICAgIGlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgICAgIE9iamVjdC5rZXlzKGlUYWcpLm1hcCgobmFtZSwgaWkpID0+IHtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogdGlkID09IG5hbWUgPyBSaWNoKFN0cm9uZyhDb2xvcihuYW1lKSkpIDogbmFtZSxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh0aWQpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCd0aWQnLCB0aWQpO1xcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcigndGlpJyk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgICAgICB9LCBuYW1lKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZV9ibGFuaydcXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmVfYmxhbmsnXFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICc8c3BhbiBzdHlsZT1cXFwiY29sb3I6I2ZmNjYwMVxcXCI+PGI+5YiH5o2i5o6l5Y+jPC9iPjwvc3Bhbj4nLFxcbiAgICAgICAgICAgIHVybDogJChwbGF0Zm9ybXMuc2xpY2UoMCwgOCkubWFwKHRpdGxlID0+IHtcXG4gICAgICAgICAgICAgICAgaWYgKHRpdGxlID09IHBsYXRmb3JtKVxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSBSaWNoKFN0cm9uZyhDb2xvcih0aXRsZSkpKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRpdGxlXFxuICAgICAgICAgICAgfSksIDIsICfpgInmi6nmjqXlj6PlubPlj7AnKS5zZWxlY3QoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICBpZiAoIWlucHV0Lm1hdGNoKC9e4oCY4oCY4oCZ4oCZLykpIHtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdwbGF0Zm9ybScsIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoJ3RpZCcpO1xcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcigndGlpJyk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICBpbWc6ICQucmVxdWlyZSgnaW1hZ2U/cnVsZT3mrYzor43pgILphY0nKShwbGF0Zm9ybSksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdpY29uX3NtYWxsXzMnXFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICc8c3BhbiBzdHlsZT1cXFwiY29sb3I6I2ZmNjYwMVxcXCI+PGI+VEdY5pS26JePPC9iPjwvc3Bhbj4nLFxcbiAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9jb2xsZWN0aW9uI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5Iz9ydWxlPeatjOivjemAgumFjVxcXCIsXFxuICAgICAgICAgICAgaW1nOiAkLnJlcXVpcmUoJ2ltYWdlP3J1bGU95q2M6K+N6YCC6YWNJykoJ+aUtuiXjycpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnaWNvbl9zbWFsbF8zJyxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBwYWdlVGl0bGU6IFxcXCJUR1jmlLbol49cXFwiLFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJzxzcGFuIHN0eWxlPVxcXCJjb2xvcjojZmY2NjAxXFxcIj48Yj7nqIvluo/orr7nva48L2I+PC9zcGFuPicsXFxuICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3J1bGVMaXN0I25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5Iz9wYWdlVGl0bGU96Kej5p6Q566h55CGJnJ1bGU95q2M6K+N6YCC6YWNXFxcIixcXG4gICAgICAgICAgICBpbWc6ICQucmVxdWlyZSgnaW1hZ2U/cnVsZT3mrYzor43pgILphY0nKSgn6K6+572uJyksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdpY29uX3NtYWxsXzMnXFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfwn5SNJyxcXG4gICAgICAgICAgICBkZXNjOiAn5pCc57Si5YWz6ZSu6K+NIC8g5YiG5Lqr6ZO+5o6lJyxcXG4gICAgICAgICAgICB1cmw6ICQudG9TdHJpbmcoKHNfcGxhdGZvcm0pID0+IHtcXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0LnRyaW0oKSkge1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3NfcGxhdGZvcm0nLCBzX3BsYXRmb3JtKTtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdzX3QyJywgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcignc19wbGF0Zm9ybScpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoJ3NfdDMnKTtcXG4gICAgICAgICAgICAgICAgY2xlYXJNeVZhcignc190NCcpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vcGFnZS9zZWFyY2gjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjP3A9ZnlwYWdlJnJ1bGU95q2M6K+N6YCC6YWNXFxcIjtcXG4gICAgICAgICAgICB9LCBwbGF0Zm9ybSksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJpbnB1dFxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgaWQ6IGlkICsgXFxcIjpzZWFyY2gxXFxcIixcXG4gICAgICAgICAgICAgICAgcGFnZVRpdGxlOiBcXFwi6auY57qn5pCc57SiXFxcIixcXG4gICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRNeVZhcihcXFwic190MlxcXCIpLFxcbiAgICAgICAgICAgICAgICBvbkNoYW5nZTogXFxcInB1dE15VmFyKCdzX3QyJywgaW5wdXQpXFxcIlxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJ+aIkeeahOaUtuiXjycsXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9jb2xsZWN0aW9uP3J1bGU95q2M6K+N6YCC6YWNJyxcXG4gICAgICAgICAgICBpbWc6ICdoaWtlcjovL2ltYWdlcy9pY29uMScsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIHRpdGxlOiAn5Y6G5Y+y6K6w5b2VJyxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL2hpc3Rvcnk/cnVsZT3mrYzor43pgILphY0nLFxcbiAgICAgICAgICAgIGltZzogJ2hpa2VyOi8vaW1hZ2VzL2ljb24zJyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgdGl0bGU6ICfpq5jnuqfmkJzntKInLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoJ3NfcGxhdGZvcm0nKTtcXG4gICAgICAgICAgICAgICAgY2xlYXJNeVZhcignc190MycpO1xcbiAgICAgICAgICAgICAgICBjbGVhck15VmFyKCdzX3Q0Jyk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9wYWdlL3NlYXJjaCNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSM/cD1meXBhZ2UmcnVsZT3mrYzor43pgILphY1cXFwiO1xcbiAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgIGltZzogJ2hpa2VyOi8vaW1hZ2VzL2ljb24yJyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJ1xcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PGZvbnQgY29sb3I9I2ZmNjYwMT4nICsgdGlkICsgJzwvZm9udD48L2I+JyxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICAgICAgdHJyLm1hcCgobmFtZSwgaWkpID0+IHtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogdGlpID09IGlpID8gUmljaChTdHJvbmcoQ29sb3IobmFtZSkpKSA6IG5hbWUsXFxuICAgICAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgodGlpKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcigndGlpJywgdGlpKTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgICAgIH0sIGlpKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIGNvbF90eXBlOiAnYmxhbmtfYmxvY2snXFxuICAgICAgICB9KTtcXG4gICAgICAgIExvYWRpbmcoKTtcXG4gICAgfVxcbiAgICB1cmkgPSBpVGFnW3RpZF1bdHJyW3RpaV1dO1xcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodXJpKSkgJC5yZXF1aXJlKHBsYXRmb3JtICsgXFxcIj9ydWxlPeatjOivjemAgumFjVxcXCIpLmxhenkoMSwgdXJpKTtcXG4gICAgZWxzZSBkID0gZC5jb25jYXQodXJpKTtcXG59IGNhdGNoIChmZXRjaF9lcnJvcikge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLnvZHnu5zlvILluLggLyDmjqXlj6PltKnmuoPkuoZcXFwiLFxcbiAgICAgICAgZGVzYzogXFxcIuaNouS4quaOpeWPo+eci+eci+OAglxcXCIsXFxuICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgfVxcbiAgICB9KTtcXG4gICAgcGxhdGZvcm1zLnNsaWNlKDEsIDgpXFxuICAgICAgICAuZmlsdGVyKHRpdGxlID0+IHRpdGxlICE9IHBsYXRmb3JtKVxcbiAgICAgICAgLm1hcCh0aXRsZSA9PiB7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2ljb25fMl9yb3VuZCcsXFxuICAgICAgICAgICAgICAgIGltZzogJC5yZXF1aXJlKCdpbWFnZT9ydWxlPeatjOivjemAgumFjScpKHRpdGxlKSxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh0aXRsZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3BsYXRmb3JtJywgdGl0bGUpO1xcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcigndGlkJyk7XFxuICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKCd0aWknKTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgICAgICB9LCB0aXRsZSlcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH0pO1xcbn1cXG5NWV9QQUdFID09IDEgPyBzZXRQcmVSZXN1bHQoZCkgOiBzZXRSZXN1bHQoZCk7XFxuZGVsZXRlSXRlbUJ5Q2xzKCdsb2FkaW5nX2dpZicpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi4pGm6KeE5YiZ57yW6L6RXCIsXCJwYXRoXCI6XCJydWxlRWRpdFwiLFwicnVsZVwiOlwianM6XFxuZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvbGliP3J1bGU95q2M6K+N6YCC6YWNJywge30pKS5ydWxlKTtcXG5kID0gW107XFxuanhfczEgPSBnZXRNeVZhcignanhfczEnLCAnMCcpID09ICcwJztcXG5qeF9zMiA9IGdldE15VmFyKCdqeF9zMicsICcwJykgPT0gJzAnO1xcbmp4X3MzID0gZ2V0TXlWYXIoJ2p4X3MyJywgJzAnKSA9PSAnMSc7XFxuanhfdHlwZSA9IGdldE15VmFyKCdqeF90eXBlJywgJ2t3Jyk7XFxuanhfb3BlbiA9IGdldE15VmFyKCdqeF9vcGVuJywgJzEnKSA9PSAnMSc7XFxuanhfZG93biA9IGdldE15VmFyKCdqeF9kb3duJywgJzAnKSA9PSAnMSc7XFxuanhfdGlkID0gZ2V0TXlWYXIoJ2p4X3RpZCcsIE1ZX1BBUkFNUy5uZXcgPyAn5Z+65pysJyA6ICfpooTop4gnKTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJzxzcGFuIHN0eWxlPVxcXCJjb2xvcjojZmY2NjAxXFxcIj48Yj7op6PmnpDlubPlj7A8L2I+PC9zcGFuPicsXFxuICAgIHVybDogJChwbGF0Zm9ybXMuc2xpY2UoMSwgNikubWFwKHRpdGxlID0+IHtcXG4gICAgICAgIGlmICh0aXRsZSA9PSBqeF90eXBlKVxcbiAgICAgICAgICAgIHRpdGxlID0gUmljaChTdHJvbmcoQ29sb3IodGl0bGUpKSk7XFxuICAgICAgICByZXR1cm4gdGl0bGVcXG4gICAgfSksIDEsICfpgInmi6nmjqXlj6PlubPlj7AnKS5zZWxlY3QoKCkgPT4ge1xcbiAgICAgICAgaWYgKCFpbnB1dC5tYXRjaCgvXuKAmOKAmOKAmeKAmS8pKSB7XFxuICAgICAgICAgICAgcHV0TXlWYXIoJ2p4X3R5cGUnLCBpbnB1dCk7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgfSksXFxuICAgIGltZzogJC5yZXF1aXJlKCdpbWFnZT9ydWxlPeatjOivjemAgumFjScpKGp4X3R5cGUpLFxcbiAgICBjb2xfdHlwZTogJ2ljb25fc21hbGxfMydcXG59KTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJzxzcGFuIHN0eWxlPVxcXCJjb2xvcjojZmY2NjAxXFxcIj48Yj7lkK/nlKjor5XlkKw8L2I+PC9zcGFuPicsXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoSywgb3BlbikgPT4ge1xcbiAgICAgICAgaWYgKEspIHtcXG4gICAgICAgICAgICBwdXRNeVZhcignanhfb3BlbicsIG9wZW4pO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICByZXR1cm4gJChcXFwiXFxcIiwgXFxcIuivt+i+k+WFpea/gOa0u+WvhuWMmVxcXCIpLmlucHV0KChvcGVuKSA9PiB7XFxuICAgICAgICAgICAgICAgIGlmIChtZDUoaW5wdXQpID09IGdldE15VmFyKCdqeF9tMScpKSB7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignanhfczEnLCAnMCcpO1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2p4X29wZW4nLCBvcGVuKTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+a/gOa0u+Wksei0pVxcXCI7XFxuICAgICAgICAgICAgfSwgb3Blbik7XFxuICAgICAgICB9XFxuICAgIH0sIGp4X3MxLCBqeF9vcGVuID8gJzAnIDogJzEnKSxcXG4gICAgaW1nOiAnaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9tZXNzeS8nICsgKGp4X29wZW4gPyA1NSA6IDYzKSArICcuc3ZnJyxcXG4gICAgY29sX3R5cGU6ICdpY29uX3NtYWxsXzMnXFxufSk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICc8c3BhbiBzdHlsZT1cXFwiY29sb3I6I2ZmNjYwMVxcXCI+PGI+5ZCv55So5LiL6L29PC9iPjwvc3Bhbj4nLFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKEssIGRvd24pID0+IHtcXG4gICAgICAgIGlmIChLKSB7XFxuICAgICAgICAgICAgcHV0TXlWYXIoJ2p4X2Rvd24nLCBkb3duKTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgcmV0dXJuICQoXFxcIlxcXCIsIFxcXCLor7fovpPlhaXmv4DmtLvlr4bljJlcXFwiKS5pbnB1dCgoZG93bikgPT4ge1xcbiAgICAgICAgICAgICAgICBpZiAobWQ1KGlucHV0KSA9PSBnZXRNeVZhcignanhfbTEnKSkge1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2p4X3MxJywgJzAnKTtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdqeF9kb3duJywgZG93bik7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/mv4DmtLvlpLHotKVcXFwiO1xcbiAgICAgICAgICAgIH0sIGRvd24pO1xcbiAgICAgICAgfVxcbiAgICB9LCBqeF9zMSwganhfZG93biA/ICcwJyA6ICcxJyksXFxuICAgIGltZzogJ2h0dHBzOi8vaGlrZXJmYW5zLmNvbS90dWJpYW8vbWVzc3kvJyArIChqeF9kb3duID8gNTUgOiA2MykgKyAnLnN2ZycsXFxuICAgIGNvbF90eXBlOiAnaWNvbl9zbWFsbF8zJ1xcbn0pO1xcbltcXFwi6aKE6KeIXFxcIiwgXFxcIuWfuuacrFxcXCIsIFxcXCLpn7PotKhcXFwiLCBcXFwi6Kej5p6QXFxcIiwgXFxcIuaLk+WxlVxcXCJdLm1hcChuYW1lID0+IHtcXG4gICAgaSA9IGp4X3RpZCA9PSBuYW1lXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogUmljaChTdHJvbmcoaSA/IENvbG9yKG5hbWUpIDogbmFtZSkpLFxcbiAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh0aWQsIHRpaSwgZmVnKSA9PiB7XFxuICAgICAgICAgICAgaWYgKHRpaSkge1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcignanhfdGlkJywgdGlkKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgfSwgbmFtZSwgIWksICFqeF9zMiksXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfNSdcXG4gICAgfSk7XFxufSk7XFxuc3dpdGNoIChqeF90aWQpIHtcXG4gICAgY2FzZSAn6aKE6KeIJzpcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IFN0cm9uZyhnZXRNeVZhcignanhfdGl0bGUnKSksXFxuICAgICAgICAgICAgZGVzYzogW1xcXCJtcDNcXFwiLCBcXFwiaHFcXFwiLCBcXFwic3FcXFwiLCBcXFwiaHJcXFwiLCBcXFwienFcXFwiXS5tYXAodCA9PiBnZXRNeVZhcihcXFwianhfXFxcIiArIHQpICE9IFxcXCJcXFwiID8gJ+KYhScgOiAn4piGJykuam9pbihcXFwiXFxcIiksXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInLFxcbiAgICAgICAgICAgIGltZzogZ2V0TXlWYXIoJ2p4X2ltZycpIHx8ICQucmVxdWlyZSgnaW1hZ2U/cnVsZT3mrYzor43pgILphY0nKSgpXFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKCdqeF9kZXNjJykgKyAn5LioJyArIGdldE15VmFyKCdqeF91cmwnKSxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfMScsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgbGluZVZpc2libGU6IGZhbHNlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZV9ibGFuaydcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIoJ2p4X2NvbnRlbnQnLCAnXFxcXG5cXFxcblxcXFxuXFxcXG5cXFxcbicpLnJlcGxhY2UoL1xcXFxuL2csICc8YnI+JyksXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdyaWNoX3RleHQnXFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJ1xcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn5L2/55So5p2D6ZmQJyxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKEspID0+IHtcXG4gICAgICAgICAgICAgICAgaWYgKEspIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXCJcXFwiLCBcXFwi6K+36L6T5YWl5a+G5YyZXFxcIikuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1kNShpbnB1dCkgPT0gZ2V0TXlWYXIoJ2p4X20xJykpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignanhfczEnLCAnMCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v6aqM6K+B5oiQ5YqfXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/pqozor4HlpLHotKVcXFwiO1xcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9LCBqeF9zMSksXFxuICAgICAgICAgICAgaW1nOiAnaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9tZXNzeS8nICsgKGp4X3MxID8gNTUgOiA2MykgKyAnLnN2ZycsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdpY29uXzJfcm91bmQnLFxcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn57yW6L6R5p2D6ZmQJyxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKEspID0+IHtcXG4gICAgICAgICAgICAgICAgaWYgKEspIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXCJcXFwiLCBcXFwi6K+36L6T5YWl5a+G5YyZXFxcIikuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1kNShpbnB1dCkgPT0gZ2V0TXlWYXIoJ2p4X20yJykpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignanhfczInLCAnMCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v6aqM6K+B5oiQ5YqfXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/pqozor4HlpLHotKVcXFwiO1xcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9LCBqeF9zMiksXFxuICAgICAgICAgICAgaW1nOiAnaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9tZXNzeS8nICsgKGp4X3MyID8gNTUgOiA2MykgKyAnLnN2ZycsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdpY29uXzJfcm91bmQnXFxuICAgICAgICB9KTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfln7rmnKwnOlxcbiAgICAgICAgW1xcbiAgICAgICAgICAgIFsn5b+F5aGr77yM5rqQ5qCH6K+GJywgJ3VybCddLFxcbiAgICAgICAgICAgIFsn5b+F5aGr77yM5rqQ5ZCN56ewJywgJ3RpdGxlJ10sXFxuICAgICAgICAgICAgWyfpgInloavvvIzmupDlm77moIcnLCAnaW1nJ10sXFxuICAgICAgICAgICAgWyfpgInloavvvIzmupDliIbnu4QnLCAnZGVzYyddLFxcbiAgICAgICAgICAgIFsn6YCJ5aGr77yM5rqQ5rOo6YeKJywgJ2NvbnRlbnQnXVxcbiAgICAgICAgXS5tYXAoW2EsIGJdID0+IHtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICBkZXNjOiBhLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2lucHV0JyxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0TXlWYXIoXFxcImp4X1xcXCIgKyBiKSxcXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBgcHV0TXlWYXIoXFxcImp4XyR7Yn1cXFwiLCBpbnB1dClgLFxcbiAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0OiB0cnVlXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH0pO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+mfs+i0qCc6XFxuICAgICAgICBbXFxuICAgICAgICAgICAgWyfpgInloavvvIzmoIflh4bpn7PotKjjgILkvovvvJp0Mj1cXFwiMTI4a1xcXCInLCAnbXAzJ10sXFxuICAgICAgICAgICAgWyfpgInloavvvIzpq5jlk4Hpn7PotKjjgILkvovvvJp0Mj1cXFwiMzIwa1xcXCInLCAnaHEnXSxcXG4gICAgICAgICAgICBbJ+mAieWhq++8jOaXoOaNn+mfs+i0qOOAguS+i++8mnQyPVxcXCIyMDAwa1xcXCInLCAnc3EnXSxcXG4gICAgICAgICAgICBbJ+mAieWhq++8jOmrmOWTgeaXoOaNn+OAguS+i++8mnQyPVxcXCI0MDAwa1xcXCInLCAnaHInXSxcXG4gICAgICAgICAgICBbJ+mAieWhq++8jOeri+S9k+aXoOaNn+OAguS+i++8mnQyPVxcXCIyMDAwMGtcXFwiJywgJ3pxJ11cXG4gICAgICAgIF0ubWFwKFthLCBiXSA9PiB7XFxuICAgICAgICAgICAgXyA9IHtcXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0OiB0cnVlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChqeF9zMiB8fCBqeF9zMykge1xcbiAgICAgICAgICAgICAgICBfLmRlZmF1bHRWYWx1ZSA9IGFlc0RlY29kZSgnaGs2NjY2NjY2MTA5JywgZ2V0TXlWYXIoXFxcImp4X1xcXCIgKyBiKSk7XFxuICAgICAgICAgICAgICAgIF8ub25DaGFuZ2UgPSAkLnRvU3RyaW5nKChuYW1lKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQudHJpbSgpICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIobmFtZSwgZ2V0UHJpdmF0ZUpTKGlucHV0LnRyaW0oKSkpO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihuYW1lLCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0sIFxcXCJqeF9cXFwiICsgYik7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgXy5kZWZhdWx0VmFsdWUgPSBcXFwi5rKh5pyJ5p2D6ZmQ77yM6K+36Kej6ZSB44CCXFxcIlxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICBkZXNjOiBhLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2lucHV0JyxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IF9cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH0pO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+ino+aekCc6XFxuICAgICAgICBfID0ge1xcbiAgICAgICAgICAgIGhpZ2hsaWdodDogdHJ1ZSxcXG4gICAgICAgICAgICB0eXBlOiBcXFwidGV4dGFyZWFcXFwiLFxcbiAgICAgICAgICAgIGhlaWdodDogN1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKGp4X3MyIHx8IGp4X3MzKSB7XFxuICAgICAgICAgICAgXy5kZWZhdWx0VmFsdWUgPSBhZXNEZWNvZGUoJ2hrNjY2NjY2NjEwOScsIGdldE15VmFyKFxcXCJqeF9qaWV4aVxcXCIpKTtcXG4gICAgICAgICAgICBfLm9uQ2hhbmdlID0gJC50b1N0cmluZygobmFtZSkgPT4ge1xcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQudHJpbSgpICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihuYW1lLCBnZXRQcml2YXRlSlMoaW5wdXQudHJpbSgpKSk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihuYW1lLCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9LCBcXFwianhfamlleGlcXFwiKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgXy5kZWZhdWx0VmFsdWUgPSBcXFwi5rKh5pyJ5p2D6ZmQ77yM6K+36Kej6ZSB44CCXFxcIlxcbiAgICAgICAgfVxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICBkZXNjOiAn5Y+Y6YeP77yadDEgJiB0MiAmIG5hbWUgJiBhcnRpc3RcXFxcblxcXFxu6K+05piO77ya5Y+v5Lul5LuO6Z+z6LSo6YKj6YeM5Lyg5Y+Y6YeP6L+H5p2l44CCXFxcXG5cXFxcbuiOt+WPlnVybOWwseihjO+8jOekuuS+i++8mlxcXFxudXJpID0gYGh0dHBzOi8vYmFpZHUuY29tP2E9JHt0MX0mYj0ke3QyfSZjPSR7bmFtZX0mZD0ke2F1dGhvcn1gO1xcXFxudXJsID0gSlNPTi5wYXJzZShmZXRjaCh1cmkpKS51cmw7JyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2lucHV0JyxcXG4gICAgICAgICAgICBleHRyYTogX1xcbiAgICAgICAgfSk7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5ouT5bGVJzpcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfloavlhpnlr4bljJnlkI7vvIzlj6/ku6Xlr7npn7PmupDlgZrkuIDkupvpmZDliLbjgIInLFxcbiAgICAgICAgICAgIGRlc2M6ICflr4bljJnml6Dms5Xov73lm57vvIzloavorrDlvpfkvY/nmoTvvIEnLFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgbGluZVZpc2libGU6IGZhbHNlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBTdHJvbmcoJ+e8lui+kea6kOeahOmZkOWIticpLFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJyxcXG4gICAgICAgICAgICBpbWc6ICdoaWtlcjovL2ltYWdlcy9ob21lX2ljb25fZWRpdCdcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJ+WPr+S7peeci++8jOWPr+S7pee8lui+kSjlpKfniLHml6DnloYpJyxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKEspID0+IHtcXG4gICAgICAgICAgICAgICAgaWYgKEspIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXCJcXFwiLCBcXFwi6K+36L6T5YWl5a+G5YyZXFxcIikuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1kNShpbnB1dCkgPT0gZ2V0TXlWYXIoJ2p4X20yJykpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignanhfczInLCAnMCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdqeF9tMicsICcnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+abtOaUueaIkOWKn1xcXCI7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v6aqM6K+B5aSx6LSlXFxcIjtcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfSwganhfczIpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9pY29uJyxcXG4gICAgICAgICAgICBpbWc6ICdodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL21lc3N5LycgKyAoanhfczIgPyA1NSA6IDYzKSArICcuc3ZnJ1xcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn5Y+v5Lul55yL77yM5LiN6IO957yW6L6RKOmYsuatouS6jOaUuSknLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoSzEsIEsyKSA9PiB7XFxuICAgICAgICAgICAgICAgIGlmIChnZXRNeVZhcignanhfbTInKSA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcIlxcXCIsIFxcXCLor7fovpPlhaXlr4bljJlcXFwiKS5pbnB1dCgoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcIlxcXCIsIFxcXCLor7fnoa7orqTlr4bljJlcXFwiKS5pbnB1dCgoaW5wdXQyKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PSBpbnB1dDIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdqeF9zMicsICcxJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignanhfbTInLCBtZDUoaW5wdXQpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/liqDlr4bmiJDlip9cXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/liqDlr4blpLHotKVcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKEsxKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwiXFxcIiwgXFxcIuaTjeS9nOexu+Wei++8muabtOaUueWvhuWMmVxcXFxu6K+36L6T5YWl5Y6f5a+G5YyZXFxcIikuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZDUoaW5wdXQpID09IGdldE15VmFyKCdqeF9tMicpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXCJcXFwiLCBcXFwi6K+36L6T5YWl5a+G5YyZXFxcIikuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcIlxcXCIsIFxcXCLor7fnoa7orqTlr4bljJlcXFwiKS5pbnB1dCgoaW5wdXQyKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0ID09IGlucHV0Mikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignanhfczInLCAnMScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignanhfbTInLCBtZDUoaW5wdXQpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5Yqg5a+G5oiQ5YqfXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WKoOWvhuWksei0pVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5Y6f5a+G5YyZ6aqM6K+B5aSx6LSlXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKEsyKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwiXFxcIiwgXFxcIuaTjeS9nOexu+Wei++8muadg+mZkOmZjee6p1xcXFxu6K+36L6T5YWl5a+G5YyZXFxcIikuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZDUoaW5wdXQpID09IGdldE15VmFyKCdqeF9tMicpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdqeF9zMicsICcxJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WvhuWMmemUmeivr++8jOmZjee6p+Wksei0pVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdqeF9zMicsICcxJyk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSwganhfczMsICFqeF9zMiksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2ljb24nLFxcbiAgICAgICAgICAgIGltZzogJ2h0dHBzOi8vaGlrZXJmYW5zLmNvbS90dWJpYW8vbWVzc3kvJyArIChqeF9zMiA/IDYzIDoganhfczMgPyA1NSA6IDYzKSArICcuc3ZnJ1xcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn5LiN6IO955yL77yM5LiN6IO957yW6L6RKOiDveeUqOWwseihjCknLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoSzEsIEsyKSA9PiB7XFxuICAgICAgICAgICAgICAgIGlmIChnZXRNeVZhcignanhfbTInKSA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcIlxcXCIsIFxcXCLor7fovpPlhaXlr4bljJlcXFwiKS5pbnB1dCgoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcIlxcXCIsIFxcXCLor7fnoa7orqTlr4bljJlcXFwiKS5pbnB1dCgoaW5wdXQyKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PSBpbnB1dDIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdqeF9zMicsICcyJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignanhfbTInLCBtZDUoaW5wdXQpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/liqDlr4bmiJDlip9cXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/liqDlr4blpLHotKVcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKEsxICYmIEsyKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwiXFxcIiwgXFxcIuaTjeS9nOexu+Wei++8muabtOaUueWvhuWMmVxcXFxu6K+36L6T5YWl5Y6f5a+G5YyZXFxcIikuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZDUoaW5wdXQpID09IGdldE15VmFyKCdqeF9tMicpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXCJcXFwiLCBcXFwi6K+36L6T5YWl5a+G5YyZXFxcIikuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcIlxcXCIsIFxcXCLor7fnoa7orqTlr4bljJlcXFwiKS5pbnB1dCgoaW5wdXQyKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0ID09IGlucHV0Mikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignanhfczInLCAnMicpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignanhfbTInLCBtZDUoaW5wdXQpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5Yqg5a+G5oiQ5YqfXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WKoOWvhuWksei0pVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5Y6f5a+G5YyZ6aqM6K+B5aSx6LSlXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2p4X3MyJywgJzInKTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9LCAhanhfczMsICFqeF9zMiksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2ljb24nLFxcbiAgICAgICAgICAgIGltZzogJ2h0dHBzOi8vaGlrZXJmYW5zLmNvbS90dWJpYW8vbWVzc3kvJyArIChqeF9zMiA/IDYzIDoganhfczMgPyA2MyA6IDU1KSArICcuc3ZnJ1xcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBTdHJvbmcoJ+S9v+eUqOa6kOeahOmZkOWIticpLFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJyxcXG4gICAgICAgICAgICBpbWc6ICdoaWtlcjovL2ltYWdlcy9ob21lX2ljb25fY29kZSdcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJ+ayoeaciemqjOivgSjkuI3mkJ7oirHnmoQpJyxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKEspID0+IHtcXG4gICAgICAgICAgICAgICAgaWYgKEspIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXCJcXFwiLCBcXFwi6K+36L6T5YWl5a+G5YyZXFxcIikuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1kNShpbnB1dCkgPT0gZ2V0TXlWYXIoJ2p4X20xJykpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignanhfczEnLCAnMCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdqeF9tMScsICcnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+mqjOivgeaIkOWKn1xcXCI7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v6aqM6K+B5aSx6LSlXFxcIjtcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfSwganhfczEpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9pY29uJyxcXG4gICAgICAgICAgICBpbWc6ICdodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL21lc3N5LycgKyAoanhfczEgPyA1NSA6IDYzKSArICcuc3ZnJ1xcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn5r+A5rS76aqM6K+BKOmqjOivgeS4gOS4iyknLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoSykgPT4ge1xcbiAgICAgICAgICAgICAgICBpZiAoZ2V0TXlWYXIoJ2p4X20xJykgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXCJcXFwiLCBcXFwi6K+36L6T5YWl5a+G5YyZXFxcIikuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXCJcXFwiLCBcXFwi6K+356Gu6K6k5a+G5YyZXFxcIikuaW5wdXQoKGlucHV0MikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT0gaW5wdXQyKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignanhfczEnLCAnMScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2p4X20xJywgbWQ1KGlucHV0KSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5Yqg5a+G5oiQ5YqfXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5Yqg5a+G5aSx6LSlXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChLKSB7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignanhfczEnLCAnMScpO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXCJcXFwiLCBcXFwi5pON5L2c57G75Z6L77ya5pu05pS55a+G5YyZXFxcXG7or7fovpPlhaXljp/lr4bljJlcXFwiKS5pbnB1dCgoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1kNShpbnB1dCkgPT0gZ2V0TXlWYXIoJ2p4X20xJykpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcIlxcXCIsIFxcXCLor7fovpPlhaXlr4bljJlcXFwiKS5pbnB1dCgoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwiXFxcIiwgXFxcIuivt+ehruiupOWvhuWMmVxcXCIpLmlucHV0KChpbnB1dDIpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT0gaW5wdXQyKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdqeF9zMScsICcxJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdqeF9tMScsIG1kNShpbnB1dCkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/liqDlr4bmiJDlip9cXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5Yqg5a+G5aSx6LSlXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/ljp/lr4bljJnpqozor4HlpLHotKVcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9LCBqeF9zMSksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2ljb24nLFxcbiAgICAgICAgICAgIGltZzogJ2h0dHBzOi8vaGlrZXJmYW5zLmNvbS90dWJpYW8vbWVzc3kvJyArIChqeF9zMSA/IDYzIDogNTUpICsgJy5zdmcnXFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfml7bmlYjpqozor4Eo562J5b6F5a6M5ZaEKScsXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2ljb24nLFxcbiAgICAgICAgICAgIGltZzogJ2h0dHBzOi8vaGlrZXJmYW5zLmNvbS90dWJpYW8vbWVzc3kvNjMuc3ZnJ1xcbiAgICAgICAgfSk7XFxuICAgICAgICBicmVhaztcXG59XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IFJpY2goU3Ryb25nKENvbG9yKCfkv53lrZjlubbpgIDlh7onKSkpLFxcbiAgICBkZXNjOiAn5LiK5qyh57yW6L6R77yaJyArICQuZGF0ZUZvcm1hdChOdW1iZXIoZ2V0TXlWYXIoXFxcImp4X3RpbWVcXFwiKSkgfHwgbmV3IERhdGUoKS5nZXRUaW1lKCksICd5eXl5LU1NLWRkIGhoOm1tOnNzJyksXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICBpZiAoZ2V0TXlWYXIoJ2p4X20yJykgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICByZXR1cm4gJChcXFwiXFxcIiwgXFxcIuivt+i+k+WFpeWvhuWMmVxcXCIpLmlucHV0KCgpID0+IHtcXG4gICAgICAgICAgICAgICAgaWYgKG1kNShpbnB1dCkgPT0gZ2V0TXlWYXIoJ2p4X20yJykpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImppZXhpP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuc2V0RWRpdCgpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/pqozor4HlpLHotKXvvIzkuI3mlK/mjIHkv53lrZjvvIzor7flt6bkuIrop5LmiYvliqjpgIDlh7rjgIJcXFwiO1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJqaWV4aT9ydWxlPeatjOivjemAgumFjVxcXCIpLnNldEVkaXQoKTtcXG4gICAgICAgIH1cXG4gICAgfSksXFxuICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXG4gICAgfVxcbn0pO1xcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuKRpeinhOWImeWIl+ihqFwiLFwicGF0aFwiOlwicnVsZUxpc3RcIixcInJ1bGVcIjpcImpzOlxcbmV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL2xpYj9ydWxlPeatjOivjemAgumFjScsIHt9KSkucnVsZSk7XFxuZCA9IFtdO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn5paw5aKe6Kej5p6QJyxcXG4gICAgY29sX3R5cGU6ICd0ZXh0XzInLFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICAgICAgW1xcXCJ0eXBlXFxcIiwgXFxcIm9wZW5cXFwiLCBcXFwiZG93blxcXCIsIFxcXCJpbWdcXFwiLCBcXFwidGl0bGVcXFwiLCBcXFwiZGVzY1xcXCIsIFxcXCJ1cmxcXFwiLCBcXFwiY29udGVudFxcXCIsIFxcXCJtcDNcXFwiLCBcXFwiaHFcXFwiLCBcXFwic3FcXFwiLCBcXFwiaHJcXFwiLCBcXFwienFcXFwiLCBcXFwiamlleGlcXFwiLCBcXFwiczFcXFwiLCBcXFwibTFcXFwiLCBcXFwiczJcXFwiLCBcXFwibTJcXFwiLCBcXFwidGltZVxcXCIsIFxcXCJ0aWRcXFwiLCBcXFwidWlkXFxcIl0ubWFwKHQgPT4ge1xcbiAgICAgICAgICAgIGNsZWFyTXlWYXIoJ2p4XycgKyB0KVxcbiAgICAgICAgfSk7XFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9ydWxlRWRpdCNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSM/cGFnZVRpdGxlPeinhOWImee8lui+kSZydWxlPeatjOivjemAgumFjSdcXG4gICAgfSksXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBuZXc6IDFcXG4gICAgfVxcbn0pO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn5YiG5Lqr6YCJ5LitJyxcXG4gICAgY29sX3R5cGU6ICd0ZXh0XzInLFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICAgICAgenkgPSBzdG9yYWdlMC5nZXRNeVZhcihcXFwianhsaXN0MlxcXCIsIHt9KTtcXG4gICAgICAgIHp1ID0gT2JqZWN0LmtleXMoenkpO1xcbiAgICAgICAgaWYgKHp1Lmxlbmd0aCA9PSAwKSB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+ayoeaciemAieS4reino+aekFxcXCI7XFxuICAgICAgICB9IGVsc2UgaWYgKHp1Lmxlbmd0aCA9PSAxKSB7XFxuICAgICAgICAgICAgXyA9IHp5W3p1WzBdXTtcXG4gICAgICAgICAgICBpZiAoXy5tMSAmJiBfLm0xICE9IFxcXCJcXFwiICYmIF8ubTEubGVuZ3RoID09IDMyKSBfLnMxID0gXFxcIjFcXFwiLCBfLm9wZW4gPSBcXFwiMFxcXCIsIF8uZG93biA9IFxcXCIwXFxcIjtcXG4gICAgICAgICAgICBpZiAoXy5tMiAmJiBfLm0yICE9IFxcXCJcXFwiICYmIF8ubTEubGVuZ3RoID09IDMyICYmIF8uczIgPT0gXFxcIjBcXFwiKSBfLnMyID0gXFxcIjJcXFwiO1xcbiAgICAgICAgICAgIF9fID0ge307XFxuICAgICAgICAgICAgX19bXy50eXBlXSA9IFtfXTtcXG4gICAgICAgICAgICBfXyA9IEpTT04uc3RyaW5naWZ5KF9fKTtcXG4gICAgICAgICAgICBfID0gYmFzZTY0RW5jb2RlKF9fKTtcXG4gICAgICAgICAgICBjbGVhck15VmFyKCdqeGxpc3QyJyk7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiY29weTovL+atjOivjemAgumFjeino+aekOWPo+S7pO+8jOaJk+W8gOa1t+mYlOWNs+WPr+WvvOWFpVxcXFxu77+lVGV4dO+/pVxcXCIgKyBfICsgJ0BpbXBvcnQ9anM6JC5yZXF1aXJlKFxcXCJqaWV4aT9ydWxlPeatjOivjemAgumFjVxcXCIpLnNldFJ1bGUoaW5wdXQpOyc7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGpzb24gPSB7fTtcXG4gICAgICAgICAgICB6dS5tYXAoa2V5ID0+IHtcXG4gICAgICAgICAgICAgICAgXyA9IHp5W2tleV07XFxuICAgICAgICAgICAgICAgIGlmICghanNvbltfLnR5cGVdKSB7XFxuICAgICAgICAgICAgICAgICAgICBqc29uW18udHlwZV0gPSBbXTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoXy5tMSAmJiBfLm0xICE9IFxcXCJcXFwiICYmIF8ubTEubGVuZ3RoID09IDMyKSB7XFxuICAgICAgICAgICAgICAgICAgICBfLnMxID0gXFxcIjFcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgXy5vcGVuID0gXFxcIjBcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgXy5kb3duID0gXFxcIjBcXFwiO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmIChfLm0yICYmIF8ubTIgIT0gXFxcIlxcXCIgJiYgXy5tMS5sZW5ndGggPT0gMzIgJiYgXy5zMiA9PSBcXFwiMFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgIF8uczIgPSBcXFwiMlxcXCI7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAganNvbltfLnR5cGVdLnB1c2goXyk7XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgdCA9IGJhc2U2NEVuY29kZShKU09OLnN0cmluZ2lmeShqc29uKSk7XFxuICAgICAgICAgICAgdSA9IHNoYXJlUGFzdGUodCk7XFxuICAgICAgICAgICAgY2xlYXJNeVZhcignanhsaXN0MicpO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcImNvcHk6Ly/mrYzor43pgILphY3op6PmnpDlj6Pku6TvvIzmiZPlvIDmtbfpmJTljbPlj6/lr7zlhaVcXFxcbu+/pVBhc3Rl77+lXFxcIiArIHUgKyAnQGltcG9ydD1qczokLnJlcXVpcmUoXFxcImppZXhpP3J1bGU95q2M6K+N6YCC6YWNXFxcIikuc2V0UnVsZShpbnB1dCk7JztcXG4gICAgICAgIH1cXG4gICAgfSksXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBuZXc6IDFcXG4gICAgfVxcbn0pO1xcbmxldCBqeF9wbGF0Zm9ybSA9IGdldE15VmFyKCdqeF9wbGF0Zm9ybScsICdsaWInKTtcXG5wbGF0Zm9ybXMuc2xpY2UoMCwgNikubWFwKHBsYXRmb3JtID0+IHtcXG4gICAgaWYgKGp4X3BsYXRmb3JtID09IHBsYXRmb3JtKVxcbiAgICAgICAgcGxhdGZvcm0gPSBSaWNoKFN0cm9uZyhDb2xvcihwbGF0Zm9ybSkpKTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBwbGF0Zm9ybSxcXG4gICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgocGxhdGZvcm0pID0+IHtcXG4gICAgICAgICAgICBpZiAoIXBsYXRmb3JtLm1hdGNoKC9e4oCY4oCY4oCZ4oCZLykpIHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2p4X3BsYXRmb3JtJywgcGxhdGZvcm0pO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICB9LCBwbGF0Zm9ybSksXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxuICAgIH0pO1xcbn0pO1xcbmp4bGlzdCA9IFtdO1xcbmlmIChqeF9wbGF0Zm9ybSA9PSBcXFwibGliXFxcIikge1xcbiAgICBwbGF0Zm9ybXMuc2xpY2UoMSwgNikubWFwKHBsYXRmb3JtID0+IHtcXG4gICAgICAgIGp4bGlzdCA9IGp4bGlzdC5jb25jYXQoc3RvcmFnZTAuZ2V0SXRlbSgnanhsaXN0XycgKyBwbGF0Zm9ybSwgW10pKTtcXG4gICAgfSk7XFxufSBlbHNlIHtcXG4gICAganhsaXN0ID0gc3RvcmFnZTAuZ2V0SXRlbSgnanhsaXN0XycgKyBqeF9wbGF0Zm9ybSwgW10pO1xcbn1cXG5pZiAoanhsaXN0Lmxlbmd0aCA9PSAwKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogUmljaChTdHJvbmcoQ29sb3IoXFxcIuayoeacieino+aekFxcXCIpKSksXFxuICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgfVxcbiAgICB9KTtcXG59IGVsc2Uge1xcbiAgICBqeGxpc3QubWFwKF8gPT4ge1xcbiAgICAgICAgaSA9IE9iamVjdC5rZXlzKHN0b3JhZ2UwLmdldE15VmFyKFxcXCJqeGxpc3QyXFxcIiwge30pKS5pbmRleE9mKG1kNShfLnR5cGUgKyAnOicgKyBfLnRpdGxlICsgJzonICsgXy51cmwpKSA9PSAtMTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IFN0cm9uZyhpID8gXy50aXRsZSA6IENvbG9yKF8udGl0bGUpKSxcXG4gICAgICAgICAgICBkZXNjOiBbXFxcIm1wM1xcXCIsIFxcXCJocVxcXCIsIFxcXCJzcVxcXCIsIFxcXCJoclxcXCIsIFxcXCJ6cVxcXCJdLm1hcCh0ID0+IF9bdF0gPyAn4piFJyA6ICfimIYnKS5qb2luKFxcXCJcXFwiKSxcXG4gICAgICAgICAgICB1cmw6ICQoW1xcXCLliIbkuqtcXFwiLCBcXFwi57yW6L6RXFxcIiwgXFxcIuWIoOmZpFxcXCIsIFxcXCLnp7vliqhcXFwiXS5jb25jYXQoaSA/ICfpgInkuK0nIDogJ+WPlua2iOmAieS4rScpLCAyLCAn6YCJ5oup5LiL6L296Z+z6LSoJykuc2VsZWN0KCh0eXBlLCB1cmwpID0+IHtcXG4gICAgICAgICAgICAgICAganhsaXN0ID0gc3RvcmFnZTAuZ2V0SXRlbSgnanhsaXN0XycgKyB0eXBlLCBbXSk7XFxuICAgICAgICAgICAgICAgIGkgPSBqeGxpc3QubWFwKF8gPT4gXy51cmwpLmluZGV4T2YodXJsKTtcXG4gICAgICAgICAgICAgICAgXyA9IGp4bGlzdFtpXTtcXG4gICAgICAgICAgICAgICAgbSA9IG1kNShfLnR5cGUgKyAnOicgKyBfLnRpdGxlICsgJzonICsgXy51cmwpO1xcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGlucHV0KSB7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlICfliIbkuqsnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfLm0xICYmIF8ubTEgIT0gXFxcIlxcXCIgJiYgXy5tMS5sZW5ndGggPT0gMzIpIF8uczEgPSBcXFwiMVxcXCIsIF8ub3BlbiA9IFxcXCIwXFxcIiwgXy5kb3duID0gXFxcIjBcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfLm0yICYmIF8ubTIgIT0gXFxcIlxcXCIgJiYgXy5tMS5sZW5ndGggPT0gMzIgJiYgXy5zMiA9PSBcXFwiMFxcXCIpIF8uczIgPSBcXFwiMlxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgX18gPSB7fTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBfX1t0eXBlXSA9IFtfXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBfXyA9IEpTT04uc3RyaW5naWZ5KF9fKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBfID0gYmFzZTY0RW5jb2RlKF9fKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImNvcHk6Ly/mrYzor43pgILphY3op6PmnpDlj6Pku6TvvIzmiZPlvIDmtbfpmJTljbPlj6/lr7zlhaVcXFxcbu+/pVRleHTvv6VcXFwiICsgXyArICdAaW1wb3J0PWpzOiQucmVxdWlyZShcXFwiamlleGk/cnVsZT3mrYzor43pgILphY1cXFwiKS5zZXRSdWxlKGlucHV0KTsnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAn57yW6L6RJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICBbXFxcInR5cGVcXFwiLCBcXFwib3BlblxcXCIsIFxcXCJkb3duXFxcIiwgXFxcImltZ1xcXCIsIFxcXCJ0aXRsZVxcXCIsIFxcXCJkZXNjXFxcIiwgXFxcInVybFxcXCIsIFxcXCJjb250ZW50XFxcIiwgXFxcIm1wM1xcXCIsIFxcXCJocVxcXCIsIFxcXCJzcVxcXCIsIFxcXCJoclxcXCIsIFxcXCJ6cVxcXCIsIFxcXCJqaWV4aVxcXCIsIFxcXCJzMVxcXCIsIFxcXCJtMVxcXCIsIFxcXCJzMlxcXCIsIFxcXCJtMlxcXCIsIFxcXCJ0aW1lXFxcIiwgXFxcInRpZFxcXCIsIFxcXCJ1aWRcXFwiXS5tYXAodCA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoJ2p4XycgKyB0KVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdqeF91aWQnLCBtKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhfKS5tYXAodCA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdqeF8nICsgdCwgX1t0XSB8fCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL3BhZ2UvcnVsZUVkaXQjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjP3BhZ2VUaXRsZT3op4TliJnnvJbovpEmcnVsZT3mrYzor43pgILphY0nO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAn5Yig6ZmkJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwi56Gu5a6a5Yig6ZmkXFxcIiArIF8udHlwZSArIFxcXCLop6PmnpDigJxcXFwiICsgXy50aXRsZSArICfigJ3lkJfvvJ9cXFxcbuatpOaTjeS9nOS4jeWPr+mAhu+8jOivt+iwqOaFjumAieaLqeOAgicpLmNvbmZpcm0oKHR5cGUsIGp4bGlzdCwgaSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqeGxpc3Quc3BsaWNlKGksIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKCdqeGxpc3RfJyArIHR5cGUsIGp4bGlzdCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB0eXBlLCBqeGxpc3QsIGkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAn56e75YqoJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICBqeGxpc3Quc3BsaWNlKGksIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHp1ID0ganhsaXN0Lm1hcChfID0+IF8udGl0bGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKHp1LmNvbmNhdChcXFwi5pyA5ZCO6Z2iXFxcIiksIDIsICfor7fpgInmi6nnp7vliqjkvY3nva4nKS5zZWxlY3QoKHR5cGUsIGp4bGlzdCwgXywgenUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IHp1LmluZGV4T2YoaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PSAtMSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp4bGlzdC5wdXNoKF8pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqeGxpc3Quc3BsaWNlKGksIDAsIF8pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKFxcXCJqeGxpc3RfXFxcIiArIHR5cGUsIGp4bGlzdCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB0eXBlLCBqeGxpc3QsIF8sIHp1KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ+mAieS4rSc6XFxuICAgICAgICAgICAgICAgICAgICAgICAganhsaXN0MiA9IHN0b3JhZ2UwLmdldE15VmFyKFxcXCJqeGxpc3QyXFxcIiwge30pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGp4bGlzdDJbbV0gPSBfO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKFxcXCJqeGxpc3QyXFxcIiwganhsaXN0Mik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAn5Y+W5raI6YCJ5LitJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICBqeGxpc3QyID0gc3RvcmFnZTAuZ2V0TXlWYXIoXFxcImp4bGlzdDJcXFwiLCB7fSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGp4bGlzdDJbbV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcImp4bGlzdDJcXFwiLCBqeGxpc3QyKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9LCBfLnR5cGUsIF8udXJsKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcicsXFxuICAgICAgICAgICAgaW1nOiBfLmltZyB8fCAkLnJlcXVpcmUoJ2ltYWdlP3J1bGU95q2M6K+N6YCC6YWNJykoKVxcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBfLnR5cGUgKyAn5LioJyArIF8uZGVzYyArICfkuKgnICsgXy51cmwsXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh0eXBlLCB1cmwpID0+IHtcXG4gICAgICAgICAgICAgICAganhsaXN0ID0gc3RvcmFnZTAuZ2V0SXRlbSgnanhsaXN0XycgKyB0eXBlLCBbXSk7XFxuICAgICAgICAgICAgICAgIGkgPSBqeGxpc3QubWFwKF8gPT4gXy51cmwpLmluZGV4T2YodXJsKTtcXG4gICAgICAgICAgICAgICAganhfb3BlbiA9IChfKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoXy5zMSA9PSAnMCcpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBfLm9wZW4gPSBfLm9wZW4gPT0gJzEnID8gJzAnIDogJzEnO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChfLm9wZW4gPT0gJzAnKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcIlxcXCIsIFxcXCLor7fovpPlhaXmv4DmtLvlr4bljJlcXFwiKS5pbnB1dCgoanhsaXN0LCBpLCBfKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZDUoaW5wdXQpID09IF8ubTEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8uczEgPSAnMCc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLm9wZW4gPSAnMSc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqeGxpc3RbaV0gPSBfO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAuc2V0SXRlbSgnanhsaXN0XycgKyBfLnR5cGUsIGp4bGlzdCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8v5r+A5rS75oiQ5Yqf77yM5qyi6L+O5L2/55SoJztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5a+G5YyZ6ZSZ6K+v77yM5peg5rOV5ZCv55SoXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBqeGxpc3QsIGksIF8pO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBfLm9wZW4gPSAnMCdcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGp4bGlzdFtpXSA9IF87XFxuICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKCdqeGxpc3RfJyArIHR5cGUsIGp4bGlzdCk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiBqeF9vcGVuKGp4bGlzdFtpXSk7XFxuICAgICAgICAgICAgfSwgXy50eXBlLCBfLnVybCksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2ljb24nLFxcbiAgICAgICAgICAgIGltZzogJ2h0dHBzOi8vaGlrZXJmYW5zLmNvbS90dWJpYW8vbWVzc3kvJyArIChfLm9wZW4gPT0gJzEnID8gNTUgOiA2MykgKyAnLnN2ZycsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgbGluZVZpc2libGU6IGZhbHNlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgIH0pO1xcbn1cXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLikafop6PmnpDlpITnkIZcIixcInBhdGhcIjpcImppZXhpXCIsXCJydWxlXCI6XCIkLmV4cG9ydHMgPSB7XFxuXFxuICAgIEdldE11c2ljVXJsOiBmdW5jdGlvbih1VHlwZSwgcGxhdGZvcm0sIHQxLCB0MiwgbmFtZSwgYXJ0aXN0KSB7XFxuICAgICAgICBxdWFsaXR5ID0gW1xcXCJtcDNcXFwiLCBcXFwiaHFcXFwiLCBcXFwic3FcXFwiLCBcXFwiaHJcXFwiLCBcXFwienFcXFwiLCBcXFwienFcXFwiLCBcXFwienFcXFwiXVt0MiB8fCAwXSB8fCBcXFwibXAzXFxcIjtcXG4gICAgICAgIGp4bGlzdCA9IHN0b3JhZ2UwLmdldEl0ZW0oXFxcImp4bGlzdF9cXFwiICsgcGxhdGZvcm0sIFtdKS5maWx0ZXIoXyA9PiBfW3VUeXBlXSA9PT0gXFxcIjFcXFwiICYmIF8uczEgPT09IFxcXCIwXFxcIiAmJiBhZXNEZWNvZGUoJ2hrNjY2NjY2NjEwOScsIF9bcXVhbGl0eV0pKTtcXG4gICAgICAgIGlmIChqeGxpc3QubGVuZ3RoID09IDApIHtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5rKh5pyJ5Y+v55So55qEXFxcIiArICh1VHlwZSA9PSBcXFwib3BlblxcXCIgPyBcXFwi6K+V5ZCsXFxcIiA6IFxcXCLkuIvovb1cXFwiKSArIFxcXCLop6PmnpBcXFwiO1xcbiAgICAgICAgfVxcbiAgICAgICAgZm9yIChfIG9mIGp4bGlzdCkge1xcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIHVybCA9IGZhbHNlXFxuICAgICAgICAgICAgICAgIGV2YWwoU3RyaW5nKGFlc0RlY29kZSgnaGs2NjY2NjY2MTA5JywgX1txdWFsaXR5XSkpKTtcXG4gICAgICAgICAgICAgICAgZXZhbChTdHJpbmcoYWVzRGVjb2RlKCdoazY2NjY2NjYxMDknLCBfLmppZXhpKSkpO1xcbiAgICAgICAgICAgICAgICBpZiAodXJsICYmIHVybCAhPSBcXFwiXFxcIiAmJiAhdXJsLm1hdGNoKFxcXCLkuIvovb3lpLHotKVcXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVybDtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0gY2F0Y2ggKGpzRXJyb3IpIHt9XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v6Kej5p6Q5aSx6LSlXFxcIlxcbiAgICB9LFxcblxcblxcblxcbiAgICBzZXRSdWxlOiBmdW5jdGlvbihpbnB1dCwgVHlwZSkge1xcbiAgICAgICAgW2xvZ1QsIHR5cGUsIHRleHRdID0gU3RyaW5nKGlucHV0KS5zcGxpdChcXFwi77+lXFxcIik7XFxuICAgICAgICBzd2l0Y2ggKFN0cmluZyh0eXBlKSkge1xcbiAgICAgICAgICAgIGNhc2UgJ1Bhc3RlJzpcXG4gICAgICAgICAgICAgICAgdGV4dCA9IHBhcnNlUGFzdGUodGV4dCk7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIGNhc2UgJ0xhbnpvdSc6XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgfVxcbiAgICAgICAgd3JpdGVGaWxlKFxcXCJoaWtlcjovL2ZpbGVzL19jYXRjaC9JbXBvcnQudHh0XFxcIiwgYmFzZTY0RGVjb2RlKHRleHQpKTtcXG4gICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9wYWdlL3JlbHlcXFwiICsgKFR5cGUgfHwgMSkgKyBcXFwiI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5Iz9ydWxlPeatjOivjemAgumFjVxcXCI7XFxuICAgIH0sXFxuXFxuXFxuXFxuICAgIHNldEVkaXQ6IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgXyA9IHtcXG4gICAgICAgICAgICB0eXBlOiBnZXRNeVZhcihcXFwianhfdHlwZVxcXCIsIFxcXCJrd1xcXCIpLFxcbiAgICAgICAgICAgIG9wZW46IGdldE15VmFyKFxcXCJqeF9vcGVuXFxcIiwgXFxcIjFcXFwiKSxcXG4gICAgICAgICAgICBkb3duOiBnZXRNeVZhcihcXFwianhfZG93blxcXCIsIFxcXCIwXFxcIiksXFxuXFxuICAgICAgICAgICAgaW1nOiBnZXRNeVZhcihcXFwianhfaW1nXFxcIiwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgIHRpdGxlOiBnZXRNeVZhcihcXFwianhfdGl0bGVcXFwiLCBcXFwiXFxcIiksXFxuICAgICAgICAgICAgZGVzYzogZ2V0TXlWYXIoXFxcImp4X2Rlc2NcXFwiLCBcXFwiXFxcIiksXFxuICAgICAgICAgICAgdXJsOiBnZXRNeVZhcihcXFwianhfdXJsXFxcIiwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgIGNvbnRlbnQ6IGdldE15VmFyKFxcXCJqeF9jb250ZW50XFxcIiwgXFxcIlxcXCIpLFxcblxcbiAgICAgICAgICAgIG1wMzogZ2V0TXlWYXIoXFxcImp4X21wM1xcXCIsIFxcXCJcXFwiKSxcXG4gICAgICAgICAgICBocTogZ2V0TXlWYXIoXFxcImp4X2hxXFxcIiwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgIHNxOiBnZXRNeVZhcihcXFwianhfc3FcXFwiLCBcXFwiXFxcIiksXFxuICAgICAgICAgICAgaHI6IGdldE15VmFyKFxcXCJqeF9oclxcXCIsIFxcXCJcXFwiKSxcXG4gICAgICAgICAgICB6cTogZ2V0TXlWYXIoXFxcImp4X3pxXFxcIiwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgIGppZXhpOiBnZXRNeVZhcihcXFwianhfamlleGlcXFwiLCBcXFwiXFxcIiksXFxuXFxuICAgICAgICAgICAgczE6IGdldE15VmFyKFxcXCJqeF9zMVxcXCIsIFxcXCIwXFxcIiksXFxuICAgICAgICAgICAgbTE6IGdldE15VmFyKFxcXCJqeF9tMVxcXCIsIFxcXCJcXFwiKSxcXG4gICAgICAgICAgICBzMjogZ2V0TXlWYXIoXFxcImp4X3MyXFxcIiwgXFxcIjBcXFwiKSxcXG4gICAgICAgICAgICBtMjogZ2V0TXlWYXIoXFxcImp4X20yXFxcIiwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgIHRpbWU6IG5ldyBEYXRlKCkuZ2V0VGltZSgpXFxuICAgICAgICB9O1xcbiAgICAgICAgaWYgKF8udGl0bGUgIT0gXFxcIlxcXCIgJiYgXy51cmwgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICBmb3IgKHQgaW4gXykge1xcbiAgICAgICAgICAgICAgICBjbGVhck15VmFyKCdqeF8nICsgdCk7XFxuICAgICAgICAgICAgICAgIGlmIChfW3RdID09IFxcXCJcXFwiIHx8IF9bdF0gPT0gXFxcIlZmYW5haHMveTBpWnhjU0wwUEpBY1E9PVxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBfW3RdO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGp4bGlzdCA9IHN0b3JhZ2UwLmdldEl0ZW0oJ2p4bGlzdF8nICsgXy50eXBlLCBbXSk7XFxuICAgICAgICAgICAgdWlkcyA9IGp4bGlzdC5tYXAoX18gPT4gbWQ1KF9fLnR5cGUgKyAnOicgKyBfXy50aXRsZSArICc6JyArIF9fLnVybCkpO1xcbiAgICAgICAgICAgIGkgPSB1aWRzLmluZGV4T2YoZ2V0TXlWYXIoJ2p4X3VpZCcsICctMScpKTtcXG4gICAgICAgICAgICBpZiAoaSA9PSAtMSkge1xcbiAgICAgICAgICAgICAgICBqeGxpc3QucHVzaChfKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBqeGxpc3Quc3BsaWNlKGksIDEsIF8pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBjbGVhck15VmFyKCdqeF90aWQnKTtcXG4gICAgICAgICAgICBjbGVhck15VmFyKCdqeF91aWQnKTtcXG4gICAgICAgICAgICBqeGxpc3QgPSBqeGxpc3QuZmlsdGVyKChvYmosIGluZGV4LCBhcnIpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFyci5maW5kSW5kZXgobyA9PiBtZDUob2JqLnRpdGxlICsgb2JqLnVybCkgPT09IG1kNShvLnRpdGxlICsgby51cmwpKSA9PT0gaW5kZXg7XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgc3RvcmFnZTAuc2V0SXRlbSgnanhsaXN0XycgKyBfLnR5cGUsIGp4bGlzdCk7XFxuICAgICAgICAgICAgcmV0dXJuIGJhY2sodHJ1ZSksICd0b2FzdDovL+S/neWtmOaIkOWKnyc7XFxuICAgICAgICB9IGVsc2UgaWYgKF8udGl0bGUgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6K+35aGr5YaZ5rqQ5ZCN56ewJztcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+ivt+Whq+WGmea6kOagh+ivhic7XFxuICAgICAgICB9XFxuICAgIH0sXFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi4pGo6Kej5p6Q5a+85YWlXCIsXCJwYXRoXCI6XCJyZWx5MVwiLFwicnVsZVwiOlwianM6XFxuaW5kZXggPSAwO1xcbmluZGV4MiA9IDA7XFxuanNvbiA9IEpTT04ucGFyc2UoZmV0Y2goXFxcImhpa2VyOi8vZmlsZXMvX2NhdGNoL0ltcG9ydC50eHRcXFwiKSk7XFxuZm9yIChrZXkgaW4ganNvbikge1xcbiAgICBpZiAoanNvbltrZXldLmxlbmd0aCAhPSAwKSB7XFxuICAgICAgICBpbmRleCArPSBqc29uW2tleV0ubGVuZ3RoO1xcbiAgICAgICAganhsaXN0ID0gc3RvcmFnZTAuZ2V0SXRlbShcXFwianhsaXN0X1xcXCIgKyBrZXksIFtdKTtcXG4gICAgICAgIGluZGV4MyA9IGp4bGlzdC5sZW5ndGg7XFxuICAgICAgICBqeGxpc3QgPSBqc29uW2tleV0uY29uY2F0KGp4bGlzdCk7XFxuICAgICAgICBqeGxpc3QgPSBqeGxpc3QuZmlsdGVyKChvYmosIGluZGV4LCBhcnIpID0+IHtcXG4gICAgICAgICAgICByZXR1cm4gYXJyLmZpbmRJbmRleChvID0+IG1kNShvYmoudGl0bGUgKyBvYmoudXJsKSA9PT0gbWQ1KG8udGl0bGUgKyBvLnVybCkpID09PSBpbmRleDtcXG4gICAgICAgIH0pO1xcbiAgICAgICAgaW5kZXgyICs9IGp4bGlzdC5sZW5ndGggLSBpbmRleDM7XFxuICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKFxcXCJqeGxpc3RfXFxcIiArIGtleSwganhsaXN0KTtcXG4gICAgfVxcbn1cXG50b2FzdChcXFwi6Kej5p6Q5a+85YWl5oiQ5Yqf77yM5ZCI6K6hIFxcXCIgKyBpbmRleCArIFxcXCIg5Liq77yM5a+85YWlIFxcXCIgKyBpbmRleDIgKyBcXFwiIOS4qlxcXCIpO1xcbmJhY2soZmFsc2UpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi4pGp5pS26JeP5a+85YWlXCIsXCJwYXRoXCI6XCJyZWx5MlwiLFwicnVsZVwiOlwianM6XFxuZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvbGliP3J1bGU95q2M6K+N6YCC6YWNJywge30pKS5ydWxlKTtcXG5fID0gSlNPTi5wYXJzZShmZXRjaChcXFwiaGlrZXI6Ly9maWxlcy9fY2F0Y2gvSW1wb3J0LnR4dFxcXCIpKTtcXG5zZXRQYWdlVGl0bGUoJ+aJuemHj+aTjeS9nO+8muaUtuiXjycgKyBbXFxcIuWvvOWFpVxcXCIsIFxcXCLliIbkuqtcXFwiLCBcXFwi5Yig6ZmkXFxcIl1bXy50eXBlXSk7XFxuXFxuXFxuXFxuXFxuXFxuYWRkbGlzdCA9IHN0b3JhZ2UwLmdldE15VmFyKFxcXCJhZGRsaXN0XFxcIiwgW10pO1xcbmlmIChhZGRsaXN0Lmxlbmd0aCA9PSAwICYmIF8ucGl0Y2ggPT0gMSAmJiBnZXRNeVZhcignYWRkcGl0Y2gnKSAhPSAnMScpIHtcXG4gICAgZm9yIChpID0gMDsgaSA8IF8uZGF0YS5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgYWRkbGlzdC5wdXNoKGkpO1xcbiAgICB9XFxuICAgIHB1dE15VmFyKCdhZGRsaXN0JywgYWRkbGlzdCk7XFxuICAgIHB1dE15VmFyKCdhZGRwaXRjaCcsICcxJyk7XFxufVxcbmQgPSBfLmRhdGEubWFwKChfLCBpKSA9PiB7XFxuICAgIGRlbGV0ZSBfLmV4dHJhO1xcbiAgICBfLmNvbF90eXBlID0gJ2NhcmRfcGljXzMnO1xcbiAgICBfLnRpdGxlID0gYWRkbGlzdC5pbmNsdWRlcyhpKSA/IFJpY2goU3Ryb25nKENvbG9yKF8udGl0bGUpKSkgOiBfLnRpdGxlO1xcbiAgICBfLnVybCA9ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGFkZGxpc3QsIGkpID0+IHtcXG4gICAgICAgIGlmIChhZGRsaXN0LmluY2x1ZGVzKGkpKSBhZGRsaXN0ID0gYWRkbGlzdC5maWx0ZXIoSSA9PiBJICE9PSBpKTtcXG4gICAgICAgIGVsc2UgYWRkbGlzdC5wdXNoKGkpO1xcbiAgICAgICAgcHV0TXlWYXIoJ2FkZGxpc3QnLCBhZGRsaXN0KTtcXG4gICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgIH0sIGFkZGxpc3QsIGkpO1xcbiAgICByZXR1cm4gXztcXG59KTtcXG5pZiAoZC5sZW5ndGggPT0gYWRkbGlzdC5sZW5ndGgpIHtcXG4gICAgdGl0bGUgPSAn4piFIOWPlua2iOWFqOmAiSDimIUnO1xcbiAgICB1cmwgPSAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgIGNsZWFyTXlWYXIoJ2FkZGxpc3QnKTtcXG4gICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICB9KTtcXG59IGVsc2Uge1xcbiAgICB0aXRsZSA9ICfimIUg6YCJ5oup5YWo6YOoIOKYhSc7XFxuICAgIHVybCA9ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGxlbikgPT4ge1xcbiAgICAgICAgYWRkbGlzdCA9IFtdO1xcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSBhZGRsaXN0LnB1c2goaSk7XFxuICAgICAgICBwdXRNeVZhcignYWRkbGlzdCcsIGFkZGxpc3QpO1xcbiAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgfSwgZC5sZW5ndGgpO1xcbn1cXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ+ehruWumumAieaLqScsXFxuICAgIGNvbF90eXBlOiAnY2FyZF9waWNfMycsXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoYWRkbGlzdCwgc2ksIHR5cGUsIG5hbWUpID0+IHtcXG4gICAgICAgIGlmIChhZGRsaXN0Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIFxcXCJ0b2FzdDovL+ayoeaciemAieS4reatjOabslxcXCI7XFxuXFxuICAgICAgICBuZXdEYXRhcyA9IEpTT04ucGFyc2UoZmV0Y2goXFxcImhpa2VyOi8vZmlsZXMvX2NhdGNoL0ltcG9ydC50eHRcXFwiKSkuZGF0YTtcXG4gICAgICAgIG5ld0RhdGFzID0gYWRkbGlzdC5tYXAoaSA9PiB7XFxuICAgICAgICAgICAgXyA9IG5ld0RhdGFzW2ldO1xcbiAgICAgICAgICAgIGRlbGV0ZSBfLmV4dHJhO1xcbiAgICAgICAgICAgIGRlbGV0ZSBfLmNvbF90eXBlO1xcbiAgICAgICAgICAgIHJldHVybiBfO1xcbiAgICAgICAgfSk7XFxuICAgICAgICBjbGVhck15VmFyKCdhZGRsaXN0Jyk7XFxuICAgICAgICBjbGVhck15VmFyKCdhZGRwaXRjaCcpO1xcbiAgICAgICAgaWYgKHR5cGUgPT09IDApXFxuICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwibGliP3J1bGU95q2M6K+N6YCC6YWNXFxcIikubG9nRGF0YShuZXdEYXRhcywgc2ksIG5hbWUgfHwgXFxcIlxcXCIpO1xcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gMSlcXG4gICAgICAgICAgICByZXR1cm4gJChuYW1lIHx8IFxcXCJcXFwiLCBcXFwi56Gu5a6a5YiG57uE5ZCN56ewXFxcIikuaW5wdXQoKHNpLCBuZXdEYXRhcykgPT4ge1xcbiAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAganNvbiA9IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAwLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBpdGNoOiAxLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpOiBzaSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBpbnB1dCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBuZXdEYXRhc1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgdCA9IGJhc2U2NEVuY29kZShKU09OLnN0cmluZ2lmeShqc29uKSk7XFxuICAgICAgICAgICAgICAgICAgICB1ID0gc2hhcmVQYXN0ZSh0KTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiY29weTovL+atjOivjemAgumFjeaUtuiXj+WPo+S7pO+8jOaJk+W8gOa1t+mYlOWNs+WPr+WvvOWFpVxcXFxu77+lUGFzdGXvv6VcXFwiICsgdSArIGBAaW1wb3J0PWpzOiQucmVxdWlyZShcXFwiamlleGk/cnVsZT3mrYzor43pgILphY1cXFwiKS5zZXRSdWxlKGlucHV0LDIpO2A7XFxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WIhuS6q+Wksei0pVxcXCI7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9LCBzaSwgbmV3RGF0YXMpO1xcblxcbiAgICB9LCBhZGRsaXN0LCBfLnNpLCBfLnR5cGUsIF8ubmFtZSksXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCh1cmwpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVybFxcbiAgICAgICAgICAgIH0sIHVybClcXG4gICAgICAgIH1dXFxuICAgIH0sXFxuICAgIGltZzogJC5yZXF1aXJlKCdpbWFnZT9ydWxlPeatjOivjemAgumFjScpKCdhZGQnKVxcbn0pO1xcbnNldFJlc3VsdChkKTtcIn1dIiwiaWNvbiI6Imh0dHA6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy81czdKMjhVOUdIVmljRDdndXZ5YmFzZTg2SGhIQzEyb09EYnRyc2dLN0N4cmo1UXBMNmdLbnlpYmVaRHdFS0lWS1VPdFBvSGN4cGZ3YTBwb25aMWlhNW5sQS8wP3d4X2ZtdD1wbmciLCJwcm94eSI6IiJ9
Add Comment
Please, Sign In to add comment