Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:二级页面详情¥page_detail¥阿里云盘分享@@eyJkYXRhIjoie1wiYXNzb2NpYXRlZE1vZGVsc01hcEZvckpvaW5UYWJsZVwiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhGS1wiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhvdXRGS1wiOnt9LFwiZmllbGRzVG9TZXRUb0RlZmF1bHRcIjpbXSxcImlkXCI6MCxcImxhc3RfY2hhcHRlcl9ydWxlXCI6XCJcIixcImxpc3RUb0NsZWFyQXNzb2NpYXRlZEZLXCI6W10sXCJsaXN0VG9DbGVhclNlbGZGS1wiOltdLFwicGFnZUxpc3RcIjpbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuinhOWImeWIl+ihqFwiLFwicGF0aFwiOlwiZGF0YVwiLFwicnVsZVwiOlwidmFyIHdyYXB1ID0gKHUpID0+IHtcXG4gICAgaWYoY29uZmlnLm1vZGUgPT0gXFxcIuacrOWcsOi9rOeggVxcXCIpe1xcbiAgICAgICAgcmV0dXJuICdoaWtlcjovL3BhZ2UvcHVzaD91cmw9aGlrZXI6Ly9lbXB0eSMjJyArIGVuY29kZVVSSUNvbXBvbmVudCh1KSArICc/Pz9meXBhZ2UnXFxuICAgIH1cXG4gICAgaWYgKGNvbmZpZy5tb2RlID09IFxcXCLkupHnm5jmsYflvbFcXFwiKSB7XFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPScgKyB1ICsgJz8/ZnlwYWdlJztcXG4gICAgfVxcbiAgICBpZiAoL2FsaXl1bmRyaXZlLy50ZXN0KHUpKSB7XFxuICAgICAgICBjb25zdCBbbGluaywgX3NoYXJlX3B3ZF0gPSB1LnNwbGl0KCc/c2hhcmVfcHdkPScpO1xcbiAgICAgICAgY29uc3QgW19saW5rLCBfZm9sZGVySURdID0gbGluay5zcGxpdCgnL2ZvbGRlci8nKTtcXG4gICAgICAgIGxldCBzaGFyZV9wd2QgPSAoX3NoYXJlX3B3ZCB8fCAnJykuc3BsaXQoJyNuYW1lPScpWzBdIHx8ICcnO1xcbiAgICAgICAgbGV0IHNoYXJlSWQgPSBfbGluay5zcGxpdCgnY29tL3MvJylbMV07XFxuICAgICAgICByZXR1cm4gJ3NtYXJ0ZHJpdmU6Ly9zaGFyZS9icm93c2U/c2hhcmVJZD0nICsgc2hhcmVJZCArICcmc2hhcmVQd2Q9JyArIHNoYXJlX3B3ZDtcXG4gICAgfVxcbiAgICByZXR1cm4gXFxcIndlYjovL1xcXCIgKyB1O1xcbn07XFxubGV0IHJ1bGVzID0gW3tcXG4gICAgbmFtZTogXFxcIuS6keebmOi1hOa6kFxcXCIsXFxuICAgIHBhZ2U6IHRydWUsXFxuICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgIGxldCB1cmwgPSBcXFwiaHR0cHM6Ly9yZXMueXVucGFuLndpbi8/UGFnZUluZGV4PVxcXCIgKyBwYWdlICsgXFxcIiZQYWdlU2l6ZT0xMiZLZXl3b3JkPVxcXCIgKyBzICsgXFxcIiZUeXBlPSZUYWc9XFxcIjtcXG4gICAgICAgIGxldCBodG1sID0gcmVxdWVzdCh1cmwsIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vcmVzLnl1bnBhbi53aW4vXFxcIlxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcblxcbiAgICAgICAgbGV0IGFyciA9IHBkZmEoaHRtbCwgXFxcIm1haW4mJi5jYXJkXFxcIik7XFxuICAgICAgICAvL2xvZyhhcnIpO1xcbiAgICAgICAgbGV0IGQgPSBbXTtcXG5cXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgbGV0IGl0ID0gYXJyW2ldO1xcbiAgICAgICAgICAgIGxldCB1ID0gcGRmaChpdCwgXFxcIi5jYXJkLWxpbmssMSYmb25jbGlja1xcXCIpLm1hdGNoKC9odHRwczpcXFxcL1xcXFwvKHd3d1xcXFwuYWxpeXVuZHJpdmVcXFxcLmNvbVxcXFwvc3xhbHl3cFxcXFwubmV0KVxcXFwvXFxcXHcqL2cpIHx8IFtdO1xcbiAgICAgICAgICAgIHUgPSB1Lmxlbmd0aCA+IDAgPyB1WzBdIDogdXJsO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGl0LCBcXFwiLmNhcmQtdGl0bGUmJlRleHRcXFwiKSxcXG4gICAgICAgICAgICAgICAgcGljX3VybDogcGQoaXQsIFxcXCJpbWcmJnNyY1xcXCIsIHVybCksXFxuICAgICAgICAgICAgICAgIHVybDogd3JhcHUodSksXFxuICAgICAgICAgICAgICAgIGRlc2M6IFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0jZjEzYjY2YT7kupHnm5jotYTmupA8L2ZvbnQ+Jm5ic3A7XFxcIiArIChwZGZoKGl0LCBcXFwiLmNhcmQtdGV4dCwtMSYmVGV4dFxcXCIpKSxcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBkO1xcbiAgICB9XFxufSwge1xcbiAgICBuYW1lOiBcXFwi54yr54u455uY5pCcXFxcIixcXG4gICAgcGFnZTogZmFsc2UsXFxuICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgIGxldCBodG1sID0gcmVxdWVzdChcXFwiaHR0cHM6Ly93d3cuYWxpcGFuc291LmNvbS9zZWFyY2g/az1cXFwiICsgcywge1xcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly93d3cuYWxpcGFuc291LmNvbS9zZWFyY2g/az1cXFwiICsgc1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICAgICAgbGV0IGFyciA9IHBkZmEoaHRtbCwgXFxcIiNhcHAmJmFcXFwiKTtcXG4gICAgICAgIC8vbG9nKGFycik7XFxuICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICBsZXQgaXQgPSBcXFwiPGRpdj5cXFwiICsgYXJyW2ldICsgXFxcIjwvZGl2PlxcXCI7XFxuICAgICAgICAgICAgbGV0IHUgPSBwZGZoKGl0LCBcXFwiYSYmaHJlZlxcXCIpO1xcbiAgICAgICAgICAgIC8vbG9nKHUpO1xcbiAgICAgICAgICAgIGlmICghdS5pbmNsdWRlcyhcXFwiL3MvXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHUgPSBcXFwiaHR0cHM6Ly93d3cuYWxpcGFuc291LmNvbVxcXCIgKyB1LnJlcGxhY2UoXFxcIi9zL1xcXCIsIFxcXCIvY3YvXFxcIik7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoaXQsIFxcXCJ0ZW1wbGF0ZSYmVGV4dFxcXCIpLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQodSkubGF6eVJ1bGUoKHdyYXB1KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoaW5wdXQsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBcXFwibm9fc2hvd19kb25hdGU9MVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogaW5wdXQucmVwbGFjZShcXFwiL2N2L1xcXCIsIFxcXCIvcy9cXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3Q6IGZhbHNlXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBfbGlua3MgPSBodG1sLm1hdGNoKC9odHRwczpcXFxcL1xcXFwvKHd3d1xcXFwuYWxpeXVuZHJpdmVcXFxcLmNvbVxcXFwvc3xhbHl3cFxcXFwubmV0KVxcXFwvXFxcXHcqL2cpIHx8IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgLy9sb2coX2xpbmtzKTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChfbGlua3MubGVuZ3RoID4gMSAmJiBfbGlua3NbMV0ucmVwbGFjZShfbGlua3NbMF0sIFxcXCJcXFwiKS5yZXBsYWNlKC9bYS16QS1aMC05XSsvZywgXFxcIlxcXCIpID09IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXB1KF9saW5rc1sxXSk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKF9saW5rcy5sZW5ndGggPiAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXB1KF9saW5rc1swXSk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dDtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSwgd3JhcHUpLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+54yr54u455uY5pCcPC9mb250PiZuYnNwO1xcXCIgKyBwZGZoKGl0LCBcXFwidGVtcGxhdGUsMSYmVGV4dFxcXCIpLFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIGQ7XFxuICAgIH1cXG59LCB7XFxuICAgIG5hbWU6IFxcXCLmmJPmkJxcXFwiLFxcbiAgICBwYWdlOiB0cnVlLFxcbiAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxuICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoXFxcImh0dHBzOi8veWlzby5mdW4vYXBpL3NlYXJjaD9uYW1lPVxcXCIgKyBzICsgXFxcIiZwYWdlTm89XFxcIiArIHBhZ2UsIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8veWlzby5mdW4vaW5mbz9zZWFyY2hLZXk9XFxcIiArIHNcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICAgIGxldCBhcnIgPSBKU09OLnBhcnNlKGh0bWwpLmRhdGEubGlzdDtcXG4gICAgICAgIGxvZyhhcnIpO1xcbiAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgbGV0IGl0ID0gYXJyW2ldO1xcbiAgICAgICAgICAgIGxldCB1ID0gaXQudXJsO1xcbiAgICAgICAgICAgIGlmICh1ID09IG51bGwgfHwgIXUuaW5jbHVkZXMoXFxcImFsaXl1blxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuKAnOKAnOKAneKAnVxcXCIgKyBpdC5uYW1lLFxcbiAgICAgICAgICAgICAgICB1cmw6IHdyYXB1KHUpLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+5piT5pCcPC9mb250PiZuYnNwO1xcXCIgKyAoaXQuZ210U2hhcmUgfHwgaXQuZ210Q3JlYXRlKSxcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBkO1xcbiAgICB9XFxufSwge1xcbiAgICBuYW1lOiBcXFwi5bCP57q45p2hXFxcIixcXG4gICAgcGFnZTogZmFsc2UsXFxuICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgIGZ1bmN0aW9uIGNhdF9jb2RlKGEpIHtcXG4gICAgICAgICAgICB2YXIgZCwgZSwgYiA9IFtcXFwi5Y2O6K+t55S16KeGXFxcIiwgXFxcIuaXpemfqeeUteinhlxcXCIsIFxcXCLmrKfnvo7nlLXop4ZcXFwiLCBcXFwi5YW25LuW55S16KeGXFxcIiwgXFxcIuWNjuivreeUteW9sVxcXCIsIFxcXCLml6Xpn6nnlLXlvbFcXFwiLCBcXFwi5qyn576O55S15b2xXFxcIiwgXFxcIuWFtuS7lueUteW9sVxcXCIsIFxcXCLljY7or63liqjmvKtcXFwiLCBcXFwi5pel6Z+p5Yqo5ryrXFxcIiwgXFxcIuasp+e+juWKqOa8q1xcXCIsIFxcXCLnuqrlvZXniYdcXFwiLCBcXFwi57u86Im654mHXFxcIiwgXFxcIuaVmeiCsuWfueiurVxcXCIsIFxcXCLlhbbku5bop4bpopFcXFwiLCBcXFwi5Y2O6K+t6Z+z5LmQXFxcIiwgXFxcIuaXpemfqemfs+S5kFxcXCIsIFxcXCLmrKfnvo7pn7PkuZBcXFwiLCBcXFwi5YW25LuW6Z+z5LmQXFxcIiwgXFxcIuWoseS5kOi9r+S7tlxcXCIsIFxcXCLns7vnu5/ova/ku7ZcXFwiLCBcXFwi572R57uc6L2v5Lu2XFxcIiwgXFxcIuWKnuWFrOi9r+S7tlxcXCIsIFxcXCLlhbbku5bova/ku7ZcXFwiLCBcXFwi5ryr55S7XFxcIiwgXFxcIuWwj+ivtFxcXCIsIFxcXCLlh7rniYjkuaZcXFwiLCBcXFwi55+l6K+G5Z+56K6tXFxcIiwgXFxcIuWFtuS7luaWh+aho1xcXCIsIFxcXCLlo4HnurhcXFwiLCBcXFwi5Lq654mpXFxcIiwgXFxcIumjjuaZr1xcXCIsIFxcXCLlhbbku5blm77niYdcXFwiLCBcXFwi5YW25LuWXFxcIl0sXFxuICAgICAgICAgICAgICAgIGMgPSBbXFxcImh5ZHNcXFwiLCBcXFwicmhkc1xcXCIsIFxcXCJvbWRzXFxcIiwgXFxcInF0ZHNcXFwiLCBcXFwiaHlkeVxcXCIsIFxcXCJyaGR5XFxcIiwgXFxcIm9tZHlcXFwiLCBcXFwicXRkeVxcXCIsIFxcXCJoeWRtXFxcIiwgXFxcInJoZG1cXFwiLCBcXFwib21kbVxcXCIsIFxcXCJqbHBcXFwiLCBcXFwienlwXFxcIiwgXFxcImp5cHhcXFwiLCBcXFwicXRzcFxcXCIsIFxcXCJoeXl5XFxcIiwgXFxcInJoeXlcXFwiLCBcXFwib215eVxcXCIsIFxcXCJxdHl5XFxcIiwgXFxcImtmcmpcXFwiLCBcXFwieHRyalxcXCIsIFxcXCJ3bHJqXFxcIiwgXFxcImJncmpcXFwiLCBcXFwicXRyalxcXCIsIFxcXCJtaFxcXCIsIFxcXCJ4c1xcXCIsIFxcXCJjYnNcXFwiLCBcXFwienNweFxcXCIsIFxcXCJxdHdkXFxcIiwgXFxcImJ6XFxcIiwgXFxcInJ3XFxcIiwgXFxcImZqXFxcIiwgXFxcInF0dHBcXFwiLCBcXFwicXRcXFwiXTtcXG4gICAgICAgICAgICBmb3IgKGQgPSAwLCBlID0gYy5sZW5ndGg7IGUgPiBkOyBkKyspXFxuICAgICAgICAgICAgICAgIGlmIChjW2RdID09IGEpIHJldHVybiBiW2RdO1xcbiAgICAgICAgfVxcbiAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgIGxldCBodG1sID0gcG9zdChcXFwiaHR0cHM6Ly9naXRjYWZlLm5ldC90b29sL2FsaXBhcGVyL1xcXCIsIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICdSZWZlcmVyJzogJ2h0dHBzOi8vdS5naXRjYWZlLm5ldC8nXFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICBib2R5OiB7XFxuICAgICAgICAgICAgICAgIGFjdGlvbjogXFxcInNlYXJjaFxcXCIsXFxuICAgICAgICAgICAgICAgIGtleXdvcmQ6IHNcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KVxcbiAgICAgICAgbGV0IGxpc3QgPSBKU09OLnBhcnNlKGh0bWwpO1xcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgbGV0IGl0ID0gbGlzdFtpXVxcbiAgICAgICAgICAgIGxldCB0aXRsZSA9IGl0LnRpdGxlO1xcbiAgICAgICAgICAgIGxldCBtdXJsID0gaXQua2V5XFxuICAgICAgICAgICAgaWYgKHRpdGxlLmluY2x1ZGVzKHMpKSB7XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+5bCP57q45p2hPC9mb250PiZuYnNwO1xcXCIgKyBjYXRfY29kZShpdC5jYXQpLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXM6IGl0LmRlc1xcbiAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogd3JhcHUoJ2h0dHBzOi8vd3d3LmFsaXl1bmRyaXZlLmNvbS9zLycgKyBtdXJsKSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIGQ7XFxuICAgIH1cXG59LCB7XFxuICAgIG5hbWU6IFxcXCLlv4XlupRcXFwiLFxcbiAgICBwYWdlOiB0cnVlLFxcbiAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxuICAgICAgICBsZXQgdXJsID0gXFxcImh0dHBzOi8vY24uYmluZy5jb20vc2VhcmNoP3E9XFxcIiArIHMgKyBcXFwiK2FsaXl1bmRyaXZlJnFzPWRzJmZvcm09UUJSRVxcXCI7XFxuICAgICAgICBpZiAocGFnZSAhPSAxKSB7XFxuICAgICAgICAgICAgdXJsID0gZ2V0TXlWYXIoXFxcImJpbmdcXFwiLCB1cmwpO1xcbiAgICAgICAgfVxcbiAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KHVybCwge1xcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly9jbi5iaW5nLmNvbS9cXFwiLFxcbiAgICAgICAgICAgICAgICAvL1xcXCJYLVJlcXVlc3RlZC1XaXRoXFxcIjogXFxcImNvbS5leGFtcGxlLmhpa2Vydmlld1xcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCJBY2NlcHRcXFwiOiBcXFwidGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksaW1hZ2UvYXZpZixpbWFnZS93ZWJwLGltYWdlL2FwbmcsKi8qO3E9MC44LGFwcGxpY2F0aW9uL3NpZ25lZC1leGNoYW5nZTt2PWIzO3E9MC45XFxcIlxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICAgICAgbGV0IGFyciA9IHBkZmEoaHRtbCwgXFxcImJvZHkmJmFcXFwiKTtcXG4gICAgICAgIC8vbG9nKGFycik7XFxuICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICBsZXQgaXQgPSBhcnJbaV07XFxuICAgICAgICAgICAgbGV0IHUgPSBwZChpdCwgXFxcImEmJmhyZWZcXFwiLCB1cmwpO1xcbiAgICAgICAgICAgIGxldCB0ID0gcGRmaChpdCwgXFxcImEmJlRleHRcXFwiKTtcXG4gICAgICAgICAgICBpZiAoaXQuaW5jbHVkZXMoXFxcIk5leHQgcGFnZVxcXCIpIHx8IGl0LmluY2x1ZGVzKFxcXCLkuIvkuIDpobVcXFwiKSkge1xcbiAgICAgICAgICAgICAgICBsZXQgdTIgPSBwZChpdCwgXFxcImEmJmhyZWZcXFwiLCB1cmwpO1xcbiAgICAgICAgICAgICAgICBsb2coXFxcIm5leHQgcGFnZVxcXCIpO1xcbiAgICAgICAgICAgICAgICBsb2codTIpO1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiYmluZ1xcXCIsIHUyKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKHUgPT0gbnVsbCB8fCB0ID09IG51bGwgfHwgIWl0LmluY2x1ZGVzKHMpKSB7XFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAoIWl0LmluY2x1ZGVzKFxcXCLnvZHnm5hcXFwiKSAmJiAhaXQuaW5jbHVkZXMoXFxcIuS6keebmFxcXCIpICYmXFxuICAgICAgICAgICAgICAgICFpdC5pbmNsdWRlcyhcXFwiYWxpeXVuZHJpdmVcXFwiKSAmJiAhaXQuaW5jbHVkZXMoXFxcInl1bnBhblxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAodS5zdGFydHNXaXRoKFxcXCJodHRwczovL2NuLmJpbmcuY29tL1xcXCIpKSB7XFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBsZXQgZG9tID0gZ2V0SG9tZSh1KS5yZXBsYWNlKFxcXCJodHRwOi8vXFxcIiwgXFxcIlxcXCIpLnJlcGxhY2UoXFxcImh0dHBzOi8vXFxcIiwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgIGxldCBfbGlua3MgPSB0Lm1hdGNoKC9odHRwczpcXFxcL1xcXFwvKHd3d1xcXFwuYWxpeXVuZHJpdmVcXFxcLmNvbVxcXFwvc3xhbHl3cFxcXFwubmV0KVxcXFwvXFxcXHcqL2cpIHx8IFtdO1xcbiAgICAgICAgICAgIGxvZyhfbGlua3MpO1xcbiAgICAgICAgICAgIGxldCBjID0gbnVsbDtcXG4gICAgICAgICAgICBpZiAoX2xpbmtzLmxlbmd0aCA+IDEgJiYgX2xpbmtzWzFdLnJlcGxhY2UoX2xpbmtzWzBdLCBcXFwiXFxcIikucmVwbGFjZSgvW2EtekEtWjAtOV0rL2csIFxcXCJcXFwiKSA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICBjID0gd3JhcHUoX2xpbmtzWzFdKTtcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKF9saW5rcy5sZW5ndGggPiAwKSB7XFxuICAgICAgICAgICAgICAgIGMgPSB3cmFwdShfbGlua3NbMF0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogdCxcXG4gICAgICAgICAgICAgICAgZGVzYzogXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPuW/heW6lDwvZm9udD4mbmJzcDtcXFwiICsgZG9tLFxcbiAgICAgICAgICAgICAgICB1cmw6IGMgIT0gbnVsbCA/IGMgOiAkKHUpLmxhenlSdWxlKCh3cmFwdSwgbW9kZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBfbGlua3MgPSBodG1sLm1hdGNoKC9odHRwczpcXFxcL1xcXFwvKHd3d1xcXFwuYWxpeXVuZHJpdmVcXFxcLmNvbVxcXFwvc3xhbHl3cFxcXFwubmV0KVxcXFwvXFxcXHcqL2cpIHx8IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKF9saW5rcyk7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoX2xpbmtzLmxlbmd0aCA+IDEgJiYgX2xpbmtzWzFdLnJlcGxhY2UoX2xpbmtzWzBdLCBcXFwiXFxcIikucmVwbGFjZSgvW2EtekEtWjAtOV0rL2csIFxcXCJcXFwiKSA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwdShfbGlua3NbMV0pO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChfbGlua3MubGVuZ3RoID4gMCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwdShfbGlua3NbMF0pO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcnVsZSA9IE1ZX1JVTEUudGl0bGU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL3BhZ2UveXNmeD9ydWxlPVxcXCIgKyBydWxlICsgXFxcIiZyPVxcXCIgKyBydWxlICsgXFxcIiZtb2RlPVxcXCIgKyBtb2RlICsgXFxcIiMjXFxcIiArIGlucHV0O1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9LCB3cmFwdSwgY29uZmlnLm1vZGUpXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gZDtcXG4gICAgfVxcbn1dO1xcblxcbmxldCBjY29mID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvY2NvZicpXFxucnVsZXMucHVzaChjY29mKVxcbi8v5bm25Y+R6KeE5YiZ5pWwXFxubGV0IHNpemUgPSAxMDtcXG5cXG4kLmV4cG9ydHMgPSBmdW5jdGlvbihwYWdlLCBydWxlKSB7XFxuICAgIGlmICghcGFnZSAmJiAhcnVsZSkge1xcbiAgICAgICAgcmV0dXJuIHJ1bGVzLm1hcChpdCA9PiBpdC5uYW1lKTtcXG4gICAgfVxcbiAgICBpZiAocnVsZSAhPSBudWxsKSB7XFxuICAgICAgICBpZiAocGFnZSAhPSBudWxsICYmIHBhZ2UgPiAxKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHJ1bGVzLmZpbHRlcihpID0+IGkubmFtZSA9PSBydWxlICYmIGkucGFnZSk7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gcnVsZXMuZmlsdGVyKGkgPT4gaS5uYW1lID09IHJ1bGUpO1xcbiAgICB9XFxuICAgIGxldCBzdGFydCA9IChwYWdlIC0gMSkgKiBzaXplO1xcbiAgICBpZiAocnVsZXMubGVuZ3RoIDwgc3RhcnQgKyAxKSB7XFxuICAgICAgICByZXR1cm4gW107XFxuICAgIH1cXG4gICAgbGV0IGxlbiA9IHNpemU7XFxuICAgIGlmIChydWxlcy5sZW5ndGggPCBwYWdlICogc2l6ZSkge1xcbiAgICAgICAgbGVuID0gcnVsZXMubGVuZ3RoIC0gc3RhcnRcXG4gICAgfVxcbiAgICByZXR1cm4gcnVsZXMuc2xpY2Uoc3RhcnQsIHN0YXJ0ICsgbGVuKTtcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmkJzntKJcIixcInBhdGhcIjpcInNvdVwiLFwicnVsZVwiOlwibGV0IHIgPSBnZXRJdGVtKFxcXCJyXFxcIiwgXFxcIlxcXCIpO1xcbmlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgbGV0IHIxID0gZmV0Y2goXFxcImhpa2VyOi8vaG9tZUDkupHnm5jmsYflvbFcXFwiKTtcXG4gICAgaWYgKCFyMSB8fCByMS5sZW5ndGggPD0gNSkge1xcbiAgICAgICAgbGV0IHJ1ID0gJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCLmtbfpmJTop4bnlYzop4TliJnliIbkuqvvvIzlvZPliY3liIbkuqvnmoTmmK/vvJrlsI/nqIvluo/vv6Vob21lX3J1bGVfdjLvv6ViYXNlNjQ6Ly9A5LqR55uY5rGH5b2xQGV5SnNZWE4wWDJOb1lYQjBaWEpmY25Wc1pTSTZJaUlzSW5ScGRHeGxJam9pNUxxUjU1dVk1ckdINWIyeElpd2lZWFYwYUc5eUlqb2lUWEpHYkhraUxDSjFjbXdpT2lKb2FXdGxjam92TDJWdGNIUjVKQ1FrWm5sd1lXZGxJaXdpZG1WeWMybHZiaUk2Tml3aVkyOXNYM1I1Y0dVaU9pSjBaWGgwWHpFaUxDSmpiR0Z6YzE5dVlXMWxJam9pSWl3aWRIbHdaU0k2SW1Gc2JDSXNJbU5zWVhOelgzVnliQ0k2SWlJc0ltRnlaV0ZmYm1GdFpTSTZJaUlzSW1GeVpXRmZkWEpzSWpvaUlpd2ljMjl5ZEY5dVlXMWxJam9pSWl3aWVXVmhjbDl1WVcxbElqb2lJaXdpYzI5eWRGOTFjbXdpT2lJaUxDSjVaV0Z5WDNWeWJDSTZJaUlzSW1acGJtUmZjblZzWlNJNkltcHpPbHh1WlhaaGJDaG1aWFJqYUNnbmFHbHJaWEk2THk5bWFXeGxjeTl5ZFd4bGN5OXBZM2t2WVd4cExtcHpKeWtwTzF4dVlXeHBMbWh2YldWUVlXZGxLQ2s3SWl3aWMyVmhjbU5vWDNWeWJDSTZJbWhwYTJWeU9pOHZaVzF3ZEhra0pDUXFLaVFrSkdaNWNHRm5aU1FrSkNJc0ltZHliM1Z3SWpvaTRwR2c1NzJSNTV1WUlpd2ljMlZoY21Ob1JtbHVaQ0k2SW1wek9seHVaWFpoYkNobVpYUmphQ2duYUdsclpYSTZMeTltYVd4bGN5OXlkV3hsY3k5cFkza3ZZV3hwTG1wekp5a3BPMXh1WVd4cExuTmxZWEpqYUZCaFoyVW9kSEoxWlNrN1hHNGlMQ0prWlhSaGFXeGZZMjlzWDNSNWNHVWlPaUp0YjNacFpWOHhJaXdpWkdWMFlXbHNYMlpwYm1SZmNuVnNaU0k2SW1wek9seHVaWFpoYkNobVpYUmphQ2duYUdsclpYSTZMeTltYVd4bGN5OXlkV3hsY3k5cFkza3ZZV3hwTG1wekp5a3BPMXh1WVd4cExtUmxkR0ZwYkZCaFoyVW9LVHNpTENKelpHVjBZV2xzWDJOdmJGOTBlWEJsSWpvaWJXOTJhV1ZmTVNJc0luTmtaWFJoYVd4ZlptbHVaRjl5ZFd4bElqb2lJaXdpZFdFaU9pSnRiMkpwYkdVaUxDSndjbVZTZFd4bElqb2lkbUZ5SUdGc2FXcHpJRDBnWm1WMFkyaERZV05vWlNnbmFIUjBjSE02THk5bmFYUmxaUzVqYjIwdlpteDVNVE01Tnk5b2FXdGxjaTFwWTNrdmNtRjNMMjFoYzNSbGNpOWhiR2t1YW5NbktUdGNibWxtSUNnaFlXeHBhbk1nZkh3Z0lXRnNhV3B6TG1sdVkyeDFaR1Z6S0NkaGJHa3VKeWtwSUh0Y2JpQWdJQ0JoYkdscWN5QTlJR1psZEdOb1EyRmphR1VvSjJoMGRIQnpPaTh2WTJSdUxtcHpaR1ZzYVhaeUxtNWxkQzluYUM5bWJIa3hNemszTDJocGEyVnlMV2xqZVM5aGJHa3Vhbk1uS1Z4dWZWeHVhV1lnS0NGaGJHbHFjeUI4ZkNBaFlXeHBhbk11YVc1amJIVmtaWE1vSjJGc2FTNG5LU2tnZTF4dUlDQWdJR0ZzYVdweklEMGdabVYwWTJoRFlXTm9aU2duYUhSMGNEb3ZMMnhtYVdONUxtTnZiVG96TURBd01DOXRjbVpzZVM5b2FXdGxjaTFwWTNrdmNtRjNMMjFoYzNSbGNpOWhiR2t1YW5NbktWeHVmVnh1YVdZZ0tHRnNhV3B6S1NCN1hHNGdJQ0FnZDNKcGRHVkdhV3hsS0Z3aWFHbHJaWEk2THk5bWFXeGxjeTl5ZFd4bGN5OXBZM2t2WVd4cExtcHpYQ0lzSUdGc2FXcHpLVHRjYmlBZ0lDQmxkbUZzS0dGc2FXcHpLVHRjYmlBZ0lDQmhiR2t1Y0hKbFVuVnNaU2dwTzF4dWZTSXNJbkJoWjJWeklqb2lXM3RjSW1OdmJGOTBlWEJsWENJNlhDSnRiM1pwWlY4elhDSXNYQ0p1WVcxbFhDSTZYQ0xudlpIbm01am9yNmJtZzRWY0lpeGNJbkJoZEdoY0lqcGNJbVJsZEdGcGJGd2lMRndpY25Wc1pWd2lPbHdpYW5NNlhGeHVaWFpoYkNobVpYUmphQ2duYUdsclpYSTZMeTltYVd4bGN5OXlkV3hsY3k5cFkza3ZZV3hwTG1wekp5a3BPMXhjYm1Gc2FTNXBibWwwUTI5dVptbG5LQ2s3WEZ4dVlXeHBMbUZzYVZKMWJHVW9LVHRjSW4wc2Uxd2lZMjlzWDNSNWNHVmNJanBjSW0xdmRtbGxYekZmYkdWbWRGOXdhV05jSWl4Y0ltNWhiV1ZjSWpwY0l1aTFoT2E2a09lOWtlbWh0ZWl2cHVhRGhWd2lMRndpY0dGMGFGd2lPbHdpYzJsMFpTMWtaWFJoYVd4Y0lpeGNJbkoxYkdWY0lqcGNJbXB6T2x4Y2JtVjJZV3dvWm1WMFkyZ29KMmhwYTJWeU9pOHZabWxzWlhNdmNuVnNaWE12YVdONUwyRnNhUzVxY3ljcEtUdGNYRzVoYkdrdVpHVjBZV2xzVUdGblpTZ3BPMXdpZlN4N1hDSmpiMnhmZEhsd1pWd2lPbHdpYlc5MmFXVmZNMXdpTEZ3aWJtRnRaVndpT2x3aTVMaXE1THE2NTcyUjU1dVk2SyttNW9PRlhDSXNYQ0p3WVhSb1hDSTZYQ0prY21sMlpWd2lMRndpY25Wc1pWd2lPbHdpYW5NNlhGeHVaWFpoYkNobVpYUmphQ2duYUdsclpYSTZMeTltYVd4bGN5OXlkV3hsY3k5cFkza3ZZV3hwTG1wekp5a3BPMXhjYm1Gc2FTNXBibWwwUTI5dVptbG5LQ2s3WEZ4dVlXeHBMbTE1UVd4cFVuVnNaU2dwTzF3aWZWMGlMQ0pwWTI5dUlqb2lhSFIwY0hNNkx5OW5hWFJsWlM1amIyMHZabXg1TVRNNU55OW9hV3RsY2kxcFkza3ZjbUYzTDIxaGMzUmxjaTloYkdsNWRXNHVjRzVuSWl3aWNISnZlSGtpT2lJaWZRPT1cXFwiXFxuICAgICAgICB9KTtcXG4gICAgICAgIGNvbmZpcm0oe1xcbiAgICAgICAgICAgIHRpdGxlOiBNWV9SVUxFLnRpdGxlICsgJ+aPkOekuicsXFxuICAgICAgICAgICAgY29udGVudDogJ+acrOinhOWImeS+nei1luS6keebmOaxh+W9seinhOWIme+8jOeCueWHu+S4i+mdoueahOehruWumuaMiemSruWvvOWFpe+8jOazqOaEj+WvvOWFpeWQjuS4gOWumuimgeWcqOS6keebmOaxh+W9seeZu+W9lemYv+mHjOS6keebmOi0puWPt++8jOWQpuWImeS4jeiDveeUqCcsXFxuICAgICAgICAgICAgY29uZmlybTogcnUsXFxuICAgICAgICAgICAgY2FuY2VsOiBydVxcbiAgICAgICAgfSlcXG4gICAgfVxcbiAgICBhZGRMaXN0ZW5lcihcXFwib25DbG9zZVxcXCIsICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgY2xlYXJNeVZhcihcXFwic1xcXCIpO1xcbiAgICB9KSk7XFxuICAgIGxldCB0aXAgPSBcXFwi5LqR55uY5pCc57Si5ZCbIOajgOe0ouWKn+iDveeUseWvueW6lOe9keermeaPkOS+m++8jOacrOinhOWImeS4jeaPkOS+m+S7u+S9leWGheWuuVxcXCI7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogdGlwLFxcbiAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKCh0aXApID0+IHtcXG4gICAgICAgICAgICBjb25maXJtKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLkvb/nlKjor7TmmI5cXFwiLFxcbiAgICAgICAgICAgICAgICBjb250ZW50OiB0aXAgKyBcXFwi77yM5pys6KeE5YiZ5Luj56CB5a6M5YWo5byA5rqQ77yM5LuF5L6b5a2m5Lmg5ZKM56CU56m277yb54K55Ye75LiL5pa556Gu5a6a5oyJ6ZKu6Lez6L2s5LqR55uY5rGH5b2x5bCP56iL5bqPXFxcIixcXG4gICAgICAgICAgICAgICAgY29uZmlybTogXFxcIidoaWtlcjovL2hvbWVA5LqR55uY5rGH5b2xJ1xcXCJcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICB9LCB0aXApLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJpY29uXzJfcm91bmRcXFwiLFxcbiAgICAgICAgZGVzYzogXFxcIlxcXCIsXFxuICAgICAgICBwaWNfdXJsOiBcXFwiaGlrZXI6Ly9pbWFnZXMvaWNvbjJcXFwiXFxuICAgIH0pO1xcbiAgICBsZXQgZG1vZGUgPSBnZXRJdGVtKFxcXCJkbW9kZVxcXCIsIFxcXCLkupHnm5jmsYflvbFcXFwiKTtcXG4gICAgaW5pdENvbmZpZyh7XFxuICAgICAgICBtb2RlOiBkbW9kZVxcbiAgICB9KTtcXG5cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi5qih5byP77yaXFxcIiArIGRtb2RlLFxcbiAgICAgICAgdXJsOiBcXFwic2VsZWN0Oi8vXFxcIiArIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIumAieaLqeaooeW8j1xcXCIsXFxuICAgICAgICAgICAgb3B0aW9uczogW1xcXCLkupHnm5jmsYflvbFcXFwiLCBcXFwi5pys5Zyw6L2s56CBXFxcIiwgXFxcIuWumOaWuUFQUFxcXCJdLFxcbiAgICAgICAgICAgIGNvbDogMSxcXG4gICAgICAgICAgICBqczogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcImRtb2RlXFxcIiwgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT0gXFxcIuWumOaWuUFQUFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/kv67mlLnmiJDlip/vvIzor7fnoa7kv53miYvmnLrmnInlronoo4XpmL/ph4zkupHnm5jlrpjmlrlBUFBcXFwiO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+S/ruaUueaIkOWKn++8jOazqOaEj+imgeWcqOS6keebmOaxh+W9seiuvue9rumHjOmdoueZu+W9lei0puWPt1xcXCJcXG4gICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogXFxcImljb25fMl9yb3VuZFxcXCIsXFxuICAgICAgICBkZXNjOiBcXFwiXFxcIixcXG4gICAgICAgIHBpY191cmw6IFxcXCJoaWtlcjovL2ltYWdlcy9pY29uMVxcXCJcXG4gICAgfSk7XFxuXFxuXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+aQnOe0oicsXFxuICAgICAgICBkZXNjOiAn6K+36L6T5YWl5YWz6ZSu6K+NJyxcXG4gICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcbiAgICAgICAgdXJsOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICBwdXRNeVZhcigncycsIGlucHV0KTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgIH0pLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldE15VmFyKCdzJywgJycpXFxuICAgICAgICB9XFxuICAgIH0pO1xcbiAgICBsZXQgcnVsZXMgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9kYXRhXFxcIikoKTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwiXFxcIiA9PSByID8gXFxcIuKAnOKAnOWFqOmDqOKAneKAnVxcXCIgOiBcXFwi5YWo6YOoXFxcIixcXG4gICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgY2xlYXJJdGVtKFxcXCJyXFxcIik7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICB9KSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCIsXFxuICAgICAgICBkZXNjOiBcXFwiXFxcIixcXG4gICAgICAgIHBpY191cmw6IFxcXCJcXFwiXFxuICAgIH0pO1xcbiAgICBmb3IgKGxldCBpdCBvZiBydWxlcykge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogaXQgPT0gciA/IFxcXCLigJzigJxcXFwiICsgaXQgKyBcXFwi4oCd4oCdXFxcIiA6IGl0LFxcbiAgICAgICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgocikgPT4ge1xcbiAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXCJyXFxcIiwgcik7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICB9LCBpdCksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIixcXG4gICAgICAgICAgICBkZXNjOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBwaWNfdXJsOiBcXFwiXFxcIlxcbiAgICAgICAgfSk7XFxuICAgIH1cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIGNvbF90eXBlOiAnbGluZScsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGlkOiAneXBqLWwnXFxuICAgICAgICB9XFxuICAgIH0pO1xcbn1cXG5sZXQgcyA9IGdldE15VmFyKCdzJywgJycpO1xcbmlmIChzICE9IFxcXCJcXFwiKSB7XFxuICAgIGxldCBwID0gTVlfUEFHRTtcXG4gICAgbGV0IGRhdGEgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9kYXRhXFxcIikocCwgciAhPSBcXFwiXFxcIiA/IHIgOiBudWxsKTtcXG5cXG4gICAgbGV0IHBhZ2VpZCA9IFxcXCJ5cGotcGFnZVxcXCIgKyBwO1xcbiAgICBpZiAoZGF0YS5sZW5ndGggPiAwKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi5Yqg6L2956ysXFxcIiArIHAgKyBcXFwi6aG15Lit77yM6L+b5bqm77yaMS9cXFwiICsgZGF0YS5sZW5ndGgsXFxuICAgICAgICAgICAgdXJsOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIHBpY191cmw6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOiBwYWdlaWRcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICBzZXRSZXN1bHQoZCk7XFxuICAgIGxvZyhkYXRhLmxlbmd0aCk7XFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDApIHtcXG4gICAgICAgIC8v5aSa57q/56iL5Yqg6L29ICAgICAgICBcXG4gICAgICAgIGxldCByZWFsUGFnZSA9IFxcXCJcXFwiID09IHIgPyAxIDogcDtcXG4gICAgICAgIGxldCB0YXNrcyA9IGRhdGEubWFwKGl0ID0+IHtcXG4gICAgICAgICAgICByZXR1cm4ge1xcbiAgICAgICAgICAgICAgICBmdW5jOiBmdW5jdGlvbihydWxlKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcnVsZS5maW5kKHMsIHJlYWxQYWdlKTtcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgcGFyYW06IGl0LFxcbiAgICAgICAgICAgICAgICBpZDogXFxcInJ1bGVAXFxcIiArIGl0Lm5hbWVcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG5cXG4gICAgICAgIGJhdGNoRXhlY3V0ZSh0YXNrcywge1xcbiAgICAgICAgICAgIGZ1bmM6IGZ1bmN0aW9uKHBhcmFtLCBpZCwgZXJyb3IsIHJlc3VsdCkge1xcbiAgICAgICAgICAgICAgICAvL2xvZyhcXFwibGlzdGVuZXI6IFxcXCIgKyAocmVzdWx0IHx8IFtdKS5sZW5ndGgpXFxuICAgICAgICAgICAgICAgIHBhcmFtLmkgPSBwYXJhbS5pICsgMTtcXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpdCBvZiByZXN1bHQpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0uaiA9IHBhcmFtLmogKyAxO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRJdGVtQmVmb3JlKHBhZ2VpZCwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0LnRpdGxlLmluY2x1ZGVzKFxcXCLigJzigJzigJ3igJ1cXFwiKSA/IGl0LnRpdGxlIDogXFxcIuKAnOKAnOKAneKAnVxcXCIgKyBpdC50aXRsZS5yZXBsYWNlKG5ldyBSZWdFeHAoXFxcIjxlbT58PC9lbT5cXFwiLCBcXFwiZ1xcXCIpLCBcXFwiXFxcIikucmVwbGFjZShuZXcgUmVnRXhwKHMsIFxcXCJnXFxcIiksIFxcXCI8c3Ryb25nPjxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6ICMxRTkwRkZcXFxcXFxcIj5cXFwiICsgcyArIFxcXCI8L3NwYW4+PC9zdHJvbmc+XFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBpdC5kZXNjLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBpdC51cmwsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBpdC5waWNfdXJsLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IGl0LnBpY191cmwgPyAnbW92aWVfMV92ZXJ0aWNhbF9waWMnIDogXFxcInRleHRfMVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcXFwiX19hcHBcXFwiICsgTVlfUEFHRSArIFxcXCJAXFxcIiArIHBhcmFtLmosXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5oZXJpdFRpdGxlOiBmYWxzZVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XFxuXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtLmkgPj0gcGFyYW0uYWxsKSB7XFxuICAgICAgICAgICAgICAgICAgICBkZWxldGVJdGVtKHBhZ2VpZClcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi5Yqg6L2956ysXFxcIiArIE1ZX1BBR0UgKyBcXFwi6aG15Lit77yM6L+b5bqm77yaXFxcIiArIChwYXJhbS5pICsgMSkgKyBcXFwiL1xcXCIgKyBwYXJhbS5hbGwsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBpY191cmw6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBwYWdlaWRcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICBwYXJhbToge1xcbiAgICAgICAgICAgICAgICBhbGw6IGRhdGEubGVuZ3RoLFxcbiAgICAgICAgICAgICAgICBpOiAwLFxcbiAgICAgICAgICAgICAgICBqOiAtMVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgIH1cXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmkJzntKLpobXpnaJcIixcInBhdGhcIjpcInNvdXBcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxuaWYgKE1ZX1BBUkFNUy5rZXkpIHtcXG4gICAgcHV0TXlWYXIoXFxcInNcXFwiLCBNWV9QQVJBTVMua2V5KTtcXG59XFxuZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXCJoaWtlcjovL3BhZ2Uvc291XFxcIikpLnJ1bGUpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwiQ0NPRlwiLFwicGF0aFwiOlwiY2NvZlwiLFwicnVsZVwiOlwidmFyIHdyYXB1ID0gKHUpID0+IHtcXG4gICAgaWYoY29uZmlnLm1vZGUgPT0gXFxcIuacrOWcsOi9rOeggVxcXCIpe1xcbiAgICAgICAgcmV0dXJuICdoaWtlcjovL3BhZ2UvcHVzaD91cmw9aGlrZXI6Ly9lbXB0eSMjJyArIGVuY29kZVVSSUNvbXBvbmVudCh1KSArICc/Pz9meXBhZ2UnXFxuICAgIH1cXG4gICAgaWYgKGNvbmZpZy5tb2RlID09IFxcXCLkupHnm5jmsYflvbFcXFwiKSB7XFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPScgKyB1ICsgJz8/ZnlwYWdlJztcXG4gICAgfVxcbiAgICBpZiAoL2FsaXl1bmRyaXZlLy50ZXN0KHUpKSB7XFxuICAgICAgICBjb25zdCBbbGluaywgX3NoYXJlX3B3ZF0gPSB1LnNwbGl0KCc/c2hhcmVfcHdkPScpO1xcbiAgICAgICAgY29uc3QgW19saW5rLCBfZm9sZGVySURdID0gbGluay5zcGxpdCgnL2ZvbGRlci8nKTtcXG4gICAgICAgIGxldCBzaGFyZV9wd2QgPSAoX3NoYXJlX3B3ZCB8fCAnJykuc3BsaXQoJyNuYW1lPScpWzBdIHx8ICcnO1xcbiAgICAgICAgbGV0IHNoYXJlSWQgPSBfbGluay5zcGxpdCgnY29tL3MvJylbMV07XFxuICAgICAgICByZXR1cm4gJ3NtYXJ0ZHJpdmU6Ly9zaGFyZS9icm93c2U/c2hhcmVJZD0nICsgc2hhcmVJZCArICcmc2hhcmVQd2Q9JyArIHNoYXJlX3B3ZDtcXG4gICAgfVxcbiAgICByZXR1cm4gXFxcIndlYjovL1xcXCIgKyB1O1xcbn07XFxuJC5leHBvcnRzID0ge1xcbiAgICBuYW1lOiAnQ0NPRicsXFxuICAgIHBhZ2U6IHRydWUsXFxuICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgIGxldCBkID0gW11cXG4gICAgICAgIGNvbnN0IHtcXG4gICAgICAgICAgICBieXRlc1RvU2l6ZSxcXG4gICAgICAgICAgICBjb2xvclxcbiAgICAgICAgfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL3Rvb2xzJyk7XFxuICAgICAgICBsZXQgaHRtbCA9IGZldGNoKCdodHRwczovL3Bhbi5jY29mLmNjL2FwaS9zZWFyY2gnLCB7XFxuICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICBcXFwiY29udGVudC10eXBlXFxcIjogJ2FwcGxpY2F0aW9uL2pzb24nLFxcbiAgICAgICAgICAgICAgICAnUmVmZXJlcic6ICdodHRwczovL3Bhbi5jY29mLmNjL3NlYXJjaD9rZXl3b3JkPScgKyBzXFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICBib2R5OiB7XFxuICAgICAgICAgICAgICAgIFxcXCJwYWdlU2l6ZVxcXCI6IDIwLFxcbiAgICAgICAgICAgICAgICBcXFwicGFnZU51bVxcXCI6IHBhZ2UsXFxuICAgICAgICAgICAgICAgIFxcXCJrZXl3b3JkXFxcIjogcyxcXG4gICAgICAgICAgICAgICAgXFxcImZyb21Nb2JpbGVcXFwiOiB0cnVlXFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICAgICAgfSlcXG4gICAgICAgIGxldCBsaXN0ID0gSlNPTi5wYXJzZShodG1sKVxcbiAgICAgICAgICAgIC5kYXRhLnJvd3NcXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgIGxldCBpdCA9IGxpc3RbaV1cXG4gICAgICAgICAgICBsZXQgdGl0bGUgPSBpdC5maWxlTmFtZVxcbiAgICAgICAgICAgIGxldCBtdXJsID0gaXQudXJsXFxuICAgICAgICAgICAgbGV0IHR5cGUgPSBpdC50eXBlLnJlcGxhY2UoL2ZvbGRlci8sICfmlofku7blpLknKS5yZXBsYWNlKC9maWxlLywgJ+aWh+S7ticpXFxuICAgICAgICAgICAgaWYgKHRpdGxlLmluY2x1ZGVzKHMpKSB7XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiAn4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+Q0NPRjwvZm9udD4mbmJzcDsnICsgJ+aWh+S7tuexu+Wei++8micgKyB0eXBlICsgJ++8jOaWh+S7tuWkp+Wwj++8micgKyBieXRlc1RvU2l6ZShpdC5zaXplKSxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogd3JhcHUobXVybClcXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gZFxcbiAgICB9XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5bel5YW3XCIsXCJwYXRoXCI6XCJ0b29sc1wiLFwicnVsZVwiOlwiZnVuY3Rpb24gYnl0ZXNUb1NpemUoc2l6ZSkge1xcbiAgICBpZiAoc2l6ZSA8IDAuMSAqIDEwMjQpIHtcXG4gICAgICAgIC8v5bCP5LqOMC4xS0LvvIzliJnovazljJbmiJBCXFxuICAgICAgICBzaXplID0gc2l6ZS50b0ZpeGVkKDIpICsgXFxcIkJcXFwiO1xcbiAgICB9IGVsc2UgaWYgKHNpemUgPCAwLjEgKiAxMDI0ICogMTAyNCkge1xcbiAgICAgICAgLy8g5bCP5LqOMC4xTULvvIzliJnovazljJbmiJBLQlxcbiAgICAgICAgc2l6ZSA9IChzaXplIC8gMTAyNCkudG9GaXhlZCgyKSArIFxcXCJLQlxcXCI7XFxuICAgIH0gZWxzZSBpZiAoc2l6ZSA8IDAuMSAqIDEwMjQgKiAxMDI0ICogMTAyNCkge1xcbiAgICAgICAgLy8g5bCP5LqOMC4xR0LvvIzliJnovazljJbmiJBNQlxcbiAgICAgICAgc2l6ZSA9IChzaXplIC8gKDEwMjQgKiAxMDI0KSkudG9GaXhlZCgyKSArIFxcXCJNQlxcXCI7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICAvLyDlhbbku5bovazljJbmiJBHQlxcbiAgICAgICAgc2l6ZSA9IChzaXplIC8gKDEwMjQgKiAxMDI0ICogMTAyNCkpLnRvRml4ZWQoMikgKyBcXFwiR0JcXFwiO1xcbiAgICB9XFxuICAgIC8vIOi9rOaIkOWtl+espuS4slxcbiAgICBsZXQgc2l6ZVN0ciA9IHNpemUgKyBcXFwiXFxcIixcXG4gICAgICAgIC8vIOiOt+WPluWwj+aVsOeCueWkhOeahOe0ouW8lVxcbiAgICAgICAgaW5kZXggPSBzaXplU3RyLmluZGV4T2YoXFxcIi5cXFwiKSxcXG4gICAgICAgIC8vIOiOt+WPluWwj+aVsOeCueWQjuS4pOS9jeeahOWAvFxcbiAgICAgICAgZG91ID0gc2l6ZVN0ci5zdWJzdHIoaW5kZXggKyAxLCAyKTtcXG4gICAgLy8g5Yik5pat5ZCO5Lik5L2N5piv5ZCm5Li6MDDvvIzlpoLmnpzmmK/liJnliKDpmaQwMFxcbiAgICBpZiAoZG91ID09PSBcXFwiMDBcXFwiKSByZXR1cm4gc2l6ZVN0ci5zdWJzdHJpbmcoMCwgaW5kZXgpICsgc2l6ZVN0ci5zdWJzdHIoaW5kZXggKyAzLCAyKTtcXG4gICAgcmV0dXJuIHNpemU7XFxufVxcbiQuZXhwb3J0cy5ieXRlc1RvU2l6ZSA9IGJ5dGVzVG9TaXplO1xcbiQuZXhwb3J0cy5jb2xvciA9IGZ1bmN0aW9uKHRleHQsIGNvbG9yKSB7XFxuICAgIHRleHQgKz0gXFxcIlxcXCI7XFxuICAgIGlmICh0ZXh0LmluZGV4T2YoXFxcIuKAnOKAnOKAneKAnVxcXCIpID09PSAwKSB7XFxuICAgICAgICB0ZXh0LnJlcGxhY2UoXFxcIuKAnOKAnOKAneKAnVxcXCIsIFxcXCJcXFwiKTtcXG4gICAgfVxcbiAgICByZXR1cm4gXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSdcXFwiICsgY29sb3IgKyBcXFwiJz5cXFwiICsgdGV4dCArIFxcXCI8L2ZvbnQ+XFxcIjtcXG59XFxuXFxuJC5leHBvcnRzLnNsZWVwID0gZnVuY3Rpb24odGltZW91dCkge1xcbiAgICBqYXZhLmxhbmcuVGhyZWFkLnNsZWVwKHRpbWVvdXQpO1xcbn1cXG5cXG5mdW5jdGlvbiBodG1sVGFnKHRhZywgdGV4dCkge1xcbiAgICB0ZXh0ICs9IFxcXCJcXFwiO1xcbiAgICBpZiAodGV4dC5pbmRleE9mKFxcXCLigJzigJzigJ3igJ1cXFwiKSA9PT0gMCkge1xcbiAgICAgICAgdGV4dC5yZXBsYWNlKFxcXCLigJzigJzigJ3igJ1cXFwiLCBcXFwiXFxcIik7XFxuICAgIH1cXG4gICAgcmV0dXJuIFxcXCLigJzigJzigJ3igJ1cXFwiICsgXFxcIjxcXFwiICsgdGFnICsgXFxcIj5cXFwiICsgdGV4dCArIFxcXCI8L1xcXCIgKyB0YWcgKyBcXFwiPlxcXCI7XFxuXFxufVxcbiQuZXhwb3J0cy5odG1sVGFnID0gaHRtbFRhZztcXG4kLmV4cG9ydHMuc21hbGwgPSBmdW5jdGlvbih0ZXh0KSB7XFxuICAgIHJldHVybiBodG1sVGFnKFxcXCJzbWFsbFxcXCIsIHRleHQpO1xcbn1cXG5cXG5mdW5jdGlvbiBnZXRUaW1lKGZpbGUsaXNTdGFuZGFyZCkge1xcbiAgICBpc1N0YW5kYXJkID0gaXNTdGFuZGFyZHx8ZmFsc2U7XFxuICAgIGxldCB0VGltZSA9IGZpbGUudXBkYXRlZF9hdCB8fCBmaWxlLnRpbWVfc3RyIHx8IFxcXCJcXFwiO1xcbiAgICB0VGltZSA9IHRUaW1lLnNwbGl0KFxcXCJUXFxcIik7XFxuICAgIGxldCBkYXRlID0gdFRpbWVbMF07XFxuICAgIGlmKGlzU3RhbmRhcmQpe1xcbiAgICAgICAgZGF0ZSA9IGRhdGUucmVwbGFjZSgvLS9nLFxcXCIvXFxcIik7XFxuICAgIH1cXG4gICAgdFRpbWUgPSB0VGltZVsxXS5zcGxpdCgvWnxcXFxcLi8pO1xcbiAgICBkYXRlICs9IFxcXCIgXFxcIiArIHRUaW1lWzBdO1xcbiAgICByZXR1cm4gZGF0ZTtcXG59XFxuZnVuY3Rpb24gZ2V0VGltZUludCh0aW1lU3RyKXtcXG4gICAgcmV0dXJuIChuZXcgRGF0ZSh0aW1lU3RyKSkuZ2V0VGltZSgpXFxufVxcbiQuZXhwb3J0cy5nZXRUaW1lID0gZ2V0VGltZTtcXG5cXG5sZXQgY2huTnVtQ2hhciA9IHtcXG4gICAg6Zu2OiAwLFxcbiAgICDkuIA6IDEsXFxuICAgIOS6jDogMixcXG4gICAg5LiJOiAzLFxcbiAgICDlm5s6IDQsXFxuICAgIOS6lDogNSxcXG4gICAg5YWtOiA2LFxcbiAgICDkuIM6IDcsXFxuICAgIOWFqzogOCxcXG4gICAg5LmdOiA5XFxufTtcXG5cXG5sZXQgY2huTmFtZVZhbHVlID0ge1xcbiAgICDljYE6IHtcXG4gICAgICAgIHZhbHVlOiAxMCxcXG4gICAgICAgIHNlY1VuaXQ6IGZhbHNlXFxuICAgIH0sXFxuICAgIOeZvjoge1xcbiAgICAgICAgdmFsdWU6IDEwMCxcXG4gICAgICAgIHNlY1VuaXQ6IGZhbHNlXFxuICAgIH0sXFxuICAgIOWNgzoge1xcbiAgICAgICAgdmFsdWU6IDEwMDAsXFxuICAgICAgICBzZWNVbml0OiBmYWxzZVxcbiAgICB9LFxcbiAgICDkuIc6IHtcXG4gICAgICAgIHZhbHVlOiAxMDAwMCxcXG4gICAgICAgIHNlY1VuaXQ6IHRydWVcXG4gICAgfSxcXG4gICAg5Lq/OiB7XFxuICAgICAgICB2YWx1ZTogMTAwMDAwMDAwLFxcbiAgICAgICAgc2VjVW5pdDogdHJ1ZVxcbiAgICB9XFxufVxcblxcbmZ1bmN0aW9uIENoaW5lc2VUb051bWJlcihjaG5TdHIpIHtcXG4gICAgbGV0IHJ0biA9IDA7XFxuICAgIGxldCBzZWN0aW9uID0gMDtcXG4gICAgbGV0IG51bWJlciA9IDA7XFxuICAgIGxldCBzZWNVbml0ID0gZmFsc2U7XFxuICAgIGxldCBzdHIgPSBjaG5TdHIuc3BsaXQoJycpO1xcblxcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgbGV0IG51bSA9IGNobk51bUNoYXJbc3RyW2ldXTtcXG4gICAgICAgIGlmICh0eXBlb2YgbnVtICE9PSAndW5kZWZpbmVkJykge1xcbiAgICAgICAgICAgIG51bWJlciA9IG51bTtcXG4gICAgICAgICAgICBpZiAoaSA9PT0gc3RyLmxlbmd0aCAtIDEpIHtcXG4gICAgICAgICAgICAgICAgc2VjdGlvbiArPSBudW1iZXI7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBsZXQgdW5pdCA9IGNobk5hbWVWYWx1ZVtzdHJbaV1dLnZhbHVlO1xcbiAgICAgICAgICAgIHNlY1VuaXQgPSBjaG5OYW1lVmFsdWVbc3RyW2ldXS5zZWNVbml0O1xcbiAgICAgICAgICAgIGlmIChzZWNVbml0KSB7XFxuICAgICAgICAgICAgICAgIHNlY3Rpb24gPSAoc2VjdGlvbiArIG51bWJlcikgKiB1bml0O1xcbiAgICAgICAgICAgICAgICBydG4gKz0gc2VjdGlvbjtcXG4gICAgICAgICAgICAgICAgc2VjdGlvbiA9IDA7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgc2VjdGlvbiArPSAobnVtYmVyICogdW5pdCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIG51bWJlciA9IDA7XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIHJ0biArIHNlY3Rpb247XFxufVxcblxcbmZ1bmN0aW9uIG5hbWVDb21wYXJlKGEsIGIpIHtcXG4gICAgaWYgKGEgPT0gbnVsbCB8fCBiID09IG51bGwpXFxuICAgICAgICByZXR1cm4gYSA9PSBudWxsID8gYiA9PSBudWxsID8gMCA6IC0xIDogMTtcXG5cXG4gICAgYSA9IGEucmVwbGFjZSgvKFvpm7bkuIDkuozkuInlm5vkupTlha3kuIPlhavkuZ3ljYHnmb7ljYPkuIfkur9dKS9nLCBmdW5jdGlvbihtYXRjaCwgcDEsIHAyLCBwMywgb2Zmc2V0LCBzdHJpbmcpIHtcXG4gICAgICAgIC8vIHAxIGlzIG5vbmRpZ2l0cywgcDIgZGlnaXRzLCBhbmQgcDMgbm9uLWFscGhhbnVtZXJpY3NcXG4gICAgICAgIHJldHVybiBDaGluZXNlVG9OdW1iZXIocDEpO1xcbiAgICB9KVxcbiAgICBiID0gYi5yZXBsYWNlKC8oW+mbtuS4gOS6jOS4ieWbm+S6lOWFreS4g+WFq+S5neWNgeeZvuWNg+S4h+S6v10pL2csIGZ1bmN0aW9uKG1hdGNoLCBwMSwgcDIsIHAzLCBvZmZzZXQsIHN0cmluZykge1xcbiAgICAgICAgLy8gcDEgaXMgbm9uZGlnaXRzLCBwMiBkaWdpdHMsIGFuZCBwMyBub24tYWxwaGFudW1lcmljc1xcbiAgICAgICAgcmV0dXJuIENoaW5lc2VUb051bWJlcihwMSk7XFxuICAgIH0pXFxuXFxuICAgIGxldCBOVU1CRVJTID0gamF2YS51dGlsLnJlZ2V4LlBhdHRlcm4uY29tcGlsZShcXFwiKD88PVxcXFxcXFxcRCkoPz1cXFxcXFxcXGQpfCg/PD1cXFxcXFxcXGQpKD89XFxcXFxcXFxEKVxcXCIpXFxuICAgIGxldCBzcGxpdDEgPSBOVU1CRVJTLnNwbGl0KG5ldyBqYXZhLmxhbmcuU3RyaW5nKGEpKTtcXG4gICAgbGV0IHNwbGl0MiA9IE5VTUJFUlMuc3BsaXQobmV3IGphdmEubGFuZy5TdHJpbmcoYikpO1xcblxcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IE1hdGgubWluKHNwbGl0MS5sZW5ndGgsIHNwbGl0Mi5sZW5ndGgpOyBpKyspIHtcXG4gICAgICAgIGxldCBjMSA9IHNwbGl0MVtpXS5jaGFyQ29kZUF0KDApO1xcbiAgICAgICAgbGV0IGMyID0gc3BsaXQyW2ldLmNoYXJDb2RlQXQoMCk7XFxuICAgICAgICBsZXQgY21wID0gMDtcXG4gICAgICAgIGxldCB6ZXJvQ2hhckNvZGUgPSAnMCcuY2hhckNvZGVBdCgwKTtcXG4gICAgICAgIGxldCBuaW5lQ2hhckNvZGUgPSAnOScuY2hhckNvZGVBdCgwKTtcXG5cXG4gICAgICAgIGlmIChjMSA+PSB6ZXJvQ2hhckNvZGUgJiYgYzEgPD0gbmluZUNoYXJDb2RlICYmIGMyID49IHplcm9DaGFyQ29kZSAmJiBjMiA8PSBuaW5lQ2hhckNvZGUpIHtcXG4gICAgICAgICAgICBjbXAgPSBuZXcgamF2YS5tYXRoLkJpZ0ludGVnZXIoc3BsaXQxW2ldKS5jb21wYXJlVG8obmV3IGphdmEubWF0aC5CaWdJbnRlZ2VyKHNwbGl0MltpXSkpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgaWYgKGNtcCA9PT0gMCkge1xcbiAgICAgICAgICAgIGxldCByZWdleCA9IC9bYS16QS1aMC05XS9cXG4gICAgICAgICAgICBsZXQgczEgPSBTdHJpbmcoc3BsaXQxW2ldKVxcbiAgICAgICAgICAgIGxldCBzMiA9IFN0cmluZyhzcGxpdDJbaV0pXFxuICAgICAgICAgICAgaWYgKHJlZ2V4LnRlc3QoczEpIHx8IHJlZ2V4LnRlc3QoczIpKSB7XFxuICAgICAgICAgICAgICAgIGNtcCA9IG5ldyBqYXZhLmxhbmcuU3RyaW5nKHNwbGl0MVtpXSkuY29tcGFyZVRvKG5ldyBqYXZhLmxhbmcuU3RyaW5nKHNwbGl0MltpXSkpO1xcbiAgICAgICAgICAgICAgICAvLyBjbXAgPSBzMS5sb2NhbGVDb21wYXJlKHMyLCAnZW4nKVxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGNtcCA9IHMxLmxvY2FsZUNvbXBhcmUoczIsICd6aCcpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcblxcbiAgICAgICAgaWYgKGNtcCAhPT0gMCkge1xcbiAgICAgICAgICAgIHJldHVybiBjbXA7XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgbGV0IGxlbmd0aENtcCA9IHNwbGl0MS5sZW5ndGggLSBzcGxpdDIubGVuZ3RoO1xcbiAgICAvLyBpZiAobGVuZ3RoQ21wICE9PSAwKSBsZW5ndGhDbXAgPSBsZW5ndGhDbXAgPiAwID8gLTEgOiAxO1xcbiAgICByZXR1cm4gbGVuZ3RoQ21wO1xcbn1cXG5cXG4kLmV4cG9ydHMuc29ydHMgPSBmdW5jdGlvbihsaXN0LCBzb3J0KSB7XFxuICAgIGlmIChzb3J0ID09PSBcXFwi57G75Z6LXFxcIikge1xcbiAgICAgICAgLy8gbG9nKFxcXCLnsbvlnovmjpLluo9cXFwiKTtcXG4gICAgICAgIGxpc3Quc29ydChmdW5jdGlvbihhLCBiKSB7XFxuICAgICAgICAgICAgcmV0dXJuIGEudHlwZSAtIGIudHlwZVxcbiAgICAgICAgfSk7XFxuICAgIH0gZWxzZSBpZiAoc29ydCA9PT0gXFxcIuWQjeensFxcXCIpIHtcXG4gICAgICAgIC8vIGxvZyhcXFwi5ZCN56ew5o6S5bqPXFxcIik7XFxuICAgICAgICAvLyBsaXN0LnNvcnQoZnVuY3Rpb24oYSwgYikge1xcbiAgICAgICAgLy8gICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUsIFxcXCJ6aFxcXCIpXFxuICAgICAgICAvLyB9KTtcXG4gICAgICAgIGxpc3Quc29ydChmdW5jdGlvbihhLCBiKSB7XFxuICAgICAgICAgICAgcmV0dXJuIG5hbWVDb21wYXJlKGEubmFtZXx8YS50aXRsZSwgYi5uYW1lfHxiLnRpdGxlKTtcXG4gICAgICAgIH0pO1xcbiAgICB9IGVsc2UgaWYgKHNvcnQgPT09IFxcXCLlpKflsI9cXFwiKSB7XFxuICAgICAgICAvLyBsb2coXFxcIuWkp+Wwj+aOkuW6j1xcXCIpO1xcbiAgICAgICAgbGlzdC5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcXG4gICAgICAgICAgICByZXR1cm4gKGEuc2l6ZSB8fCBOdW1iZXIoYS5zaXplX3N0cikgfHwgMCkgLSAoYi5zaXplIHx8IE51bWJlcihiLnNpemVfc3RyKSB8fCAwKTtcXG4gICAgICAgIH0pO1xcbiAgICB9ZWxzZSBpZiAoc29ydCA9PT0gXFxcIuaXtumXtFxcXCIpIHtcXG4gICAgICAgIC8vIGxvZyhcXFwi5pe26Ze05o6S5bqPXFxcIik7XFxuICAgICAgICBsaXN0LnNvcnQoZnVuY3Rpb24oYSwgYikge1xcbiAgICAgICAgICAgIHJldHVybiBnZXRUaW1lSW50KGdldFRpbWUoYSx0cnVlKSkgLSBnZXRUaW1lSW50KGdldFRpbWUoYix0cnVlKSlcXG4gICAgICAgIH0pO1xcbiAgICB9XFxuICAgIHJldHVybiBsaXN0XFxufVxcblxcbmZ1bmN0aW9uIHNpbWlsYXIocywgdCwgZikgey8v5Yik5pat5Lik5Liq5a2X56ym5Liy5LmL6Ze055qE55u45Ly85bqmXFxuICAgIGlmICghcyB8fCAhdCkge1xcbiAgICAgICAgcmV0dXJuIDBcXG4gICAgfVxcbiAgICBpZihzID09PSB0KXtcXG4gICAgICAgIHJldHVybiAxMDA7XFxuICAgIH1cXG4gICAgdmFyIGwgPSBzLmxlbmd0aCA+IHQubGVuZ3RoID8gcy5sZW5ndGggOiB0Lmxlbmd0aFxcbiAgICB2YXIgbiA9IHMubGVuZ3RoXFxuICAgIHZhciBtID0gdC5sZW5ndGhcXG4gICAgdmFyIGQgPSBbXVxcbiAgICBmID0gZiB8fCAyXFxuICAgIHZhciBtaW4gPSBmdW5jdGlvbiAoYSwgYiwgYykge1xcbiAgICAgICAgcmV0dXJuIGEgPCBiID8gKGEgPCBjID8gYSA6IGMpIDogKGIgPCBjID8gYiA6IGMpXFxuICAgIH1cXG4gICAgdmFyIGksIGosIHNpLCB0aiwgY29zdFxcbiAgICBpZiAobiA9PT0gMCkgcmV0dXJuIG1cXG4gICAgaWYgKG0gPT09IDApIHJldHVybiBuXFxuICAgIGZvciAoaSA9IDA7IGkgPD0gbjsgaSsrKSB7XFxuICAgICAgICBkW2ldID0gW11cXG4gICAgICAgIGRbaV1bMF0gPSBpXFxuICAgIH1cXG4gICAgZm9yIChqID0gMDsgaiA8PSBtOyBqKyspIHtcXG4gICAgICAgIGRbMF1bal0gPSBqXFxuICAgIH1cXG4gICAgZm9yIChpID0gMTsgaSA8PSBuOyBpKyspIHtcXG4gICAgICAgIHNpID0gcy5jaGFyQXQoaSAtIDEpXFxuICAgICAgICBmb3IgKGogPSAxOyBqIDw9IG07IGorKykge1xcbiAgICAgICAgICAgIHRqID0gdC5jaGFyQXQoaiAtIDEpXFxuICAgICAgICAgICAgaWYgKHNpID09PSB0aikge1xcbiAgICAgICAgICAgICAgICBjb3N0ID0gMFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGNvc3QgPSAxXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGRbaV1bal0gPSBtaW4oZFtpIC0gMV1bal0gKyAxLCBkW2ldW2ogLSAxXSArIDEsIGRbaSAtIDFdW2ogLSAxXSArIGNvc3QpXFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgbGV0IHJlcyA9ICgxIC0gZFtuXVttXSAvIGwpICoxMDBcXG4gICAgcmV0dXJuIHJlcy50b0ZpeGVkKGYpXFxufVxcblxcbiQuZXhwb3J0cy5zaW1pbGFyID0gc2ltaWxhcjtcXG4kLmV4cG9ydHMucmVtb3ZlRXh0ID0gZnVuY3Rpb24gKGZpbGUpe1xcbiAgICByZXR1cm4gZmlsZS5zcGxpdCgnLicpLnNsaWNlKDAsLTEpLmpvaW4oJy4nKVxcbn07XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJ1XCIsXCJwYXRoXCI6XCJ1XCIsXCJydWxlXCI6XCIkLmV4cG9ydHMgPSBmdW5jdGlvbihydWxlLCBvcmlnaW4sIG1vZGUpIHtcXG4gICAgcmV0dXJuICQudG9TdHJpbmcoKHJ1bGUsIG9yaWdpbiwgbW9kZSkgPT4ge1xcbiAgICAgICAgbGV0IGhvc3QgPSBvcmlnaW4ucmVwbGFjZShuZXcgUmVnRXhwKFxcXCJodHRwOi8vfGh0dHBzOi8vXFxcIiksIFxcXCJcXFwiKS5zcGxpdChcXFwiL1xcXCIpWzBdO1xcbiAgICAgICAgbGV0IGhvc3RzID0gaG9zdC5zcGxpdChcXFwiLlxcXCIpO1xcbiAgICAgICAgaWYgKGhvc3RzLmxlbmd0aCA+IDIpIHtcXG4gICAgICAgICAgICBob3N0ID0gaG9zdHNbaG9zdHMubGVuZ3RoIC0gMl0gKyBcXFwiLlxcXCIgKyBob3N0c1tob3N0cy5sZW5ndGggLSAxXTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChpbnB1dC5zdGFydHNXaXRoKFxcXCJtYWduZXRcXFwiKSkge1xcbiAgICAgICAgICAgIGNvbmZpcm0oe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcIua4qemmqOaPkOekulxcXCIsXFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFxcXCLmo4DmtYvliLDmlrDnmoTno4Hpk77lnLDlnYDvvIzngrnlh7vnoa7lrprmjInpkq7ljbPlj6/mkq3mlL7vvIzngrnlh7vlj5bmtojmjInpkq7lj6/ku6XlpI3liLbpk77mjqVcXFwiLFxcbiAgICAgICAgICAgICAgICBjb25maXJtOiAkLnRvU3RyaW5nKChtYWcpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWc7XFxuICAgICAgICAgICAgICAgIH0sIGlucHV0KSxcXG4gICAgICAgICAgICAgICAgY2FuY2VsOiAkLnRvU3RyaW5nKChtYWcpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiY29weTovL1xcXCIgKyBtYWdcXG4gICAgICAgICAgICAgICAgfSwgaW5wdXQpXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXQuaW5jbHVkZXMoXFxcImFsaXl1bmRyaXZlLmNvbVxcXCIpICYmIG1vZGUgIT0gXFxcIuWumOaWuUFQUFxcXCIpIHtcXG4gICAgICAgICAgICBsb2coaW5wdXQpO1xcbiAgICAgICAgICAgIHJldHVybiAkLnRvU3RyaW5nKCh1cmwsIHJ1bGUpID0+IHtcXG4gICAgICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5vcGVuKEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi6Zi/6YeM5LqR55uYXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPVxcXCIgKyB1cmwgKyAnPz9meXBhZ2UnLFxcbiAgICAgICAgICAgICAgICB9KSlcXG4gICAgICAgICAgICB9LCBpbnB1dCwgcnVsZSlcXG4gICAgICAgIH0gZWxzZSBpZiAoL1xcXFwuKG1wM3xmbGFjfG00YSkkLy50ZXN0KGlucHV0KSkge1xcbiAgICAgICAgICAgIGxvZyhpbnB1dCk7XFxuICAgICAgICAgICAgcmV0dXJuICQudG9TdHJpbmcoKHVybCwgcnVsZSkgPT4ge1xcbiAgICAgICAgICAgICAgICBmeV9icmlkZ2VfYXBwLnBsYXlWaWRlbyh1cmwpO1xcbiAgICAgICAgICAgIH0sIGlucHV0LCBydWxlKVxcbiAgICAgICAgfSBlbHNlIGlmICghaW5wdXQuaW5jbHVkZXMoaG9zdCkgJiYgaW5wdXQuc3RhcnRzV2l0aChcXFwiaHR0cFxcXCIpKSB7XFxuICAgICAgICAgICAgbG9nKGlucHV0KTtcXG4gICAgICAgICAgICByZXR1cm4gJC50b1N0cmluZygodXJsLCBydWxlLCBtb2RlKSA9PiB7XFxuICAgICAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAub3BlbihKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuivpuaDhVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UveXNmeD9ydWxlPVxcXCIgKyBydWxlICsgXFxcIiZyPVxcXCIgKyBydWxlICsgXFxcIiZtb2RlPVxcXCIgKyBtb2RlICsgXFxcIiMjXFxcIiArIHVybCxcXG4gICAgICAgICAgICAgICAgfSkpXFxuICAgICAgICAgICAgfSwgaW5wdXQsIHJ1bGUsIG1vZGUpO1xcbiAgICAgICAgfSBlbHNlIGlmICghaW5wdXQuc3RhcnRzV2l0aChcXFwiaHR0cFxcXCIpKSB7XFxuICAgICAgICAgICAgbG9nKGlucHV0KTtcXG4gICAgICAgICAgICAvL+iDveWUpOi1t0FQUOeahOeZveWQjeWNlVxcbiAgICAgICAgICAgIGxldCB3aGl0ZSA9IFtcXG4gICAgICAgICAgICAgICAgXFxcInFrbGlua1xcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCJiZG5ldGRpc2tcXFwiLFxcbiAgICAgICAgICAgICAgICBcXFwieHVubGVpYXBwXFxcIixcXG4gICAgICAgICAgICAgICAgXFxcInNtYXJ0ZHJpdmVcXFwiXFxuICAgICAgICAgICAgXTtcXG4gICAgICAgICAgICBsZXQgaW5XaGl0ZSA9IHdoaXRlLmZpbHRlcihpdCA9PiBpbnB1dC5zdGFydHNXaXRoKGl0KSkubGVuZ3RoID4gMDtcXG4gICAgICAgICAgICBpZiAoIWluV2hpdGUpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gJC50b1N0cmluZygodXJsLCBydWxlKSA9PiB7XFxuICAgICAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAub3BlblRoaXJkQXBwICYmIGZ5X2JyaWRnZV9hcHAub3BlblRoaXJkQXBwKHVybCk7XFxuICAgICAgICAgICAgfSwgaW5wdXQsIHJ1bGUpXFxuICAgICAgICB9IGVsc2Uge1xcblxcbiAgICAgICAgfVxcbiAgICB9LCBydWxlLCBvcmlnaW4sIG1vZGUpO1xcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcInlzZnhcIixcInBhdGhcIjpcInlzZnhcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxubGV0IHJ1bGUgPSBnZXRQYXJhbShcXFwiclxcXCIpLnNwbGl0KFxcXCIjI1xcXCIpWzBdO1xcbmxldCBtb2RlID0gKGdldFBhcmFtKFxcXCJtb2RlXFxcIikgfHwgXFxcIlxcXCIpLnNwbGl0KFxcXCIjI1xcXCIpWzBdO1xcbmxldCB1cmwgPSBNWV9VUkwuc3BsaXQoXFxcIiMjXFxcIilbMV07XFxubGV0IGl0ZSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3VcXFwiKShydWxlLCBnZXRIb21lKHVybCksIG1vZGUpO1xcbmxldCBqcyA9ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICB0cnkge1xcbiAgICAgICAgaWYgKGRvY3VtZW50LnRpdGxlICYmIGRvY3VtZW50LnRpdGxlLmxlbmd0aCkge1xcbiAgICAgICAgICAgIGxldCByID0gJCQkKCkubGF6eVJ1bGUoKHQpID0+IHtcXG4gICAgICAgICAgICAgICAgc2V0UGFnZVRpdGxlKHQpO1xcbiAgICAgICAgICAgIH0sIGRvY3VtZW50LnRpdGxlKTtcXG4gICAgICAgICAgICBmeV9icmlkZ2VfYXBwLnBhcnNlTGF6eVJ1bGUocik7XFxuICAgICAgICB9XFxuICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgIGZ5X2JyaWRnZV9hcHAubG9nKGUudG9TdHJpbmcoKSk7XFxuICAgIH1cXG59KTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIlxcXCIsXFxuICAgIHVybDogdXJsLFxcbiAgICBjb2xfdHlwZTogXFxcIng1X3dlYnZpZXdfc2luZ2xlXFxcIixcXG4gICAgZGVzYzogXFxcIjEwMCUmJmZsb2F0XFxcIixcXG4gICAgcGljX3VybDogXFxcIlxcXCIsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICB1cmxJbnRlcmNlcHRvcjogaXRlLFxcbiAgICAgICAganM6IGpzLFxcbiAgICAgICAgY2FuQmFjazogdHJ1ZSxcXG4gICAgICAgIGpzTG9hZGluZ0luamVjdDogdHJ1ZSxcXG4gICAgICAgIGZsb2F0VmlkZW86IHRydWVcXG4gICAgfVxcbn0pO1xcbmQucHVzaCh7XFxuICAgIGNvbF90eXBlOiBcXFwibGluZVxcXCIsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBpZDogdXJsXFxuICAgIH1cXG59KTtcXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLpmL/ph4xsYXp5XCIsXCJwYXRoXCI6XCJhbGlsYXp5XCIsXCJydWxlXCI6XCJldmFsUHJpdmF0ZUpTKFxcXCJyTyszN3VHK2IySmJsOTFKWGUxQUxhY0FjUksxeGlrS05TZngzT0pOdjlNQUtwY3dGS0VMcXYyRlFFcTUxOC9abFpDZHpNOXZHbnpjL3BJM0x6Zk95YUJWd016K2RBY1ovc2pnd2RyOSthaE4yenB6SG84ZERPZDZLOXhhUldNZkRDenk3M2dSUHRha0FISkEzbU5SVzJwdVBTclNUQk1CMmtVR3FFR3VVTldrTTFwSEExam91U1dyckFNYmtPRUlVS2IyWVFKM2VJclVTMnNzVDc0V3dlanYwaXJ4Vlo4UlRoVWdwekFTWTU1dVB0N1ZnaVZWaWlFWEZjSi92cDl4ZXdZVzVLRXRnYzN2RXhjVFY4enZQOGN5SDAxcGRGMktQR3NnMEhMd0JFNEk5UTl1MVRnQ09GamFOZlpOa2F4WlFaMlZuUGxaMXJOeXRMY3BhRGNmMk0vanJUZC8rbm1zbVdya2ppdHVxOHhJNmZDVGwwSjZlMEh3SHpmdFE4WEZkVUZlakt4V0RGcGkxMHpqUTRuL3JDUSs0UzdPTlpaVHJZZGlYeVBlNFEzbWd6SjdRWjQ3NVAzTnBLTzZnTGxpSnZwN05Ic1BXL0FIK3BmWEJYQndkUml2QzZoTkc1dVA2Qmc4Z21pTjFHVHNSTVh3N0xob3JGSndXRFpSQTlZTGxYdktSYnY1WVl0cEZNVDVPWkNnOXByRWphZ1laLy91ZEt6eSt4QlNoQTEzM0Q1UmFtK1AzeXFLcWpMa3d0UVVaSnl4WkU4NmI2NjB2WDJDYmhieFNZOEpGRTNnMVhzNHZnVzBXQzU4YURST0xBeWhacDBlaTdubUtrUEZsYVFZOHVqTXd0ZDgrVVpUVjEzWU9paWRvS3NoWHF2SEpWSWZFNXEvMjdmdnlHdTJoS2ZKMm5KYWF0d3BuaVhxUkl1NDljMGZsUlJPdlVNbTFMSFcrVG9KUXMwSzBwWk13eDNKSkZ5K2FKbWw0VE5VYjhNTFQ4V0tnK1paTHE2bTBQQVd3OGdkZ0l0TERhMmFEVC9RcytBd3dTdmsxUStDR3JRRHN6b3hucUdwZEppemJEVlRRa0pjVzUzSWRKK2lTVVFRSENNdU0xVVlmcGRBSndjNEQzK2ozMFNjSHVuSDMvYk5CZll3bjA0L0tIdjd5WlN5RmMwNlIydzhuZ0RNUm5jZklQcmpONmJzekJFQWNLMHBWNEF0Z2hySkFkcENyUFJDdzRNZlVMSmc2NnF4VjRLVjFGa2JPSFk2ZzA2Q3F6ZGk5dEJnZmQzNEx6ZmRLZEgxVm9kdDRLNjdnUG50WG1iVThDVVRzMkhSRmx3ZkNmcUJtUXRGRGlUM0ZxTlBGSFhrM29KRStzT0l0U3J2VWR1K2J0NHBGeWxuZWVHbElTc1g2bUhPSGZrNUJacDlFV09Na2pBNkRtYnBaZnFCb2o0L3JKazFjSGJ2Zk1MSi9uVzdIeGt2ZGJ3amZlSHI5ckxuRXJEOCtPaE1QcjJGQ2x1Q1hLOHM4ZlJMdm5WVlJ1TDgzY2Q1TUpEZVBHWG5oSGZKaWNNOGU4c3J5MGpXVm5QN0NKLzcxa2dCMVBZT29PYTZZY0JuZC9Fb3N0OVNPZXNuZStZa3RuUGFIUHhmdjIvR3diWnM3UUtndHpaL1ZuY3RwODBqUkxCd0NOdERaTkF6dzN2eDF5dkw2eTRQUExlM3NRdzB0YlJ4UHAvL05xMHRWSE5sU2FzRW1QRDNHdysrams1NFZ1UmVieVNIa1lsU0dPNkNxRDRjNmd6dzFiR1JZRERuRStoQ2R1SS9neGxMZnNzU1oyMlZtMkhrVnhndlFHOC9jTnduQUlWWERjRDlwcGFmTStJc3V2Q0RaNFVkU3M3SzJ1eko0YlVpOVBPcTBBUnI2ckVNTkxXMGNUNmYvemF0TFZSelpVbGRHVUErdEF3QlhlQXhKUnp1d1ErUTVSb283c053V2o5U3Q3NklhT3dPWUpLa2FRcDVWeUxkYTBzeHdTbzV3K2R3R2QrY21lOVJURE1iL2VDQldRZnlXbVRjU2svNlVMblB3TlZGblVYTkZrMlBQUEtTUlVmTXlLN3h5VjhtTyt1YWNKTDJQaUpqbDVuekNLYkp6MXdhQ25vK2YyTDRRNVcvMVhLLzhqVTU3V1RrM3JpV2kydU9XUVdZUHBWNXZtRi9ZelR1V1h4TmI2eldxYmI5ajdpOXBWNC95eDhOdC9hT1VGdWRKRmlUdjhtOHFabHNLcldEd0g3SCt6MEVoUjhVeFg1WkNMNU1NelJ1YlI4bERSRVJNUm80UTl3Z0l2bnhZdmRjVTBBd3Y2SGJPbmxjTmxxQUVLa3hFUkxvcVR5bXZhK2pIQjNmS3ljVHJvSVhVblFrSDRocDNJaUVUYXR1MTF6emEvOHpXemxYQ2xsSklUUkk1cEIrL2M4enMrUzJRK2dTamVCUXBqSnB6a28yQkpSN3hwTkxyM0d1Q1ViVzU5Q01EcHRUbVhHdGxNajVPMnNRdmowQTZXZTRHenIyeDRmOXROWm9TZ0V4NnpLUC9IK0hhaVNYM3JzR0N1UHJwdENBT05GYmJ4cEJaWnJ1TW5jRW1LbldtVytPTkIzMVY3aFlpVWFXNUpuVXFZOWh6OENRQVZBZGRQalhQTUlBUFYrQk5DZm5zTkZYV3Y4ZXdhblBJemUzN0FTOTM0aUJnbDRHT1didDRzbi9GRkdITzdJZFhXNGZPV2tuMXU1UUJ1WXMvVTNCNDRIMjdOSWdUdU9jL0tjYUQxNDg3ZnBWdnQ3T2ZzT25Vejl0ME1sc1VkbE1KRjNqaCt3M3BFTGV4WDljU1F6bzJjc3J5MGpXVm5QN0NKLzcxa2dCMVBZRnhmZE50SjkzbkF0UUIyVlZPRVg3Y1BJN1crS0g3ODNYb1dyNG13akEyU3ZOREFmQU01d2oyNFVJTFhJTlIyTVR3Yk9KWnQ3T3p3L0l0WjBzdVZCelk1MExYUjBzOExldTQxTk9MaTIzT1hKbmE1Nk1oSHRqSGhUM1hydTQwd3NrVnhtdXEvbW0vcHFsWFpObld1TXpPK1JUNFA5Tm1TUDVWbU13SmovcUZIVG9RcW10c3JUL2h5ZTlCb3BnK2VmOW9KTVBVdjkrb0c0cUxJcmhDcU91bzFQZlRMazJhU0t5a25Nd2N4c2ZQOTB1WmdBcVMyMS8vUStnSmFUeEdQenZuU0pITXh0dytiYVl2bExKRXRDc3hpN1V0Vm80N0FUd3Q0dEtTbGNSeG1STzcvQTVIYnYxM2FyL1VLalpKSTkyV0NLL3BEL0FoczJlaUNDOVh6eVkwRmhJUE1oYjg5VjVFc3lIRU1NemRMelJMeDdZZHJXSDUzZmVWd0tEWGNaOHNvVWtsckNDais3WWd1cHNYYThPQ0lnOEkraUlkNHNmRDRjQVZZRW1uRjc1dHdWSk1uWVNKamxNazBGM1JyeGw4Z2xVNG5ZU3RkZVFveDhjbU1GcEsvaGlQLzVCQ05qcWdyOWZGR3RRRVAxOWViK1ZMQTZxUDRDT2ozY1pxVjQrci85UTF4SmJnWUFCclIvNXRYaWhwS0xjZHgzdzBzbU1TYmRyRHFXWnJYbXRuVXBqN2EzUUM0WUZDNE9JVVFCeWZwWElWaHp5d0pMNjBaWkxSYXZobHRwL0crcjB2NUQ5NnZSajJEKzNwZHVnYSs0QXZhWFE5ZThkOG5BOTFuSEJKQkhMdVdQMWtwK1FidnJmNURDYlA4Tm9SWGdTNVlqUWJzcXpuMUNDZlNqbVp2c3ZlUGk2QkFFYlFEdEg5YlhmRUdNUWNXR3JkY1RDM1hMb3NpS25SQ0lkZEhkdnBYL21McW15dFpMeUd6Z0dzWHNFU0xRc3Q0cjVzUlZlT2dpRW1aOEJmNWJYYWVSajJ4eW5kREl1M1dlbjFTK2pQL1Jia0IzVWhRWHZNTWhhOU9iRjAvYUJvTjRremQrQW83Z1NxTzh6c2F4MkcyanVwSjZHY2UzU1JKWjhKSUtxejJVYXlyZmQ5dXZzOU43ZEY1c0xjR01KVGI4Y1hWcXQ4bUl0S2RXdUowU09POGxzL3ROVjFDeGZmVlZFRllKV01MOU5sMTJsaktZYU1SbENDMVFOZ1VMcTI3SkVaMlE3SzB1REJ5UjRJUzJYVzhpYWRHUHZwQktxSVpjZlQ5ZTdBUXk1NENRK1RMNDBhOWhQUlFsZ2s2RFpFcUhDcHdLSU5kTmRGVkRZRVU2cUEwWm9QUFVYd1lrNHdJOTdOOC9mUFJSUVEwc0NmSGtWb3kxWFJhUFg3T0h6VVk2Skx6NTJVdUhKajhoalluOVp1ZVMrTFdmVUtYQUFqRm9jZ3ZSNFZNWFkwU2s2U1dlWHdSb2g4dU9aZWM4ZlJJbCtQejYrRWNVbUZyNUg0cTkzTUxhK1JWb0xOeksvQXNOYXpjMlJyZmU4dXoyWm5YSVdhVGxYQ2xsSklUUkk1cEIrL2M4enMrUzI1OU5HTEFqM3QxUU1lRzdac1VTUUd6TG5wUE5EWG1GN2NkYmpQcEV4dHNzcnkwaldWblA3Q0ovNzFrZ0IxUFkzV2JIazh6bExreW9KT3Jrai9jYzU2TmZrdkdJR0lDL2FyMVN1b0hIMmNNc3J5MGpXVm5QN0NKLzcxa2dCMVBaeHJaVEkrVHRyRUw0OUFPbG51QnM2L1hxRUJsbDdiZG5Md3Q5WU9DRHE5dWV5YmowL1BGWFlCMWMwWmNuOStTT1VWc3BqTUQ3TlljK0RXalVMMmIyc3E4UTUyVW96d05zT0FJdDdpTWNmWVorYTBXR2F2eU9EVE0zVDNuVWdKOE4yOGFFcXNzaVBKclhYSUduWXN5M004a28rVUFNekxsb0dOWXUwOGkwT3VKMVR4RGxmZFUxT0ZDOVpXL1FEMGJxSGdxeCt1N2J2LzYxSzMwMm9RUitNbXFFbnJpc09PTk02OW13VlA4aUdwVktuUUhwK2pYditrNUdVQlhaVUNrRHArKytDTU1FUkViTGx1c3N1YUlXR1hzQ3lxUlZuL0F6RHlUb3kyOGFNZU1JQkJ1YkFhVU1RQjg2TEtxMm90RDJrWVdYS21nN3JRNFdJZmZmZWoycHhrOFZDTEl6cVkxYTNwU3A3ZFRKbHU2Y0xFVVpiMVRXNVpPZUtuajU0MFdCWTAveFBqSThzY3d4b0JSYndBK2xXVXowRzVrUFpobS95cDFadWF5RzhhK2xVQnNzOU5vNU9XNk9Gekgvd0tOaWI0c3ZFdUJhSlJXUVNmYXpRUHpYL21DYXpCTmpIalowTWF6T1kzYThFdFloUWhucG1MczlscXNUSGlFNE15WEFHbHIySk91b0M5Y1UwakV4K0h6THk0RnBzWG1BN0kyMllxbnpGNnRrZm94bjc3U2NiK08rRXlzWjI4V3pDYVRNYWh2WjJlVld0UG5vc3ZnRldQRGh2S3pub3R1YXc5d0d1ODd2c252S1dremtySjlsN1dWRTBJV09PclBxb2ZRR0RmU2hIc0Q3TVNIWmEzdVhWNHZLZ0YzK21WY2FtdFhsemZxRVJzY05XdHYxOWViK1ZMQTZxUDRDT2ozY1pxVjRUMnlYd1Zwc0xUSGFEeHo2RmUzbzBzVFRNKy9TQjFDcWg0ZVNEYnhTL0FFN0VRTUdqenBMMjVpbFNGZG1Bdm1NbWxaOERvM00xdGxlWlZpT2N3ZTJnSC9mczQ2dDZnWnRBWldPMk9KbUZlTFFMVC9UbmplanlodlEya0xsNW16M0xLOHRJMWxaeit3aWYrOVpJQWRUMnhDeFVuT2IrbGdCODE5V0ZjWkV3bnBLZ1BhaCtRZjBuNWxLY3Q4TWtUelNQeWNaWktOOGFxYy95YmREdXh5WHlQTzl5NWNnU3VDdlVQOCs2QVdhRTVWbVNLZnRONDkxQzZTRzMvdVcwWlFsNWNDcFpyUlNvcjBqR3ZSMjVka0hWU1FLcTRZOVpCZmZ3OWFDUXc2c0U3Rmp4V002Z25nWFZ6RTN1cUo0QWtVRjVML2ZEQUljK29WNGhGcGhYQXRWUjc4Z3V5Y01sQUI5dS9UMjNxRjloUFpxYm1wMzRwNkNTUVJJNGJ5UkJCNm1HZG9XYy9hV2dBUGV1Y2tRa1UraFVmc2RuTnBmdEFPVnNRYmNJNXpmTXFrOFBvL1Q4QlV6L1JzdlFqVklPMEJLNHNuM29wZEhmckhMS21ZYUtrWE1VNUkva2dZSVRhVXFxd2pQcFlDKzI1THd0UXpyZVN0M0M4a1c1MWtERVY5WUV5WEt5WExJdnFXZjBhRkJnVnYrWUhJQzczVjN3TzRLREZtdGlCb2FZQkpIbjNVY2JRd2Mva2luT2EzU1RsSVRTcEVkQjV4bkdDQlRuLzRMeXJ0YW1ZdkdLKzBxMnJPUGRhRVBndFllTVhzQURIVXNQR0hVVlk4WkNvb0d6WXg1QlkwNDJFd1dWWTI3K09Ic1dGdDRkSlhSTHd1eThHMGNiRFIrYStRaE5FYk5xckNQM25GMjBFWWV4VkV0cFN2MGVCSy9uRGwwUXVxZENpai9ZQlpPWHNNaE9DbnNFVWNSODhHeWxtNWJQNGQ4YjRpYjZ4L2lEQVBjeVRINXg3OGhhTjQ0bG1Pb0Rqa2gvSERhNWR2SUtPOWdQelR5YmJJL3dITnI1b0RLQ2xwNkZvSlZ6ZnpValU3WUJwZFptTTgvWmpMYXRwYVFaR1JlZGx4RzNjdmNVMDBmTVFLS3BOaC9tdEZBcXVqOHFneTE1Mm1SemdOcEd5NzZMVmplcXdxNC92N05SVFZCYlQvVEs5SW80c1AvQ2w2NVRIemR4N1c3TTEzL2VPU05ONkdSMmxsc0N0cWswM0xCMzFnR1RvSEphRVJWUTBBbTRxRExBczd3ckVWRGxYZEpUSWduTmRHZWxabXV6K3pmK1hLbDc3UktpSjVVTzkxK1ZvcVJCNHprZjhuVURpaEdCTUFwcGxVZnFURkNpdmptYnRaTFVBWGFZTTFMaXRrNFAvdGxwRHcrRHJvSHZxYVVmK01Pa2xoQnFZV25NTXZMalVrQmNLQ2VldlR5aTVMaDVtNlk1V2UySmdmVjgycXh6Q05ROU04elI3V1VBQ1lUWmNwNFpTaVhROG1uQjFWMEQvd3ZHYkFITmU1cGhQYTgvMzU4Uk4xZWNlQnI2VVZUcHl2T202eFFpQmFNeWJieFVRd3FLVVJMcGYva0k2emVoVXVubnQvREdTaUZWU2JTalpsenBlQTNpSU1aSHlqM0gybUg3dDNlNEIxT1ljZXNCVTVaY2NaOUJMY0xBelZjNWVWMlpsd2x5S2pTRlE4b0Q2dWpyVVliOWt4TlJxQ0FhbWpKYU5HdThvUW9KOXdkbTljTThzZzNGUlpOclhyS3RjVWE3ZW5yT0owWGdtbkNTOWo0aVk1ZVo4d2lteWM5Y0duMk1oa0psUEtoUVpCNWx6VkdHa205cVp3MVlHY2pYQkdzWVp4a0M1VEFrejN3TjF5M2ZKL004OHFna2JvazNXZnl1R1RKaUJpRnAyN08yUjdEc2FnMkRaMU52bUFLTHVuMUZ0K2JSNFRIbVBPOXk1Y2dTdUN2VVA4KzZBV2FFNVRNRUdmd05RZlgwOXNjZTRwcSszNDdPbERMN0R2enpzT1FuSysvYkNjNG5sNy9TK283VEp5eE9HSnZqLzRreEtTZ1VTcHUwbnBhUUFYUDk2NUJhS21FNEJrUHoyOGJMd0FNd1J5TzZkaVpGeXl2TFNOWldjL3NJbi92V1NBSFU5aVB0bXh1OUMzVE11SmZKK0kvNUY5dWd1WWxHS3ByU08wQ09FaXd4VlZLVHl5dkxTTlpXYy9zSW4vdldTQUhVOW5DK2YzWDNqRldrSW5Vdlp1RitRVFhTV1BVdzJtbytsSHBKYUtkZHU3anVSUHZ6MlExVzd6VmtYQXU1TEdBdE9zc3J5MGpXVm5QN0NKLzcxa2dCMVBhU2FLQk1uOGtpTlJzWTJsSmMzeHc0Rm1xeWZ2Z2NPd3hWSkVpT0ZLMWJRcThTOWMwaEV4ZW4wQ2s2K3Vqdy9JKzZpWURWV0FlRGRKWlBpenMzVXA0amNZMlNQbWQ1R1BqR3psOEIxS3VwdkpFcThaNjFuRWlXeGtGcWh3dTQxNXpMSzh0STFsWnord2lmKzlaSUFkVDJIL1h5SmZlZWRnd1VzdzFNNGlYdm5neFJ0Y3kxMEtQdGVqc0lCVFY4bU56TEs4dEkxbFp6K3dpZis5WklBZFQyRTBxUnVKeHZWeVhNWFJwa2lLQXJsbEFBeHVOVWtza0xlZ2xwdHkrazlMNTUxenl2bGQrT2FvcHpianVTZWRaeHl5dkxTTlpXYy9zSW4vdldTQUhVOXRueVZKNHFWb0JMbnRBc3dUZkZxMmQ1QmErVmlXRWpScExQRGVVMnBVSmhDRC9rV1ZxZVY3OWdzbVRLYUlEMG9OTlZsWjFmem1qUWJRMjY0Z1F4Z09JaS9VdmFpZlV2SllMdzlzd1VjeG9HZ21YZjRadHhlcTkvSFMzT3N4a2haVS9mVDZ4M1VsSWxmL1pOcFNlZi9DUTBoOUtzRnhJMmVIRWpyR2ZZOWNFWEtIMGRpdEloUUdMVnU3RmR2Qm1Na01zcnkwaldWblA3Q0ovNzFrZ0IxUFpVUGRuNURhOFo5YzRHaDhOVStaZXR6cFF5K3c3ODg3RGtKeXZ2MnduT0orSEN5TnRuaUpBVjRwblhSbDI1VjZCL2M3cmlTVXNNRjZnUm42N251NTlKeXl2TFNOWldjL3NJbi92V1NBSFU5cGxiZ3ozaVBhVlR1MUFrb3pOUUV4ZGgrRHJ6UW5KemdoSXBzakdMSVRUbnl5dkxTTlpXYy9zSW4vdldTQUhVOXNIMkk3UXZBaEVrcHlTd29OMVYvK2pDQVFibXdHbERFQWZPaXlxdHFMUTlQT3h6M3ZmOWVHQWdSWThqUjY5MEtGR05PbTh4NHB2c21yOUdQUWQxOWM5eC9teTZZS1poNXR2ZnZzaE13ci9US2JEdUluTEU3QUM2RnpJZXZCQVNVRFN3SE85WklpMC9IYTIrV24zZGlEdHhIeVJWUWZEOVpPMDdJZVAySjluUktJQ2JEOGtJZlpmUVRPTElCKyt1ck9IL0c4YVdOVGpzeVhYUTZRVS9kMnhjYXhiU0RWbG9tb2RaMmFOb0MyT0s1TGg1bTZZNVdlMkpnZlY4MnF4ekNQWGpqM2VDejV3Y2JnWVdkbnJ0U0Z4UEh6Q1drZlArRnVpRXQrUW9mS09URnV4ZDhSUnZycFR4MzE5YnBiVTRNVHJiZWUyc3VKdGhKbHZpZFhpZjZjUExLOHRJMWxaeit3aWYrOVpJQWRUMnM1MXo2b1h2OVB5a01NWm1Mb1hHemxvNGZVTElYM3FyL3dWdVFiNTRZeDRWby9xM3ZNVjI0MHJBejFkVFJBY0dUZWdaeVp0R3pqRWcyOE9kZ0ZaVHc5RHpWVkthN0t4WkkySVZ1N1BBRW1yL0hKVVhMTmlLVlJWYzlvMzBkdkhhTC8ybHJGMDlPWmZXVm9TN2U0UmdMdVpWZ2FjbXZBQzE3WGFkaVg4OWNJdG81V1B3aG9mdllya29GcDhJT3VkS2VCR045RGZhemxLOHlYZUkvZlg2NXo5N1BhaFFzdU15TXByeDUxcnhLVWczR21WSmtERHd3eHprNTYyc00rWE9QeHhPd1ZSSlFjVHltYndMWnZUenhtT3I3OG5lZTlFUC9oYkZNMEE2eTRxczcydDBlYkNVTWh1bVVyeS8ySW96VVg2aGNYRythVzRIUTFpc1luN1piVzN0NW9DOUg2S1NVdjFMWTNHMUJGQUNqOFJ6bFVZR0E2WW9PdFRHS2I3blNaZ0J3a3p0UEdpUVNOUGU1cEg5V2FhZzV3UlgyM3E2V3ZCVUZLTkJjbUI0RVkzME45ck9VcnpKZDRqOTlmcm4zcEZod1ZkMFV6RVByaENJdktHOUR3Q3lxc01FSnE1R0lmVUh3ZEYwWGttNzVYQjgvSkVzYllQc0pTalV2cElnbUNTc1dqbzA4S1dKMVg2cm1oei9lb1RPNlJ5WktBanh0cU5ma1J2VVlpU1pKK3lqSEx5Z21aZnZIK2IvWE1zbEVJbG1BcjRlRURLYWpKSWFRVEdUNDBsUUMwOUg3ZkZKT2szOTZ5L1NzZjJNV1Mrbi9UdXVoTkZzd1laNVNYL3dSaVNqc0xhcmthNWZFakFkQzVBT0ZFS09FSVJGdUcyYmJHcGU0dVVoZjFYL1g4cFpOQWZNYnlqYm94d2dXRHl4elJWd1pmb3ZXVXFsalN3RHdvOFk2VGxYQ2xsSklUUkk1cEIrL2M4enMrUmw3UFZpS2RiUjVTS0FRSjlXZG9lL1dBNTg0QThLd05YWVo0bEd1UkttamM0dWFWVzZ3N25ad3kzODhSc0ZBbThPKyt5Wm1ndTNHUTQ2amhPcUE4a2JaWXVIWjVpRUtLR3ZMbHBCK3VyL29UbFhDbGxKSVRSSTVwQisvYzh6cytUTGFYUEhxelpUdXN0VEF5WENpbk9tKzZmOVVsL0lLVkZDZ0RGcjJDUFY0dWVBWENlaUlwVWt6S3hOQU9sNWJua0h2dFVNMjYxb3gzaHpaQjRrL2lFSTVYRlJKY2U1UlNTc1FHYmhjb2FkRS9GUHp4bG42eGRsR0xiL3dNU2E2UmtWcW1HNWZ3Z1FPUEQ2TEI1RmdKakFtT01COVgvditsN1V3NHJVa0c2cGthTkpiQS9qWjBoWjYxakZKWEdkQVdwRFRQYXNxRFdSdk5BSVRMYzI3OFVqY1RjMEpOZkltRHpqaE9wTGpsUVhJQy9PaVh2TWdySUZKZTA0Znp1ZW14Q29hRFcxZjJkR3daZERKWjhxcWZ3V2dNR0t3RncwTFgwa3JiK2JRbDNJdnM2VU12c08vUE93NUNjcjc5c0p6aWVYVExBNTBTdDQzZHZxc1lhNHFRazM0clB4WGs2QnFiUWFnN3Ayd25XNDRUeXRscmxDZHpPazNYYmNYOEFyZ25LcGp0alRSbkppd2lPRUkydU51QkkveFd0MFZEaVZBRXorMmxMQlljdnJ4L2R3dy9qWU5YMTI1QlJieE94MTMvaGdHR1l4a2FpTlJja2dsS0twUkdxSlNBK21pYmtUcGV5cGdTSDlBVmdwVy8vZmROUjRIZlVxVHBHUEJVRHpDY0xPbERMN0R2enpzT1FuSysvYkNjNG53SGRRQWYxeU1vRlZRNkFVRzVpbzM0R2p5ZUlVYUhmU0c2dGhNNy9MNXNMZWx0ajZwTFRwTFhCcjBKYkJzRmNIeXl2TFNOWldjL3NJbi92V1NBSFU5a29MWjBvUlhNUVJjZkJqZjRBMmI3dlA4TVRyTExHakNtK0JEeWhqclUxVHl5dkxTTlpXYy9zSW4vdldTQUhVOXUzTExkRElFMXRQZ2hNODZ5bmIyUXpMSzh0STFsWnord2lmKzlaSUFkVDJXMkV5V013aWZhQ2FVT3NLdVFSVklCQ3QrSzRoOGFDUjUrcmFucnppMk5yT2xETDdEdnp6c09RbksrL2JDYzRuUWUzM3hoU2lJR2t6aU0veDI5anp2WHNQaWZIODVxbWMvTCtoODR3ZHJHM0xLOHRJMWxaeit3aWYrOVpJQWRUMkd4SWRzeDhwL284Qm94U0NZMHpoVHg3d01mTlZobFlRSWRHeFk4Q09wblRMSzh0STFsWnord2lmKzlaSUFkVDJ1L3dHa2ZXalppMC9Xakhtczd4L1k0TmEwcy9GY1pVZjA4bk1ZdmtuZUQ3TEs4dEkxbFp6K3dpZis5WklBZFQyM3ZlQnl2VFVZRUFvR1JRWTZhdG5DVWdTVW0wQ1RNcGJMNm54cGZZcWNOZzVWd3BaU1NFMFNPYVFmdjNQTTdQa0NCc01YRTIxUStEcjBxMkdzeE9WcEI4dkdlUnZVYlhlMG9rZmc3NkVlTzVCZUhCVUxhbmc2cnkrL2RSVjVOM0V5eXZMU05aV2Mvc0luL3ZXU0FIVTl1a3pZSVZFeDVFOG9XYTZFTi9NUVNaemREWW90Vnl2MW5DZVJ5cFJlLy85SDU4d1BUeHVNNStJTng3L3llL2tFejAyTXdvVDdQU1VkM2RrSldmTlZ6M0wwcU5BTlJUZ2M1Tkdqcy9UQ09ubXlQM3pKOEtYM3d1RTlDbDN1TTVKazBJVlpxeHJ2cTUxem5QOWY1b0RYejNPbERMN0R2enpzT1FuSysvYkNjNG5qRm9jZ3ZSNFZNWFkwU2s2U1dlWHdSb2g4dU9aZWM4ZlJJbCtQejYrRWNYTEs4dEkxbFp6K3dpZis5WklBZFQyeWRaR3NFRTJDTUxjYm1JZHljb3dBTXNyeTBqV1ZuUDdDSi83MWtnQjFQYjJ4NGY5dE5ab1NnRXg2ektQL0grSGFpU1gzcnNHQ3VQcnB0Q0FPTkZiYjVSV3ltTXdQczFoejROYU5Rdlp2YXlyeERuWlNqUEEydzRBaTN1SXh4OWh5eXZMU05aV2Mvc0luL3ZXU0FIVTlzMmowK0QvZ1pmT2hjMzJuS3kxUVdUWmt3Qmg2VDNGWGpJd3ZQVzdxbEpXK1YvcEQzZitCVm5KTytURFkyc1JYS1BwQTBUR01BV2NtUXM1bkMrZm1iR05kTnlLQjVJcThwcU9EYUNxdFN5RWFhUHBkR0NMd3Q5eHFtV0FVeWlTM3NzcnkwaldWblA3Q0ovNzFrZ0IxUGJrVTVPN3hndUFma1JSU01icWhWcHFyQnFJQnphVHF3SzFWOWtQcjFvRTYvVDV0OFhIeUh0Z0dEVFFBeXpweUlvNnBadFQyZUZDTjB4V3Z0citMdzcvNlNaVlVwUlV3MkN2STZyNDYrZ0tuZDQ5YzAzbWdXM2tKOGN6RzhLcEw4NERFUmxuR2xQa01UQ2ppQ1djZmlyb2NtY2todnNwVU5yUkZTK2ltWkZZMU0ybHBUSm5zK0FaYW5DZVBSelpnVHVJTEcrRzF0WGV0U0c1K0s0OU5ONXpDRU1RbERSM3ZwZ0ZsclhPeFNZWDM2b29YN29uN2w2VmRSZTZOUFlCWWZLSzVydXBjMURQYmxQWjFqb3BLZVBnWkNKWGtLc211dXJ2UUQzWmhkNjVTMFQ1MU1KaFdvZmswN3hQS2hpMnZLSThDN3BqZjVhVS9UQ01kMkhRbFpWaUNUY3R0LzkwLzZ1dks1cG5zUFFDSGlhTVhGcWRPaWt0c2EzL0grNVlTbEN6ZWZIL3QyTEJZOVJkV3Y1bGhkdWo1anpzVXlUYlN2c0VVaHVmUnJmZDFqc1hZcmxyaVh6SVBOZ1YzUkk3a0wxMWV2RTdKU0d4ZDhTOHVSZysvYkxkeUQ1TlNPTklsTUJ0WnZiK1BEWTMvQmR6NitEUDRVYVFuQmdOREQ5WDlwRXgvV2s2em1yR3RzcHNnVkN4a0t6UDRmY3hCaUxicU5xTWNkUkoxenRiSG5OakJpcXBxWWFscmQ1c2crdWJZbWNWeE9qYU0wNXE5MkV2NSsycVZwT3o3d2g3VHBhZU5EYVdaTHNFcHRrd09HM0ZjVWduWE9rRWt2MHpodDJwWUJ6aWhvVEpCUmxHNzVVc2RxODVCYVdtdkZXVmhtWTlxNGVNS2dDaTRFQ3VOeDh2aW5KYi9XbVhWNkpSSC9QbkwwS3Q2OU5nMkpCVFRQMGQyMVFycHkvZ2dNTGtjUE9BTXc3UU9rU0ZxZ2dWdkhick0wUHlKanpvQ2tBNVZMdDdzOXBWeGVsbklqSUxkRWJwZDhqaEZNSFROelNTTUtJT3d1QnBiQkdOc1JwVzRlT1FnUFQwSDFyVHZPQ0prK2Y2M3pZWWU3R3ZMU3Z1aW43MHBJWGRsWUVYbWVrL2doVUZPa2pMd1dLSk9oK0hWMlUzck1Balg5UFR0b2p0WGxjdEFDdnp1dWhvQ2tVYlJJQ2ZBazlLMTZieDBIcGlEOWE3TVIzMTM4cGRaajZoLzhzcnkwaldWblA3Q0ovNzFrZ0IxUFpncWp2ekxoUm5VMithaFFaenFYaXN5eXZMU05aV2Mvc0luL3ZXU0FIVTl2UkFjZlJtV2p4aTJUNndhSTcwNHVMaWNJRmE2d1JOUUNpN3JnQS9VSFlJenBReSt3Nzg4N0RrSnl2djJ3bk9KK1pZekJtNkVkbUJHYWRBNW9jTFdBQjBwa0xpZGpNVTRRRHduOVV1bjRpWnRKdXRjeGR2TFVBTGl3MTgxcW1ua01zcnkwaldWblA3Q0ovNzFrZ0IxUGFiRjloSm10ZjNNd25kcWl2d2RIMUJjM1EyS0xWY3I5Wndua2NxVVh2Ly9jb0NaeWhIcFNFZ213bFI5aU1ENkdQTEs4dEkxbFp6K3dpZis5WklBZFQyL0lERUZFK0xQZ2xYcGEvV2lOQ2t2MSswZllmMG9UT1dOMTNVUElUbzUrdkxLOHRJMWxaeit3aWYrOVpJQWRUMkZmZWFEUTZJeXRIS1dFcVJIWnRPUEI3YmcrUW1HaEcwY2l0bjg3bndOQVluUFFGYTI2RVlxUUdpczhhRXFVQldZS29FYURJVTY4eC9jUXUrcFBRTjQ4c3J5MGpXVm5QN0NKLzcxa2dCMVBhT1Z4Uitsd2R5amtzWk9oSnIwOExGeXl2TFNOWldjL3NJbi92V1NBSFU5dkp6TCtkbHJibnNCZVJzdTJkN1U2M1huc3NUZGdrMU93bTdBWmU5bmdqUXl5dkxTTlpXYy9zSW4vdldTQUhVOXJzeFd3NnhvRGlDejNRV2xFbzNEcWZqRWx5L3hnTkEzV1RmRGluRm9XL3N5eXZMU05aV2Mvc0luL3ZXU0FIVTlpMDlKOWE4L041R0NwOTBYYyszVFV0bm1SdkZXUHZScmdBWXFobDRUVFRneXl2TFNOWldjL3NJbi92V1NBSFU5ancwZlFCZlk5UFpXMzJwVFNGZy9EbzJ5UkRMOGVwVEgxWEtobE1tV093N3l5dkxTTlpXYy9zSW4vdldTQUhVOXZUNXQ4WEh5SHRnR0RUUUF5enB5SW9nMVVBMFpzWXdQVmhDV2x5ait2Y0R6cFF5K3c3ODg3RGtKeXZ2MnduT0p4Wk9udDRFMU4xd0pjczIwZEMvRCtLMVNnaHZnN2pBUDdkcDh3K09OWEI2RWZYL2hFemlFcUI1d2o4aDluZnVEOHNyeTBqV1ZuUDdDSi83MWtnQjFQYVlPeC9ZalpHelNXYXliTFNTWVhXS01QU2gyamJpT1RtVlA3MC9yU3BiOE1zcnkwaldWblA3Q0ovNzFrZ0IxUForaVE4WHE3cHJSNkJkSUsyVXNQQnpFNDV4eGg2djEyRGZoYWFMMklmbFhqdWpZcERwczJJSTdUYWszblVaK2c3TEs4dEkxbFp6K3dpZis5WklBZFQyK0VKaUJwZjdNbmxnK0lXNytDZlhURGI3dHoybWJPUlZpYWdTVFNjYXFKdkxLOHRJMWxaeit3aWYrOVpJQWRUMkUvVktTWWpsdGdHWHRFYWNuNWJ0SnNzcnkwaldWblA3Q0ovNzFrZ0IxUGFXTE1WYU9WRzQvZTFWUFRTQXpZOUg4N09DSlhleCtpQU9vVytLQW5yaUIzSm5hNTZNaEh0akhoVDNYcnU0MHd0bStDRVdYdW9ZOFhFSkZkdmNGY0g3Q1Q0YVJldnRrN3FmcklHMFBwdlMzY3NyeTBqV1ZuUDdDSi83MWtnQjFQWjRnb0FSY0JpN1B1YjJLOVRYam1Bd29jZWZEVHJXTWhEdXBhd1BxUVhTRkI0QVQ5NEtzWlJzWFp0V0UzOTd4MU5aSHkyanZKSGk3bUZESzlRSnlCdnhVejBHNWtQWmhtL3lwMVp1YXlHOGF4YmJVNmYxZURhbml3TzJaMFhNaTV0YlZYYnFpS1VWakpjVm42L3NRY1R3NEVSdE5xZ1RCeTlSSXV2dy9aVEpUaUhHbHpCOFpMZXFheHk1czh5Y2U2cTc0ckhWOFNKTVNSVlBQcXpPdFVWMHl5dkxTTlpXYy9zSW4vdldTQUhVOWpjWWVUZTlPcC91ODNQeUFTdzkxd0xtdEpYN2t1SnNNeVFDdTJxdDZlK2s2WDlLdGJBSE4yQld6N0tBejVQcE56WDZBcVBRUC9yaWgvbUdwOFE0UEFTaUV5T1RUOGo1RXAyTFR6ME9DZ3h2eXl2TFNOWldjL3NJbi92V1NBSFU5aVJqYTVIZHdZWjQwU3JHQWQrSjZKWUorM3hpR2VTdFVBVkZ6dkJtaU5vVzdhMWtnbWs1TStPN1RwQ0JRNFFSTlZGWDFMNnJRZnFWK09jRk9kbFcxRDBJYXNtdG1qYTNBdEdaNm5GNzYwMWl2SFkzTGp1d1J4bzNrZHFUc2RXVWVNNlVNdnNPL1BPdzVDY3I3OXNKemlmclpIL3lOdjdTRFV4Qjd2NTRaMXl4MzRlOE1qRjNabnJ2a3RlVjUzRHUxT0svczdCNkRaQ3NtYTJNL1QyMGMvLzZ0bVllUG9TVDdTR2twWUJrUjVPRFhUOC84VTRRbVo2ckhpNFVtUDNjUENmWDFCSEVoMXI1UEg2Y3A4UGdaR0ROb0s2K3RqUm0yTFJFNjRkVm1mYXh3SGVsRDFsb0Vlc0N5RDUwMUg3UlkxTTlCdVpEMlladjhxZFdibXNodkdzSHFzemxtSnk2ekVwZFlxdFVQMDc5eUo3MTFqUGFaQ0w1VHJIZFR5aFNqdlhqajNlQ3o1d2NiZ1lXZG5ydFNGeUVpdGNONWJTdkF6UGpCTmZxT2hzUEF5OTh4c2ZVQ2FVTzdFaDBFZUZNSGNzcnkwaldWblA3Q0ovNzFrZ0IxUGJaeWlPbzVQWk9jejFUbkd0VjJBRnQ4dXMyRCtQbmpXQy8zZ0FMb0RJVjBYTkc2NUhNZHVzUzk4R0RubDU3QWFyTEs4dEkxbFp6K3dpZis5WklBZFQyQWtxeGFQcUhhYkJTZGd1K1JKU0NCZnMrTUZkSFVZTU0xMzh1S293K1c4V1B6bVJER1hMamxtL1RVYnMyS2F2MWMxNTdaTUY1VUhJWTZ4ZGJVcHIyemdIb2ZJSXdYd2RLTDFHV0JDQ2Q5VXowbmx5dHhVRTY4OVFha1NtK0x1aCs0QnpKbDYxSEFiN1prdnpUWWtKM0Evcy8xZVBpUHNLdW05ZU83R1lMNTR2RWYzbnJ2U3Q1MVMzTU0yQnk5QXNUc0lpUVV6MTB1TXlQOFJJbnFjMDBxOHNyeTBqV1ZuUDdDSi83MWtnQjFQYmJmcFpKNGRoYS9XM0RFaW5ITTcxY2l0cjJuclJWQmlVTnhnYXhQK0ROalZYVWQrRzhvVkRyNWVlTVBScXRZaFk4NzNMbHlCSzRLOVEvejdvQlpvVGxtT01COVgvditsN1V3NHJVa0c2cGtiaFB5NFZtT0pETHF2blI0SmI1Smo4Vjl2MUhhZ0Z1TzFLSWJVT0lHQWRQY0JiSUE5MEREbHorL0lrbnNjVHBxZUZGWk5JRXltZ1MrNlJpMXgrSlNIL0xLOHRJMWxaeit3aWYrOVpJQWRUMkp1SDNFUUFTdzdEYXI5ejhNbGVlNk9sM0YwbnVHSFpnNmIxcHgyRU45Rm8wT0R1ODJQVjBKSU04c2pPdzhSYS94QXZQc3RzTFVjNE5oMGdiY3pvdnZtVEdocFZYaVQ1eTZxbmZIcGZwcFhPTElFcWJ2VDZVSWhGZmhVNmExZlR4M3ZpVHVxRWIyUHB0WC9SRzRvVFB3Z0Nhelh0eVl5c2VwTzIrNnlpdlcydkxLOHRJMWxaeit3aWYrOVpJQWRUMnVlRWZRanFxOWN2UDBVTDFnWmRiZm9aN0FWOG54ZVFRVE5HTCt6MnB1cWZMSzh0STFsWnord2lmKzlaSUFkVDI5NHA0NlVzL2craXVXSEEyc2RIdUVKcWJtcDM0cDZDU1FSSTRieVJCQjZuT2xETDdEdnp6c09RbksrL2JDYzRuQlhOUEw2cjhpNmJuYmUrUUpLWU1BMU05QnVaRDJZWnY4cWRXYm1zaHZHdld3TTZwVW1FT0liS3NxcU5wM2JwTUl2VlV2UWliMHdjQWhPMmNvUGI5UjdUV0piRDgvano5LzNxa2pPZkc5bGMxaU9iQXBlcDN1aHN0Q2duUVVydnloNUdKVWhqdWdxZytIT29NOE5XeGthRE8rNjhqZ1lDcFcrQ1NkeXVoUlVlV1Z4Vkt1V3J3MXBQdTB0QXgxTlJSZ1RmbXlVNlBJQUdFS2V2NjBqWDM0OVpPMjMvOGw4M2VRMHBBRUcwNG9yM3hEdWlTL0hpdVY3MC9aTmJNcGpjTncyQXVENGlEN1hCeHNpNjB6TFFCYThzcnkwaldWblA3Q0ovNzFrZ0IxUGJzbmdabjdhQmZ1L1dtalF5dW9kVnRPMUxXTEtSRTgzWk8ybUYvNTlJYUJzc3J5MGpXVm5QN0NKLzcxa2dCMVBhSHAyK2Q1dGVZSW1rZXF1V3ZVdHY0TEdRY0haMGpNbXBtN2VnQU5EOTQ3TlB0TTZQSit6M29BYTc2NHA2STVjSGl3cWRTc25tM2tKZjhJYW1icURQeUJwZ2U4elkyRzlPTVpCOEtsQmt3TjBIZ05sNjA2R3lQeEZDRzJFTXRIUVBWVnRmZzh0QzZXelJ1VTJvZjQ0bDJuQ2Z1TUtVSG4zRmdRcGVaaTVjeVRHL0s4NjNVd1RqS0srcnE2bHI4ZGxUTEs4dEkxbFp6K3dpZis5WklBZFQyaERtWkF4TmdpbVB4MU94ZEhDUmwwczZmQUdwc0N4Y2dYNFdaNkVXdkpReXhSS2s4UlJTNkVqVW14bkdWUk9RSHl5dkxTTlpXYy9zSW4vdldTQUhVOW9BNm5LZmM3ZHUvZ0d4MlVCek84M3ZNeERoVGhqaFFHSStkb0E2a2ZmZWx5eXZMU05aV2Mvc0luL3ZXU0FIVTlwNmlrRVkrU3BIOURDMmUreUNtSjF6YTZXa3VndXM1N1h5bXVuOWxPUlcrUFBUQi9nc3lvdS9wbHp3aFExNlZMTXNyeTBqV1ZuUDdDSi83MWtnQjFQYXdPNXNsRmZvZ05rL09QeTNCRHBKeVpvbkVlQVM1b2FHbHorbStaZjlYSWw1N0NLYWdwWXVlbDdJNXByeWJpU2FOUG1sK0c0d3VtMEJnR29pbjZ0Sk03bU5CWkdiTlRZRHNBbXlwVU1YR0Zzc3J5MGpXVm5QN0NKLzcxa2dCMVBhc0JabFl0dWtQZmJ4ZFdCd2NnSmh4TWY1dFdNeDRxNVB2QUVzbEUzbWVlYTlXMzVOMTBibkFjajVRWWQxOWQ1Yk1QWFZGTFFKWGRUWHdTS0U4SHBmdFRvM1lpdUJBSStybzVSWXcyYkJwSGN4WGRRUkpNVUlXZzVsYUtBRDVycUZyMHltcWZEMEpBUXh4WVl1b05kRGYrVzFmaEZ1WVpYaGFKbjVyVVBIblp6enZjdVhJRXJncjFEL1B1Z0ZtaE9YTEs4dEkxbFp6K3dpZis5WklBZFQyQWNqQktYb1pWSzRJK2puV2hCenlBM2J4b1NxeXlJOG10ZGNnYWRpekxjekxLOHRJMWxaeit3aWYrOVpJQWRUMm13ZVBlNDFIVEk2TWhKbEFWZCtGMWNzcnkwaldWblA3Q0ovNzFrZ0IxUFk0OTltcDhTcy9DM3g4bVdpamNVZWhqRHhzSXhLQWNYVjU3Mk9JS0UwZVpNc3J5MGpXVm5QN0NKLzcxa2dCMVBiUVRhTVZTME4wT2tVdkxqUDFVaXRqeXl2TFNOWldjL3NJbi92V1NBSFU5dnNqMGRHVUJTWTBBb3phbm0rQ1F3RjNBVlV0T1pjSlpiNUFpZ0s2cnE3bUczYTk0M1VxL2xDK0p0TlJSaTNLWUdlZ3hjWjJHNnI3L0RNelgvUS9KcmhUQnVHZGduVlZ1cHJ3Y1E4dlFnbnZvaE1qazAvSStSS2RpMDg5RGdvTWI4c3J5MGpXVm5QN0NKLzcxa2dCMVBhdVV6UVZuSDBQcysyUVVFaGRpSTlCVUwvdG9WWTR0MEwyQUFSNGNOYTY5Y3NyeTBqV1ZuUDdDSi83MWtnQjFQWmFsSC9OOVNHL0NDdGh6aThEWDhpS3huWXdHOVE1d1BrL2Q5VUl5WHYzUWZ5QXhCUlBpejRKVjZXdjFvalFwTDlmdEgySDlLRXpsamRkMUR5RTZPZnJ5eXZMU05aV2Mvc0luL3ZXU0FIVTlyckhFd1N6Ym42d05zWEJnK015S0NvRkpQdHZ5Q3VUWElsMmVkMmhIbHUveXl2TFNOWldjL3NJbi92V1NBSFU5akNycWd0SENpNW9JbHNNMElMM0xBSGtTVmRqakt5VGpkU1d2bkNkOUJ3V1dBeFBQMGEySEJXS2hWR2d5bEc4bk1zcnkwaldWblA3Q0ovNzFrZ0IxUFkvdjdOUlRWQmJUL1RLOUlvNHNQL0MxNlJldFBwM21KTXNrZ0ZRaTN0eU82TGpScUJQNENiOEFWcWFseHJ1YXVUWElqMzFidGFFNDcxT05pem43UmJPQ0dySnJabzJ0d0xSbWVweGUrdE5ZbFdoOFpsVnhyaDdMV29ybm8xUWdGdkxLOHRJMWxaeit3aWYrOVpJQWRUMmZNeWdIbk5HeTErb3hNcTd4SGFpVWN3aHdRWjVVMytNdVFoeW5sMXExNlYyOGFFcXNzaVBKclhYSUduWXN5M00vMW9qdENHMk9rOWNoQXZkYzlidjdyTkVTaVNFKzkxRndralpOZVVjRVJtaUdkbVlhYUpZTHRUaWpTNlNUSThERVJvNDJjaFhDVVAwT21pVzc5QzZSSXczYmVTYWFWdUJLYjRqS2gvcVhVWDNpbmpwU3orRDZLNVljRGF4MGU0UUR1Y25hKzZXSVhGalU3YU45ZVVyRHBiS1JKL0pvUnE0N2Y5Y2lkbHVIMkR6MGR5Sjd6SVdJS1NPazBsQ010RHZuZ0RreFVkQ3NEd3Ntamh4MFhKUk9uTzFHcGxWL0dHMExweko0amhZQmgvOFNGd3dmcFczNTRySXErakRab2h6dG9TbnlkcHlXbXJjS1o0bDZrU0x1UFhOSDVVVVRyMURKdFN4MXZrNkNVTFBPdFU5bXNtRy95M2prbG9ndW9pWE5kZStGR1BFdXAwV3BnYnJTcVRla1EvTC80djlRTWl1OUFxTGtQaUNoY1U4NzNMbHlCSzRLOVEvejdvQlpvVGxoRWFQT1VUeDY3MFRPY1lsQ2d3ZDN2aExlVlhGVDVaQkxSMkFnWFNoMnNrODczTGx5Qks0SzlRL3o3b0Jab1RsUGo0OTFJQ0FFN1p3ZCs1MlhvcklvbEhyQS9BOFdueW1DOXZhOXFCUnpSV1ZyY0MzZ3FNSDBjbUpxY0ZHaWJOeE1JZ0hGSlFNTVNsWFcyR2tneWFoTVZ3bUwwYVM0TjloUFkrY3UwTENLa01MMERuQkxWeUVGYWdUUi9hREdTdDJwOHJhOGIvOXRtamRRa1JyckVBaWJvUjc2QlJNMk81VUVCWVNzOUpBR3dlYzduYjE4UlBOb2FpdHlGdHQwUE5XWVpiRUdaSUdienVOVzZIR2h4Z1lNWnp1ZHZYeEU4MmhxSzNJVzIzUTgxYVJFaGY0Rk1sZzBYN2wxWFZURW91YmhaQnQyWmRoaUh6WlEvczAzdWxKQU02VU12c08vUE93NUNjcjc5c0p6aWU2c2RUVEVOMTY1V2FybjlZTlBXNkVQTzl5NWNnU3VDdlVQOCs2QVdhRTVZYjNsSlpZVTRxOHFmS3VrbFFwUStic1p3YmxDaituUS9Ja0EyRW4rRndwS1ZtYjBwQmFiN1F0U0VNWlhOWkJtekwxRUwwZCtDUzlGUHFhVzhjdTRwaFVWcXIwZDZaRzI5WjZWVm9MM09FQm1oNVFxZHJtbllnREJ5M0tIZ2hHZFNmWDFCSEVoMXI1UEg2Y3A4UGdaR0FGbkVvOXFZSHFLa3pyODJlZzB1VnZLc2dRRWY4ZXBjd29IOEFwRlhPWEZhZktzRVV6ZVJVTHRIT0JqdTFKVUdwd1JFd2F5QkZNUW1EeXRNMDN4SVZZZjVDN1Zld3R6VGxOcmRZSnVlbFZuWEhPcURrVW95d0hmdnQvNHN6MmlZR2lVUFFuYWxBQk0wWG85aHY4ZWdJZzQ3cC9oWnFrNk5nTERKR3ErQloydm0vTmJiVktkTjBQZUZqYjZoS05PaGFQOE14cElYRlZ4bnN5aGFYYWlmd2EwWkRNYTBNQW5uNVBlR0F4eHloenZ6RlZLVGgyeGlLREI2UWJSSmNsa2pvemU4MnNNaG55djlsVDU1WSttOXFCNjdDSG1Va0FiUHQ3WnBMWkNTZFdqZCt2dmVQQ0R3MC9VaXc0SFgzLzZKclRtZ2xEOEErM3NUWm8yVy9UUE5icmVVTFdZSWh1U1ZGcVltcG1wckp4Z1dpb0Q3b3JyTFpyTEVHNkYvRHJiU2lsd1RiSFhyeEEwTTAwdDc2cGVNeG9OcWJOdWlZODZENlNjOFFrU2htMjRXT1kvT2F1Q00wWUkyM2RmNEQ0d1lFcFBzTVZVUzdxYk1acENJSnE2SGREY1FuNW1BK2ZnM1lqdnFZa1UwVEp0aEVhT05uSVZ3bEQ5RHBvbHUvUXVrVGk0ZjBxc1NyL3h6MCtVclh4TzFQelE5MDluZHFPTk96ZzlkSWgxU1VSdHM5WGo4Y2RoeTFoaE9SZTdJY0VqNUw2U1MrQ2lzbHB5M21wbWpNNk1rMk0zR25ESGplS0VtMTRHSThDV21YY041N283UDdpcm9BRFNIQjcrTFpicTdDV0dCamJvSGU2UUxYa09PZFo2YWRpaGp4dWZWT2puN3F6cnUvbDk5MXQrT29saUNWczdkRGJwbWRhbE16OGhUZml3eHNjR3dJRUErQmJVVlVrOUw1RHpGTFhSY0dUcHQ2WXNtSzJtcUQ0anVrWE14RU9YZUNaM2ZvS2xKYmloQWw4MjVCMFZuS0psVzFwaHFpOWE0M2FTaGtwcEhRTHRrZjF2VytySGZhdkxvMlNITEZLeXMvNnkvcDVkcGJSbmg5Wld0ak1CdFVyMmtjcGZWSTNUcTJhQmVYaER6U2RFNWtVVGxYdEFlQzZiakZmZGdJQXVUM2kvLysreWtjb1YreE54L1UxeStDVUhHVjFGczZlSGlielxcXCIpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLpmL/ph4zkuIDnuqdcIixcInBhdGhcIjpcInNoYXJpZFwiLFwicnVsZVwiOlwianM6XFxuLy92YXIgaXRlbXMgPSBbXTtcXG5mdW5jdGlvbiBmb3JtYXREYXRlKF9kYXRlLCBfZm10KSB7XFxuICAgIGxldCBmbXQgPSBfZm10IHx8IFxcXCJ5eXl5LU1NLWRkIEhIOm1tOnNzXFxcIjtcXG4gICAgY29uc3QgZGF0ZSA9ICFpc05hTihfZGF0ZSkgPyBuZXcgRGF0ZShfZGF0ZSAqIDEwMDApIDogbmV3IERhdGUoX2RhdGUpO1xcbiAgICBjb25zdCBvID0ge1xcbiAgICAgICAgXFxcIk0rXFxcIjogZGF0ZS5nZXRNb250aCgpICsgMSwgLy/mnIjku70gXFxuICAgICAgICBcXFwiZCtcXFwiOiBkYXRlLmdldERhdGUoKSwgLy/ml6UgXFxuICAgICAgICBcXFwiaCtcXFwiOiBkYXRlLmdldEhvdXJzKCkgJSAxMiA9PSAwID8gMTIgOiBkYXRlLmdldEhvdXJzKCkgJSAxMixcXG4gICAgICAgIFxcXCJIK1xcXCI6IGRhdGUuZ2V0SG91cnMoKSwgLy/lsI/ml7YgXFxuICAgICAgICBcXFwibStcXFwiOiBkYXRlLmdldE1pbnV0ZXMoKSwgLy/liIYgXFxuICAgICAgICBcXFwicytcXFwiOiBkYXRlLmdldFNlY29uZHMoKSwgLy/np5IgXFxuICAgICAgICBcXFwicStcXFwiOiBNYXRoLmZsb29yKChkYXRlLmdldE1vbnRoKCkgKyAzKSAvIDMpLCAvL+Wto+W6piBcXG4gICAgICAgIFxcXCJTXFxcIjogZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSAvL+avq+enkiBcXG4gICAgfTtcXG4gICAgaWYgKC8oeSspLy50ZXN0KGZtdCkpIHtcXG4gICAgICAgIGZtdCA9IGZtdC5yZXBsYWNlKFJlZ0V4cC4kMSwgKGRhdGUuZ2V0RnVsbFllYXIoKSArIFxcXCJcXFwiKS5zdWJzdHIoNCAtIFJlZ0V4cC4kMS5sZW5ndGgpKTtcXG4gICAgfVxcbiAgICBmb3IgKGxldCBrIGluIG8pIHtcXG4gICAgICAgIGlmIChuZXcgUmVnRXhwKFxcXCIoXFxcIiArIGsgKyBcXFwiKVxcXCIpLnRlc3QoZm10KSkge1xcbiAgICAgICAgICAgIGZtdCA9IGZtdC5yZXBsYWNlKFJlZ0V4cC4kMSwgKFJlZ0V4cC4kMS5sZW5ndGggPT0gMSkgPyAob1trXSkgOiAoKFxcXCIwMFxcXCIgKyBvW2tdKS5zdWJzdHIoKFxcXCJcXFwiICsgb1trXSkubGVuZ3RoKSkpO1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIHJldHVybiBmbXQ7XFxufTtcXG5cXG5mdW5jdGlvbiBmb3JtYXRTaXplKHNpemUpIHtcXG4gICAgaWYgKCFzaXplKSB7XFxuICAgICAgICByZXR1cm4gJyc7XFxuICAgIH1cXG4gICAgY29uc3QgdW5pdHMgPSBbJ0InLCAnS0InLCAnTUInLCAnR0InLCAnVEInLCAnUEInLCAnRUInLCAnWkInLCAnWUInXTtcXG4gICAgbGV0IGkgPSAwO1xcbiAgICB3aGlsZSAoc2l6ZSA+PSAxMDI0KSB7XFxuICAgICAgICBzaXplIC89IDEwMjQ7XFxuICAgICAgICBpKys7XFxuICAgIH1cXG4gICAgc2l6ZSA9IGkgPyBOdW1iZXIoc2l6ZS50b0ZpeGVkKDIpKSA6IHNpemU7XFxuICAgIHJldHVybiBgJHtzaXplfSAke3VuaXRzW2ldfWA7XFxufVxcbi8vbG9nKHJlYWx1cmwpO1xcblxcbmlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgY2xlYXJNeVZhcignbmV4dHBhZ2UnKTtcXG59XFxuaWYgKE1ZX1BBR0UgPiAxICYmIGdldE15VmFyKCduZXh0cGFnZScsICcnKSA9PSAnJykge1xcbiAgICBsb2coJ+ayoeacieS4i+S4gOmhtScpO1xcbn0gZWxzZSB7XFxuICAgIHRyeSB7XFxuICAgICAgICAvL3ZhciByZWZ0b2tlbiA9IEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vZmlsZXMvcnVsZXMveHlxL2FsaXRva2VuLmpzb24nLCB7fSkpLnJlZnJlc2hfdG9rZW47XFxuICAgICAgICB2YXIgcmVmdG9rZW4gPSBKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL2ZpbGVzL3J1bGVzL2ljeS9pY3ktYWxpLXRva2VuLmpzb24nLCB7fSkpWzBdLnJlZnJlc2hfdG9rZW47XFxuICAgICAgICB2YXIgc2hhcmVJZCA9IGRlY29kZVVSSUNvbXBvbmVudChyZWFsdXJsKS5zcGxpdCgnY29tL3MvJylbMV0uc3Vic3RyaW5nKDAsIDExKTtcXG4gICAgICAgIGxldCBnZXRzaGFyID0gZmV0Y2goJ2h0dHBzOi8vYXBpLmFsaXl1bmRyaXZlLmNvbS9hZHJpdmUvdjMvc2hhcmVfbGluay9nZXRfc2hhcmVfYnlfYW5vbnltb3VzJywge1xcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgYm9keTogJ3tcXFwic2hhcmVfaWRcXFwiOlxcXCInICsgc2hhcmVJZCArICdcXFwifScsXFxuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcXG4gICAgICAgIH0pO1xcbiAgICAgICAgbGV0IHB1c2huYW1lID0gSlNPTi5wYXJzZShnZXRzaGFyKS5maWxlX2luZm9zWzBdLmZpbGVfbmFtZTtcXG4gICAgICAgIC8vdmFyIGxpc3R5cCA9IEpTT04ucGFyc2UoZ2V0c2hhcikuZmlsZV9pbmZvc1swXS50eXBlO1xcbiAgICAgICAgLy92YXIgcGZpbGVpZCA9IEpTT04ucGFyc2UoZ2V0c2hhcikuZmlsZV9pbmZvc1swXS5maWxlX2lkO1xcblxcbiAgICAgICAgdmFyIHNoYXJldG9rZW4gPSBKU09OLnBhcnNlKGZldGNoKCdodHRwczovL2FwaS5hbGl5dW5kcml2ZS5jb20vdjIvc2hhcmVfbGluay9nZXRfc2hhcmVfdG9rZW4nLCB7XFxuICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICBib2R5OiAne1xcXCJzaGFyZV9wd2RcXFwiOlxcXCJcXFwiLFxcXCJzaGFyZV9pZFxcXCI6XFxcIicgKyBzaGFyZUlkICsgJ1xcXCJ9JyxcXG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICAgICAgfSkpLnNoYXJlX3Rva2VuO1xcbiAgICAgICAgLy9sb2coc2hhcmV0b2tlbik7XFxuXFxuICAgICAgICBsZXQgbmV4dCA9IGdldE15VmFyKCduZXh0cGFnZScsICcnKSAhPSAnJyA/ICcsXFxcIm1hcmtlclxcXCI6XFxcIicgKyBnZXRNeVZhcignbmV4dHBhZ2UnKSArICdcXFwiJyA6ICcnO1xcbiAgICAgICAgaWYgKCFkZWNvZGVVUklDb21wb25lbnQocmVhbHVybCkuaW5jbHVkZXMoJy9mb2xkZXIvJykpIHtcXG4gICAgICAgICAgICAvL2lmKCFsaXN0eXAgPT0gJ2ZvbGRlcicpe1xcbiAgICAgICAgICAgIHZhciByZXNjb2QgPSBmZXRjaCgnaHR0cHM6Ly9hcGkuYWxpeXVuZHJpdmUuY29tL2Fkcml2ZS92My9maWxlL2xpc3QnLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXFxuICAgICAgICAgICAgICAgICAgICAnWC1TaGFyZS1Ub2tlbic6IHNoYXJldG9rZW5cXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgYm9keTogJ3tcXFwic2hhcmVfaWRcXFwiOlxcXCInICsgc2hhcmVJZCArICdcXFwiLFxcXCJwYXJlbnRfZmlsZV9pZFxcXCI6XFxcInJvb3RcXFwiLFxcXCJsaW1pdFxcXCI6MTAwLFxcXCJpbWFnZV90aHVtYm5haWxfcHJvY2Vzc1xcXCI6XFxcImltYWdlL3Jlc2l6ZSx3XzE2MC9mb3JtYXQsanBlZ1xcXCIsXFxcImltYWdlX3VybF9wcm9jZXNzXFxcIjpcXFwiaW1hZ2UvcmVzaXplLHdfMTkyMC9mb3JtYXQsanBlZ1xcXCIsXFxcInZpZGVvX3RodW1ibmFpbF9wcm9jZXNzXFxcIjpcXFwidmlkZW8vc25hcHNob3QsdF8xMDAwLGZfanBnLGFyX2F1dG8sd18zMDBcXFwiLFxcXCJvcmRlcl9ieVxcXCI6XFxcIm5hbWVcXFwiLFxcXCJvcmRlcl9kaXJlY3Rpb25cXFwiOlxcXCJBU0NcXFwiJyArIG5leHQgKyAnfScsXFxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgLy9sb2cocmVzY29kKTtcXG4gICAgICAgICAgICB2YXIgbGlzdHlwID0gSlNPTi5wYXJzZShyZXNjb2QpLml0ZW1zWzBdLnR5cGU7XFxuICAgICAgICAgICAgdmFyIHBmaWxlaWQgPSBKU09OLnBhcnNlKHJlc2NvZCkuaXRlbXNbMF0uZmlsZV9pZDtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgdmFyIGxpc3R5cCA9ICdmb2xkZXInO1xcbiAgICAgICAgICAgIHZhciBwZmlsZWlkID0gZGVjb2RlVVJJQ29tcG9uZW50KHJlYWx1cmwpLnNwbGl0KCdmb2xkZXIvJylbMV1cXG5cXG4gICAgICAgIH1cXG4gICAgICAgIC8vbG9nKGh0bWwpO1xcbiAgICAgICAgaWYgKGxpc3R5cCA9PSAnZm9sZGVyJykge1xcbiAgICAgICAgICAgIHZhciByZXNjb2QgPSBmZXRjaCgnaHR0cHM6Ly9hcGkuYWxpeXVuZHJpdmUuY29tL2Fkcml2ZS92My9maWxlL2xpc3QnLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXFxuICAgICAgICAgICAgICAgICAgICAnWC1TaGFyZS1Ub2tlbic6IHNoYXJldG9rZW5cXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgYm9keTogJ3tcXFwic2hhcmVfaWRcXFwiOlxcXCInICsgc2hhcmVJZCArICdcXFwiLFxcXCJwYXJlbnRfZmlsZV9pZFxcXCI6XFxcIicgKyBwZmlsZWlkICsgJ1xcXCIsXFxcImxpbWl0XFxcIjoxMDAsXFxcImltYWdlX3RodW1ibmFpbF9wcm9jZXNzXFxcIjpcXFwiaW1hZ2UvcmVzaXplLHdfMTYwL2Zvcm1hdCxqcGVnXFxcIixcXFwiaW1hZ2VfdXJsX3Byb2Nlc3NcXFwiOlxcXCJpbWFnZVxcXFwvcmVzaXplLHdfMTkyMC9mb3JtYXQsanBlZ1xcXCIsXFxcInZpZGVvX3RodW1ibmFpbF9wcm9jZXNzXFxcIjpcXFwidmlkZW8vc25hcHNob3QsdF8xMDAwLGZfanBnLGFyX2F1dG8sd18zMDBcXFwiLFxcXCJvcmRlcl9ieVxcXCI6XFxcIm5hbWVcXFwiLFxcXCJvcmRlcl9kaXJlY3Rpb25cXFwiOlxcXCJBU0NcXFwiJyArIG5leHQgKyAnfScsXFxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICB9IC8v5Y+W5paH5Lu25aS5XFxuICAgICAgICAvL2xvZyhyZXNjb2QpO1xcblxcbiAgICAgICAgaWYgKEpTT04ucGFyc2UocmVzY29kKS5uZXh0X21hcmtlcikge1xcbiAgICAgICAgICAgIGxldCBtYXJrZXIgPSBKU09OLnBhcnNlKHJlc2NvZCkubmV4dF9tYXJrZXI7XFxuICAgICAgICAgICAgaWYgKG1hcmtlci5sZW5ndGggPiAxMCkge1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcignbmV4dHBhZ2UnLCBtYXJrZXIpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoJ25leHRwYWdlJyk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgdmFyIGNvbnRzID0gSlNPTi5wYXJzZShyZXNjb2QpLml0ZW1zOyAgICAgICAgXFxuICAgICAgICB2YXIgdHVpc29uZyA9IFtdO1xcbiAgICAgICAgZm9yICh2YXIgaSBpbiBjb250cykge1xcbiAgICAgICAgICAgIHZhciBsaXN0eXAgPSBjb250c1tpXS50eXBlO1xcbiAgICAgICAgICAgIGlmIChsaXN0eXAgIT0gJ2ZvbGRlcicpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGNhdGUgPSBjb250c1tpXS5jYXRlZ29yeTtcXG4gICAgICAgICAgICAgICAgdmFyIGZuYW1lID0gY29udHNbaV0ubmFtZTtcXG4gICAgICAgICAgICAgICAgaWYgKGNhdGUgPT0gJ3ZpZGVvJykge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gJ/Cfk7onICsgY29udHNbaV0ubmFtZTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjYXRlID09ICdkb2MnKSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSAn8J+TlicgKyBjb250c1tpXS5uYW1lO1xcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNhdGUgPT0gJ2ltYWdlJykge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gJ/CflrwnICsgY29udHNbaV0ubmFtZTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjYXRlID09ICd6aXAnKSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSAn8J+TpicgKyBjb250c1tpXS5uYW1lO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gY29udHNbaV0ubmFtZVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAkKGNvbnRzW2ldLmZpbGVfaWQpLmxhenlSdWxlKChzaGFyZUlkLCBzaGFyZXRva2VuLCBjYXRlLCBmbmFtZSwgcmVmdG9rZW4pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYWxpbGF6eVxcXCIpKHNoYXJlSWQsIGlucHV0LCBjYXRlKTtcXG4gICAgICAgICAgICAgICAgICAgIH0sIHNoYXJlSWQsIHNoYXJldG9rZW4sIGNhdGUsIGZuYW1lLCByZWZ0b2tlbiksXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBmb3JtYXREYXRlKGNvbnRzW2ldLnVwZGF0ZWRfYXQpICsgJyAgJyArIGZvcm1hdFNpemUoY29udHNbaV0uc2l6ZSksXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBjb250c1tpXS5maWxlX2lkXFxuICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzEnXFxuXFxuICAgICAgICAgICAgICAgIH0pOyAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn8J+TgicgKyBjb250c1tpXS5uYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCdoaWtlcjovL2VtcHR5JyArIGNvbnRzW2ldLmZpbGVfaWQgKyAnPz8/ZnlwYWdlJykucnVsZSgoc2hhcmVJZCwgc2hhcmV0b2tlbiwgcHVzaG5hbWUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9ydWxlbG9vcCcsIHt9KSkucnVsZSk7XFxuICAgICAgICAgICAgICAgICAgICB9LCBzaGFyZUlkLCBzaGFyZXRva2VuLCBjb250c1tpXS5uYW1lKSxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnZmxleF9idXR0b24nXFxuICAgICAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgIH0gLy9lbmQgaWZcXG4gICAgICAgIH0gLy9lbmQgZm9yIGlcXG4gICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgaXRlbXMucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfmrKfmrKfvvIzmiqXplJnkuobjgIInLFxcbiAgICAgICAgICAgIHVybDogZGVjb2RlVVJJQ29tcG9uZW50KGdldFJlc0NvZGUoKS5zcGxpdCgnIyMnKVsxXSksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcbiAgICAgICAgfSk7XFxuICAgIH1cXG59XFxuLypcXG5zZXRIb21lUmVzdWx0KHtcXG4gICAgZGF0YTogaXRlbXNcXG59KTtcXG4qL1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6Zi/6YeM5bWM5aWXXCIsXCJwYXRoXCI6XCJydWxlbG9vcFwiLFwicnVsZVwiOlwidmFyIGl0ZW1zID0gW107XFxuXFxuZnVuY3Rpb24gZm9ybWF0RGF0ZShfZGF0ZSwgX2ZtdCkge1xcbiAgICBsZXQgZm10ID0gX2ZtdCB8fCBcXFwieXl5eS1NTS1kZCBISDptbTpzc1xcXCI7XFxuICAgIGNvbnN0IGRhdGUgPSAhaXNOYU4oX2RhdGUpID8gbmV3IERhdGUoX2RhdGUgKiAxMDAwKSA6IG5ldyBEYXRlKF9kYXRlKTtcXG4gICAgY29uc3QgbyA9IHtcXG4gICAgICAgIFxcXCJNK1xcXCI6IGRhdGUuZ2V0TW9udGgoKSArIDEsIC8v5pyI5Lu9IFxcbiAgICAgICAgXFxcImQrXFxcIjogZGF0ZS5nZXREYXRlKCksIC8v5pelIFxcbiAgICAgICAgXFxcImgrXFxcIjogZGF0ZS5nZXRIb3VycygpICUgMTIgPT0gMCA/IDEyIDogZGF0ZS5nZXRIb3VycygpICUgMTIsXFxuICAgICAgICBcXFwiSCtcXFwiOiBkYXRlLmdldEhvdXJzKCksIC8v5bCP5pe2IFxcbiAgICAgICAgXFxcIm0rXFxcIjogZGF0ZS5nZXRNaW51dGVzKCksIC8v5YiGIFxcbiAgICAgICAgXFxcInMrXFxcIjogZGF0ZS5nZXRTZWNvbmRzKCksIC8v56eSIFxcbiAgICAgICAgXFxcInErXFxcIjogTWF0aC5mbG9vcigoZGF0ZS5nZXRNb250aCgpICsgMykgLyAzKSwgLy/lraPluqYgXFxuICAgICAgICBcXFwiU1xcXCI6IGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkgLy/mr6vnp5IgXFxuICAgIH07XFxuICAgIGlmICgvKHkrKS8udGVzdChmbXQpKSB7XFxuICAgICAgICBmbXQgPSBmbXQucmVwbGFjZShSZWdFeHAuJDEsIChkYXRlLmdldEZ1bGxZZWFyKCkgKyBcXFwiXFxcIikuc3Vic3RyKDQgLSBSZWdFeHAuJDEubGVuZ3RoKSk7XFxuICAgIH1cXG4gICAgZm9yIChsZXQgayBpbiBvKSB7XFxuICAgICAgICBpZiAobmV3IFJlZ0V4cChcXFwiKFxcXCIgKyBrICsgXFxcIilcXFwiKS50ZXN0KGZtdCkpIHtcXG4gICAgICAgICAgICBmbXQgPSBmbXQucmVwbGFjZShSZWdFeHAuJDEsIChSZWdFeHAuJDEubGVuZ3RoID09IDEpID8gKG9ba10pIDogKChcXFwiMDBcXFwiICsgb1trXSkuc3Vic3RyKChcXFwiXFxcIiArIG9ba10pLmxlbmd0aCkpKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gZm10O1xcbn07XFxuXFxuZnVuY3Rpb24gZm9ybWF0U2l6ZShzaXplKSB7XFxuICAgIGlmICghc2l6ZSkge1xcbiAgICAgICAgcmV0dXJuICcnO1xcbiAgICB9XFxuICAgIGNvbnN0IHVuaXRzID0gWydCJywgJ0tCJywgJ01CJywgJ0dCJywgJ1RCJywgJ1BCJywgJ0VCJywgJ1pCJywgJ1lCJ107XFxuICAgIGxldCBpID0gMDtcXG4gICAgd2hpbGUgKHNpemUgPj0gMTAyNCkge1xcbiAgICAgICAgc2l6ZSAvPSAxMDI0O1xcbiAgICAgICAgaSsrO1xcbiAgICB9XFxuICAgIHNpemUgPSBpID8gTnVtYmVyKHNpemUudG9GaXhlZCgyKSkgOiBzaXplO1xcbiAgICByZXR1cm4gYCR7c2l6ZX0gJHt1bml0c1tpXX1gO1xcbn1cXG4vL2xldCB0dmlwID0gZ2V0SXRlbSgnaGlrZXJ0dmJveHNldCcsICcnKTtcXG5cXG4vL2xvZyhnZXRSZXNDb2RlKCkpO1xcbmlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgY2xlYXJNeVZhcignbmV4dHBhZ2UnKTtcXG59XFxuaWYgKE1ZX1BBR0UgPiAxICYmIGdldE15VmFyKCduZXh0cGFnZScsICcnKSA9PSAnJykge1xcbiAgICBsb2coJ+ayoeacieS4i+S4gOmhtScpO1xcbn0gZWxzZSB7XFxuICAgIGxldCByZWZ0b2tlbiA9IEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vZmlsZXMvcnVsZXMvaWN5L2ljeS1hbGktdG9rZW4uanNvbicsIHt9KSlbMF0ucmVmcmVzaF90b2tlbjtcXG5cXG4gICAgbGV0IG5leHQgPSBnZXRNeVZhcignbmV4dHBhZ2UnLCAnJykgIT0gJycgPyAnLFxcXCJtYXJrZXJcXFwiOlxcXCInICsgZ2V0TXlWYXIoJ25leHRwYWdlJykgKyAnXFxcIicgOiAnJztcXG5cXG4gICAgdmFyIHJlc2NvZCA9IGZldGNoKCdodHRwczovL2FwaS5hbGl5dW5kcml2ZS5jb20vYWRyaXZlL3YzL2ZpbGUvbGlzdCcsIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxcbiAgICAgICAgICAgICdYLVNoYXJlLVRva2VuJzogc2hhcmV0b2tlblxcbiAgICAgICAgfSxcXG4gICAgICAgIGJvZHk6ICd7XFxcInNoYXJlX2lkXFxcIjpcXFwiJyArIHNoYXJlSWQgKyAnXFxcIixcXFwicGFyZW50X2ZpbGVfaWRcXFwiOlxcXCInICsgZ2V0UmVzQ29kZSgpLnNwbGl0KCc/Pz8nKVswXSArICdcXFwiLFxcXCJsaW1pdFxcXCI6MTAwLFxcXCJpbWFnZV90aHVtYm5haWxfcHJvY2Vzc1xcXCI6XFxcImltYWdlL3Jlc2l6ZSx3XzE2MC9mb3JtYXQsanBlZ1xcXCIsXFxcImltYWdlX3VybF9wcm9jZXNzXFxcIjpcXFwiaW1hZ2VcXFxcL3Jlc2l6ZSx3XzE5MjAvZm9ybWF0LGpwZWdcXFwiLFxcXCJ2aWRlb190aHVtYm5haWxfcHJvY2Vzc1xcXCI6XFxcInZpZGVvL3NuYXBzaG90LHRfMTAwMCxmX2pwZyxhcl9hdXRvLHdfMzAwXFxcIixcXFwib3JkZXJfYnlcXFwiOlxcXCJuYW1lXFxcIixcXFwib3JkZXJfZGlyZWN0aW9uXFxcIjpcXFwiQVNDXFxcIicgKyBuZXh0ICsgJ30nLFxcbiAgICAgICAgbWV0aG9kOiAnUE9TVCdcXG4gICAgfSk7XFxuICAgIC8vbG9nKHJlc2NvZCk7XFxuICAgIGlmIChKU09OLnBhcnNlKHJlc2NvZCkubmV4dF9tYXJrZXIpIHtcXG4gICAgICAgIGxldCBtYXJrZXIgPSBKU09OLnBhcnNlKHJlc2NvZCkubmV4dF9tYXJrZXI7XFxuICAgICAgICBpZiAobWFya2VyLmxlbmd0aCA+IDEwKSB7XFxuICAgICAgICAgICAgcHV0TXlWYXIoJ25leHRwYWdlJywgbWFya2VyKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgY2xlYXJNeVZhcignbmV4dHBhZ2UnKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICB2YXIgY29udHMgPSBKU09OLnBhcnNlKHJlc2NvZCkuaXRlbXM7XFxuICAgIHZhciB0dWlzb25nID0gW107XFxuICAgIGZvciAodmFyIGkgaW4gY29udHMpIHtcXG5cXG4gICAgICAgIHZhciBsaXN0eXAgPSBjb250c1tpXS50eXBlO1xcbiAgICAgICAgaWYgKGxpc3R5cCAhPSAnZm9sZGVyJykge1xcbiAgICAgICAgICAgIHZhciBjYXRlID0gY29udHNbaV0uY2F0ZWdvcnk7XFxuICAgICAgICAgICAgdmFyIGZuYW1lID0gY29udHNbaV0ubmFtZTtcXG4gICAgICAgICAgICBpZiAoY2F0ZSA9PSAndmlkZW8nKSB7XFxuICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9ICfwn5O6JyArIGNvbnRzW2ldLm5hbWU7XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChjYXRlID09ICdkb2MnKSB7XFxuICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9ICfwn5OWJyArIGNvbnRzW2ldLm5hbWU7XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChjYXRlID09ICdpbWFnZScpIHtcXG4gICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gJ/CflrwnICsgY29udHNbaV0ubmFtZTtcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNhdGUgPT0gJ3ppcCcpIHtcXG4gICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gJ/Cfk6YnICsgY29udHNbaV0ubmFtZTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSBjb250c1tpXS5uYW1lXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgIHVybDogJChjb250c1tpXS5maWxlX2lkKS5sYXp5UnVsZSgoc2hhcmVJZCwgc2hhcmV0b2tlbiwgY2F0ZSwgZm5hbWUsIHJlZnRva2VuKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYWxpbGF6eVxcXCIpKHNoYXJlSWQsIGlucHV0LCBjYXRlKTtcXG4gICAgICAgICAgICAgICAgfSwgc2hhcmVJZCwgc2hhcmV0b2tlbiwgY2F0ZSwgZm5hbWUsIHJlZnRva2VuKSxcXG4gICAgICAgICAgICAgICAgZGVzYzogZm9ybWF0RGF0ZShjb250c1tpXS51cGRhdGVkX2F0KSArICcgICcgKyBmb3JtYXRTaXplKGNvbnRzW2ldLnNpemUpLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGNvbnRzW2ldLmZpbGVfaWRcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzEnXFxuXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ/Cfk4InICsgY29udHNbaV0ubmFtZSxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCdoaWtlcjovL2VtcHR5JyArIGNvbnRzW2ldLmZpbGVfaWQgKyAnPz8/ZnlwYWdlJykucnVsZSgoc2hhcmVJZCwgc2hhcmV0b2tlbiwgcHVzaG5hbWUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL3J1bGVsb29wJywge30pKS5ydWxlKTtcXG4gICAgICAgICAgICAgICAgfSwgc2hhcmVJZCwgc2hhcmV0b2tlbiwgY29udHNbaV0ubmFtZSksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnZmxleF9idXR0b24nXFxuICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICB9IC8vZW5kIGlmXFxuXFxuICAgIH1cXG59XFxuc2V0UmVzdWx0KGl0ZW1zKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIumYv+mHjOaOqOmAgVwiLFwicGF0aFwiOlwicHVzaFwiLFwicnVsZVwiOlwianM6XFxuLy9sb2coTVlfVVJMKTtcXG52YXIgaXRlbXMgPSBbXTtcXG52YXIgcmVhbHVybCA9IE1ZX1VSTC5zcGxpdCgnIyMnKVsxXS5zcGxpdCgnPz8/JylbMF07XFxuaWYgKGRlY29kZVVSSUNvbXBvbmVudChyZWFsdXJsKS5pbmNsdWRlcygnd3d3LmFsaXl1bmRyaXZlJykgJiYgIXJlYWx1cmwuaW5jbHVkZXMoJyUzQiU3QicpKSB7XFxuICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL3NoYXJpZCcsIHt9KSkucnVsZSlcXG59XFxuc2V0UmVzdWx0KGl0ZW1zKTtcIn1dLFwic2F2ZWRcIjpmYWxzZSxcInRpdGxlXCI6XCLkupHnm5jlkJtcIixcInZlcnNpb25cIjowLFwidXJsXCI6XCJoaWtlcjovL3BhZ2UveXNmeD9ydWxlPeS6keebmOWQmyZyPeS6keebmOWQmyZtb2RlPeS6keebmOaxh+W9sSMjaHR0cHM6Ly93d3cuYWxpcGFuLmNvbS9zL3RyNzlYM2tlUGFiXCIsXCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwiZmluZF9ydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbmxldCBydWxlID0gZ2V0UGFyYW0oXFxcInJcXFwiKS5zcGxpdChcXFwiIyNcXFwiKVswXTtcXG5sZXQgbW9kZSA9IChnZXRQYXJhbShcXFwibW9kZVxcXCIpIHx8IFxcXCJcXFwiKS5zcGxpdChcXFwiIyNcXFwiKVswXTtcXG5sZXQgdXJsID0gTVlfVVJMLnNwbGl0KFxcXCIjI1xcXCIpWzFdO1xcbmxldCBpdGUgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS91XFxcIikocnVsZSwgZ2V0SG9tZSh1cmwpLCBtb2RlKTtcXG5sZXQganMgPSAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgdHJ5IHtcXG4gICAgICAgIGlmIChkb2N1bWVudC50aXRsZSAmJiBkb2N1bWVudC50aXRsZS5sZW5ndGgpIHtcXG4gICAgICAgICAgICBsZXQgciA9ICQkJCgpLmxhenlSdWxlKCh0KSA9PiB7XFxuICAgICAgICAgICAgICAgIHNldFBhZ2VUaXRsZSh0KTtcXG4gICAgICAgICAgICB9LCBkb2N1bWVudC50aXRsZSk7XFxuICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5wYXJzZUxhenlSdWxlKHIpO1xcbiAgICAgICAgfVxcbiAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICBmeV9icmlkZ2VfYXBwLmxvZyhlLnRvU3RyaW5nKCkpO1xcbiAgICB9XFxufSk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCJcXFwiLFxcbiAgICB1cmw6IHVybCxcXG4gICAgY29sX3R5cGU6IFxcXCJ4NV93ZWJ2aWV3X3NpbmdsZVxcXCIsXFxuICAgIGRlc2M6IFxcXCIxMDAlJiZmbG9hdFxcXCIsXFxuICAgIHBpY191cmw6IFxcXCJcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgdXJsSW50ZXJjZXB0b3I6IGl0ZSxcXG4gICAgICAgIGpzOiBqcyxcXG4gICAgICAgIGNhbkJhY2s6IHRydWUsXFxuICAgICAgICBqc0xvYWRpbmdJbmplY3Q6IHRydWUsXFxuICAgICAgICBmbG9hdFZpZGVvOiB0cnVlXFxuICAgIH1cXG59KTtcXG5kLnB1c2goe1xcbiAgICBjb2xfdHlwZTogXFxcImxpbmVcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgaWQ6IHVybFxcbiAgICB9XFxufSk7XFxuc2V0UmVzdWx0KGQpO1wiLFwiZ3JvdXBcIjpcIuKRoOe9keebmFwiLFwidWFcIjpcIm1vYmlsZVwiLFwicHJlUnVsZVwiOlwiXCIsXCJwYWdlc1wiOlwiW3tcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuinhOWImeWIl+ihqFxcXCIsXFxcInBhdGhcXFwiOlxcXCJkYXRhXFxcIixcXFwicnVsZVxcXCI6XFxcInZhciB3cmFwdSA9ICh1KSA9PiB7XFxcXG4gICAgaWYoY29uZmlnLm1vZGUgPT0gXFxcXFxcXCLmnKzlnLDovaznoIFcXFxcXFxcIil7XFxcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQodSkgKyAnPz8/ZnlwYWdlJ1xcXFxuICAgIH1cXFxcbiAgICBpZiAoY29uZmlnLm1vZGUgPT0gXFxcXFxcXCLkupHnm5jmsYflvbFcXFxcXFxcIikge1xcXFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPScgKyB1ICsgJz8/ZnlwYWdlJztcXFxcbiAgICB9XFxcXG4gICAgaWYgKC9hbGl5dW5kcml2ZS8udGVzdCh1KSkge1xcXFxuICAgICAgICBjb25zdCBbbGluaywgX3NoYXJlX3B3ZF0gPSB1LnNwbGl0KCc/c2hhcmVfcHdkPScpO1xcXFxuICAgICAgICBjb25zdCBbX2xpbmssIF9mb2xkZXJJRF0gPSBsaW5rLnNwbGl0KCcvZm9sZGVyLycpO1xcXFxuICAgICAgICBsZXQgc2hhcmVfcHdkID0gKF9zaGFyZV9wd2QgfHwgJycpLnNwbGl0KCcjbmFtZT0nKVswXSB8fCAnJztcXFxcbiAgICAgICAgbGV0IHNoYXJlSWQgPSBfbGluay5zcGxpdCgnY29tL3MvJylbMV07XFxcXG4gICAgICAgIHJldHVybiAnc21hcnRkcml2ZTovL3NoYXJlL2Jyb3dzZT9zaGFyZUlkPScgKyBzaGFyZUlkICsgJyZzaGFyZVB3ZD0nICsgc2hhcmVfcHdkO1xcXFxuICAgIH1cXFxcbiAgICByZXR1cm4gXFxcXFxcXCJ3ZWI6Ly9cXFxcXFxcIiArIHU7XFxcXG59O1xcXFxubGV0IHJ1bGVzID0gW3tcXFxcbiAgICBuYW1lOiBcXFxcXFxcIuS6keebmOi1hOa6kFxcXFxcXFwiLFxcXFxuICAgIHBhZ2U6IHRydWUsXFxcXG4gICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcXFxuICAgICAgICBsZXQgdXJsID0gXFxcXFxcXCJodHRwczovL3Jlcy55dW5wYW4ud2luLz9QYWdlSW5kZXg9XFxcXFxcXCIgKyBwYWdlICsgXFxcXFxcXCImUGFnZVNpemU9MTImS2V5d29yZD1cXFxcXFxcIiArIHMgKyBcXFxcXFxcIiZUeXBlPSZUYWc9XFxcXFxcXCI7XFxcXG4gICAgICAgIGxldCBodG1sID0gcmVxdWVzdCh1cmwsIHtcXFxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcIlJlZmVyZXJcXFxcXFxcIjogXFxcXFxcXCJodHRwczovL3Jlcy55dW5wYW4ud2luL1xcXFxcXFwiXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0pO1xcXFxuXFxcXG4gICAgICAgIGxldCBhcnIgPSBwZGZhKGh0bWwsIFxcXFxcXFwibWFpbiYmLmNhcmRcXFxcXFxcIik7XFxcXG4gICAgICAgIC8vbG9nKGFycik7XFxcXG4gICAgICAgIGxldCBkID0gW107XFxcXG5cXFxcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXFxcbiAgICAgICAgICAgIGxldCBpdCA9IGFycltpXTtcXFxcbiAgICAgICAgICAgIGxldCB1ID0gcGRmaChpdCwgXFxcXFxcXCIuY2FyZC1saW5rLDEmJm9uY2xpY2tcXFxcXFxcIikubWF0Y2goL2h0dHBzOlxcXFxcXFxcL1xcXFxcXFxcLyh3d3dcXFxcXFxcXC5hbGl5dW5kcml2ZVxcXFxcXFxcLmNvbVxcXFxcXFxcL3N8YWx5d3BcXFxcXFxcXC5uZXQpXFxcXFxcXFwvXFxcXFxcXFx3Ki9nKSB8fCBbXTtcXFxcbiAgICAgICAgICAgIHUgPSB1Lmxlbmd0aCA+IDAgPyB1WzBdIDogdXJsO1xcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChpdCwgXFxcXFxcXCIuY2FyZC10aXRsZSYmVGV4dFxcXFxcXFwiKSxcXFxcbiAgICAgICAgICAgICAgICBwaWNfdXJsOiBwZChpdCwgXFxcXFxcXCJpbWcmJnNyY1xcXFxcXFwiLCB1cmwpLFxcXFxuICAgICAgICAgICAgICAgIHVybDogd3JhcHUodSksXFxcXG4gICAgICAgICAgICAgICAgZGVzYzogXFxcXFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0jZjEzYjY2YT7kupHnm5jotYTmupA8L2ZvbnQ+Jm5ic3A7XFxcXFxcXCIgKyAocGRmaChpdCwgXFxcXFxcXCIuY2FyZC10ZXh0LC0xJiZUZXh0XFxcXFxcXCIpKSxcXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHJldHVybiBkO1xcXFxuICAgIH1cXFxcbn0sIHtcXFxcbiAgICBuYW1lOiBcXFxcXFxcIueMq+eLuOebmOaQnFxcXFxcXFwiLFxcXFxuICAgIHBhZ2U6IGZhbHNlLFxcXFxuICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXFxcbiAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KFxcXFxcXFwiaHR0cHM6Ly93d3cuYWxpcGFuc291LmNvbS9zZWFyY2g/az1cXFxcXFxcIiArIHMsIHtcXFxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcIlJlZmVyZXJcXFxcXFxcIjogXFxcXFxcXCJodHRwczovL3d3dy5hbGlwYW5zb3UuY29tL3NlYXJjaD9rPVxcXFxcXFwiICsgc1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICAgbGV0IGFyciA9IHBkZmEoaHRtbCwgXFxcXFxcXCIjYXBwJiZhXFxcXFxcXCIpO1xcXFxuICAgICAgICAvL2xvZyhhcnIpO1xcXFxuICAgICAgICBsZXQgZCA9IFtdO1xcXFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xcXFxuICAgICAgICAgICAgbGV0IGl0ID0gXFxcXFxcXCI8ZGl2PlxcXFxcXFwiICsgYXJyW2ldICsgXFxcXFxcXCI8L2Rpdj5cXFxcXFxcIjtcXFxcbiAgICAgICAgICAgIGxldCB1ID0gcGRmaChpdCwgXFxcXFxcXCJhJiZocmVmXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgLy9sb2codSk7XFxcXG4gICAgICAgICAgICBpZiAoIXUuaW5jbHVkZXMoXFxcXFxcXCIvcy9cXFxcXFxcIikpIHtcXFxcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIHUgPSBcXFxcXFxcImh0dHBzOi8vd3d3LmFsaXBhbnNvdS5jb21cXFxcXFxcIiArIHUucmVwbGFjZShcXFxcXFxcIi9zL1xcXFxcXFwiLCBcXFxcXFxcIi9jdi9cXFxcXFxcIik7XFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGl0LCBcXFxcXFxcInRlbXBsYXRlJiZUZXh0XFxcXFxcXCIpLFxcXFxuICAgICAgICAgICAgICAgIHVybDogJCh1KS5sYXp5UnVsZSgod3JhcHUpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KGlucHV0LCB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogXFxcXFxcXCJub19zaG93X2RvbmF0ZT0xXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJSZWZlcmVyXFxcXFxcXCI6IGlucHV0LnJlcGxhY2UoXFxcXFxcXCIvY3YvXFxcXFxcXCIsIFxcXFxcXFwiL3MvXFxcXFxcXCIpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3Q6IGZhbHNlXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICB2YXIgX2xpbmtzID0gaHRtbC5tYXRjaCgvaHR0cHM6XFxcXFxcXFwvXFxcXFxcXFwvKHd3d1xcXFxcXFxcLmFsaXl1bmRyaXZlXFxcXFxcXFwuY29tXFxcXFxcXFwvc3xhbHl3cFxcXFxcXFxcLm5ldClcXFxcXFxcXC9cXFxcXFxcXHcqL2cpIHx8IFtdO1xcXFxuICAgICAgICAgICAgICAgICAgICAvL2xvZyhfbGlua3MpO1xcXFxuICAgICAgICAgICAgICAgICAgICBpZiAoX2xpbmtzLmxlbmd0aCA+IDEgJiYgX2xpbmtzWzFdLnJlcGxhY2UoX2xpbmtzWzBdLCBcXFxcXFxcIlxcXFxcXFwiKS5yZXBsYWNlKC9bYS16QS1aMC05XSsvZywgXFxcXFxcXCJcXFxcXFxcIikgPT0gXFxcXFxcXCJcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXB1KF9saW5rc1sxXSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoX2xpbmtzLmxlbmd0aCA+IDApIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwdShfbGlua3NbMF0pO1xcXFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfSwgd3JhcHUpLFxcXFxuICAgICAgICAgICAgICAgIGRlc2M6IFxcXFxcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+54yr54u455uY5pCcPC9mb250PiZuYnNwO1xcXFxcXFwiICsgcGRmaChpdCwgXFxcXFxcXCJ0ZW1wbGF0ZSwxJiZUZXh0XFxcXFxcXCIpLFxcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgcmV0dXJuIGQ7XFxcXG4gICAgfVxcXFxufSwge1xcXFxuICAgIG5hbWU6IFxcXFxcXFwi5piT5pCcXFxcXFxcXCIsXFxcXG4gICAgcGFnZTogdHJ1ZSxcXFxcbiAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxcXG4gICAgICAgIGxldCBodG1sID0gcmVxdWVzdChcXFxcXFxcImh0dHBzOi8veWlzby5mdW4vYXBpL3NlYXJjaD9uYW1lPVxcXFxcXFwiICsgcyArIFxcXFxcXFwiJnBhZ2VObz1cXFxcXFxcIiArIHBhZ2UsIHtcXFxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcIlJlZmVyZXJcXFxcXFxcIjogXFxcXFxcXCJodHRwczovL3lpc28uZnVuL2luZm8/c2VhcmNoS2V5PVxcXFxcXFwiICsgc1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICAgbGV0IGFyciA9IEpTT04ucGFyc2UoaHRtbCkuZGF0YS5saXN0O1xcXFxuICAgICAgICBsb2coYXJyKTtcXFxcbiAgICAgICAgbGV0IGQgPSBbXTtcXFxcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXFxcbiAgICAgICAgICAgIGxldCBpdCA9IGFycltpXTtcXFxcbiAgICAgICAgICAgIGxldCB1ID0gaXQudXJsO1xcXFxuICAgICAgICAgICAgaWYgKHUgPT0gbnVsbCB8fCAhdS5pbmNsdWRlcyhcXFxcXFxcImFsaXl1blxcXFxcXFwiKSkge1xcXFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLigJzigJzigJ3igJ1cXFxcXFxcIiArIGl0Lm5hbWUsXFxcXG4gICAgICAgICAgICAgICAgdXJsOiB3cmFwdSh1KSxcXFxcbiAgICAgICAgICAgICAgICBkZXNjOiBcXFxcXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPuaYk+aQnDwvZm9udD4mbmJzcDtcXFxcXFxcIiArIChpdC5nbXRTaGFyZSB8fCBpdC5nbXRDcmVhdGUpLFxcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgcmV0dXJuIGQ7XFxcXG4gICAgfVxcXFxufSwge1xcXFxuICAgIG5hbWU6IFxcXFxcXFwi5bCP57q45p2hXFxcXFxcXCIsXFxcXG4gICAgcGFnZTogZmFsc2UsXFxcXG4gICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcXFxuICAgICAgICBmdW5jdGlvbiBjYXRfY29kZShhKSB7XFxcXG4gICAgICAgICAgICB2YXIgZCwgZSwgYiA9IFtcXFxcXFxcIuWNjuivreeUteinhlxcXFxcXFwiLCBcXFxcXFxcIuaXpemfqeeUteinhlxcXFxcXFwiLCBcXFxcXFxcIuasp+e+jueUteinhlxcXFxcXFwiLCBcXFxcXFxcIuWFtuS7lueUteinhlxcXFxcXFwiLCBcXFxcXFxcIuWNjuivreeUteW9sVxcXFxcXFwiLCBcXFxcXFxcIuaXpemfqeeUteW9sVxcXFxcXFwiLCBcXFxcXFxcIuasp+e+jueUteW9sVxcXFxcXFwiLCBcXFxcXFxcIuWFtuS7lueUteW9sVxcXFxcXFwiLCBcXFxcXFxcIuWNjuivreWKqOa8q1xcXFxcXFwiLCBcXFxcXFxcIuaXpemfqeWKqOa8q1xcXFxcXFwiLCBcXFxcXFxcIuasp+e+juWKqOa8q1xcXFxcXFwiLCBcXFxcXFxcIue6quW9leeJh1xcXFxcXFwiLCBcXFxcXFxcIue7vOiJuueJh1xcXFxcXFwiLCBcXFxcXFxcIuaVmeiCsuWfueiurVxcXFxcXFwiLCBcXFxcXFxcIuWFtuS7luinhumikVxcXFxcXFwiLCBcXFxcXFxcIuWNjuivremfs+S5kFxcXFxcXFwiLCBcXFxcXFxcIuaXpemfqemfs+S5kFxcXFxcXFwiLCBcXFxcXFxcIuasp+e+jumfs+S5kFxcXFxcXFwiLCBcXFxcXFxcIuWFtuS7lumfs+S5kFxcXFxcXFwiLCBcXFxcXFxcIuWoseS5kOi9r+S7tlxcXFxcXFwiLCBcXFxcXFxcIuezu+e7n+i9r+S7tlxcXFxcXFwiLCBcXFxcXFxcIue9kee7nOi9r+S7tlxcXFxcXFwiLCBcXFxcXFxcIuWKnuWFrOi9r+S7tlxcXFxcXFwiLCBcXFxcXFxcIuWFtuS7lui9r+S7tlxcXFxcXFwiLCBcXFxcXFxcIua8q+eUu1xcXFxcXFwiLCBcXFxcXFxcIuWwj+ivtFxcXFxcXFwiLCBcXFxcXFxcIuWHuueJiOS5plxcXFxcXFwiLCBcXFxcXFxcIuefpeivhuWfueiurVxcXFxcXFwiLCBcXFxcXFxcIuWFtuS7luaWh+aho1xcXFxcXFwiLCBcXFxcXFxcIuWjgee6uFxcXFxcXFwiLCBcXFxcXFxcIuS6uueJqVxcXFxcXFwiLCBcXFxcXFxcIumjjuaZr1xcXFxcXFwiLCBcXFxcXFxcIuWFtuS7luWbvueJh1xcXFxcXFwiLCBcXFxcXFxcIuWFtuS7llxcXFxcXFwiXSxcXFxcbiAgICAgICAgICAgICAgICBjID0gW1xcXFxcXFwiaHlkc1xcXFxcXFwiLCBcXFxcXFxcInJoZHNcXFxcXFxcIiwgXFxcXFxcXCJvbWRzXFxcXFxcXCIsIFxcXFxcXFwicXRkc1xcXFxcXFwiLCBcXFxcXFxcImh5ZHlcXFxcXFxcIiwgXFxcXFxcXCJyaGR5XFxcXFxcXCIsIFxcXFxcXFwib21keVxcXFxcXFwiLCBcXFxcXFxcInF0ZHlcXFxcXFxcIiwgXFxcXFxcXCJoeWRtXFxcXFxcXCIsIFxcXFxcXFwicmhkbVxcXFxcXFwiLCBcXFxcXFxcIm9tZG1cXFxcXFxcIiwgXFxcXFxcXCJqbHBcXFxcXFxcIiwgXFxcXFxcXCJ6eXBcXFxcXFxcIiwgXFxcXFxcXCJqeXB4XFxcXFxcXCIsIFxcXFxcXFwicXRzcFxcXFxcXFwiLCBcXFxcXFxcImh5eXlcXFxcXFxcIiwgXFxcXFxcXCJyaHl5XFxcXFxcXCIsIFxcXFxcXFwib215eVxcXFxcXFwiLCBcXFxcXFxcInF0eXlcXFxcXFxcIiwgXFxcXFxcXCJrZnJqXFxcXFxcXCIsIFxcXFxcXFwieHRyalxcXFxcXFwiLCBcXFxcXFxcIndscmpcXFxcXFxcIiwgXFxcXFxcXCJiZ3JqXFxcXFxcXCIsIFxcXFxcXFwicXRyalxcXFxcXFwiLCBcXFxcXFxcIm1oXFxcXFxcXCIsIFxcXFxcXFwieHNcXFxcXFxcIiwgXFxcXFxcXCJjYnNcXFxcXFxcIiwgXFxcXFxcXCJ6c3B4XFxcXFxcXCIsIFxcXFxcXFwicXR3ZFxcXFxcXFwiLCBcXFxcXFxcImJ6XFxcXFxcXCIsIFxcXFxcXFwicndcXFxcXFxcIiwgXFxcXFxcXCJmalxcXFxcXFwiLCBcXFxcXFxcInF0dHBcXFxcXFxcIiwgXFxcXFxcXCJxdFxcXFxcXFwiXTtcXFxcbiAgICAgICAgICAgIGZvciAoZCA9IDAsIGUgPSBjLmxlbmd0aDsgZSA+IGQ7IGQrKylcXFxcbiAgICAgICAgICAgICAgICBpZiAoY1tkXSA9PSBhKSByZXR1cm4gYltkXTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBsZXQgZCA9IFtdO1xcXFxuICAgICAgICBsZXQgaHRtbCA9IHBvc3QoXFxcXFxcXCJodHRwczovL2dpdGNhZmUubmV0L3Rvb2wvYWxpcGFwZXIvXFxcXFxcXCIsIHtcXFxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAnUmVmZXJlcic6ICdodHRwczovL3UuZ2l0Y2FmZS5uZXQvJ1xcXFxuICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgIGJvZHk6IHtcXFxcbiAgICAgICAgICAgICAgICBhY3Rpb246IFxcXFxcXFwic2VhcmNoXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAga2V5d29yZDogc1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KVxcXFxuICAgICAgICBsZXQgbGlzdCA9IEpTT04ucGFyc2UoaHRtbCk7XFxcXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xcXFxuICAgICAgICAgICAgbGV0IGl0ID0gbGlzdFtpXVxcXFxuICAgICAgICAgICAgbGV0IHRpdGxlID0gaXQudGl0bGU7XFxcXG4gICAgICAgICAgICBsZXQgbXVybCA9IGl0LmtleVxcXFxuICAgICAgICAgICAgaWYgKHRpdGxlLmluY2x1ZGVzKHMpKSB7XFxcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFxcXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPuWwj+e6uOadoTwvZm9udD4mbmJzcDtcXFxcXFxcIiArIGNhdF9jb2RlKGl0LmNhdCksXFxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXM6IGl0LmRlc1xcXFxuICAgICAgICAgICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHdyYXB1KCdodHRwczovL3d3dy5hbGl5dW5kcml2ZS5jb20vcy8nICsgbXVybCksXFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgcmV0dXJuIGQ7XFxcXG4gICAgfVxcXFxufSwge1xcXFxuICAgIG5hbWU6IFxcXFxcXFwi5b+F5bqUXFxcXFxcXCIsXFxcXG4gICAgcGFnZTogdHJ1ZSxcXFxcbiAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxcXG4gICAgICAgIGxldCB1cmwgPSBcXFxcXFxcImh0dHBzOi8vY24uYmluZy5jb20vc2VhcmNoP3E9XFxcXFxcXCIgKyBzICsgXFxcXFxcXCIrYWxpeXVuZHJpdmUmcXM9ZHMmZm9ybT1RQlJFXFxcXFxcXCI7XFxcXG4gICAgICAgIGlmIChwYWdlICE9IDEpIHtcXFxcbiAgICAgICAgICAgIHVybCA9IGdldE15VmFyKFxcXFxcXFwiYmluZ1xcXFxcXFwiLCB1cmwpO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGxldCBodG1sID0gcmVxdWVzdCh1cmwsIHtcXFxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcIlJlZmVyZXJcXFxcXFxcIjogXFxcXFxcXCJodHRwczovL2NuLmJpbmcuY29tL1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIC8vXFxcXFxcXCJYLVJlcXVlc3RlZC1XaXRoXFxcXFxcXCI6IFxcXFxcXFwiY29tLmV4YW1wbGUuaGlrZXJ2aWV3XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJBY2NlcHRcXFxcXFxcIjogXFxcXFxcXCJ0ZXh0L2h0bWwsYXBwbGljYXRpb24veGh0bWwreG1sLGFwcGxpY2F0aW9uL3htbDtxPTAuOSxpbWFnZS9hdmlmLGltYWdlL3dlYnAsaW1hZ2UvYXBuZywqLyo7cT0wLjgsYXBwbGljYXRpb24vc2lnbmVkLWV4Y2hhbmdlO3Y9YjM7cT0wLjlcXFxcXFxcIlxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICAgbGV0IGFyciA9IHBkZmEoaHRtbCwgXFxcXFxcXCJib2R5JiZhXFxcXFxcXCIpO1xcXFxuICAgICAgICAvL2xvZyhhcnIpO1xcXFxuICAgICAgICBsZXQgZCA9IFtdO1xcXFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xcXFxuICAgICAgICAgICAgbGV0IGl0ID0gYXJyW2ldO1xcXFxuICAgICAgICAgICAgbGV0IHUgPSBwZChpdCwgXFxcXFxcXCJhJiZocmVmXFxcXFxcXCIsIHVybCk7XFxcXG4gICAgICAgICAgICBsZXQgdCA9IHBkZmgoaXQsIFxcXFxcXFwiYSYmVGV4dFxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgIGlmIChpdC5pbmNsdWRlcyhcXFxcXFxcIk5leHQgcGFnZVxcXFxcXFwiKSB8fCBpdC5pbmNsdWRlcyhcXFxcXFxcIuS4i+S4gOmhtVxcXFxcXFwiKSkge1xcXFxuICAgICAgICAgICAgICAgIGxldCB1MiA9IHBkKGl0LCBcXFxcXFxcImEmJmhyZWZcXFxcXFxcIiwgdXJsKTtcXFxcbiAgICAgICAgICAgICAgICBsb2coXFxcXFxcXCJuZXh0IHBhZ2VcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgbG9nKHUyKTtcXFxcbiAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFxcXFxcImJpbmdcXFxcXFxcIiwgdTIpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgaWYgKHUgPT0gbnVsbCB8fCB0ID09IG51bGwgfHwgIWl0LmluY2x1ZGVzKHMpKSB7XFxcXG4gICAgICAgICAgICAgICAgY29udGludWU7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBpZiAoIWl0LmluY2x1ZGVzKFxcXFxcXFwi572R55uYXFxcXFxcXCIpICYmICFpdC5pbmNsdWRlcyhcXFxcXFxcIuS6keebmFxcXFxcXFwiKSAmJlxcXFxuICAgICAgICAgICAgICAgICFpdC5pbmNsdWRlcyhcXFxcXFxcImFsaXl1bmRyaXZlXFxcXFxcXCIpICYmICFpdC5pbmNsdWRlcyhcXFxcXFxcInl1bnBhblxcXFxcXFwiKSkge1xcXFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgaWYgKHUuc3RhcnRzV2l0aChcXFxcXFxcImh0dHBzOi8vY24uYmluZy5jb20vXFxcXFxcXCIpKSB7XFxcXG4gICAgICAgICAgICAgICAgY29udGludWU7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBsZXQgZG9tID0gZ2V0SG9tZSh1KS5yZXBsYWNlKFxcXFxcXFwiaHR0cDovL1xcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKS5yZXBsYWNlKFxcXFxcXFwiaHR0cHM6Ly9cXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICBsZXQgX2xpbmtzID0gdC5tYXRjaCgvaHR0cHM6XFxcXFxcXFwvXFxcXFxcXFwvKHd3d1xcXFxcXFxcLmFsaXl1bmRyaXZlXFxcXFxcXFwuY29tXFxcXFxcXFwvc3xhbHl3cFxcXFxcXFxcLm5ldClcXFxcXFxcXC9cXFxcXFxcXHcqL2cpIHx8IFtdO1xcXFxuICAgICAgICAgICAgbG9nKF9saW5rcyk7XFxcXG4gICAgICAgICAgICBsZXQgYyA9IG51bGw7XFxcXG4gICAgICAgICAgICBpZiAoX2xpbmtzLmxlbmd0aCA+IDEgJiYgX2xpbmtzWzFdLnJlcGxhY2UoX2xpbmtzWzBdLCBcXFxcXFxcIlxcXFxcXFwiKS5yZXBsYWNlKC9bYS16QS1aMC05XSsvZywgXFxcXFxcXCJcXFxcXFxcIikgPT0gXFxcXFxcXCJcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgICAgIGMgPSB3cmFwdShfbGlua3NbMV0pO1xcXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChfbGlua3MubGVuZ3RoID4gMCkge1xcXFxuICAgICAgICAgICAgICAgIGMgPSB3cmFwdShfbGlua3NbMF0pO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogdCxcXFxcbiAgICAgICAgICAgICAgICBkZXNjOiBcXFxcXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPuW/heW6lDwvZm9udD4mbmJzcDtcXFxcXFxcIiArIGRvbSxcXFxcbiAgICAgICAgICAgICAgICB1cmw6IGMgIT0gbnVsbCA/IGMgOiAkKHUpLmxhenlSdWxlKCh3cmFwdSwgbW9kZSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoaW5wdXQpO1xcXFxuICAgICAgICAgICAgICAgICAgICB2YXIgX2xpbmtzID0gaHRtbC5tYXRjaCgvaHR0cHM6XFxcXFxcXFwvXFxcXFxcXFwvKHd3d1xcXFxcXFxcLmFsaXl1bmRyaXZlXFxcXFxcXFwuY29tXFxcXFxcXFwvc3xhbHl3cFxcXFxcXFxcLm5ldClcXFxcXFxcXC9cXFxcXFxcXHcqL2cpIHx8IFtdO1xcXFxuICAgICAgICAgICAgICAgICAgICBsb2coX2xpbmtzKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9saW5rcy5sZW5ndGggPiAxICYmIF9saW5rc1sxXS5yZXBsYWNlKF9saW5rc1swXSwgXFxcXFxcXCJcXFxcXFxcIikucmVwbGFjZSgvW2EtekEtWjAtOV0rL2csIFxcXFxcXFwiXFxcXFxcXCIpID09IFxcXFxcXFwiXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwdShfbGlua3NbMV0pO1xcXFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKF9saW5rcy5sZW5ndGggPiAwKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHUoX2xpbmtzWzBdKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBydWxlID0gTVlfUlVMRS50aXRsZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vcGFnZS95c2Z4P3J1bGU9XFxcXFxcXCIgKyBydWxlICsgXFxcXFxcXCImcj1cXFxcXFxcIiArIHJ1bGUgKyBcXFxcXFxcIiZtb2RlPVxcXFxcXFwiICsgbW9kZSArIFxcXFxcXFwiIyNcXFxcXFxcIiArIGlucHV0O1xcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfSwgd3JhcHUsIGNvbmZpZy5tb2RlKVxcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgcmV0dXJuIGQ7XFxcXG4gICAgfVxcXFxufV07XFxcXG5cXFxcbmxldCBjY29mID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvY2NvZicpXFxcXG5ydWxlcy5wdXNoKGNjb2YpXFxcXG4vL+W5tuWPkeinhOWImeaVsFxcXFxubGV0IHNpemUgPSAxMDtcXFxcblxcXFxuJC5leHBvcnRzID0gZnVuY3Rpb24ocGFnZSwgcnVsZSkge1xcXFxuICAgIGlmICghcGFnZSAmJiAhcnVsZSkge1xcXFxuICAgICAgICByZXR1cm4gcnVsZXMubWFwKGl0ID0+IGl0Lm5hbWUpO1xcXFxuICAgIH1cXFxcbiAgICBpZiAocnVsZSAhPSBudWxsKSB7XFxcXG4gICAgICAgIGlmIChwYWdlICE9IG51bGwgJiYgcGFnZSA+IDEpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBydWxlcy5maWx0ZXIoaSA9PiBpLm5hbWUgPT0gcnVsZSAmJiBpLnBhZ2UpO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHJldHVybiBydWxlcy5maWx0ZXIoaSA9PiBpLm5hbWUgPT0gcnVsZSk7XFxcXG4gICAgfVxcXFxuICAgIGxldCBzdGFydCA9IChwYWdlIC0gMSkgKiBzaXplO1xcXFxuICAgIGlmIChydWxlcy5sZW5ndGggPCBzdGFydCArIDEpIHtcXFxcbiAgICAgICAgcmV0dXJuIFtdO1xcXFxuICAgIH1cXFxcbiAgICBsZXQgbGVuID0gc2l6ZTtcXFxcbiAgICBpZiAocnVsZXMubGVuZ3RoIDwgcGFnZSAqIHNpemUpIHtcXFxcbiAgICAgICAgbGVuID0gcnVsZXMubGVuZ3RoIC0gc3RhcnRcXFxcbiAgICB9XFxcXG4gICAgcmV0dXJuIHJ1bGVzLnNsaWNlKHN0YXJ0LCBzdGFydCArIGxlbik7XFxcXG59XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5pCc57SiXFxcIixcXFwicGF0aFxcXCI6XFxcInNvdVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJsZXQgciA9IGdldEl0ZW0oXFxcXFxcXCJyXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpO1xcXFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcXFxuICAgIGxldCByMSA9IGZldGNoKFxcXFxcXFwiaGlrZXI6Ly9ob21lQOS6keebmOaxh+W9sVxcXFxcXFwiKTtcXFxcbiAgICBpZiAoIXIxIHx8IHIxLmxlbmd0aCA8PSA1KSB7XFxcXG4gICAgICAgIGxldCBydSA9ICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwi5rW36ZiU6KeG55WM6KeE5YiZ5YiG5Lqr77yM5b2T5YmN5YiG5Lqr55qE5piv77ya5bCP56iL5bqP77+laG9tZV9ydWxlX3Yy77+lYmFzZTY0Oi8vQOS6keebmOaxh+W9sUBleUpzWVhOMFgyTm9ZWEIwWlhKZmNuVnNaU0k2SWlJc0luUnBkR3hsSWpvaTVMcVI1NXVZNXJHSDViMnhJaXdpWVhWMGFHOXlJam9pVFhKR2JIa2lMQ0oxY213aU9pSm9hV3RsY2pvdkwyVnRjSFI1SkNRa1pubHdZV2RsSWl3aWRtVnljMmx2YmlJNk5pd2lZMjlzWDNSNWNHVWlPaUowWlhoMFh6RWlMQ0pqYkdGemMxOXVZVzFsSWpvaUlpd2lkSGx3WlNJNkltRnNiQ0lzSW1Oc1lYTnpYM1Z5YkNJNklpSXNJbUZ5WldGZmJtRnRaU0k2SWlJc0ltRnlaV0ZmZFhKc0lqb2lJaXdpYzI5eWRGOXVZVzFsSWpvaUlpd2llV1ZoY2w5dVlXMWxJam9pSWl3aWMyOXlkRjkxY213aU9pSWlMQ0o1WldGeVgzVnliQ0k2SWlJc0ltWnBibVJmY25Wc1pTSTZJbXB6T2x4dVpYWmhiQ2htWlhSamFDZ25hR2xyWlhJNkx5OW1hV3hsY3k5eWRXeGxjeTlwWTNrdllXeHBMbXB6SnlrcE8xeHVZV3hwTG1odmJXVlFZV2RsS0NrN0lpd2ljMlZoY21Ob1gzVnliQ0k2SW1ocGEyVnlPaTh2Wlcxd2RIa2tKQ1FxS2lRa0pHWjVjR0ZuWlNRa0pDSXNJbWR5YjNWd0lqb2k0cEdnNTcyUjU1dVlJaXdpYzJWaGNtTm9SbWx1WkNJNkltcHpPbHh1WlhaaGJDaG1aWFJqYUNnbmFHbHJaWEk2THk5bWFXeGxjeTl5ZFd4bGN5OXBZM2t2WVd4cExtcHpKeWtwTzF4dVlXeHBMbk5sWVhKamFGQmhaMlVvZEhKMVpTazdYRzRpTENKa1pYUmhhV3hmWTI5c1gzUjVjR1VpT2lKdGIzWnBaVjh4SWl3aVpHVjBZV2xzWDJacGJtUmZjblZzWlNJNkltcHpPbHh1WlhaaGJDaG1aWFJqYUNnbmFHbHJaWEk2THk5bWFXeGxjeTl5ZFd4bGN5OXBZM2t2WVd4cExtcHpKeWtwTzF4dVlXeHBMbVJsZEdGcGJGQmhaMlVvS1RzaUxDSnpaR1YwWVdsc1gyTnZiRjkwZVhCbElqb2liVzkyYVdWZk1TSXNJbk5rWlhSaGFXeGZabWx1WkY5eWRXeGxJam9pSWl3aWRXRWlPaUp0YjJKcGJHVWlMQ0p3Y21WU2RXeGxJam9pZG1GeUlHRnNhV3B6SUQwZ1ptVjBZMmhEWVdOb1pTZ25hSFIwY0hNNkx5OW5hWFJsWlM1amIyMHZabXg1TVRNNU55OW9hV3RsY2kxcFkza3ZjbUYzTDIxaGMzUmxjaTloYkdrdWFuTW5LVHRjYm1sbUlDZ2hZV3hwYW5NZ2ZId2dJV0ZzYVdwekxtbHVZMngxWkdWektDZGhiR2t1SnlrcElIdGNiaUFnSUNCaGJHbHFjeUE5SUdabGRHTm9RMkZqYUdVb0oyaDBkSEJ6T2k4dlkyUnVMbXB6WkdWc2FYWnlMbTVsZEM5bmFDOW1iSGt4TXprM0wyaHBhMlZ5TFdsamVTOWhiR2t1YW5NbktWeHVmVnh1YVdZZ0tDRmhiR2xxY3lCOGZDQWhZV3hwYW5NdWFXNWpiSFZrWlhNb0oyRnNhUzRuS1NrZ2UxeHVJQ0FnSUdGc2FXcHpJRDBnWm1WMFkyaERZV05vWlNnbmFIUjBjRG92TDJ4bWFXTjVMbU52YlRvek1EQXdNQzl0Y21ac2VTOW9hV3RsY2kxcFkza3ZjbUYzTDIxaGMzUmxjaTloYkdrdWFuTW5LVnh1ZlZ4dWFXWWdLR0ZzYVdwektTQjdYRzRnSUNBZ2QzSnBkR1ZHYVd4bEtGd2lhR2xyWlhJNkx5OW1hV3hsY3k5eWRXeGxjeTlwWTNrdllXeHBMbXB6WENJc0lHRnNhV3B6S1R0Y2JpQWdJQ0JsZG1Gc0tHRnNhV3B6S1R0Y2JpQWdJQ0JoYkdrdWNISmxVblZzWlNncE8xeHVmU0lzSW5CaFoyVnpJam9pVzN0Y0ltTnZiRjkwZVhCbFhDSTZYQ0p0YjNacFpWOHpYQ0lzWENKdVlXMWxYQ0k2WENMbnZaSG5tNWpvcjZibWc0VmNJaXhjSW5CaGRHaGNJanBjSW1SbGRHRnBiRndpTEZ3aWNuVnNaVndpT2x3aWFuTTZYRnh1WlhaaGJDaG1aWFJqYUNnbmFHbHJaWEk2THk5bWFXeGxjeTl5ZFd4bGN5OXBZM2t2WVd4cExtcHpKeWtwTzF4Y2JtRnNhUzVwYm1sMFEyOXVabWxuS0NrN1hGeHVZV3hwTG1Gc2FWSjFiR1VvS1R0Y0luMHNlMXdpWTI5c1gzUjVjR1ZjSWpwY0ltMXZkbWxsWHpGZmJHVm1kRjl3YVdOY0lpeGNJbTVoYldWY0lqcGNJdWkxaE9hNmtPZTlrZW1odGVpdnB1YURoVndpTEZ3aWNHRjBhRndpT2x3aWMybDBaUzFrWlhSaGFXeGNJaXhjSW5KMWJHVmNJanBjSW1wek9seGNibVYyWVd3b1ptVjBZMmdvSjJocGEyVnlPaTh2Wm1sc1pYTXZjblZzWlhNdmFXTjVMMkZzYVM1cWN5Y3BLVHRjWEc1aGJHa3VaR1YwWVdsc1VHRm5aU2dwTzF3aWZTeDdYQ0pqYjJ4ZmRIbHdaVndpT2x3aWJXOTJhV1ZmTTF3aUxGd2libUZ0WlZ3aU9sd2k1TGlxNUxxNjU3MlI1NXVZNksrbTVvT0ZYQ0lzWENKd1lYUm9YQ0k2WENKa2NtbDJaVndpTEZ3aWNuVnNaVndpT2x3aWFuTTZYRnh1WlhaaGJDaG1aWFJqYUNnbmFHbHJaWEk2THk5bWFXeGxjeTl5ZFd4bGN5OXBZM2t2WVd4cExtcHpKeWtwTzF4Y2JtRnNhUzVwYm1sMFEyOXVabWxuS0NrN1hGeHVZV3hwTG0xNVFXeHBVblZzWlNncE8xd2lmVjBpTENKcFkyOXVJam9pYUhSMGNITTZMeTluYVhSbFpTNWpiMjB2Wm14NU1UTTVOeTlvYVd0bGNpMXBZM2t2Y21GM0wyMWhjM1JsY2k5aGJHbDVkVzR1Y0c1bklpd2ljSEp2ZUhraU9pSWlmUT09XFxcXFxcXCJcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIGNvbmZpcm0oe1xcXFxuICAgICAgICAgICAgdGl0bGU6IE1ZX1JVTEUudGl0bGUgKyAn5o+Q56S6JyxcXFxcbiAgICAgICAgICAgIGNvbnRlbnQ6ICfmnKzop4TliJnkvp3otZbkupHnm5jmsYflvbHop4TliJnvvIzngrnlh7vkuIvpnaLnmoTnoa7lrprmjInpkq7lr7zlhaXvvIzms6jmhI/lr7zlhaXlkI7kuIDlrpropoHlnKjkupHnm5jmsYflvbHnmbvlvZXpmL/ph4zkupHnm5jotKblj7fvvIzlkKbliJnkuI3og73nlKgnLFxcXFxuICAgICAgICAgICAgY29uZmlybTogcnUsXFxcXG4gICAgICAgICAgICBjYW5jZWw6IHJ1XFxcXG4gICAgICAgIH0pXFxcXG4gICAgfVxcXFxuICAgIGFkZExpc3RlbmVyKFxcXFxcXFwib25DbG9zZVxcXFxcXFwiLCAkLnRvU3RyaW5nKCgpID0+IHtcXFxcbiAgICAgICAgY2xlYXJNeVZhcihcXFxcXFxcInNcXFxcXFxcIik7XFxcXG4gICAgfSkpO1xcXFxuICAgIGxldCB0aXAgPSBcXFxcXFxcIuS6keebmOaQnOe0ouWQmyDmo4DntKLlip/og73nlLHlr7nlupTnvZHnq5nmj5DkvpvvvIzmnKzop4TliJnkuI3mj5Dkvpvku7vkvZXlhoXlrrlcXFxcXFxcIjtcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogdGlwLFxcXFxuICAgICAgICB1cmw6ICQoXFxcXFxcXCIjbm9Mb2FkaW5nI1xcXFxcXFwiKS5sYXp5UnVsZSgodGlwKSA9PiB7XFxcXG4gICAgICAgICAgICBjb25maXJtKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLkvb/nlKjor7TmmI5cXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBjb250ZW50OiB0aXAgKyBcXFxcXFxcIu+8jOacrOinhOWImeS7o+eggeWujOWFqOW8gOa6kO+8jOS7heS+m+WtpuS5oOWSjOeglOeptu+8m+eCueWHu+S4i+aWueehruWumuaMiemSrui3s+i9rOS6keebmOaxh+W9seWwj+eoi+W6j1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIGNvbmZpcm06IFxcXFxcXFwiJ2hpa2VyOi8vaG9tZUDkupHnm5jmsYflvbEnXFxcXFxcXCJcXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiXFxcXG4gICAgICAgIH0sIHRpcCksXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImljb25fMl9yb3VuZFxcXFxcXFwiLFxcXFxuICAgICAgICBkZXNjOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICBwaWNfdXJsOiBcXFxcXFxcImhpa2VyOi8vaW1hZ2VzL2ljb24yXFxcXFxcXCJcXFxcbiAgICB9KTtcXFxcbiAgICBsZXQgZG1vZGUgPSBnZXRJdGVtKFxcXFxcXFwiZG1vZGVcXFxcXFxcIiwgXFxcXFxcXCLkupHnm5jmsYflvbFcXFxcXFxcIik7XFxcXG4gICAgaW5pdENvbmZpZyh7XFxcXG4gICAgICAgIG1vZGU6IGRtb2RlXFxcXG4gICAgfSk7XFxcXG5cXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogXFxcXFxcXCLmqKHlvI/vvJpcXFxcXFxcIiArIGRtb2RlLFxcXFxuICAgICAgICB1cmw6IFxcXFxcXFwic2VsZWN0Oi8vXFxcXFxcXCIgKyBKU09OLnN0cmluZ2lmeSh7XFxcXG4gICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLpgInmi6nmqKHlvI9cXFxcXFxcIixcXFxcbiAgICAgICAgICAgIG9wdGlvbnM6IFtcXFxcXFxcIuS6keebmOaxh+W9sVxcXFxcXFwiLCBcXFxcXFxcIuacrOWcsOi9rOeggVxcXFxcXFwiLCBcXFxcXFxcIuWumOaWuUFQUFxcXFxcXFwiXSxcXFxcbiAgICAgICAgICAgIGNvbDogMSxcXFxcbiAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXFxcXFwiZG1vZGVcXFxcXFxcIiwgaW5wdXQpO1xcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxcXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0ID09IFxcXFxcXFwi5a6Y5pa5QVBQXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/kv67mlLnmiJDlip/vvIzor7fnoa7kv53miYvmnLrmnInlronoo4XpmL/ph4zkupHnm5jlrpjmlrlBUFBcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+S/ruaUueaIkOWKn++8jOazqOaEj+imgeWcqOS6keebmOaxh+W9seiuvue9rumHjOmdoueZu+W9lei0puWPt1xcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICBcXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgIH0pLFxcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJpY29uXzJfcm91bmRcXFxcXFxcIixcXFxcbiAgICAgICAgZGVzYzogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgcGljX3VybDogXFxcXFxcXCJoaWtlcjovL2ltYWdlcy9pY29uMVxcXFxcXFwiXFxcXG4gICAgfSk7XFxcXG5cXFxcblxcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiAn5pCc57SiJyxcXFxcbiAgICAgICAgZGVzYzogJ+ivt+i+k+WFpeWFs+mUruivjScsXFxcXG4gICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcXFxuICAgICAgICB1cmw6ICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgICAgICAgICAgcHV0TXlWYXIoJ3MnLCBpbnB1dCk7XFxcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcXFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcXFxuICAgICAgICB9KSxcXFxcbiAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0TXlWYXIoJ3MnLCAnJylcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pO1xcXFxuICAgIGxldCBydWxlcyA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9kYXRhXFxcXFxcXCIpKCk7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IFxcXFxcXFwiXFxcXFxcXCIgPT0gciA/IFxcXFxcXFwi4oCc4oCc5YWo6YOo4oCd4oCdXFxcXFxcXCIgOiBcXFxcXFxcIuWFqOmDqFxcXFxcXFwiLFxcXFxuICAgICAgICB1cmw6ICQoXFxcXFxcXCIjbm9Mb2FkaW5nI1xcXFxcXFwiKS5sYXp5UnVsZSgoKSA9PiB7XFxcXG4gICAgICAgICAgICBjbGVhckl0ZW0oXFxcXFxcXCJyXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIlxcXFxuICAgICAgICB9KSxcXFxcbiAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwic2Nyb2xsX2J1dHRvblxcXFxcXFwiLFxcXFxuICAgICAgICBkZXNjOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICBwaWNfdXJsOiBcXFxcXFxcIlxcXFxcXFwiXFxcXG4gICAgfSk7XFxcXG4gICAgZm9yIChsZXQgaXQgb2YgcnVsZXMpIHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBpdCA9PSByID8gXFxcXFxcXCLigJzigJxcXFxcXFxcIiArIGl0ICsgXFxcXFxcXCLigJ3igJ1cXFxcXFxcIiA6IGl0LFxcXFxuICAgICAgICAgICAgdXJsOiAkKFxcXFxcXFwiI25vTG9hZGluZyNcXFxcXFxcIikubGF6eVJ1bGUoKHIpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXFxcXFwiclxcXFxcXFwiLCByKTtcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIlxcXFxuICAgICAgICAgICAgfSwgaXQpLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwic2Nyb2xsX2J1dHRvblxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgZGVzYzogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHBpY191cmw6IFxcXFxcXFwiXFxcXFxcXCJcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgfVxcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIGNvbF90eXBlOiAnbGluZScsXFxcXG4gICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICBpZDogJ3lwai1sJ1xcXFxuICAgICAgICB9XFxcXG4gICAgfSk7XFxcXG59XFxcXG5sZXQgcyA9IGdldE15VmFyKCdzJywgJycpO1xcXFxuaWYgKHMgIT0gXFxcXFxcXCJcXFxcXFxcIikge1xcXFxuICAgIGxldCBwID0gTVlfUEFHRTtcXFxcbiAgICBsZXQgZGF0YSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9kYXRhXFxcXFxcXCIpKHAsIHIgIT0gXFxcXFxcXCJcXFxcXFxcIiA/IHIgOiBudWxsKTtcXFxcblxcXFxuICAgIGxldCBwYWdlaWQgPSBcXFxcXFxcInlwai1wYWdlXFxcXFxcXCIgKyBwO1xcXFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDApIHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuWKoOi9veesrFxcXFxcXFwiICsgcCArIFxcXFxcXFwi6aG15Lit77yM6L+b5bqm77yaMS9cXFxcXFxcIiArIGRhdGEubGVuZ3RoLFxcXFxuICAgICAgICAgICAgdXJsOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF9jZW50ZXJfMVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgZGVzYzogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHBpY191cmw6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgIGlkOiBwYWdlaWRcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSk7XFxcXG4gICAgfVxcXFxuICAgIHNldFJlc3VsdChkKTtcXFxcbiAgICBsb2coZGF0YS5sZW5ndGgpO1xcXFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDApIHtcXFxcbiAgICAgICAgLy/lpJrnur/nqIvliqDovb0gICAgICAgIFxcXFxuICAgICAgICBsZXQgcmVhbFBhZ2UgPSBcXFxcXFxcIlxcXFxcXFwiID09IHIgPyAxIDogcDtcXFxcbiAgICAgICAgbGV0IHRhc2tzID0gZGF0YS5tYXAoaXQgPT4ge1xcXFxuICAgICAgICAgICAgcmV0dXJuIHtcXFxcbiAgICAgICAgICAgICAgICBmdW5jOiBmdW5jdGlvbihydWxlKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBydWxlLmZpbmQocywgcmVhbFBhZ2UpO1xcXFxuICAgICAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAgICAgcGFyYW06IGl0LFxcXFxuICAgICAgICAgICAgICAgIGlkOiBcXFxcXFxcInJ1bGVAXFxcXFxcXCIgKyBpdC5uYW1lXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0pO1xcXFxuXFxcXG4gICAgICAgIGJhdGNoRXhlY3V0ZSh0YXNrcywge1xcXFxuICAgICAgICAgICAgZnVuYzogZnVuY3Rpb24ocGFyYW0sIGlkLCBlcnJvciwgcmVzdWx0KSB7XFxcXG4gICAgICAgICAgICAgICAgLy9sb2coXFxcXFxcXCJsaXN0ZW5lcjogXFxcXFxcXCIgKyAocmVzdWx0IHx8IFtdKS5sZW5ndGgpXFxcXG4gICAgICAgICAgICAgICAgcGFyYW0uaSA9IHBhcmFtLmkgKyAxO1xcXFxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGl0IG9mIHJlc3VsdCkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLmogPSBwYXJhbS5qICsgMTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRJdGVtQmVmb3JlKHBhZ2VpZCwge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogaXQudGl0bGUuaW5jbHVkZXMoXFxcXFxcXCLigJzigJzigJ3igJ1cXFxcXFxcIikgPyBpdC50aXRsZSA6IFxcXFxcXFwi4oCc4oCc4oCd4oCdXFxcXFxcXCIgKyBpdC50aXRsZS5yZXBsYWNlKG5ldyBSZWdFeHAoXFxcXFxcXCI8ZW0+fDwvZW0+XFxcXFxcXCIsIFxcXFxcXFwiZ1xcXFxcXFwiKSwgXFxcXFxcXCJcXFxcXFxcIikucmVwbGFjZShuZXcgUmVnRXhwKHMsIFxcXFxcXFwiZ1xcXFxcXFwiKSwgXFxcXFxcXCI8c3Ryb25nPjxzcGFuIHN0eWxlPVxcXFxcXFxcXFxcXFxcXCJjb2xvcjogIzFFOTBGRlxcXFxcXFxcXFxcXFxcXCI+XFxcXFxcXCIgKyBzICsgXFxcXFxcXCI8L3NwYW4+PC9zdHJvbmc+XFxcXFxcXCIpLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBpdC5kZXNjLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGl0LnVybCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGljX3VybDogaXQucGljX3VybCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IGl0LnBpY191cmwgPyAnbW92aWVfMV92ZXJ0aWNhbF9waWMnIDogXFxcXFxcXCJ0ZXh0XzFcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcXFxcXFxcIl9fYXBwXFxcXFxcXCIgKyBNWV9QQUdFICsgXFxcXFxcXCJAXFxcXFxcXCIgKyBwYXJhbS5qLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5oZXJpdFRpdGxlOiBmYWxzZVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cXFxcblxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICBpZiAocGFyYW0uaSA+PSBwYXJhbS5hbGwpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlSXRlbShwYWdlaWQpXFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlSXRlbSh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLliqDovb3nrKxcXFxcXFxcIiArIE1ZX1BBR0UgKyBcXFxcXFxcIumhteS4re+8jOi/m+W6pu+8mlxcXFxcXFwiICsgKHBhcmFtLmkgKyAxKSArIFxcXFxcXFwiL1xcXFxcXFwiICsgcGFyYW0uYWxsLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF9jZW50ZXJfMVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBpY191cmw6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBwYWdlaWRcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgcGFyYW06IHtcXFxcbiAgICAgICAgICAgICAgICBhbGw6IGRhdGEubGVuZ3RoLFxcXFxuICAgICAgICAgICAgICAgIGk6IDAsXFxcXG4gICAgICAgICAgICAgICAgajogLTFcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSlcXFxcbiAgICB9XFxcXG59XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5pCc57Si6aG16Z2iXFxcIixcXFwicGF0aFxcXCI6XFxcInNvdXBcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG52YXIgZCA9IFtdO1xcXFxuaWYgKE1ZX1BBUkFNUy5rZXkpIHtcXFxcbiAgICBwdXRNeVZhcihcXFxcXFxcInNcXFxcXFxcIiwgTVlfUEFSQU1TLmtleSk7XFxcXG59XFxcXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcXFxcXCJoaWtlcjovL3BhZ2Uvc291XFxcXFxcXCIpKS5ydWxlKTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCJDQ09GXFxcIixcXFwicGF0aFxcXCI6XFxcImNjb2ZcXFwiLFxcXCJydWxlXFxcIjpcXFwidmFyIHdyYXB1ID0gKHUpID0+IHtcXFxcbiAgICBpZihjb25maWcubW9kZSA9PSBcXFxcXFxcIuacrOWcsOi9rOeggVxcXFxcXFwiKXtcXFxcbiAgICAgICAgcmV0dXJuICdoaWtlcjovL3BhZ2UvcHVzaD91cmw9aGlrZXI6Ly9lbXB0eSMjJyArIGVuY29kZVVSSUNvbXBvbmVudCh1KSArICc/Pz9meXBhZ2UnXFxcXG4gICAgfVxcXFxuICAgIGlmIChjb25maWcubW9kZSA9PSBcXFxcXFxcIuS6keebmOaxh+W9sVxcXFxcXFwiKSB7XFxcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL2RldGFpbD9ydWxlPeS6keebmOaxh+W9sSZ1cmw9JyArIHUgKyAnPz9meXBhZ2UnO1xcXFxuICAgIH1cXFxcbiAgICBpZiAoL2FsaXl1bmRyaXZlLy50ZXN0KHUpKSB7XFxcXG4gICAgICAgIGNvbnN0IFtsaW5rLCBfc2hhcmVfcHdkXSA9IHUuc3BsaXQoJz9zaGFyZV9wd2Q9Jyk7XFxcXG4gICAgICAgIGNvbnN0IFtfbGluaywgX2ZvbGRlcklEXSA9IGxpbmsuc3BsaXQoJy9mb2xkZXIvJyk7XFxcXG4gICAgICAgIGxldCBzaGFyZV9wd2QgPSAoX3NoYXJlX3B3ZCB8fCAnJykuc3BsaXQoJyNuYW1lPScpWzBdIHx8ICcnO1xcXFxuICAgICAgICBsZXQgc2hhcmVJZCA9IF9saW5rLnNwbGl0KCdjb20vcy8nKVsxXTtcXFxcbiAgICAgICAgcmV0dXJuICdzbWFydGRyaXZlOi8vc2hhcmUvYnJvd3NlP3NoYXJlSWQ9JyArIHNoYXJlSWQgKyAnJnNoYXJlUHdkPScgKyBzaGFyZV9wd2Q7XFxcXG4gICAgfVxcXFxuICAgIHJldHVybiBcXFxcXFxcIndlYjovL1xcXFxcXFwiICsgdTtcXFxcbn07XFxcXG4kLmV4cG9ydHMgPSB7XFxcXG4gICAgbmFtZTogJ0NDT0YnLFxcXFxuICAgIHBhZ2U6IHRydWUsXFxcXG4gICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcXFxuICAgICAgICBsZXQgZCA9IFtdXFxcXG4gICAgICAgIGNvbnN0IHtcXFxcbiAgICAgICAgICAgIGJ5dGVzVG9TaXplLFxcXFxuICAgICAgICAgICAgY29sb3JcXFxcbiAgICAgICAgfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL3Rvb2xzJyk7XFxcXG4gICAgICAgIGxldCBodG1sID0gZmV0Y2goJ2h0dHBzOi8vcGFuLmNjb2YuY2MvYXBpL3NlYXJjaCcsIHtcXFxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcImNvbnRlbnQtdHlwZVxcXFxcXFwiOiAnYXBwbGljYXRpb24vanNvbicsXFxcXG4gICAgICAgICAgICAgICAgJ1JlZmVyZXInOiAnaHR0cHM6Ly9wYW4uY2NvZi5jYy9zZWFyY2g/a2V5d29yZD0nICsgc1xcXFxuICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgIGJvZHk6IHtcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcInBhZ2VTaXplXFxcXFxcXCI6IDIwLFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwicGFnZU51bVxcXFxcXFwiOiBwYWdlLFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwia2V5d29yZFxcXFxcXFwiOiBzLFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwiZnJvbU1vYmlsZVxcXFxcXFwiOiB0cnVlXFxcXG4gICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcXFxcbiAgICAgICAgfSlcXFxcbiAgICAgICAgbGV0IGxpc3QgPSBKU09OLnBhcnNlKGh0bWwpXFxcXG4gICAgICAgICAgICAuZGF0YS5yb3dzXFxcXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xcXFxuICAgICAgICAgICAgbGV0IGl0ID0gbGlzdFtpXVxcXFxuICAgICAgICAgICAgbGV0IHRpdGxlID0gaXQuZmlsZU5hbWVcXFxcbiAgICAgICAgICAgIGxldCBtdXJsID0gaXQudXJsXFxcXG4gICAgICAgICAgICBsZXQgdHlwZSA9IGl0LnR5cGUucmVwbGFjZSgvZm9sZGVyLywgJ+aWh+S7tuWkuScpLnJlcGxhY2UoL2ZpbGUvLCAn5paH5Lu2JylcXFxcbiAgICAgICAgICAgIGlmICh0aXRsZS5pbmNsdWRlcyhzKSkge1xcXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogJ+KAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPkNDT0Y8L2ZvbnQ+Jm5ic3A7JyArICfmlofku7bnsbvlnovvvJonICsgdHlwZSArICfvvIzmlofku7blpKflsI/vvJonICsgYnl0ZXNUb1NpemUoaXQuc2l6ZSksXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogd3JhcHUobXVybClcXFxcbiAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHJldHVybiBkXFxcXG4gICAgfVxcXFxufVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuW3peWFt1xcXCIsXFxcInBhdGhcXFwiOlxcXCJ0b29sc1xcXCIsXFxcInJ1bGVcXFwiOlxcXCJmdW5jdGlvbiBieXRlc1RvU2l6ZShzaXplKSB7XFxcXG4gICAgaWYgKHNpemUgPCAwLjEgKiAxMDI0KSB7XFxcXG4gICAgICAgIC8v5bCP5LqOMC4xS0LvvIzliJnovazljJbmiJBCXFxcXG4gICAgICAgIHNpemUgPSBzaXplLnRvRml4ZWQoMikgKyBcXFxcXFxcIkJcXFxcXFxcIjtcXFxcbiAgICB9IGVsc2UgaWYgKHNpemUgPCAwLjEgKiAxMDI0ICogMTAyNCkge1xcXFxuICAgICAgICAvLyDlsI/kuo4wLjFNQu+8jOWImei9rOWMluaIkEtCXFxcXG4gICAgICAgIHNpemUgPSAoc2l6ZSAvIDEwMjQpLnRvRml4ZWQoMikgKyBcXFxcXFxcIktCXFxcXFxcXCI7XFxcXG4gICAgfSBlbHNlIGlmIChzaXplIDwgMC4xICogMTAyNCAqIDEwMjQgKiAxMDI0KSB7XFxcXG4gICAgICAgIC8vIOWwj+S6jjAuMUdC77yM5YiZ6L2s5YyW5oiQTUJcXFxcbiAgICAgICAgc2l6ZSA9IChzaXplIC8gKDEwMjQgKiAxMDI0KSkudG9GaXhlZCgyKSArIFxcXFxcXFwiTUJcXFxcXFxcIjtcXFxcbiAgICB9IGVsc2Uge1xcXFxuICAgICAgICAvLyDlhbbku5bovazljJbmiJBHQlxcXFxuICAgICAgICBzaXplID0gKHNpemUgLyAoMTAyNCAqIDEwMjQgKiAxMDI0KSkudG9GaXhlZCgyKSArIFxcXFxcXFwiR0JcXFxcXFxcIjtcXFxcbiAgICB9XFxcXG4gICAgLy8g6L2s5oiQ5a2X56ym5LiyXFxcXG4gICAgbGV0IHNpemVTdHIgPSBzaXplICsgXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgLy8g6I635Y+W5bCP5pWw54K55aSE55qE57Si5byVXFxcXG4gICAgICAgIGluZGV4ID0gc2l6ZVN0ci5pbmRleE9mKFxcXFxcXFwiLlxcXFxcXFwiKSxcXFxcbiAgICAgICAgLy8g6I635Y+W5bCP5pWw54K55ZCO5Lik5L2N55qE5YC8XFxcXG4gICAgICAgIGRvdSA9IHNpemVTdHIuc3Vic3RyKGluZGV4ICsgMSwgMik7XFxcXG4gICAgLy8g5Yik5pat5ZCO5Lik5L2N5piv5ZCm5Li6MDDvvIzlpoLmnpzmmK/liJnliKDpmaQwMFxcXFxuICAgIGlmIChkb3UgPT09IFxcXFxcXFwiMDBcXFxcXFxcIikgcmV0dXJuIHNpemVTdHIuc3Vic3RyaW5nKDAsIGluZGV4KSArIHNpemVTdHIuc3Vic3RyKGluZGV4ICsgMywgMik7XFxcXG4gICAgcmV0dXJuIHNpemU7XFxcXG59XFxcXG4kLmV4cG9ydHMuYnl0ZXNUb1NpemUgPSBieXRlc1RvU2l6ZTtcXFxcbiQuZXhwb3J0cy5jb2xvciA9IGZ1bmN0aW9uKHRleHQsIGNvbG9yKSB7XFxcXG4gICAgdGV4dCArPSBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgIGlmICh0ZXh0LmluZGV4T2YoXFxcXFxcXCLigJzigJzigJ3igJ1cXFxcXFxcIikgPT09IDApIHtcXFxcbiAgICAgICAgdGV4dC5yZXBsYWNlKFxcXFxcXFwi4oCc4oCc4oCd4oCdXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpO1xcXFxuICAgIH1cXFxcbiAgICByZXR1cm4gXFxcXFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0nXFxcXFxcXCIgKyBjb2xvciArIFxcXFxcXFwiJz5cXFxcXFxcIiArIHRleHQgKyBcXFxcXFxcIjwvZm9udD5cXFxcXFxcIjtcXFxcbn1cXFxcblxcXFxuJC5leHBvcnRzLnNsZWVwID0gZnVuY3Rpb24odGltZW91dCkge1xcXFxuICAgIGphdmEubGFuZy5UaHJlYWQuc2xlZXAodGltZW91dCk7XFxcXG59XFxcXG5cXFxcbmZ1bmN0aW9uIGh0bWxUYWcodGFnLCB0ZXh0KSB7XFxcXG4gICAgdGV4dCArPSBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgIGlmICh0ZXh0LmluZGV4T2YoXFxcXFxcXCLigJzigJzigJ3igJ1cXFxcXFxcIikgPT09IDApIHtcXFxcbiAgICAgICAgdGV4dC5yZXBsYWNlKFxcXFxcXFwi4oCc4oCc4oCd4oCdXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpO1xcXFxuICAgIH1cXFxcbiAgICByZXR1cm4gXFxcXFxcXCLigJzigJzigJ3igJ1cXFxcXFxcIiArIFxcXFxcXFwiPFxcXFxcXFwiICsgdGFnICsgXFxcXFxcXCI+XFxcXFxcXCIgKyB0ZXh0ICsgXFxcXFxcXCI8L1xcXFxcXFwiICsgdGFnICsgXFxcXFxcXCI+XFxcXFxcXCI7XFxcXG5cXFxcbn1cXFxcbiQuZXhwb3J0cy5odG1sVGFnID0gaHRtbFRhZztcXFxcbiQuZXhwb3J0cy5zbWFsbCA9IGZ1bmN0aW9uKHRleHQpIHtcXFxcbiAgICByZXR1cm4gaHRtbFRhZyhcXFxcXFxcInNtYWxsXFxcXFxcXCIsIHRleHQpO1xcXFxufVxcXFxuXFxcXG5mdW5jdGlvbiBnZXRUaW1lKGZpbGUsaXNTdGFuZGFyZCkge1xcXFxuICAgIGlzU3RhbmRhcmQgPSBpc1N0YW5kYXJkfHxmYWxzZTtcXFxcbiAgICBsZXQgdFRpbWUgPSBmaWxlLnVwZGF0ZWRfYXQgfHwgZmlsZS50aW1lX3N0ciB8fCBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgIHRUaW1lID0gdFRpbWUuc3BsaXQoXFxcXFxcXCJUXFxcXFxcXCIpO1xcXFxuICAgIGxldCBkYXRlID0gdFRpbWVbMF07XFxcXG4gICAgaWYoaXNTdGFuZGFyZCl7XFxcXG4gICAgICAgIGRhdGUgPSBkYXRlLnJlcGxhY2UoLy0vZyxcXFxcXFxcIi9cXFxcXFxcIik7XFxcXG4gICAgfVxcXFxuICAgIHRUaW1lID0gdFRpbWVbMV0uc3BsaXQoL1p8XFxcXFxcXFwuLyk7XFxcXG4gICAgZGF0ZSArPSBcXFxcXFxcIiBcXFxcXFxcIiArIHRUaW1lWzBdO1xcXFxuICAgIHJldHVybiBkYXRlO1xcXFxufVxcXFxuZnVuY3Rpb24gZ2V0VGltZUludCh0aW1lU3RyKXtcXFxcbiAgICByZXR1cm4gKG5ldyBEYXRlKHRpbWVTdHIpKS5nZXRUaW1lKClcXFxcbn1cXFxcbiQuZXhwb3J0cy5nZXRUaW1lID0gZ2V0VGltZTtcXFxcblxcXFxubGV0IGNobk51bUNoYXIgPSB7XFxcXG4gICAg6Zu2OiAwLFxcXFxuICAgIOS4gDogMSxcXFxcbiAgICDkuow6IDIsXFxcXG4gICAg5LiJOiAzLFxcXFxuICAgIOWbmzogNCxcXFxcbiAgICDkupQ6IDUsXFxcXG4gICAg5YWtOiA2LFxcXFxuICAgIOS4gzogNyxcXFxcbiAgICDlhas6IDgsXFxcXG4gICAg5LmdOiA5XFxcXG59O1xcXFxuXFxcXG5sZXQgY2huTmFtZVZhbHVlID0ge1xcXFxuICAgIOWNgToge1xcXFxuICAgICAgICB2YWx1ZTogMTAsXFxcXG4gICAgICAgIHNlY1VuaXQ6IGZhbHNlXFxcXG4gICAgfSxcXFxcbiAgICDnmb46IHtcXFxcbiAgICAgICAgdmFsdWU6IDEwMCxcXFxcbiAgICAgICAgc2VjVW5pdDogZmFsc2VcXFxcbiAgICB9LFxcXFxuICAgIOWNgzoge1xcXFxuICAgICAgICB2YWx1ZTogMTAwMCxcXFxcbiAgICAgICAgc2VjVW5pdDogZmFsc2VcXFxcbiAgICB9LFxcXFxuICAgIOS4hzoge1xcXFxuICAgICAgICB2YWx1ZTogMTAwMDAsXFxcXG4gICAgICAgIHNlY1VuaXQ6IHRydWVcXFxcbiAgICB9LFxcXFxuICAgIOS6vzoge1xcXFxuICAgICAgICB2YWx1ZTogMTAwMDAwMDAwLFxcXFxuICAgICAgICBzZWNVbml0OiB0cnVlXFxcXG4gICAgfVxcXFxufVxcXFxuXFxcXG5mdW5jdGlvbiBDaGluZXNlVG9OdW1iZXIoY2huU3RyKSB7XFxcXG4gICAgbGV0IHJ0biA9IDA7XFxcXG4gICAgbGV0IHNlY3Rpb24gPSAwO1xcXFxuICAgIGxldCBudW1iZXIgPSAwO1xcXFxuICAgIGxldCBzZWNVbml0ID0gZmFsc2U7XFxcXG4gICAgbGV0IHN0ciA9IGNoblN0ci5zcGxpdCgnJyk7XFxcXG5cXFxcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xcXFxuICAgICAgICBsZXQgbnVtID0gY2huTnVtQ2hhcltzdHJbaV1dO1xcXFxuICAgICAgICBpZiAodHlwZW9mIG51bSAhPT0gJ3VuZGVmaW5lZCcpIHtcXFxcbiAgICAgICAgICAgIG51bWJlciA9IG51bTtcXFxcbiAgICAgICAgICAgIGlmIChpID09PSBzdHIubGVuZ3RoIC0gMSkge1xcXFxuICAgICAgICAgICAgICAgIHNlY3Rpb24gKz0gbnVtYmVyO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgbGV0IHVuaXQgPSBjaG5OYW1lVmFsdWVbc3RyW2ldXS52YWx1ZTtcXFxcbiAgICAgICAgICAgIHNlY1VuaXQgPSBjaG5OYW1lVmFsdWVbc3RyW2ldXS5zZWNVbml0O1xcXFxuICAgICAgICAgICAgaWYgKHNlY1VuaXQpIHtcXFxcbiAgICAgICAgICAgICAgICBzZWN0aW9uID0gKHNlY3Rpb24gKyBudW1iZXIpICogdW5pdDtcXFxcbiAgICAgICAgICAgICAgICBydG4gKz0gc2VjdGlvbjtcXFxcbiAgICAgICAgICAgICAgICBzZWN0aW9uID0gMDtcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgc2VjdGlvbiArPSAobnVtYmVyICogdW5pdCk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBudW1iZXIgPSAwO1xcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxuICAgIHJldHVybiBydG4gKyBzZWN0aW9uO1xcXFxufVxcXFxuXFxcXG5mdW5jdGlvbiBuYW1lQ29tcGFyZShhLCBiKSB7XFxcXG4gICAgaWYgKGEgPT0gbnVsbCB8fCBiID09IG51bGwpXFxcXG4gICAgICAgIHJldHVybiBhID09IG51bGwgPyBiID09IG51bGwgPyAwIDogLTEgOiAxO1xcXFxuXFxcXG4gICAgYSA9IGEucmVwbGFjZSgvKFvpm7bkuIDkuozkuInlm5vkupTlha3kuIPlhavkuZ3ljYHnmb7ljYPkuIfkur9dKS9nLCBmdW5jdGlvbihtYXRjaCwgcDEsIHAyLCBwMywgb2Zmc2V0LCBzdHJpbmcpIHtcXFxcbiAgICAgICAgLy8gcDEgaXMgbm9uZGlnaXRzLCBwMiBkaWdpdHMsIGFuZCBwMyBub24tYWxwaGFudW1lcmljc1xcXFxuICAgICAgICByZXR1cm4gQ2hpbmVzZVRvTnVtYmVyKHAxKTtcXFxcbiAgICB9KVxcXFxuICAgIGIgPSBiLnJlcGxhY2UoLyhb6Zu25LiA5LqM5LiJ5Zub5LqU5YWt5LiD5YWr5Lmd5Y2B55m+5Y2D5LiH5Lq/XSkvZywgZnVuY3Rpb24obWF0Y2gsIHAxLCBwMiwgcDMsIG9mZnNldCwgc3RyaW5nKSB7XFxcXG4gICAgICAgIC8vIHAxIGlzIG5vbmRpZ2l0cywgcDIgZGlnaXRzLCBhbmQgcDMgbm9uLWFscGhhbnVtZXJpY3NcXFxcbiAgICAgICAgcmV0dXJuIENoaW5lc2VUb051bWJlcihwMSk7XFxcXG4gICAgfSlcXFxcblxcXFxuICAgIGxldCBOVU1CRVJTID0gamF2YS51dGlsLnJlZ2V4LlBhdHRlcm4uY29tcGlsZShcXFxcXFxcIig/PD1cXFxcXFxcXFxcXFxcXFxcRCkoPz1cXFxcXFxcXFxcXFxcXFxcZCl8KD88PVxcXFxcXFxcXFxcXFxcXFxkKSg/PVxcXFxcXFxcXFxcXFxcXFxEKVxcXFxcXFwiKVxcXFxuICAgIGxldCBzcGxpdDEgPSBOVU1CRVJTLnNwbGl0KG5ldyBqYXZhLmxhbmcuU3RyaW5nKGEpKTtcXFxcbiAgICBsZXQgc3BsaXQyID0gTlVNQkVSUy5zcGxpdChuZXcgamF2YS5sYW5nLlN0cmluZyhiKSk7XFxcXG5cXFxcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IE1hdGgubWluKHNwbGl0MS5sZW5ndGgsIHNwbGl0Mi5sZW5ndGgpOyBpKyspIHtcXFxcbiAgICAgICAgbGV0IGMxID0gc3BsaXQxW2ldLmNoYXJDb2RlQXQoMCk7XFxcXG4gICAgICAgIGxldCBjMiA9IHNwbGl0MltpXS5jaGFyQ29kZUF0KDApO1xcXFxuICAgICAgICBsZXQgY21wID0gMDtcXFxcbiAgICAgICAgbGV0IHplcm9DaGFyQ29kZSA9ICcwJy5jaGFyQ29kZUF0KDApO1xcXFxuICAgICAgICBsZXQgbmluZUNoYXJDb2RlID0gJzknLmNoYXJDb2RlQXQoMCk7XFxcXG5cXFxcbiAgICAgICAgaWYgKGMxID49IHplcm9DaGFyQ29kZSAmJiBjMSA8PSBuaW5lQ2hhckNvZGUgJiYgYzIgPj0gemVyb0NoYXJDb2RlICYmIGMyIDw9IG5pbmVDaGFyQ29kZSkge1xcXFxuICAgICAgICAgICAgY21wID0gbmV3IGphdmEubWF0aC5CaWdJbnRlZ2VyKHNwbGl0MVtpXSkuY29tcGFyZVRvKG5ldyBqYXZhLm1hdGguQmlnSW50ZWdlcihzcGxpdDJbaV0pKTtcXFxcbiAgICAgICAgfVxcXFxuXFxcXG4gICAgICAgIGlmIChjbXAgPT09IDApIHtcXFxcbiAgICAgICAgICAgIGxldCByZWdleCA9IC9bYS16QS1aMC05XS9cXFxcbiAgICAgICAgICAgIGxldCBzMSA9IFN0cmluZyhzcGxpdDFbaV0pXFxcXG4gICAgICAgICAgICBsZXQgczIgPSBTdHJpbmcoc3BsaXQyW2ldKVxcXFxuICAgICAgICAgICAgaWYgKHJlZ2V4LnRlc3QoczEpIHx8IHJlZ2V4LnRlc3QoczIpKSB7XFxcXG4gICAgICAgICAgICAgICAgY21wID0gbmV3IGphdmEubGFuZy5TdHJpbmcoc3BsaXQxW2ldKS5jb21wYXJlVG8obmV3IGphdmEubGFuZy5TdHJpbmcoc3BsaXQyW2ldKSk7XFxcXG4gICAgICAgICAgICAgICAgLy8gY21wID0gczEubG9jYWxlQ29tcGFyZShzMiwgJ2VuJylcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgY21wID0gczEubG9jYWxlQ29tcGFyZShzMiwgJ3poJylcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfVxcXFxuXFxcXG4gICAgICAgIGlmIChjbXAgIT09IDApIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBjbXA7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG4gICAgbGV0IGxlbmd0aENtcCA9IHNwbGl0MS5sZW5ndGggLSBzcGxpdDIubGVuZ3RoO1xcXFxuICAgIC8vIGlmIChsZW5ndGhDbXAgIT09IDApIGxlbmd0aENtcCA9IGxlbmd0aENtcCA+IDAgPyAtMSA6IDE7XFxcXG4gICAgcmV0dXJuIGxlbmd0aENtcDtcXFxcbn1cXFxcblxcXFxuJC5leHBvcnRzLnNvcnRzID0gZnVuY3Rpb24obGlzdCwgc29ydCkge1xcXFxuICAgIGlmIChzb3J0ID09PSBcXFxcXFxcIuexu+Wei1xcXFxcXFwiKSB7XFxcXG4gICAgICAgIC8vIGxvZyhcXFxcXFxcIuexu+Wei+aOkuW6j1xcXFxcXFwiKTtcXFxcbiAgICAgICAgbGlzdC5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBhLnR5cGUgLSBiLnR5cGVcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgfSBlbHNlIGlmIChzb3J0ID09PSBcXFxcXFxcIuWQjeensFxcXFxcXFwiKSB7XFxcXG4gICAgICAgIC8vIGxvZyhcXFxcXFxcIuWQjeensOaOkuW6j1xcXFxcXFwiKTtcXFxcbiAgICAgICAgLy8gbGlzdC5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcXFxcbiAgICAgICAgLy8gICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUsIFxcXFxcXFwiemhcXFxcXFxcIilcXFxcbiAgICAgICAgLy8gfSk7XFxcXG4gICAgICAgIGxpc3Quc29ydChmdW5jdGlvbihhLCBiKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gbmFtZUNvbXBhcmUoYS5uYW1lfHxhLnRpdGxlLCBiLm5hbWV8fGIudGl0bGUpO1xcXFxuICAgICAgICB9KTtcXFxcbiAgICB9IGVsc2UgaWYgKHNvcnQgPT09IFxcXFxcXFwi5aSn5bCPXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgLy8gbG9nKFxcXFxcXFwi5aSn5bCP5o6S5bqPXFxcXFxcXCIpO1xcXFxuICAgICAgICBsaXN0LnNvcnQoZnVuY3Rpb24oYSwgYikge1xcXFxuICAgICAgICAgICAgcmV0dXJuIChhLnNpemUgfHwgTnVtYmVyKGEuc2l6ZV9zdHIpIHx8IDApIC0gKGIuc2l6ZSB8fCBOdW1iZXIoYi5zaXplX3N0cikgfHwgMCk7XFxcXG4gICAgICAgIH0pO1xcXFxuICAgIH1lbHNlIGlmIChzb3J0ID09PSBcXFxcXFxcIuaXtumXtFxcXFxcXFwiKSB7XFxcXG4gICAgICAgIC8vIGxvZyhcXFxcXFxcIuaXtumXtOaOkuW6j1xcXFxcXFwiKTtcXFxcbiAgICAgICAgbGlzdC5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBnZXRUaW1lSW50KGdldFRpbWUoYSx0cnVlKSkgLSBnZXRUaW1lSW50KGdldFRpbWUoYix0cnVlKSlcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgfVxcXFxuICAgIHJldHVybiBsaXN0XFxcXG59XFxcXG5cXFxcbmZ1bmN0aW9uIHNpbWlsYXIocywgdCwgZikgey8v5Yik5pat5Lik5Liq5a2X56ym5Liy5LmL6Ze055qE55u45Ly85bqmXFxcXG4gICAgaWYgKCFzIHx8ICF0KSB7XFxcXG4gICAgICAgIHJldHVybiAwXFxcXG4gICAgfVxcXFxuICAgIGlmKHMgPT09IHQpe1xcXFxuICAgICAgICByZXR1cm4gMTAwO1xcXFxuICAgIH1cXFxcbiAgICB2YXIgbCA9IHMubGVuZ3RoID4gdC5sZW5ndGggPyBzLmxlbmd0aCA6IHQubGVuZ3RoXFxcXG4gICAgdmFyIG4gPSBzLmxlbmd0aFxcXFxuICAgIHZhciBtID0gdC5sZW5ndGhcXFxcbiAgICB2YXIgZCA9IFtdXFxcXG4gICAgZiA9IGYgfHwgMlxcXFxuICAgIHZhciBtaW4gPSBmdW5jdGlvbiAoYSwgYiwgYykge1xcXFxuICAgICAgICByZXR1cm4gYSA8IGIgPyAoYSA8IGMgPyBhIDogYykgOiAoYiA8IGMgPyBiIDogYylcXFxcbiAgICB9XFxcXG4gICAgdmFyIGksIGosIHNpLCB0aiwgY29zdFxcXFxuICAgIGlmIChuID09PSAwKSByZXR1cm4gbVxcXFxuICAgIGlmIChtID09PSAwKSByZXR1cm4gblxcXFxuICAgIGZvciAoaSA9IDA7IGkgPD0gbjsgaSsrKSB7XFxcXG4gICAgICAgIGRbaV0gPSBbXVxcXFxuICAgICAgICBkW2ldWzBdID0gaVxcXFxuICAgIH1cXFxcbiAgICBmb3IgKGogPSAwOyBqIDw9IG07IGorKykge1xcXFxuICAgICAgICBkWzBdW2pdID0galxcXFxuICAgIH1cXFxcbiAgICBmb3IgKGkgPSAxOyBpIDw9IG47IGkrKykge1xcXFxuICAgICAgICBzaSA9IHMuY2hhckF0KGkgLSAxKVxcXFxuICAgICAgICBmb3IgKGogPSAxOyBqIDw9IG07IGorKykge1xcXFxuICAgICAgICAgICAgdGogPSB0LmNoYXJBdChqIC0gMSlcXFxcbiAgICAgICAgICAgIGlmIChzaSA9PT0gdGopIHtcXFxcbiAgICAgICAgICAgICAgICBjb3N0ID0gMFxcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICBjb3N0ID0gMVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgZFtpXVtqXSA9IG1pbihkW2kgLSAxXVtqXSArIDEsIGRbaV1baiAtIDFdICsgMSwgZFtpIC0gMV1baiAtIDFdICsgY29zdClcXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbiAgICBsZXQgcmVzID0gKDEgLSBkW25dW21dIC8gbCkgKjEwMFxcXFxuICAgIHJldHVybiByZXMudG9GaXhlZChmKVxcXFxufVxcXFxuXFxcXG4kLmV4cG9ydHMuc2ltaWxhciA9IHNpbWlsYXI7XFxcXG4kLmV4cG9ydHMucmVtb3ZlRXh0ID0gZnVuY3Rpb24gKGZpbGUpe1xcXFxuICAgIHJldHVybiBmaWxlLnNwbGl0KCcuJykuc2xpY2UoMCwtMSkuam9pbignLicpXFxcXG59O1xcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcInVcXFwiLFxcXCJwYXRoXFxcIjpcXFwidVxcXCIsXFxcInJ1bGVcXFwiOlxcXCIkLmV4cG9ydHMgPSBmdW5jdGlvbihydWxlLCBvcmlnaW4sIG1vZGUpIHtcXFxcbiAgICByZXR1cm4gJC50b1N0cmluZygocnVsZSwgb3JpZ2luLCBtb2RlKSA9PiB7XFxcXG4gICAgICAgIGxldCBob3N0ID0gb3JpZ2luLnJlcGxhY2UobmV3IFJlZ0V4cChcXFxcXFxcImh0dHA6Ly98aHR0cHM6Ly9cXFxcXFxcIiksIFxcXFxcXFwiXFxcXFxcXCIpLnNwbGl0KFxcXFxcXFwiL1xcXFxcXFwiKVswXTtcXFxcbiAgICAgICAgbGV0IGhvc3RzID0gaG9zdC5zcGxpdChcXFxcXFxcIi5cXFxcXFxcIik7XFxcXG4gICAgICAgIGlmIChob3N0cy5sZW5ndGggPiAyKSB7XFxcXG4gICAgICAgICAgICBob3N0ID0gaG9zdHNbaG9zdHMubGVuZ3RoIC0gMl0gKyBcXFxcXFxcIi5cXFxcXFxcIiArIGhvc3RzW2hvc3RzLmxlbmd0aCAtIDFdO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGlmIChpbnB1dC5zdGFydHNXaXRoKFxcXFxcXFwibWFnbmV0XFxcXFxcXCIpKSB7XFxcXG4gICAgICAgICAgICBjb25maXJtKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLmuKnppqjmj5DnpLpcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBjb250ZW50OiBcXFxcXFxcIuajgOa1i+WIsOaWsOeahOejgemTvuWcsOWdgO+8jOeCueWHu+ehruWumuaMiemSruWNs+WPr+aSreaUvu+8jOeCueWHu+WPlua2iOaMiemSruWPr+S7peWkjeWItumTvuaOpVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIGNvbmZpcm06ICQudG9TdHJpbmcoKG1hZykgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFnO1xcXFxuICAgICAgICAgICAgICAgIH0sIGlucHV0KSxcXFxcbiAgICAgICAgICAgICAgICBjYW5jZWw6ICQudG9TdHJpbmcoKG1hZykgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJjb3B5Oi8vXFxcXFxcXCIgKyBtYWdcXFxcbiAgICAgICAgICAgICAgICB9LCBpbnB1dClcXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcXFxcbiAgICAgICAgfSBlbHNlIGlmIChpbnB1dC5pbmNsdWRlcyhcXFxcXFxcImFsaXl1bmRyaXZlLmNvbVxcXFxcXFwiKSAmJiBtb2RlICE9IFxcXFxcXFwi5a6Y5pa5QVBQXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgIGxvZyhpbnB1dCk7XFxcXG4gICAgICAgICAgICByZXR1cm4gJC50b1N0cmluZygodXJsLCBydWxlKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5vcGVuKEpTT04uc3RyaW5naWZ5KHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi6Zi/6YeM5LqR55uYXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvZGV0YWlsP3J1bGU95LqR55uY5rGH5b2xJnVybD1cXFxcXFxcIiArIHVybCArICc/P2Z5cGFnZScsXFxcXG4gICAgICAgICAgICAgICAgfSkpXFxcXG4gICAgICAgICAgICB9LCBpbnB1dCwgcnVsZSlcXFxcbiAgICAgICAgfSBlbHNlIGlmICgvXFxcXFxcXFwuKG1wM3xmbGFjfG00YSkkLy50ZXN0KGlucHV0KSkge1xcXFxuICAgICAgICAgICAgbG9nKGlucHV0KTtcXFxcbiAgICAgICAgICAgIHJldHVybiAkLnRvU3RyaW5nKCh1cmwsIHJ1bGUpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBmeV9icmlkZ2VfYXBwLnBsYXlWaWRlbyh1cmwpO1xcXFxuICAgICAgICAgICAgfSwgaW5wdXQsIHJ1bGUpXFxcXG4gICAgICAgIH0gZWxzZSBpZiAoIWlucHV0LmluY2x1ZGVzKGhvc3QpICYmIGlucHV0LnN0YXJ0c1dpdGgoXFxcXFxcXCJodHRwXFxcXFxcXCIpKSB7XFxcXG4gICAgICAgICAgICBsb2coaW5wdXQpO1xcXFxuICAgICAgICAgICAgcmV0dXJuICQudG9TdHJpbmcoKHVybCwgcnVsZSwgbW9kZSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAub3BlbihKU09OLnN0cmluZ2lmeSh7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuivpuaDhVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3lzZng/cnVsZT1cXFxcXFxcIiArIHJ1bGUgKyBcXFxcXFxcIiZyPVxcXFxcXFwiICsgcnVsZSArIFxcXFxcXFwiJm1vZGU9XFxcXFxcXCIgKyBtb2RlICsgXFxcXFxcXCIjI1xcXFxcXFwiICsgdXJsLFxcXFxuICAgICAgICAgICAgICAgIH0pKVxcXFxuICAgICAgICAgICAgfSwgaW5wdXQsIHJ1bGUsIG1vZGUpO1xcXFxuICAgICAgICB9IGVsc2UgaWYgKCFpbnB1dC5zdGFydHNXaXRoKFxcXFxcXFwiaHR0cFxcXFxcXFwiKSkge1xcXFxuICAgICAgICAgICAgbG9nKGlucHV0KTtcXFxcbiAgICAgICAgICAgIC8v6IO95ZSk6LW3QVBQ55qE55m95ZCN5Y2VXFxcXG4gICAgICAgICAgICBsZXQgd2hpdGUgPSBbXFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJxa2xpbmtcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcImJkbmV0ZGlza1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwieHVubGVpYXBwXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJzbWFydGRyaXZlXFxcXFxcXCJcXFxcbiAgICAgICAgICAgIF07XFxcXG4gICAgICAgICAgICBsZXQgaW5XaGl0ZSA9IHdoaXRlLmZpbHRlcihpdCA9PiBpbnB1dC5zdGFydHNXaXRoKGl0KSkubGVuZ3RoID4gMDtcXFxcbiAgICAgICAgICAgIGlmICghaW5XaGl0ZSkge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIHJldHVybiAkLnRvU3RyaW5nKCh1cmwsIHJ1bGUpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBmeV9icmlkZ2VfYXBwLm9wZW5UaGlyZEFwcCAmJiBmeV9icmlkZ2VfYXBwLm9wZW5UaGlyZEFwcCh1cmwpO1xcXFxuICAgICAgICAgICAgfSwgaW5wdXQsIHJ1bGUpXFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG5cXFxcbiAgICAgICAgfVxcXFxuICAgIH0sIHJ1bGUsIG9yaWdpbiwgbW9kZSk7XFxcXG59XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwieXNmeFxcXCIsXFxcInBhdGhcXFwiOlxcXCJ5c2Z4XFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxudmFyIGQgPSBbXTtcXFxcbmxldCBydWxlID0gZ2V0UGFyYW0oXFxcXFxcXCJyXFxcXFxcXCIpLnNwbGl0KFxcXFxcXFwiIyNcXFxcXFxcIilbMF07XFxcXG5sZXQgbW9kZSA9IChnZXRQYXJhbShcXFxcXFxcIm1vZGVcXFxcXFxcIikgfHwgXFxcXFxcXCJcXFxcXFxcIikuc3BsaXQoXFxcXFxcXCIjI1xcXFxcXFwiKVswXTtcXFxcbmxldCB1cmwgPSBNWV9VUkwuc3BsaXQoXFxcXFxcXCIjI1xcXFxcXFwiKVsxXTtcXFxcbmxldCBpdGUgPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvdVxcXFxcXFwiKShydWxlLCBnZXRIb21lKHVybCksIG1vZGUpO1xcXFxubGV0IGpzID0gJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgdHJ5IHtcXFxcbiAgICAgICAgaWYgKGRvY3VtZW50LnRpdGxlICYmIGRvY3VtZW50LnRpdGxlLmxlbmd0aCkge1xcXFxuICAgICAgICAgICAgbGV0IHIgPSAkJCQoKS5sYXp5UnVsZSgodCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIHNldFBhZ2VUaXRsZSh0KTtcXFxcbiAgICAgICAgICAgIH0sIGRvY3VtZW50LnRpdGxlKTtcXFxcbiAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAucGFyc2VMYXp5UnVsZShyKTtcXFxcbiAgICAgICAgfVxcXFxuICAgIH0gY2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgZnlfYnJpZGdlX2FwcC5sb2coZS50b1N0cmluZygpKTtcXFxcbiAgICB9XFxcXG59KTtcXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgdXJsOiB1cmwsXFxcXG4gICAgY29sX3R5cGU6IFxcXFxcXFwieDVfd2Vidmlld19zaW5nbGVcXFxcXFxcIixcXFxcbiAgICBkZXNjOiBcXFxcXFxcIjEwMCUmJmZsb2F0XFxcXFxcXCIsXFxcXG4gICAgcGljX3VybDogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICBleHRyYToge1xcXFxuICAgICAgICB1cmxJbnRlcmNlcHRvcjogaXRlLFxcXFxuICAgICAgICBqczoganMsXFxcXG4gICAgICAgIGNhbkJhY2s6IHRydWUsXFxcXG4gICAgICAgIGpzTG9hZGluZ0luamVjdDogdHJ1ZSxcXFxcbiAgICAgICAgZmxvYXRWaWRlbzogdHJ1ZVxcXFxuICAgIH1cXFxcbn0pO1xcXFxuZC5wdXNoKHtcXFxcbiAgICBjb2xfdHlwZTogXFxcXFxcXCJsaW5lXFxcXFxcXCIsXFxcXG4gICAgZXh0cmE6IHtcXFxcbiAgICAgICAgaWQ6IHVybFxcXFxuICAgIH1cXFxcbn0pO1xcXFxuc2V0UmVzdWx0KGQpO1xcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIumYv+mHjGxhenlcXFwiLFxcXCJwYXRoXFxcIjpcXFwiYWxpbGF6eVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJldmFsUHJpdmF0ZUpTKFxcXFxcXFwick8rMzd1RytiMkpibDkxSlhlMUFMYWNBY1JLMXhpa0tOU2Z4M09KTnY5TUFLcGN3RktFTHF2MkZRRXE1MTgvWmxaQ2R6TTl2R256Yy9wSTNMemZPeWFCVndNeitkQWNaL3NqZ3dkcjkrYWhOMnpwekhvOGRET2Q2Szl4YVJXTWZEQ3p5NzNnUlB0YWtBSEpBM21OUlcycHVQU3JTVEJNQjJrVUdxRUd1VU5Xa00xcEhBMWpvdVNXcnJBTWJrT0VJVUtiMllRSjNlSXJVUzJzc1Q3NFd3ZWp2MGlyeFZaOFJUaFVncHpBU1k1NXVQdDdWZ2lWVmlpRVhGY0ovdnA5eGV3WVc1S0V0Z2MzdkV4Y1RWOHp2UDhjeUgwMXBkRjJLUEdzZzBITHdCRTRJOVE5dTFUZ0NPRmphTmZaTmtheFpRWjJWblBsWjFyTnl0TGNwYURjZjJNL2pyVGQvK25tc21XcmtqaXR1cTh4STZmQ1RsMEo2ZTBId0h6ZnRROFhGZFVGZWpLeFdERnBpMTB6alE0bi9yQ1ErNFM3T05aWlRyWWRpWHlQZTRRM21neko3UVo0NzVQM05wS082Z0xsaUp2cDdOSHNQVy9BSCtwZlhCWEJ3ZFJpdkM2aE5HNXVQNkJnOGdtaU4xR1RzUk1YdzdMaG9yRkp3V0RaUkE5WUxsWHZLUmJ2NVlZdHBGTVQ1T1pDZzlwckVqYWdZWi8vdWRLenkreEJTaEExMzNENVJhbStQM3lxS3FqTGt3dFFVWkp5eFpFODZiNjYwdlgyQ2JoYnhTWThKRkUzZzFYczR2Z1cwV0M1OGFEUk9MQXloWnAwZWk3bm1La1BGbGFRWTh1ak13dGQ4K1VaVFYxM1lPaWlkb0tzaFhxdkhKVklmRTVxLzI3ZnZ5R3UyaEtmSjJuSmFhdHdwbmlYcVJJdTQ5YzBmbFJST3ZVTW0xTEhXK1RvSlFzMEswcFpNd3gzSkpGeSthSm1sNFROVWI4TUxUOFdLZytaWkxxNm0wUEFXdzhnZGdJdExEYTJhRFQvUXMrQXd3U3ZrMVErQ0dyUURzem94bnFHcGRKaXpiRFZUUWtKY1c1M0lkSitpU1VRUUhDTXVNMVVZZnBkQUp3YzREMytqMzBTY0h1bkgzL2JOQmZZd24wNC9LSHY3eVpTeUZjMDZSMnc4bmdETVJuY2ZJUHJqTjZic3pCRUFjSzBwVjRBdGdockpBZHBDclBSQ3c0TWZVTEpnNjZxeFY0S1YxRmtiT0hZNmcwNkNxemRpOXRCZ2ZkMzRMemZkS2RIMVZvZHQ0SzY3Z1BudFhtYlU4Q1VUczJIUkZsd2ZDZnFCbVF0RkRpVDNGcU5QRkhYazNvSkUrc09JdFNydlVkdStidDRwRnlsbmVlR2xJU3NYNm1IT0hmazVCWnA5RVdPTWtqQTZEbWJwWmZxQm9qNC9ySmsxY0hidmZNTEovblc3SHhrdmRid2pmZUhyOXJMbkVyRDgrT2hNUHIyRkNsdUNYSzhzOGZSTHZuVlZSdUw4M2NkNU1KRGVQR1huaEhmSmljTThlOHNyeTBqV1ZuUDdDSi83MWtnQjFQWU9vT2E2WWNCbmQvRW9zdDlTT2VzbmUrWWt0blBhSFB4ZnYyL0d3YlpzN1FLZ3R6Wi9WbmN0cDgwalJMQndDTnREWk5BenczdngxeXZMNnk0UFBMZTNzUXcwdGJSeFBwLy9OcTB0VkhObFNhc0VtUEQzR3crK2prNTRWdVJlYnlTSGtZbFNHTzZDcUQ0YzZnencxYkdSWUREbkUraENkdUkvZ3hsTGZzc1NaMjJWbTJIa1Z4Z3ZRRzgvY053bkFJVlhEY0Q5cHBhZk0rSXN1dkNEWjRVZFNzN0sydXpKNGJVaTlQT3EwQVJyNnJFTU5MVzBjVDZmL3phdExWUnpaVWxkR1VBK3RBd0JYZUF4SlJ6dXdRK1E1Um9vN3NOd1dqOVN0NzZJYU93T1lKS2thUXA1VnlMZGEwc3h3U281dytkd0dkK2NtZTlSVERNYi9lQ0JXUWZ5V21UY1NrLzZVTG5Qd05WRm5VWE5GazJQUFBLU1JVZk15Szd4eVY4bU8rdWFjSkwyUGlKamw1bnpDS2JKejF3YUNubytmMkw0UTVXLzFYSy84alU1N1dUazNyaVdpMnVPV1FXWVBwVjV2bUYvWXpUdVdYeE5iNnpXcWJiOWo3aTlwVjQveXg4TnQvYU9VRnVkSkZpVHY4bThxWmxzS3JXRHdIN0grejBFaFI4VXhYNVpDTDVNTXpSdWJSOGxEUkVSTVJvNFE5d2dJdm54WXZkY1UwQXd2NkhiT25sY05scUFFS2t4RVJMb3FUeW12YStqSEIzZkt5Y1Ryb0lYVW5Ra0g0aHAzSWlFVGF0dTExenphLzh6V3psWENsbEpJVFJJNXBCKy9jOHpzK1MyUStnU2plQlFwakpwemtvMkJKUjd4cE5McjNHdUNVYlc1OUNNRHB0VG1YR3RsTWo1TzJzUXZqMEE2V2U0R3pyMng0Zjl0TlpvU2dFeDZ6S1AvSCtIYWlTWDNyc0dDdVBycHRDQU9ORmJieHBCWlpydU1uY0VtS25XbVcrT05CMzFWN2hZaVVhVzVKblVxWTloejhDUUFWQWRkUGpYUE1JQVBWK0JOQ2Zuc05GWFd2OGV3YW5QSXplMzdBUzkzNGlCZ2w0R09XYnQ0c24vRkZHSE83SWRYVzRmT1drbjF1NVFCdVlzL1UzQjQ0SDI3TklnVHVPYy9LY2FEMTQ4N2ZwVnZ0N09mc09uVXo5dDBNbHNVZGxNSkYzamgrdzNwRUxleFg5Y1NRem8yY3NyeTBqV1ZuUDdDSi83MWtnQjFQWUZ4ZmROdEo5M25BdFFCMlZWT0VYN2NQSTdXK0tINzgzWG9XcjRtd2pBMlN2TkRBZkFNNXdqMjRVSUxYSU5SMk1Ud2JPSlp0N096dy9JdFowc3VWQnpZNTBMWFIwczhMZXU0MU5PTGkyM09YSm5hNTZNaEh0akhoVDNYcnU0MHdza1Z4bXVxL21tL3BxbFhaTm5XdU16TytSVDRQOU5tU1A1Vm1Nd0pqL3FGSFRvUXFtdHNyVC9oeWU5Qm9wZytlZjlvSk1QVXY5K29HNHFMSXJoQ3FPdW8xUGZUTGsyYVNLeWtuTXdjeHNmUDkwdVpnQXFTMjEvL1ErZ0phVHhHUHp2blNKSE14dHcrYmFZdmxMSkV0Q3N4aTdVdFZvNDdBVHd0NHRLU2xjUnhtUk83L0E1SGJ2MTNhci9VS2paSkk5MldDSy9wRC9BaHMyZWlDQzlYenlZMEZoSVBNaGI4OVY1RXN5SEVNTXpkTHpSTHg3WWRyV0g1M2ZlVndLRFhjWjhzb1VrbHJDQ2orN1lndXBzWGE4T0NJZzhJK2lJZDRzZkQ0Y0FWWUVtbkY3NXR3VkpNbllTSmpsTWswRjNScnhsOGdsVTRuWVN0ZGVRb3g4Y21NRnBLL2hpUC81QkNOanFncjlmRkd0UUVQMTllYitWTEE2cVA0Q09qM2NacVY0K3IvOVExeEpiZ1lBQnJSLzV0WGlocEtMY2R4M3cwc21NU2JkckRxV1pyWG10blVwajdhM1FDNFlGQzRPSVVRQnlmcFhJVmh6eXdKTDYwWlpMUmF2aGx0cC9HK3IwdjVEOTZ2UmoyRCszcGR1Z2ErNEF2YVhROWU4ZDhuQTkxbkhCSkJITHVXUDFrcCtRYnZyZjVEQ2JQOE5vUlhnUzVZalFic3F6bjFDQ2ZTam1adnN2ZVBpNkJBRWJRRHRIOWJYZkVHTVFjV0dyZGNUQzNYTG9zaUtuUkNJZGRIZHZwWC9tTHFteXRaTHlHemdHc1hzRVNMUXN0NHI1c1JWZU9naUVtWjhCZjViWGFlUmoyeHluZERJdTNXZW4xUytqUC9SYmtCM1VoUVh2TU1oYTlPYkYwL2FCb040a3pkK0FvN2dTcU84enNheDJHMmp1cEo2R2NlM1NSSlo4SklLcXoyVWF5cmZkOXV2czlON2RGNXNMY0dNSlRiOGNYVnF0OG1JdEtkV3VKMFNPTzhscy90TlYxQ3hmZlZWRUZZSldNTDlObDEybGpLWWFNUmxDQzFRTmdVTHEyN0pFWjJRN0swdURCeVI0SVMyWFc4aWFkR1B2cEJLcUlaY2ZUOWU3QVF5NTRDUStUTDQwYTloUFJRbGdrNkRaRXFIQ3B3S0lOZE5kRlZEWUVVNnFBMFpvUFBVWHdZazR3STk3TjgvZlBSUlFRMHNDZkhrVm95MVhSYVBYN09IelVZNkpMejUyVXVISmo4aGpZbjladWVTK0xXZlVLWEFBakZvY2d2UjRWTVhZMFNrNlNXZVh3Um9oOHVPWmVjOGZSSWwrUHo2K0VjVW1GcjVINHE5M01MYStSVm9MTnpLL0FzTmF6YzJScmZlOHV6MlpuWElXYVRsWENsbEpJVFJJNXBCKy9jOHpzK1MyNTlOR0xBajN0MVFNZUc3WnNVU1FHekxucFBORFhtRjdjZGJqUHBFeHRzc3J5MGpXVm5QN0NKLzcxa2dCMVBZM1diSGs4emxMa3lvSk9ya2ovY2M1Nk5ma3ZHSUdJQy9hcjFTdW9ISDJjTXNyeTBqV1ZuUDdDSi83MWtnQjFQWnhyWlRJK1R0ckVMNDlBT2xudUJzNi9YcUVCbGw3YmRuTHd0OVlPQ0RxOXVleWJqMC9QRlhZQjFjMFpjbjkrU09VVnNwak1EN05ZYytEV2pVTDJiMnNxOFE1MlVvendOc09BSXQ3aU1jZllaK2EwV0dhdnlPRFRNM1QzblVnSjhOMjhhRXFzc2lQSnJYWElHbllzeTNNOGtvK1VBTXpMbG9HTll1MDhpME91SjFUeERsZmRVMU9GQzlaVy9RRDBicUhncXgrdTdidi82MUszMDJvUVIrTW1xRW5yaXNPT05NNjltd1ZQOGlHcFZLblFIcCtqWHYrazVHVUJYWlVDa0RwKysrQ01NRVJFYkxsdXNzdWFJV0dYc0N5cVJWbi9BekR5VG95MjhhTWVNSUJCdWJBYVVNUUI4NkxLcTJvdEQya1lXWEttZzdyUTRXSWZmZmVqMnB4azhWQ0xJenFZMWEzcFNwN2RUSmx1NmNMRVVaYjFUVzVaT2VLbmo1NDBXQlkwL3hQakk4c2N3eG9CUmJ3QStsV1V6MEc1a1BaaG0veXAxWnVheUc4YStsVUJzczlObzVPVzZPRnpIL3dLTmliNHN2RXVCYUpSV1FTZmF6UVB6WC9tQ2F6Qk5qSGpaME1hek9ZM2E4RXRZaFFobnBtTHM5bHFzVEhpRTRNeVhBR2xyMkpPdW9DOWNVMGpFeCtIekx5NEZwc1htQTdJMjJZcW56RjZ0a2ZveG43N1NjYitPK0V5c1oyOFd6Q2FUTWFodloyZVZXdFBub3N2Z0ZXUERodkt6bm90dWF3OXdHdTg3dnNudktXa3prcko5bDdXVkUwSVdPT3JQcW9mUUdEZlNoSHNEN01TSFphM3VYVjR2S2dGMyttVmNhbXRYbHpmcUVSc2NOV3R2MTllYitWTEE2cVA0Q09qM2NacVY0VDJ5WHdWcHNMVEhhRHh6NkZlM28wc1RUTSsvU0IxQ3FoNGVTRGJ4Uy9BRTdFUU1HanpwTDI1aWxTRmRtQXZtTW1sWjhEbzNNMXRsZVpWaU9jd2UyZ0gvZnM0NnQ2Z1p0QVpXTzJPSm1GZUxRTFQvVG5qZWp5aHZRMmtMbDVtejNMSzh0STFsWnord2lmKzlaSUFkVDJ4Q3hVbk9iK2xnQjgxOVdGY1pFd25wS2dQYWgrUWYwbjVsS2N0OE1rVHpTUHljWlpLTjhhcWMveWJkRHV4eVh5UE85eTVjZ1N1Q3ZVUDgrNkFXYUU1Vm1TS2Z0TjQ5MUM2U0czL3VXMFpRbDVjQ3BaclJTb3Iwakd2UjI1ZGtIVlNRS3E0WTlaQmZmdzlhQ1F3NnNFN0ZqeFdNNmduZ1hWekUzdXFKNEFrVUY1TC9mREFJYytvVjRoRnBoWEF0VlI3OGd1eWNNbEFCOXUvVDIzcUY5aFBacWJtcDM0cDZDU1FSSTRieVJCQjZtR2RvV2MvYVdnQVBldWNrUWtVK2hVZnNkbk5wZnRBT1ZzUWJjSTV6Zk1xazhQby9UOEJVei9Sc3ZRalZJTzBCSzRzbjNvcGRIZnJITEttWWFLa1hNVTVJL2tnWUlUYVVxcXdqUHBZQysyNUx3dFF6cmVTdDNDOGtXNTFrREVWOVlFeVhLeVhMSXZxV2YwYUZCZ1Z2K1lISUM3M1Yzd080S0RGbXRpQm9hWUJKSG4zVWNiUXdjL2tpbk9hM1NUbElUU3BFZEI1eG5HQ0JUbi80THlydGFtWXZHSyswcTJyT1BkYUVQZ3RZZU1Yc0FESFVzUEdIVVZZOFpDb29Hell4NUJZMDQyRXdXVlkyNytPSHNXRnQ0ZEpYUkx3dXk4RzBjYkRSK2ErUWhORWJOcXJDUDNuRjIwRVlleFZFdHBTdjBlQksvbkRsMFF1cWRDaWovWUJaT1hzTWhPQ25zRVVjUjg4R3lsbTViUDRkOGI0aWI2eC9pREFQY3lUSDV4NzhoYU40NGxtT29EamtoL0hEYTVkdklLTzlnUHpUeWJiSS93SE5yNW9ES0NscDZGb0pWemZ6VWpVN1lCcGRabU04L1pqTGF0cGFRWkdSZWRseEczY3ZjVTAwZk1RS0twTmgvbXRGQXF1ajhxZ3kxNTJtUnpnTnBHeTc2TFZqZXF3cTQvdjdOUlRWQmJUL1RLOUlvNHNQL0NsNjVUSHpkeDdXN00xMy9lT1NOTjZHUjJsbHNDdHFrMDNMQjMxZ0dUb0hKYUVSVlEwQW00cURMQXM3d3JFVkRsWGRKVElnbk5kR2VsWm11eit6ZitYS2w3N1JLaUo1VU85MStWb3FSQjR6a2Y4blVEaWhHQk1BcHBsVWZxVEZDaXZqbWJ0WkxVQVhhWU0xTGl0azRQL3RscER3K0Ryb0h2cWFVZitNT2tsaEJxWVduTU12TGpVa0JjS0NlZXZUeWk1TGg1bTZZNVdlMkpnZlY4MnF4ekNOUTlNOHpSN1dVQUNZVFpjcDRaU2lYUThtbkIxVjBEL3d2R2JBSE5lNXBoUGE4LzM1OFJOMWVjZUJyNlVWVHB5dk9tNnhRaUJhTXliYnhVUXdxS1VSTHBmL2tJNnplaFV1bm50L0RHU2lGVlNiU2pabHpwZUEzaUlNWkh5ajNIMm1IN3QzZTRCMU9ZY2VzQlU1WmNjWjlCTGNMQXpWYzVlVjJabHdseUtqU0ZROG9ENnVqclVZYjlreE5ScUNBYW1qSmFOR3U4b1FvSjl3ZG05Y004c2czRlJaTnJYckt0Y1VhN2Vuck9KMFhnbW5DUzlqNGlZNWVaOHdpbXljOWNHbjJNaGtKbFBLaFFaQjVselZHR2ttOXFadzFZR2NqWEJHc1laeGtDNVRBa3ozd04xeTNmSi9NODhxZ2tib2szV2Z5dUdUSmlCaUZwMjdPMlI3RHNhZzJEWjFOdm1BS0x1bjFGdCtiUjRUSG1QTzl5NWNnU3VDdlVQOCs2QVdhRTVUTUVHZndOUWZYMDlzY2U0cHErMzQ3T2xETDdEdnp6c09RbksrL2JDYzRubDcvUytvN1RKeXhPR0p2ai80a3hLU2dVU3B1MG5wYVFBWFA5NjVCYUttRTRCa1B6MjhiTHdBTXdSeU82ZGlaRnl5dkxTTlpXYy9zSW4vdldTQUhVOWlQdG14dTlDM1RNdUpmSitJLzVGOXVndVlsR0twclNPMENPRWl3eFZWS1R5eXZMU05aV2Mvc0luL3ZXU0FIVTluQytmM1gzakZXa0luVXZadUYrUVRYU1dQVXcybW8rbEhwSmFLZGR1N2p1UlB2ejJRMVc3elZrWEF1NUxHQXRPc3NyeTBqV1ZuUDdDSi83MWtnQjFQYVNhS0JNbjhraU5Sc1kybEpjM3h3NEZtcXlmdmdjT3d4VkpFaU9GSzFiUXE4UzljMGhFeGVuMENrNit1ancvSSs2aVlEVldBZURkSlpQaXpzM1VwNGpjWTJTUG1kNUdQakd6bDhCMUt1cHZKRXE4WjYxbkVpV3hrRnFod3U0MTV6TEs4dEkxbFp6K3dpZis5WklBZFQySC9YeUpmZWVkZ3dVc3cxTTRpWHZuZ3hSdGN5MTBLUHRlanNJQlRWOG1OekxLOHRJMWxaeit3aWYrOVpJQWRUMkUwcVJ1Snh2VnlYTVhScGtpS0FybGxBQXh1TlVrc2tMZWdscHR5K2s5TDU1MXp5dmxkK09hb3B6Ymp1U2VkWnh5eXZMU05aV2Mvc0luL3ZXU0FIVTl0bnlWSjRxVm9CTG50QXN3VGZGcTJkNUJhK1ZpV0VqUnBMUERlVTJwVUpoQ0Qva1dWcWVWNzlnc21US2FJRDBvTk5WbFoxZnptalFiUTI2NGdReGdPSWkvVXZhaWZVdkpZTHc5c3dVY3hvR2dtWGY0WnR4ZXE5L0hTM09zeGtoWlUvZlQ2eDNVbElsZi9aTnBTZWYvQ1EwaDlLc0Z4STJlSEVqckdmWTljRVhLSDBkaXRJaFFHTFZ1N0ZkdkJtTWtNc3J5MGpXVm5QN0NKLzcxa2dCMVBaVVBkbjVEYThaOWM0R2g4TlUrWmV0enBReSt3Nzg4N0RrSnl2djJ3bk9KK0hDeU50bmlKQVY0cG5YUmwyNVY2Qi9jN3JpU1VzTUY2Z1JuNjdudTU5Snl5dkxTTlpXYy9zSW4vdldTQUhVOXBsYmd6M2lQYVZUdTFBa296TlFFeGRoK0RyelFuSnpnaElwc2pHTElUVG55eXZMU05aV2Mvc0luL3ZXU0FIVTlzSDJJN1F2QWhFa3B5U3dvTjFWLytqQ0FRYm13R2xERUFmT2l5cXRxTFE5UE94ejN2ZjllR0FnUlk4alI2OTBLRkdOT204eDRwdnNtcjlHUFFkMTljOXgvbXk2WUtaaDV0dmZ2c2hNd3IvVEtiRHVJbkxFN0FDNkZ6SWV2QkFTVURTd0hPOVpJaTAvSGEyK1duM2RpRHR4SHlSVlFmRDlaTzA3SWVQMko5blJLSUNiRDhrSWZaZlFUT0xJQisrdXJPSC9HOGFXTlRqc3lYWFE2UVUvZDJ4Y2F4YlNEVmxvbW9kWjJhTm9DMk9LNUxoNW02WTVXZTJKZ2ZWODJxeHpDUFhqajNlQ3o1d2NiZ1lXZG5ydFNGeFBIekNXa2ZQK0Z1aUV0K1FvZktPVEZ1eGQ4UlJ2cnBUeDMxOWJwYlU0TVRyYmVlMnN1SnRoSmx2aWRYaWY2Y1BMSzh0STFsWnord2lmKzlaSUFkVDJzNTF6Nm9YdjlQeWtNTVptTG9YR3psbzRmVUxJWDNxci93VnVRYjU0WXg0Vm8vcTN2TVYyNDByQXoxZFRSQWNHVGVnWnladEd6akVnMjhPZGdGWlR3OUR6VlZLYTdLeFpJMklWdTdQQUVtci9ISlVYTE5pS1ZSVmM5bzMwZHZIYUwvMmxyRjA5T1pmV1ZvUzdlNFJnTHVaVmdhY212QUMxN1hhZGlYODljSXRvNVdQd2hvZnZZcmtvRnA4SU91ZEtlQkdOOURmYXpsSzh5WGVJL2ZYNjV6OTdQYWhRc3VNeU1wcng1MXJ4S1VnM0dtVkprRER3d3h6azU2MnNNK1hPUHh4T3dWUkpRY1R5bWJ3TFp2VHp4bU9yNzhuZWU5RVAvaGJGTTBBNnk0cXM3MnQwZWJDVU1odW1VcnkvMklvelVYNmhjWEcrYVc0SFExaXNZbjdaYlczdDVvQzlINktTVXYxTFkzRzFCRkFDajhSemxVWUdBNllvT3RUR0tiN25TWmdCd2t6dFBHaVFTTlBlNXBIOVdhYWc1d1JYMjNxNld2QlVGS05CY21CNEVZMzBOOXJPVXJ6SmQ0ajk5ZnJuM3BGaHdWZDBVekVQcmhDSXZLRzlEd0N5cXNNRUpxNUdJZlVId2RGMFhrbTc1WEI4L0pFc2JZUHNKU2pVdnBJZ21DU3NXam8wOEtXSjFYNnJtaHovZW9UTzZSeVpLQWp4dHFOZmtSdlVZaVNaSit5akhMeWdtWmZ2SCtiL1hNc2xFSWxtQXI0ZUVES2FqSklhUVRHVDQwbFFDMDlIN2ZGSk9rMzk2eS9Tc2YyTVdTK24vVHV1aE5Gc3dZWjVTWC93UmlTanNMYXJrYTVmRWpBZEM1QU9GRUtPRUlSRnVHMmJiR3BlNHVVaGYxWC9YOHBaTkFmTWJ5amJveHdnV0R5eHpSVndaZm92V1VxbGpTd0R3bzhZNlRsWENsbEpJVFJJNXBCKy9jOHpzK1JsN1BWaUtkYlI1U0tBUUo5V2RvZS9XQTU4NEE4S3dOWFlaNGxHdVJLbWpjNHVhVlc2dzduWnd5Mzg4UnNGQW04TysreVptZ3UzR1E0NmpoT3FBOGtiWll1SFo1aUVLS0d2TGxwQit1ci9vVGxYQ2xsSklUUkk1cEIrL2M4enMrVExhWFBIcXpaVHVzdFRBeVhDaW5PbSs2ZjlVbC9JS1ZGQ2dERnIyQ1BWNHVlQVhDZWlJcFVrekt4TkFPbDVibmtIdnRVTTI2MW94M2h6WkI0ay9pRUk1WEZSSmNlNVJTU3NRR2JoY29hZEUvRlB6eGxuNnhkbEdMYi93TVNhNlJrVnFtRzVmd2dRT1BENkxCNUZnSmpBbU9NQjlYL3YrbDdVdzRyVWtHNnBrYU5KYkEvalowaFo2MWpGSlhHZEFXcERUUGFzcURXUnZOQUlUTGMyNzhVamNUYzBKTmZJbUR6amhPcExqbFFYSUMvT2lYdk1ncklGSmUwNGZ6dWVteENvYURXMWYyZEd3WmRESlo4cXFmd1dnTUdLd0Z3MExYMGtyYitiUWwzSXZzNlVNdnNPL1BPdzVDY3I3OXNKemllWFRMQTUwU3Q0M2R2cXNZYTRxUWszNHJQeFhrNkJxYlFhZzdwMnduVzQ0VHl0bHJsQ2R6T2szWGJjWDhBcmduS3BqdGpUUm5KaXdpT0VJMnVOdUJJL3hXdDBWRGlWQUV6KzJsTEJZY3ZyeC9kd3cvallOWDEyNUJSYnhPeDEzL2hnR0dZeGthaU5SY2tnbEtLcFJHcUpTQSttaWJrVHBleXBnU0g5QVZncFcvL2ZkTlI0SGZVcVRwR1BCVUR6Q2NMT2xETDdEdnp6c09RbksrL2JDYzRud0hkUUFmMXlNb0ZWUTZBVUc1aW8zNEdqeWVJVWFIZlNHNnRoTTcvTDVzTGVsdGo2cExUcExYQnIwSmJCc0ZjSHl5dkxTTlpXYy9zSW4vdldTQUhVOWtvTFowb1JYTVFSY2ZCamY0QTJiN3ZQOE1UckxMR2pDbStCRHloanJVMVR5eXZMU05aV2Mvc0luL3ZXU0FIVTl1M0xMZERJRTF0UGdoTTg2eW5iMlF6TEs4dEkxbFp6K3dpZis5WklBZFQyVzJFeVdNd2lmYUNhVU9zS3VRUlZJQkN0K0s0aDhhQ1I1K3JhbnJ6aTJOck9sREw3RHZ6enNPUW5LKy9iQ2M0blFlMzN4aFNpSUdremlNL3gyOWp6dlhzUGlmSDg1cW1jL0wraDg0d2RyRzNMSzh0STFsWnord2lmKzlaSUFkVDJHeElkc3g4cC9vOEJveFNDWTB6aFR4N3dNZk5WaGxZUUlkR3hZOENPcG5UTEs4dEkxbFp6K3dpZis5WklBZFQydS93R2tmV2paaTAvV2pIbXM3eC9ZNE5hMHMvRmNaVWYwOG5NWXZrbmVEN0xLOHRJMWxaeit3aWYrOVpJQWRUMjN2ZUJ5dlRVWUVBb0dSUVk2YXRuQ1VnU1VtMENUTXBiTDZueHBmWXFjTmc1VndwWlNTRTBTT2FRZnYzUE03UGtDQnNNWEUyMVErRHIwcTJHc3hPVnBCOHZHZVJ2VWJYZTBva2ZnNzZFZU81QmVIQlVMYW5nNnJ5Ky9kUlY1TjNFeXl2TFNOWldjL3NJbi92V1NBSFU5dWt6WUlWRXg1RThvV2E2RU4vTVFTWnpkRFlvdFZ5djFuQ2VSeXBSZS8vOUg1OHdQVHh1TTUrSU54Ny95ZS9rRXowMk13b1Q3UFNVZDNka0pXZk5WejNMMHFOQU5SVGdjNU5HanMvVENPbm15UDN6SjhLWDN3dUU5Q2wzdU01SmswSVZacXhydnE1MXpuUDlmNW9EWHozT2xETDdEdnp6c09RbksrL2JDYzRuakZvY2d2UjRWTVhZMFNrNlNXZVh3Um9oOHVPWmVjOGZSSWwrUHo2K0VjWExLOHRJMWxaeit3aWYrOVpJQWRUMnlkWkdzRUUyQ01MY2JtSWR5Y293QU1zcnkwaldWblA3Q0ovNzFrZ0IxUGIyeDRmOXROWm9TZ0V4NnpLUC9IK0hhaVNYM3JzR0N1UHJwdENBT05GYmI1Uld5bU13UHMxaHo0TmFOUXZadmF5cnhEblpTalBBMnc0QWkzdUl4eDloeXl2TFNOWldjL3NJbi92V1NBSFU5czJqMCtEL2daZk9oYzMybkt5MVFXVFprd0JoNlQzRlhqSXd2UFc3cWxKVytWL3BEM2YrQlZuSk8rVERZMnNSWEtQcEEwVEdNQVdjbVFzNW5DK2ZtYkdOZE55S0I1SXE4cHFPRGFDcXRTeUVhYVBwZEdDTHd0OXhxbVdBVXlpUzNzc3J5MGpXVm5QN0NKLzcxa2dCMVBia1U1Tzd4Z3VBZmtSUlNNYnFoVnBxckJxSUJ6YVRxd0sxVjlrUHIxb0U2L1Q1dDhYSHlIdGdHRFRRQXl6cHlJbzZwWnRUMmVGQ04weFd2dHIrTHc3LzZTWlZVcFJVdzJDdkk2cjQ2K2dLbmQ0OWMwM21nVzNrSjhjekc4S3BMODRERVJsbkdsUGtNVENqaUNXY2Zpcm9jbWNraHZzcFVOclJGUytpbVpGWTFNMmxwVEpucytBWmFuQ2VQUnpaZ1R1SUxHK0cxdFhldFNHNStLNDlOTjV6Q0VNUWxEUjN2cGdGbHJYT3hTWVgzNm9vWDdvbjdsNlZkUmU2TlBZQllmS0s1cnVwYzFEUGJsUFoxam9wS2VQZ1pDSlhrS3NtdXVydlFEM1poZDY1UzBUNTFNSmhXb2ZrMDd4UEtoaTJ2S0k4QzdwamY1YVUvVENNZDJIUWxaVmlDVGN0dC85MC82dXZLNXBuc1BRQ0hpYU1YRnFkT2lrdHNhMy9IKzVZU2xDemVmSC90MkxCWTlSZFd2NWxoZHVqNWp6c1V5VGJTdnNFVWh1ZlJyZmQxanNYWXJscmlYeklQTmdWM1JJN2tMMTFldkU3SlNHeGQ4Uzh1UmcrL2JMZHlENU5TT05JbE1CdFp2YitQRFkzL0JkejYrRFA0VWFRbkJnTkREOVg5cEV4L1drNnptckd0c3BzZ1ZDeGtLelA0ZmN4QmlMYnFOcU1jZFJKMXp0YkhuTmpCaXFwcVlhbHJkNXNnK3ViWW1jVnhPamFNMDVxOTJFdjUrMnFWcE96N3doN1RwYWVORGFXWkxzRXB0a3dPRzNGY1VnblhPa0VrdjB6aHQycFlCemlob1RKQlJsRzc1VXNkcTg1QmFXbXZGV1ZobVk5cTRlTUtnQ2k0RUN1Tng4dmluSmIvV21YVjZKUkgvUG5MMEt0NjlOZzJKQlRUUDBkMjFRcnB5L2dnTUxrY1BPQU13N1FPa1NGcWdnVnZIYnJNMFB5Smp6b0NrQTVWTHQ3czlwVnhlbG5JaklMZEVicGQ4amhGTUhUTnpTU01LSU93dUJwYkJHTnNScFc0ZU9RZ1BUMEgxclR2T0NKaytmNjN6WVllN0d2TFN2dWluNzBwSVhkbFlFWG1lay9naFVGT2tqTHdXS0pPaCtIVjJVM3JNQWpYOVBUdG9qdFhsY3RBQ3Z6dXVob0NrVWJSSUNmQWs5SzE2YngwSHBpRDlhN01SMzEzOHBkWmo2aC84c3J5MGpXVm5QN0NKLzcxa2dCMVBaZ3FqdnpMaFJuVTIrYWhRWnpxWGlzeXl2TFNOWldjL3NJbi92V1NBSFU5dlJBY2ZSbVdqeGkyVDZ3YUk3MDR1TGljSUZhNndSTlFDaTdyZ0EvVUhZSXpwUXkrdzc4ODdEa0p5dnYyd25PSitaWXpCbTZFZG1CR2FkQTVvY0xXQUIwcGtMaWRqTVU0UUR3bjlVdW40aVp0SnV0Y3hkdkxVQUxpdzE4MXFtbmtNc3J5MGpXVm5QN0NKLzcxa2dCMVBhYkY5aEptdGYzTXduZHFpdndkSDFCYzNRMktMVmNyOVp3bmtjcVVYdi8vY29DWnloSHBTRWdtd2xSOWlNRDZHUExLOHRJMWxaeit3aWYrOVpJQWRUMi9JREVGRStMUGdsWHBhL1dpTkNrdjErMGZZZjBvVE9XTjEzVVBJVG81K3ZMSzh0STFsWnord2lmKzlaSUFkVDJGZmVhRFE2SXl0SEtXRXFSSFp0T1BCN2JnK1FtR2hHMGNpdG44N253TkFZblBRRmEyNkVZcVFHaXM4YUVxVUJXWUtvRWFESVU2OHgvY1F1K3BQUU40OHNyeTBqV1ZuUDdDSi83MWtnQjFQYU9WeFIrbHdkeWprc1pPaEpyMDhMRnl5dkxTTlpXYy9zSW4vdldTQUhVOXZKekwrZGxyYm5zQmVSc3UyZDdVNjNYbnNzVGRnazFPd203QVplOW5nalF5eXZMU05aV2Mvc0luL3ZXU0FIVTlyc3hXdzZ4b0RpQ3ozUVdsRW8zRHFmakVseS94Z05BM1dUZkRpbkZvVy9zeXl2TFNOWldjL3NJbi92V1NBSFU5aTA5SjlhOC9ONUdDcDkwWGMrM1RVdG5tUnZGV1B2UnJnQVlxaGw0VFRUZ3l5dkxTTlpXYy9zSW4vdldTQUhVOWp3MGZRQmZZOVBaVzMycFRTRmcvRG8yeVJETDhlcFRIMVhLaGxNbVdPdzd5eXZMU05aV2Mvc0luL3ZXU0FIVTl2VDV0OFhIeUh0Z0dEVFFBeXpweUlvZzFVQTBac1l3UFZoQ1dseWordmNEenBReSt3Nzg4N0RrSnl2djJ3bk9KeFpPbnQ0RTFOMXdKY3MyMGRDL0QrSzFTZ2h2ZzdqQVA3ZHA4dytPTlhCNkVmWC9oRXppRXFCNXdqOGg5bmZ1RDhzcnkwaldWblA3Q0ovNzFrZ0IxUGFZT3gvWWpaR3pTV2F5YkxTU1lYV0tNUFNoMmpiaU9UbVZQNzAvclNwYjhNc3J5MGpXVm5QN0NKLzcxa2dCMVBaK2lROFhxN3ByUjZCZElLMlVzUEJ6RTQ1eHhoNnYxMkRmaGFhTDJJZmxYanVqWXBEcHMySUk3VGFrM25VWitnN0xLOHRJMWxaeit3aWYrOVpJQWRUMitFSmlCcGY3TW5sZytJVzcrQ2ZYVERiN3R6Mm1iT1JWaWFnU1RTY2FxSnZMSzh0STFsWnord2lmKzlaSUFkVDJFL1ZLU1lqbHRnR1h0RWFjbjVidEpzc3J5MGpXVm5QN0NKLzcxa2dCMVBhV0xNVmFPVkc0L2UxVlBUU0F6WTlIODdPQ0pYZXgraUFPb1crS0FucmlCM0puYTU2TWhIdGpIaFQzWHJ1NDB3dG0rQ0VXWHVvWThYRUpGZHZjRmNIN0NUNGFSZXZ0azdxZnJJRzBQcHZTM2NzcnkwaldWblA3Q0ovNzFrZ0IxUFo0Z29BUmNCaTdQdWIySzlUWGptQXdvY2VmRFRyV01oRHVwYXdQcVFYU0ZCNEFUOTRLc1pSc1hadFdFMzk3eDFOWkh5Mmp2SkhpN21GREs5UUp5QnZ4VXowRzVrUFpobS95cDFadWF5RzhheGJiVTZmMWVEYW5pd08yWjBYTWk1dGJWWGJxaUtVVmpKY1ZuNi9zUWNUdzRFUnROcWdUQnk5Ukl1dncvWlRKVGlIR2x6QjhaTGVxYXh5NXM4eWNlNnE3NHJIVjhTSk1TUlZQUHF6T3RVVjB5eXZMU05aV2Mvc0luL3ZXU0FIVTlqY1llVGU5T3AvdTgzUHlBU3c5MXdMbXRKWDdrdUpzTXlRQ3UycXQ2ZStrNlg5S3RiQUhOMkJXejdLQXo1UHBOelg2QXFQUVAvcmloL21HcDhRNFBBU2lFeU9UVDhqNUVwMkxUejBPQ2d4dnl5dkxTTlpXYy9zSW4vdldTQUhVOWlSamE1SGR3WVo0MFNyR0FkK0o2SllKKzN4aUdlU3RVQVZGenZCbWlOb1c3YTFrZ21rNU0rTzdUcENCUTRRUk5WRlgxTDZyUWZxVitPY0ZPZGxXMUQwSWFzbXRtamEzQXRHWjZuRjc2MDFpdkhZM0xqdXdSeG8za2RxVHNkV1VlTTZVTXZzTy9QT3c1Q2NyNzlzSnppZnJaSC95TnY3U0RVeEI3djU0WjF5eDM0ZThNakYzWm5ydmt0ZVY1M0R1MU9LL3M3QjZEWkNzbWEyTS9UMjBjLy82dG1ZZVBvU1Q3U0drcFlCa1I1T0RYVDgvOFU0UW1aNnJIaTRVbVAzY1BDZlgxQkhFaDFyNVBINmNwOFBnWkdETm9LNit0alJtMkxSRTY0ZFZtZmF4d0hlbEQxbG9FZXNDeUQ1MDFIN1JZMU05QnVaRDJZWnY4cWRXYm1zaHZHc0hxc3psbUp5NnpFcGRZcXRVUDA3OXlKNzExalBhWkNMNVRySGRUeWhTanZYamozZUN6NXdjYmdZV2RucnRTRnlFaXRjTjViU3ZBelBqQk5mcU9oc1BBeTk4eHNmVUNhVU83RWgwRWVGTUhjc3J5MGpXVm5QN0NKLzcxa2dCMVBiWnlpT281UFpPY3oxVG5HdFYyQUZ0OHVzMkQrUG5qV0MvM2dBTG9ESVYwWE5HNjVITWR1c1M5OEdEbmw1N0FhckxLOHRJMWxaeit3aWYrOVpJQWRUMkFrcXhhUHFIYWJCU2RndStSSlNDQmZzK01GZEhVWU1NMTM4dUtvdytXOFdQem1SREdYTGpsbS9UVWJzMkthdjFjMTU3Wk1GNVVISVk2eGRiVXByMnpnSG9mSUl3WHdkS0wxR1dCQ0NkOVV6MG5seXR4VUU2ODlRYWtTbStMdWgrNEJ6Smw2MUhBYjdaa3Z6VFlrSjNBL3MvMWVQaVBzS3VtOWVPN0dZTDU0dkVmM25ydlN0NTFTM01NMkJ5OUFzVHNJaVFVejEwdU15UDhSSW5xYzAwcThzcnkwaldWblA3Q0ovNzFrZ0IxUGJiZnBaSjRkaGEvVzNERWluSE03MWNpdHIybnJSVkJpVU54Z2F4UCtETmpWWFVkK0c4b1ZEcjVlZU1QUnF0WWhZODczTGx5Qks0SzlRL3o3b0Jab1RsbU9NQjlYL3YrbDdVdzRyVWtHNnBrYmhQeTRWbU9KRExxdm5SNEpiNUpqOFY5djFIYWdGdU8xS0liVU9JR0FkUGNCYklBOTBERGx6Ky9Ja25zY1RwcWVGRlpOSUV5bWdTKzZSaTF4K0pTSC9MSzh0STFsWnord2lmKzlaSUFkVDJKdUgzRVFBU3c3RGFyOXo4TWxlZTZPbDNGMG51R0haZzZiMXB4MkVOOUZvME9EdTgyUFYwSklNOHNqT3c4UmEveEF2UHN0c0xVYzROaDBnYmN6b3Z2bVRHaHBWWGlUNXk2cW5mSHBmcHBYT0xJRXFidlQ2VUloRmZoVTZhMWZUeDN2aVR1cUViMlBwdFgvUkc0b1RQd2dDYXpYdHlZeXNlcE8yKzZ5aXZXMnZMSzh0STFsWnord2lmKzlaSUFkVDJ1ZUVmUWpxcTljdlAwVUwxZ1pkYmZvWjdBVjhueGVRUVROR0wrejJwdXFmTEs4dEkxbFp6K3dpZis5WklBZFQyOTRwNDZVcy9nK2l1V0hBMnNkSHVFSnFibXAzNHA2Q1NRUkk0YnlSQkI2bk9sREw3RHZ6enNPUW5LKy9iQ2M0bkJYTlBMNnI4aTZibmJlK1FKS1lNQTFNOUJ1WkQyWVp2OHFkV2Jtc2h2R3ZXd002cFVtRU9JYktzcXFOcDNicE1JdlZVdlFpYjB3Y0FoTzJjb1BiOVI3VFdKYkQ4L2p6OS8zcWtqT2ZHOWxjMWlPYkFwZXAzdWhzdENnblFVcnZ5aDVHSlVoanVncWcrSE9vTThOV3hrYURPKzY4amdZQ3BXK0NTZHl1aFJVZVdWeFZLdVdydzFwUHUwdEF4MU5SUmdUZm15VTZQSUFHRUtldjYwalgzNDlaTzIzLzhsODNlUTBwQUVHMDRvcjN4RHVpUy9IaXVWNzAvWk5iTXBqY053MkF1RDRpRDdYQnhzaTYwekxRQmE4c3J5MGpXVm5QN0NKLzcxa2dCMVBic25nWm43YUJmdS9XbWpReXVvZFZ0TzFMV0xLUkU4M1pPMm1GLzU5SWFCc3NyeTBqV1ZuUDdDSi83MWtnQjFQYUhwMitkNXRlWUlta2VxdVd2VXR2NExHUWNIWjBqTW1wbTdlZ0FORDk0N05QdE02UEorejNvQWE3NjRwNkk1Y0hpd3FkU3NubTNrSmY4SWFtYnFEUHlCcGdlOHpZMkc5T01aQjhLbEJrd04wSGdObDYwNkd5UHhGQ0cyRU10SFFQVlZ0Zmc4dEM2V3pSdVUyb2Y0NGwybkNmdU1LVUhuM0ZnUXBlWmk1Y3lURy9LODYzVXdUaktLK3JxNmxyOGRsVExLOHRJMWxaeit3aWYrOVpJQWRUMmhEbVpBeE5naW1QeDFPeGRIQ1JsMHM2ZkFHcHNDeGNnWDRXWjZFV3ZKUXl4UktrOFJSUzZFalVteG5HVlJPUUh5eXZMU05aV2Mvc0luL3ZXU0FIVTlvQTZuS2ZjN2R1L2dHeDJVQnpPODN2TXhEaFRoamhRR0krZG9BNmtmZmVseXl2TFNOWldjL3NJbi92V1NBSFU5cDZpa0VZK1NwSDlEQzJlK3lDbUoxemE2V2t1Z3VzNTdYeW11bjlsT1JXK1BQVEIvZ3N5b3UvcGx6d2hRMTZWTE1zcnkwaldWblA3Q0ovNzFrZ0IxUGF3TzVzbEZmb2dOay9PUHkzQkRwSnlab25FZUFTNW9hR2x6K20rWmY5WElsNTdDS2FncFl1ZWw3STVwcnliaVNhTlBtbCtHNHd1bTBCZ0dvaW42dEpNN21OQlpHYk5UWURzQW15cFVNWEdGc3NyeTBqV1ZuUDdDSi83MWtnQjFQYXNCWmxZdHVrUGZieGRXQndjZ0poeE1mNXRXTXg0cTVQdkFFc2xFM21lZWE5VzM1TjEwYm5BY2o1UVlkMTlkNWJNUFhWRkxRSlhkVFh3U0tFOEhwZnRUbzNZaXVCQUkrcm81Ull3MmJCcEhjeFhkUVJKTVVJV2c1bGFLQUQ1cnFGcjB5bXFmRDBKQVF4eFlZdW9OZERmK1cxZmhGdVlaWGhhSm41clVQSG5aenp2Y3VYSUVyZ3IxRC9QdWdGbWhPWExLOHRJMWxaeit3aWYrOVpJQWRUMkFjakJLWG9aVks0SStqbldoQnp5QTNieG9TcXl5SThtdGRjZ2FkaXpMY3pMSzh0STFsWnord2lmKzlaSUFkVDJtd2VQZTQxSFRJNk1oSmxBVmQrRjFjc3J5MGpXVm5QN0NKLzcxa2dCMVBZNDk5bXA4U3MvQzN4OG1XaWpjVWVoakR4c0l4S0FjWFY1NzJPSUtFMGVaTXNyeTBqV1ZuUDdDSi83MWtnQjFQYlFUYU1WUzBOME9rVXZMalAxVWl0anl5dkxTTlpXYy9zSW4vdldTQUhVOXZzajBkR1VCU1kwQW96YW5tK0NRd0YzQVZVdE9aY0paYjVBaWdLNnJxN21HM2E5NDNVcS9sQytKdE5SUmkzS1lHZWd4Y1oyRzZyNy9ETXpYL1EvSnJoVEJ1R2RnblZWdXByd2NROHZRZ252b2hNamswL0krUktkaTA4OURnb01iOHNyeTBqV1ZuUDdDSi83MWtnQjFQYXVVelFWbkgwUHMrMlFVRWhkaUk5QlVML3RvVlk0dDBMMkFBUjRjTmE2OWNzcnkwaldWblA3Q0ovNzFrZ0IxUFphbEgvTjlTRy9DQ3Roemk4RFg4aUt4bll3RzlRNXdQay9kOVVJeVh2M1FmeUF4QlJQaXo0SlY2V3Yxb2pRcEw5ZnRIMkg5S0V6bGpkZDFEeUU2T2ZyeXl2TFNOWldjL3NJbi92V1NBSFU5cnJIRXdTemJuNndOc1hCZytNeUtDb0ZKUHR2eUN1VFhJbDJlZDJoSGx1L3l5dkxTTlpXYy9zSW4vdldTQUhVOWpDcnFndEhDaTVvSWxzTTBJTDNMQUhrU1ZkampLeVRqZFNXdm5DZDlCd1dXQXhQUDBhMkhCV0toVkdneWxHOG5Nc3J5MGpXVm5QN0NKLzcxa2dCMVBZL3Y3TlJUVkJiVC9USzlJbzRzUC9DMTZSZXRQcDNtSk1za2dGUWkzdHlPNkxqUnFCUDRDYjhBVnFhbHhydWF1VFhJajMxYnRhRTQ3MU9OaXpuN1JiT0NHckpyWm8ydHdMUm1lcHhlK3ROWWxXaDhabFZ4cmg3TFdvcm5vMVFnRnZMSzh0STFsWnord2lmKzlaSUFkVDJmTXlnSG5OR3kxK294TXE3eEhhaVVjd2h3UVo1VTMrTXVRaHlubDFxMTZWMjhhRXFzc2lQSnJYWElHbllzeTNNLzFvanRDRzJPazljaEF2ZGM5YnY3ck5FU2lTRSs5MUZ3a2paTmVVY0VSbWlHZG1ZYWFKWUx0VGlqUzZTVEk4REVSbzQyY2hYQ1VQME9taVc3OUM2Ukl3M2JlU2FhVnVCS2I0aktoL3FYVVgzaW5qcFN6K0Q2SzVZY0RheDBlNFFEdWNuYSs2V0lYRmpVN2FOOWVVckRwYktSSi9Kb1JxNDdmOWNpZGx1SDJEejBkeUo3eklXSUtTT2swbENNdER2bmdEa3hVZENzRHdzbWpoeDBYSlJPbk8xR3BsVi9HRzBMcHpKNGpoWUJoLzhTRnd3ZnBXMzU0cklxK2pEWm9oenRvU255ZHB5V21yY0taNGw2a1NMdVBYTkg1VVVUcjFESnRTeDF2azZDVUxQT3RVOW1zbUcveTNqa2xvZ3VvaVhOZGUrRkdQRXVwMFdwZ2JyU3FUZWtRL0wvNHY5UU1pdTlBcUxrUGlDaGNVODczTGx5Qks0SzlRL3o3b0Jab1RsaEVhUE9VVHg2NzBUT2NZbENnd2QzdmhMZVZYRlQ1WkJMUjJBZ1hTaDJzazg3M0xseUJLNEs5US96N29CWm9UbFBqNDkxSUNBRTdad2QrNTJYb3JJb2xIckEvQThXbnltQzl2YTlxQlJ6UldWcmNDM2dxTUgwY21KcWNGR2liTnhNSWdIRkpRTU1TbFhXMkdrZ3lhaE1Wd21MMGFTNE45aFBZK2N1MExDS2tNTDBEbkJMVnlFRmFnVFIvYURHU3QycDhyYThiLzl0bWpkUWtScnJFQWlib1I3NkJSTTJPNVVFQllTczlKQUd3ZWM3bmIxOFJQTm9haXR5RnR0MFBOV1laYkVHWklHYnp1Tlc2SEdoeGdZTVp6dWR2WHhFODJocUszSVcyM1E4MWFSRWhmNEZNbGcwWDdsMVhWVEVvdWJoWkJ0MlpkaGlIelpRL3MwM3VsSkFNNlVNdnNPL1BPdzVDY3I3OXNKemllNnNkVFRFTjE2NVdhcm45WU5QVzZFUE85eTVjZ1N1Q3ZVUDgrNkFXYUU1WWIzbEpaWVU0cThxZkt1a2xRcFErYnNad2JsQ2orblEvSWtBMkVuK0Z3cEtWbWIwcEJhYjdRdFNFTVpYTlpCbXpMMUVMMGQrQ1M5RlBxYVc4Y3U0cGhVVnFyMGQ2WkcyOVo2VlZvTDNPRUJtaDVRcWRybW5ZZ0RCeTNLSGdoR2RTZlgxQkhFaDFyNVBINmNwOFBnWkdBRm5FbzlxWUhxS2t6cjgyZWcwdVZ2S3NnUUVmOGVwY3dvSDhBcEZYT1hGYWZLc0VVemVSVUx0SE9CanUxSlVHcHdSRXdheUJGTVFtRHl0TTAzeElWWWY1QzdWZXd0elRsTnJkWUp1ZWxWblhIT3FEa1VveXdIZnZ0LzRzejJpWUdpVVBRbmFsQUJNMFhvOWh2OGVnSWc0N3AvaFpxazZOZ0xESkdxK0JaMnZtL05iYlZLZE4wUGVGamI2aEtOT2hhUDhNeHBJWEZWeG5zeWhhWGFpZndhMFpETWEwTUFubjVQZUdBeHh5aHp2ekZWS1RoMnhpS0RCNlFiUkpjbGtqb3plODJzTWhueXY5bFQ1NVkrbTlxQjY3Q0htVWtBYlB0N1pwTFpDU2RXamQrdnZlUENEdzAvVWl3NEhYMy82SnJUbWdsRDhBKzNzVFpvMlcvVFBOYnJlVUxXWUlodVNWRnFZbXBtcHJKeGdXaW9EN29yckxackxFRzZGL0RyYlNpbHdUYkhYcnhBME0wMHQ3NnBlTXhvTnFiTnVpWTg2RDZTYzhRa1NobTI0V09ZL09hdUNNMFlJMjNkZjRENHdZRXBQc01WVVM3cWJNWnBDSUpxNkhkRGNRbjVtQStmZzNZanZxWWtVMFRKdGhFYU9ObklWd2xEOURwb2x1L1F1a1RpNGYwcXNTci94ejArVXJYeE8xUHpROTA5bmRxT05Pemc5ZEloMVNVUnRzOVhqOGNkaHkxaGhPUmU3SWNFajVMNlNTK0Npc2xweTNtcG1qTTZNazJNM0duREhqZUtFbTE0R0k4Q1dtWGNONTdvN1A3aXJvQURTSEI3K0xaYnE3Q1dHQmpib0hlNlFMWGtPT2RaNmFkaWhqeHVmVk9qbjdxenJ1L2w5OTF0K09vbGlDVnM3ZERicG1kYWxNejhoVGZpd3hzY0d3SUVBK0JiVVZVazlMNUR6RkxYUmNHVHB0NllzbUsybXFENGp1a1hNeEVPWGVDWjNmb0tsSmJpaEFsODI1QjBWbktKbFcxcGhxaTlhNDNhU2hrcHBIUUx0a2YxdlcrckhmYXZMbzJTSExGS3lzLzZ5L3A1ZHBiUm5oOVpXdGpNQnRVcjJrY3BmVkkzVHEyYUJlWGhEelNkRTVrVVRsWHRBZUM2YmpGZmRnSUF1VDNpLy8rK3lrY29WK3hOeC9VMXkrQ1VIR1YxRnM2ZUhpYnpcXFxcXFxcIilcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLpmL/ph4zkuIDnuqdcXFwiLFxcXCJwYXRoXFxcIjpcXFwic2hhcmlkXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxuLy92YXIgaXRlbXMgPSBbXTtcXFxcbmZ1bmN0aW9uIGZvcm1hdERhdGUoX2RhdGUsIF9mbXQpIHtcXFxcbiAgICBsZXQgZm10ID0gX2ZtdCB8fCBcXFxcXFxcInl5eXktTU0tZGQgSEg6bW06c3NcXFxcXFxcIjtcXFxcbiAgICBjb25zdCBkYXRlID0gIWlzTmFOKF9kYXRlKSA/IG5ldyBEYXRlKF9kYXRlICogMTAwMCkgOiBuZXcgRGF0ZShfZGF0ZSk7XFxcXG4gICAgY29uc3QgbyA9IHtcXFxcbiAgICAgICAgXFxcXFxcXCJNK1xcXFxcXFwiOiBkYXRlLmdldE1vbnRoKCkgKyAxLCAvL+aciOS7vSBcXFxcbiAgICAgICAgXFxcXFxcXCJkK1xcXFxcXFwiOiBkYXRlLmdldERhdGUoKSwgLy/ml6UgXFxcXG4gICAgICAgIFxcXFxcXFwiaCtcXFxcXFxcIjogZGF0ZS5nZXRIb3VycygpICUgMTIgPT0gMCA/IDEyIDogZGF0ZS5nZXRIb3VycygpICUgMTIsXFxcXG4gICAgICAgIFxcXFxcXFwiSCtcXFxcXFxcIjogZGF0ZS5nZXRIb3VycygpLCAvL+Wwj+aXtiBcXFxcbiAgICAgICAgXFxcXFxcXCJtK1xcXFxcXFwiOiBkYXRlLmdldE1pbnV0ZXMoKSwgLy/liIYgXFxcXG4gICAgICAgIFxcXFxcXFwicytcXFxcXFxcIjogZGF0ZS5nZXRTZWNvbmRzKCksIC8v56eSIFxcXFxuICAgICAgICBcXFxcXFxcInErXFxcXFxcXCI6IE1hdGguZmxvb3IoKGRhdGUuZ2V0TW9udGgoKSArIDMpIC8gMyksIC8v5a2j5bqmIFxcXFxuICAgICAgICBcXFxcXFxcIlNcXFxcXFxcIjogZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSAvL+avq+enkiBcXFxcbiAgICB9O1xcXFxuICAgIGlmICgvKHkrKS8udGVzdChmbXQpKSB7XFxcXG4gICAgICAgIGZtdCA9IGZtdC5yZXBsYWNlKFJlZ0V4cC4kMSwgKGRhdGUuZ2V0RnVsbFllYXIoKSArIFxcXFxcXFwiXFxcXFxcXCIpLnN1YnN0cig0IC0gUmVnRXhwLiQxLmxlbmd0aCkpO1xcXFxuICAgIH1cXFxcbiAgICBmb3IgKGxldCBrIGluIG8pIHtcXFxcbiAgICAgICAgaWYgKG5ldyBSZWdFeHAoXFxcXFxcXCIoXFxcXFxcXCIgKyBrICsgXFxcXFxcXCIpXFxcXFxcXCIpLnRlc3QoZm10KSkge1xcXFxuICAgICAgICAgICAgZm10ID0gZm10LnJlcGxhY2UoUmVnRXhwLiQxLCAoUmVnRXhwLiQxLmxlbmd0aCA9PSAxKSA/IChvW2tdKSA6ICgoXFxcXFxcXCIwMFxcXFxcXFwiICsgb1trXSkuc3Vic3RyKChcXFxcXFxcIlxcXFxcXFwiICsgb1trXSkubGVuZ3RoKSkpO1xcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxuICAgIHJldHVybiBmbXQ7XFxcXG59O1xcXFxuXFxcXG5mdW5jdGlvbiBmb3JtYXRTaXplKHNpemUpIHtcXFxcbiAgICBpZiAoIXNpemUpIHtcXFxcbiAgICAgICAgcmV0dXJuICcnO1xcXFxuICAgIH1cXFxcbiAgICBjb25zdCB1bml0cyA9IFsnQicsICdLQicsICdNQicsICdHQicsICdUQicsICdQQicsICdFQicsICdaQicsICdZQiddO1xcXFxuICAgIGxldCBpID0gMDtcXFxcbiAgICB3aGlsZSAoc2l6ZSA+PSAxMDI0KSB7XFxcXG4gICAgICAgIHNpemUgLz0gMTAyNDtcXFxcbiAgICAgICAgaSsrO1xcXFxuICAgIH1cXFxcbiAgICBzaXplID0gaSA/IE51bWJlcihzaXplLnRvRml4ZWQoMikpIDogc2l6ZTtcXFxcbiAgICByZXR1cm4gYCR7c2l6ZX0gJHt1bml0c1tpXX1gO1xcXFxufVxcXFxuLy9sb2cocmVhbHVybCk7XFxcXG5cXFxcbmlmIChNWV9QQUdFID09IDEpIHtcXFxcbiAgICBjbGVhck15VmFyKCduZXh0cGFnZScpO1xcXFxufVxcXFxuaWYgKE1ZX1BBR0UgPiAxICYmIGdldE15VmFyKCduZXh0cGFnZScsICcnKSA9PSAnJykge1xcXFxuICAgIGxvZygn5rKh5pyJ5LiL5LiA6aG1Jyk7XFxcXG59IGVsc2Uge1xcXFxuICAgIHRyeSB7XFxcXG4gICAgICAgIC8vdmFyIHJlZnRva2VuID0gSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy94eXEvYWxpdG9rZW4uanNvbicsIHt9KSkucmVmcmVzaF90b2tlbjtcXFxcbiAgICAgICAgdmFyIHJlZnRva2VuID0gSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9pY3kvaWN5LWFsaS10b2tlbi5qc29uJywge30pKVswXS5yZWZyZXNoX3Rva2VuO1xcXFxuICAgICAgICB2YXIgc2hhcmVJZCA9IGRlY29kZVVSSUNvbXBvbmVudChyZWFsdXJsKS5zcGxpdCgnY29tL3MvJylbMV0uc3Vic3RyaW5nKDAsIDExKTtcXFxcbiAgICAgICAgbGV0IGdldHNoYXIgPSBmZXRjaCgnaHR0cHM6Ly9hcGkuYWxpeXVuZHJpdmUuY29tL2Fkcml2ZS92My9zaGFyZV9saW5rL2dldF9zaGFyZV9ieV9hbm9ueW1vdXMnLCB7XFxcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xcXFxuICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgIGJvZHk6ICd7XFxcXFxcXCJzaGFyZV9pZFxcXFxcXFwiOlxcXFxcXFwiJyArIHNoYXJlSWQgKyAnXFxcXFxcXCJ9JyxcXFxcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICBsZXQgcHVzaG5hbWUgPSBKU09OLnBhcnNlKGdldHNoYXIpLmZpbGVfaW5mb3NbMF0uZmlsZV9uYW1lO1xcXFxuICAgICAgICAvL3ZhciBsaXN0eXAgPSBKU09OLnBhcnNlKGdldHNoYXIpLmZpbGVfaW5mb3NbMF0udHlwZTtcXFxcbiAgICAgICAgLy92YXIgcGZpbGVpZCA9IEpTT04ucGFyc2UoZ2V0c2hhcikuZmlsZV9pbmZvc1swXS5maWxlX2lkO1xcXFxuXFxcXG4gICAgICAgIHZhciBzaGFyZXRva2VuID0gSlNPTi5wYXJzZShmZXRjaCgnaHR0cHM6Ly9hcGkuYWxpeXVuZHJpdmUuY29tL3YyL3NoYXJlX2xpbmsvZ2V0X3NoYXJlX3Rva2VuJywge1xcXFxuICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcXFxcbiAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICBib2R5OiAne1xcXFxcXFwic2hhcmVfcHdkXFxcXFxcXCI6XFxcXFxcXCJcXFxcXFxcIixcXFxcXFxcInNoYXJlX2lkXFxcXFxcXCI6XFxcXFxcXCInICsgc2hhcmVJZCArICdcXFxcXFxcIn0nLFxcXFxuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcXFxcbiAgICAgICAgfSkpLnNoYXJlX3Rva2VuO1xcXFxuICAgICAgICAvL2xvZyhzaGFyZXRva2VuKTtcXFxcblxcXFxuICAgICAgICBsZXQgbmV4dCA9IGdldE15VmFyKCduZXh0cGFnZScsICcnKSAhPSAnJyA/ICcsXFxcXFxcXCJtYXJrZXJcXFxcXFxcIjpcXFxcXFxcIicgKyBnZXRNeVZhcignbmV4dHBhZ2UnKSArICdcXFxcXFxcIicgOiAnJztcXFxcbiAgICAgICAgaWYgKCFkZWNvZGVVUklDb21wb25lbnQocmVhbHVybCkuaW5jbHVkZXMoJy9mb2xkZXIvJykpIHtcXFxcbiAgICAgICAgICAgIC8vaWYoIWxpc3R5cCA9PSAnZm9sZGVyJyl7XFxcXG4gICAgICAgICAgICB2YXIgcmVzY29kID0gZmV0Y2goJ2h0dHBzOi8vYXBpLmFsaXl1bmRyaXZlLmNvbS9hZHJpdmUvdjMvZmlsZS9saXN0Jywge1xcXFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgJ1gtU2hhcmUtVG9rZW4nOiBzaGFyZXRva2VuXFxcXG4gICAgICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICAgICBib2R5OiAne1xcXFxcXFwic2hhcmVfaWRcXFxcXFxcIjpcXFxcXFxcIicgKyBzaGFyZUlkICsgJ1xcXFxcXFwiLFxcXFxcXFwicGFyZW50X2ZpbGVfaWRcXFxcXFxcIjpcXFxcXFxcInJvb3RcXFxcXFxcIixcXFxcXFxcImxpbWl0XFxcXFxcXCI6MTAwLFxcXFxcXFwiaW1hZ2VfdGh1bWJuYWlsX3Byb2Nlc3NcXFxcXFxcIjpcXFxcXFxcImltYWdlL3Jlc2l6ZSx3XzE2MC9mb3JtYXQsanBlZ1xcXFxcXFwiLFxcXFxcXFwiaW1hZ2VfdXJsX3Byb2Nlc3NcXFxcXFxcIjpcXFxcXFxcImltYWdlL3Jlc2l6ZSx3XzE5MjAvZm9ybWF0LGpwZWdcXFxcXFxcIixcXFxcXFxcInZpZGVvX3RodW1ibmFpbF9wcm9jZXNzXFxcXFxcXCI6XFxcXFxcXCJ2aWRlby9zbmFwc2hvdCx0XzEwMDAsZl9qcGcsYXJfYXV0byx3XzMwMFxcXFxcXFwiLFxcXFxcXFwib3JkZXJfYnlcXFxcXFxcIjpcXFxcXFxcIm5hbWVcXFxcXFxcIixcXFxcXFxcIm9yZGVyX2RpcmVjdGlvblxcXFxcXFwiOlxcXFxcXFwiQVNDXFxcXFxcXCInICsgbmV4dCArICd9JyxcXFxcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAvL2xvZyhyZXNjb2QpO1xcXFxuICAgICAgICAgICAgdmFyIGxpc3R5cCA9IEpTT04ucGFyc2UocmVzY29kKS5pdGVtc1swXS50eXBlO1xcXFxuICAgICAgICAgICAgdmFyIHBmaWxlaWQgPSBKU09OLnBhcnNlKHJlc2NvZCkuaXRlbXNbMF0uZmlsZV9pZDtcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIHZhciBsaXN0eXAgPSAnZm9sZGVyJztcXFxcbiAgICAgICAgICAgIHZhciBwZmlsZWlkID0gZGVjb2RlVVJJQ29tcG9uZW50KHJlYWx1cmwpLnNwbGl0KCdmb2xkZXIvJylbMV1cXFxcblxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIC8vbG9nKGh0bWwpO1xcXFxuICAgICAgICBpZiAobGlzdHlwID09ICdmb2xkZXInKSB7XFxcXG4gICAgICAgICAgICB2YXIgcmVzY29kID0gZmV0Y2goJ2h0dHBzOi8vYXBpLmFsaXl1bmRyaXZlLmNvbS9hZHJpdmUvdjMvZmlsZS9saXN0Jywge1xcXFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgJ1gtU2hhcmUtVG9rZW4nOiBzaGFyZXRva2VuXFxcXG4gICAgICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICAgICBib2R5OiAne1xcXFxcXFwic2hhcmVfaWRcXFxcXFxcIjpcXFxcXFxcIicgKyBzaGFyZUlkICsgJ1xcXFxcXFwiLFxcXFxcXFwicGFyZW50X2ZpbGVfaWRcXFxcXFxcIjpcXFxcXFxcIicgKyBwZmlsZWlkICsgJ1xcXFxcXFwiLFxcXFxcXFwibGltaXRcXFxcXFxcIjoxMDAsXFxcXFxcXCJpbWFnZV90aHVtYm5haWxfcHJvY2Vzc1xcXFxcXFwiOlxcXFxcXFwiaW1hZ2UvcmVzaXplLHdfMTYwL2Zvcm1hdCxqcGVnXFxcXFxcXCIsXFxcXFxcXCJpbWFnZV91cmxfcHJvY2Vzc1xcXFxcXFwiOlxcXFxcXFwiaW1hZ2VcXFxcXFxcXC9yZXNpemUsd18xOTIwL2Zvcm1hdCxqcGVnXFxcXFxcXCIsXFxcXFxcXCJ2aWRlb190aHVtYm5haWxfcHJvY2Vzc1xcXFxcXFwiOlxcXFxcXFwidmlkZW8vc25hcHNob3QsdF8xMDAwLGZfanBnLGFyX2F1dG8sd18zMDBcXFxcXFxcIixcXFxcXFxcIm9yZGVyX2J5XFxcXFxcXCI6XFxcXFxcXCJuYW1lXFxcXFxcXCIsXFxcXFxcXCJvcmRlcl9kaXJlY3Rpb25cXFxcXFxcIjpcXFxcXFxcIkFTQ1xcXFxcXFwiJyArIG5leHQgKyAnfScsXFxcXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcXFxcbiAgICAgICAgICAgIH0pO1xcXFxuXFxcXG4gICAgICAgIH0gLy/lj5bmlofku7blpLlcXFxcbiAgICAgICAgLy9sb2cocmVzY29kKTtcXFxcblxcXFxuICAgICAgICBpZiAoSlNPTi5wYXJzZShyZXNjb2QpLm5leHRfbWFya2VyKSB7XFxcXG4gICAgICAgICAgICBsZXQgbWFya2VyID0gSlNPTi5wYXJzZShyZXNjb2QpLm5leHRfbWFya2VyO1xcXFxuICAgICAgICAgICAgaWYgKG1hcmtlci5sZW5ndGggPiAxMCkge1xcXFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKCduZXh0cGFnZScsIG1hcmtlcik7XFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoJ25leHRwYWdlJyk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgdmFyIGNvbnRzID0gSlNPTi5wYXJzZShyZXNjb2QpLml0ZW1zOyAgICAgICAgXFxcXG4gICAgICAgIHZhciB0dWlzb25nID0gW107XFxcXG4gICAgICAgIGZvciAodmFyIGkgaW4gY29udHMpIHtcXFxcbiAgICAgICAgICAgIHZhciBsaXN0eXAgPSBjb250c1tpXS50eXBlO1xcXFxuICAgICAgICAgICAgaWYgKGxpc3R5cCAhPSAnZm9sZGVyJykge1xcXFxuICAgICAgICAgICAgICAgIHZhciBjYXRlID0gY29udHNbaV0uY2F0ZWdvcnk7XFxcXG4gICAgICAgICAgICAgICAgdmFyIGZuYW1lID0gY29udHNbaV0ubmFtZTtcXFxcbiAgICAgICAgICAgICAgICBpZiAoY2F0ZSA9PSAndmlkZW8nKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9ICfwn5O6JyArIGNvbnRzW2ldLm5hbWU7XFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjYXRlID09ICdkb2MnKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9ICfwn5OWJyArIGNvbnRzW2ldLm5hbWU7XFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjYXRlID09ICdpbWFnZScpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gJ/CflrwnICsgY29udHNbaV0ubmFtZTtcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNhdGUgPT0gJ3ppcCcpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gJ/Cfk6YnICsgY29udHNbaV0ubmFtZTtcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSBjb250c1tpXS5uYW1lXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJChjb250c1tpXS5maWxlX2lkKS5sYXp5UnVsZSgoc2hhcmVJZCwgc2hhcmV0b2tlbiwgY2F0ZSwgZm5hbWUsIHJlZnRva2VuKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FsaWxhenlcXFxcXFxcIikoc2hhcmVJZCwgaW5wdXQsIGNhdGUpO1xcXFxuICAgICAgICAgICAgICAgICAgICB9LCBzaGFyZUlkLCBzaGFyZXRva2VuLCBjYXRlLCBmbmFtZSwgcmVmdG9rZW4pLFxcXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBmb3JtYXREYXRlKGNvbnRzW2ldLnVwZGF0ZWRfYXQpICsgJyAgJyArIGZvcm1hdFNpemUoY29udHNbaV0uc2l6ZSksXFxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogY29udHNbaV0uZmlsZV9pZFxcXFxuICAgICAgICAgICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfMSdcXFxcblxcXFxuICAgICAgICAgICAgICAgIH0pOyAgICAgICAgICAgICAgICBcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn8J+TgicgKyBjb250c1tpXS5uYW1lLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJ2hpa2VyOi8vZW1wdHknICsgY29udHNbaV0uZmlsZV9pZCArICc/Pz9meXBhZ2UnKS5ydWxlKChzaGFyZUlkLCBzaGFyZXRva2VuLCBwdXNobmFtZSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvcnVsZWxvb3AnLCB7fSkpLnJ1bGUpO1xcXFxuICAgICAgICAgICAgICAgICAgICB9LCBzaGFyZUlkLCBzaGFyZXRva2VuLCBjb250c1tpXS5uYW1lKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdmbGV4X2J1dHRvbidcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcblxcXFxuICAgICAgICAgICAgfSAvL2VuZCBpZlxcXFxuICAgICAgICB9IC8vZW5kIGZvciBpXFxcXG4gICAgfSBjYXRjaCAoZSkge1xcXFxuICAgICAgICBpdGVtcy5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiAn5qyn5qyn77yM5oql6ZSZ5LqG44CCJyxcXFxcbiAgICAgICAgICAgIHVybDogZGVjb2RlVVJJQ29tcG9uZW50KGdldFJlc0NvZGUoKS5zcGxpdCgnIyMnKVsxXSksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxcXG4gICAgICAgIH0pO1xcXFxuICAgIH1cXFxcbn1cXFxcbi8qXFxcXG5zZXRIb21lUmVzdWx0KHtcXFxcbiAgICBkYXRhOiBpdGVtc1xcXFxufSk7XFxcXG4qL1xcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIumYv+mHjOW1jOWll1xcXCIsXFxcInBhdGhcXFwiOlxcXCJydWxlbG9vcFxcXCIsXFxcInJ1bGVcXFwiOlxcXCJ2YXIgaXRlbXMgPSBbXTtcXFxcblxcXFxuZnVuY3Rpb24gZm9ybWF0RGF0ZShfZGF0ZSwgX2ZtdCkge1xcXFxuICAgIGxldCBmbXQgPSBfZm10IHx8IFxcXFxcXFwieXl5eS1NTS1kZCBISDptbTpzc1xcXFxcXFwiO1xcXFxuICAgIGNvbnN0IGRhdGUgPSAhaXNOYU4oX2RhdGUpID8gbmV3IERhdGUoX2RhdGUgKiAxMDAwKSA6IG5ldyBEYXRlKF9kYXRlKTtcXFxcbiAgICBjb25zdCBvID0ge1xcXFxuICAgICAgICBcXFxcXFxcIk0rXFxcXFxcXCI6IGRhdGUuZ2V0TW9udGgoKSArIDEsIC8v5pyI5Lu9IFxcXFxuICAgICAgICBcXFxcXFxcImQrXFxcXFxcXCI6IGRhdGUuZ2V0RGF0ZSgpLCAvL+aXpSBcXFxcbiAgICAgICAgXFxcXFxcXCJoK1xcXFxcXFwiOiBkYXRlLmdldEhvdXJzKCkgJSAxMiA9PSAwID8gMTIgOiBkYXRlLmdldEhvdXJzKCkgJSAxMixcXFxcbiAgICAgICAgXFxcXFxcXCJIK1xcXFxcXFwiOiBkYXRlLmdldEhvdXJzKCksIC8v5bCP5pe2IFxcXFxuICAgICAgICBcXFxcXFxcIm0rXFxcXFxcXCI6IGRhdGUuZ2V0TWludXRlcygpLCAvL+WIhiBcXFxcbiAgICAgICAgXFxcXFxcXCJzK1xcXFxcXFwiOiBkYXRlLmdldFNlY29uZHMoKSwgLy/np5IgXFxcXG4gICAgICAgIFxcXFxcXFwicStcXFxcXFxcIjogTWF0aC5mbG9vcigoZGF0ZS5nZXRNb250aCgpICsgMykgLyAzKSwgLy/lraPluqYgXFxcXG4gICAgICAgIFxcXFxcXFwiU1xcXFxcXFwiOiBkYXRlLmdldE1pbGxpc2Vjb25kcygpIC8v5q+r56eSIFxcXFxuICAgIH07XFxcXG4gICAgaWYgKC8oeSspLy50ZXN0KGZtdCkpIHtcXFxcbiAgICAgICAgZm10ID0gZm10LnJlcGxhY2UoUmVnRXhwLiQxLCAoZGF0ZS5nZXRGdWxsWWVhcigpICsgXFxcXFxcXCJcXFxcXFxcIikuc3Vic3RyKDQgLSBSZWdFeHAuJDEubGVuZ3RoKSk7XFxcXG4gICAgfVxcXFxuICAgIGZvciAobGV0IGsgaW4gbykge1xcXFxuICAgICAgICBpZiAobmV3IFJlZ0V4cChcXFxcXFxcIihcXFxcXFxcIiArIGsgKyBcXFxcXFxcIilcXFxcXFxcIikudGVzdChmbXQpKSB7XFxcXG4gICAgICAgICAgICBmbXQgPSBmbXQucmVwbGFjZShSZWdFeHAuJDEsIChSZWdFeHAuJDEubGVuZ3RoID09IDEpID8gKG9ba10pIDogKChcXFxcXFxcIjAwXFxcXFxcXCIgKyBvW2tdKS5zdWJzdHIoKFxcXFxcXFwiXFxcXFxcXCIgKyBvW2tdKS5sZW5ndGgpKSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG4gICAgcmV0dXJuIGZtdDtcXFxcbn07XFxcXG5cXFxcbmZ1bmN0aW9uIGZvcm1hdFNpemUoc2l6ZSkge1xcXFxuICAgIGlmICghc2l6ZSkge1xcXFxuICAgICAgICByZXR1cm4gJyc7XFxcXG4gICAgfVxcXFxuICAgIGNvbnN0IHVuaXRzID0gWydCJywgJ0tCJywgJ01CJywgJ0dCJywgJ1RCJywgJ1BCJywgJ0VCJywgJ1pCJywgJ1lCJ107XFxcXG4gICAgbGV0IGkgPSAwO1xcXFxuICAgIHdoaWxlIChzaXplID49IDEwMjQpIHtcXFxcbiAgICAgICAgc2l6ZSAvPSAxMDI0O1xcXFxuICAgICAgICBpKys7XFxcXG4gICAgfVxcXFxuICAgIHNpemUgPSBpID8gTnVtYmVyKHNpemUudG9GaXhlZCgyKSkgOiBzaXplO1xcXFxuICAgIHJldHVybiBgJHtzaXplfSAke3VuaXRzW2ldfWA7XFxcXG59XFxcXG4vL2xldCB0dmlwID0gZ2V0SXRlbSgnaGlrZXJ0dmJveHNldCcsICcnKTtcXFxcblxcXFxuLy9sb2coZ2V0UmVzQ29kZSgpKTtcXFxcbmlmIChNWV9QQUdFID09IDEpIHtcXFxcbiAgICBjbGVhck15VmFyKCduZXh0cGFnZScpO1xcXFxufVxcXFxuaWYgKE1ZX1BBR0UgPiAxICYmIGdldE15VmFyKCduZXh0cGFnZScsICcnKSA9PSAnJykge1xcXFxuICAgIGxvZygn5rKh5pyJ5LiL5LiA6aG1Jyk7XFxcXG59IGVsc2Uge1xcXFxuICAgIGxldCByZWZ0b2tlbiA9IEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vZmlsZXMvcnVsZXMvaWN5L2ljeS1hbGktdG9rZW4uanNvbicsIHt9KSlbMF0ucmVmcmVzaF90b2tlbjtcXFxcblxcXFxuICAgIGxldCBuZXh0ID0gZ2V0TXlWYXIoJ25leHRwYWdlJywgJycpICE9ICcnID8gJyxcXFxcXFxcIm1hcmtlclxcXFxcXFwiOlxcXFxcXFwiJyArIGdldE15VmFyKCduZXh0cGFnZScpICsgJ1xcXFxcXFwiJyA6ICcnO1xcXFxuXFxcXG4gICAgdmFyIHJlc2NvZCA9IGZldGNoKCdodHRwczovL2FwaS5hbGl5dW5kcml2ZS5jb20vYWRyaXZlL3YzL2ZpbGUvbGlzdCcsIHtcXFxcbiAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcXFxcbiAgICAgICAgICAgICdYLVNoYXJlLVRva2VuJzogc2hhcmV0b2tlblxcXFxuICAgICAgICB9LFxcXFxuICAgICAgICBib2R5OiAne1xcXFxcXFwic2hhcmVfaWRcXFxcXFxcIjpcXFxcXFxcIicgKyBzaGFyZUlkICsgJ1xcXFxcXFwiLFxcXFxcXFwicGFyZW50X2ZpbGVfaWRcXFxcXFxcIjpcXFxcXFxcIicgKyBnZXRSZXNDb2RlKCkuc3BsaXQoJz8/PycpWzBdICsgJ1xcXFxcXFwiLFxcXFxcXFwibGltaXRcXFxcXFxcIjoxMDAsXFxcXFxcXCJpbWFnZV90aHVtYm5haWxfcHJvY2Vzc1xcXFxcXFwiOlxcXFxcXFwiaW1hZ2UvcmVzaXplLHdfMTYwL2Zvcm1hdCxqcGVnXFxcXFxcXCIsXFxcXFxcXCJpbWFnZV91cmxfcHJvY2Vzc1xcXFxcXFwiOlxcXFxcXFwiaW1hZ2VcXFxcXFxcXC9yZXNpemUsd18xOTIwL2Zvcm1hdCxqcGVnXFxcXFxcXCIsXFxcXFxcXCJ2aWRlb190aHVtYm5haWxfcHJvY2Vzc1xcXFxcXFwiOlxcXFxcXFwidmlkZW8vc25hcHNob3QsdF8xMDAwLGZfanBnLGFyX2F1dG8sd18zMDBcXFxcXFxcIixcXFxcXFxcIm9yZGVyX2J5XFxcXFxcXCI6XFxcXFxcXCJuYW1lXFxcXFxcXCIsXFxcXFxcXCJvcmRlcl9kaXJlY3Rpb25cXFxcXFxcIjpcXFxcXFxcIkFTQ1xcXFxcXFwiJyArIG5leHQgKyAnfScsXFxcXG4gICAgICAgIG1ldGhvZDogJ1BPU1QnXFxcXG4gICAgfSk7XFxcXG4gICAgLy9sb2cocmVzY29kKTtcXFxcbiAgICBpZiAoSlNPTi5wYXJzZShyZXNjb2QpLm5leHRfbWFya2VyKSB7XFxcXG4gICAgICAgIGxldCBtYXJrZXIgPSBKU09OLnBhcnNlKHJlc2NvZCkubmV4dF9tYXJrZXI7XFxcXG4gICAgICAgIGlmIChtYXJrZXIubGVuZ3RoID4gMTApIHtcXFxcbiAgICAgICAgICAgIHB1dE15VmFyKCduZXh0cGFnZScsIG1hcmtlcik7XFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICBjbGVhck15VmFyKCduZXh0cGFnZScpO1xcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxuICAgIHZhciBjb250cyA9IEpTT04ucGFyc2UocmVzY29kKS5pdGVtcztcXFxcbiAgICB2YXIgdHVpc29uZyA9IFtdO1xcXFxuICAgIGZvciAodmFyIGkgaW4gY29udHMpIHtcXFxcblxcXFxuICAgICAgICB2YXIgbGlzdHlwID0gY29udHNbaV0udHlwZTtcXFxcbiAgICAgICAgaWYgKGxpc3R5cCAhPSAnZm9sZGVyJykge1xcXFxuICAgICAgICAgICAgdmFyIGNhdGUgPSBjb250c1tpXS5jYXRlZ29yeTtcXFxcbiAgICAgICAgICAgIHZhciBmbmFtZSA9IGNvbnRzW2ldLm5hbWU7XFxcXG4gICAgICAgICAgICBpZiAoY2F0ZSA9PSAndmlkZW8nKSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gJ/Cfk7onICsgY29udHNbaV0ubmFtZTtcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2F0ZSA9PSAnZG9jJykge1xcXFxuICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9ICfwn5OWJyArIGNvbnRzW2ldLm5hbWU7XFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNhdGUgPT0gJ2ltYWdlJykge1xcXFxuICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9ICfwn5a8JyArIGNvbnRzW2ldLm5hbWU7XFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNhdGUgPT0gJ3ppcCcpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSAn8J+TpicgKyBjb250c1tpXS5uYW1lO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSBjb250c1tpXS5uYW1lXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBpdGVtcy5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKGNvbnRzW2ldLmZpbGVfaWQpLmxhenlSdWxlKChzaGFyZUlkLCBzaGFyZXRva2VuLCBjYXRlLCBmbmFtZSwgcmVmdG9rZW4pID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hbGlsYXp5XFxcXFxcXCIpKHNoYXJlSWQsIGlucHV0LCBjYXRlKTtcXFxcbiAgICAgICAgICAgICAgICB9LCBzaGFyZUlkLCBzaGFyZXRva2VuLCBjYXRlLCBmbmFtZSwgcmVmdG9rZW4pLFxcXFxuICAgICAgICAgICAgICAgIGRlc2M6IGZvcm1hdERhdGUoY29udHNbaV0udXBkYXRlZF9hdCkgKyAnICAnICsgZm9ybWF0U2l6ZShjb250c1tpXS5zaXplKSxcXFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICBpZDogY29udHNbaV0uZmlsZV9pZFxcXFxuICAgICAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzEnXFxcXG5cXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfwn5OCJyArIGNvbnRzW2ldLm5hbWUsXFxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCdoaWtlcjovL2VtcHR5JyArIGNvbnRzW2ldLmZpbGVfaWQgKyAnPz8/ZnlwYWdlJykucnVsZSgoc2hhcmVJZCwgc2hhcmV0b2tlbiwgcHVzaG5hbWUpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvcnVsZWxvb3AnLCB7fSkpLnJ1bGUpO1xcXFxuICAgICAgICAgICAgICAgIH0sIHNoYXJlSWQsIHNoYXJldG9rZW4sIGNvbnRzW2ldLm5hbWUpLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnZmxleF9idXR0b24nXFxcXG4gICAgICAgICAgICB9KTtcXFxcblxcXFxuICAgICAgICB9IC8vZW5kIGlmXFxcXG5cXFxcbiAgICB9XFxcXG59XFxcXG5zZXRSZXN1bHQoaXRlbXMpO1xcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIumYv+mHjOaOqOmAgVxcXCIsXFxcInBhdGhcXFwiOlxcXCJwdXNoXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxuLy9sb2coTVlfVVJMKTtcXFxcbnZhciBpdGVtcyA9IFtdO1xcXFxudmFyIHJlYWx1cmwgPSBNWV9VUkwuc3BsaXQoJyMjJylbMV0uc3BsaXQoJz8/PycpWzBdO1xcXFxuaWYgKGRlY29kZVVSSUNvbXBvbmVudChyZWFsdXJsKS5pbmNsdWRlcygnd3d3LmFsaXl1bmRyaXZlJykgJiYgIXJlYWx1cmwuaW5jbHVkZXMoJyUzQiU3QicpKSB7XFxcXG4gICAgZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2Uvc2hhcmlkJywge30pKS5ydWxlKVxcXFxufVxcXFxuc2V0UmVzdWx0KGl0ZW1zKTtcXFwifV1cIixcInByb3h5XCI6XCJcIn0iLCJ0aXRsZSI6IumYv+mHjOS6keebmOWIhuS6qyJ9
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement