Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@集芳阁云搜@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoi6ZuG6Iqz6ZiB5LqR5pCcIiwiYXV0aG9yIjoiUiIsInVybCI6Imhpa2VyOi8vZW1wdHkjI2h0dHBzOi8veG4tLXNvLWpiYWl0YW8tY29tLXpyMXo1NTA0YS5kaXpoaS1qZmdzb3UuY29tLyIsInZlcnNpb24iOjIwMjMxMDE0LCJjb2xfdHlwZSI6InRleHRfMSIsImNsYXNzX25hbWUiOiIiLCJ0eXBlIjoidmlkZW8iLCJjbGFzc191cmwiOiIiLCJhcmVhX25hbWUiOiIiLCJhcmVhX3VybCI6IiIsInNvcnRfbmFtZSI6IiIsInllYXJfbmFtZSI6IiIsInNvcnRfdXJsIjoiIiwieWVhcl91cmwiOiIiLCJmaW5kX3J1bGUiOiJqczpcbnZhciBkID0gW107XG5NWV9VUkwgPSBNWV9VUkwucmVwbGFjZSgnaGlrZXI6Ly9lbXB0eSMjJywgJycpO1xuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9yZXBhaXInKSkucnVsZSk7XG52YXIgaHRtbCA9IGd1YXJkKE1ZX1VSTCk7XG5cblxuZC5wdXNoKHtcbiAgICAvL3RpdGxlOiAnPHNwYW4gc3R5bGU9XCJjb2xvcjojZmY2NjAwXCI+PGI+XFx0576O5aW95Y2z5Yi75byA5aeLLi4uXFx0XFx0XFx0PC9iPjwvc3Bhbj4nLFxuICAgIHVybDogXCJoaWtlcjovL2VtcHR5XCIsXG4gICAgcGljX3VybDogJC5yZXF1aXJlKFwiaW1nXCIpLmltZzEsXG4gICAgY29sX3R5cGU6ICdwaWNfMV9jZW50ZXInXG59KTtcblxuaWYgKE1ZX1BBR0UgPT0gMSkge1xuICAgIGQucHVzaCh7XG4gICAgICAgIHRpdGxlOiBcIvCflI1cIixcbiAgICAgICAgdXJsOiAkLnRvU3RyaW5nKChNWV9IT01FKSA9PiB7XG4gICAgICAgICAgICByZXF1aXJlKCdoaWtlcjovL3BhZ2UvamllbWknKVxuICAgICAgICAgICAgaW5wdXQgPSBlbmNyeXB0RGF0YShpbnB1dClcbiAgICAgICAgICAgIHB1dE15VmFyKCdrZXl3b3JkJywgaW5wdXQpO1xuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL3BhZ2Uvc3M/dXJsPScgKyBNWV9IT01FICsgJy9zZWFyY2gucGhwP2s9JyArIGlucHV0ICsgJ++8hu+8hnA9ZnlwYWdlJztcbiAgICAgICAgfSwgTVlfSE9NRSksXG4gICAgICAgIGRlc2M6ICfnvo7lpb3ljbPliLvlvIDlp4suLi4nLC8v5pCc57Si5YWz6ZSu6K+NXG4gICAgICAgIGNvbF90eXBlOiBcImlucHV0XCIsXG4gICAgICAgIGV4dHJhOiB7XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldE15VmFyKCdrZXl3b3JkJywgJycpIHx8IFwiXCIsXG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxudmFyIGxpbmtzID0gcGRmYShodG1sLCBcImJvZHkmJi5saW5rJiZhXCIpO1xuZm9yICh2YXIgaSBpbiBsaW5rcykge1xuICAgIHZhciB0aXRsZSA9IHBkZmgobGlua3NbaV0sICdhJiZUZXh0Jyk7XG4gICAgZC5wdXNoKHtcbiAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08c21hbGw+PGZvbnQgY29sb3I9IzFFOTBGRj4nICsgdGl0bGUgKyAnPC9mb250Pjwvc21hbGw+JyxcbiAgICAgICAgZGVzYzogJycsXG4gICAgICAgIHBpY191cmw6ICcnLFxuICAgICAgICB1cmw6IHBkKGxpbmtzW2ldLCAnYSYmaHJlZicpICsgJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgodGl0bGUpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXF1ZXN0KCdoaWtlcjovL2hvbWVAJyArIHRpdGxlKSA9PSAnbnVsbCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJ0b2FzdDovL+Wwj+eoi+W6j+S8vOS5juW5tuS4jeWtmOWcqFwiXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBcImhpa2VyOi8vaG9tZS9AXCIgKyB0aXRsZVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCB0aXRsZSksXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcbiAgICB9KTtcbn07XG5cbmQucHVzaCh7XG4gICAgdGl0bGU6ICfigJjigJjigJnigJk8Yj48bWlkZGxlPjxmb250IGNvbG9yPVwicmVkXCI+8J+MgOS7iuaXpeabtOaWsDwvZm9udD48L21pZGRsZT48L2I+JyxcbiAgICAvLzp1cmw6ICd0b2FzdDovL+acieW/l+iAhe+8jOS6i+ern+aIkCcsXG4gICAgdXJsOiAnaGlrZXI6Ly9wYWdlL3NzP3VybD0nICsgTVlfSE9NRSArICcvbmV3bGlzdC5waHDvvJ/vvJ9wPWZ5cGFnZScsXG4gICAgY29sX3R5cGU6ICdmbGV4X2J1dHRvbicsLy/nu4Tku7bmoLflvI9cbn0pO1xuXG4vL3ZhciBhY3QgPSBbXCLni4Lpo5lcIixcIuS7luaYr+iwgVwiLCBcIuS6uuS4lumXtFwiXTtcbnZhciBhY3QgPSBKU09OLnBhcnNlKGh0bWwubWF0Y2goL3ZhciByZWNvbW1hbmRsaXN0ID0oLio/KVxcOy8pWzFdKTtcbmZvciAodmFyIGkgaW4gYWN0KSB7XG4gIFxuICByZXF1aXJlKCdoaWtlcjovL3BhZ2UvamllbWknKVxuICAgICAgbGV0ICAgaW5hID0gZW5jcnlwdERhdGEoYWN0W2ldKVxuICAgIGQucHVzaCh7XG4gICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PG1pZGRsZT48Zm9udCBjb2xvcj1cIiMwMDhCOEJcIj4nICsgYWN0W2ldICsgJzwvZm9udD48L21pZGRsZT48L2I+JyxcbiAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL3NzP3VybD0nICsgTVlfSE9NRSArICcvc2VhcmNoLnBocD9rPScgKyBpbmEgKyAn77yG77yGcD1meXBhZ2UnLFxuICAgICAgICAgICAgXG4gICAgICAgIGNvbF90eXBlOiAnZmxleF9idXR0b24nLFxuICAgIH0pXG59O1xuXG5zZXRSZXN1bHQoZCkiLCJzZWFyY2hfdXJsIjoiaGlrZXI6Ly9lbXB0eSMjKioiLCJncm91cCI6IuKRpuasoiIsInNlYXJjaEZpbmQiOiJqczpcbnZhciBkID0gW107XG5sZXQga2V5ID0gTVlfVVJMLnNwbGl0KFwiIyNcIilbMV07XG5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvamllbWknKVxubGV0ICAgaW5hID0gZW5jcnlwdERhdGEoa2V5KVxuZC5wdXNoKHtcbiAgICB0aXRsZTogXCLngrnmiJHlvIDlp4vogZrlkIjmkJzntKJcIiArIGtleSxcbiAgICB1cmw6ICdoaWtlcjovL3BhZ2Uvc3M/dXJsPWh0dHBzOi8v5aSH55SoamZnLWpiYWl0YW8tY29tLmppZmFuZ2fljrvmjokuY29tL3NlYXJjaC5waHA/az0nICsgaW5hICsgJ++8hu+8hnA9ZnlwYWdlJyxcbiAgICBleHRyYToge1xuICAgICAgICBwYWdlVGl0bGU6IFwi5pCc57SiXCIgKyBrZXksXG4gICAgICAgIGtleToga2V5XG4gICAgfVxufSk7XG5cbnNldFJlc3VsdChkKTsiLCJkZXRhaWxfY29sX3R5cGUiOiJtb3ZpZV8xIiwiZGV0YWlsX2ZpbmRfcnVsZSI6IiIsInNkZXRhaWxfY29sX3R5cGUiOiJtb3ZpZV8xIiwic2RldGFpbF9maW5kX3J1bGUiOiIqIiwidWEiOiJtb2JpbGUiLCJwcmVSdWxlIjoiLy8gICAgICBodHRwczovL2ppZmFuZ2dlLmNsdWIiLCJwYWdlcyI6Ilt7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6Kej5p6QXCIsXCJwYXRoXCI6XCJsYXp5XCIsXCJydWxlXCI6XCJ2YXIgbGF6eSA9ICQoJycpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgIHZhciBodG1sID0gcGRmaChyZXF1ZXN0KGlucHV0LCB7fSksICdib2R5JiYucGxheXNvdXJjZSYmYSYmcGxheWRhdGEnKTtcXG4gICAgICAgIGlmIChodG1sKSB7XFxuICAgICAgICAgICAgcmV0dXJuIGh0bWw7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mtJfmtJfnnaHlkKcnO1xcbiAgICAgICAgfSAgXFxufSk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8xX2xlZnRfcGljXCIsXCJuYW1lXCI6XCLmkJzntKLpobXpnaLlhoXlrrlcIixcInBhdGhcIjpcInNzXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbi8vY29uc3QgaG9zdCA9ICdodHRwczovL3d3dy5zdXlpbmcubGlmZS9pbmRleC5waHAvdm9kL3Nob3cvaWQvMS5odG1sJztcXG5cXG5hZGRMaXN0ZW5lcihcXFwib25DbG9zZVxcXCIsICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICBsZXQga2V5cyA9IGxpc3RNeVZhcktleXMoKTtcXG4gICAgZm9yIChsZXQgaXQgb2Yga2V5cykge1xcbiAgICAgICAgY2xlYXJNeVZhcihpdCk7XFxuICAgIH1cXG59KSk7XFxuXFxudmFyIGdldFJhbmdlQ29sb3JzID0gZnVuY3Rpb24oKSB7wqDCoMKgwqDCoMKgwqBcXG4gICAgcmV0dXJuICcjJyArICgnMDAwMDAnICsgKE1hdGgucmFuZG9tKCkgKiAweDEwMDAwMDAgPDwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO8KgwqDCoMKgwqBcXG59XFxuY29uc3Qg5LiL5LiA6aG1ID0gXFxcInBkKGh0bWwsICdhOm1hdGNoZXMo5LiL5LiA6aG1KSYmaHJlZicpXFxcIjtcXG5jb25zdCBwYWdlID0gTVlfUEFHRTtcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2R0ZmwnKSkucnVsZSlcXG5cXG52YXIg5a6a5L2N5L+h5oGvID0gW3tcXG4gICAg5aSn57G75a6a5L2NOiAnLnZmaWx0ZXInLFxcbiAgICDlsI/nsbs6ICdib2R5JiZhOm5vdCg6bWF0Y2hlcyjpppbpobV86LWE6K6vfEFQUHzkuJPpoph856S+576kfOeDreaQnHznlZnoqIB856aP5YipfOi1nuWKqXzlkajooah85o6S6KGMfOaOqOiNkHzmm7TlpJp85pu05pawKSknLFxcbiAgICDpk77mjqXlpITnkIY6ICh1KSA9PiB7XFxuICAgICAgIC8vbGV0IHVybCA9IHUucmVwbGFjZSgvdHlwZShcXFxcL1xcXFxkKylcXFxcLmh0bWwvLCAnc2hvdyQxLS0tLS0tLS0tLS0uaHRtbCcpO1xcbiAgICAgICAgbGV0IHVybCA9IHUucmVwbGFjZSgvdHlwZS8sICdzaG93Jyk7XFxuICAgICAgICByZXR1cm4gdXJsXFxuICAgIH1cXG59LCB7XFxuICAgIOS4gOe6p+WumuS9jTogJ2JvZHkmJi5zb3J0YmFyLDE6bjpub3QoOmhhcyg6bWF0Y2hlcyjpopHpgZMpKSl8fC5zaXRlLXRhYnMnLFxcblxcbn1dXFxuXFxuLy9NWV9VUkw9IGhvc3Q7XFxuTVlfVVJMID0gTVlfVVJMLnJlcGxhY2UoJ2hpa2VyOi8vZW1wdHkjIycsICcnKVxcbmxldCB0cnVlX3VybCA9IGdldFRydWVsaW5rKE1ZX1JVTEUudXJsLCBNWV9VUkwsIHBhZ2UpO1xcbmxvZyh0cnVlX3VybClcXG5cXG52YXIgaHRtbCA9IHJlcXVlc3QodHJ1ZV91cmwpXFxuXFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcbnRyeXtcXG4gICAgZC5wdXNoKHsgICAgIFxcbiAgICAgICAgdGl0bGU6IFxcXCLwn5SNXFxcIiArJzxtaWRkbGU+PGZvbnQgY29sb3I9I0ZGMDBGRj4nK3BkZmgoaHRtbCxcXFwiI2NvbnRlbnRsaXN0JiZzcGFuJiZUZXh0XFxcIikrJzwvZm9udD48L21pZGRsZT4nLFxcbiAgICAgICAgdXJsOiBcXFwiJ2hpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJyaWNoX3RleHRcXFwiLFxcbiAgICB9KTtcXG59Y2F0Y2h7fVxcbn1cXG5cXG5jb25zdCBkYyA9IGR5bmFtaWNDbGFzcyh7XFxuICAgIOWIhuexu+minOiJsjogZ2V0UmFuZ2VDb2xvcnMoKVxcbn0pO1xcbmRjLuW8gOWQr+aKmOWPoChmYWxzZSlcXG5kYy7lvIDlkK/mkJzntKIoZmFsc2UpXFxuZGMu5Yib5bu65Yqo5oCB5YiG57G7KOWumuS9jeS/oeaBrylcXG5cXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9sYXp5Jywge30pKS5ydWxlKTtcXG5cXG52YXIgcGFyc2VSdWxlID0ge1xcbiAgICBsaXN0OiAnYm9keSYmLnVjb250ZW50JiZsaScsIC8v57uf5LiAaXRlbVxcbiAgICB0aXRsZTogJy5jdGl0bGUmJlRleHQnLFxcbiAgICBjb250ZW50OiAnLnZvZHRpbWUmJlRleHQnLFxcbiAgICBkZXNjOiAnLnZvZHRpbWUmJlRleHQnLFxcbiAgICBkZXNjMTogJy50aW1lJiZUZXh0JyxcXG4gICAgaW1nOiAnLmNvdmVyJiZzdHlsZScsXFxuICAgIHVybDogJ2EmJmhyZWYnLFxcbiAgICByZWY6ICdAUmVmZXJlcj0nLFxcbiAgICBpbXQ6IHRydWUsXFxuICAgIGJhY2tpbWc6IHRydWUsXFxufVxcblxcbkNyZWF0ZS5MaXN0KGQsIGh0bWwsIHBhcnNlUnVsZSk7XFxuYXV0b1BhZ2UoKTtcXG5cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuaQnOe0ouWIl+ihqOWIm+W7ulwiLFwicGF0aFwiOlwiZHRmbFwiLFwicnVsZVwiOlwianM6XFxuLypcXG7kuIDnuqflsIHoo4UgXFxu5Yqo5oCB5YiG57G7IOWIl+ihqOWIm+W7uiDoh6rliqjkuIvkuIDpobVcXG52ZXIgMjAyMzEwMDUwMSAxLjBcXG4qL1xcblxcbmV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL2xhenknLCB7fSkpLnJ1bGUpO1xcblxcbnZhciBnZXRSYW5nZUNvbG9ycyA9IGZ1bmN0aW9uKCkge1xcbiAgICByZXR1cm4gJyMnICsgKCcwMDAwMCcgKyAoTWF0aC5yYW5kb20oKSAqIDB4MTAwMDAwMCA8PCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XFxufVxcblxcbmZ1bmN0aW9uIGR5bmFtaWNDbGFzcyhvcHRpb25zKSB7XFxuICAgIGNvbnN0IG9iaiA9IHtcXG4gICAgICAgIC8v6buY6K6k5YC8XFxuICAgICAgICBsYXlvdXQ6IFxcXCJ1bmRlZmluZWRcXFwiLFxcbiAgICAgICAgaHRtbDogXFxcImVtcHR5XFxcIixcXG4gICAgICAgIHBhZ2U6IDAsXFxuICAgICAgICDliIbnsbvpopzoibI6IFxcXCIjRkE3Mjk4XFxcIixcXG4gICAgICAgIOaKmOWPoDogXFxcIuKAnOKAnOKAneKAnTxiPlxcXCIgKyBcXFwi4oinXFxcIi5mb250Y29sb3IoXFxcIiMxYWFkMTlcXFwiKSArIFxcXCI8L2I+XFxcIixcXG4gICAgICAgIOWxleW8gDogXFxcIuKAnOKAnOKAneKAnTxiPlxcXCIgKyBcXFwi4oioXFxcIi5mb250Y29sb3IoXFxcIiNGRjAwMDBcXFwiKSArIFxcXCI8L2I+XFxcIixcXG4gICAgICAgIG9wZW46IHRydWUsXFxuICAgICAgICBzdGF0ZTogTVlfUlVMRS51cmwsXFxuICAgICAgICBzZWFyY2g6IGZhbHNlLFxcbiAgICAgICAgY2xlYXJzOiBbXSxcXG4gICAgICAgIGNsZWFyYWxsOiBbXFxcInlpX2ZpcnN0cGFnZVxcXCJdLFxcbiAgICAgICAgZGVidWc6IGZhbHNlLFxcblxcbiAgICAgICAg6aKE6K6+KHBhcmFtKSB7XFxuICAgICAgICAgICAgaWYgKHBhcmFtID09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgICAgICBwYXJhbSA9IFtdO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhwYXJhbSkuZm9yRWFjaCgocHJvcGVydHkpID0+IHtcXG4gICAgICAgICAgICAgICAgLy8g5a+55q+P5Liq5bGe5oCn5ZCN5omn6KGM5pON5L2cXFxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcGFyYW1bcHJvcGVydHldOyAvLyDojrflj5blsZ7mgKflgLxcXG4gICAgICAgICAgICAgICAgLy8g5Zyo6L+Z6YeM5omn6KGM5oKo55qE5pON5L2cXFxuICAgICAgICAgICAgICAgIHRoaXNbcHJvcGVydHldID0gdmFsdWU7XFxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSB7XFxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhwcm9wZXJ0eSArIFxcXCI6XFxcIiArIHZhbHVlKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGV2YWxKU1J1bGUoaXRlbSwganNSdWxlKSB7XFxuICAgICAgICAgICAgbGV0IHJ1bGUgPSBqc1J1bGUucmVwbGFjZShcXFwiQGpzOlxcXCIsIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICBydWxlID0gcnVsZS50cmltKCk7XFxuICAgICAgICAgICAgLy9sb2coJC5zdHJpbmdpZnkocnVsZSkpXFxuICAgICAgICAgICAgbGV0IGlucHV0ID0gaXRlbTtcXG4gICAgICAgICAgICBpZiAocnVsZS5zdGFydHNXaXRoKFxcXCIoXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgZXZhbChcXFwicmVzdWx0ID0gXFxcIiArIHJ1bGUpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIC8qKlxcbiAgICAgICAgICAgICAgICAgKiDov5jljp/miJAgJC50b1N0cmluZyguLi4pIOeahOacgOe7iOe7k+aenO+8jOi+vuWIsOacgOe7iOWkhOeQhuaWueW8j+i3n+S4iumdoueahCBpZiDkuIDoh7TnmoTnm67nmoRcXG4gICAgICAgICAgICAgICAgICovXFxuICAgICAgICAgICAgICAgIGV2YWwoXFxcInJlc3VsdCA9IFxcXCIgKyBcXFwiKCgpID0+IHtcXFwiICsgcnVsZSArIFxcXCJ9KSgpXFxcIik7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgfHwgXFxcIlxcXCI7XFxuICAgICAgICB9LFxcbiAgICAgICAgZ2V0VGl0bGUoc3JjLCBjYXRlZ29yeSkge1xcbiAgICAgICAgICAgIGxldCB0aXRsZSA9IFxcXCJcXFwiO1xcbiAgICAgICAgICAgIGxldCB0aXRsZVJ1bGUgPSBjYXRlZ29yeSB8fCBcXFwiYSYmVGV4dFxcXCI7XFxuICAgICAgICAgICAgaWYgKHRpdGxlUnVsZS5zdGFydHNXaXRoKFxcXCJAanM6XFxcIikpIHtcXG4gICAgICAgICAgICAgICAgdGl0bGUgPSB0aGlzLmV2YWxKU1J1bGUoc3JjLCB0aXRsZVJ1bGUpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHRpdGxlID0gcGFyc2VEb21Gb3JIdG1sKHNyYywgdGl0bGVSdWxlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIHRpdGxlIHx8IFxcXCJcXFwiO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGdldFVybChzcmMsIGNhdGVnb3J5KSB7XFxuICAgICAgICAgICAgbGV0IHVybCA9IFxcXCJcXFwiO1xcbiAgICAgICAgICAgIGxldCB1cmxSdWxlID0gY2F0ZWdvcnku6ZO+5o6lIHx8IFxcXCJhJiZocmVmXFxcIjtcXG4gICAgICAgICAgICBpZiAodXJsUnVsZS5zdGFydHNXaXRoKFxcXCJAanM6XFxcIikpIHtcXG4gICAgICAgICAgICAgICAgdXJsID0gdGhpcy5ldmFsSlNSdWxlKHNyYywgdXJsUnVsZSk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgdXJsID0gcGQoc3JjLCB1cmxSdWxlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjYXRlZ29yeS7pk77mjqXlpITnkIYgPT0gXFxcImZ1bmN0aW9uXFxcIikge1xcbiAgICAgICAgICAgICAgICB1cmwgPSBjYXRlZ29yeS7pk77mjqXlpITnkIYodXJsKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIHVybCB8fCBcXFwiXFxcIjtcXG4gICAgICAgIH0sXFxuICAgICAgICBpc051bGwocGFyYW0pIHtcXG4gICAgICAgICAgICBpZiAocGFyYW0gPT0gbnVsbCkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGlzQm9vbGVhbih2YXJpYWJsZSkge1xcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFyaWFibGUgIT09IFxcXCJib29sZWFuXFxcIikge1xcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuW8gOWQr+aKmOWPoOivt+S8oOWFpeW4g+WwlOWAvFxcXCIpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sXFxuICAgICAgICDmuIXpmaQobGlzdCkge1xcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTnVsbChsaXN0KSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKGxpc3QuY29uc3RydWN0b3IgPT0gU3RyaW5nKSB7XFxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi5riF6Zmk5oql6ZSZOuivt+S8oOWIl+ihqFxcXCIpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB0aGlzLmNsZWFycyA9IGxpc3Q7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICB9LFxcbiAgICAgICAg5YWo5riFKGxpc3QpIHtcXG4gICAgICAgICAgICBpZiAodGhpcy5pc051bGwobGlzdCkpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHZhciBjID0gdGhpcy5jbGVhcmFsbDtcXG4gICAgICAgICAgICBsaXN0ID0gYy5jb25jYXQobGlzdCk7XFxuICAgICAgICAgICAgdGhpcy5jbGVhcmFsbCA9IGxpc3Q7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICB9LFxcbiAgICAgICAg5rqQ56CBKGlucHV0KSB7XFxuICAgICAgICAgICAgdGhpcy5odG1sID0gaW5wdXQ7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICB9LFxcbiAgICAgICAg55WM6Z2iKGlucHV0KSB7XFxuICAgICAgICAgICAgdGhpcy5sYXlvdXQgPSBpbnB1dDtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgIH0sXFxuICAgICAgICDpobXnoIEoaW5wdXQpIHtcXG4gICAgICAgICAgICB0aGlzLnBhZ2UgPSBpbnB1dDtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgIH0sXFxuICAgICAgICDnirbmgIEoaW5wdXQpIHtcXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gaW5wdXQ7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICB9LFxcbiAgICAgICAg5byA5ZCv5pCc57SiKGlucHV0KSB7XFxuICAgICAgICAgICAgaWYgKGlucHV0ID09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgICAgICBpbnB1dCA9IHRydWU7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoID0gaW5wdXQ7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICB9LFxcbiAgICAgICAg5byA5ZCv5oqY5Y+gKGlucHV0KSB7XFxuICAgICAgICAgICAgaWYgKGlucHV0ID09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgICAgICBpbnB1dCA9IHRydWU7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHRoaXMuaXNCb29sZWFuKGlucHV0KTtcXG4gICAgICAgICAgICB0aGlzLm9wZW4gPSBpbnB1dDtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgIH0sXFxuICAgICAgICBzZXRUaXRsZShrLCBpLCB0KSB7XFxuICAgICAgICAgICAgcmV0dXJuIGsgPT0gaSA/IFxcXCLigJzigJzigJ3igJ1cXFwiICsgdC5mb250Y29sb3IodGhpcy7liIbnsbvpopzoibIpIDogdDtcXG4gICAgICAgIH0sXFxuICAgICAgICBhY3Rpb24ob2JqKSB7XFxuICAgICAgICAgICAgcmV0dXJuIFt7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi5riF6Zmk54q25oCBXFxcIixcXG4gICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKG9iaikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKG9iaik7XFxuICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKG9iai5zdGF0ZSk7XFxuICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKFxcXCJoZWFkLmNhdGVcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIG9iai5hbGwuZm9yRWFjaCgoaXRlbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoaXRlbSk7XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIG9iai5jbC5mb3JFYWNoKChpdGVtKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihpdGVtKTtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgfSwgb2JqKSxcXG4gICAgICAgICAgICB9LCBdO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGNoZWNrUGFyYW0oKSB7XFxuICAgICAgICAgICAgdmFyIG9iaiA9IHt9O1xcbiAgICAgICAgICAgIGlmICh0aGlzLnBhZ2UgPT0gMCAmJiB0eXBlb2YgcGFnZSA9PSBcXFwidW5kZWZpbmVkXFxcIikge1xcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuivt+S8oOWFpemhteeggVxcXCIpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGFnZSA9PSBcXFwidW5kZWZpbmVkXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgb2JqW1xcXCLpobXnoIFcXFwiXSA9IHRoaXMucGFnZTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIG9ialtcXFwi6aG156CBXFxcIl0gPSBwYWdlO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmICh0aGlzLmh0bWwgPT0gXFxcImVtcHR5XFxcIiAmJiB0eXBlb2YgaHRtbCA9PSBcXFwidW5kZWZpbmVkXFxcIikge1xcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuivt+S8oOWFpea6kOeggVxcXCIpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaHRtbCA9PSBcXFwidW5kZWZpbmVkXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgb2JqW1xcXCLmupDnoIFcXFwiXSA9IHRoaXMuaHRtbDtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIG9ialtcXFwi5rqQ56CBXFxcIl0gPSBodG1sO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmICh0aGlzLmxheW91dCA9PSBcXFwidW5kZWZpbmVkXFxcIiAmJiB0eXBlb2YgZCA9PSBcXFwidW5kZWZpbmVkXFxcIikge1xcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuivt+S8oOWFpeeVjOmdolxcXCIpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZCA9PSBcXFwidW5kZWZpbmVkXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgb2JqW1xcXCLnlYzpnaJcXFwiXSA9IHRoaXMubGF5b3V0O1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgb2JqW1xcXCLnlYzpnaJcXFwiXSA9IGQ7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIG9iajtcXG4gICAgICAgIH0sXFxuICAgICAgICDliJvlu7rliqjmgIHliIbnsbsocnVsZU9iaikge1xcbiAgICAgICAgICAgIGlmIChydWxlT2JqID09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgICAgICBydWxlT2JqID0gW107XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIC8v5Yid5aeL5YyW5Y+Y6YeP5byA5aeLXFxuICAgICAgICAgICAgY29uc3QgcGFyYW0gPSB0aGlzLmNoZWNrUGFyYW0oKTtcXG4gICAgICAgICAgICBjb25zdCBwYWdlID0gcGFyYW0u6aG156CBO1xcbiAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBwYXJhbS7mupDnoIE7XFxuICAgICAgICAgICAgY29uc3QgZCA9IHBhcmFtLueVjOmdojtcXG4gICAgICAgICAgICBjb25zdCDnirbmgIEgPSB0aGlzLnN0YXRlO1xcbiAgICAgICAgICAgIGNvbnN0IHNlYXJjaCA9IHRoaXMuc2VhcmNoO1xcbiAgICAgICAgICAgIGNvbnN0IGVtcHR5ID0gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgIGNvbnN0IOaKmOWPoOeKtuaAgSA9IHRoaXMub3BlbjtcXG4gICAgICAgICAgICB2YXIg5bGV5byAID0gdGhpcy7lsZXlvIA7XFxuICAgICAgICAgICAgdmFyIOaKmOWPoCA9IHRoaXMu5oqY5Y+gO1xcbiAgICAgICAgICAgIHZhciDlhajmuIUgPSB0aGlzLmNsZWFyYWxsO1xcbiAgICAgICAgICAgIHZhciDmuIXpmaQgPSB0aGlzLmNsZWFycztcXG4gICAgICAgICAgICAvL+WIneWni+WMluWPmOmHj+e7k+adn1xcbiAgICAgICAgICAgIGxldCBpbml0X2NhdGUgPSBuZXcgQXJyYXkoMjApLmZpbGwoXFxcIjBcXFwiKTtcXG4gICAgICAgICAgICBjb25zdCBmb2xkID0gZ2V0TXlWYXIoTVlfUlVMRS5ncm91cCwgXFxcIjBcXFwiKTtcXG4gICAgICAgICAgICBjb25zdCBjYXRlX3RlbXAgPSBKU09OLnBhcnNlKFxcbiAgICAgICAgICAgICAgICBnZXRNeVZhcihcXFwiaGVhZC5jYXRlXFxcIiwgSlNPTi5zdHJpbmdpZnkoaW5pdF9jYXRlKSlcXG4gICAgICAgICAgICApO1xcbiAgICAgICAgICAgIGlmIChzZWFyY2ggJiYgcGFnZSA9PSAxKSB7XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCInaGlrZXI6Ly9zZWFyY2g/cnVsZT1cXFwiICsgTVlfUlVMRS50aXRsZSArIFxcXCImcz0nK2lucHV0XFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXCLmkJzntKLlhbPplK7or41cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJpbnB1dFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0TXlWYXIoXFxcImtleXdvcmRcXFwiLCBcXFwiXFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwia2V5d29yZFxcXCIsIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yaWVzID0gW107XFxuICAgICAgICAgICAgcnVsZU9iai5mb3JFYWNoKCh4KSA9PiB7XFxuICAgICAgICAgICAgICAgIHZhciBsaXN0ID0gW107XFxuICAgICAgICAgICAgICAgIGlmICh4Lmpzb24gIT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgICAgICAgICB4Lmpzb24ubWFwKGsgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3JpZXMucHVzaChKU09OLnN0cmluZ2lmeShrKS5yZXBsYWNlKC9eXFxcXFt8XFxcXF0kL2csICcnKSlcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKHgu5LiA57qn5a6a5L2NKSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoeC7kuIDnuqflrprkvY0uc3RhcnRzV2l0aChcXFwiQGpzOlxcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IHRoaXMuZXZhbEpTUnVsZShodG1sLCB4LuS4gOe6p+WumuS9jSk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBwZGZhKGh0bWwsIHgu5LiA57qn5a6a5L2NKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoeC7lpKfnsbvlrprkvY0pIHtcXG4gICAgICAgICAgICAgICAgICAgIGlmICh4LuWkp+exu+WumuS9jS5zdGFydHNXaXRoKFxcXCJAanM6XFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gdGhpcy5ldmFsSlNSdWxlKGh0bWwsIHgu5aSn57G75a6a5L2NKTtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IFtwZGZhKGh0bWwsIHgu5aSn57G75a6a5L2NKS5qb2luKCdcXFxcbicpXTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAvLy0t6aKd5aSW5aSE55CGLS1cXG4gICAgICAgICAgICAgICAgaWYgKCgn5aKe5YqgJyBpbiB4KSkge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHgu5aKe5YqgLmNvbnN0cnVjdG9yID09IFN0cmluZykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHgu5aKe5YqgID0gZXZhbCh4LuWinuWKoCk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBzbGlzdCA9IHgu5aKe5YqgLmNvbmNhdChzbGlzdCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKCgn6KGl5YWFJyBpbiB4KSkge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHgu6KGl5YWFLmNvbnN0cnVjdG9yID09IFN0cmluZykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHgu6KGl5YWFID0gZXZhbCh4LuihpeWFhSk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBzbGlzdCA9IHNsaXN0LmNvbmNhdCh4LuihpeWFhSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgLy8tLemineWkluWkhOeQhi0tXFxuICAgICAgICAgICAgICAgIHZhciDkuIDnuqcgPSBsaXN0Lm1hcCgocykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNsaXN0ID0gW107XFxuICAgICAgICAgICAgICAgICAgICBpZiAoIShcXFwi5bCP57G7XFxcIiBpbiB4KSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHgu5bCP57G7ID0gXFxcImJvZHkmJmE6bm90KDptYXRjaGVzKOmmlumhtSkpOm5vdChhOm5vdChbaHJlZl0pKVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBpZiAoeC7lsI/nsbsuc3RhcnRzV2l0aChcXFwiQGpzOlxcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc2xpc3QgPSB0aGlzLmV2YWxKU1J1bGUocywgeC7lsI/nsbspO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzbGlzdCA9IHBkZmEocywgeC7lsI/nsbspO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgdmFyIOWumuS9jSA9IHNsaXN0Lm1hcCgoaXRlbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9IHRoaXMuZ2V0VGl0bGUoaXRlbSwgeC7moIfpopgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1cmwgPSB0aGlzLmdldFVybChpdGVtLCB4KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogdXJsXFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqKTtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIOWumuS9jTtcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIC8vbG9nKOS4gOe6pylcXG4gICAgICAgICAgICAgICAgLy9sb2co5LiA57qnLmxlbmd0aClcXG4gICAgICAgICAgICAgICAgaWYgKOS4gOe6py5sZW5ndGggPT0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcmllcy5wdXNoKOS4gOe6py5qb2luKFxcXCJcXFxcblxcXCIpKTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIOS4gOe6py5mb3JFYWNoKChpdGVtKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcmllcy5wdXNoKGl0ZW0uam9pbihcXFwiLFxcXCIpKTtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIC8vbG9nKGNhdGVnb3JpZXMpXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgaWYgKOaKmOWPoOeKtuaAgSkge1xcbiAgICAgICAgICAgICAgICBpZiAocGFnZSA9PSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBmb2xkID09PSBcXFwiMVxcXCIgPyDmipjlj6AgOiDlsZXlvIAsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9sZCwgdSwgYWxsKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihNWV9SVUxFLmdyb3VwLCBmb2xkID09PSBcXFwiMVxcXCIgPyBcXFwiMFxcXCIgOiBcXFwiMVxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyphbGwuZm9yRWFjaCgoaXRlbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKGl0ZW0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ki9cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIOeKtuaAgSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAg5YWo5riFXFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmdDbGljazogdGhpcy5hY3Rpb24oe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6IOeKtuaAgSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbDog5YWo5riFLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2w6IOa4hemZpCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChwYWdlID09IDEpIHtcXG4gICAgICAgICAgICAgICAgY2F0ZWdvcmllcy5mb3JFYWNoKChjYXRlZ29yeSwgaW5kZXgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIC8vbG9nKGNhdGVnb3JpZXMpXFxuICAgICAgICAgICAgICAgICAgICBsZXQgc3ViX2NhdGVnb3JpZXMgPSBbXTtcXG4gICAgICAgICAgICAgICAgICAgIC8qaWYgKOWwj+exu+WumuS9jS5pbmNsdWRlcyhcXFwiO1xcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgIHN1Yl9jYXRlZ29yaWVzID0gcGRmYShjYXRlZ29yeSwg5bCP57G75a6a5L2NLnNwbGl0KFxcXCI7XFxcIilbMF0pO1xcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViX2NhdGVnb3JpZXMubGVuZ3RoID09IDApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJfY2F0ZWdvcmllcyA9IHBkZmEoY2F0ZWdvcnksIOWwj+exu+WumuS9jS5zcGxpdChcXFwiO1xcXCIpWzFdKTtcXG4gICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsqL1xcbiAgICAgICAgICAgICAgICAgICAgLy9sb2coaW5kZXgpXFxuICAgICAgICAgICAgICAgICAgICBzdWJfY2F0ZWdvcmllcyA9IEpTT04ucGFyc2UoYFske2NhdGVnb3J5fV1gKTtcXG4gICAgICAgICAgICAgICAgICAgIC8vIHN1Yl9jYXRlZ29yaWVzID0gcGRmYShjYXRlZ29yeSwg5bCP57G75a6a5L2NKTtcXG4gICAgICAgICAgICAgICAgICAgIC8vfVxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3ViX2NhdGVnb3JpZXMuZm9yRWFjaCgoaXRlbSwga2V5KSA9PiB7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbGV0IHRpdGxlID0gcGRmaChpdGVtLCBf5aSn57G75qCH6aKYKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gaXRlbS50aXRsZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiDmjpLpmaQgIT0gXFxcInVuZGVmaW5lZFxcXCIgJiYg5o6S6ZmkICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHRpdGxlLnJlcGxhY2UobmV3UmVnRXhwKOaOkumZpCwgXFxcImdcXFwiKSwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBqc29uID0gJydcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbiA9IGl0ZW0udXJsO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGFyYW1zID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZV90ZW1wOiBjYXRlX3RlbXAsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2U6IHBhZ2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhcnM6IOa4hemZpCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb246IGpzb24sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTog54q25oCBLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsY2xlYXJzOiDlhajmuIUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbGV0IHVybCA9IHBkKGl0ZW0sIF/lpKfnsbvpk77mjqUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gaXRlbS51cmw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qaWYgKOWkp+exu+WkhOeQhikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IOS4gOe6p+WIhuexu+WkhOeQhih1cmwpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ki9cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9sb2codXJsKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuc2V0VGl0bGUoa2V5LnRvU3RyaW5nKCksIGNhdGVfdGVtcFtpbmRleF0sIHRpdGxlKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoXFxcImhpa2VyOi8vZW1wdHkjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChwYXJhbXMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV3X2NhdGUgPSBbXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuY2xlYXJzLmZvckVhY2goKGl0ZW0pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihpdGVtKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuYWxsY2xlYXJzLmZvckVhY2goKGl0ZW0pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihpdGVtKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuY2F0ZV90ZW1wLmZvckVhY2goKGNhdGUsIGluZGV4KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19jYXRlLnB1c2goaW5kZXggPT09IDAgPyBwYXJhbXMua2V5LnRvU3RyaW5nKCkgOiBcXFwiMFxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJoZWFkLmNhdGVcXFwiLCBKU09OLnN0cmluZ2lmeShuZXdfY2F0ZSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMuanNvbi5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJkdF9cXFwiICsgcGFyYW1zLmpzb24udHlwZSwgcGFyYW1zLmpzb24udmFsdWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKHBhcmFtcy5zdGF0ZSwgcGFyYW1zLmpzb24pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgcGFyYW1zKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJibGFua19ibG9ja1xcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvbGQgPT09IFxcXCIxXFxcIiB8fCDmipjlj6DnirbmgIEgPT0gZmFsc2UpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJfY2F0ZWdvcmllcy5mb3JFYWNoKChpdGVtLCBrZXkpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGV4dHJhcG9zID0gZmFsc2U7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qaWYgKGl0ZW0uaW5jbHVkZXMoJ3R5cGU9XFxcIkBleHRyYVxcXCInKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhcG9zID0gdHJ1ZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2xvZygn6ZmE5Yqg5a6a5L2NJylcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSovXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleHRyYXBvcykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gcGRmaChpdGVtLCBcXFwiYSYmVGV4dFxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiDmjpLpmaQgIT0gXFxcInVuZGVmaW5lZFxcXCIgJiYg5o6S6ZmkICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSB0aXRsZS5yZXBsYWNlKG5ldyBSZWdFeHAo5o6S6ZmkLCBcXFwiZ1xcXCIpLCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIganNvbiA9IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBwZGZoKGl0ZW0sIFxcXCJhJiZzdGF0ZVxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBwZGZoKGl0ZW0sIFxcXCJhJiZ2YWx1ZVxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdmFyIHRpdGxlID0gcGRmaChpdGVtLCDliIbnsbvmoIfpopgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gaXRlbS50aXRsZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yg5o6S6ZmkICE9IFxcXCJ1bmRlZmluZWRcXFwiICYmIOaOkumZpCAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gdGl0bGUucmVwbGFjZShuZXcgUmVnRXhwKOaOkumZpCwgXFxcImdcXFwiKSwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGpzb24gPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qc3dpdGNoICh0cnVlKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug5YiG57G76ZO+5o6lLmluY2x1ZGVzKFxcXCJAQEBcXFwiKTpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogcGRmaChpdGVtLCDliIbnsbvpk77mjqUuc3BsaXQoXFxcIkBAQFxcXCIpWzBdKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBwZGZoKGl0ZW0sIOWIhuexu+mTvuaOpS5zcGxpdChcXFwiQEBAXFxcIilbMV0pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug5YiG57G76ZO+5o6lLmluY2x1ZGVzKFxcXCJAQFxcXCIpOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24gPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiDliIbnsbvpk77mjqUuc3BsaXQoXFxcIkBAXFxcIilbMF0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcGRmaChpdGVtLCDliIbnsbvpk77mjqUuc3BsaXQoXFxcIkBAXFxcIilbMV0pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbiA9IGl0ZW0udXJsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGpzb24gPSBwZChpdGVtLCDliIbnsbvpk77mjqUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSovXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uID0gaXRlbS51cmw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnZhciBqc29uPeWIhuexu+mTvuaOpS5pbmNsdWRlcygnQEBAJyk/e1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTpwZGZoKGl0ZW0s5YiG57G76ZO+5o6lLnNwbGl0KCdAQEAnKVswXSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTpwZGZoKGl0ZW0s5YiG57G76ZO+5o6lLnNwbGl0KCdAQEAnKVsxXSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH06cGQoaXRlbSzliIbnsbvpk77mjqUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbj3liIbnsbvpk77mjqUuaW5jbHVkZXMoJ0BAJyk/e1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTrliIbnsbvpk77mjqUuc3BsaXQoJ0BAJylbMF0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTpwZGZoKGl0ZW0s5YiG57G76ZO+5o6lLnNwbGl0KCdAQCcpWzFdKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTpwZChpdGVtLOWIhuexu+mTvuaOpSk7Ki9cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGFyYW1zID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZV90ZW1wOiBjYXRlX3RlbXAsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaW5kZXgsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2U6IHBhZ2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uOiBqc29uLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6IOeKtuaAgSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbGNsZWFyczog5YWo5riFLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuc2V0VGl0bGUoa2V5LnRvU3RyaW5nKCksIGNhdGVfdGVtcFtpbmRleF0sIHRpdGxlKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJChcXFwiaGlrZXI6Ly9lbXB0eVxcXCIgKyBcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgocGFyYW1zKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmFsbGNsZWFycy5mb3JFYWNoKChpdGVtKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoaXRlbSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmNhdGVfdGVtcFtwYXJhbXMuaW5kZXhdID0gcGFyYW1zLmtleS50b1N0cmluZygpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJoZWFkLmNhdGVcXFwiLCBKU09OLnN0cmluZ2lmeShwYXJhbXMuY2F0ZV90ZW1wKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtcy5qc29uLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcImR0X1xcXCIgKyBwYXJhbXMuanNvbi50eXBlLCBwYXJhbXMuanNvbi52YWx1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIocGFyYW1zLnN0YXRlLCBwYXJhbXMuanNvbik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHBhcmFtcyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSxcXG4gICAgfTtcXG4gICAgb2JqLumihOiuvihvcHRpb25zKTtcXG4gICAgcmV0dXJuIG9iajtcXG59XFxuXFxuLy8u54q25oCBKFxcXCJ1cmxcXFwiKVxcbi8vLueVjOmdoihkKVxcbi8vLua6kOeggSh4aHRtbClcXG4vLy7lhajmuIUoW1xcXCIxXFxcIiwgXFxcIjJcXFwiXSlcXG4vLy7muIXpmaQoKVxcbi8vLuW8gOWQr+aKmOWPoCgpXFxuLy8u6aG156CBKHBhZ2UpXFxuLy8u5Yib5bu65Yqo5oCB5YiG57G7KOWumuS9jeWIl+ihqCk7XFxuXFxuZnVuY3Rpb24gZ2V0T2JqZnVjKG9iaikge1xcbiAgICBjb25zdCBtZXRob2RzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKS5maWx0ZXIoXFxuICAgICAgICAobmFtZSkgPT4gdHlwZW9mIG9ialtuYW1lXSA9PT0gXFxcImZ1bmN0aW9uXFxcIlxcbiAgICApO1xcbiAgICBpZiAobWV0aG9kcy5sZW5ndGggPT0gMCkge1xcbiAgICAgICAgY29uc29sZS5sb2cob2JqLnRvU3RyaW5nKCkpO1xcbiAgICAgICAgcmV0dXJuO1xcbiAgICB9XFxuICAgIGNvbnN0IGZvcm1hdHRlZFN0cmluZyA9IG1ldGhvZHNcXG4gICAgICAgIC5tYXAoKG5hbWUpID0+IHtcXG4gICAgICAgICAgICBjb25zdCBmbiA9IG9ialtuYW1lXTtcXG4gICAgICAgICAgICBjb25zdCBmblN0cmluZyA9IGAke25hbWV9OiAke2ZuLnRvU3RyaW5nKCl9YDtcXG4gICAgICAgICAgICBjb25zdCByZXN0b3JlZEZuU3RyaW5nID0gZm5TdHJpbmcucmVwbGFjZShcXG4gICAgICAgICAgICAgICAgL1xcXFxcXFxcdShbXFxcXGRcXFxcd117NH0pL2dpLFxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbihtYXRjaCwgZ3JwKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChncnAsIDE2KSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICApO1xcbiAgICAgICAgICAgIHJldHVybiByZXN0b3JlZEZuU3RyaW5nO1xcbiAgICAgICAgfSlcXG4gICAgICAgIC5qb2luKFxcXCJcXFxcblxcXCIpO1xcbiAgICBjb25zb2xlLmxvZyhmb3JtYXR0ZWRTdHJpbmcpO1xcbn1cXG5cXG4vKlxcbnZlciAyMDIzLTA2LTE2ICAxLjBcXG4qL1xcbnZhciDnirbmgIEgPVxcbiAgICB0eXBlb2Yg54q25oCB5qCH6K6wICE9IFxcXCJ1bmRlZmluZWRcXFwiICYmIOeKtuaAgeagh+iusCAhPSBcXFwiXFxcIiA/IOeKtuaAgeagh+iusCA6IE1ZX1JVTEUudXJsO1xcblxcbmxldCBkdF9kZWJ1ZyA9IGZhbHNlO1xcblxcbmFkZExpc3RlbmVyKFxcbiAgICBcXFwib25DbG9zZVxcXCIsXFxuICAgICQudG9TdHJpbmcoKCkgPT4ge30pXFxuKTtcXG5cXG52YXIgQ3JlYXRlID0ge1xcbiAgICBzcGFnZToge1xcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcXG4gICAgICAgICAgICByZXR1cm4gc3RvcmFnZTAuZ2V0TXlWYXIoXFxcInNwYWdlXFxcIiwgXFxcIlxcXCIpO1xcbiAgICAgICAgfSxcXG4gICAgICAgIHNldDogZnVuY3Rpb24odXJsKSB7XFxuICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcInNwYWdlXFxcIiwgdXJsKTtcXG4gICAgICAgIH0sXFxuICAgIH0sXFxuICAgIG5leHRQYWdlOiBmdW5jdGlvbigpIHtcXG4gICAgICAgIHZhciByZXN1bHQgPSBmYWxzZTtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgdmFyIG5leHQgPSBldmFsKOS4i+S4gOmhtSk7XFxuICAgICAgICAgICAgLy9sb2coJ246JytuZXh0KVxcbiAgICAgICAgICAgIGlmIChuZXh0ID09IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5LiL5LiA6aG16ZO+5o6l5Li656m6JylcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTtcXG4gICAgICAgICAgICBpZiAodHJ1ZV91cmwgPT0gbmV4dCkge1xcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgLy9sb2coXFxcIuWPr+iDveS4jeWtmOWcqOS4i+S4gOmhteaIluiAheS4i+S4gOmhteWumuS9jeaciemXrumimFxcXCIpO1xcbiAgICAgICAgICAgIGxvZyhcXFwi6ZSZ6K+v5L+h5oGvOlxcXCIgKyBlLm1lc3NhZ2UpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKChuZXh0ID09IFxcXCJcXFwiIHx8IG5leHQgPT0gdW5kZWZpbmVkKSAmJiBwYWdlID09IDEpIHtcXG4gICAgICAgICAgICBuZXh0ID0gdHJ1ZV91cmw7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIC8vcmVzdWx0PWZhbHNlO1xcbiAgICAgICAgICAgIG5leHQgPSBnZXRNeVZhcijnirbmgIEpO1xcbiAgICAgICAgfVxcbiAgICAgICAgLy9sb2coJ2wnK3RydWVfdXJsKVxcbiAgICAgICAgLy9sb2coJ24nK25leHQpXFxuICAgICAgICBpZiAocGFnZSAhPSAxKSB7XFxuICAgICAgICAgICAgaWYgKHRydWVfdXJsID09IG5leHQgJiYgIXJlc3VsdCkge1xcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiByZXN1bHQ7XFxuICAgICAgICAvL3B1dE15VmFyKOeKtuaAgSwgbmV4dCk7XFxuICAgIH0sXFxuICAgIGdldEJhY2tJbWFnZTogZnVuY3Rpb24oaW1ndXJsKSB7XFxuICAgICAgICB2YXIgcmVzdWx0ID0gaW1ndXJsO1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICByZXN1bHQgPSAvdXJsKD86XFxcXHMrKT9cXFxcKCguKj8pXFxcXCkvZ1xcbiAgICAgICAgICAgICAgICAuZXhlYyhpbWd1cmwpWzFdXFxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8oJ3xcXFwifCZxdW90OykvZ20sIFxcXCJcXFwiKTtcXG4gICAgICAgIH0gY2F0Y2gge31cXG4gICAgICAgIHJldHVybiByZXN1bHQ7XFxuICAgIH0sXFxuICAgIGh0dHBIYW5kbGU6IGZ1bmN0aW9uKGlucHV0KSB7XFxuICAgICAgICBpZiAoaW5wdXQuc3RhcnRzV2l0aChcXFwiaHR0cFxcXCIpKSB7XFxuICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xcbiAgICAgICAgfSBlbHNlIGlmIChpbnB1dC5zdGFydHNXaXRoKFxcXCIvL1xcXCIpKSB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJodHRwczpcXFwiICsgaW5wdXQ7XFxuICAgICAgICB9IGVsc2UgaWYgKGlucHV0LnN0YXJ0c1dpdGgoXFxcIi9cXFwiKSkge1xcbiAgICAgICAgICAgIHJldHVybiBNWV9IT01FICsgaW5wdXQ7XFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIGltZ0hhbmRsZTogZnVuY3Rpb24oaXRlbSwgcnVsZSkge1xcbiAgICAgICAgdmFyIGltZyA9IFxcXCJcXFwiO1xcbiAgICAgICAgaWYgKHJ1bGUuaW1nLnN0YXJ0c1dpdGgoXFxcInBkXFxcIikpIHtcXG4gICAgICAgICAgICBpbWcgPSBldmFsKHJ1bGUuaW1nKTtcXG4gICAgICAgIH0gZWxzZSBpZiAocnVsZS5iYWNraW1nKSB7XFxuICAgICAgICAgICAgaW1nID0gcGRmaChpdGVtLCBydWxlLmltZyk7XFxuICAgICAgICAgICAgaW1nID0gdGhpcy5nZXRCYWNrSW1hZ2UoaW1nKTtcXG4gICAgICAgICAgICBpbWcgPSB0aGlzLmh0dHBIYW5kbGUoaW1nKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgaW1nID0gcGRmaChpdGVtLCBydWxlLmltZyk7XFxuICAgICAgICAgICAgaWYgKCFpbWcuc3RhcnRzV2l0aChcXFwiaHR0cFxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIGltZyA9IHBkKGl0ZW0sIHJ1bGUuaW1nKTtcXG4gICAgICAgICAgICAgICAgaW1nID0gdGhpcy5odHRwSGFuZGxlKGltZyk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIGltZyArIHJ1bGUucmVmO1xcbiAgICB9LFxcbiAgICB1cmxIYW5kbGU6IGZ1bmN0aW9uKGl0ZW0sIHJ1bGUpIHtcXG4gICAgICAgIHZhciBocmVmID0gXFxcIlxcXCI7XFxuICAgICAgICBpZiAocnVsZS51cmwuc3RhcnRzV2l0aChcXFwicGRcXFwiKSkge1xcbiAgICAgICAgICAgIGhyZWYgPSBldmFsKHJ1bGUudXJsKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgaHJlZiA9IHBkKGl0ZW0sIHJ1bGUudXJsKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGhyZWYgPSBydWxlLmltdCA/IGhyZWYgKyBcXFwiI2ltbWVyc2l2ZVRoZW1lI1xcXCIgOiBocmVmO1xcbiAgICAgICAgcmV0dXJuIGhyZWY7XFxuICAgIH0sXFxuICAgIHNldENvbnRlbnQ6IGZ1bmN0aW9uKGl0ZW0sIGlucHV0KSB7XFxuICAgICAgICBsZXQgb3V0cHV0ID0gXFxcIlxcXCI7XFxuICAgICAgICBpZiAoaW5wdXQgPT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChpbnB1dC5zdGFydHNXaXRoKFxcXCJwZFxcXCIpKSB7XFxuICAgICAgICAgICAgb3V0cHV0ID0gZXZhbChpbnB1dCk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIG91dHB1dCA9IHBkZmgoaXRlbSwgaW5wdXQpO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcXG4gICAgfSxcXG4gICAgcmVmcmVzaDogZnVuY3Rpb24oKSB7XFxuICAgICAgICBhZGRMaXN0ZW5lcihcXG4gICAgICAgICAgICBcXFwib25SZWZyZXNoXFxcIixcXG4gICAgICAgICAgICAkLnRvU3RyaW5nKCh1KSA9PiB7XFxuICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoXFxcInlpbGlzdFxcXCIpO1xcbiAgICAgICAgICAgICAgICAvL3ZhciBwID0gc3RvcmFnZTAuZ2V0TXlWYXIoJ3NwYWdlJywgJycpO1xcbiAgICAgICAgICAgICAgICAvL3B1dE15VmFyKHUsIHApO1xcbiAgICAgICAgICAgIH0sIOeKtuaAgSlcXG4gICAgICAgICk7XFxuICAgIH0sXFxuICAgIGpzb25MaXN0OiBmdW5jdGlvbihhcnIsIGpzb24sIHJ1bGUpIHtcXG4gICAgICAgIGlmIChqc29uLmNvbnN0cnVjdG9yICE9IE9iamVjdCkge1xcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIGpzb24gPSBKU09OLnBhcnNlKGpzb24pO1xcbiAgICAgICAgICAgIH0gY2F0Y2gge31cXG4gICAgICAgIH1cXG4gICAgICAgIHZhciBkZWJ1ZyA9IHJ1bGUuZGVidWcgPyBydWxlLmRlYnVnIDogZmFsc2U7XFxuICAgICAgICBqc29uW3J1bGUubGlzdF0uZm9yRWFjaCgoaXRlbSkgPT4ge1xcbiAgICAgICAgICAgIGlmIChkZWJ1Zykge1xcbiAgICAgICAgICAgICAgICBsb2coaXRlbSlcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdmFyIGltZyA9IGV2YWwocnVsZS5pbWcpICsgcnVsZS5yZWY7XFxuICAgICAgICAgICAgdmFyIGhyZWYgPSBldmFsKHJ1bGUudXJsKTtcXG4gICAgICAgICAgICBocmVmID0gcnVsZS5pbXQgPyBocmVmICsgXFxcIiNpbW1lcnNpdmVUaGVtZSNcXFwiIDogaHJlZjtcXG4gICAgICAgICAgICB2YXIgbGF6eSA9IHJ1bGUubGF6eSA/IHJ1bGUubGF6eSA6IFxcXCJcXFwiO1xcbiAgICAgICAgICAgIHZhciBkZCA9IHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGV2YWwocnVsZS50aXRsZSksXFxuICAgICAgICAgICAgICAgIGRlc2M6IGV2YWwocnVsZS5kZXNjKSxcXG4gICAgICAgICAgICAgICAgY29udGVudDogZXZhbChydWxlLmNvbnRlbnQpLFxcbiAgICAgICAgICAgICAgICBwaWNfdXJsOiBpbWcsXFxuICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHkjI1xcXCIgKyBocmVmLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogcnVsZS5jb2xfdHlwZSxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIH07XFxuXFxuICAgICAgICAgICAgaWYgKGxhenkgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgZGRbXFxcInVybFxcXCJdID0gaHJlZiArIGxhenk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGFyci5wdXNoKGRkKTtcXG4gICAgICAgIH0pO1xcbiAgICB9LFxcbiAgICBydWxlTGlzdDogZnVuY3Rpb24oYXJyLCBodG1sLCBydWxlKSB7XFxuICAgICAgICB2YXIgbGlzdCA9IHBkZmEoaHRtbCwgcnVsZS5saXN0KTtcXG4gICAgICAgIGxpc3QuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xcbiAgICAgICAgICAgIHZhciB0aXRsZSA9IHRoaXMuc2V0Q29udGVudChpdGVtLCBydWxlLnRpdGxlKTtcXG4gICAgICAgICAgICB2YXIgZGVzYyA9IHRoaXMuc2V0Q29udGVudChpdGVtLCBydWxlLmRlc2MpO1xcbiAgICAgICAgICAgIHZhciBpbWcgPSB0aGlzLmltZ0hhbmRsZShpdGVtLCBydWxlKTtcXG4gICAgICAgICAgICB2YXIgdXJsID0gdGhpcy51cmxIYW5kbGUoaXRlbSwgcnVsZSk7XFxuICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSB0aGlzLnNldENvbnRlbnQoaXRlbSwgcnVsZS5jb250ZW50KTtcXG4gICAgICAgICAgICB2YXIgbGF6eSA9IHJ1bGUubGF6eSA/IHJ1bGUubGF6eSA6IFxcXCJcXFwiO1xcbiAgICAgICAgICAgIHZhciBkZCA9IHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBkZXNjLFxcbiAgICAgICAgICAgICAgICBwaWNfdXJsOiBpbWcsXFxuICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHkjI1xcXCIgKyB1cmwsXFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBydWxlLmNvbF90eXBlLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICBpZiAobGF6eSAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICBkZFtcXFwidXJsXFxcIl0gPSB1cmwgKyBsYXp5O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBhcnIucHVzaChkZCk7XFxuICAgICAgICB9KTtcXG4gICAgfSxcXG4gICAgTGlzdDogZnVuY3Rpb24oYXJyLCBodG1sLCBydWxlLCBwYXJhbSkge1xcbiAgICAgICAgcGFyYW0gPSBwYXJhbSA/IHBhcmFtIDoge307XFxuICAgICAgICB2YXIgYXV0byA9IHBhcmFtLmF1dG8gPyBwYXJhbS5hdXRvIDogZmFsc2U7XFxuICAgICAgICB2YXIgc2hvdyA9IHBhcmFtLnNob3cgPyBwYXJhbS5zaG93IDogZmFsc2U7XFxuICAgICAgICBpZiAocGFnZSA9PSAxKSB7XFxuICAgICAgICAgICAgLy90aGlzLnNwYWdlLnNldCh0cnVlX3VybCk7XFxuICAgICAgICB9XFxuICAgICAgICB0aGlzLnJlZnJlc2goKTtcXG4gICAgICAgIHZhciBsaXN0ID0gcGRmYShodG1sLCBydWxlLmxpc3QpO1xcbiAgICAgICAgLy9sb2codGhpcy5uZXh0UGFnZSgpKVxcbiAgICAgICAgaWYgKChzdG9yYWdlMC5nZXRNeVZhcigneWlfaXNuZXh0JywgJ3QnKSA9PSAndCcgJiYgbGlzdC5sZW5ndGggPiAwKSB8fCBwYWdlID09IDEpIHtcXG4gICAgICAgICAgICBsaXN0LmZvckVhY2goKGl0ZW0sIGkpID0+IHtcXG4gICAgICAgICAgICAgICAgZGVsZXRlSXRlbShcXFwicGFnZW51bVxcXCIpO1xcbiAgICAgICAgICAgICAgICBkZWxldGVJdGVtKFxcXCJwYWdlbGluZVxcXCIpO1xcbiAgICAgICAgICAgICAgICB2YXIgaWQgPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICAgICAgdmFyIGNscyA9IFxcXCJcXFwiO1xcbiAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSB0aGlzLnNldENvbnRlbnQoaXRlbSwgcnVsZS50aXRsZSk7XFxuICAgICAgICAgICAgICAgIHZhciBkZXNjID0gdGhpcy5zZXRDb250ZW50KGl0ZW0sIHJ1bGUuZGVzYyk7XFxuICAgICAgICAgICAgICAgIHZhciBkZXNjMSA9IHRoaXMuc2V0Q29udGVudChpdGVtLCBydWxlLmRlc2MxKTtcXG52YXIgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpOyAvLyDliJvlu7rkuIDkuKpEYXRl5a+56LGh77yM6KGo56S65b2T5YmN5pel5pyf5ZKM5pe26Ze0XFxudmFyIHllYXIgPSBjdXJyZW50RGF0ZS5nZXRGdWxsWWVhcigpOyAvLyDojrflj5blubTku71cXG52YXIgbW9udGggPSBjdXJyZW50RGF0ZS5nZXRNb250aCgpICsgMTsgLy8g6I635Y+W5pyI5Lu977yI5rOo5oSP5pyI5Lu95piv5LuOMOW8gOWni+iuoeaVsO+8jOaJgOS7peimgeWKoDHvvIlcXG52YXIgZGF0ZSA9IGN1cnJlbnREYXRlLmdldERhdGUoKTsgLy8g6I635Y+W5pel5pyfXFxudmFyIGZvcm1hdHRlZERhdGUgPSB5ZWFyICsgXFxcIi1cXFwiICsgbW9udGggKyBcXFwiLVxcXCIgKyBkYXRlOyAvLyDnlJ/miJDmoLzlvI/ljJbnmoTml6XmnJ/lrZfnrKbkuLJcXG4gICAgICAgICAgICAgICAgdmFyIGRlc2MyID0gZGVzYzE/ZGVzYzE6Zm9ybWF0dGVkRGF0ZTtcXG4gICAgICAgICAgICAgICAgdmFyIGltZyA9IHRoaXMuaW1nSGFuZGxlKGl0ZW0sIHJ1bGUpO1xcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gdGhpcy51cmxIYW5kbGUoaXRlbSwgcnVsZSk7XFxuICAgICAgICAgICAgICAgIHZhciBjb250ZW50ID0gdGhpcy5zZXRDb250ZW50KGl0ZW0sIHJ1bGUuY29udGVudCk7XFxuICAgICAgICAgICAgICAgIGlmIChpID09IGxpc3QubGVuZ3RoIC0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgaWQgPSBcXFwibGFzdGlkX1xcXCIgKyBwYWdlO1xcbiAgICAgICAgICAgICAgICAgICAgY2xzID0gXFxcImxhc3RtYXJrXFxcIjtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08c21hbGw+PGZvbnQgY29sb3I9Z3JleT4nK3RpdGxlKyc8L2ZvbnQ+PC9zbWFsbD4nLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogJ+KPsCcgKyBkZXNjICsgJ1xcXFx0XFxcXHRcXFxcdFxcXFx08J+ThicgKyBkZXNjMixcXG4gICAgICAgICAgICAgICAgICAgIHBpY191cmw6IGltZyxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogdXJsICsgbGF6eSxcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogcnVsZS5jb2xfdHlwZSxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsczogY2xzLFxcbiAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGlmIChpID09IGxpc3QubGVuZ3RoIC0gMSAmJiBzaG93KSB7XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwibGluZVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFxcXCJwYWdlbGluZVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuKAnOKAnOKAneKAnTxzbWFsbD7liqDovb3kuK0uLi48L3NtYWxsPlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogXFxcInBhZ2VudW1cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICB1cGRhdGVJdGVtKFxcXCJwYWdlbnVtXFxcIiwge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxmb250IGNvbG9yPVxcXCJncmV5XFxcIj48c21hbGw+5Yiw5bqV5LqGPC9zbWFsbD48L2ZvbnQ+JyxcXG4gICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBpZDogXFxcImxhc3RcXFwiLFxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKGxpc3QubGVuZ3RoID09IDAgJiYgcGFnZSA9PSAxKSB7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJsaW5lXFxcIixcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxmb250IGNvbG9yPVxcXCJncmV5XFxcIj48c21hbGw+5peg5YaF5a65PC9zbWFsbD48L2ZvbnQ+JyxcXG4gICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7fSxcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICh0aGlzLm5leHRQYWdlKCkpIHtcXG4gICAgICAgICAgICAvL2xvZygndCcpO1xcbiAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKCd5aV9pc25leHQnLCAndCcpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAvL2xvZygnZicpO1xcbiAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKCd5aV9pc25leHQnLCAnZicpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKGF1dG8pIHtcXG4gICAgICAgICAgICAvL2NyZWF0ZU5leHRQYWdlKCk7XFxuICAgICAgICAgICAgYXV0b1BhZ2UoKTtcXG4gICAgICAgIH1cXG4gICAgfSxcXG59O1xcblxcbnZhciBleHRNZXRob2QgPSB7XFxuICAgIFRvUGFyYW1zOiBmdW5jdGlvbigpIHtcXG4gICAgICAgIHZhciBqc29uID0gYXJndW1lbnRzWzBdO1xcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGpzb24pXFxuICAgICAgICAgICAgLm1hcCgoa2V5KSA9PiBrZXkgKyBcXFwiPVxcXCIgKyBqc29uW2tleV0pXFxuICAgICAgICAgICAgLmpvaW4oXFxcIiZcXFwiKTtcXG4gICAgfSxcXG4gICAgdXJsUGFyc2U6IGZ1bmN0aW9uKHUpIHtcXG4gICAgICAgIHZhciBkaWN0ID0ge307XFxuICAgICAgICBkaWN0LlNvdXJjZSA9IHU7XFxuICAgICAgICBsZXQgcGFyYW1zID0gKHVybCkgPT4ge1xcbiAgICAgICAgICAgIGxldCBxdWVyeVBhcmFtcyA9IHt9O1xcbiAgICAgICAgICAgIGxldCByZWcgPSAvKFtePz0mXSspPShbXj89Jl0rKS9nO1xcbiAgICAgICAgICAgIHVybC5yZXBsYWNlKHJlZywgZnVuY3Rpb24oKSB7XFxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zW2FyZ3VtZW50c1sxXV0gPSBhcmd1bWVudHNbMl07XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5UGFyYW1zO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHZhciBqYXZhVXJsID0gSmF2YUltcG9ydGVyKGphdmEubmV0LlVSTCk7XFxuICAgICAgICB3aXRoKGphdmFVcmwpIHtcXG4gICAgICAgICAgICB2YXIgdXJsID0gbmV3IFVSTCh1KTtcXG4gICAgICAgICAgICBkaWN0LlByb3RvY29sID0gdXJsLmdldFByb3RvY29sKCk7XFxuICAgICAgICAgICAgZGljdC5Ib3N0ID0gdXJsLmdldEhvc3QoKTtcXG4gICAgICAgICAgICBkaWN0LlBvcnQgPSB1cmwuZ2V0UG9ydCgpO1xcbiAgICAgICAgICAgIGRpY3QuRmlsZSA9IHVybC5nZXRGaWxlKCk7XFxuICAgICAgICAgICAgZGljdC5QYXRoID0gdXJsLmdldFBhdGgoKTtcXG4gICAgICAgICAgICBkaWN0LlJlZiA9IHVybC5nZXRSZWYoKTtcXG4gICAgICAgICAgICBkaWN0Lkhvc3RzID0gYCR7ZGljdC5Qcm90b2NvbH06Ly8ke3VybC5nZXRIb3N0KCl9YDtcXG4gICAgICAgIH1cXG4gICAgICAgIGRpY3QuUGFyYW1zID0gcGFyYW1zKHUpO1xcbiAgICAgICAgcmV0dXJuIGRpY3Q7XFxuICAgIH0sXFxuICAgIGlzRXF1YWw6IGZ1bmN0aW9uKHgsIHkpIHtcXG4gICAgICAgIGNvbnN0IG9rID0gT2JqZWN0LmtleXMsXFxuICAgICAgICAgICAgdHggPSB0eXBlb2YgeCxcXG4gICAgICAgICAgICB0eSA9IHR5cGVvZiB5O1xcbiAgICAgICAgcmV0dXJuIHggJiYgeSAmJiB0eCA9PT0gXFxcIm9iamVjdFxcXCIgJiYgdHggPT09IHR5ID9cXG4gICAgICAgICAgICBvayh4KS5sZW5ndGggPT09IG9rKHkpLmxlbmd0aCAmJlxcbiAgICAgICAgICAgIG9rKHgpLmV2ZXJ5KChrZXkpID0+IHRoaXMuaXNFcXVhbCh4W2tleV0sIHlba2V5XSkpIDpcXG4gICAgICAgICAgICB4ID09PSB5O1xcbiAgICB9LFxcbiAgICBmaW5kRGlmZmVyZW50SW5kZXg6IGZ1bmN0aW9uKHN0cjEsIHN0cjIpIHtcXG4gICAgICAgIGNvbnN0IGRpZmZDaGFycyA9IFtdO1xcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgaWYgKHN0cjFbaV0gIT09IHN0cjJbaV0pIHtcXG4gICAgICAgICAgICAgICAgZGlmZkNoYXJzLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXFxuICAgICAgICAgICAgICAgICAgICBzMTogc3RyMVtpXSxcXG4gICAgICAgICAgICAgICAgICAgIHMyOiBzdHIyW2ldLFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gZGlmZkNoYXJzO1xcbiAgICB9LFxcbiAgICByZXBsYWNlQ2hhckF0OiBmdW5jdGlvbihzdHIsIGluZGV4LCByZXBsYWNlbWVudCkge1xcbiAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBzdHIubGVuZ3RoKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHN0cjtcXG4gICAgICAgIH1cXG4gICAgICAgIC8vbG9nKGluZGV4KVxcbiAgICAgICAgY29uc3QgYXJyID0gc3RyLnNwbGl0KFxcXCJcXFwiKTtcXG4gICAgICAgIGFycltpbmRleF0gPSByZXBsYWNlbWVudDtcXG4gICAgICAgIHJldHVybiBhcnIuam9pbihcXFwiXFxcIik7XFxuICAgIH0sXFxuICAgIGdldE9iamVjdEtleXNEaWZmOiBmdW5jdGlvbihvYmoxLCBvYmoyKSB7XFxuICAgICAgICBjb25zdCBkaWZmZXJlbnRLZXlzID0gW107XFxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gb2JqMSkge1xcbiAgICAgICAgICAgIGlmICghb2JqMi5oYXNPd25Qcm9wZXJ0eShrZXkpIHx8IG9iajFba2V5XSAhPT0gb2JqMltrZXldKSB7XFxuICAgICAgICAgICAgICAgIGRpZmZlcmVudEtleXMucHVzaChrZXkpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIGZvciAobGV0IGtleSBpbiBvYmoyKSB7XFxuICAgICAgICAgICAgaWYgKCFvYmoxLmhhc093blByb3BlcnR5KGtleSkpIHtcXG4gICAgICAgICAgICAgICAgZGlmZmVyZW50S2V5cy5wdXNoKGtleSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIGRpZmZlcmVudEtleXM7XFxuICAgIH0sXFxuICAgIGdldE5leHRVcmw6IGZ1bmN0aW9uKHNvdXJjZSwgdGFyZ2V0LCBwYXJhbXMpIHtcXG4gICAgICAgIHZhciB1MSA9IHRoaXMudXJsUGFyc2Uoc291cmNlKTtcXG4gICAgICAgIHZhciB1MiA9IHRoaXMudXJsUGFyc2UodGFyZ2V0KTtcXG4gICAgICAgIHZhciBwYSA9IHVuZGVmaW5lZDtcXG4gICAgICAgIGlmICh0eXBlb2YgcGFyYW1zID09IFxcXCJvYmplY3RcXFwiKSB7XFxuICAgICAgICAgICAgcGEgPSBwYXJhbXMuaGFzT3duUHJvcGVydHkoXFxcIueJueW+gVxcXCIpID8gcGFyYW1zLueJueW+gSA6IHVuZGVmaW5lZDtcXG4gICAgICAgIH1cXG4gICAgICAgIHZhciBuZXh0dXJsID0gc291cmNlO1xcbiAgICAgICAgdmFyIGNhID0gT2JqZWN0LmtleXModTIuUGFyYW1zKS5sZW5ndGggPT0gMCA/IFxcXCJcXFwiIDogXFxcIj9cXFwiO1xcbiAgICAgICAgaWYgKHBhICE9IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgIHZhciBycyA9IFN0cmluZyh1Mi5QYXRoKS5yZXBsYWNlKG5ldyBSZWdFeHAocGEpLCBcXFwiJDFmeXBhZ2VcXFwiKTtcXG4gICAgICAgICAgICBuZXh0dXJsID0gdTIuSG9zdHMgKyBycyArIGNhICsgdGhpcy5Ub1BhcmFtcyh1Mi5QYXJhbXMpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBpZiAodGhpcy5pc0VxdWFsKHUxLlBhcmFtcywgdTIuUGFyYW1zKSkge1xcbiAgICAgICAgICAgICAgICBpZiAoZHRfZGVidWcpIHtcXG4gICAgICAgICAgICAgICAgICAgIGxvZyh1MS5QYXRoKTtcXG4gICAgICAgICAgICAgICAgICAgIGxvZyh1Mi5QYXRoKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB2YXIgZGYgPSB0aGlzLmZpbmREaWZmZXJlbnRJbmRleChTdHJpbmcodTEuUGF0aCksIFN0cmluZyh1Mi5QYXRoKSk7XFxuICAgICAgICAgICAgICAgIGlmIChkdF9kZWJ1Zykge1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKGRmKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoZGYubGVuZ3RoID09IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciByZSA9IGRmWzBdLmluZGV4O1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIGYgPSBkZi5maWx0ZXIoKHgpID0+IC9cXFxcZCsvLnRlc3QoeC5zMikpO1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlID0gZlswXS5pbmRleDtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB2YXIgZXEgPSB0aGlzLnJlcGxhY2VDaGFyQXQoU3RyaW5nKHUyLlBhdGgpLCByZSwgXFxcImZ5cGFnZVxcXCIpO1xcbiAgICAgICAgICAgICAgICBuZXh0dXJsID0gdTIuSG9zdHMgKyBlcSArIGNhICsgdGhpcy5Ub1BhcmFtcyh1Mi5QYXJhbXMpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHZhciBlcCA9IHRoaXMuZ2V0T2JqZWN0S2V5c0RpZmYodTEuUGFyYW1zLCB1Mi5QYXJhbXMpXFxuICAgICAgICAgICAgICAgIGlmIChlcC5sZW5ndGggPT0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgdTEuUGFyYW1zW2VwWzBdXSA9ICdmeXBhZ2UnXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBsb2coZXApO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHZhciBlcSA9IFN0cmluZyh1MS5QYXRoKS5yZXBsYWNlKC9cXFxcZCsvLCBcXFwiZnlwYWdlXFxcIik7XFxuICAgICAgICAgICAgICAgIG5leHR1cmwgPSB1MS5Ib3N0cyArIGVxICsgY2EgKyB0aGlzLlRvUGFyYW1zKHUxLlBhcmFtcyk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgLy9sb2coJ25leHQ6JytuZXh0dXJsKVxcbiAgICAgICAgcmV0dXJuIG5leHR1cmw7XFxuICAgIH0sXFxufTtcXG5cXG5mdW5jdGlvbiBnZXRUcnVlbGluayhtYXJrLCB1cmwsIHBhZ2UpIHtcXG4gICAgdmFyIHAgPSBnZXRNeVZhcihtYXJrLCB1cmwpLnJlcGxhY2UoXFxcImZ5cGFnZVxcXCIsIHBhZ2UpO1xcbiAgICBpZiAocGFnZSA9PSAxKSB7XFxuICAgICAgICByZXR1cm4gZ2V0TXlWYXIoXFxcInlpX2ZpcnN0cGFnZVxcXCIsIHApO1xcbiAgICB9IGVsc2UgaWYgKHAgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgIHJldHVybiBwO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgcmV0dXJuIHVybDtcXG4gICAgfVxcbn1cXG4vL+aehOW7ulxcbmZ1bmN0aW9uIGNyZWF0ZU5leHRQYWdlKCkge1xcbiAgICBsZXQgc3RhcnRudW0gPSAxO1xcbiAgICB2YXIgb2JqID0gYXJndW1lbnRzWzBdO1xcbiAgICBpZiAodHJ1ZV91cmwgIT0gZ2V0TXlWYXIoXFxcInlpX3BhZ2V1cmxcXFwiLCBcXFwiXFxcIikpIHtcXG4gICAgICAgIGNsZWFyTXlWYXIoXFxcInlpX3BhZ2V1cmxcXFwiKTtcXG4gICAgfVxcbiAgICBpZiAocGFnZSA9PSBzdGFydG51bSAmJiBnZXRNeVZhcihcXFwieWlfcGFnZXVybFxcXCIpID09IFxcXCJcXFwiKSB7XFxuICAgICAgICBwdXRNeVZhcihcXFwieWlfZmlyc3RwYWdlXFxcIiwgdHJ1ZV91cmwpO1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICB2YXIgbmV4dCA9IGV2YWwo5LiL5LiA6aG1KTtcXG4gICAgICAgICAgICAvL2xvZyhcXFwibmV4dFxcXCIpO1xcbiAgICAgICAgICAgIC8vbG9nKG5leHQpO1xcbiAgICAgICAgfSBjYXRjaCB7XFxuICAgICAgICAgICAgbG9nKFxcXCLlj6/og73kuI3lrZjlnKjkuIvkuIDpobXmiJbogIXkuIvkuIDpobXlrprkvY3mnInpl67pophcXFwiKTtcXG4gICAgICAgICAgICBuZXh0ID0gXFxcIlxcXCI7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAobmV4dCAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgIHZhciBueHVybCA9IGV4dE1ldGhvZC5nZXROZXh0VXJsKHRydWVfdXJsLCBuZXh0LCBvYmopO1xcbiAgICAgICAgICAgIC8vbG9nKFxcXCJueHVybDpcXFwiICsgbnh1cmwpO1xcbiAgICAgICAgICAgIHB1dE15VmFyKOeKtuaAgSwgbnh1cmwpO1xcbiAgICAgICAgICAgIHB1dE15VmFyKFxcXCJ5aV9wYWdldXJsXFxcIiwgbnh1cmwpO1xcbiAgICAgICAgfVxcbiAgICB9XFxufVxcblxcbmZ1bmN0aW9uIGF1dG9QYWdlKCkge1xcbiAgICBpZiAocGFnZSA9PSAxKSB7XFxuICAgICAgICBwdXRNeVZhcihcXFwieWlfZmlyc3RwYWdlXFxcIiwgdHJ1ZV91cmwpO1xcbiAgICB9XFxuICAgIHRyeSB7XFxuICAgICAgICB2YXIgbmV4dCA9IGV2YWwo5LiL5LiA6aG1KTtcXG4gICAgICAgIC8vbG9nKFxcXCJuZXh0XFxcIik7XFxuICAgICAgICAvL2xvZygnbmV4dDonK25leHQpO1xcbiAgICB9IGNhdGNoIHtcXG4gICAgICAgIGxvZyhcXFwi5Y+v6IO95LiN5a2Y5Zyo5LiL5LiA6aG15oiW6ICF5LiL5LiA6aG15a6a5L2N5pyJ6Zeu6aKYXFxcIik7XFxuICAgICAgICBuZXh0ID0gXFxcIlxcXCI7XFxuICAgIH1cXG4gICAgaWYgKG5leHQgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgIHB1dE15VmFyKOeKtuaAgSwgbmV4dCk7XFxuICAgIH1cXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLlrZjlgqhjb29raWVcIixcInBhdGhcIjpcInJlcGFpclwiLFwicnVsZVwiOlwianM6XFxudmFyIGRvY3VtZW50ID0ge307XFxudmFyIHdpbmRvdyA9IHtcXG4gICAgbG9jYXRpb246IHtcXG4gICAgICAgIHJlbG9hZDogZnVuY3Rpb24oKSB7XFxuICAgICAgICAgICAgcmV0dXJuO1xcbiAgICAgICAgfVxcbiAgICB9XFxufTtcXG5cXG4vLyDlrprkuYnkuIDkuKrlr7nosaHnlKjkuo7lrZjlgqggY29va2llIOWQjeensOWSjOWAvOeahOmUruWAvOWvuVxcbnZhciBjb29raWVzID0ge307XFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGRvY3VtZW50LCAnY29va2llJywge1xcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXFxuICAgIGdldDogZnVuY3Rpb24oKSB7XFxuICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoY29va2llcykubWFwKChba2V5LCB2YWx1ZV0pID0+IGAke2tleX09JHt2YWx1ZX1gKS5qb2luKCc7ICcpO1xcbiAgICB9LFxcbiAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7XFxuICAgICAgICB2YXIgbGlzdCA9IFtdO1xcbiAgICAgICAgaWYgKHZhbHVlLmluY2x1ZGVzKCc7JykpIHtcXG4gICAgICAgICAgICBsaXN0ID0gdmFsdWUuc3BsaXQoJzsnKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgbGlzdCA9IFt2YWx1ZV07XFxuICAgICAgICB9XFxuICAgICAgICBsaXN0LmZvckVhY2goeCA9PiB7XFxuICAgICAgICAgICAgdmFyIGluZGV4ID0geC5pbmRleE9mKFxcXCI9XFxcIik7XFxuICAgICAgICAgICAgdmFyIGtleSA9IHguc3Vic3RyaW5nKDAsIGluZGV4KS50cmltKCk7XFxuICAgICAgICAgICAgdmFyIHZhbHVlID0geC5zdWJzdHJpbmcoaW5kZXggKyAxKTtcXG4gICAgICAgICAgICBjb29raWVzW2tleV0gPSB2YWx1ZTtcXG4gICAgICAgIH0pXFxuICAgIH1cXG59KTtcXG5cXG5mdW5jdGlvbiBndWFyZCh1cmwsIGhlYWRvYmopIHtcXG4gICAgdmFyIGhlYWQgPSBoZWFkb2JqID8gaGVhZG9iajp7XFxuICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgQ29va2llOiBnZXRDb29raWUodXJsKSxcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICB2YXIgaHRtbCA9IGZldGNoKHVybCwgaGVhZCk7XFxuICAgIGlmIChodG1sLmluY2x1ZGVzKCdfZ3VhcmQvYXV0by5qcycpKSB7XFxuICAgICAgICBkb2N1bWVudFtcXFwiY29va2llXFxcIl0gPSBnZXRDb29raWUodXJsKTtcXG4gICAgICAgIGV2YWwoZmV0Y2goZ2V0SG9tZSh1cmwpICsgJy9fZ3VhcmQvYXV0by5qcycpKVxcbiAgICAgICAgaHRtbCA9IGZldGNoKHVybCwge1xcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgQ29va2llOiBkb2N1bWVudFtcXFwiY29va2llXFxcIl0sXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgIH1cXG4gICAgLy9sb2coZG9jdW1lbnRbXFxcImNvb2tpZVxcXCJdKVxcbiAgICByZXR1cm4gaHRtbDtcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJpbWdcIixcInBhdGhcIjpcImltZ1wiLFwicnVsZVwiOlwidmFyIGltZzEgPSBcXFwiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQRDk0Yld3Z2RtVnljMmx2YmowaU1TNHdJaUJsYm1OdlpHbHVaejBpZFhSbUxUZ2lQejROQ2p3aExTMGdSMlZ1WlhKaGRHOXlPaUJCWkc5aVpTQkpiR3gxYzNSeVlYUnZjaUF5Tmk0d0xqSXNJRk5XUnlCRmVIQnZjblFnVUd4MVp5MUpiaUF1SUZOV1J5QldaWEp6YVc5dU9pQTJMakF3SUVKMWFXeGtJREFwSUNBdExUNE5Danh6ZG1jZ2RtVnljMmx2YmowaU1TNHhJaUJwWkQwaTVadSs1YkdDWHpFaUlIaHRiRzV6UFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eU1EQXdMM04yWnlJZ2VHMXNibk02ZUd4cGJtczlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5MekU1T1RrdmVHeHBibXNpSUhnOUlqQndlQ0lnZVQwaU1IQjRJZzBLQ1NCMmFXVjNRbTk0UFNJd0lEQWdOVEF3SURFMU9DNDJJaUJ6ZEhsc1pUMGlaVzVoWW14bExXSmhZMnRuY205MWJtUTZibVYzSURBZ01DQTFNREFnTVRVNExqWTdJaUI0Yld3NmMzQmhZMlU5SW5CeVpYTmxjblpsSWo0TkNqeHpkSGxzWlNCMGVYQmxQU0owWlhoMEwyTnpjeUkrRFFvSkxuTjBNSHRtYVd4c09pTTBNamcxUmpRN2ZRMEtDUzV6ZERGN1ptbHNiRG9qTkRJME1qUXlPMzBOQ2p3dmMzUjViR1UrRFFvOFp6NE5DZ2s4Y0dGMGFDQmpiR0Z6Y3owaWMzUXdJaUJrUFNKTk16RXNNVFV1TldNdE1DNDFMRFV0TVM0NUxEa3VNaTAwTGpJc01USXVPRWcxTW1NdE1TNDVMVFV1TVMwMExqWXRPQzQ1TFRndU1pMHhNUzR6YkRBdU9DMHlMak5qTVM0NUxEQXNOUzR5TERBdU5DdzVMamdzTVM0eURRb0pDV00wTGpnc01DNDRMRGd1TWl3eUxqRXNNVEF1TWl3ekxqbGpNU3d4TGpJc01TNDFMREl1T0N3eExqVXNOQzQzWXkwd0xqUXNNUzQzTFRFdU1Td3pMVEl1TWl3ekxqbElPRFZqTWk0eUxEQXNOUzR5TFRFdU1TdzRMamt0TXk0eWJETXVPU3cyTGpkSU5qVXVNblkzTGpob01UY3VOUTBLQ1Fsak1pNHlMREFzTlM0eUxURXNPQzQ1TFRNdU1Xd3pMamtzTmk0MlNEWTFMakpXTlRGb01UY3VOV015TGpJc01DdzFMakl0TVN3NExqa3RNeTR4YkRNdU9TdzJMalpJTmpVdU1uWTVTRGcxWXpJdU1pd3dMRFV1TWkweExEZ3VPUzB6TGpGc015NDVMRFl1TmtnMk1TNDBkamt1TTJneE5TNDVEUW9KQ1dNeUxqZ3NNQ3czTGpjdE1TNHlMREUwTGpndE15NDFiRFVzTjBnMk1TNDBWakV3T1VnME5WWTNPUzQyU0RJMExqbGpMVE11TlN3d0xUZ3VOQ3d4TGpJdE1UUXVPQ3d6TGpWc0xUVXROMGcwTldNdE1DNHlMVEV1T0MweExqRXRNeTR4TFRJdU5pMHpMamwyTFRKc01UUXVOQzB6TGpWSU9TNHpEUW9KQ1ZZME1DNDFZeTB4TGpVc01DNDFMVE11TVN3eExUUXVOeXd4TGpOc0xUQXVPQzB4TGpGak5DNDFMVFVzTnk0eUxURXdMaklzT0M0eUxURTFMalpqTUMwd0xqa3RNQzQzTFRFdU9DMHlMVEl1TjNZdE1TNDJURE14TERFMUxqVjZJRTB6Tmk0MUxEZ3lMallOQ2drSll5MHdMamNzTmk0M0xUTXVOQ3d4TWk0eExUZ3VNU3d4Tmk0eVl5MDBMamdzTkM0eUxURXhMalVzTnk0ekxUSXdMak1zT1M0eGJDMHhMakl0TVM0MVl6UXVOUzAwTGpJc055NHlMVGd1TlN3NExqSXRNVEl1T0dNd0xURXRNQzQyTFRFdU9TMHhMamt0TWk0NGRpMHhMamxNTXpZdU5TdzRNaTQyZWcwS0NRa2dUVFE0TGpVc016a3VOWFl0Tnk0NFNESTFMakoyTnk0NFNEUTRMalY2SUUwME9DNDFMRFV3TGpoV05ETklNalV1TW5ZM0xqaElORGd1TlhvZ1RUUTRMalVzTmpNdU1uWXRPVWd5TlM0eWRqbElORGd1TlhvZ1RUY3dMamNzT0RNdU5HTTNMaklzTWk0eUxERXpMalFzTkM0NUxERTRMallzT0M0eERRb0pDV00wTGpRc015dzJMamNzTmk0ekxEWXVOeXc1TGpoakxUQXVOeXcwTFRNdU1pdzJMakV0Tnk0MUxEWXVNbU10TWk0M0xEQXROUzR5TFRFdU5TMDNMalF0TkM0Mll5MHpMall0Tnk0NExUY3VOeTB4TXk0M0xURXlMalF0TVRjdU5VdzNNQzQzTERnekxqUjZJaTgrRFFvSlBIQmhkR2dnWTJ4aGMzTTlJbk4wTUNJZ1pEMGlUVEU1TWk0ekxESXpMakpzTlM0eExEVXVPR2d0TVRJdU9IWTNMamxvTFRFMkxqTldNamxvTFRNMkxqRjJPV2d0TVRZdU0zWXRPQzQ1WXkweExqa3NNQzR5TFRRdU5Dd3hMVGN1TkN3eUxqTnNMVFV1TVMwMUxqbG9NVEl1TkhZdE1pNDNEUW9KQ1dNd0xUQXVPUzB3TGpjdE1TNDNMVEl0TWk0MGRpMHlMak5zTVRndU15MHpMalYyTVRBdU9HZ3pOaTR4ZGkweUxqZGpNQzB3TGpjdE1DNDRMVEV1TkMweUxqTXRNbFl4T0d3eE9DNDJMVE11TlhZeE1DNDRRekU0Tmk0eUxESTFMalFzTVRnNExqZ3NNalF1Tml3eE9USXVNeXd5TXk0eWVnMEtDUWtnVFRFNU1TNDVMRFExTGpOc05TNHhMRFV1T1dndE5qVXVOM1l4TlM0ell6SXVNUzB3TGprc015NHhMVEV1TXl3ekxURXVNMk16TGpFdE1TNHhMRFl1TnkweExqWXNNVEV0TVM0MmFETXhMamhqT1M0eExEQXNNVE11Tml3ekxqWXNNVE11Tml3eE1DNDRkakl6TGpRTkNna0pZeTB3TGpFc01pNDRMVEV1Tnl3MUxqSXROQzQzTERjdU1XTXRNaTR6TERFdU15MDFMalFzTVM0NUxUa3VOQ3d4TGpsakxUZ3VOQ3d3TFRFMUxqWXRNaTR6TFRJeExqZ3ROeTR4YkRJdE1TNDVZellzTWk0NExERXdMallzTkM0ekxERTBMRFF1TTJNeExqVXNNQ3d5TGpJdE1TNHlMREl1TXkwekxqVU5DZ2tKVmpjell6QXRNeTQ1TFRJdE5TNDVMVFV1T1MwMUxqbG9MVEl5TGpGakxUUXVNU3d3TFRjdU5Dd3dMalV0TVRBdU1Td3hMalpzTFRNdU9Td3hMamQyTWpZdU4yTXRNQzQyTERZdU9DMDBMak1zTVRBdU1pMHhNUzR5TERFd0xqSmpMVFVzTUMweE1DNHhMVEl1TVMweE5TNHlMVFl1TTJ3eUxURXVPUTBLQ1Fsak1pNDFMREV1TXl3MExqWXNNUzQ1TERZdU15d3hMamxqTVN3d0xERXVOUzB3TGpnc01TNDFMVEl1TTFZMU1TNDFZeTB4TGprc01DNDBMVE11T1N3eExqRXROaTR5TERKc0xUVXVNUzAxTGpob05ESXVOR010TVM0NUxUWXVNUzAwTGpZdE1UQXVOaTA0TGpJdE1UTXVObXd3TGpjdE1pNDNEUW9KQ1dNeUxqSXNNQ3cxTGpnc01DNDFMREV3TGpnc01TNDBZelV1TXl3eExqRXNPUzR4TERJdU55d3hNUzR5TERRdU9XTXhMakVzTVM0MUxERXVOeXd6TGpVc01TNDNMRFV1T0dNdE1DNDFMREV1T1MweExqTXNNeTR6TFRJdU5TdzBMak5JTVRnekRRb0pDVU14T0RRdU55dzBOeTQzTERFNE55NDJMRFEyTGprc01Ua3hMamtzTkRVdU0zb2lMejROQ2drOGNHRjBhQ0JqYkdGemN6MGljM1F3SWlCa1BTSk5NalExTGpJc016RmpMVEF1TXl3eUxqVXRNQzQ1TERRdU5TMHhMallzTmk0ell6SXVOUzB3TGpVc05DNDRMVEF1T0N3M0xUQXVPR2d4TlM0eVl6RXVOeXd3TERNdU5Td3dMalFzTlM0MExERXVNbU15TGpZc01TNHlMRE11T1N3ekxETXVPU3cxTGpRTkNna0pZekFzTVM0MUxUQXVOeXd6TGpJdE1pNHlMRFZqTFRNdU9TdzBMakl0T1N3NExqRXRNVFV1TXl3eE1TNDFZelV1Tnl3ekxERXlMakVzTlM0ekxERTVMakVzTnk0eGRpMDBNbU13TFRJdU5TMHhMamd0TXk0NExUVXVOUzB6TGpsb0xURTRMalpqTFRJdU15d3dMVFV1TlN3d0xqZ3RPUzQ0TERJdU5BMEtDUWxzTFRVdU1TMDFMamxvTkRFdU5tTTVMREFzTVRNdU5Td3pMREV6TGpZc09YWTNNUzQ1WXkwd0xqZ3NOUzQyTFRRdU55dzRMamN0TVRFdU5pdzVMakpqTFRZdU1pMHdMakV0TVRFdU9TMHlMamd0TVRjdU1TMDRMakpzTVM0MkxURXVOV015TGprc01TNDFMRFVzTWk0ekxEWXVOaXd5TGpNTkNna0pZekl1Tnl3d0xEUXVNUzB3TGprc05DNHpMVEl1TjFZMk9DNDJZeTB4TWk0eExUQXVOUzB5TVM0NUxUSXRNamt1TkMwMExqUmpMVGd1TXl3ekxURTNMakVzTkM0MkxUSTJMalVzTkM0NWRqTTRMalJvTFRFMUxqSldOREV1T0dNd0xURXVPUzB3TGprdE15NHlMVEl1TnkwekxqbFdNellOQ2drSmJERTNMamt0TkM0emRqTTFZelV1T0MweExqVXNNVEV1TWkwekxqY3NNVFl1TkMwMkxqWmpMVEl1TVMweExqRXROQzR5TFRJdU1pMDJMalF0TXk0MVl5MHhMak10TUM0MkxUSXVPUzB3TGprdE5TNHhMVEF1T1d3dE1DNDBMVEV1TW13eE5TNDJMVGN1T0EwS0NRbGpNaTR5TERJdU15dzBMalFzTkM0ekxEWXVPQ3cyTGpKak5TMDBMRGd1TlMwNExqRXNNVEF1TmkweE1tTXdMVEF1Tnkwd0xqZ3RNUzR4TFRJdU15MHhMakZvTFRVdU5XTXRNeTR5TERBdE5pNHlMREF1TkMwNExqa3NNUzR4WXkwd0xqY3NNUzR5TFRFdU5pd3lMakl0TWk0MkxETU5DZ2tKWXkwekxqa3NNeTQxTFRrdU15dzFMamd0TVRZdU5DdzJMamhzTFRBdU9DMHhMalZqTWkweExqTXNNeTQ0TFRNdU15dzFMak10TlM0NVl6RXVOQzB5TGpVc01pNHhMVFF1TXl3eUxqRXROUzQxWXpBdE1DNDVMVEF1TmkweExqVXRNUzQ1TFRFdU9YWXRNUzR5VERJME5TNHlMRE14ZWcwS0NRa2dUVEl4TVM0MExERXpMalZqTnk0eExERXVOaXd4TXk0eUxETXVOU3d4T0M0ekxEVXVPR00wTGpRc01pNHhMRFl1Tml3MExqVXNOaTQyTERjdU1XTXRNQzQyTERRdE15NHhMRFl1TVMwM0xqUXNOaTR6WXkweUxqY3NNQzAxTGpJdE1TNDJMVGN1TlMwMExqY05DZ2tKWXkwekxqUXROUzQxTFRjdU5TMDVMall0TVRJdE1USXVORXd5TVRFdU5Dd3hNeTQxZWlCTk1qUXhMak1zTmpndU4zWXpMakZqTWk0eExUQXVPQ3cwTFRFdU1pdzFMamd0TVM0eWFERTBMalJqTnk0NExEQXNNVEV1Tml3ekxqa3NNVEV1Tml3eE1TNDNkakUwTGpOSU1qSTJWamM0TGpNTkNna0pZeTB3TGpFdE1TNDFMVEV0TWk0MExUSXVOeTB5TGpkMkxURXVOVXd5TkRFdU15dzJPQzQzZWlCTk1qUXhMak1zT1RNdU1tZ3hOUzQxVmpjNExqaGpNQzB6TGpFdE1TNDJMVFF1TmkwMExqY3ROQzQyU0RJME4yTXRNUzQ0TERBdE15NDNMREF1TkMwMUxqZ3NNUzR5VERJME1TNHpMRGt6TGpJTkNna0pUREkwTVM0ekxEa3pMako2SWk4K0RRb0pQSEJoZEdnZ1kyeGhjM005SW5OME1DSWdaRDBpVFRNNU1DNDRMRFV3YkRVdU1TdzJMak5vTFRRMExqWnNMVEkwTGpZc05ESXVPR013TERFdU5Td3dMamtzTWk0ekxESXVOeXd5TGpOb016VmpNeTR5TERBc09DNHhMVEV1TlN3eE5DNDFMVFF1TlEwS0NRbGpMVFF1TWkweE1pNHhMVGt1TVMweU1TNDFMVEUwTGpVdE1qZ3VNbXd4TGpVdE1TNDJZemd1TWl3MExqTXNNVFV1TVN3NUxqWXNNakVzTVRVdU4yTTFMRFV1T1N3M0xqVXNNVEl1TXl3M0xqVXNNVGt1TTJNdE1DNDJMRE11TlMweUxqZ3NOUzR6TFRZdU55dzFMalFOQ2drSll5MHlMalFzTUMwMExqWXRNUzQwTFRZdU5pMDBMak5qTFRBdU15MHhMVEF1TnkweUxURXRNMk10Tmk0NUxETXVNUzB4TWk0eExEUXVOaTB4TlM0M0xEUXVObWd0TlRBdU1XTXROQzQyTERBdE55MHlMakV0TnkwMkxqSmpNQzB3TGpZc01DNDBMVEV1T0N3eExqSXRNeTQyYkRJekxqSXRNemd1T0EwS0NRbElNekU1WXkweUxqWXNNQzAyTGpRc01DNDVMVEV4TGpJc01pNDNiQzAxTGpFdE5pNHlhRGMyTGpsRE16Z3hMamNzTlRJdU9Dd3pPRFV1TlN3MU1TNDVMRE01TUM0NExEVXdlaUJOTXpnMExqY3NNVGd1Tm13MUxqRXNOUzQ1YUMwMk55NHlZeTB4TGprc01DMDBMallzTUM0NExUZ3VNaXd5TGpNTkNna0piQzAxTGpFdE5TNDVhRFkzTGpKRE16YzRMREl3TGprc016Z3dMamdzTWpBdU1Td3pPRFF1Tnl3eE9DNDJlaUl2UGcwS0NUeHdZWFJvSUdOc1lYTnpQU0p6ZERBaUlHUTlJazAwTWpZdU55d3hOQzQzZGpFekxqbGpNUzR6TFRBdU5Dd3lMamN0TUM0NUxEUXVNeTB4TGpWc05TNHhMRFV1T0dndE9TNDBWalUwWXpJdE1TNDJMRFF0TXk0ekxEVXVPQzAxTGpGc01TNHlMREF1TncwS0NRbGpMVEV1TWl3MExqZ3RNeTQxTERrdU5TMDNMREUwTGpOMk16UXVNMk10TUM0NUxEWXROQzQwTERrdU1pMHhNQzQxTERrdU4yTXROQzQwTFRBdU1TMDRMall0TVM0NUxURXlMalF0TlM0MGJERXVOaTB5WXpFdU55d3hMakVzTXl3eExqWXNNeTQ1TERFdU5nMEtDUWxqTVM0M0xEQXNNaTQxTFRFdU1pd3lMamN0TXk0MWRpMHlNR010TVM0NUxERXVOQzB6TGprc01pNDNMVFV1T0N3ekxqaHNMVE11TlMweE55NDFiREV1TVMwd0xqaGpNQzQxTERBdU9Dd3hMaklzTVM0eUxESXNNUzR5WXpFdU5TMHdMakVzTXk0MkxUQXVPQ3cyTGpJdE1TNDVkaTB6TUEwS0NRbGpMVEV1Tml3d0xqVXRNeTQwTERFdU1TMDFMalFzTW13dE5TNHhMVFV1T1VnME1USldNalpqTUMweUxqSXRNQzQ1TFRNdU9DMHlMamN0TkM0M2RpMHhMamxNTkRJMkxqY3NNVFF1TjNvZ1RUUTBOaTQ1TERFMUxqVnNPUzQyTERoakxUQXVNUzB4TGpVdE1TMHlMall0TWk0M0xUTXVNM1l0TVM0MkRRb0pDV3d4Tnk0eExUUXVNM1kyTGpKb01USXVOR00yTGpJc01DdzVMalFzTXl3NUxqUXNPQzQ1ZGpNeUxqTm9MVEl4TGpoMk5TNDBhREUyTGpOak5DNHlMREFzTmk0ekxERXVNaXcyTGpNc015NDFZekFzTWk0NExURXVPQ3cyTGpRdE5TNHpMREV3TGpjTkNna0pZeTAwTGpFc05TMDRMamNzT1M0eUxURXpMamdzTVRJdU9HTTJMaklzTkM0eExERXpMakVzTnk0NExESXdMallzTVRGc0xUQXVOeXd4TGpaakxUZ3VNaTB4TGpNdE1UVXVOUzB5TGpndE1qRXVPQzAwTGpoakxUSXVOQzB3TGpjdE5DNDNMVEV1TmkwM0xUSXVOZzBLQ1FsakxUa3VPQ3cwTGpRdE1qQXVPQ3czTFRNekxqRXNOeTQ0YkMwd0xqTXRNUzQyWXpndE1pNDVMREUxTGpJdE5pNDVMREl4TGpndE1URXVPRU0wTkRndU5pdzVNQzQyTERRME15NDJMRGczTERRek9TdzRNMk10TUM0M0xUQXVOeTB4TGpZdE1TNHhMVEl1TmkweExqRU5DZ2tKWXkwd0xqTXNNQzB3TGprc01DNHlMVElzTUM0M2JDMHhMakl0TWk0emJERTNMalV0Tnk0NFl6TXVOU3cwTGpVc055NDNMRGd1T1N3eE1pNDJMREV6TGpGak5DNDBMVFF1TXl3NExqTXRPQzQ1TERFeExqUXRNVE11T1dNd0xUQXVPQzB3TGpVdE1TNHlMVEV1TlMweExqSm9MVEkzTGpjTkNna0pZeTB5TGpNc01DMDFMaklzTUM0M0xUZ3VOaXd5YkMwMExqTXROUzQxYURJekxqaDJMVFV1TkdndE1qQXVNbFl5Tnk0NVNEUXpOR3d0TUM0MExURXVObU0wTFRFdU55dzNMall0TkN3eE1DNDNMVGRqTVM0eExURXVNU3d4TGpjdE1pNHpMREV1TnkwekxqVk1ORFEyTGprc01UVXVOWG9OQ2drSklFMDBOVFl1Tml3ME1TNHhWakkwTGpoakxUSXVNU3d3TGprdE5DNDFMREV1TlMwM0xqRXNNbll4TUM0MVl6RXVNaTB3TGpVc01pNDFMVEV1TVN3ekxqa3RNa3cwTlRZdU5pdzBNUzR4ZWlCTk5EVTJMallzTlRndU1sWTBNUzQ0YUMwM0xqRjJNVFl1TTB3ME5UWXVOaXcxT0M0eURRb0pDVXcwTlRZdU5pdzFPQzR5ZWlCTk5EY3dMamtzTWpRdU1YWXhNeTQwYURjdU9IWXRNVEpqTFRBdU1TMHhMVEF1T1MweExqVXRNaTR6TFRFdU5VZzBOelpqTFRBdU55d3dMVElzTUM0MUxUTXVPU3d4TGpWTU5EY3dMamtzTWpRdU1Yb2dUVFEzTUM0NUxETTVMamQyTVRndU5XZzNMamgyTFRFM0RRb0pDV010TVM0ekxEQXVNeTB5TGprc01DNDVMVFF1Tnl3eExqaE1ORGN3TGprc016a3VOM29pTHo0TkNqd3ZaejROQ2p4d1lYUm9JR05zWVhOelBTSnpkREVpSUdROUlrMHhNVGd1TVN3eE1qWXVOV3c1TGprdE1DNHlkakl5WXkwd0xqTXNOQzQwTFRNdU1pdzJMall0T0M0MUxEWXVPR010TlM0M0xEQXVPQzA0TGpRdE55NHpMVE10T0dNMExUQXVNaXd6TGpNc05TNDFMVEF1TXl3MExqa05DZ2xqTUM0NUxESXVOU3cyTGpFc01TNHhMRFV1TkMweUxqRmpNQ3d3TERBdE1UZ3VPU3d3TFRFNExqbGpNQzR5TFRJdU1TMHdMamt0TXk0eExUTXVOUzB5TGpsRE1URTRMakVzTVRJNExqRXNNVEU0TGpFc01USTJMalVzTVRFNExqRXNNVEkyTGpWNklFMHhNakF1Tnl3eE1Ua3VPQTBLQ1dNd0xUUXVPQ3czTGpRdE5DNDNMRGN1TWl3d1F6RXlPQ3d4TWpRdU5Dd3hNakF1T1N3eE1qUXVOU3d4TWpBdU55d3hNVGt1T0hvaUx6NE5Danh3WVhSb0lHTnNZWE56UFNKemRERWlJR1E5SWsweE5EWXVNaXd4TkRjdU1XZ3RNVE11TlhZdE1TNDNZekl1Tnl3d0xqRXNNeTQ1TFRBdU9Td3pMall0TWk0NVZqRXpNV013TGpJdE1pNHhMVEV0TXk0eExUTXVOaTB5TGpsMkxURXVObXd4TUMwd0xqSjJNVFl1TVEwS0NXTXRNQzR5TERJdU1Td3dMamtzTXk0eExETXVOU3d5TGpsV01UUTNMakY2SUUweE16VXVOU3d4TVRrdU9HTXdMVFF1T0N3M0xqUXROQzQzTERjdU1pd3dRekUwTWk0NUxERXlOQzQwTERFek5TNDFMREV5TkM0MUxERXpOUzQxTERFeE9TNDRlaUl2UGcwS1BIQmhkR2dnWTJ4aGMzTTlJbk4wTVNJZ1pEMGlUVEUzTmk0eUxERXlOaTQwZGpFdU9XZ3ROUzQxZGpFMExqSmpMVEF1TlN3eUxqSXNNU3d6TGpJc05DNDFMREl1T1hZeExqZG9MVEUxTGpGMkxURXVOMk16TERBdU1pdzBMak10TUM0M0xEUXRNaTQ1ZGkweE5DNHlhQzAwZGkweExqbG9OQTBLQ1dNdE1TNDVMVGt1T1N3eE5DNDBMVEV5TGpZc01UWXVNUzAxTGpOak1DdzJMVEV3TGpNc01TNDFMVFV0TWk0eVl5MDBMamd0TVM0MExUUXVOaXd6TGprdE5DNDBMRGN1TkV3eE56WXVNaXd4TWpZdU5Fd3hOell1TWl3eE1qWXVOSG9pTHo0TkNqeHdZWFJvSUdOc1lYTnpQU0p6ZERFaUlHUTlJazB4T1RZdU5pd3hNekV1T1hZeE1DNHlZekFzTXk0M0xESXVPQ3d6TGpRc015MHdMalZvTVM0Mll6RXVNaXcxTGpZdE55NDVMRGd1TVMweE1DNHlMRE11TVdNdE1UTXVOQ3c1TGpJdE1qRXROeTR6TFRBdU9DMHhNQzQyRFFvSll6QXVPQzAwTGpndE1pNHhMVGN1TnkwMkxqa3ROUzQxZGpBdU1tTTNMaklzTWk0MUxUTXVNU3d4TUM0eUxUUXNNaTQxUXpFM09DNDVMREV5TkM0MUxERTVOeTQzTERFeU15NDFMREU1Tmk0MkxERXpNUzQ1ZWlCTk1Ua3dMREUwTVM0eGRpMDFEUW9KUXpFM09DNDBMREV6T1M0eExERTRPQzR4TERFMU1pNHhMREU1TUN3eE5ERXVNWG9pTHo0TkNqeHdZWFJvSUdOc1lYTnpQU0p6ZERFaUlHUTlJazB5TVRVdU1Td3hORGN1TVVneU1ESjJMVEV1TjJNeUxqUXNNQzR4TERNdU5TMHdMamtzTXk0ekxUSXVPVll4TXpGak1DNHlMVEl1TVMwd0xqa3RNeTR4TFRNdU15MHlMamwyTFRFdU5tdzVMalF0TUM0eWRqTXVNUTBLQ1dNMExqRXROUzQyTERFekxUUXVPQ3d4TXl3eUxqaGpNQ3d3TERBc01UQXVNaXd3TERFd0xqSmpMVEF1TWl3eUxqRXNNQzQ0TERNdU1Td3pMakVzTWk0NWRqRXVOMGd5TVRoakxUQXVOaTB4TGpjc01TNDNMVEl3TGpFdE1TNDVMVEU1TGpGakxUUXVPU3d3TGpRdE5DNDBMREV3TGpNdE5DNHpMREUwTGpRTkNnbGpMVEF1TWl3eUxqRXNNQzQ1TERNdU1Td3pMalVzTWk0NWRqRXVPVWd5TVRVdU1Yb2lMejROQ2p4d1lYUm9JR05zWVhOelBTSnpkREVpSUdROUlrMHlORGN1TWl3eE1qVXVNV010TUM0NUxEQXRNUzR6TERBdU9TMHhMalFzTWk0ell6WXVNU3cxTERJdU1pd3hNaTQxTFRZdU5Td3hNaTR6WXkweExqSXNNQzR5TFRRdU9DMHhMak10TlN3d0xqVmpNQ3d3TGpjc01TNDNMREV1TWl3MUxERXVOQTBLQ1dNM0xqWXNNQzR5TERFeExqUXNNaTR4TERFeExqUXNOUzQzWXkwd0xqVXNOQzQxTFRRdU1pdzJMamt0TVRFdU15dzNMak5qTFRrdU9Dd3dMalV0TVRVdU5TMDNMall0TlMwNVl5MDBMamd0TVMwMkxqTXROUzR5TFRBdU5TMDNMak5qTFRrdU9DMDFMamdzTVM0ekxURTFMalVzT1M0NUxURXhMamdOQ2dsak1TNHpMVGN1TlN3eE15NHhMVEVzTlM0eUxERXVOME15TkRjc01USTRMak1zTWpRMkxqWXNNVEkyTGpZc01qUTNMaklzTVRJMUxqRjZJRTB5TkRRdU9Td3hORGt1TjJNeExqUXRNeTQxTFRFeExqVXROQzR6TFRFeExqRXRNQzQxRFFvSlF6SXpNeTR4TERFMU15NHpMREkwTlM0eUxERTFOQ3d5TkRRdU9Td3hORGt1TjNvZ1RUSXpPUzQyTERFeU55NDJZeTAwTGpVdE1DNDNMVFF1TXl3eE1TNDBMREFzTVRBdU5rTXlORE11Tnl3eE16a3NNalF6TGpnc01USTJMamtzTWpNNUxqWXNNVEkzTGpaNklpOCtEUW84Y0dGMGFDQmpiR0Z6Y3owaWMzUXhJaUJrUFNKTk1qZ3pMallzTVRJMUxqRmpMVEF1T1N3d0xURXVNeXd3TGprdE1TNDBMREl1TTJNMkxqRXNOU3d5TGpJc01USXVOUzAyTGpVc01USXVNMk10TVM0eUxEQXVNaTAwTGpndE1TNHpMVFVzTUM0MVl6QXNNQzQzTERFdU55d3hMaklzTlN3eExqUU5DZ2xqTnk0MkxEQXVNaXd4TVM0MExESXVNU3d4TVM0MExEVXVOMk10TUM0MUxEUXVOUzAwTGpJc05pNDVMVEV4TGpNc055NHpZeTA1TGpnc01DNDFMVEUxTGpVdE55NDJMVFV0T1dNdE5DNDRMVEV0Tmk0ekxUVXVNaTB3TGpVdE55NHpZeTA1TGpndE5TNDRMREV1TXkweE5TNDFMRGt1T1MweE1TNDREUW9KWXpFdU15MDNMalVzTVRNdU1TMHhMRFV1TWl3eExqZERNamd6TGpRc01USTRMak1zTWpneUxqa3NNVEkyTGpZc01qZ3pMallzTVRJMUxqRjZJRTB5T0RFdU15d3hORGt1TjJNeExqUXRNeTQxTFRFeExqVXROQzR6TFRFeExqRXRNQzQxRFFvSlF6STJPUzQxTERFMU15NHpMREk0TVM0MkxERTFOQ3d5T0RFdU15d3hORGt1TjNvZ1RUSTNOUzQ1TERFeU55NDJZeTAwTGpVdE1DNDNMVFF1TXl3eE1TNDBMREFzTVRBdU5rTXlPREFzTVRNNUxESTRNQzR4TERFeU5pNDVMREkzTlM0NUxERXlOeTQyZWlJdlBnMEtQSEJoZEdnZ1kyeGhjM005SW5OME1TSWdaRDBpVFRNeE1DNDVMREV6Tmk0M2FDMHhOR010TUM0MExERXdMRGN1TkN3eE1TNDFMREV5TGpVc05DNDFiREV1TkN3d0xqbGpMVFF1Tnl3NUxqUXRNakV1TWl3MUxqTXRNakV0TlM0MERRb0pRekk1TUM0eUxERXlNeTQwTERNeE1TNDBMREV5TVM0MUxETXhNQzQ1TERFek5pNDNlaUJOTWprMkxqa3NNVE0wTGpob05pNDVRek13TkM0ekxERXlOQzQwTERJNU55NHhMREV5TlM0eUxESTVOaTQ1TERFek5DNDRlaUl2UGcwS1BIQmhkR2dnWTJ4aGMzTTlJbk4wTVNJZ1pEMGlUVE14TlM0MExERTBNeTQ0WXpBdE5DNDJMRGN1TkMwMExqY3NOeTQwTERCRE16SXpMREUwT0M0eUxETXhOUzR5TERFME9DNHhMRE14TlM0MExERTBNeTQ0ZWlJdlBnMEtQR2MrRFFvSlBIQmhkR2dnWTJ4aGMzTTlJbk4wTVNJZ1pEMGlUVE0xTUM0ekxERXpOUzQyWXkwd0xqZ3NOaTR5TFRRdU5DdzVMalV0TVRBdU9DdzVMamhqTFRZdU5pMHdMak10TVRBdU1pMHpMall0TVRBdU9DMDVMamhqTUM0NExUWXVNeXcwTGpRdE9TNDNMREV3TGpndE1UQXVNZzBLQ1FsRE16UTFMamtzTVRJMUxqa3NNelE1TGpVc01USTVMak1zTXpVd0xqTXNNVE0xTGpaNklFMHpORE11TXl3eE16VXVObU13TFRVdU55MHhMak10T0M0MkxUTXVPUzA0TGpkakxUSXVOaXd3TGpFdE15NDVMRE10TXk0NUxEZ3VOMk13TGpFc05TNDNMREV1TkN3NExqWXNNeTQ1TERndU53MEtDUWxETXpReExqa3NNVFEwTGpJc016UXpMaklzTVRReExqTXNNelF6TGpNc01UTTFMalo2SWk4K0RRb0pQSEJoZEdnZ1kyeGhjM005SW5OME1TSWdaRDBpVFRNMk5Dd3hORFV1TTBnek5URjJMVEV1Tm1NeUxqUXNNQzR4TERNdU5DMHdMamdzTXk0eUxUSXVOM1l0TVRBdU4yTXdMakl0TVM0NUxUQXVPUzB5TGprdE15NHlMVEl1TjNZdE1TNDFiRGd1Tnkwd0xqSjJOQzQwYURBdU1nMEtDUWxqTVM0ekxUTXVNaXd6TGpFdE5DNDRMRFV1TlMwMExqaGpNaTQxTERBdU1Td3pMamdzTVM0ekxETXVPU3d6TGpaakxUQXVNU3d5TFRFdU1Td3pMakV0TWk0NUxETXVNbU10TVM0NExUQXVNUzB5TGpndE1TNHhMVEl1T1MwekxqRmpNQzB3TGpJc01DNHhMVEF1TlN3d0xqSXRNQzQ0RFFvSkNXTXdMVEF1TXl3d0xUQXVOU3d3TFRBdU5tTXRNaTQwTERFdU9DMHpMallzTlM0NUxUTXVOaXd4TWk0eFl5MHdMalFzTWk0NUxEQXVPU3cwTGpJc015NDVMRE11T1ZZeE5EVXVNM29pTHo0TkNnazhjR0YwYUNCamJHRnpjejBpYzNReElpQmtQU0pOTXpnMkxqRXNNVEkwTGpob0xUQXVNbU10TUM0MkxEQXVNaTB4TERBdU9TMHhMakVzTWk0eFl6RXVPQ3d4TGpRc01pNDNMRE11TVN3eUxqY3NOUzR5WXkwd0xqSXNOQzB6TGpFc05pNHhMVGd1Tnl3MkxqTU5DZ2tKWXkwd0xqWXNNQzB4TGpNdE1DNHhMVEl1TVMwd0xqSmpMVEF1TXkwd0xqRXRNQzQyTFRBdU1pMHhMVEF1TW1NdE1TNHhMREF0TVM0MkxEQXVNeTB4TGpZc01DNDRZekFzTUM0MkxERXVOaXd4TGpFc05DNDNMREV1TTJNM0xqRXNNQzR5TERFd0xqY3NNaXd4TUM0M0xEVXVNdzBLQ1FsakxUQXVOQ3cwTGpJdE15NDVMRFl1TlMweE1DNDFMRFl1T0dNdE5pNHlMVEF1TWkwNUxqWXRNUzQ1TFRFd0xUVXVNbU13TGpNdE1TNDRMREl1TVMweUxqa3NOUzR6TFRNdU1tTXRNQzR5TFRBdU1TMHdMall0TUM0ekxURXVNUzB3TGpWakxUSXRNQzQwTFRNdE1TNDFMVEl1T1MwekxqRU5DZ2tKWXpBdE1TNHlMREV1TWkweUxqTXNNeTQyTFRNdU1tTXRNaTR6TFRFdU1pMHpMalF0TWk0NUxUTXVOaTAxWXpBdU15MDBMakVzTXk0eUxUWXVNeXc0TGpjdE5pNDJZekV1TkN3d0xESXVOeXd3TGpJc05Dd3dMalpqTUM0MUxUSXVNaXd4TGpndE15NHlMRE11T1MwekxqSU5DZ2tKWXpJdU1pd3dMakVzTXk0ekxERXNNeTQwTERJdU4yTXRNQzR4TERFdU15MHdMamtzTWkweUxqUXNNaTR4WXkweExqTXNNQzB4TGprdE1DNDJMVEV1T1MweExqaERNemcxTGprc01USTFMalVzTXpnMUxqa3NNVEkxTGpFc016ZzJMakVzTVRJMExqaDZJRTB6T0RRc01UUTNMamNOQ2drSll6QXVNUzB4TGprdE1TNDVMVEl1T1MwMkxUSXVOMk10TXl3d0xUUXVOU3d3TGpndE5DNDBMREl1TTJNd0xqRXNNaXd4TGprc015NHhMRFV1TlN3ekxqSkRNemd5TGpJc01UVXdMalFzTXpnekxqZ3NNVFE1TGpRc016ZzBMREUwTnk0M2VpQk5NemM0TGprc01USTNMakVOQ2drSll5MHlMREF0TXk0eExERXVOaTB6TGpFc05DNDRZekFzTXk0ekxERXNOU3d6TGpFc05XTXhMamtzTUN3eUxqa3RNUzQzTERJdU9TMDFRek00TVM0NUxERXlPQzQzTERNNE1DNDVMREV5Tnk0eExETTNPQzQ1TERFeU55NHhlaUl2UGcwS1BDOW5QZzBLUEM5emRtYytEUW89XFxcIlxcblxcbiQuZXhwb3J0cy5pbWcxID0gaW1nMTtcIn0se1wibmFtZVwiOlwi6Kej5a+GXCIsXCJwYXRoXCI6XCJqaWVtaVwiLFwicnVsZVwiOlwiZnVuY3Rpb24gZW5jcnlwdERhdGEod29yZCkge1xcbmV2YWwoZ2V0Q3J5cHRvSlMoKSk7XFxuY29uc3Qga2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoXFxcIjJkNGViYjdjYjc2N2RhYjFcXFwiKTtcXG5jb25zdCBpdiA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKFxcXCI3NTYzY2E0YWY0MWJkMGZiXFxcIik7XFxuICBjb25zdCBlbmNyeXB0ZWQgPSBDcnlwdG9KUy5BRVMuZW5jcnlwdCh3b3JkLGtleSwge1xcbiAgICBpdjogaXYsXFxuICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5aZXJvUGFkZGluZyxcXG4gICAgbW9kZTogQ3J5cHRvSlMubW9kZS5DQkNcXG4gIH0pO1xcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlbmNyeXB0ZWQudG9TdHJpbmcoKSk7XFxufVwifV0iLCJpY29uIjoiaHR0cHM6Ly9pbWcudmludWEuY24vaW1hZ2VzL3pTeHRVLnBuZyIsInByb3h5IjoiIn0=
Add Comment
Please, Sign In to add comment