Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@哔嘀影视@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoi5ZOU5ZiA5b2x6KeGIiwiYXV0aG9yIjoiIiwidXJsIjoiaGlrZXI6Ly9lbXB0eSMjZnlwYWdlIiwidmVyc2lvbiI6NSwiY29sX3R5cGUiOiJtb3ZpZV8zIiwiY2xhc3NfbmFtZSI6IiIsInR5cGUiOiJ2aWRlbyIsImNsYXNzX3VybCI6IiIsImFyZWFfbmFtZSI6IiIsImFyZWFfdXJsIjoiIiwic29ydF9uYW1lIjoiIiwieWVhcl9uYW1lIjoiIiwic29ydF91cmwiOiIiLCJ5ZWFyX3VybCI6IiIsImZpbmRfcnVsZSI6ImpzOlxudmFyIGQgPSBbXVxudmFyIHBhZ2UgPSBNWV9QQUdFXG4vL3ZhciBodG1sID0gZmV0Y2goY29uZmlnLmluZGV4ICsgYHMvYWxsLyR7cGFnZX1gKVxuXG5NWV9VUkwgPSBjb25maWcuaW5kZXggKyBgcy9hbGwvJHtwYWdlfWBcblxuLy9jbGVhclZhcihNWV9SVUxFLnRpdGxlICsgJ3VybCcpXG5cbnZhciBnZXRSYW5nZUNvbG9ycyA9IGZ1bmN0aW9uKCkge8KgwqDCoMKgwqDCoMKgXG4gICAgcmV0dXJuICcjJyArICgnMDAwMDAnICsgKE1hdGgucmFuZG9tKCkgKiAweDEwMDAwMDAgPDwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO8KgwqDCoMKgwqBcbn1cblxuY29uc3Qg5YiG57G76aKc6ImyID0gZ2V0UmFuZ2VDb2xvcnMoKVxuY29uc3Qg5aSn57G75a6a5L2NID0gJ2JvZHkmJmRpdi5uYXZiYXItZXhwYW5kLW1kJiYubmF2YmFyLW5hdidcbmNvbnN0IOaLvOaOpeWIhuexuyA9IFwiYm9keSYmZGxcIlxuY29uc3Qg5bCP57G75a6a5L2NID0gJ2JvZHkmJmE6bm90KDptYXRjaGVzKOeVmeiogCkpJ1xuY29uc3Qg5YiG57G75qCH6aKYID0gJ2EmJlRleHQnXG5jb25zdCDliIbnsbvpk77mjqUgPSAnYSYmaHJlZidcblxuXG5sZXQgdHJ1ZV91cmwgPSBnZXRWYXIoTVlfUlVMRS50aXRsZSArICd1cmwnLCBNWV9VUkwpXG5cblxuaWYgKHRydWVfdXJsICE9IGNvbmZpZy5pbmRleCkge1xuICAgIGlmICgvXFw/L2cudGVzdCh0cnVlX3VybCkpIHtcbiAgICAgICAgaWYgKC9cXGQrXFw/L2cudGVzdCh0cnVlX3VybCkpIHtcbiAgICAgICAgICAgIHRydWVfdXJsID0gdHJ1ZV91cmwucmVwbGFjZSgvXFxkK1xcPy9nLCBwYWdlICsgJy8/JylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRydWVfdXJsID0gdHJ1ZV91cmwucmVwbGFjZSgvXFw/L2csICcvJyArIHBhZ2UgKyAnLz8nKVxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmKHRydWVfdXJsLmluZGV4T2YoJ2FsbCcpIT0tMSkge1xuICAgICAgICAvL3RydWVfdXJsID0gdHJ1ZV91cmwgKyAnLycgKyBwYWdlXG4gICAgfWVsc2V7XG4gICAgICAgIHRydWVfdXJsID0gdHJ1ZV91cmwgKyAnLycgKyBwYWdlXG4gICAgfVxufVxuXG5sb2codHJ1ZV91cmwpXG5cbmlmIChwYWdlID09IDEgKSB7XG4gICAgZC5wdXNoKHtcbiAgICAgICAgdGl0bGU6IFwi8J+UjVwiLFxuICAgICAgICB1cmw6ICQudG9TdHJpbmcoKHIpID0+IHtcbiAgICAgICAgICAgIHB1dE15VmFyKCdrZXl3b3JkJywgaW5wdXQpO1xuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL3NlYXJjaD9ydWxlPScgKyByICsgJyZzPScgKyBpbnB1dDtcbiAgICAgICAgfSwgTVlfUlVMRS50aXRsZSksXG4gICAgICAgIGRlc2M6ICfmkJzngrnku4DkuYgnLFxuICAgICAgICBjb2xfdHlwZTogXCJpbnB1dFwiLFxuICAgICAgICBleHRyYToge1xuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRNeVZhcigna2V5d29yZCcsICcnKSB8fCBcIlwiLFxuICAgICAgICB9XG4gICAgfSk7XG59XG5cbnZhciBodG1sID0gZmV0Y2godHJ1ZV91cmwpXG5cbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvZHRmbCcpKS5ydWxlKVxuXG52YXIgbGlzdCA9IHBkZmEoaHRtbCwgJ2JvZHkmJi5jYXJkLXNtJyk7XG5saXN0Lm1hcChpdGVtID0+IHtcbiAgICBkLnB1c2goe1xuICAgICAgICB1cmw6cGQoaXRlbSwnYSYmaHJlZicpK2NvbmZpZy5tYXJrLFxuICAgICAgICBkZXNjOnBkZmgoaXRlbSwnc3Bhbnx8cCYmVGV4dCcpLFxuICAgICAgICB0aXRsZTogcGRmaChpdGVtLCAnaDMmJlRleHQnKSxcbiAgICAgICAgaW1nOiBwZGZoKGl0ZW0sICdpbWcmJnNyY3x8ZGF0YS1zcmMnKSArICdAUmVmZXJlcj0nLFxuICAgICAgICBjb2xfdHlwZTogJ21vdmllXzNfbWFycXVlZSdcbiAgICB9KVxufSlcblxuXG5zZXRSZXN1bHQoZCkiLCJzZWFyY2hfdXJsIjoiaGlrZXI6Ly9lbXB0eSMjc2VhcmNoLyoqL2Z5cGFnZSIsImdyb3VwIjoi4pGg5bi455SoIiwic2VhcmNoRmluZCI6ImpzOlxudmFyIGQgPSBbXTtcbnNzdXJsID0gTVlfVVJMLnJlcGxhY2UoJ2hpa2VyOi8vZW1wdHkjIycsIGNvbmZpZy5pbmRleClcblxuXG52YXIgaHRtbCA9IGZldGNoKHNzdXJsLCB7XG4gICAgaGVhZGVyczoge1xuICAgICAgICBDb29raWU6IGdldE15VmFyKCdjb29raWUnLCAnJylcbiAgICB9XG59KVxuXG5cbmV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL3l6bScpKS5ydWxlKTtcblxudmFyIGxpc3QgPSBwZGZhKGh0bWwsICdib2R5JiYucm93LnJvdy0wJylcblxuXG5cbmxpc3QubWFwKHggPT4ge1xuICAgIGQucHVzaCh7XG4gICAgICAgIHRpdGxlOiBwZGZoKHgsICcuYWxlcnQtdGl0bGUmJnRpdGxlJyksXG4gICAgICAgIGltZzogcGRmaCh4LCAnaW1nJiZzcmMnKSxcbiAgICAgICAgY29udGVudDpwZGZoKHgsJy5jYXJkLWJvZHkmJlRleHQnKSxcbiAgICAgICAgdXJsOnBkKHgsJ2EmJmhyZWYnKStjb25maWcubWFyayxcbiAgICB9KVxufSlcblxuXG5cblxuc2V0UmVzdWx0KGQpOyIsImRldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJkZXRhaWxfZmluZF9ydWxlIjoianM6XG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2RldGFpbHMnKSkucnVsZSlcblxuLy8kLnJlcXVpcmUoXCJkZXRhaWxzP3J1bGU9XCIgKyBNWV9SVUxFLnRpdGxlKSIsInNkZXRhaWxfY29sX3R5cGUiOiJtb3ZpZV8xIiwic2RldGFpbF9maW5kX3J1bGUiOiIqIiwidWEiOiJtb2JpbGUiLCJwcmVSdWxlIjoidmFyIHVpID0gZ2V0UGF0aCgnaGlrZXI6Ly9maWxlcy9ydWxlcy96ZXRhbHBoYS9oa1VpLmpzJylcblxuaW5pdENvbmZpZyh7XG4gICAgaW5kZXg6ICdodHRwczovL3d3dy55anlzMDEuY29tLycsXG4gICAgaG9zdDogJ3d3dy55anlzMDEuY29tJyxcbiAgICBwcm90b2NvbDogJ2h0dHBzOicsXG4gICAgbWFyazogJyNpbW1lcnNpdmVUaGVtZSMnLFxuICAgIHVpOnVpXG59KTtcblxuXG5ldmFsKHJlcXVlc3QoJ2h0dHBzOi8vZ2l0ZWUuY29tL3pldGFscGhhL2hpa2Vydmlldy9yYXcvbWFzdGVyL3N1cHBvcnQvanMvVmVyLmpzJykpXG5cbmNoZWNrSW5GaWxlcyhbJ2hrVWkuanMnLFwiU2xpZGUuaHRtbFwiXSlcblxucnVuT25jZVBlckRheShcIlVwZGF0YShbJ2hrVWkuanMnXSlcIikiLCJwYWdlcyI6Ilt7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5Yqo5oCB5YiG57G7XCIsXCJwYXRoXCI6XCJkdGZsXCIsXCJydWxlXCI6XCJqczpcXG5cXG5jb25zdCBlbXB0eSA9IFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcblxcbnRyeSB7XFxuICAgIC8vbG9nKHBkZmEoaHRtbCwg5aSn57G75a6a5L2NKSlcXG4gICAgdmFyIGNhdGVnb3JpZXMgPSBwZGZhKGh0bWwsIOWkp+exu+WumuS9jSkuY29uY2F0KHBkZmEoaHRtbCwg5ou85o6l5YiG57G7KSlcXG59IGNhdGNoIChlKSB7XFxuICAgIHZhciBjYXRlZ29yaWVzID0gcGRmYShodG1sLCDlpKfnsbvlrprkvY0pXFxuICAgIFxcbn1cXG5sZXQgaW5pdF9jYXRlID0gW11cXG5cXG5mb3IgKGxldCBpID0gMDsgaSA8IDIwOyBpKyspIHtcXG4gICAgaW5pdF9jYXRlLnB1c2goXFxcIjBcXFwiKVxcbn1cXG5cXG5jb25zdCBmb2xkID0gZ2V0VmFyKE1ZX1JVTEUuZ3JvdXAsIFxcXCIwXFxcIilcXG5jb25zdCBjYXRlX3RlbXBfanNvbiA9IGdldFZhcihNWV9SVUxFLnRpdGxlLCBKU09OLnN0cmluZ2lmeShpbml0X2NhdGUpKVxcbmNvbnN0IGNhdGVfdGVtcCA9IEpTT04ucGFyc2UoY2F0ZV90ZW1wX2pzb24pXFxuXFxuaWYgKHBhcnNlSW50KHBhZ2UpID09PSAxKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogZm9sZCA9PT0gJzEnID8gJ+KAnOKAnOKAneKAnTxiPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjogIzE5Qjg5RFxcXCI+4pynPC9zcGFuPjwvYj4nIDogJ+KAnOKAnOKAneKAnTxiPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjogIzkxMDExM1xcXCI+4pynPC9zcGFuPjwvYj4nLFxcbiAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKGZvbGQpID0+IHtcXG4gICAgICAgICAgICBwdXRWYXIoTVlfUlVMRS5ncm91cCwgZm9sZCA9PT0gJzEnID8gJzAnIDogJzEnKTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgfSwgZm9sZCksXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICB9KVxcblxcbmNhdGVnb3JpZXMuZm9yRWFjaCgoY2F0ZWdvcnksIGluZGV4KSA9PiB7XFxuICAgICAgICBsZXQgc3ViX2NhdGVnb3JpZXMgPSBwZGZhKGNhdGVnb3J5LCDlsI/nsbvlrprkvY0pO1xcbiAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XFxuICAgICAgICAgICAgc3ViX2NhdGVnb3JpZXMuZm9yRWFjaCgoaXRlbSwga2V5KSA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IHBkZmgoaXRlbSwg5YiG57G75qCH6aKYKVxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGtleS50b1N0cmluZygpID09PSBjYXRlX3RlbXBbaW5kZXhdID8gJ+KAnOKAnOKAneKAnTxiPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjogJyArIOWIhuexu+minOiJsiArICdcXFwiPicgKyB0aXRsZSArICc8L3NwYW4+PC9iPicgOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJChwZChpdGVtLCDliIbnsbvpk77mjqUpICsgJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHBhcmFtcykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXdfY2F0ZSA9IFtdXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmNhdGVfdGVtcC5mb3JFYWNoKChjYXRlLCBpbmRleCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfY2F0ZS5wdXNoKGluZGV4ID09PSAwID8gcGFyYW1zLmtleS50b1N0cmluZygpIDogXFxcIjBcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0VmFyKE1ZX1JVTEUudGl0bGUsIEpTT04uc3RyaW5naWZ5KG5ld19jYXRlKSlcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRWYXIoTVlfUlVMRS50aXRsZSsndXJsJywgaW5wdXQpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZV90ZW1wOiBjYXRlX3RlbXAsXFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBrZXksXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogcGFnZSxcXG4gICAgICAgICAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9IGVsc2UgaWYgKGZvbGQgPT09ICcxJykge1xcbiAgICAgICAgICAgIHN1Yl9jYXRlZ29yaWVzLmZvckVhY2goKGl0ZW0sIGtleSkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBwZGZoKGl0ZW0sIOWIhuexu+agh+mimClcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBrZXkudG9TdHJpbmcoKSA9PT0gY2F0ZV90ZW1wW2luZGV4XSA/ICfigJzigJzigJ3igJ08Yj48c3BhbiBzdHlsZT1cXFwiY29sb3I6ICcgKyDliIbnsbvpopzoibIgKyAnXFxcIj4nICsgdGl0bGUgKyAnPC9zcGFuPjwvYj4nIDogdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQocGQoaXRlbSwg5YiG57G76ZO+5o6lKSArICcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChwYXJhbXMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuY2F0ZV90ZW1wW3BhcmFtcy5pbmRleF0gPSBwYXJhbXMua2V5LnRvU3RyaW5nKClcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRWYXIoTVlfUlVMRS50aXRsZSwgSlNPTi5zdHJpbmdpZnkocGFyYW1zLmNhdGVfdGVtcCkpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0VmFyKE1ZX1JVTEUudGl0bGUrJ3VybCcsIGlucHV0KVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVfdGVtcDogY2F0ZV90ZW1wLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiBwYWdlLFxcbiAgICAgICAgICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJibGFua19ibG9ja1xcXCJcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgfSlcXG59XFxuXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLor6bmg4VcIixcInBhdGhcIjpcImRldGFpbHNcIixcInJ1bGVcIjpcImpzOlxcbnJlcXVpcmUoY29uZmlnLnVpKVxcbnZhciByZXMgPSB7fTtcXG52YXIgZCA9IFtdO1xcbnZhciBsaXN0cz1bXTtcXG52YXIgdGFic3M9W107XFxudmFyIGh0bWwgPSBnZXRSZXNDb2RlKCk7XFxudmFyIHRhYnMgPSBwZGZhKGh0bWwsICdib2R5JiZoNCcpO1xcbnZhciBjb250cyA9IHBkZmEoaHRtbCwgJ2JvZHkmJi5tdC0zOmhhcyg6bWF0Y2hlcyjmkq3mlL7liJfooah85LiL6L295Zyw5Z2AfOenjeWtkOS4i+i9vSkpJyk7XFxuXFxuLy9zZXRFcnJvcihjb250cy5sZW5ndGgpO1xcblxcbmZ1bmN0aW9uIGN1dHN0cihzdHIsIGxlbikge1xcbiAgICB2YXIgc3RyX2xlbmd0aCA9IDA7XFxuICAgIHZhciBzdHJfbGVuID0gMDtcXG4gICAgc3RyX2N1dCA9IG5ldyBTdHJpbmcoKTtcXG4gICAgc3RyX2xlbiA9IHN0ci5sZW5ndGg7XFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyX2xlbjsgaSsrKSB7XFxuICAgICAgICBhID0gc3RyLmNoYXJBdChpKTtcXG4gICAgICAgIHN0cl9sZW5ndGgrKztcXG4gICAgICAgIGlmIChlc2NhcGUoYSkubGVuZ3RoID4gNCkge1xcbiAgICAgICAgICAgIC8v5Lit5paH5a2X56ym55qE6ZW/5bqm57uP57yW56CB5LmL5ZCO5aSn5LqONFxcbiAgICAgICAgICAgIHN0cl9sZW5ndGgrKztcXG4gICAgICAgIH1cXG4gICAgICAgIHN0cl9jdXQgPSBzdHJfY3V0LmNvbmNhdChhKTtcXG4gICAgICAgIGlmIChzdHJfbGVuZ3RoID49IGxlbikge1xcbiAgICAgICAgICAgIC8v6L6+5Yiw55uu5qCH6ZW/5bqm77yM5Y2z5Li65a2X56ym5Liy5Yqg5LiK55yB55Wl5Y+35bm26L+U5ZueXFxuICAgICAgICAgICAgc3RyX2N1dCA9IHN0cl9jdXQuY29uY2F0KFxcXCIuLi5cXFwiKTtcXG4gICAgICAgICAgICByZXR1cm4gc3RyX2N1dDtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICAvL+WmguaenOWtl+espuS4sumVv+W6puWwj+S6jumcgOimgeijgeWIh+eahOmVv+W6pu+8jOebtOaOpei/lOWbnlxcbiAgICBpZiAoc3RyX2xlbmd0aCA8IGxlbikge1xcbiAgICAgICAgcmV0dXJuIHN0cjtcXG4gICAgfVxcbn1cXG5cXG4vL+aJuemHj+abv+aNonRhZ1xcbmZ1bmN0aW9uIHJlVGFnKHRleHQsIGksIG8pIHtcXG4gICAgdmFyIHIgPSBuZXcgUmVnRXhwKCk7XFxuICAgIGkuZm9yRWFjaCgoeCwgaSkgPT4ge1xcbiAgICAgICAgciA9IG5ldyBSZWdFeHAoXFxcIig8XFxcXC8/KVxcXCIgKyB4ICsgXFxcIiguKj8+KVxcXCIsIFxcXCJnXFxcIik7XFxuICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKHIsICckMScgKyBvW2ldICsgJyQyJyk7XFxuICAgIH0pXFxuICAgIHJldHVybiB0ZXh0O1xcbn1cXG5cXG52YXIgdGh1bWIgPSBwZGZoKGh0bWwsIFxcXCIuY292ZXItbGctbWF4LTI1JiZpbWcmJnNyY1xcXCIpO1xcblxcbnZhciBjb250ZW50cyA9IHBkZmEoaHRtbCwgJ2JvZHkmJi5jb2wubWItMiYmcDptYXRjaGVzKOWIq+WQjXzkuIrmmKB86ZuG5pWwfOaRmOimgXzljZXpm4bniYfplb8pJylcXG52YXIgY29udGVudCA9IGNvbnRlbnRzLm1hcCh4ID0+IHBkZmgoeCwgJ3AmJlRleHQnKSk7XFxuXFxudmFyIGRlc2MgPSBwZGZoKGh0bWwsICdib2R5JiYjc3lub3BzaXMmJi5jYXJkLWJvZHkmJlRleHQnKTtcXG5cXG5kLnB1c2goe1xcbiAgICB0aXRsZTogY29udGVudFswXSxcXG4gICAgwqDCoMKgZGVzYzogY29udGVudC5zbGljZSgxKS5qb2luKCdcXFxcbicpLFxcbiAgICDCoMKgwqBwaWNfdXJsOiB0aHVtYixcXG4gICAgwqDCoMKgdXJsOiBNWV9VUkwsXFxuICAgIGNvbF90eXBlOiAnbW92aWVfMV92ZXJ0aWNhbF9waWNfYmx1cidcXG59KTtcXG5cXG5cXG5cXG52YXIgc2Rlc2MgPSAnPHNtYWxsPicgKyBjdXRzdHIoZGVzYywgMTAwKSArICc8L3NtYWxsPic7XFxuZGVzYyA9ICc8c21hbGw+JyArIGRlc2MgKyAnPC9zbWFsbD4nO1xcblxcbnZhciBkYiA9ICcnO1xcblxcbnRyeSB7XFxuICAgIGRiID0gcGRmaChodG1sLCAnYm9keSYmLmNvbC5tYi0yJiZwOm1hdGNoZXMo6LGG55OjKSYmYSYmVGV4dCcpXFxufSBjYXRjaCB7fVxcblxcblxcbmlmIChkYiAhPSAnJykge1xcbiAgICB2YXIgaWQgPSBkYlxcbiAgICB2YXIgdHlwZSA9IHBkZmgoZmV0Y2goYGh0dHBzOi8vbS5kb3ViYW4uY29tL21vdmllL3N1YmplY3QvJHtpZH0vYCksICdib2R5JiYuc3ViamVjdC1tYXJrJiZkYXRhLXR5cGUnKTtcXG4gICAgaWYodHlwZSE9XFxcIlxcXCIpe1xcbiAgICBzZGVzYyA9IHNkZXNjICsgYDxicj48YSBocmVmPVxcXCJoaWtlcjovL3BhZ2UvU2RldGFpbCNub0hpc3RvcnkjI2ltbWVyc2l2ZVRoZW1lIz9ydWxlPemdkuixhiZpZD0ke2lkfSZ0eXBlPSR7dHlwZX1cXFwiPumdkuixhjwvYT5gXFxuICAgIGRlc2MgPSBkZXNjICsgYDxicj48YSBocmVmPVxcXCJoaWtlcjovL3BhZ2UvU2RldGFpbCNub0hpc3RvcnkjI2ltbWVyc2l2ZVRoZW1lIz9ydWxlPemdkuixhiZpZD0ke2lkfSZ0eXBlPSR7dHlwZX1cXFwiPumdkuixhjwvYT5gXFxuICAgIH1cXG59XFxuXFxuXFxuXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICfliafmg4XnroDku4s8c3BhbiBzdHlsZT1cXFwiY29sb3I6I2ZmMDAwMDtcXFwiPjxiPjxzbWFsbD4nICsgc3RvcmFnZTAuZ2V0SXRlbSgnZHNob3cnLCAn5pS26LW3JykgKyAnPC9zbWFsbD48L2I+PC9zcGFuPjonLFxcbiAgICBjb2xfdHlwZTogJ2F2YXRhcicsXFxuICAgIGltZzogJ2h0dHBzOi8vaGlrZXJmYW5zLmNvbS90dWJpYW8vc3lzdGVtLzc1LnBuZycsXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoZGMsIHNkYykgPT4ge1xcbiAgICAgICAgdmFyIGRzID0gc3RvcmFnZTAuZ2V0SXRlbSgnZHNob3cnLCAn5pS26LW3Jyk7XFxuICAgICAgICB2YXIgdGl0bGUgPSBmaW5kSXRlbSgnZHNob3cnKS50aXRsZTtcXG5cXG4gICAgICAgIGlmIChkcyA9PSAn5pS26LW3Jykge1xcbiAgICAgICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0oJ2RzaG93JywgJ+WxleW8gCcpXFxuICAgICAgICAgICAgdXBkYXRlSXRlbSgnZGNvbnRlbnQnLCB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBkYyxcXG4gICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgICB1cGRhdGVJdGVtKCdkc2hvdycsIHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLnJlcGxhY2UoJ+aUtui1tycsICflsZXlvIAnKVxcbiAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgIHVwZGF0ZUl0ZW1cXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgc3RvcmFnZTAuc2V0SXRlbSgnZHNob3cnLCAn5pS26LW3JylcXG4gICAgICAgICAgICB1cGRhdGVJdGVtKCdkY29udGVudCcsIHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHNkYyxcXG4gICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgICB1cGRhdGVJdGVtKCdkc2hvdycsIHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLnJlcGxhY2UoJ+WxleW8gCcsICfmlLbotbcnKVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICB9LCBkZXNjLCBzZGVzYyksXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBpZDogJ2RzaG93JyxcXG4gICAgfVxcbn0pXFxuXFxuXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IHN0b3JhZ2UwLmdldEl0ZW0oJ2RzaG93JywgJ+aUtui1tycpID09ICfmlLbotbcnID8gc2Rlc2MgOiBkZXNjLFxcbiAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCcsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBpZDogJ2Rjb250ZW50JyxcXG4gICAgfVxcbn0pXFxuXFxuZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvbGF6eScsIHt9KSkucnVsZSk7XFxuXFxuXFxuXFxuXFxuZm9yICh2YXIgaSBpbiBjb250cykge1xcblxcbiAgICB2YXIgdHlwZSA9IHBkZmgoY29udHNbaV0sICdoMyYmVGV4dCcpO1xcbiAgICB0YWJzcy5wdXNoKHR5cGUpXFxuICAgIHZhciBwbGF5cyA9IFtdO1xcbiAgICBzd2l0Y2ggKHR5cGUpIHtcXG4gICAgICAgIGNhc2UgJ+aSreaUvuWIl+ihqCc6XFxuICAgICAgICAgICAgcGxheXMgPSBwZGZhKGNvbnRzW2ldLCAnYm9keSYmYScpO1xcbiAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgY2FzZSAn5LiL6L295Zyw5Z2AJzpcXG4gICAgICAgICAgICB2YXIgdGVtcCA9IHJlVGFnKGNvbnRzW2ldLCBbJ3Rib2R5JywgJ3RyJywgJ3RkJ10sIFsnZGl2JywgJ3VsJywgJ2xpJ10pXFxuICAgICAgICAgICAgcGxheXMgPSBwZGZhKHRlbXAsICdib2R5JiYjZG93bmxvYWQtbGlzdCYmdWwnKTtcXG4gICAgICAgICAgICBwbGF5cy5yZXZlcnNlKCk7XFxuICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICBjYXNlICfnp43lrZDkuIvovb0nOlxcbiAgICAgICAgICAgIHBsYXlzID0gcGRmYShjb250c1tpXSwgJ2JvZHkmJmEnKTtcXG4gICAgICAgICAgICBicmVhaztcXG4gICAgfVxcblxcbiAgICB2YXIgY29sID0gJ3RleHRfNCc7XFxuICAgIHZhciB0ZW1wPVtdO1xcbiAgICBwbGF5cy5mb3JFYWNoKHggPT4ge1xcbiAgICAgICAgXFxuICAgICAgICB2YXIgdGV4dCA9IHBkZmgoeCwgJ2EmJlRleHQnKTtcXG4gICAgICAgIHZhciB1cmwgPSBwZCh4LCAnYSYmaHJlZicpICsgbGF6eTtcXG4gICAgICAgIGlmICgvKG1hZ25ldHx0b3JyZW50fGVkMmspLy50ZXN0KHVybCkpIHtcXG4gICAgICAgICAgICB0ZXh0ID0gcGRmaCh4LCAnLnRleHQtbXV0ZWQmJlRleHQnKTtcXG4gICAgICAgICAgICB1cmwgPSBwZCh4LCAnYSYmaHJlZicpO1xcbiAgICAgICAgICAgIGNvbCA9ICd0ZXh0XzInXFxuICAgICAgICB9XFxuICAgICAgICBcXG4gICAgICAgIHRlbXAucHVzaCh7dGl0bGU6dGV4dCx1cmw6dXJsfSlcXG4gICAgfSlcXG4gICAgbGlzdHMucHVzaCh0ZW1wKVxcbiAgICBcXG59XFxuXFxubGV0IHB1c2h4ID0gZ2V0TXlWYXIoJ3B1c2h4JywgJycpXFxuaWYgKHB1c2h4ICE9ICcnKSB7XFxuICAgIOS6jOe6p+aOqOmAgee7hOS7tihkKTtcXG59XFxuXFxudmFyIHNlYXJjaGV4cCA9IGdldE15VmFyKCdleHAnLCAnJylcXG5pZiAoc2VhcmNoZXhwID09ICdleHAnKSB7XFxuICAgIC8vZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvcXNlYXJjaGQ/cnVsZT0nK01ZX1JVTEUudGl0bGUsIHt9KSkucnVsZSk7XFxuICAgICQucmVxdWlyZShcXFwicXNlYXJjaGQ/cnVsZT1cXFwiK01ZX1JVTEUudGl0bGUpXFxufVxcblxcblxcbmlmICh0YWJzcy5sZW5ndGggPiAwKSB7XFxuICAgIHNldFRhYnModGFic3MsIE1ZX1VSTCk7XFxuICAgIHNldExpc3RzKGxpc3RzLCBnZXRNeVZhcihNWV9VUkwsICcwJykpO1xcbn0gZWxzZSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSdncmF5Jz7msqHku7vkvZXnur/ot68s54K55Ye75p+l55yL5Y6f572R6aG1PGZvbnQ+XFxcIixcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxuICAgICAgICB1cmw6TVlfVVJMLFxcbiAgICB9KVxcbn1cXG5cXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxzbWFsbD7nm7jlhbPmjqjojZA8L3NtYWxsPicsXFxuICAgIGNvbF90eXBlOiAndGV4dF8xJ1xcbn0pXFxuXFxudmFyIGxpc3QgPSBwZGZhKGh0bWwsIFxcXCJib2R5JiYuY2FyZC1zbVxcXCIpXFxubGlzdC5tYXAoaXRlbSA9PiB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvZGV0YWlscz9ydWxlJyArXFxuICAgICAgICAgICAgTVlfUlVMRS50aXRsZSArICcmdXJsPScgKyBwZChpdGVtLCAnYSYmaHJlZicpICsgY29uZmlnLm1hcmssXFxuICAgICAgICBkZXNjOiBwZGZoKGl0ZW0sICdzcGFufHxwJiZUZXh0JyksXFxuICAgICAgICB0aXRsZTogcGRmaChpdGVtLCAnaDQmJlRleHQnKSxcXG4gICAgICAgIGltZzogcGRmaChpdGVtLCAnaW1nJiZzcmN8fGRhdGEtc3JjJykgKyAnQFJlZmVyZXI9JyxcXG4gICAgICAgIGNvbF90eXBlOiAnbW92aWVfM19tYXJxdWVlJyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgcGFnZVRpdGxlOiBwZGZoKGl0ZW0sICdoNCYmVGV4dCcpLFxcbiAgICAgICAgfVxcbiAgICB9KVxcbn0pXFxuXFxuXFxuXFxuLy/kuoznuqfmqKHmnb9ieSDOsVxcbnJlcy5kYXRhID0gZDtcXG5zZXRIb21lUmVzdWx0KHJlcyk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLop6PmnpBcIixcInBhdGhcIjpcImxhenlcIixcInJ1bGVcIjpcIlxcbnZhciBsYXp5ID0gJCgnJykubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICB2YXIgdXJsPWlucHV0O1xcbiAgICB2YXIgaG9tZSA9ICdiZHlzJztcXG4gICAgdmFyIGh0bWwgPSBmZXRjaCh1cmwsIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAnY29va2llJzogZ2V0SXRlbShob21lICsgJ0Nvb2tpZScsICcnKSxcXG4gICAgICAgIH1cXG4gICAgfSlcXG4gICAgaWYgKGh0bWwuaW5jbHVkZXMoJ1BsZWFzZSBjb21wbGV0ZSB0aGUgY2FwdGNoYScpKSB7XFxuICAgICAgICBjbGVhclZhcihob21lICsgJ0Nvb2tpZScpO1xcbiAgICAgICAgY2xlYXJJdGVtKGhvbWUgKyAnQ29va2llJyk7ICAgICAgICBcXG4gICAgICAgIHJldHVybiAkKCdoaWtlcjovL2VtcHR5JykucnVsZSgoaG9tZSwgdXJsKSA9PiB7XFxuICAgICAgICAgICAgdmFyIGQgPSBbXTtcXG4gICAgICAgICAgICB2YXIgY29va2llID0gZ2V0VmFyKGhvbWUgKyAnQ29va2llJywgJycpO1xcbiAgICAgICAgICAgIC8vbG9nKGNvb2tpZSlcXG4gICAgICAgICAgICBpZiAoY29va2llICE9ICcnKSB7XFxuICAgICAgICAgICAgICAgIHNldEl0ZW0oaG9tZSArICdDb29raWUnLCBjb29raWUpO1xcbiAgICAgICAgICAgICAgICBiYWNrKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgdG9hc3QoJ+mqjOivgeWujOaIkCcpXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hYNVdlYlZpZXcoJ2hpa2VyOi8vZW1wdHknKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ4NV93ZWJ2aWV3X3NpbmdsZVxcXCIsXFxuICAgICAgICAgICAgICAgIHVybDogdXJsLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBcXFwiZmxvYXQmJjEwMCVcXFwiLFxcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygoaG9tZSwgdXJsKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudElkID0gXFxcIm1ldGFbcHJvcGVydHk9J29nOnR5cGUnXVxcXCI7IC8vIOW+heajgOafpeeahOWFg+e0oCBJRCBcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnRlcnZhbFRpbWUgPSAxMDAwOyAvLyDmr4/pmpQgMSDnp5Lpkp/mo4Dmn6XkuIDmrKEgXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGVsZW1lbnRJZCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50KSB7IC8vIOWtmOWcqOivpeWFg+e0oO+8jOWPr+S7peaJp+ihjOafkOS6m+aTjeS9nCBcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vZmJhLmxvZygn5a2Y5ZyoJylcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZiYS5yZWZyZXNoWDVEZXNjKCdmbG9hdCYmMCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5jb2xvciA9ICdyZWQnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmJhLnB1dFZhcihob21lICsgJ0Nvb2tpZScsIGZiYS5nZXRDb29raWUodXJsKSk7ICAgICAgICAgICAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5yZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXIpOyAvLyDmuIXpmaTlrprml7blmaggXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9mYmEubG9nKCfkuI3lrZjlnKgnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBpbnRlcnZhbFRpbWUpO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgaG9tZSwgdXJsKVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgc2V0SG9tZVJlc3VsdChkKVxcbiAgICAgICAgfSwgaG9tZSwgdXJsKVxcbiAgICB9XFxuICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL3BhcnNlP3J1bGU95ZOU5ZiA5b2x6KeGJywge30pKS5ydWxlKTtcXG4gICAgcmV0dXJuIHVybDtcXG59KTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIumqjOivgeeggVwiLFwicGF0aFwiOlwieXptXCIsXCJydWxlXCI6XCJpZihodG1sLmluZGV4T2YoXFxcIui+k+WFpemqjOivgeeggVxcXCIpKXtcXG52YXIgY29kZXVybCA9IGNvbmZpZy5pbmRleCArIHBkZmgoaHRtbCwgJyN2ZXJpZnlDb2RlJiZzcmMnKS5zbGljZSgxKTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfoh6rliqjor4bliKvlpLHotKXvvIzor7fliLfmlrDph43or5XmiJbogIXmiYvliqjpqozor4EnXFxuICAgICAgICB9KVxcbiAgICAgICAgXFxuICAgICAgICB2YXIgZGljdCA9IHtcXG4gICAgICAgICAgICBteXVybDogc3N1cmwsXFxuICAgICAgICAgICAgdmNvZGU6IGNvZGV1cmxcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfngrnmiJHmiYvliqjpqozor4EnLFxcbiAgICAgICAgICAgIHVybDogJCgnaGlrZXI6Ly9lbXB0eSMjJykucnVsZSgoZGljdCkgPT4ge1xcbiAgICAgICAgICAgICAgICBzZXRQYWdlVGl0bGUoJ+ivt+i+k+WFpeiuoeeul+e7k+aenCcpO1xcbiAgICAgICAgICAgICAgICB2YXIgZCA9IFtdO1xcbiAgICAgICAgICAgICAgICB2YXIgbXl1cmwgPSBkaWN0Lm15dXJsO1xcbiAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IGZldGNoKG15dXJsKTtcXG4gICAgICAgICAgICAgICAgdmFyIGNvZGV1cmwgPSBjb25maWcuaW5kZXggKyBwZGZoKGh0bWwsICcjdmVyaWZ5Q29kZSYmc3JjJykuc2xpY2UoMSk7XFxuICAgICAgICAgICAgICAgIHZhciBiNjQgPSBjb252ZXJ0QmFzZTY0SW1hZ2UoY29kZXVybClcXG5cXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIGltZzogYjY0LFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdwaWNfMV9mdWxsJyxcXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn56Gu6K6kJyxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAkLnRvU3RyaW5nKChteXVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJsID0gbXl1cmwgKyAnP2NvZGU9JyArIGlucHV0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vbG9nKGN1cmwpXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGhlYWRlcnMgPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogTU9CSUxFX1VBLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6IG15dXJsXFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IGZldGNoKGN1cmwsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaHRtbC5pbmRleE9mKCfovpPlhaXpqozor4HnoIEnKSA9PSAtMSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29va2llID0gZ2V0Q29va2llKGN1cmwpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignY29va2llJywgY29va2llKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFjaygpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2FzdCgn5oiQ5Yqf77yM6K+35Yiw5pCc57Si6aG15Yi35pawJylcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2FzdCgn6ZSZ6K+v6K+36YeN6K+VJylcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgICAgICAgICAgfSwgbXl1cmwpLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbnVtYmVyJ1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICBzZXRSZXN1bHQoZCk7XFxuICAgICAgICAgICAgfSwgZGljdClcXG4gICAgICAgIH0pXFxufSAgXFxuICAgIFxcblwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwicGFrb1wiLFwicGF0aFwiOlwicGFrb1wiLFwicnVsZVwiOlwianM6XFxuISBmdW5jdGlvbih0KSB7XFxuICAgIGlmIChcXFwib2JqZWN0XFxcIiA9PSB0eXBlb2YgZXhwb3J0cyAmJiBcXFwidW5kZWZpbmVkXFxcIiAhPSB0eXBlb2YgbW9kdWxlKSBtb2R1bGUuZXhwb3J0cyA9IHQoKTtcXG4gICAgZWxzZSBpZiAoXFxcImZ1bmN0aW9uXFxcIiA9PSB0eXBlb2YgZGVmaW5lICYmIGRlZmluZS5hbWQpIGRlZmluZShbXSwgdCk7XFxuICAgIGVsc2Uge1xcbiAgICAgICAgKFxcXCJ1bmRlZmluZWRcXFwiICE9IHR5cGVvZiB3aW5kb3cgPyB3aW5kb3cgOiBcXFwidW5kZWZpbmVkXFxcIiAhPSB0eXBlb2YgZ2xvYmFsID8gZ2xvYmFsIDogXFxcInVuZGVmaW5lZFxcXCIgIT0gdHlwZW9mIHNlbGYgPyBzZWxmIDogdGhpcykucGFrbyA9IHQoKVxcbiAgICB9XFxufShmdW5jdGlvbigpIHtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIHIocywgbywgbCkge1xcbiAgICAgICAgZnVuY3Rpb24gaChlLCB0KSB7XFxuICAgICAgICAgICAgaWYgKCFvW2VdKSB7XFxuICAgICAgICAgICAgICAgIGlmICghc1tlXSkge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBcXFwiZnVuY3Rpb25cXFwiID09IHR5cGVvZiByZXF1aXJlICYmIHJlcXVpcmU7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoIXQgJiYgYSkgcmV0dXJuIGEoZSwgITApO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGQpIHJldHVybiBkKGUsICEwKTtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBpID0gbmV3IEVycm9yKFxcXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1xcXCIgKyBlICsgXFxcIidcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIHRocm93IGkuY29kZSA9IFxcXCJNT0RVTEVfTk9UX0ZPVU5EXFxcIiwgaVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHZhciBuID0gb1tlXSA9IHtcXG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHM6IHt9XFxuICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgIHNbZV1bMF0uY2FsbChuLmV4cG9ydHMsIGZ1bmN0aW9uKHQpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBoKHNbZV1bMV1bdF0gfHwgdClcXG4gICAgICAgICAgICAgICAgfSwgbiwgbi5leHBvcnRzLCByLCBzLCBvLCBsKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gb1tlXS5leHBvcnRzXFxuICAgICAgICB9XFxuICAgICAgICBmb3IgKHZhciBkID0gXFxcImZ1bmN0aW9uXFxcIiA9PSB0eXBlb2YgcmVxdWlyZSAmJiByZXF1aXJlLCB0ID0gMDsgdCA8IGwubGVuZ3RoOyB0KyspIGgobFt0XSk7XFxuICAgICAgICByZXR1cm4gaFxcbiAgICB9KHtcXG4gICAgICAgIDE6IFtmdW5jdGlvbih0LCBlLCBhKSB7XFxuICAgICAgICAgICAgXFxcInVzZSBzdHJpY3RcXFwiO1xcbiAgICAgICAgICAgIHZhciBzID0gdChcXFwiLi96bGliL2RlZmxhdGVcXFwiKSxcXG4gICAgICAgICAgICAgICAgbyA9IHQoXFxcIi4vdXRpbHMvY29tbW9uXFxcIiksXFxuICAgICAgICAgICAgICAgIGwgPSB0KFxcXCIuL3V0aWxzL3N0cmluZ3NcXFwiKSxcXG4gICAgICAgICAgICAgICAgbiA9IHQoXFxcIi4vemxpYi9tZXNzYWdlc1xcXCIpLFxcbiAgICAgICAgICAgICAgICByID0gdChcXFwiLi96bGliL3pzdHJlYW1cXFwiKSxcXG4gICAgICAgICAgICAgICAgaCA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsXFxuICAgICAgICAgICAgICAgIGQgPSAwLFxcbiAgICAgICAgICAgICAgICBmID0gLTEsXFxuICAgICAgICAgICAgICAgIF8gPSAwLFxcbiAgICAgICAgICAgICAgICB1ID0gODtcXG5cXG4gICAgICAgICAgICBmdW5jdGlvbiBjKHQpIHtcXG4gICAgICAgICAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIGMpKSByZXR1cm4gbmV3IGModCk7XFxuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9IG8uYXNzaWduKHtcXG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiBmLFxcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiB1LFxcbiAgICAgICAgICAgICAgICAgICAgY2h1bmtTaXplOiAxNjM4NCxcXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvd0JpdHM6IDE1LFxcbiAgICAgICAgICAgICAgICAgICAgbWVtTGV2ZWw6IDgsXFxuICAgICAgICAgICAgICAgICAgICBzdHJhdGVneTogXyxcXG4gICAgICAgICAgICAgICAgICAgIHRvOiBcXFwiXFxcIlxcbiAgICAgICAgICAgICAgICB9LCB0IHx8IHt9KTtcXG4gICAgICAgICAgICAgICAgdmFyIGUgPSB0aGlzLm9wdGlvbnM7XFxuICAgICAgICAgICAgICAgIGUucmF3ICYmIDAgPCBlLndpbmRvd0JpdHMgPyBlLndpbmRvd0JpdHMgPSAtZS53aW5kb3dCaXRzIDogZS5nemlwICYmIDAgPCBlLndpbmRvd0JpdHMgJiYgZS53aW5kb3dCaXRzIDwgMTYgJiYgKGUud2luZG93Qml0cyArPSAxNiksIHRoaXMuZXJyID0gMCwgdGhpcy5tc2cgPSBcXFwiXFxcIiwgdGhpcy5lbmRlZCA9ICExLCB0aGlzLmNodW5rcyA9IFtdLCB0aGlzLnN0cm0gPSBuZXcgciwgdGhpcy5zdHJtLmF2YWlsX291dCA9IDA7XFxuICAgICAgICAgICAgICAgIHZhciBhID0gcy5kZWZsYXRlSW5pdDIodGhpcy5zdHJtLCBlLmxldmVsLCBlLm1ldGhvZCwgZS53aW5kb3dCaXRzLCBlLm1lbUxldmVsLCBlLnN0cmF0ZWd5KTtcXG4gICAgICAgICAgICAgICAgaWYgKGEgIT09IGQpIHRocm93IG5ldyBFcnJvcihuW2FdKTtcXG4gICAgICAgICAgICAgICAgaWYgKGUuaGVhZGVyICYmIHMuZGVmbGF0ZVNldEhlYWRlcih0aGlzLnN0cm0sIGUuaGVhZGVyKSwgZS5kaWN0aW9uYXJ5KSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgaTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChpID0gXFxcInN0cmluZ1xcXCIgPT0gdHlwZW9mIGUuZGljdGlvbmFyeSA/IGwuc3RyaW5nMmJ1ZihlLmRpY3Rpb25hcnkpIDogXFxcIltvYmplY3QgQXJyYXlCdWZmZXJdXFxcIiA9PT0gaC5jYWxsKGUuZGljdGlvbmFyeSkgPyBuZXcgVWludDhBcnJheShlLmRpY3Rpb25hcnkpIDogZS5kaWN0aW9uYXJ5LCAoYSA9IHMuZGVmbGF0ZVNldERpY3Rpb25hcnkodGhpcy5zdHJtLCBpKSkgIT09IGQpIHRocm93IG5ldyBFcnJvcihuW2FdKTtcXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RpY3Rfc2V0ID0gITBcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBmdW5jdGlvbiBpKHQsIGUpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGEgPSBuZXcgYyhlKTtcXG4gICAgICAgICAgICAgICAgaWYgKGEucHVzaCh0LCAhMCksIGEuZXJyKSB0aHJvdyBhLm1zZyB8fCBuW2EuZXJyXTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGEucmVzdWx0XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGMucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbih0LCBlKSB7XFxuICAgICAgICAgICAgICAgIHZhciBhLCBpLCBuID0gdGhpcy5zdHJtLFxcbiAgICAgICAgICAgICAgICAgICAgciA9IHRoaXMub3B0aW9ucy5jaHVua1NpemU7XFxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmVuZGVkKSByZXR1cm4gITE7XFxuICAgICAgICAgICAgICAgIGkgPSBlID09PSB+fmUgPyBlIDogITAgPT09IGUgPyA0IDogMCwgXFxcInN0cmluZ1xcXCIgPT0gdHlwZW9mIHQgPyBuLmlucHV0ID0gbC5zdHJpbmcyYnVmKHQpIDogXFxcIltvYmplY3QgQXJyYXlCdWZmZXJdXFxcIiA9PT0gaC5jYWxsKHQpID8gbi5pbnB1dCA9IG5ldyBVaW50OEFycmF5KHQpIDogbi5pbnB1dCA9IHQsIG4ubmV4dF9pbiA9IDAsIG4uYXZhaWxfaW4gPSBuLmlucHV0Lmxlbmd0aDtcXG4gICAgICAgICAgICAgICAgZG8ge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKDAgPT09IG4uYXZhaWxfb3V0ICYmIChuLm91dHB1dCA9IG5ldyBvLkJ1ZjgociksIG4ubmV4dF9vdXQgPSAwLCBuLmF2YWlsX291dCA9IHIpLCAxICE9PSAoYSA9IHMuZGVmbGF0ZShuLCBpKSkgJiYgYSAhPT0gZCkgcmV0dXJuIHRoaXMub25FbmQoYSksICEodGhpcy5lbmRlZCA9ICEwKTtcXG4gICAgICAgICAgICAgICAgICAgIDAgIT09IG4uYXZhaWxfb3V0ICYmICgwICE9PSBuLmF2YWlsX2luIHx8IDQgIT09IGkgJiYgMiAhPT0gaSkgfHwgKFxcXCJzdHJpbmdcXFwiID09PSB0aGlzLm9wdGlvbnMudG8gPyB0aGlzLm9uRGF0YShsLmJ1ZjJiaW5zdHJpbmcoby5zaHJpbmtCdWYobi5vdXRwdXQsIG4ubmV4dF9vdXQpKSkgOiB0aGlzLm9uRGF0YShvLnNocmlua0J1ZihuLm91dHB1dCwgbi5uZXh0X291dCkpKVxcbiAgICAgICAgICAgICAgICB9IHdoaWxlICgoMCA8IG4uYXZhaWxfaW4gfHwgMCA9PT0gbi5hdmFpbF9vdXQpICYmIDEgIT09IGEpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gNCA9PT0gaSA/IChhID0gcy5kZWZsYXRlRW5kKHRoaXMuc3RybSksIHRoaXMub25FbmQoYSksIHRoaXMuZW5kZWQgPSAhMCwgYSA9PT0gZCkgOiAyICE9PSBpIHx8ICh0aGlzLm9uRW5kKGQpLCAhKG4uYXZhaWxfb3V0ID0gMCkpXFxuICAgICAgICAgICAgfSwgYy5wcm90b3R5cGUub25EYXRhID0gZnVuY3Rpb24odCkge1xcbiAgICAgICAgICAgICAgICB0aGlzLmNodW5rcy5wdXNoKHQpXFxuICAgICAgICAgICAgfSwgYy5wcm90b3R5cGUub25FbmQgPSBmdW5jdGlvbih0KSB7XFxuICAgICAgICAgICAgICAgIHQgPT09IGQgJiYgKFxcXCJzdHJpbmdcXFwiID09PSB0aGlzLm9wdGlvbnMudG8gPyB0aGlzLnJlc3VsdCA9IHRoaXMuY2h1bmtzLmpvaW4oXFxcIlxcXCIpIDogdGhpcy5yZXN1bHQgPSBvLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpKSwgdGhpcy5jaHVua3MgPSBbXSwgdGhpcy5lcnIgPSB0LCB0aGlzLm1zZyA9IHRoaXMuc3RybS5tc2dcXG4gICAgICAgICAgICB9LCBhLkRlZmxhdGUgPSBjLCBhLmRlZmxhdGUgPSBpLCBhLmRlZmxhdGVSYXcgPSBmdW5jdGlvbih0LCBlKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiAoZSA9IGUgfHwge30pLnJhdyA9ICEwLCBpKHQsIGUpXFxuICAgICAgICAgICAgfSwgYS5nemlwID0gZnVuY3Rpb24odCwgZSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gKGUgPSBlIHx8IHt9KS5nemlwID0gITAsIGkodCwgZSlcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgXFxcIi4vdXRpbHMvY29tbW9uXFxcIjogMyxcXG4gICAgICAgICAgICBcXFwiLi91dGlscy9zdHJpbmdzXFxcIjogNCxcXG4gICAgICAgICAgICBcXFwiLi96bGliL2RlZmxhdGVcXFwiOiA4LFxcbiAgICAgICAgICAgIFxcXCIuL3psaWIvbWVzc2FnZXNcXFwiOiAxMyxcXG4gICAgICAgICAgICBcXFwiLi96bGliL3pzdHJlYW1cXFwiOiAxNVxcbiAgICAgICAgfV0sXFxuICAgICAgICAyOiBbZnVuY3Rpb24odCwgZSwgYSkge1xcbiAgICAgICAgICAgIFxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4gICAgICAgICAgICB2YXIgZiA9IHQoXFxcIi4vemxpYi9pbmZsYXRlXFxcIiksXFxuICAgICAgICAgICAgICAgIF8gPSB0KFxcXCIuL3V0aWxzL2NvbW1vblxcXCIpLFxcbiAgICAgICAgICAgICAgICB1ID0gdChcXFwiLi91dGlscy9zdHJpbmdzXFxcIiksXFxuICAgICAgICAgICAgICAgIGMgPSB0KFxcXCIuL3psaWIvY29uc3RhbnRzXFxcIiksXFxuICAgICAgICAgICAgICAgIGkgPSB0KFxcXCIuL3psaWIvbWVzc2FnZXNcXFwiKSxcXG4gICAgICAgICAgICAgICAgbiA9IHQoXFxcIi4vemxpYi96c3RyZWFtXFxcIiksXFxuICAgICAgICAgICAgICAgIHIgPSB0KFxcXCIuL3psaWIvZ3poZWFkZXJcXFwiKSxcXG4gICAgICAgICAgICAgICAgYiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XFxuXFxuICAgICAgICAgICAgZnVuY3Rpb24gcyh0KSB7XFxuICAgICAgICAgICAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBzKSkgcmV0dXJuIG5ldyBzKHQpO1xcbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSBfLmFzc2lnbih7XFxuICAgICAgICAgICAgICAgICAgICBjaHVua1NpemU6IDE2Mzg0LFxcbiAgICAgICAgICAgICAgICAgICAgd2luZG93Qml0czogMCxcXG4gICAgICAgICAgICAgICAgICAgIHRvOiBcXFwiXFxcIlxcbiAgICAgICAgICAgICAgICB9LCB0IHx8IHt9KTtcXG4gICAgICAgICAgICAgICAgdmFyIGUgPSB0aGlzLm9wdGlvbnM7XFxuICAgICAgICAgICAgICAgIGUucmF3ICYmIDAgPD0gZS53aW5kb3dCaXRzICYmIGUud2luZG93Qml0cyA8IDE2ICYmIChlLndpbmRvd0JpdHMgPSAtZS53aW5kb3dCaXRzLCAwID09PSBlLndpbmRvd0JpdHMgJiYgKGUud2luZG93Qml0cyA9IC0xNSkpLCAhKDAgPD0gZS53aW5kb3dCaXRzICYmIGUud2luZG93Qml0cyA8IDE2KSB8fCB0ICYmIHQud2luZG93Qml0cyB8fCAoZS53aW5kb3dCaXRzICs9IDMyKSwgMTUgPCBlLndpbmRvd0JpdHMgJiYgZS53aW5kb3dCaXRzIDwgNDggJiYgMCA9PSAoMTUgJiBlLndpbmRvd0JpdHMpICYmIChlLndpbmRvd0JpdHMgfD0gMTUpLCB0aGlzLmVyciA9IDAsIHRoaXMubXNnID0gXFxcIlxcXCIsIHRoaXMuZW5kZWQgPSAhMSwgdGhpcy5jaHVua3MgPSBbXSwgdGhpcy5zdHJtID0gbmV3IG4sIHRoaXMuc3RybS5hdmFpbF9vdXQgPSAwO1xcbiAgICAgICAgICAgICAgICB2YXIgYSA9IGYuaW5mbGF0ZUluaXQyKHRoaXMuc3RybSwgZS53aW5kb3dCaXRzKTtcXG4gICAgICAgICAgICAgICAgaWYgKGEgIT09IGMuWl9PSykgdGhyb3cgbmV3IEVycm9yKGlbYV0pO1xcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5oZWFkZXIgPSBuZXcgciwgZi5pbmZsYXRlR2V0SGVhZGVyKHRoaXMuc3RybSwgdGhpcy5oZWFkZXIpLCBlLmRpY3Rpb25hcnkgJiYgKFxcXCJzdHJpbmdcXFwiID09IHR5cGVvZiBlLmRpY3Rpb25hcnkgPyBlLmRpY3Rpb25hcnkgPSB1LnN0cmluZzJidWYoZS5kaWN0aW9uYXJ5KSA6IFxcXCJbb2JqZWN0IEFycmF5QnVmZmVyXVxcXCIgPT09IGIuY2FsbChlLmRpY3Rpb25hcnkpICYmIChlLmRpY3Rpb25hcnkgPSBuZXcgVWludDhBcnJheShlLmRpY3Rpb25hcnkpKSwgZS5yYXcgJiYgKGEgPSBmLmluZmxhdGVTZXREaWN0aW9uYXJ5KHRoaXMuc3RybSwgZS5kaWN0aW9uYXJ5KSkgIT09IGMuWl9PSykpIHRocm93IG5ldyBFcnJvcihpW2FdKVxcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBmdW5jdGlvbiBvKHQsIGUpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGEgPSBuZXcgcyhlKTtcXG4gICAgICAgICAgICAgICAgaWYgKGEucHVzaCh0LCAhMCksIGEuZXJyKSB0aHJvdyBhLm1zZyB8fCBpW2EuZXJyXTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGEucmVzdWx0XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHMucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbih0LCBlKSB7XFxuICAgICAgICAgICAgICAgIHZhciBhLCBpLCBuLCByLCBzLCBvID0gdGhpcy5zdHJtLFxcbiAgICAgICAgICAgICAgICAgICAgbCA9IHRoaXMub3B0aW9ucy5jaHVua1NpemUsXFxuICAgICAgICAgICAgICAgICAgICBoID0gdGhpcy5vcHRpb25zLmRpY3Rpb25hcnksXFxuICAgICAgICAgICAgICAgICAgICBkID0gITE7XFxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmVuZGVkKSByZXR1cm4gITE7XFxuICAgICAgICAgICAgICAgIGkgPSBlID09PSB+fmUgPyBlIDogITAgPT09IGUgPyBjLlpfRklOSVNIIDogYy5aX05PX0ZMVVNILCBcXFwic3RyaW5nXFxcIiA9PSB0eXBlb2YgdCA/IG8uaW5wdXQgPSB1LmJpbnN0cmluZzJidWYodCkgOiBcXFwiW29iamVjdCBBcnJheUJ1ZmZlcl1cXFwiID09PSBiLmNhbGwodCkgPyBvLmlucHV0ID0gbmV3IFVpbnQ4QXJyYXkodCkgOiBvLmlucHV0ID0gdCwgby5uZXh0X2luID0gMCwgby5hdmFpbF9pbiA9IG8uaW5wdXQubGVuZ3RoO1xcbiAgICAgICAgICAgICAgICBkbyB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PT0gby5hdmFpbF9vdXQgJiYgKG8ub3V0cHV0ID0gbmV3IF8uQnVmOChsKSwgby5uZXh0X291dCA9IDAsIG8uYXZhaWxfb3V0ID0gbCksIChhID0gZi5pbmZsYXRlKG8sIGMuWl9OT19GTFVTSCkpID09PSBjLlpfTkVFRF9ESUNUICYmIGggJiYgKGEgPSBmLmluZmxhdGVTZXREaWN0aW9uYXJ5KHRoaXMuc3RybSwgaCkpLCBhID09PSBjLlpfQlVGX0VSUk9SICYmICEwID09PSBkICYmIChhID0gYy5aX09LLCBkID0gITEpLCBhICE9PSBjLlpfU1RSRUFNX0VORCAmJiBhICE9PSBjLlpfT0spIHJldHVybiB0aGlzLm9uRW5kKGEpLCAhKHRoaXMuZW5kZWQgPSAhMCk7XFxuICAgICAgICAgICAgICAgICAgICBvLm5leHRfb3V0ICYmICgwICE9PSBvLmF2YWlsX291dCAmJiBhICE9PSBjLlpfU1RSRUFNX0VORCAmJiAoMCAhPT0gby5hdmFpbF9pbiB8fCBpICE9PSBjLlpfRklOSVNIICYmIGkgIT09IGMuWl9TWU5DX0ZMVVNIKSB8fCAoXFxcInN0cmluZ1xcXCIgPT09IHRoaXMub3B0aW9ucy50byA/IChuID0gdS51dGY4Ym9yZGVyKG8ub3V0cHV0LCBvLm5leHRfb3V0KSwgciA9IG8ubmV4dF9vdXQgLSBuLCBzID0gdS5idWYyc3RyaW5nKG8ub3V0cHV0LCBuKSwgby5uZXh0X291dCA9IHIsIG8uYXZhaWxfb3V0ID0gbCAtIHIsIHIgJiYgXy5hcnJheVNldChvLm91dHB1dCwgby5vdXRwdXQsIG4sIHIsIDApLCB0aGlzLm9uRGF0YShzKSkgOiB0aGlzLm9uRGF0YShfLnNocmlua0J1ZihvLm91dHB1dCwgby5uZXh0X291dCkpKSksIDAgPT09IG8uYXZhaWxfaW4gJiYgMCA9PT0gby5hdmFpbF9vdXQgJiYgKGQgPSAhMClcXG4gICAgICAgICAgICAgICAgfSB3aGlsZSAoKDAgPCBvLmF2YWlsX2luIHx8IDAgPT09IG8uYXZhaWxfb3V0KSAmJiBhICE9PSBjLlpfU1RSRUFNX0VORCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBhID09PSBjLlpfU1RSRUFNX0VORCAmJiAoaSA9IGMuWl9GSU5JU0gpLCBpID09PSBjLlpfRklOSVNIID8gKGEgPSBmLmluZmxhdGVFbmQodGhpcy5zdHJtKSwgdGhpcy5vbkVuZChhKSwgdGhpcy5lbmRlZCA9ICEwLCBhID09PSBjLlpfT0spIDogaSAhPT0gYy5aX1NZTkNfRkxVU0ggfHwgKHRoaXMub25FbmQoYy5aX09LKSwgIShvLmF2YWlsX291dCA9IDApKVxcbiAgICAgICAgICAgIH0sIHMucHJvdG90eXBlLm9uRGF0YSA9IGZ1bmN0aW9uKHQpIHtcXG4gICAgICAgICAgICAgICAgdGhpcy5jaHVua3MucHVzaCh0KVxcbiAgICAgICAgICAgIH0sIHMucHJvdG90eXBlLm9uRW5kID0gZnVuY3Rpb24odCkge1xcbiAgICAgICAgICAgICAgICB0ID09PSBjLlpfT0sgJiYgKFxcXCJzdHJpbmdcXFwiID09PSB0aGlzLm9wdGlvbnMudG8gPyB0aGlzLnJlc3VsdCA9IHRoaXMuY2h1bmtzLmpvaW4oXFxcIlxcXCIpIDogdGhpcy5yZXN1bHQgPSBfLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpKSwgdGhpcy5jaHVua3MgPSBbXSwgdGhpcy5lcnIgPSB0LCB0aGlzLm1zZyA9IHRoaXMuc3RybS5tc2dcXG4gICAgICAgICAgICB9LCBhLkluZmxhdGUgPSBzLCBhLmluZmxhdGUgPSBvLCBhLmluZmxhdGVSYXcgPSBmdW5jdGlvbih0LCBlKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiAoZSA9IGUgfHwge30pLnJhdyA9ICEwLCBvKHQsIGUpXFxuICAgICAgICAgICAgfSwgYS51bmd6aXAgPSBvXFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgXFxcIi4vdXRpbHMvY29tbW9uXFxcIjogMyxcXG4gICAgICAgICAgICBcXFwiLi91dGlscy9zdHJpbmdzXFxcIjogNCxcXG4gICAgICAgICAgICBcXFwiLi96bGliL2NvbnN0YW50c1xcXCI6IDYsXFxuICAgICAgICAgICAgXFxcIi4vemxpYi9nemhlYWRlclxcXCI6IDksXFxuICAgICAgICAgICAgXFxcIi4vemxpYi9pbmZsYXRlXFxcIjogMTEsXFxuICAgICAgICAgICAgXFxcIi4vemxpYi9tZXNzYWdlc1xcXCI6IDEzLFxcbiAgICAgICAgICAgIFxcXCIuL3psaWIvenN0cmVhbVxcXCI6IDE1XFxuICAgICAgICB9XSxcXG4gICAgICAgIDM6IFtmdW5jdGlvbih0LCBlLCBhKSB7XFxuICAgICAgICAgICAgXFxcInVzZSBzdHJpY3RcXFwiO1xcbiAgICAgICAgICAgIHZhciBpID0gXFxcInVuZGVmaW5lZFxcXCIgIT0gdHlwZW9mIFVpbnQ4QXJyYXkgJiYgXFxcInVuZGVmaW5lZFxcXCIgIT0gdHlwZW9mIFVpbnQxNkFycmF5ICYmIFxcXCJ1bmRlZmluZWRcXFwiICE9IHR5cGVvZiBJbnQzMkFycmF5O1xcbiAgICAgICAgICAgIGEuYXNzaWduID0gZnVuY3Rpb24odCkge1xcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBlLCBhLCBpID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsgaS5sZW5ndGg7KSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgbiA9IGkuc2hpZnQoKTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChuKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxcXCJvYmplY3RcXFwiICE9IHR5cGVvZiBuKSB0aHJvdyBuZXcgVHlwZUVycm9yKG4gKyBcXFwibXVzdCBiZSBub24tb2JqZWN0XFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgciBpbiBuKSBlID0gbiwgYSA9IHIsIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCBhKSAmJiAodFtyXSA9IG5bcl0pXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRcXG4gICAgICAgICAgICB9LCBhLnNocmlua0J1ZiA9IGZ1bmN0aW9uKHQsIGUpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHQubGVuZ3RoID09PSBlID8gdCA6IHQuc3ViYXJyYXkgPyB0LnN1YmFycmF5KDAsIGUpIDogKHQubGVuZ3RoID0gZSwgdClcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIHZhciBuID0ge1xcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlTZXQ6IGZ1bmN0aW9uKHQsIGUsIGEsIGksIG4pIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5zdWJhcnJheSAmJiB0LnN1YmFycmF5KSB0LnNldChlLnN1YmFycmF5KGEsIGEgKyBpKSwgbik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGk7IHIrKykgdFtuICsgcl0gPSBlW2EgKyByXVxcbiAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgIGZsYXR0ZW5DaHVua3M6IGZ1bmN0aW9uKHQpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZSwgYSwgaSwgbiwgciwgcztcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGUgPSBpID0gMCwgYSA9IHQubGVuZ3RoOyBlIDwgYTsgZSsrKSBpICs9IHRbZV0ubGVuZ3RoO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAocyA9IG5ldyBVaW50OEFycmF5KGkpLCBlID0gbiA9IDAsIGEgPSB0Lmxlbmd0aDsgZSA8IGE7IGUrKykgciA9IHRbZV0sIHMuc2V0KHIsIG4pLCBuICs9IHIubGVuZ3RoO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIHIgPSB7XFxuICAgICAgICAgICAgICAgICAgICBhcnJheVNldDogZnVuY3Rpb24odCwgZSwgYSwgaSwgbikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgaTsgcisrKSB0W24gKyByXSA9IGVbYSArIHJdXFxuICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgZmxhdHRlbkNodW5rczogZnVuY3Rpb24odCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXS5jb25jYXQuYXBwbHkoW10sIHQpXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgYS5zZXRUeXBlZCA9IGZ1bmN0aW9uKHQpIHtcXG4gICAgICAgICAgICAgICAgdCA/IChhLkJ1ZjggPSBVaW50OEFycmF5LCBhLkJ1ZjE2ID0gVWludDE2QXJyYXksIGEuQnVmMzIgPSBJbnQzMkFycmF5LCBhLmFzc2lnbihhLCBuKSkgOiAoYS5CdWY4ID0gQXJyYXksIGEuQnVmMTYgPSBBcnJheSwgYS5CdWYzMiA9IEFycmF5LCBhLmFzc2lnbihhLCByKSlcXG4gICAgICAgICAgICB9LCBhLnNldFR5cGVkKGkpXFxuICAgICAgICB9LCB7fV0sXFxuICAgICAgICA0OiBbZnVuY3Rpb24odCwgZSwgYSkge1xcbiAgICAgICAgICAgIFxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4gICAgICAgICAgICB2YXIgbCA9IHQoXFxcIi4vY29tbW9uXFxcIiksXFxuICAgICAgICAgICAgICAgIG4gPSAhMCxcXG4gICAgICAgICAgICAgICAgciA9ICEwO1xcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgWzBdKVxcbiAgICAgICAgICAgIH0gY2F0Y2ggKHQpIHtcXG4gICAgICAgICAgICAgICAgbiA9ICExXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgbmV3IFVpbnQ4QXJyYXkoMSkpXFxuICAgICAgICAgICAgfSBjYXRjaCAodCkge1xcbiAgICAgICAgICAgICAgICByID0gITFcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgZm9yICh2YXIgaCA9IG5ldyBsLkJ1ZjgoMjU2KSwgaSA9IDA7IGkgPCAyNTY7IGkrKykgaFtpXSA9IDI1MiA8PSBpID8gNiA6IDI0OCA8PSBpID8gNSA6IDI0MCA8PSBpID8gNCA6IDIyNCA8PSBpID8gMyA6IDE5MiA8PSBpID8gMiA6IDE7XFxuXFxuICAgICAgICAgICAgZnVuY3Rpb24gZCh0LCBlKSB7XFxuICAgICAgICAgICAgICAgIGlmIChlIDwgNjU1MzQgJiYgKHQuc3ViYXJyYXkgJiYgciB8fCAhdC5zdWJhcnJheSAmJiBuKSkgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgbC5zaHJpbmtCdWYodCwgZSkpO1xcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBhID0gXFxcIlxcXCIsIGkgPSAwOyBpIDwgZTsgaSsrKSBhICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodFtpXSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBhXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGhbMjU0XSA9IGhbMjU0XSA9IDEsIGEuc3RyaW5nMmJ1ZiA9IGZ1bmN0aW9uKHQpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGUsIGEsIGksIG4sIHIsIHMgPSB0Lmxlbmd0aCxcXG4gICAgICAgICAgICAgICAgICAgIG8gPSAwO1xcbiAgICAgICAgICAgICAgICBmb3IgKG4gPSAwOyBuIDwgczsgbisrKSA1NTI5NiA9PSAoNjQ1MTIgJiAoYSA9IHQuY2hhckNvZGVBdChuKSkpICYmIG4gKyAxIDwgcyAmJiA1NjMyMCA9PSAoNjQ1MTIgJiAoaSA9IHQuY2hhckNvZGVBdChuICsgMSkpKSAmJiAoYSA9IDY1NTM2ICsgKGEgLSA1NTI5NiA8PCAxMCkgKyAoaSAtIDU2MzIwKSwgbisrKSwgbyArPSBhIDwgMTI4ID8gMSA6IGEgPCAyMDQ4ID8gMiA6IGEgPCA2NTUzNiA/IDMgOiA0O1xcbiAgICAgICAgICAgICAgICBmb3IgKGUgPSBuZXcgbC5CdWY4KG8pLCBuID0gciA9IDA7IHIgPCBvOyBuKyspIDU1Mjk2ID09ICg2NDUxMiAmIChhID0gdC5jaGFyQ29kZUF0KG4pKSkgJiYgbiArIDEgPCBzICYmIDU2MzIwID09ICg2NDUxMiAmIChpID0gdC5jaGFyQ29kZUF0KG4gKyAxKSkpICYmIChhID0gNjU1MzYgKyAoYSAtIDU1Mjk2IDw8IDEwKSArIChpIC0gNTYzMjApLCBuKyspLCBhIDwgMTI4ID8gZVtyKytdID0gYSA6IChhIDwgMjA0OCA/IGVbcisrXSA9IDE5MiB8IGEgPj4+IDYgOiAoYSA8IDY1NTM2ID8gZVtyKytdID0gMjI0IHwgYSA+Pj4gMTIgOiAoZVtyKytdID0gMjQwIHwgYSA+Pj4gMTgsIGVbcisrXSA9IDEyOCB8IGEgPj4+IDEyICYgNjMpLCBlW3IrK10gPSAxMjggfCBhID4+PiA2ICYgNjMpLCBlW3IrK10gPSAxMjggfCA2MyAmIGEpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gZVxcbiAgICAgICAgICAgIH0sIGEuYnVmMmJpbnN0cmluZyA9IGZ1bmN0aW9uKHQpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGQodCwgdC5sZW5ndGgpXFxuICAgICAgICAgICAgfSwgYS5iaW5zdHJpbmcyYnVmID0gZnVuY3Rpb24odCkge1xcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBlID0gbmV3IGwuQnVmOCh0Lmxlbmd0aCksIGEgPSAwLCBpID0gZS5sZW5ndGg7IGEgPCBpOyBhKyspIGVbYV0gPSB0LmNoYXJDb2RlQXQoYSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBlXFxuICAgICAgICAgICAgfSwgYS5idWYyc3RyaW5nID0gZnVuY3Rpb24odCwgZSkge1xcbiAgICAgICAgICAgICAgICB2YXIgYSwgaSwgbiwgciwgcyA9IGUgfHwgdC5sZW5ndGgsXFxuICAgICAgICAgICAgICAgICAgICBvID0gbmV3IEFycmF5KDIgKiBzKTtcXG4gICAgICAgICAgICAgICAgZm9yIChhID0gaSA9IDA7IGEgPCBzOylcXG4gICAgICAgICAgICAgICAgICAgIGlmICgobiA9IHRbYSsrXSkgPCAxMjgpIG9baSsrXSA9IG47XFxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICg0IDwgKHIgPSBoW25dKSkgb1tpKytdID0gNjU1MzMsIGEgKz0gciAtIDE7XFxuICAgICAgICAgICAgICAgIGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgZm9yIChuICY9IDIgPT09IHIgPyAzMSA6IDMgPT09IHIgPyAxNSA6IDc7IDEgPCByICYmIGEgPCBzOykgbiA9IG4gPDwgNiB8IDYzICYgdFthKytdLCByLS07XFxuICAgICAgICAgICAgICAgICAgICAxIDwgciA/IG9baSsrXSA9IDY1NTMzIDogbiA8IDY1NTM2ID8gb1tpKytdID0gbiA6IChuIC09IDY1NTM2LCBvW2krK10gPSA1NTI5NiB8IG4gPj4gMTAgJiAxMDIzLCBvW2krK10gPSA1NjMyMCB8IDEwMjMgJiBuKVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiBkKG8sIGkpXFxuICAgICAgICAgICAgfSwgYS51dGY4Ym9yZGVyID0gZnVuY3Rpb24odCwgZSkge1xcbiAgICAgICAgICAgICAgICB2YXIgYTtcXG4gICAgICAgICAgICAgICAgZm9yICgoZSA9IGUgfHwgdC5sZW5ndGgpID4gdC5sZW5ndGggJiYgKGUgPSB0Lmxlbmd0aCksIGEgPSBlIC0gMTsgMCA8PSBhICYmIDEyOCA9PSAoMTkyICYgdFthXSk7KSBhLS07XFxuICAgICAgICAgICAgICAgIHJldHVybiBhIDwgMCA/IGUgOiAwID09PSBhID8gZSA6IGEgKyBoW3RbYV1dID4gZSA/IGEgOiBlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIFxcXCIuL2NvbW1vblxcXCI6IDNcXG4gICAgICAgIH1dLFxcbiAgICAgICAgNTogW2Z1bmN0aW9uKHQsIGUsIGEpIHtcXG4gICAgICAgICAgICBcXFwidXNlIHN0cmljdFxcXCI7XFxuICAgICAgICAgICAgZS5leHBvcnRzID0gZnVuY3Rpb24odCwgZSwgYSwgaSkge1xcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBuID0gNjU1MzUgJiB0IHwgMCwgciA9IHQgPj4+IDE2ICYgNjU1MzUgfCAwLCBzID0gMDsgMCAhPT0gYTspIHtcXG4gICAgICAgICAgICAgICAgICAgIGZvciAoYSAtPSBzID0gMmUzIDwgYSA/IDJlMyA6IGE7IHIgPSByICsgKG4gPSBuICsgZVtpKytdIHwgMCkgfCAwLCAtLXM7KTtcXG4gICAgICAgICAgICAgICAgICAgIG4gJT0gNjU1MjEsIHIgJT0gNjU1MjFcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gbiB8IHIgPDwgMTYgfCAwXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwge31dLFxcbiAgICAgICAgNjogW2Z1bmN0aW9uKHQsIGUsIGEpIHtcXG4gICAgICAgICAgICBcXFwidXNlIHN0cmljdFxcXCI7XFxuICAgICAgICAgICAgZS5leHBvcnRzID0ge1xcbiAgICAgICAgICAgICAgICBaX05PX0ZMVVNIOiAwLFxcbiAgICAgICAgICAgICAgICBaX1BBUlRJQUxfRkxVU0g6IDEsXFxuICAgICAgICAgICAgICAgIFpfU1lOQ19GTFVTSDogMixcXG4gICAgICAgICAgICAgICAgWl9GVUxMX0ZMVVNIOiAzLFxcbiAgICAgICAgICAgICAgICBaX0ZJTklTSDogNCxcXG4gICAgICAgICAgICAgICAgWl9CTE9DSzogNSxcXG4gICAgICAgICAgICAgICAgWl9UUkVFUzogNixcXG4gICAgICAgICAgICAgICAgWl9PSzogMCxcXG4gICAgICAgICAgICAgICAgWl9TVFJFQU1fRU5EOiAxLFxcbiAgICAgICAgICAgICAgICBaX05FRURfRElDVDogMixcXG4gICAgICAgICAgICAgICAgWl9FUlJOTzogLTEsXFxuICAgICAgICAgICAgICAgIFpfU1RSRUFNX0VSUk9SOiAtMixcXG4gICAgICAgICAgICAgICAgWl9EQVRBX0VSUk9SOiAtMyxcXG4gICAgICAgICAgICAgICAgWl9CVUZfRVJST1I6IC01LFxcbiAgICAgICAgICAgICAgICBaX05PX0NPTVBSRVNTSU9OOiAwLFxcbiAgICAgICAgICAgICAgICBaX0JFU1RfU1BFRUQ6IDEsXFxuICAgICAgICAgICAgICAgIFpfQkVTVF9DT01QUkVTU0lPTjogOSxcXG4gICAgICAgICAgICAgICAgWl9ERUZBVUxUX0NPTVBSRVNTSU9OOiAtMSxcXG4gICAgICAgICAgICAgICAgWl9GSUxURVJFRDogMSxcXG4gICAgICAgICAgICAgICAgWl9IVUZGTUFOX09OTFk6IDIsXFxuICAgICAgICAgICAgICAgIFpfUkxFOiAzLFxcbiAgICAgICAgICAgICAgICBaX0ZJWEVEOiA0LFxcbiAgICAgICAgICAgICAgICBaX0RFRkFVTFRfU1RSQVRFR1k6IDAsXFxuICAgICAgICAgICAgICAgIFpfQklOQVJZOiAwLFxcbiAgICAgICAgICAgICAgICBaX1RFWFQ6IDEsXFxuICAgICAgICAgICAgICAgIFpfVU5LTk9XTjogMixcXG4gICAgICAgICAgICAgICAgWl9ERUZMQVRFRDogOFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIHt9XSxcXG4gICAgICAgIDc6IFtmdW5jdGlvbih0LCBlLCBhKSB7XFxuICAgICAgICAgICAgXFxcInVzZSBzdHJpY3RcXFwiO1xcbiAgICAgICAgICAgIHZhciBvID0gZnVuY3Rpb24oKSB7XFxuICAgICAgICAgICAgICAgIGZvciAodmFyIHQsIGUgPSBbXSwgYSA9IDA7IGEgPCAyNTY7IGErKykge1xcbiAgICAgICAgICAgICAgICAgICAgdCA9IGE7XFxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykgdCA9IDEgJiB0ID8gMzk4ODI5MjM4NCBeIHQgPj4+IDEgOiB0ID4+PiAxO1xcbiAgICAgICAgICAgICAgICAgICAgZVthXSA9IHRcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gZVxcbiAgICAgICAgICAgIH0oKTtcXG4gICAgICAgICAgICBlLmV4cG9ydHMgPSBmdW5jdGlvbih0LCBlLCBhLCBpKSB7XFxuICAgICAgICAgICAgICAgIHZhciBuID0gbyxcXG4gICAgICAgICAgICAgICAgICAgIHIgPSBpICsgYTtcXG4gICAgICAgICAgICAgICAgdCBePSAtMTtcXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgcyA9IGk7IHMgPCByOyBzKyspIHQgPSB0ID4+PiA4IF4gblsyNTUgJiAodCBeIGVbc10pXTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xIF4gdFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIHt9XSxcXG4gICAgICAgIDg6IFtmdW5jdGlvbih0LCBlLCBhKSB7XFxuICAgICAgICAgICAgXFxcInVzZSBzdHJpY3RcXFwiO1xcbiAgICAgICAgICAgIHZhciBsLCBfID0gdChcXFwiLi4vdXRpbHMvY29tbW9uXFxcIiksXFxuICAgICAgICAgICAgICAgIGggPSB0KFxcXCIuL3RyZWVzXFxcIiksXFxuICAgICAgICAgICAgICAgIHUgPSB0KFxcXCIuL2FkbGVyMzJcXFwiKSxcXG4gICAgICAgICAgICAgICAgYyA9IHQoXFxcIi4vY3JjMzJcXFwiKSxcXG4gICAgICAgICAgICAgICAgaSA9IHQoXFxcIi4vbWVzc2FnZXNcXFwiKSxcXG4gICAgICAgICAgICAgICAgZCA9IDAsXFxuICAgICAgICAgICAgICAgIGYgPSA0LFxcbiAgICAgICAgICAgICAgICBiID0gMCxcXG4gICAgICAgICAgICAgICAgZyA9IC0yLFxcbiAgICAgICAgICAgICAgICBtID0gLTEsXFxuICAgICAgICAgICAgICAgIHcgPSA0LFxcbiAgICAgICAgICAgICAgICBuID0gMixcXG4gICAgICAgICAgICAgICAgcCA9IDgsXFxuICAgICAgICAgICAgICAgIHYgPSA5LFxcbiAgICAgICAgICAgICAgICByID0gMjg2LFxcbiAgICAgICAgICAgICAgICBzID0gMzAsXFxuICAgICAgICAgICAgICAgIG8gPSAxOSxcXG4gICAgICAgICAgICAgICAgayA9IDIgKiByICsgMSxcXG4gICAgICAgICAgICAgICAgeSA9IDE1LFxcbiAgICAgICAgICAgICAgICB4ID0gMyxcXG4gICAgICAgICAgICAgICAgeiA9IDI1OCxcXG4gICAgICAgICAgICAgICAgQiA9IHogKyB4ICsgMSxcXG4gICAgICAgICAgICAgICAgUyA9IDQyLFxcbiAgICAgICAgICAgICAgICBFID0gMTEzLFxcbiAgICAgICAgICAgICAgICBBID0gMSxcXG4gICAgICAgICAgICAgICAgWiA9IDIsXFxuICAgICAgICAgICAgICAgIFIgPSAzLFxcbiAgICAgICAgICAgICAgICBDID0gNDtcXG5cXG4gICAgICAgICAgICBmdW5jdGlvbiBOKHQsIGUpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHQubXNnID0gaVtlXSwgZVxcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBmdW5jdGlvbiBPKHQpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICh0IDw8IDEpIC0gKDQgPCB0ID8gOSA6IDApXFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIGZ1bmN0aW9uIEQodCkge1xcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBlID0gdC5sZW5ndGg7IDAgPD0gLS1lOykgdFtlXSA9IDBcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgZnVuY3Rpb24gSSh0KSB7XFxuICAgICAgICAgICAgICAgIHZhciBlID0gdC5zdGF0ZSxcXG4gICAgICAgICAgICAgICAgICAgIGEgPSBlLnBlbmRpbmc7XFxuICAgICAgICAgICAgICAgIGEgPiB0LmF2YWlsX291dCAmJiAoYSA9IHQuYXZhaWxfb3V0KSwgMCAhPT0gYSAmJiAoXy5hcnJheVNldCh0Lm91dHB1dCwgZS5wZW5kaW5nX2J1ZiwgZS5wZW5kaW5nX291dCwgYSwgdC5uZXh0X291dCksIHQubmV4dF9vdXQgKz0gYSwgZS5wZW5kaW5nX291dCArPSBhLCB0LnRvdGFsX291dCArPSBhLCB0LmF2YWlsX291dCAtPSBhLCBlLnBlbmRpbmcgLT0gYSwgMCA9PT0gZS5wZW5kaW5nICYmIChlLnBlbmRpbmdfb3V0ID0gMCkpXFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIGZ1bmN0aW9uIFUodCwgZSkge1xcbiAgICAgICAgICAgICAgICBoLl90cl9mbHVzaF9ibG9jayh0LCAwIDw9IHQuYmxvY2tfc3RhcnQgPyB0LmJsb2NrX3N0YXJ0IDogLTEsIHQuc3Ryc3RhcnQgLSB0LmJsb2NrX3N0YXJ0LCBlKSwgdC5ibG9ja19zdGFydCA9IHQuc3Ryc3RhcnQsIEkodC5zdHJtKVxcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBmdW5jdGlvbiBUKHQsIGUpIHtcXG4gICAgICAgICAgICAgICAgdC5wZW5kaW5nX2J1Zlt0LnBlbmRpbmcrK10gPSBlXFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIGZ1bmN0aW9uIEYodCwgZSkge1xcbiAgICAgICAgICAgICAgICB0LnBlbmRpbmdfYnVmW3QucGVuZGluZysrXSA9IGUgPj4+IDggJiAyNTUsIHQucGVuZGluZ19idWZbdC5wZW5kaW5nKytdID0gMjU1ICYgZVxcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBmdW5jdGlvbiBMKHQsIGUpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGEsIGksIG4gPSB0Lm1heF9jaGFpbl9sZW5ndGgsXFxuICAgICAgICAgICAgICAgICAgICByID0gdC5zdHJzdGFydCxcXG4gICAgICAgICAgICAgICAgICAgIHMgPSB0LnByZXZfbGVuZ3RoLFxcbiAgICAgICAgICAgICAgICAgICAgbyA9IHQubmljZV9tYXRjaCxcXG4gICAgICAgICAgICAgICAgICAgIGwgPSB0LnN0cnN0YXJ0ID4gdC53X3NpemUgLSBCID8gdC5zdHJzdGFydCAtICh0Lndfc2l6ZSAtIEIpIDogMCxcXG4gICAgICAgICAgICAgICAgICAgIGggPSB0LndpbmRvdyxcXG4gICAgICAgICAgICAgICAgICAgIGQgPSB0LndfbWFzayxcXG4gICAgICAgICAgICAgICAgICAgIGYgPSB0LnByZXYsXFxuICAgICAgICAgICAgICAgICAgICBfID0gdC5zdHJzdGFydCArIHosXFxuICAgICAgICAgICAgICAgICAgICB1ID0gaFtyICsgcyAtIDFdLFxcbiAgICAgICAgICAgICAgICAgICAgYyA9IGhbciArIHNdO1xcbiAgICAgICAgICAgICAgICB0LnByZXZfbGVuZ3RoID49IHQuZ29vZF9tYXRjaCAmJiAobiA+Pj0gMiksIG8gPiB0Lmxvb2thaGVhZCAmJiAobyA9IHQubG9va2FoZWFkKTtcXG4gICAgICAgICAgICAgICAgZG8ge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhbKGEgPSBlKSArIHNdID09PSBjICYmIGhbYSArIHMgLSAxXSA9PT0gdSAmJiBoW2FdID09PSBoW3JdICYmIGhbKythXSA9PT0gaFtyICsgMV0pIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByICs9IDIsIGErKztcXG4gICAgICAgICAgICAgICAgICAgICAgICBkbyB7fSB3aGlsZSAoaFsrK3JdID09PSBoWysrYV0gJiYgaFsrK3JdID09PSBoWysrYV0gJiYgaFsrK3JdID09PSBoWysrYV0gJiYgaFsrK3JdID09PSBoWysrYV0gJiYgaFsrK3JdID09PSBoWysrYV0gJiYgaFsrK3JdID09PSBoWysrYV0gJiYgaFsrK3JdID09PSBoWysrYV0gJiYgaFsrK3JdID09PSBoWysrYV0gJiYgciA8IF8pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID0geiAtIChfIC0gciksIHIgPSBfIC0geiwgcyA8IGkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQubWF0Y2hfc3RhcnQgPSBlLCBvIDw9IChzID0gaSkpIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gaFtyICsgcyAtIDFdLCBjID0gaFtyICsgc11cXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0gd2hpbGUgKChlID0gZltlICYgZF0pID4gbCAmJiAwICE9IC0tbik7XFxuICAgICAgICAgICAgICAgIHJldHVybiBzIDw9IHQubG9va2FoZWFkID8gcyA6IHQubG9va2FoZWFkXFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIGZ1bmN0aW9uIEgodCkge1xcbiAgICAgICAgICAgICAgICB2YXIgZSwgYSwgaSwgbiwgciwgcywgbywgbCwgaCwgZCwgZiA9IHQud19zaXplO1xcbiAgICAgICAgICAgICAgICBkbyB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAobiA9IHQud2luZG93X3NpemUgLSB0Lmxvb2thaGVhZCAtIHQuc3Ryc3RhcnQsIHQuc3Ryc3RhcnQgPj0gZiArIChmIC0gQikpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKF8uYXJyYXlTZXQodC53aW5kb3csIHQud2luZG93LCBmLCBmLCAwKSwgdC5tYXRjaF9zdGFydCAtPSBmLCB0LnN0cnN0YXJ0IC09IGYsIHQuYmxvY2tfc3RhcnQgLT0gZiwgZSA9IGEgPSB0Lmhhc2hfc2l6ZTsgaSA9IHQuaGVhZFstLWVdLCB0LmhlYWRbZV0gPSBmIDw9IGkgPyBpIC0gZiA6IDAsIC0tYTspO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZSA9IGEgPSBmOyBpID0gdC5wcmV2Wy0tZV0sIHQucHJldltlXSA9IGYgPD0gaSA/IGkgLSBmIDogMCwgLS1hOyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbiArPSBmXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PT0gdC5zdHJtLmF2YWlsX2luKSBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGlmIChzID0gdC5zdHJtLCBvID0gdC53aW5kb3csIGwgPSB0LnN0cnN0YXJ0ICsgdC5sb29rYWhlYWQsIGggPSBuLCBkID0gdm9pZCAwLCBkID0gcy5hdmFpbF9pbiwgaCA8IGQgJiYgKGQgPSBoKSwgYSA9IDAgPT09IGQgPyAwIDogKHMuYXZhaWxfaW4gLT0gZCwgXy5hcnJheVNldChvLCBzLmlucHV0LCBzLm5leHRfaW4sIGQsIGwpLCAxID09PSBzLnN0YXRlLndyYXAgPyBzLmFkbGVyID0gdShzLmFkbGVyLCBvLCBkLCBsKSA6IDIgPT09IHMuc3RhdGUud3JhcCAmJiAocy5hZGxlciA9IGMocy5hZGxlciwgbywgZCwgbCkpLCBzLm5leHRfaW4gKz0gZCwgcy50b3RhbF9pbiArPSBkLCBkKSwgdC5sb29rYWhlYWQgKz0gYSwgdC5sb29rYWhlYWQgKyB0Lmluc2VydCA+PSB4KVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAociA9IHQuc3Ryc3RhcnQgLSB0Lmluc2VydCwgdC5pbnNfaCA9IHQud2luZG93W3JdLCB0Lmluc19oID0gKHQuaW5zX2ggPDwgdC5oYXNoX3NoaWZ0IF4gdC53aW5kb3dbciArIDFdKSAmIHQuaGFzaF9tYXNrOyB0Lmluc2VydCAmJiAodC5pbnNfaCA9ICh0Lmluc19oIDw8IHQuaGFzaF9zaGlmdCBeIHQud2luZG93W3IgKyB4IC0gMV0pICYgdC5oYXNoX21hc2ssIHQucHJldltyICYgdC53X21hc2tdID0gdC5oZWFkW3QuaW5zX2hdLCB0LmhlYWRbdC5pbnNfaF0gPSByLCByKyssIHQuaW5zZXJ0LS0sICEodC5sb29rYWhlYWQgKyB0Lmluc2VydCA8IHgpKTspO1xcbiAgICAgICAgICAgICAgICB9IHdoaWxlICh0Lmxvb2thaGVhZCA8IEIgJiYgMCAhPT0gdC5zdHJtLmF2YWlsX2luKVxcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBmdW5jdGlvbiBqKHQsIGUpIHtcXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgYSwgaTs7KSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAodC5sb29rYWhlYWQgPCBCKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEgodCksIHQubG9va2FoZWFkIDwgQiAmJiBlID09PSBkKSByZXR1cm4gQTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PT0gdC5sb29rYWhlYWQpIGJyZWFrXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBpZiAoYSA9IDAsIHQubG9va2FoZWFkID49IHggJiYgKHQuaW5zX2ggPSAodC5pbnNfaCA8PCB0Lmhhc2hfc2hpZnQgXiB0LndpbmRvd1t0LnN0cnN0YXJ0ICsgeCAtIDFdKSAmIHQuaGFzaF9tYXNrLCBhID0gdC5wcmV2W3Quc3Ryc3RhcnQgJiB0LndfbWFza10gPSB0LmhlYWRbdC5pbnNfaF0sIHQuaGVhZFt0Lmluc19oXSA9IHQuc3Ryc3RhcnQpLCAwICE9PSBhICYmIHQuc3Ryc3RhcnQgLSBhIDw9IHQud19zaXplIC0gQiAmJiAodC5tYXRjaF9sZW5ndGggPSBMKHQsIGEpKSwgdC5tYXRjaF9sZW5ndGggPj0geClcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9IGguX3RyX3RhbGx5KHQsIHQuc3Ryc3RhcnQgLSB0Lm1hdGNoX3N0YXJ0LCB0Lm1hdGNoX2xlbmd0aCAtIHgpLCB0Lmxvb2thaGVhZCAtPSB0Lm1hdGNoX2xlbmd0aCwgdC5tYXRjaF9sZW5ndGggPD0gdC5tYXhfbGF6eV9tYXRjaCAmJiB0Lmxvb2thaGVhZCA+PSB4KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodC5tYXRjaF9sZW5ndGgtLTsgdC5zdHJzdGFydCsrLCB0Lmluc19oID0gKHQuaW5zX2ggPDwgdC5oYXNoX3NoaWZ0IF4gdC53aW5kb3dbdC5zdHJzdGFydCArIHggLSAxXSkgJiB0Lmhhc2hfbWFzaywgYSA9IHQucHJldlt0LnN0cnN0YXJ0ICYgdC53X21hc2tdID0gdC5oZWFkW3QuaW5zX2hdLCB0LmhlYWRbdC5pbnNfaF0gPSB0LnN0cnN0YXJ0LCAwICE9IC0tdC5tYXRjaF9sZW5ndGg7KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5zdHJzdGFydCsrXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHQuc3Ryc3RhcnQgKz0gdC5tYXRjaF9sZW5ndGgsIHQubWF0Y2hfbGVuZ3RoID0gMCwgdC5pbnNfaCA9IHQud2luZG93W3Quc3Ryc3RhcnRdLCB0Lmluc19oID0gKHQuaW5zX2ggPDwgdC5oYXNoX3NoaWZ0IF4gdC53aW5kb3dbdC5zdHJzdGFydCArIDFdKSAmIHQuaGFzaF9tYXNrO1xcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpID0gaC5fdHJfdGFsbHkodCwgMCwgdC53aW5kb3dbdC5zdHJzdGFydF0pLCB0Lmxvb2thaGVhZC0tLCB0LnN0cnN0YXJ0Kys7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoaSAmJiAoVSh0LCAhMSksIDAgPT09IHQuc3RybS5hdmFpbF9vdXQpKSByZXR1cm4gQVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiB0Lmluc2VydCA9IHQuc3Ryc3RhcnQgPCB4IC0gMSA/IHQuc3Ryc3RhcnQgOiB4IC0gMSwgZSA9PT0gZiA/IChVKHQsICEwKSwgMCA9PT0gdC5zdHJtLmF2YWlsX291dCA/IFIgOiBDKSA6IHQubGFzdF9saXQgJiYgKFUodCwgITEpLCAwID09PSB0LnN0cm0uYXZhaWxfb3V0KSA/IEEgOiBaXFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIGZ1bmN0aW9uIEsodCwgZSkge1xcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBhLCBpLCBuOzspIHtcXG4gICAgICAgICAgICAgICAgICAgIGlmICh0Lmxvb2thaGVhZCA8IEIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoSCh0KSwgdC5sb29rYWhlYWQgPCBCICYmIGUgPT09IGQpIHJldHVybiBBO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgwID09PSB0Lmxvb2thaGVhZCkgYnJlYWtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGlmIChhID0gMCwgdC5sb29rYWhlYWQgPj0geCAmJiAodC5pbnNfaCA9ICh0Lmluc19oIDw8IHQuaGFzaF9zaGlmdCBeIHQud2luZG93W3Quc3Ryc3RhcnQgKyB4IC0gMV0pICYgdC5oYXNoX21hc2ssIGEgPSB0LnByZXZbdC5zdHJzdGFydCAmIHQud19tYXNrXSA9IHQuaGVhZFt0Lmluc19oXSwgdC5oZWFkW3QuaW5zX2hdID0gdC5zdHJzdGFydCksIHQucHJldl9sZW5ndGggPSB0Lm1hdGNoX2xlbmd0aCwgdC5wcmV2X21hdGNoID0gdC5tYXRjaF9zdGFydCwgdC5tYXRjaF9sZW5ndGggPSB4IC0gMSwgMCAhPT0gYSAmJiB0LnByZXZfbGVuZ3RoIDwgdC5tYXhfbGF6eV9tYXRjaCAmJiB0LnN0cnN0YXJ0IC0gYSA8PSB0Lndfc2l6ZSAtIEIgJiYgKHQubWF0Y2hfbGVuZ3RoID0gTCh0LCBhKSwgdC5tYXRjaF9sZW5ndGggPD0gNSAmJiAoMSA9PT0gdC5zdHJhdGVneSB8fCB0Lm1hdGNoX2xlbmd0aCA9PT0geCAmJiA0MDk2IDwgdC5zdHJzdGFydCAtIHQubWF0Y2hfc3RhcnQpICYmICh0Lm1hdGNoX2xlbmd0aCA9IHggLSAxKSksIHQucHJldl9sZW5ndGggPj0geCAmJiB0Lm1hdGNoX2xlbmd0aCA8PSB0LnByZXZfbGVuZ3RoKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChuID0gdC5zdHJzdGFydCArIHQubG9va2FoZWFkIC0geCwgaSA9IGguX3RyX3RhbGx5KHQsIHQuc3Ryc3RhcnQgLSAxIC0gdC5wcmV2X21hdGNoLCB0LnByZXZfbGVuZ3RoIC0geCksIHQubG9va2FoZWFkIC09IHQucHJldl9sZW5ndGggLSAxLCB0LnByZXZfbGVuZ3RoIC09IDI7ICsrdC5zdHJzdGFydCA8PSBuICYmICh0Lmluc19oID0gKHQuaW5zX2ggPDwgdC5oYXNoX3NoaWZ0IF4gdC53aW5kb3dbdC5zdHJzdGFydCArIHggLSAxXSkgJiB0Lmhhc2hfbWFzaywgYSA9IHQucHJldlt0LnN0cnN0YXJ0ICYgdC53X21hc2tdID0gdC5oZWFkW3QuaW5zX2hdLCB0LmhlYWRbdC5pbnNfaF0gPSB0LnN0cnN0YXJ0KSwgMCAhPSAtLXQucHJldl9sZW5ndGg7KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodC5tYXRjaF9hdmFpbGFibGUgPSAwLCB0Lm1hdGNoX2xlbmd0aCA9IHggLSAxLCB0LnN0cnN0YXJ0KyssIGkgJiYgKFUodCwgITEpLCAwID09PSB0LnN0cm0uYXZhaWxfb3V0KSkgcmV0dXJuIEFcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodC5tYXRjaF9hdmFpbGFibGUpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGkgPSBoLl90cl90YWxseSh0LCAwLCB0LndpbmRvd1t0LnN0cnN0YXJ0IC0gMV0pKSAmJiBVKHQsICExKSwgdC5zdHJzdGFydCsrLCB0Lmxvb2thaGVhZC0tLCAwID09PSB0LnN0cm0uYXZhaWxfb3V0KSByZXR1cm4gQVxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHQubWF0Y2hfYXZhaWxhYmxlID0gMSwgdC5zdHJzdGFydCsrLCB0Lmxvb2thaGVhZC0tXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIHQubWF0Y2hfYXZhaWxhYmxlICYmIChpID0gaC5fdHJfdGFsbHkodCwgMCwgdC53aW5kb3dbdC5zdHJzdGFydCAtIDFdKSwgdC5tYXRjaF9hdmFpbGFibGUgPSAwKSwgdC5pbnNlcnQgPSB0LnN0cnN0YXJ0IDwgeCAtIDEgPyB0LnN0cnN0YXJ0IDogeCAtIDEsIGUgPT09IGYgPyAoVSh0LCAhMCksIDAgPT09IHQuc3RybS5hdmFpbF9vdXQgPyBSIDogQykgOiB0Lmxhc3RfbGl0ICYmIChVKHQsICExKSwgMCA9PT0gdC5zdHJtLmF2YWlsX291dCkgPyBBIDogWlxcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBmdW5jdGlvbiBNKHQsIGUsIGEsIGksIG4pIHtcXG4gICAgICAgICAgICAgICAgdGhpcy5nb29kX2xlbmd0aCA9IHQsIHRoaXMubWF4X2xhenkgPSBlLCB0aGlzLm5pY2VfbGVuZ3RoID0gYSwgdGhpcy5tYXhfY2hhaW4gPSBpLCB0aGlzLmZ1bmMgPSBuXFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIGZ1bmN0aW9uIFAoKSB7XFxuICAgICAgICAgICAgICAgIHRoaXMuc3RybSA9IG51bGwsIHRoaXMuc3RhdHVzID0gMCwgdGhpcy5wZW5kaW5nX2J1ZiA9IG51bGwsIHRoaXMucGVuZGluZ19idWZfc2l6ZSA9IDAsIHRoaXMucGVuZGluZ19vdXQgPSAwLCB0aGlzLnBlbmRpbmcgPSAwLCB0aGlzLndyYXAgPSAwLCB0aGlzLmd6aGVhZCA9IG51bGwsIHRoaXMuZ3ppbmRleCA9IDAsIHRoaXMubWV0aG9kID0gcCwgdGhpcy5sYXN0X2ZsdXNoID0gLTEsIHRoaXMud19zaXplID0gMCwgdGhpcy53X2JpdHMgPSAwLCB0aGlzLndfbWFzayA9IDAsIHRoaXMud2luZG93ID0gbnVsbCwgdGhpcy53aW5kb3dfc2l6ZSA9IDAsIHRoaXMucHJldiA9IG51bGwsIHRoaXMuaGVhZCA9IG51bGwsIHRoaXMuaW5zX2ggPSAwLCB0aGlzLmhhc2hfc2l6ZSA9IDAsIHRoaXMuaGFzaF9iaXRzID0gMCwgdGhpcy5oYXNoX21hc2sgPSAwLCB0aGlzLmhhc2hfc2hpZnQgPSAwLCB0aGlzLmJsb2NrX3N0YXJ0ID0gMCwgdGhpcy5tYXRjaF9sZW5ndGggPSAwLCB0aGlzLnByZXZfbWF0Y2ggPSAwLCB0aGlzLm1hdGNoX2F2YWlsYWJsZSA9IDAsIHRoaXMuc3Ryc3RhcnQgPSAwLCB0aGlzLm1hdGNoX3N0YXJ0ID0gMCwgdGhpcy5sb29rYWhlYWQgPSAwLCB0aGlzLnByZXZfbGVuZ3RoID0gMCwgdGhpcy5tYXhfY2hhaW5fbGVuZ3RoID0gMCwgdGhpcy5tYXhfbGF6eV9tYXRjaCA9IDAsIHRoaXMubGV2ZWwgPSAwLCB0aGlzLnN0cmF0ZWd5ID0gMCwgdGhpcy5nb29kX21hdGNoID0gMCwgdGhpcy5uaWNlX21hdGNoID0gMCwgdGhpcy5keW5fbHRyZWUgPSBuZXcgXy5CdWYxNigyICogayksIHRoaXMuZHluX2R0cmVlID0gbmV3IF8uQnVmMTYoMiAqICgyICogcyArIDEpKSwgdGhpcy5ibF90cmVlID0gbmV3IF8uQnVmMTYoMiAqICgyICogbyArIDEpKSwgRCh0aGlzLmR5bl9sdHJlZSksIEQodGhpcy5keW5fZHRyZWUpLCBEKHRoaXMuYmxfdHJlZSksIHRoaXMubF9kZXNjID0gbnVsbCwgdGhpcy5kX2Rlc2MgPSBudWxsLCB0aGlzLmJsX2Rlc2MgPSBudWxsLCB0aGlzLmJsX2NvdW50ID0gbmV3IF8uQnVmMTYoeSArIDEpLCB0aGlzLmhlYXAgPSBuZXcgXy5CdWYxNigyICogciArIDEpLCBEKHRoaXMuaGVhcCksIHRoaXMuaGVhcF9sZW4gPSAwLCB0aGlzLmhlYXBfbWF4ID0gMCwgdGhpcy5kZXB0aCA9IG5ldyBfLkJ1ZjE2KDIgKiByICsgMSksIEQodGhpcy5kZXB0aCksIHRoaXMubF9idWYgPSAwLCB0aGlzLmxpdF9idWZzaXplID0gMCwgdGhpcy5sYXN0X2xpdCA9IDAsIHRoaXMuZF9idWYgPSAwLCB0aGlzLm9wdF9sZW4gPSAwLCB0aGlzLnN0YXRpY19sZW4gPSAwLCB0aGlzLm1hdGNoZXMgPSAwLCB0aGlzLmluc2VydCA9IDAsIHRoaXMuYmlfYnVmID0gMCwgdGhpcy5iaV92YWxpZCA9IDBcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgZnVuY3Rpb24gWSh0KSB7XFxuICAgICAgICAgICAgICAgIHZhciBlO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdCAmJiB0LnN0YXRlID8gKHQudG90YWxfaW4gPSB0LnRvdGFsX291dCA9IDAsIHQuZGF0YV90eXBlID0gbiwgKGUgPSB0LnN0YXRlKS5wZW5kaW5nID0gMCwgZS5wZW5kaW5nX291dCA9IDAsIGUud3JhcCA8IDAgJiYgKGUud3JhcCA9IC1lLndyYXApLCBlLnN0YXR1cyA9IGUud3JhcCA/IFMgOiBFLCB0LmFkbGVyID0gMiA9PT0gZS53cmFwID8gMCA6IDEsIGUubGFzdF9mbHVzaCA9IGQsIGguX3RyX2luaXQoZSksIGIpIDogTih0LCBnKVxcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBmdW5jdGlvbiBxKHQpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGUsIGEgPSBZKHQpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gYSA9PT0gYiAmJiAoKGUgPSB0LnN0YXRlKS53aW5kb3dfc2l6ZSA9IDIgKiBlLndfc2l6ZSwgRChlLmhlYWQpLCBlLm1heF9sYXp5X21hdGNoID0gbFtlLmxldmVsXS5tYXhfbGF6eSwgZS5nb29kX21hdGNoID0gbFtlLmxldmVsXS5nb29kX2xlbmd0aCwgZS5uaWNlX21hdGNoID0gbFtlLmxldmVsXS5uaWNlX2xlbmd0aCwgZS5tYXhfY2hhaW5fbGVuZ3RoID0gbFtlLmxldmVsXS5tYXhfY2hhaW4sIGUuc3Ryc3RhcnQgPSAwLCBlLmJsb2NrX3N0YXJ0ID0gMCwgZS5sb29rYWhlYWQgPSAwLCBlLmluc2VydCA9IDAsIGUubWF0Y2hfbGVuZ3RoID0gZS5wcmV2X2xlbmd0aCA9IHggLSAxLCBlLm1hdGNoX2F2YWlsYWJsZSA9IDAsIGUuaW5zX2ggPSAwKSwgYVxcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBmdW5jdGlvbiBHKHQsIGUsIGEsIGksIG4sIHIpIHtcXG4gICAgICAgICAgICAgICAgaWYgKCF0KSByZXR1cm4gZztcXG4gICAgICAgICAgICAgICAgdmFyIHMgPSAxO1xcbiAgICAgICAgICAgICAgICBpZiAoZSA9PT0gbSAmJiAoZSA9IDYpLCBpIDwgMCA/IChzID0gMCwgaSA9IC1pKSA6IDE1IDwgaSAmJiAocyA9IDIsIGkgLT0gMTYpLCBuIDwgMSB8fCB2IDwgbiB8fCBhICE9PSBwIHx8IGkgPCA4IHx8IDE1IDwgaSB8fCBlIDwgMCB8fCA5IDwgZSB8fCByIDwgMCB8fCB3IDwgcikgcmV0dXJuIE4odCwgZyk7XFxuICAgICAgICAgICAgICAgIDggPT09IGkgJiYgKGkgPSA5KTtcXG4gICAgICAgICAgICAgICAgdmFyIG8gPSBuZXcgUDtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICh0LnN0YXRlID0gbykuc3RybSA9IHQsIG8ud3JhcCA9IHMsIG8uZ3poZWFkID0gbnVsbCwgby53X2JpdHMgPSBpLCBvLndfc2l6ZSA9IDEgPDwgby53X2JpdHMsIG8ud19tYXNrID0gby53X3NpemUgLSAxLCBvLmhhc2hfYml0cyA9IG4gKyA3LCBvLmhhc2hfc2l6ZSA9IDEgPDwgby5oYXNoX2JpdHMsIG8uaGFzaF9tYXNrID0gby5oYXNoX3NpemUgLSAxLCBvLmhhc2hfc2hpZnQgPSB+figoby5oYXNoX2JpdHMgKyB4IC0gMSkgLyB4KSwgby53aW5kb3cgPSBuZXcgXy5CdWY4KDIgKiBvLndfc2l6ZSksIG8uaGVhZCA9IG5ldyBfLkJ1ZjE2KG8uaGFzaF9zaXplKSwgby5wcmV2ID0gbmV3IF8uQnVmMTYoby53X3NpemUpLCBvLmxpdF9idWZzaXplID0gMSA8PCBuICsgNiwgby5wZW5kaW5nX2J1Zl9zaXplID0gNCAqIG8ubGl0X2J1ZnNpemUsIG8ucGVuZGluZ19idWYgPSBuZXcgXy5CdWY4KG8ucGVuZGluZ19idWZfc2l6ZSksIG8uZF9idWYgPSAxICogby5saXRfYnVmc2l6ZSwgby5sX2J1ZiA9IDMgKiBvLmxpdF9idWZzaXplLCBvLmxldmVsID0gZSwgby5zdHJhdGVneSA9IHIsIG8ubWV0aG9kID0gYSwgcSh0KVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBsID0gW25ldyBNKDAsIDAsIDAsIDAsIGZ1bmN0aW9uKHQsIGUpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGEgPSA2NTUzNTtcXG4gICAgICAgICAgICAgICAgZm9yIChhID4gdC5wZW5kaW5nX2J1Zl9zaXplIC0gNSAmJiAoYSA9IHQucGVuZGluZ19idWZfc2l6ZSAtIDUpOzspIHtcXG4gICAgICAgICAgICAgICAgICAgIGlmICh0Lmxvb2thaGVhZCA8PSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEgodCksIDAgPT09IHQubG9va2FoZWFkICYmIGUgPT09IGQpIHJldHVybiBBO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgwID09PSB0Lmxvb2thaGVhZCkgYnJlYWtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIHQuc3Ryc3RhcnQgKz0gdC5sb29rYWhlYWQsIHQubG9va2FoZWFkID0gMDtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBpID0gdC5ibG9ja19zdGFydCArIGE7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoKDAgPT09IHQuc3Ryc3RhcnQgfHwgdC5zdHJzdGFydCA+PSBpKSAmJiAodC5sb29rYWhlYWQgPSB0LnN0cnN0YXJ0IC0gaSwgdC5zdHJzdGFydCA9IGksIFUodCwgITEpLCAwID09PSB0LnN0cm0uYXZhaWxfb3V0KSkgcmV0dXJuIEE7XFxuICAgICAgICAgICAgICAgICAgICBpZiAodC5zdHJzdGFydCAtIHQuYmxvY2tfc3RhcnQgPj0gdC53X3NpemUgLSBCICYmIChVKHQsICExKSwgMCA9PT0gdC5zdHJtLmF2YWlsX291dCkpIHJldHVybiBBXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIHQuaW5zZXJ0ID0gMCwgZSA9PT0gZiA/IChVKHQsICEwKSwgMCA9PT0gdC5zdHJtLmF2YWlsX291dCA/IFIgOiBDKSA6ICh0LnN0cnN0YXJ0ID4gdC5ibG9ja19zdGFydCAmJiAoVSh0LCAhMSksIHQuc3RybS5hdmFpbF9vdXQpLCBBKVxcbiAgICAgICAgICAgIH0pLCBuZXcgTSg0LCA0LCA4LCA0LCBqKSwgbmV3IE0oNCwgNSwgMTYsIDgsIGopLCBuZXcgTSg0LCA2LCAzMiwgMzIsIGopLCBuZXcgTSg0LCA0LCAxNiwgMTYsIEspLCBuZXcgTSg4LCAxNiwgMzIsIDMyLCBLKSwgbmV3IE0oOCwgMTYsIDEyOCwgMTI4LCBLKSwgbmV3IE0oOCwgMzIsIDEyOCwgMjU2LCBLKSwgbmV3IE0oMzIsIDEyOCwgMjU4LCAxMDI0LCBLKSwgbmV3IE0oMzIsIDI1OCwgMjU4LCA0MDk2LCBLKV0sIGEuZGVmbGF0ZUluaXQgPSBmdW5jdGlvbih0LCBlKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBHKHQsIGUsIHAsIDE1LCA4LCAwKVxcbiAgICAgICAgICAgIH0sIGEuZGVmbGF0ZUluaXQyID0gRywgYS5kZWZsYXRlUmVzZXQgPSBxLCBhLmRlZmxhdGVSZXNldEtlZXAgPSBZLCBhLmRlZmxhdGVTZXRIZWFkZXIgPSBmdW5jdGlvbih0LCBlKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiB0ICYmIHQuc3RhdGUgPyAyICE9PSB0LnN0YXRlLndyYXAgPyBnIDogKHQuc3RhdGUuZ3poZWFkID0gZSwgYikgOiBnXFxuICAgICAgICAgICAgfSwgYS5kZWZsYXRlID0gZnVuY3Rpb24odCwgZSkge1xcbiAgICAgICAgICAgICAgICB2YXIgYSwgaSwgbiwgcjtcXG4gICAgICAgICAgICAgICAgaWYgKCF0IHx8ICF0LnN0YXRlIHx8IDUgPCBlIHx8IGUgPCAwKSByZXR1cm4gdCA/IE4odCwgZykgOiBnO1xcbiAgICAgICAgICAgICAgICBpZiAoaSA9IHQuc3RhdGUsICF0Lm91dHB1dCB8fCAhdC5pbnB1dCAmJiAwICE9PSB0LmF2YWlsX2luIHx8IDY2NiA9PT0gaS5zdGF0dXMgJiYgZSAhPT0gZikgcmV0dXJuIE4odCwgMCA9PT0gdC5hdmFpbF9vdXQgPyAtNSA6IGcpO1xcbiAgICAgICAgICAgICAgICBpZiAoaS5zdHJtID0gdCwgYSA9IGkubGFzdF9mbHVzaCwgaS5sYXN0X2ZsdXNoID0gZSwgaS5zdGF0dXMgPT09IFMpXFxuICAgICAgICAgICAgICAgICAgICBpZiAoMiA9PT0gaS53cmFwKSB0LmFkbGVyID0gMCwgVChpLCAzMSksIFQoaSwgMTM5KSwgVChpLCA4KSwgaS5nemhlYWQgPyAoVChpLCAoaS5nemhlYWQudGV4dCA/IDEgOiAwKSArIChpLmd6aGVhZC5oY3JjID8gMiA6IDApICsgKGkuZ3poZWFkLmV4dHJhID8gNCA6IDApICsgKGkuZ3poZWFkLm5hbWUgPyA4IDogMCkgKyAoaS5nemhlYWQuY29tbWVudCA/IDE2IDogMCkpLCBUKGksIDI1NSAmIGkuZ3poZWFkLnRpbWUpLCBUKGksIGkuZ3poZWFkLnRpbWUgPj4gOCAmIDI1NSksIFQoaSwgaS5nemhlYWQudGltZSA+PiAxNiAmIDI1NSksIFQoaSwgaS5nemhlYWQudGltZSA+PiAyNCAmIDI1NSksIFQoaSwgOSA9PT0gaS5sZXZlbCA/IDIgOiAyIDw9IGkuc3RyYXRlZ3kgfHwgaS5sZXZlbCA8IDIgPyA0IDogMCksIFQoaSwgMjU1ICYgaS5nemhlYWQub3MpLCBpLmd6aGVhZC5leHRyYSAmJiBpLmd6aGVhZC5leHRyYS5sZW5ndGggJiYgKFQoaSwgMjU1ICYgaS5nemhlYWQuZXh0cmEubGVuZ3RoKSwgVChpLCBpLmd6aGVhZC5leHRyYS5sZW5ndGggPj4gOCAmIDI1NSkpLCBpLmd6aGVhZC5oY3JjICYmICh0LmFkbGVyID0gYyh0LmFkbGVyLCBpLnBlbmRpbmdfYnVmLCBpLnBlbmRpbmcsIDApKSwgaS5nemluZGV4ID0gMCwgaS5zdGF0dXMgPSA2OSkgOiAoVChpLCAwKSwgVChpLCAwKSwgVChpLCAwKSwgVChpLCAwKSwgVChpLCAwKSwgVChpLCA5ID09PSBpLmxldmVsID8gMiA6IDIgPD0gaS5zdHJhdGVneSB8fCBpLmxldmVsIDwgMiA/IDQgOiAwKSwgVChpLCAzKSwgaS5zdGF0dXMgPSBFKTtcXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzID0gcCArIChpLndfYml0cyAtIDggPDwgNCkgPDwgODtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzIHw9ICgyIDw9IGkuc3RyYXRlZ3kgfHwgaS5sZXZlbCA8IDIgPyAwIDogaS5sZXZlbCA8IDYgPyAxIDogNiA9PT0gaS5sZXZlbCA/IDIgOiAzKSA8PCA2LCAwICE9PSBpLnN0cnN0YXJ0ICYmIChzIHw9IDMyKSwgcyArPSAzMSAtIHMgJSAzMSwgaS5zdGF0dXMgPSBFLCBGKGksIHMpLCAwICE9PSBpLnN0cnN0YXJ0ICYmIChGKGksIHQuYWRsZXIgPj4+IDE2KSwgRihpLCA2NTUzNSAmIHQuYWRsZXIpKSwgdC5hZGxlciA9IDFcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKDY5ID09PSBpLnN0YXR1cylcXG4gICAgICAgICAgICAgICAgICAgIGlmIChpLmd6aGVhZC5leHRyYSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobiA9IGkucGVuZGluZzsgaS5nemluZGV4IDwgKDY1NTM1ICYgaS5nemhlYWQuZXh0cmEubGVuZ3RoKSAmJiAoaS5wZW5kaW5nICE9PSBpLnBlbmRpbmdfYnVmX3NpemUgfHwgKGkuZ3poZWFkLmhjcmMgJiYgaS5wZW5kaW5nID4gbiAmJiAodC5hZGxlciA9IGModC5hZGxlciwgaS5wZW5kaW5nX2J1ZiwgaS5wZW5kaW5nIC0gbiwgbikpLCBJKHQpLCBuID0gaS5wZW5kaW5nLCBpLnBlbmRpbmcgIT09IGkucGVuZGluZ19idWZfc2l6ZSkpOykgVChpLCAyNTUgJiBpLmd6aGVhZC5leHRyYVtpLmd6aW5kZXhdKSwgaS5nemluZGV4Kys7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaS5nemhlYWQuaGNyYyAmJiBpLnBlbmRpbmcgPiBuICYmICh0LmFkbGVyID0gYyh0LmFkbGVyLCBpLnBlbmRpbmdfYnVmLCBpLnBlbmRpbmcgLSBuLCBuKSksIGkuZ3ppbmRleCA9PT0gaS5nemhlYWQuZXh0cmEubGVuZ3RoICYmIChpLmd6aW5kZXggPSAwLCBpLnN0YXR1cyA9IDczKVxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGkuc3RhdHVzID0gNzM7XFxuICAgICAgICAgICAgICAgIGlmICg3MyA9PT0gaS5zdGF0dXMpXFxuICAgICAgICAgICAgICAgICAgICBpZiAoaS5nemhlYWQubmFtZSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBpLnBlbmRpbmc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZG8ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaS5wZW5kaW5nID09PSBpLnBlbmRpbmdfYnVmX3NpemUgJiYgKGkuZ3poZWFkLmhjcmMgJiYgaS5wZW5kaW5nID4gbiAmJiAodC5hZGxlciA9IGModC5hZGxlciwgaS5wZW5kaW5nX2J1ZiwgaS5wZW5kaW5nIC0gbiwgbikpLCBJKHQpLCBuID0gaS5wZW5kaW5nLCBpLnBlbmRpbmcgPT09IGkucGVuZGluZ19idWZfc2l6ZSkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSAxO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUKGksIHIgPSBpLmd6aW5kZXggPCBpLmd6aGVhZC5uYW1lLmxlbmd0aCA/IDI1NSAmIGkuZ3poZWFkLm5hbWUuY2hhckNvZGVBdChpLmd6aW5kZXgrKykgOiAwKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKDAgIT09IHIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGkuZ3poZWFkLmhjcmMgJiYgaS5wZW5kaW5nID4gbiAmJiAodC5hZGxlciA9IGModC5hZGxlciwgaS5wZW5kaW5nX2J1ZiwgaS5wZW5kaW5nIC0gbiwgbikpLCAwID09PSByICYmIChpLmd6aW5kZXggPSAwLCBpLnN0YXR1cyA9IDkxKVxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGkuc3RhdHVzID0gOTE7XFxuICAgICAgICAgICAgICAgIGlmICg5MSA9PT0gaS5zdGF0dXMpXFxuICAgICAgICAgICAgICAgICAgICBpZiAoaS5nemhlYWQuY29tbWVudCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBpLnBlbmRpbmc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZG8ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaS5wZW5kaW5nID09PSBpLnBlbmRpbmdfYnVmX3NpemUgJiYgKGkuZ3poZWFkLmhjcmMgJiYgaS5wZW5kaW5nID4gbiAmJiAodC5hZGxlciA9IGModC5hZGxlciwgaS5wZW5kaW5nX2J1ZiwgaS5wZW5kaW5nIC0gbiwgbikpLCBJKHQpLCBuID0gaS5wZW5kaW5nLCBpLnBlbmRpbmcgPT09IGkucGVuZGluZ19idWZfc2l6ZSkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSAxO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUKGksIHIgPSBpLmd6aW5kZXggPCBpLmd6aGVhZC5jb21tZW50Lmxlbmd0aCA/IDI1NSAmIGkuZ3poZWFkLmNvbW1lbnQuY2hhckNvZGVBdChpLmd6aW5kZXgrKykgOiAwKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKDAgIT09IHIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGkuZ3poZWFkLmhjcmMgJiYgaS5wZW5kaW5nID4gbiAmJiAodC5hZGxlciA9IGModC5hZGxlciwgaS5wZW5kaW5nX2J1ZiwgaS5wZW5kaW5nIC0gbiwgbikpLCAwID09PSByICYmIChpLnN0YXR1cyA9IDEwMylcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpLnN0YXR1cyA9IDEwMztcXG4gICAgICAgICAgICAgICAgaWYgKDEwMyA9PT0gaS5zdGF0dXMgJiYgKGkuZ3poZWFkLmhjcmMgPyAoaS5wZW5kaW5nICsgMiA+IGkucGVuZGluZ19idWZfc2l6ZSAmJiBJKHQpLCBpLnBlbmRpbmcgKyAyIDw9IGkucGVuZGluZ19idWZfc2l6ZSAmJiAoVChpLCAyNTUgJiB0LmFkbGVyKSwgVChpLCB0LmFkbGVyID4+IDggJiAyNTUpLCB0LmFkbGVyID0gMCwgaS5zdGF0dXMgPSBFKSkgOiBpLnN0YXR1cyA9IEUpLCAwICE9PSBpLnBlbmRpbmcpIHtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChJKHQpLCAwID09PSB0LmF2YWlsX291dCkgcmV0dXJuIGkubGFzdF9mbHVzaCA9IC0xLCBiXFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PT0gdC5hdmFpbF9pbiAmJiBPKGUpIDw9IE8oYSkgJiYgZSAhPT0gZikgcmV0dXJuIE4odCwgLTUpO1xcbiAgICAgICAgICAgICAgICBpZiAoNjY2ID09PSBpLnN0YXR1cyAmJiAwICE9PSB0LmF2YWlsX2luKSByZXR1cm4gTih0LCAtNSk7XFxuICAgICAgICAgICAgICAgIGlmICgwICE9PSB0LmF2YWlsX2luIHx8IDAgIT09IGkubG9va2FoZWFkIHx8IGUgIT09IGQgJiYgNjY2ICE9PSBpLnN0YXR1cykge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIG8gPSAyID09PSBpLnN0cmF0ZWd5ID8gZnVuY3Rpb24odCwgZSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGE7Oykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PT0gdC5sb29rYWhlYWQgJiYgKEgodCksIDAgPT09IHQubG9va2FoZWFkKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUgPT09IGQpIHJldHVybiBBO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodC5tYXRjaF9sZW5ndGggPSAwLCBhID0gaC5fdHJfdGFsbHkodCwgMCwgdC53aW5kb3dbdC5zdHJzdGFydF0pLCB0Lmxvb2thaGVhZC0tLCB0LnN0cnN0YXJ0KyssIGEgJiYgKFUodCwgITEpLCAwID09PSB0LnN0cm0uYXZhaWxfb3V0KSkgcmV0dXJuIEFcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHQuaW5zZXJ0ID0gMCwgZSA9PT0gZiA/IChVKHQsICEwKSwgMCA9PT0gdC5zdHJtLmF2YWlsX291dCA/IFIgOiBDKSA6IHQubGFzdF9saXQgJiYgKFUodCwgITEpLCAwID09PSB0LnN0cm0uYXZhaWxfb3V0KSA/IEEgOiBaXFxuICAgICAgICAgICAgICAgICAgICB9KGksIGUpIDogMyA9PT0gaS5zdHJhdGVneSA/IGZ1bmN0aW9uKHQsIGUpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBhLCBpLCBuLCByLCBzID0gdC53aW5kb3c7Oykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodC5sb29rYWhlYWQgPD0geikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEgodCksIHQubG9va2FoZWFkIDw9IHogJiYgZSA9PT0gZCkgcmV0dXJuIEE7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PT0gdC5sb29rYWhlYWQpIGJyZWFrXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQubWF0Y2hfbGVuZ3RoID0gMCwgdC5sb29rYWhlYWQgPj0geCAmJiAwIDwgdC5zdHJzdGFydCAmJiAoaSA9IHNbbiA9IHQuc3Ryc3RhcnQgLSAxXSkgPT09IHNbKytuXSAmJiBpID09PSBzWysrbl0gJiYgaSA9PT0gc1srK25dKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gdC5zdHJzdGFydCArIHo7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7fSB3aGlsZSAoaSA9PT0gc1srK25dICYmIGkgPT09IHNbKytuXSAmJiBpID09PSBzWysrbl0gJiYgaSA9PT0gc1srK25dICYmIGkgPT09IHNbKytuXSAmJiBpID09PSBzWysrbl0gJiYgaSA9PT0gc1srK25dICYmIGkgPT09IHNbKytuXSAmJiBuIDwgcik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Lm1hdGNoX2xlbmd0aCA9IHogLSAociAtIG4pLCB0Lm1hdGNoX2xlbmd0aCA+IHQubG9va2FoZWFkICYmICh0Lm1hdGNoX2xlbmd0aCA9IHQubG9va2FoZWFkKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0Lm1hdGNoX2xlbmd0aCA+PSB4ID8gKGEgPSBoLl90cl90YWxseSh0LCAxLCB0Lm1hdGNoX2xlbmd0aCAtIHgpLCB0Lmxvb2thaGVhZCAtPSB0Lm1hdGNoX2xlbmd0aCwgdC5zdHJzdGFydCArPSB0Lm1hdGNoX2xlbmd0aCwgdC5tYXRjaF9sZW5ndGggPSAwKSA6IChhID0gaC5fdHJfdGFsbHkodCwgMCwgdC53aW5kb3dbdC5zdHJzdGFydF0pLCB0Lmxvb2thaGVhZC0tLCB0LnN0cnN0YXJ0KyspLCBhICYmIChVKHQsICExKSwgMCA9PT0gdC5zdHJtLmF2YWlsX291dCkpIHJldHVybiBBXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0Lmluc2VydCA9IDAsIGUgPT09IGYgPyAoVSh0LCAhMCksIDAgPT09IHQuc3RybS5hdmFpbF9vdXQgPyBSIDogQykgOiB0Lmxhc3RfbGl0ICYmIChVKHQsICExKSwgMCA9PT0gdC5zdHJtLmF2YWlsX291dCkgPyBBIDogWlxcbiAgICAgICAgICAgICAgICAgICAgfShpLCBlKSA6IGxbaS5sZXZlbF0uZnVuYyhpLCBlKTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChvICE9PSBSICYmIG8gIT09IEMgfHwgKGkuc3RhdHVzID0gNjY2KSwgbyA9PT0gQSB8fCBvID09PSBSKSByZXR1cm4gMCA9PT0gdC5hdmFpbF9vdXQgJiYgKGkubGFzdF9mbHVzaCA9IC0xKSwgYjtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChvID09PSBaICYmICgxID09PSBlID8gaC5fdHJfYWxpZ24oaSkgOiA1ICE9PSBlICYmIChoLl90cl9zdG9yZWRfYmxvY2soaSwgMCwgMCwgITEpLCAzID09PSBlICYmIChEKGkuaGVhZCksIDAgPT09IGkubG9va2FoZWFkICYmIChpLnN0cnN0YXJ0ID0gMCwgaS5ibG9ja19zdGFydCA9IDAsIGkuaW5zZXJ0ID0gMCkpKSwgSSh0KSwgMCA9PT0gdC5hdmFpbF9vdXQpKSByZXR1cm4gaS5sYXN0X2ZsdXNoID0gLTEsIGJcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gZSAhPT0gZiA/IGIgOiBpLndyYXAgPD0gMCA/IDEgOiAoMiA9PT0gaS53cmFwID8gKFQoaSwgMjU1ICYgdC5hZGxlciksIFQoaSwgdC5hZGxlciA+PiA4ICYgMjU1KSwgVChpLCB0LmFkbGVyID4+IDE2ICYgMjU1KSwgVChpLCB0LmFkbGVyID4+IDI0ICYgMjU1KSwgVChpLCAyNTUgJiB0LnRvdGFsX2luKSwgVChpLCB0LnRvdGFsX2luID4+IDggJiAyNTUpLCBUKGksIHQudG90YWxfaW4gPj4gMTYgJiAyNTUpLCBUKGksIHQudG90YWxfaW4gPj4gMjQgJiAyNTUpKSA6IChGKGksIHQuYWRsZXIgPj4+IDE2KSwgRihpLCA2NTUzNSAmIHQuYWRsZXIpKSwgSSh0KSwgMCA8IGkud3JhcCAmJiAoaS53cmFwID0gLWkud3JhcCksIDAgIT09IGkucGVuZGluZyA/IGIgOiAxKVxcbiAgICAgICAgICAgIH0sIGEuZGVmbGF0ZUVuZCA9IGZ1bmN0aW9uKHQpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGU7XFxuICAgICAgICAgICAgICAgIHJldHVybiB0ICYmIHQuc3RhdGUgPyAoZSA9IHQuc3RhdGUuc3RhdHVzKSAhPT0gUyAmJiA2OSAhPT0gZSAmJiA3MyAhPT0gZSAmJiA5MSAhPT0gZSAmJiAxMDMgIT09IGUgJiYgZSAhPT0gRSAmJiA2NjYgIT09IGUgPyBOKHQsIGcpIDogKHQuc3RhdGUgPSBudWxsLCBlID09PSBFID8gTih0LCAtMykgOiBiKSA6IGdcXG4gICAgICAgICAgICB9LCBhLmRlZmxhdGVTZXREaWN0aW9uYXJ5ID0gZnVuY3Rpb24odCwgZSkge1xcbiAgICAgICAgICAgICAgICB2YXIgYSwgaSwgbiwgciwgcywgbywgbCwgaCwgZCA9IGUubGVuZ3RoO1xcbiAgICAgICAgICAgICAgICBpZiAoIXQgfHwgIXQuc3RhdGUpIHJldHVybiBnO1xcbiAgICAgICAgICAgICAgICBpZiAoMiA9PT0gKHIgPSAoYSA9IHQuc3RhdGUpLndyYXApIHx8IDEgPT09IHIgJiYgYS5zdGF0dXMgIT09IFMgfHwgYS5sb29rYWhlYWQpIHJldHVybiBnO1xcbiAgICAgICAgICAgICAgICBmb3IgKDEgPT09IHIgJiYgKHQuYWRsZXIgPSB1KHQuYWRsZXIsIGUsIGQsIDApKSwgYS53cmFwID0gMCwgZCA+PSBhLndfc2l6ZSAmJiAoMCA9PT0gciAmJiAoRChhLmhlYWQpLCBhLnN0cnN0YXJ0ID0gMCwgYS5ibG9ja19zdGFydCA9IDAsIGEuaW5zZXJ0ID0gMCksIGggPSBuZXcgXy5CdWY4KGEud19zaXplKSwgXy5hcnJheVNldChoLCBlLCBkIC0gYS53X3NpemUsIGEud19zaXplLCAwKSwgZSA9IGgsIGQgPSBhLndfc2l6ZSksIHMgPSB0LmF2YWlsX2luLCBvID0gdC5uZXh0X2luLCBsID0gdC5pbnB1dCwgdC5hdmFpbF9pbiA9IGQsIHQubmV4dF9pbiA9IDAsIHQuaW5wdXQgPSBlLCBIKGEpOyBhLmxvb2thaGVhZCA+PSB4Oykge1xcbiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gYS5zdHJzdGFydCwgbiA9IGEubG9va2FoZWFkIC0gKHggLSAxKTsgYS5pbnNfaCA9IChhLmluc19oIDw8IGEuaGFzaF9zaGlmdCBeIGEud2luZG93W2kgKyB4IC0gMV0pICYgYS5oYXNoX21hc2ssIGEucHJldltpICYgYS53X21hc2tdID0gYS5oZWFkW2EuaW5zX2hdLCBhLmhlYWRbYS5pbnNfaF0gPSBpLCBpKyssIC0tbjspO1xcbiAgICAgICAgICAgICAgICAgICAgYS5zdHJzdGFydCA9IGksIGEubG9va2FoZWFkID0geCAtIDEsIEgoYSlcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5zdHJzdGFydCArPSBhLmxvb2thaGVhZCwgYS5ibG9ja19zdGFydCA9IGEuc3Ryc3RhcnQsIGEuaW5zZXJ0ID0gYS5sb29rYWhlYWQsIGEubG9va2FoZWFkID0gMCwgYS5tYXRjaF9sZW5ndGggPSBhLnByZXZfbGVuZ3RoID0geCAtIDEsIGEubWF0Y2hfYXZhaWxhYmxlID0gMCwgdC5uZXh0X2luID0gbywgdC5pbnB1dCA9IGwsIHQuYXZhaWxfaW4gPSBzLCBhLndyYXAgPSByLCBiXFxuICAgICAgICAgICAgfSwgYS5kZWZsYXRlSW5mbyA9IFxcXCJwYWtvIGRlZmxhdGUgKGZyb20gTm9kZWNhIHByb2plY3QpXFxcIlxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIFxcXCIuLi91dGlscy9jb21tb25cXFwiOiAzLFxcbiAgICAgICAgICAgIFxcXCIuL2FkbGVyMzJcXFwiOiA1LFxcbiAgICAgICAgICAgIFxcXCIuL2NyYzMyXFxcIjogNyxcXG4gICAgICAgICAgICBcXFwiLi9tZXNzYWdlc1xcXCI6IDEzLFxcbiAgICAgICAgICAgIFxcXCIuL3RyZWVzXFxcIjogMTRcXG4gICAgICAgIH1dLFxcbiAgICAgICAgOTogW2Z1bmN0aW9uKHQsIGUsIGEpIHtcXG4gICAgICAgICAgICBcXFwidXNlIHN0cmljdFxcXCI7XFxuICAgICAgICAgICAgZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XFxuICAgICAgICAgICAgICAgIHRoaXMudGV4dCA9IDAsIHRoaXMudGltZSA9IDAsIHRoaXMueGZsYWdzID0gMCwgdGhpcy5vcyA9IDAsIHRoaXMuZXh0cmEgPSBudWxsLCB0aGlzLmV4dHJhX2xlbiA9IDAsIHRoaXMubmFtZSA9IFxcXCJcXFwiLCB0aGlzLmNvbW1lbnQgPSBcXFwiXFxcIiwgdGhpcy5oY3JjID0gMCwgdGhpcy5kb25lID0gITFcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LCB7fV0sXFxuICAgICAgICAxMDogW2Z1bmN0aW9uKHQsIGUsIGEpIHtcXG4gICAgICAgICAgICBcXFwidXNlIHN0cmljdFxcXCI7XFxuICAgICAgICAgICAgZS5leHBvcnRzID0gZnVuY3Rpb24odCwgZSkge1xcbiAgICAgICAgICAgICAgICB2YXIgYSwgaSwgbiwgciwgcywgbywgbCwgaCwgZCwgZiwgXywgdSwgYywgYiwgZywgbSwgdywgcCwgdiwgaywgeSwgeCwgeiwgQiwgUztcXG4gICAgICAgICAgICAgICAgYSA9IHQuc3RhdGUsIGkgPSB0Lm5leHRfaW4sIEIgPSB0LmlucHV0LCBuID0gaSArICh0LmF2YWlsX2luIC0gNSksIHIgPSB0Lm5leHRfb3V0LCBTID0gdC5vdXRwdXQsIHMgPSByIC0gKGUgLSB0LmF2YWlsX291dCksIG8gPSByICsgKHQuYXZhaWxfb3V0IC0gMjU3KSwgbCA9IGEuZG1heCwgaCA9IGEud3NpemUsIGQgPSBhLndoYXZlLCBmID0gYS53bmV4dCwgXyA9IGEud2luZG93LCB1ID0gYS5ob2xkLCBjID0gYS5iaXRzLCBiID0gYS5sZW5jb2RlLCBnID0gYS5kaXN0Y29kZSwgbSA9ICgxIDw8IGEubGVuYml0cykgLSAxLCB3ID0gKDEgPDwgYS5kaXN0Yml0cykgLSAxO1xcbiAgICAgICAgICAgICAgICB0OiBkbyB7XFxuICAgICAgICAgICAgICAgICAgICBjIDwgMTUgJiYgKHUgKz0gQltpKytdIDw8IGMsIGMgKz0gOCwgdSArPSBCW2krK10gPDwgYywgYyArPSA4KSwgcCA9IGJbdSAmIG1dO1xcbiAgICAgICAgICAgICAgICAgICAgZTogZm9yICg7Oykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1ID4+Pj0gdiA9IHAgPj4+IDI0LCBjIC09IHYsIDAgPT09ICh2ID0gcCA+Pj4gMTYgJiAyNTUpKSBTW3IrK10gPSA2NTUzNSAmIHA7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDE2ICYgdikpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgwID09ICg2NCAmIHYpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCA9IGJbKDY1NTM1ICYgcCkgKyAodSAmICgxIDw8IHYpIC0gMSldO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIGVcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgzMiAmIHYpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhLm1vZGUgPSAxMjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Lm1zZyA9IFxcXCJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGVcXFwiLCBhLm1vZGUgPSAzMDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHRcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gNjU1MzUgJiBwLCAodiAmPSAxNSkgJiYgKGMgPCB2ICYmICh1ICs9IEJbaSsrXSA8PCBjLCBjICs9IDgpLCBrICs9IHUgJiAoMSA8PCB2KSAtIDEsIHUgPj4+PSB2LCBjIC09IHYpLCBjIDwgMTUgJiYgKHUgKz0gQltpKytdIDw8IGMsIGMgKz0gOCwgdSArPSBCW2krK10gPDwgYywgYyArPSA4KSwgcCA9IGdbdSAmIHddO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiBmb3IgKDs7KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodSA+Pj49IHYgPSBwID4+PiAyNCwgYyAtPSB2LCAhKDE2ICYgKHYgPSBwID4+PiAxNiAmIDI1NSkpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDAgPT0gKDY0ICYgdikpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCA9IGdbKDY1NTM1ICYgcCkgKyAodSAmICgxIDw8IHYpIC0gMSldO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBhXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQubXNnID0gXFxcImludmFsaWQgZGlzdGFuY2UgY29kZVxcXCIsIGEubW9kZSA9IDMwO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHRcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5ID0gNjU1MzUgJiBwLCBjIDwgKHYgJj0gMTUpICYmICh1ICs9IEJbaSsrXSA8PCBjLCAoYyArPSA4KSA8IHYgJiYgKHUgKz0gQltpKytdIDw8IGMsIGMgKz0gOCkpLCBsIDwgKHkgKz0gdSAmICgxIDw8IHYpIC0gMSkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Lm1zZyA9IFxcXCJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFja1xcXCIsIGEubW9kZSA9IDMwO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHRcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1ID4+Pj0gdiwgYyAtPSB2LCAodiA9IHIgLSBzKSA8IHkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZCA8ICh2ID0geSAtIHYpICYmIGEuc2FuZSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Lm1zZyA9IFxcXCJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFja1xcXCIsIGEubW9kZSA9IDMwO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh6ID0gXywgKHggPSAwKSA9PT0gZikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeCArPSBoIC0gdiwgdiA8IGspIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoayAtPSB2OyBTW3IrK10gPSBfW3grK10sIC0tdjspO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IHIgLSB5LCB6ID0gU1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmIDwgdikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeCArPSBoICsgZiAtIHYsICh2IC09IGYpIDwgaykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChrIC09IHY7IFNbcisrXSA9IF9beCsrXSwgLS12Oyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeCA9IDAsIGYgPCBrKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChrIC09IHYgPSBmOyBTW3IrK10gPSBfW3grK10sIC0tdjspO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSByIC0geSwgeiA9IFNcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoeCArPSBmIC0gdiwgdiA8IGspIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChrIC09IHY7IFNbcisrXSA9IF9beCsrXSwgLS12Oyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSByIC0geSwgeiA9IFNcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IDIgPCBrOykgU1tyKytdID0gelt4KytdLCBTW3IrK10gPSB6W3grK10sIFNbcisrXSA9IHpbeCsrXSwgayAtPSAzO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgJiYgKFNbcisrXSA9IHpbeCsrXSwgMSA8IGsgJiYgKFNbcisrXSA9IHpbeCsrXSkpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoeCA9IHIgLSB5OyBTW3IrK10gPSBTW3grK10sIFNbcisrXSA9IFNbeCsrXSwgU1tyKytdID0gU1t4KytdLCAyIDwgKGsgLT0gMyk7KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrICYmIChTW3IrK10gPSBTW3grK10sIDEgPCBrICYmIChTW3IrK10gPSBTW3grK10pKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9IHdoaWxlIChpIDwgbiAmJiByIDwgbyk7XFxuICAgICAgICAgICAgICAgIGkgLT0gayA9IGMgPj4gMywgdSAmPSAoMSA8PCAoYyAtPSBrIDw8IDMpKSAtIDEsIHQubmV4dF9pbiA9IGksIHQubmV4dF9vdXQgPSByLCB0LmF2YWlsX2luID0gaSA8IG4gPyBuIC0gaSArIDUgOiA1IC0gKGkgLSBuKSwgdC5hdmFpbF9vdXQgPSByIDwgbyA/IG8gLSByICsgMjU3IDogMjU3IC0gKHIgLSBvKSwgYS5ob2xkID0gdSwgYS5iaXRzID0gY1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIHt9XSxcXG4gICAgICAgIDExOiBbZnVuY3Rpb24odCwgZSwgYSkge1xcbiAgICAgICAgICAgIFxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4gICAgICAgICAgICB2YXIgWiA9IHQoXFxcIi4uL3V0aWxzL2NvbW1vblxcXCIpLFxcbiAgICAgICAgICAgICAgICBSID0gdChcXFwiLi9hZGxlcjMyXFxcIiksXFxuICAgICAgICAgICAgICAgIEMgPSB0KFxcXCIuL2NyYzMyXFxcIiksXFxuICAgICAgICAgICAgICAgIE4gPSB0KFxcXCIuL2luZmZhc3RcXFwiKSxcXG4gICAgICAgICAgICAgICAgTyA9IHQoXFxcIi4vaW5mdHJlZXNcXFwiKSxcXG4gICAgICAgICAgICAgICAgRCA9IDEsXFxuICAgICAgICAgICAgICAgIEkgPSAyLFxcbiAgICAgICAgICAgICAgICBVID0gMCxcXG4gICAgICAgICAgICAgICAgVCA9IC0yLFxcbiAgICAgICAgICAgICAgICBGID0gMSxcXG4gICAgICAgICAgICAgICAgaSA9IDg1MixcXG4gICAgICAgICAgICAgICAgbiA9IDU5MjtcXG5cXG4gICAgICAgICAgICBmdW5jdGlvbiBMKHQpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICh0ID4+PiAyNCAmIDI1NSkgKyAodCA+Pj4gOCAmIDY1MjgwKSArICgoNjUyODAgJiB0KSA8PCA4KSArICgoMjU1ICYgdCkgPDwgMjQpXFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIGZ1bmN0aW9uIHIoKSB7XFxuICAgICAgICAgICAgICAgIHRoaXMubW9kZSA9IDAsIHRoaXMubGFzdCA9ICExLCB0aGlzLndyYXAgPSAwLCB0aGlzLmhhdmVkaWN0ID0gITEsIHRoaXMuZmxhZ3MgPSAwLCB0aGlzLmRtYXggPSAwLCB0aGlzLmNoZWNrID0gMCwgdGhpcy50b3RhbCA9IDAsIHRoaXMuaGVhZCA9IG51bGwsIHRoaXMud2JpdHMgPSAwLCB0aGlzLndzaXplID0gMCwgdGhpcy53aGF2ZSA9IDAsIHRoaXMud25leHQgPSAwLCB0aGlzLndpbmRvdyA9IG51bGwsIHRoaXMuaG9sZCA9IDAsIHRoaXMuYml0cyA9IDAsIHRoaXMubGVuZ3RoID0gMCwgdGhpcy5vZmZzZXQgPSAwLCB0aGlzLmV4dHJhID0gMCwgdGhpcy5sZW5jb2RlID0gbnVsbCwgdGhpcy5kaXN0Y29kZSA9IG51bGwsIHRoaXMubGVuYml0cyA9IDAsIHRoaXMuZGlzdGJpdHMgPSAwLCB0aGlzLm5jb2RlID0gMCwgdGhpcy5ubGVuID0gMCwgdGhpcy5uZGlzdCA9IDAsIHRoaXMuaGF2ZSA9IDAsIHRoaXMubmV4dCA9IG51bGwsIHRoaXMubGVucyA9IG5ldyBaLkJ1ZjE2KDMyMCksIHRoaXMud29yayA9IG5ldyBaLkJ1ZjE2KDI4OCksIHRoaXMubGVuZHluID0gbnVsbCwgdGhpcy5kaXN0ZHluID0gbnVsbCwgdGhpcy5zYW5lID0gMCwgdGhpcy5iYWNrID0gMCwgdGhpcy53YXMgPSAwXFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIGZ1bmN0aW9uIHModCkge1xcbiAgICAgICAgICAgICAgICB2YXIgZTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHQgJiYgdC5zdGF0ZSA/IChlID0gdC5zdGF0ZSwgdC50b3RhbF9pbiA9IHQudG90YWxfb3V0ID0gZS50b3RhbCA9IDAsIHQubXNnID0gXFxcIlxcXCIsIGUud3JhcCAmJiAodC5hZGxlciA9IDEgJiBlLndyYXApLCBlLm1vZGUgPSBGLCBlLmxhc3QgPSAwLCBlLmhhdmVkaWN0ID0gMCwgZS5kbWF4ID0gMzI3NjgsIGUuaGVhZCA9IG51bGwsIGUuaG9sZCA9IDAsIGUuYml0cyA9IDAsIGUubGVuY29kZSA9IGUubGVuZHluID0gbmV3IFouQnVmMzIoaSksIGUuZGlzdGNvZGUgPSBlLmRpc3RkeW4gPSBuZXcgWi5CdWYzMihuKSwgZS5zYW5lID0gMSwgZS5iYWNrID0gLTEsIFUpIDogVFxcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBmdW5jdGlvbiBvKHQpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGU7XFxuICAgICAgICAgICAgICAgIHJldHVybiB0ICYmIHQuc3RhdGUgPyAoKGUgPSB0LnN0YXRlKS53c2l6ZSA9IDAsIGUud2hhdmUgPSAwLCBlLnduZXh0ID0gMCwgcyh0KSkgOiBUXFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIGZ1bmN0aW9uIGwodCwgZSkge1xcbiAgICAgICAgICAgICAgICB2YXIgYSwgaTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHQgJiYgdC5zdGF0ZSA/IChpID0gdC5zdGF0ZSwgZSA8IDAgPyAoYSA9IDAsIGUgPSAtZSkgOiAoYSA9IDEgKyAoZSA+PiA0KSwgZSA8IDQ4ICYmIChlICY9IDE1KSksIGUgJiYgKGUgPCA4IHx8IDE1IDwgZSkgPyBUIDogKG51bGwgIT09IGkud2luZG93ICYmIGkud2JpdHMgIT09IGUgJiYgKGkud2luZG93ID0gbnVsbCksIGkud3JhcCA9IGEsIGkud2JpdHMgPSBlLCBvKHQpKSkgOiBUXFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIGZ1bmN0aW9uIGgodCwgZSkge1xcbiAgICAgICAgICAgICAgICB2YXIgYSwgaTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHQgPyAoaSA9IG5ldyByLCAodC5zdGF0ZSA9IGkpLndpbmRvdyA9IG51bGwsIChhID0gbCh0LCBlKSkgIT09IFUgJiYgKHQuc3RhdGUgPSBudWxsKSwgYSkgOiBUXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHZhciBkLCBmLCBfID0gITA7XFxuXFxuICAgICAgICAgICAgZnVuY3Rpb24gSCh0KSB7XFxuICAgICAgICAgICAgICAgIGlmIChfKSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgZTtcXG4gICAgICAgICAgICAgICAgICAgIGZvciAoZCA9IG5ldyBaLkJ1ZjMyKDUxMiksIGYgPSBuZXcgWi5CdWYzMigzMiksIGUgPSAwOyBlIDwgMTQ0OykgdC5sZW5zW2UrK10gPSA4O1xcbiAgICAgICAgICAgICAgICAgICAgZm9yICg7IGUgPCAyNTY7KSB0LmxlbnNbZSsrXSA9IDk7XFxuICAgICAgICAgICAgICAgICAgICBmb3IgKDsgZSA8IDI4MDspIHQubGVuc1tlKytdID0gNztcXG4gICAgICAgICAgICAgICAgICAgIGZvciAoOyBlIDwgMjg4OykgdC5sZW5zW2UrK10gPSA4O1xcbiAgICAgICAgICAgICAgICAgICAgZm9yIChPKEQsIHQubGVucywgMCwgMjg4LCBkLCAwLCB0LndvcmssIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0czogOVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLCBlID0gMDsgZSA8IDMyOykgdC5sZW5zW2UrK10gPSA1O1xcbiAgICAgICAgICAgICAgICAgICAgTyhJLCB0LmxlbnMsIDAsIDMyLCBmLCAwLCB0LndvcmssIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBiaXRzOiA1XFxuICAgICAgICAgICAgICAgICAgICB9KSwgXyA9ICExXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdC5sZW5jb2RlID0gZCwgdC5sZW5iaXRzID0gOSwgdC5kaXN0Y29kZSA9IGYsIHQuZGlzdGJpdHMgPSA1XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIGZ1bmN0aW9uIGoodCwgZSwgYSwgaSkge1xcbiAgICAgICAgICAgICAgICB2YXIgbiwgciA9IHQuc3RhdGU7XFxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsID09PSByLndpbmRvdyAmJiAoci53c2l6ZSA9IDEgPDwgci53Yml0cywgci53bmV4dCA9IDAsIHIud2hhdmUgPSAwLCByLndpbmRvdyA9IG5ldyBaLkJ1Zjgoci53c2l6ZSkpLCBpID49IHIud3NpemUgPyAoWi5hcnJheVNldChyLndpbmRvdywgZSwgYSAtIHIud3NpemUsIHIud3NpemUsIDApLCByLnduZXh0ID0gMCwgci53aGF2ZSA9IHIud3NpemUpIDogKGkgPCAobiA9IHIud3NpemUgLSByLnduZXh0KSAmJiAobiA9IGkpLCBaLmFycmF5U2V0KHIud2luZG93LCBlLCBhIC0gaSwgbiwgci53bmV4dCksIChpIC09IG4pID8gKFouYXJyYXlTZXQoci53aW5kb3csIGUsIGEgLSBpLCBpLCAwKSwgci53bmV4dCA9IGksIHIud2hhdmUgPSByLndzaXplKSA6IChyLnduZXh0ICs9IG4sIHIud25leHQgPT09IHIud3NpemUgJiYgKHIud25leHQgPSAwKSwgci53aGF2ZSA8IHIud3NpemUgJiYgKHIud2hhdmUgKz0gbikpKSwgMFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBhLmluZmxhdGVSZXNldCA9IG8sIGEuaW5mbGF0ZVJlc2V0MiA9IGwsIGEuaW5mbGF0ZVJlc2V0S2VlcCA9IHMsIGEuaW5mbGF0ZUluaXQgPSBmdW5jdGlvbih0KSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBoKHQsIDE1KVxcbiAgICAgICAgICAgIH0sIGEuaW5mbGF0ZUluaXQyID0gaCwgYS5pbmZsYXRlID0gZnVuY3Rpb24odCwgZSkge1xcbiAgICAgICAgICAgICAgICB2YXIgYSwgaSwgbiwgciwgcywgbywgbCwgaCwgZCwgZiwgXywgdSwgYywgYiwgZywgbSwgdywgcCwgdiwgaywgeSwgeCwgeiwgQiwgUyA9IDAsXFxuICAgICAgICAgICAgICAgICAgICBFID0gbmV3IFouQnVmOCg0KSxcXG4gICAgICAgICAgICAgICAgICAgIEEgPSBbMTYsIDE3LCAxOCwgMCwgOCwgNywgOSwgNiwgMTAsIDUsIDExLCA0LCAxMiwgMywgMTMsIDIsIDE0LCAxLCAxNV07XFxuICAgICAgICAgICAgICAgIGlmICghdCB8fCAhdC5zdGF0ZSB8fCAhdC5vdXRwdXQgfHwgIXQuaW5wdXQgJiYgMCAhPT0gdC5hdmFpbF9pbikgcmV0dXJuIFQ7XFxuICAgICAgICAgICAgICAgIDEyID09PSAoYSA9IHQuc3RhdGUpLm1vZGUgJiYgKGEubW9kZSA9IDEzKSwgcyA9IHQubmV4dF9vdXQsIG4gPSB0Lm91dHB1dCwgbCA9IHQuYXZhaWxfb3V0LCByID0gdC5uZXh0X2luLCBpID0gdC5pbnB1dCwgbyA9IHQuYXZhaWxfaW4sIGggPSBhLmhvbGQsIGQgPSBhLmJpdHMsIGYgPSBvLCBfID0gbCwgeCA9IFU7XFxuICAgICAgICAgICAgICAgIHQ6IGZvciAoOzspIHN3aXRjaCAoYS5tb2RlKSB7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIEY6XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDAgPT09IGEud3JhcCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhLm1vZGUgPSAxMztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGQgPCAxNjspIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDAgPT09IG8pIGJyZWFrIHQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8tLSwgaCArPSBpW3IrK10gPDwgZCwgZCArPSA4XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgyICYgYS53cmFwICYmIDM1NjE1ID09PSBoKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVbYS5jaGVjayA9IDBdID0gMjU1ICYgaCwgRVsxXSA9IGggPj4+IDggJiAyNTUsIGEuY2hlY2sgPSBDKGEuY2hlY2ssIEUsIDIsIDApLCBkID0gaCA9IDAsIGEubW9kZSA9IDI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhLmZsYWdzID0gMCwgYS5oZWFkICYmIChhLmhlYWQuZG9uZSA9ICExKSwgISgxICYgYS53cmFwKSB8fCAoKCgyNTUgJiBoKSA8PCA4KSArIChoID4+IDgpKSAlIDMxKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQubXNnID0gXFxcImluY29ycmVjdCBoZWFkZXIgY2hlY2tcXFwiLCBhLm1vZGUgPSAzMDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDggIT0gKDE1ICYgaCkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5tc2cgPSBcXFwidW5rbm93biBjb21wcmVzc2lvbiBtZXRob2RcXFwiLCBhLm1vZGUgPSAzMDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGQgLT0gNCwgeSA9IDggKyAoMTUgJiAoaCA+Pj49IDQpKSwgMCA9PT0gYS53Yml0cykgYS53Yml0cyA9IHk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoeSA+IGEud2JpdHMpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5tc2cgPSBcXFwiaW52YWxpZCB3aW5kb3cgc2l6ZVxcXCIsIGEubW9kZSA9IDMwO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBhLmRtYXggPSAxIDw8IHksIHQuYWRsZXIgPSBhLmNoZWNrID0gMSwgYS5tb2RlID0gNTEyICYgaCA/IDEwIDogMTIsIGQgPSBoID0gMDtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgZCA8IDE2Oykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PT0gbykgYnJlYWsgdDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgby0tLCBoICs9IGlbcisrXSA8PCBkLCBkICs9IDhcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEuZmxhZ3MgPSBoLCA4ICE9ICgyNTUgJiBhLmZsYWdzKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Lm1zZyA9IFxcXCJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZFxcXCIsIGEubW9kZSA9IDMwO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoNTczNDQgJiBhLmZsYWdzKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQubXNnID0gXFxcInVua25vd24gaGVhZGVyIGZsYWdzIHNldFxcXCIsIGEubW9kZSA9IDMwO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBhLmhlYWQgJiYgKGEuaGVhZC50ZXh0ID0gaCA+PiA4ICYgMSksIDUxMiAmIGEuZmxhZ3MgJiYgKEVbMF0gPSAyNTUgJiBoLCBFWzFdID0gaCA+Pj4gOCAmIDI1NSwgYS5jaGVjayA9IEMoYS5jaGVjaywgRSwgMiwgMCkpLCBkID0gaCA9IDAsIGEubW9kZSA9IDM7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGQgPCAzMjspIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDAgPT09IG8pIGJyZWFrIHQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8tLSwgaCArPSBpW3IrK10gPDwgZCwgZCArPSA4XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGEuaGVhZCAmJiAoYS5oZWFkLnRpbWUgPSBoKSwgNTEyICYgYS5mbGFncyAmJiAoRVswXSA9IDI1NSAmIGgsIEVbMV0gPSBoID4+PiA4ICYgMjU1LCBFWzJdID0gaCA+Pj4gMTYgJiAyNTUsIEVbM10gPSBoID4+PiAyNCAmIDI1NSwgYS5jaGVjayA9IEMoYS5jaGVjaywgRSwgNCwgMCkpLCBkID0gaCA9IDAsIGEubW9kZSA9IDQ7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGQgPCAxNjspIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDAgPT09IG8pIGJyZWFrIHQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8tLSwgaCArPSBpW3IrK10gPDwgZCwgZCArPSA4XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGEuaGVhZCAmJiAoYS5oZWFkLnhmbGFncyA9IDI1NSAmIGgsIGEuaGVhZC5vcyA9IGggPj4gOCksIDUxMiAmIGEuZmxhZ3MgJiYgKEVbMF0gPSAyNTUgJiBoLCBFWzFdID0gaCA+Pj4gOCAmIDI1NSwgYS5jaGVjayA9IEMoYS5jaGVjaywgRSwgMiwgMCkpLCBkID0gaCA9IDAsIGEubW9kZSA9IDU7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDEwMjQgJiBhLmZsYWdzKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBkIDwgMTY7KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PT0gbykgYnJlYWsgdDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8tLSwgaCArPSBpW3IrK10gPDwgZCwgZCArPSA4XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYS5sZW5ndGggPSBoLCBhLmhlYWQgJiYgKGEuaGVhZC5leHRyYV9sZW4gPSBoKSwgNTEyICYgYS5mbGFncyAmJiAoRVswXSA9IDI1NSAmIGgsIEVbMV0gPSBoID4+PiA4ICYgMjU1LCBhLmNoZWNrID0gQyhhLmNoZWNrLCBFLCAyLCAwKSksIGQgPSBoID0gMFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBhLmhlYWQgJiYgKGEuaGVhZC5leHRyYSA9IG51bGwpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGEubW9kZSA9IDY7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDEwMjQgJiBhLmZsYWdzICYmIChvIDwgKHUgPSBhLmxlbmd0aCkgJiYgKHUgPSBvKSwgdSAmJiAoYS5oZWFkICYmICh5ID0gYS5oZWFkLmV4dHJhX2xlbiAtIGEubGVuZ3RoLCBhLmhlYWQuZXh0cmEgfHwgKGEuaGVhZC5leHRyYSA9IG5ldyBBcnJheShhLmhlYWQuZXh0cmFfbGVuKSksIFouYXJyYXlTZXQoYS5oZWFkLmV4dHJhLCBpLCByLCB1LCB5KSksIDUxMiAmIGEuZmxhZ3MgJiYgKGEuY2hlY2sgPSBDKGEuY2hlY2ssIGksIHUsIHIpKSwgbyAtPSB1LCByICs9IHUsIGEubGVuZ3RoIC09IHUpLCBhLmxlbmd0aCkpIGJyZWFrIHQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYS5sZW5ndGggPSAwLCBhLm1vZGUgPSA3O1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA3OlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgyMDQ4ICYgYS5mbGFncykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PT0gbykgYnJlYWsgdDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1ID0gMDsgeSA9IGlbciArIHUrK10sIGEuaGVhZCAmJiB5ICYmIGEubGVuZ3RoIDwgNjU1MzYgJiYgKGEuaGVhZC5uYW1lICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoeSkpLCB5ICYmIHUgPCBvOyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICg1MTIgJiBhLmZsYWdzICYmIChhLmNoZWNrID0gQyhhLmNoZWNrLCBpLCB1LCByKSksIG8gLT0gdSwgciArPSB1LCB5KSBicmVhayB0XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGEuaGVhZCAmJiAoYS5oZWFkLm5hbWUgPSBudWxsKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBhLmxlbmd0aCA9IDAsIGEubW9kZSA9IDg7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIDg6XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDQwOTYgJiBhLmZsYWdzKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgwID09PSBvKSBicmVhayB0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHUgPSAwOyB5ID0gaVtyICsgdSsrXSwgYS5oZWFkICYmIHkgJiYgYS5sZW5ndGggPCA2NTUzNiAmJiAoYS5oZWFkLmNvbW1lbnQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh5KSksIHkgJiYgdSA8IG87KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDUxMiAmIGEuZmxhZ3MgJiYgKGEuY2hlY2sgPSBDKGEuY2hlY2ssIGksIHUsIHIpKSwgbyAtPSB1LCByICs9IHUsIHkpIGJyZWFrIHRcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgYS5oZWFkICYmIChhLmhlYWQuY29tbWVudCA9IG51bGwpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGEubW9kZSA9IDk7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIDk6XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDUxMiAmIGEuZmxhZ3MpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGQgPCAxNjspIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgwID09PSBvKSBicmVhayB0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgby0tLCBoICs9IGlbcisrXSA8PCBkLCBkICs9IDhcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaCAhPT0gKDY1NTM1ICYgYS5jaGVjaykpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQubXNnID0gXFxcImhlYWRlciBjcmMgbWlzbWF0Y2hcXFwiLCBhLm1vZGUgPSAzMDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZCA9IGggPSAwXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGEuaGVhZCAmJiAoYS5oZWFkLmhjcmMgPSBhLmZsYWdzID4+IDkgJiAxLCBhLmhlYWQuZG9uZSA9ICEwKSwgdC5hZGxlciA9IGEuY2hlY2sgPSAwLCBhLm1vZGUgPSAxMjtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTA6XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGQgPCAzMjspIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDAgPT09IG8pIGJyZWFrIHQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8tLSwgaCArPSBpW3IrK10gPDwgZCwgZCArPSA4XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHQuYWRsZXIgPSBhLmNoZWNrID0gTChoKSwgZCA9IGggPSAwLCBhLm1vZGUgPSAxMTtcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTE6XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDAgPT09IGEuaGF2ZWRpY3QpIHJldHVybiB0Lm5leHRfb3V0ID0gcywgdC5hdmFpbF9vdXQgPSBsLCB0Lm5leHRfaW4gPSByLCB0LmF2YWlsX2luID0gbywgYS5ob2xkID0gaCwgYS5iaXRzID0gZCwgMjtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0LmFkbGVyID0gYS5jaGVjayA9IDEsIGEubW9kZSA9IDEyO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxMjpcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoNSA9PT0gZSB8fCA2ID09PSBlKSBicmVhayB0O1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxMzpcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYS5sYXN0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPj4+PSA3ICYgZCwgZCAtPSA3ICYgZCwgYS5tb2RlID0gMjc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBkIDwgMzspIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDAgPT09IG8pIGJyZWFrIHQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8tLSwgaCArPSBpW3IrK10gPDwgZCwgZCArPSA4XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYS5sYXN0ID0gMSAmIGgsIGQgLT0gMSwgMyAmIChoID4+Pj0gMSkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYS5tb2RlID0gMTQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEgoYSksIGEubW9kZSA9IDIwLCA2ICE9PSBlKSBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPj4+PSAyLCBkIC09IDI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhLm1vZGUgPSAxNztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Lm1zZyA9IFxcXCJpbnZhbGlkIGJsb2NrIHR5cGVcXFwiLCBhLm1vZGUgPSAzMFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBoID4+Pj0gMiwgZCAtPSAyO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxNDpcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGggPj4+PSA3ICYgZCwgZCAtPSA3ICYgZDsgZCA8IDMyOykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PT0gbykgYnJlYWsgdDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgby0tLCBoICs9IGlbcisrXSA8PCBkLCBkICs9IDhcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCg2NTUzNSAmIGgpICE9IChoID4+PiAxNiBeIDY1NTM1KSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Lm1zZyA9IFxcXCJpbnZhbGlkIHN0b3JlZCBibG9jayBsZW5ndGhzXFxcIiwgYS5tb2RlID0gMzA7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhLmxlbmd0aCA9IDY1NTM1ICYgaCwgZCA9IGggPSAwLCBhLm1vZGUgPSAxNSwgNiA9PT0gZSkgYnJlYWsgdDtcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTU6XFxuICAgICAgICAgICAgICAgICAgICAgICAgYS5tb2RlID0gMTY7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE2OlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1ID0gYS5sZW5ndGgpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG8gPCB1ICYmICh1ID0gbyksIGwgPCB1ICYmICh1ID0gbCksIDAgPT09IHUpIGJyZWFrIHQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFouYXJyYXlTZXQobiwgaSwgciwgdSwgcyksIG8gLT0gdSwgciArPSB1LCBsIC09IHUsIHMgKz0gdSwgYS5sZW5ndGggLT0gdTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgYS5tb2RlID0gMTI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE3OlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBkIDwgMTQ7KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgwID09PSBvKSBicmVhayB0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvLS0sIGggKz0gaVtyKytdIDw8IGQsIGQgKz0gOFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYS5ubGVuID0gMjU3ICsgKDMxICYgaCksIGggPj4+PSA1LCBkIC09IDUsIGEubmRpc3QgPSAxICsgKDMxICYgaCksIGggPj4+PSA1LCBkIC09IDUsIGEubmNvZGUgPSA0ICsgKDE1ICYgaCksIGggPj4+PSA0LCBkIC09IDQsIDI4NiA8IGEubmxlbiB8fCAzMCA8IGEubmRpc3QpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5tc2cgPSBcXFwidG9vIG1hbnkgbGVuZ3RoIG9yIGRpc3RhbmNlIHN5bWJvbHNcXFwiLCBhLm1vZGUgPSAzMDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgYS5oYXZlID0gMCwgYS5tb2RlID0gMTg7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE4OlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBhLmhhdmUgPCBhLm5jb2RlOykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgZCA8IDM7KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PT0gbykgYnJlYWsgdDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8tLSwgaCArPSBpW3IrK10gPDwgZCwgZCArPSA4XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYS5sZW5zW0FbYS5oYXZlKytdXSA9IDcgJiBoLCBoID4+Pj0gMywgZCAtPSAzXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBhLmhhdmUgPCAxOTspIGEubGVuc1tBW2EuaGF2ZSsrXV0gPSAwO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhLmxlbmNvZGUgPSBhLmxlbmR5biwgYS5sZW5iaXRzID0gNywgeiA9IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHM6IGEubGVuYml0c1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB4ID0gTygwLCBhLmxlbnMsIDAsIDE5LCBhLmxlbmNvZGUsIDAsIGEud29yaywgeiksIGEubGVuYml0cyA9IHouYml0cywgeCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Lm1zZyA9IFxcXCJpbnZhbGlkIGNvZGUgbGVuZ3RocyBzZXRcXFwiLCBhLm1vZGUgPSAzMDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgYS5oYXZlID0gMCwgYS5tb2RlID0gMTk7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE5OlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBhLmhhdmUgPCBhLm5sZW4gKyBhLm5kaXN0Oykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgbSA9IChTID0gYS5sZW5jb2RlW2ggJiAoMSA8PCBhLmxlbmJpdHMpIC0gMV0pID4+PiAxNiAmIDI1NSwgdyA9IDY1NTM1ICYgUywgISgoZyA9IFMgPj4+IDI0KSA8PSBkKTspIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgwID09PSBvKSBicmVhayB0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgby0tLCBoICs9IGlbcisrXSA8PCBkLCBkICs9IDhcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodyA8IDE2KSBoID4+Pj0gZywgZCAtPSBnLCBhLmxlbnNbYS5oYXZlKytdID0gdztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMTYgPT09IHcpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKEIgPSBnICsgMjsgZCA8IEI7KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgwID09PSBvKSBicmVhayB0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvLS0sIGggKz0gaVtyKytdIDw8IGQsIGQgKz0gOFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaCA+Pj49IGcsIGQgLT0gZywgMCA9PT0gYS5oYXZlKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQubXNnID0gXFxcImludmFsaWQgYml0IGxlbmd0aCByZXBlYXRcXFwiLCBhLm1vZGUgPSAzMDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IGEubGVuc1thLmhhdmUgLSAxXSwgdSA9IDMgKyAoMyAmIGgpLCBoID4+Pj0gMiwgZCAtPSAyXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKDE3ID09PSB3KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChCID0gZyArIDM7IGQgPCBCOykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PT0gbykgYnJlYWsgdDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgby0tLCBoICs9IGlbcisrXSA8PCBkLCBkICs9IDhcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCAtPSBnLCB5ID0gMCwgdSA9IDMgKyAoNyAmIChoID4+Pj0gZykpLCBoID4+Pj0gMywgZCAtPSAzXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoQiA9IGcgKyA3OyBkIDwgQjspIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDAgPT09IG8pIGJyZWFrIHQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8tLSwgaCArPSBpW3IrK10gPDwgZCwgZCArPSA4XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgLT0gZywgeSA9IDAsIHUgPSAxMSArICgxMjcgJiAoaCA+Pj49IGcpKSwgaCA+Pj49IDcsIGQgLT0gN1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEuaGF2ZSArIHUgPiBhLm5sZW4gKyBhLm5kaXN0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5tc2cgPSBcXFwiaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdFxcXCIsIGEubW9kZSA9IDMwO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgdS0tOykgYS5sZW5zW2EuaGF2ZSsrXSA9IHlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoMzAgPT09IGEubW9kZSkgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDAgPT09IGEubGVuc1syNTZdKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQubXNnID0gXFxcImludmFsaWQgY29kZSAtLSBtaXNzaW5nIGVuZC1vZi1ibG9ja1xcXCIsIGEubW9kZSA9IDMwO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYS5sZW5iaXRzID0gOSwgeiA9IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHM6IGEubGVuYml0c1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB4ID0gTyhELCBhLmxlbnMsIDAsIGEubmxlbiwgYS5sZW5jb2RlLCAwLCBhLndvcmssIHopLCBhLmxlbmJpdHMgPSB6LmJpdHMsIHgpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5tc2cgPSBcXFwiaW52YWxpZCBsaXRlcmFsL2xlbmd0aHMgc2V0XFxcIiwgYS5tb2RlID0gMzA7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhLmRpc3RiaXRzID0gNiwgYS5kaXN0Y29kZSA9IGEuZGlzdGR5biwgeiA9IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHM6IGEuZGlzdGJpdHNcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgeCA9IE8oSSwgYS5sZW5zLCBhLm5sZW4sIGEubmRpc3QsIGEuZGlzdGNvZGUsIDAsIGEud29yaywgeiksIGEuZGlzdGJpdHMgPSB6LmJpdHMsIHgpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5tc2cgPSBcXFwiaW52YWxpZCBkaXN0YW5jZXMgc2V0XFxcIiwgYS5tb2RlID0gMzA7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhLm1vZGUgPSAyMCwgNiA9PT0gZSkgYnJlYWsgdDtcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjA6XFxuICAgICAgICAgICAgICAgICAgICAgICAgYS5tb2RlID0gMjE7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIDIxOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICg2IDw9IG8gJiYgMjU4IDw9IGwpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5uZXh0X291dCA9IHMsIHQuYXZhaWxfb3V0ID0gbCwgdC5uZXh0X2luID0gciwgdC5hdmFpbF9pbiA9IG8sIGEuaG9sZCA9IGgsIGEuYml0cyA9IGQsIE4odCwgXyksIHMgPSB0Lm5leHRfb3V0LCBuID0gdC5vdXRwdXQsIGwgPSB0LmF2YWlsX291dCwgciA9IHQubmV4dF9pbiwgaSA9IHQuaW5wdXQsIG8gPSB0LmF2YWlsX2luLCBoID0gYS5ob2xkLCBkID0gYS5iaXRzLCAxMiA9PT0gYS5tb2RlICYmIChhLmJhY2sgPSAtMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoYS5iYWNrID0gMDsgbSA9IChTID0gYS5sZW5jb2RlW2ggJiAoMSA8PCBhLmxlbmJpdHMpIC0gMV0pID4+PiAxNiAmIDI1NSwgdyA9IDY1NTM1ICYgUywgISgoZyA9IFMgPj4+IDI0KSA8PSBkKTspIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDAgPT09IG8pIGJyZWFrIHQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8tLSwgaCArPSBpW3IrK10gPDwgZCwgZCArPSA4XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtICYmIDAgPT0gKDI0MCAmIG0pKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAocCA9IGcsIHYgPSBtLCBrID0gdzsgbSA9IChTID0gYS5sZW5jb2RlW2sgKyAoKGggJiAoMSA8PCBwICsgdikgLSAxKSA+PiBwKV0pID4+PiAxNiAmIDI1NSwgdyA9IDY1NTM1ICYgUywgIShwICsgKGcgPSBTID4+PiAyNCkgPD0gZCk7KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PT0gbykgYnJlYWsgdDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8tLSwgaCArPSBpW3IrK10gPDwgZCwgZCArPSA4XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaCA+Pj49IHAsIGQgLT0gcCwgYS5iYWNrICs9IHBcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGggPj4+PSBnLCBkIC09IGcsIGEuYmFjayArPSBnLCBhLmxlbmd0aCA9IHcsIDAgPT09IG0pIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYS5tb2RlID0gMjY7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgzMiAmIG0pIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYS5iYWNrID0gLTEsIGEubW9kZSA9IDEyO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoNjQgJiBtKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQubXNnID0gXFxcImludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZVxcXCIsIGEubW9kZSA9IDMwO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBhLmV4dHJhID0gMTUgJiBtLCBhLm1vZGUgPSAyMjtcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEuZXh0cmEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChCID0gYS5leHRyYTsgZCA8IEI7KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PT0gbykgYnJlYWsgdDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8tLSwgaCArPSBpW3IrK10gPDwgZCwgZCArPSA4XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYS5sZW5ndGggKz0gaCAmICgxIDw8IGEuZXh0cmEpIC0gMSwgaCA+Pj49IGEuZXh0cmEsIGQgLT0gYS5leHRyYSwgYS5iYWNrICs9IGEuZXh0cmFcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgYS53YXMgPSBhLmxlbmd0aCwgYS5tb2RlID0gMjM7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIDIzOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBtID0gKFMgPSBhLmRpc3Rjb2RlW2ggJiAoMSA8PCBhLmRpc3RiaXRzKSAtIDFdKSA+Pj4gMTYgJiAyNTUsIHcgPSA2NTUzNSAmIFMsICEoKGcgPSBTID4+PiAyNCkgPD0gZCk7KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgwID09PSBvKSBicmVhayB0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvLS0sIGggKz0gaVtyKytdIDw8IGQsIGQgKz0gOFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PSAoMjQwICYgbSkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChwID0gZywgdiA9IG0sIGsgPSB3OyBtID0gKFMgPSBhLmRpc3Rjb2RlW2sgKyAoKGggJiAoMSA8PCBwICsgdikgLSAxKSA+PiBwKV0pID4+PiAxNiAmIDI1NSwgdyA9IDY1NTM1ICYgUywgIShwICsgKGcgPSBTID4+PiAyNCkgPD0gZCk7KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PT0gbykgYnJlYWsgdDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8tLSwgaCArPSBpW3IrK10gPDwgZCwgZCArPSA4XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaCA+Pj49IHAsIGQgLT0gcCwgYS5iYWNrICs9IHBcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGggPj4+PSBnLCBkIC09IGcsIGEuYmFjayArPSBnLCA2NCAmIG0pIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5tc2cgPSBcXFwiaW52YWxpZCBkaXN0YW5jZSBjb2RlXFxcIiwgYS5tb2RlID0gMzA7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGEub2Zmc2V0ID0gdywgYS5leHRyYSA9IDE1ICYgbSwgYS5tb2RlID0gMjQ7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI0OlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhLmV4dHJhKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoQiA9IGEuZXh0cmE7IGQgPCBCOykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDAgPT09IG8pIGJyZWFrIHQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvLS0sIGggKz0gaVtyKytdIDw8IGQsIGQgKz0gOFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEub2Zmc2V0ICs9IGggJiAoMSA8PCBhLmV4dHJhKSAtIDEsIGggPj4+PSBhLmV4dHJhLCBkIC09IGEuZXh0cmEsIGEuYmFjayArPSBhLmV4dHJhXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhLm9mZnNldCA+IGEuZG1heCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Lm1zZyA9IFxcXCJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFja1xcXCIsIGEubW9kZSA9IDMwO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBhLm1vZGUgPSAyNTtcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjU6XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDAgPT09IGwpIGJyZWFrIHQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHUgPSBfIC0gbCwgYS5vZmZzZXQgPiB1KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodSA9IGEub2Zmc2V0IC0gdSkgPiBhLndoYXZlICYmIGEuc2FuZSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5tc2cgPSBcXFwiaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2tcXFwiLCBhLm1vZGUgPSAzMDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA+IGEud25leHQgPyAodSAtPSBhLnduZXh0LCBjID0gYS53c2l6ZSAtIHUpIDogYyA9IGEud25leHQgLSB1LCB1ID4gYS5sZW5ndGggJiYgKHUgPSBhLmxlbmd0aCksIGIgPSBhLndpbmRvd1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBiID0gbiwgYyA9IHMgLSBhLm9mZnNldCwgdSA9IGEubGVuZ3RoO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobCA8IHUgJiYgKHUgPSBsKSwgbCAtPSB1LCBhLmxlbmd0aCAtPSB1OyBuW3MrK10gPSBiW2MrK10sIC0tdTspO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIDAgPT09IGEubGVuZ3RoICYmIChhLm1vZGUgPSAyMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI2OlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgwID09PSBsKSBicmVhayB0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgIG5bcysrXSA9IGEubGVuZ3RoLCBsLS0sIGEubW9kZSA9IDIxO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyNzpcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYS53cmFwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBkIDwgMzI7KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PT0gbykgYnJlYWsgdDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8tLSwgaCB8PSBpW3IrK10gPDwgZCwgZCArPSA4XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF8gLT0gbCwgdC50b3RhbF9vdXQgKz0gXywgYS50b3RhbCArPSBfLCBfICYmICh0LmFkbGVyID0gYS5jaGVjayA9IGEuZmxhZ3MgPyBDKGEuY2hlY2ssIG4sIF8sIHMgLSBfKSA6IFIoYS5jaGVjaywgbiwgXywgcyAtIF8pKSwgXyA9IGwsIChhLmZsYWdzID8gaCA6IEwoaCkpICE9PSBhLmNoZWNrKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Lm1zZyA9IFxcXCJpbmNvcnJlY3QgZGF0YSBjaGVja1xcXCIsIGEubW9kZSA9IDMwO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gaCA9IDBcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgYS5tb2RlID0gMjg7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI4OlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhLndyYXAgJiYgYS5mbGFncykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgZCA8IDMyOykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDAgPT09IG8pIGJyZWFrIHQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvLS0sIGggKz0gaVtyKytdIDw8IGQsIGQgKz0gOFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoICE9PSAoNDI5NDk2NzI5NSAmIGEudG90YWwpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Lm1zZyA9IFxcXCJpbmNvcnJlY3QgbGVuZ3RoIGNoZWNrXFxcIiwgYS5tb2RlID0gMzA7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgPSBoID0gMFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBhLm1vZGUgPSAyOTtcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjk6XFxuICAgICAgICAgICAgICAgICAgICAgICAgeCA9IDE7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdDtcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzA6XFxuICAgICAgICAgICAgICAgICAgICAgICAgeCA9IC0zO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIDMxOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtNDtcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzI6XFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIHQubmV4dF9vdXQgPSBzLCB0LmF2YWlsX291dCA9IGwsIHQubmV4dF9pbiA9IHIsIHQuYXZhaWxfaW4gPSBvLCBhLmhvbGQgPSBoLCBhLmJpdHMgPSBkLCAoYS53c2l6ZSB8fCBfICE9PSB0LmF2YWlsX291dCAmJiBhLm1vZGUgPCAzMCAmJiAoYS5tb2RlIDwgMjcgfHwgNCAhPT0gZSkpICYmIGoodCwgdC5vdXRwdXQsIHQubmV4dF9vdXQsIF8gLSB0LmF2YWlsX291dCkgPyAoYS5tb2RlID0gMzEsIC00KSA6IChmIC09IHQuYXZhaWxfaW4sIF8gLT0gdC5hdmFpbF9vdXQsIHQudG90YWxfaW4gKz0gZiwgdC50b3RhbF9vdXQgKz0gXywgYS50b3RhbCArPSBfLCBhLndyYXAgJiYgXyAmJiAodC5hZGxlciA9IGEuY2hlY2sgPSBhLmZsYWdzID8gQyhhLmNoZWNrLCBuLCBfLCB0Lm5leHRfb3V0IC0gXykgOiBSKGEuY2hlY2ssIG4sIF8sIHQubmV4dF9vdXQgLSBfKSksIHQuZGF0YV90eXBlID0gYS5iaXRzICsgKGEubGFzdCA/IDY0IDogMCkgKyAoMTIgPT09IGEubW9kZSA/IDEyOCA6IDApICsgKDIwID09PSBhLm1vZGUgfHwgMTUgPT09IGEubW9kZSA/IDI1NiA6IDApLCAoMCA9PT0gZiAmJiAwID09PSBfIHx8IDQgPT09IGUpICYmIHggPT09IFUgJiYgKHggPSAtNSksIHgpXFxuICAgICAgICAgICAgfSwgYS5pbmZsYXRlRW5kID0gZnVuY3Rpb24odCkge1xcbiAgICAgICAgICAgICAgICBpZiAoIXQgfHwgIXQuc3RhdGUpIHJldHVybiBUO1xcbiAgICAgICAgICAgICAgICB2YXIgZSA9IHQuc3RhdGU7XFxuICAgICAgICAgICAgICAgIHJldHVybiBlLndpbmRvdyAmJiAoZS53aW5kb3cgPSBudWxsKSwgdC5zdGF0ZSA9IG51bGwsIFVcXG4gICAgICAgICAgICB9LCBhLmluZmxhdGVHZXRIZWFkZXIgPSBmdW5jdGlvbih0LCBlKSB7XFxuICAgICAgICAgICAgICAgIHZhciBhO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdCAmJiB0LnN0YXRlID8gMCA9PSAoMiAmIChhID0gdC5zdGF0ZSkud3JhcCkgPyBUIDogKChhLmhlYWQgPSBlKS5kb25lID0gITEsIFUpIDogVFxcbiAgICAgICAgICAgIH0sIGEuaW5mbGF0ZVNldERpY3Rpb25hcnkgPSBmdW5jdGlvbih0LCBlKSB7XFxuICAgICAgICAgICAgICAgIHZhciBhLCBpID0gZS5sZW5ndGg7XFxuICAgICAgICAgICAgICAgIHJldHVybiB0ICYmIHQuc3RhdGUgPyAwICE9PSAoYSA9IHQuc3RhdGUpLndyYXAgJiYgMTEgIT09IGEubW9kZSA/IFQgOiAxMSA9PT0gYS5tb2RlICYmIFIoMSwgZSwgaSwgMCkgIT09IGEuY2hlY2sgPyAtMyA6IGoodCwgZSwgaSwgaSkgPyAoYS5tb2RlID0gMzEsIC00KSA6IChhLmhhdmVkaWN0ID0gMSwgVSkgOiBUXFxuICAgICAgICAgICAgfSwgYS5pbmZsYXRlSW5mbyA9IFxcXCJwYWtvIGluZmxhdGUgKGZyb20gTm9kZWNhIHByb2plY3QpXFxcIlxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIFxcXCIuLi91dGlscy9jb21tb25cXFwiOiAzLFxcbiAgICAgICAgICAgIFxcXCIuL2FkbGVyMzJcXFwiOiA1LFxcbiAgICAgICAgICAgIFxcXCIuL2NyYzMyXFxcIjogNyxcXG4gICAgICAgICAgICBcXFwiLi9pbmZmYXN0XFxcIjogMTAsXFxuICAgICAgICAgICAgXFxcIi4vaW5mdHJlZXNcXFwiOiAxMlxcbiAgICAgICAgfV0sXFxuICAgICAgICAxMjogW2Z1bmN0aW9uKHQsIGUsIGEpIHtcXG4gICAgICAgICAgICBcXFwidXNlIHN0cmljdFxcXCI7XFxuICAgICAgICAgICAgdmFyIEQgPSB0KFxcXCIuLi91dGlscy9jb21tb25cXFwiKSxcXG4gICAgICAgICAgICAgICAgSSA9IFszLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEzLCAxNSwgMTcsIDE5LCAyMywgMjcsIDMxLCAzNSwgNDMsIDUxLCA1OSwgNjcsIDgzLCA5OSwgMTE1LCAxMzEsIDE2MywgMTk1LCAyMjcsIDI1OCwgMCwgMF0sXFxuICAgICAgICAgICAgICAgIFUgPSBbMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNywgMTcsIDE3LCAxNywgMTgsIDE4LCAxOCwgMTgsIDE5LCAxOSwgMTksIDE5LCAyMCwgMjAsIDIwLCAyMCwgMjEsIDIxLCAyMSwgMjEsIDE2LCA3MiwgNzhdLFxcbiAgICAgICAgICAgICAgICBUID0gWzEsIDIsIDMsIDQsIDUsIDcsIDksIDEzLCAxNywgMjUsIDMzLCA0OSwgNjUsIDk3LCAxMjksIDE5MywgMjU3LCAzODUsIDUxMywgNzY5LCAxMDI1LCAxNTM3LCAyMDQ5LCAzMDczLCA0MDk3LCA2MTQ1LCA4MTkzLCAxMjI4OSwgMTYzODUsIDI0NTc3LCAwLCAwXSxcXG4gICAgICAgICAgICAgICAgRiA9IFsxNiwgMTYsIDE2LCAxNiwgMTcsIDE3LCAxOCwgMTgsIDE5LCAxOSwgMjAsIDIwLCAyMSwgMjEsIDIyLCAyMiwgMjMsIDIzLCAyNCwgMjQsIDI1LCAyNSwgMjYsIDI2LCAyNywgMjcsIDI4LCAyOCwgMjksIDI5LCA2NCwgNjRdO1xcbiAgICAgICAgICAgIGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHQsIGUsIGEsIGksIG4sIHIsIHMsIG8pIHtcXG4gICAgICAgICAgICAgICAgdmFyIGwsIGgsIGQsIGYsIF8sIHUsIGMsIGIsIGcsIG0gPSBvLmJpdHMsXFxuICAgICAgICAgICAgICAgICAgICB3ID0gMCxcXG4gICAgICAgICAgICAgICAgICAgIHAgPSAwLFxcbiAgICAgICAgICAgICAgICAgICAgdiA9IDAsXFxuICAgICAgICAgICAgICAgICAgICBrID0gMCxcXG4gICAgICAgICAgICAgICAgICAgIHkgPSAwLFxcbiAgICAgICAgICAgICAgICAgICAgeCA9IDAsXFxuICAgICAgICAgICAgICAgICAgICB6ID0gMCxcXG4gICAgICAgICAgICAgICAgICAgIEIgPSAwLFxcbiAgICAgICAgICAgICAgICAgICAgUyA9IDAsXFxuICAgICAgICAgICAgICAgICAgICBFID0gMCxcXG4gICAgICAgICAgICAgICAgICAgIEEgPSBudWxsLFxcbiAgICAgICAgICAgICAgICAgICAgWiA9IDAsXFxuICAgICAgICAgICAgICAgICAgICBSID0gbmV3IEQuQnVmMTYoMTYpLFxcbiAgICAgICAgICAgICAgICAgICAgQyA9IG5ldyBELkJ1ZjE2KDE2KSxcXG4gICAgICAgICAgICAgICAgICAgIE4gPSBudWxsLFxcbiAgICAgICAgICAgICAgICAgICAgTyA9IDA7XFxuICAgICAgICAgICAgICAgIGZvciAodyA9IDA7IHcgPD0gMTU7IHcrKykgUlt3XSA9IDA7XFxuICAgICAgICAgICAgICAgIGZvciAocCA9IDA7IHAgPCBpOyBwKyspIFJbZVthICsgcF1dKys7XFxuICAgICAgICAgICAgICAgIGZvciAoeSA9IG0sIGsgPSAxNTsgMSA8PSBrICYmIDAgPT09IFJba107IGstLSk7XFxuICAgICAgICAgICAgICAgIGlmIChrIDwgeSAmJiAoeSA9IGspLCAwID09PSBrKSByZXR1cm4gbltyKytdID0gMjA5NzE1MjAsIG5bcisrXSA9IDIwOTcxNTIwLCBvLmJpdHMgPSAxLCAwO1xcbiAgICAgICAgICAgICAgICBmb3IgKHYgPSAxOyB2IDwgayAmJiAwID09PSBSW3ZdOyB2KyspO1xcbiAgICAgICAgICAgICAgICBmb3IgKHkgPCB2ICYmICh5ID0gdiksIHcgPSBCID0gMTsgdyA8PSAxNTsgdysrKVxcbiAgICAgICAgICAgICAgICAgICAgaWYgKEIgPDw9IDEsIChCIC09IFJbd10pIDwgMCkgcmV0dXJuIC0xO1xcbiAgICAgICAgICAgICAgICBpZiAoMCA8IEIgJiYgKDAgPT09IHQgfHwgMSAhPT0gaykpIHJldHVybiAtMTtcXG4gICAgICAgICAgICAgICAgZm9yIChDWzFdID0gMCwgdyA9IDE7IHcgPCAxNTsgdysrKSBDW3cgKyAxXSA9IENbd10gKyBSW3ddO1xcbiAgICAgICAgICAgICAgICBmb3IgKHAgPSAwOyBwIDwgaTsgcCsrKSAwICE9PSBlW2EgKyBwXSAmJiAoc1tDW2VbYSArIHBdXSsrXSA9IHApO1xcbiAgICAgICAgICAgICAgICBpZiAoMCA9PT0gdCA/IChBID0gTiA9IHMsIHUgPSAxOSkgOiAxID09PSB0ID8gKEEgPSBJLCBaIC09IDI1NywgTiA9IFUsIE8gLT0gMjU3LCB1ID0gMjU2KSA6IChBID0gVCwgTiA9IEYsIHUgPSAtMSksIHcgPSB2LCBfID0gciwgeiA9IHAgPSBFID0gMCwgZCA9IC0xLCBmID0gKFMgPSAxIDw8ICh4ID0geSkpIC0gMSwgMSA9PT0gdCAmJiA4NTIgPCBTIHx8IDIgPT09IHQgJiYgNTkyIDwgUykgcmV0dXJuIDE7XFxuICAgICAgICAgICAgICAgIGZvciAoOzspIHtcXG4gICAgICAgICAgICAgICAgICAgIGZvciAoYyA9IHcgLSB6LCBzW3BdIDwgdSA/IChiID0gMCwgZyA9IHNbcF0pIDogc1twXSA+IHUgPyAoYiA9IE5bTyArIHNbcF1dLCBnID0gQVtaICsgc1twXV0pIDogKGIgPSA5NiwgZyA9IDApLCBsID0gMSA8PCB3IC0geiwgdiA9IGggPSAxIDw8IHg7IG5bXyArIChFID4+IHopICsgKGggLT0gbCldID0gYyA8PCAyNCB8IGIgPDwgMTYgfCBnIHwgMCwgMCAhPT0gaDspO1xcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsID0gMSA8PCB3IC0gMTsgRSAmIGw7KSBsID4+PSAxO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKDAgIT09IGwgPyAoRSAmPSBsIC0gMSwgRSArPSBsKSA6IEUgPSAwLCBwKyssIDAgPT0gLS1SW3ddKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHcgPT09IGspIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHcgPSBlW2EgKyBzW3BdXVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgaWYgKHkgPCB3ICYmIChFICYgZikgIT09IGQpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDAgPT09IHogJiYgKHogPSB5KSwgXyArPSB2LCBCID0gMSA8PCAoeCA9IHcgLSB6KTsgeCArIHogPCBrICYmICEoKEIgLT0gUlt4ICsgel0pIDw9IDApOykgeCsrLCBCIDw8PSAxO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTICs9IDEgPDwgeCwgMSA9PT0gdCAmJiA4NTIgPCBTIHx8IDIgPT09IHQgJiYgNTkyIDwgUykgcmV0dXJuIDE7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbltkID0gRSAmIGZdID0geSA8PCAyNCB8IHggPDwgMTYgfCBfIC0gciB8IDBcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gMCAhPT0gRSAmJiAobltfICsgRV0gPSB3IC0geiA8PCAyNCB8IDY0IDw8IDE2IHwgMCksIG8uYml0cyA9IHksIDBcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgXFxcIi4uL3V0aWxzL2NvbW1vblxcXCI6IDNcXG4gICAgICAgIH1dLFxcbiAgICAgICAgMTM6IFtmdW5jdGlvbih0LCBlLCBhKSB7XFxuICAgICAgICAgICAgXFxcInVzZSBzdHJpY3RcXFwiO1xcbiAgICAgICAgICAgIGUuZXhwb3J0cyA9IHtcXG4gICAgICAgICAgICAgICAgMjogXFxcIm5lZWQgZGljdGlvbmFyeVxcXCIsXFxuICAgICAgICAgICAgICAgIDE6IFxcXCJzdHJlYW0gZW5kXFxcIixcXG4gICAgICAgICAgICAgICAgMDogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCItMVxcXCI6IFxcXCJmaWxlIGVycm9yXFxcIixcXG4gICAgICAgICAgICAgICAgXFxcIi0yXFxcIjogXFxcInN0cmVhbSBlcnJvclxcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCItM1xcXCI6IFxcXCJkYXRhIGVycm9yXFxcIixcXG4gICAgICAgICAgICAgICAgXFxcIi00XFxcIjogXFxcImluc3VmZmljaWVudCBtZW1vcnlcXFwiLFxcbiAgICAgICAgICAgICAgICBcXFwiLTVcXFwiOiBcXFwiYnVmZmVyIGVycm9yXFxcIixcXG4gICAgICAgICAgICAgICAgXFxcIi02XFxcIjogXFxcImluY29tcGF0aWJsZSB2ZXJzaW9uXFxcIlxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIHt9XSxcXG4gICAgICAgIDE0OiBbZnVuY3Rpb24odCwgZSwgYSkge1xcbiAgICAgICAgICAgIFxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4gICAgICAgICAgICB2YXIgbCA9IHQoXFxcIi4uL3V0aWxzL2NvbW1vblxcXCIpLFxcbiAgICAgICAgICAgICAgICBvID0gMCxcXG4gICAgICAgICAgICAgICAgaCA9IDE7XFxuXFxuICAgICAgICAgICAgZnVuY3Rpb24gaSh0KSB7XFxuICAgICAgICAgICAgICAgIGZvciAodmFyIGUgPSB0Lmxlbmd0aDsgMCA8PSAtLWU7KSB0W2VdID0gMFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB2YXIgZCA9IDAsXFxuICAgICAgICAgICAgICAgIHMgPSAyOSxcXG4gICAgICAgICAgICAgICAgZiA9IDI1NixcXG4gICAgICAgICAgICAgICAgXyA9IGYgKyAxICsgcyxcXG4gICAgICAgICAgICAgICAgdSA9IDMwLFxcbiAgICAgICAgICAgICAgICBjID0gMTksXFxuICAgICAgICAgICAgICAgIGcgPSAyICogXyArIDEsXFxuICAgICAgICAgICAgICAgIG0gPSAxNSxcXG4gICAgICAgICAgICAgICAgbiA9IDE2LFxcbiAgICAgICAgICAgICAgICBiID0gNyxcXG4gICAgICAgICAgICAgICAgdyA9IDI1NixcXG4gICAgICAgICAgICAgICAgcCA9IDE2LFxcbiAgICAgICAgICAgICAgICB2ID0gMTcsXFxuICAgICAgICAgICAgICAgIGsgPSAxOCxcXG4gICAgICAgICAgICAgICAgeSA9IFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAyLCAyLCAyLCAyLCAzLCAzLCAzLCAzLCA0LCA0LCA0LCA0LCA1LCA1LCA1LCA1LCAwXSxcXG4gICAgICAgICAgICAgICAgeCA9IFswLCAwLCAwLCAwLCAxLCAxLCAyLCAyLCAzLCAzLCA0LCA0LCA1LCA1LCA2LCA2LCA3LCA3LCA4LCA4LCA5LCA5LCAxMCwgMTAsIDExLCAxMSwgMTIsIDEyLCAxMywgMTNdLFxcbiAgICAgICAgICAgICAgICB6ID0gWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIsIDMsIDddLFxcbiAgICAgICAgICAgICAgICBCID0gWzE2LCAxNywgMTgsIDAsIDgsIDcsIDksIDYsIDEwLCA1LCAxMSwgNCwgMTIsIDMsIDEzLCAyLCAxNCwgMSwgMTVdLFxcbiAgICAgICAgICAgICAgICBTID0gbmV3IEFycmF5KDIgKiAoXyArIDIpKTtcXG4gICAgICAgICAgICBpKFMpO1xcbiAgICAgICAgICAgIHZhciBFID0gbmV3IEFycmF5KDIgKiB1KTtcXG4gICAgICAgICAgICBpKEUpO1xcbiAgICAgICAgICAgIHZhciBBID0gbmV3IEFycmF5KDUxMik7XFxuICAgICAgICAgICAgaShBKTtcXG4gICAgICAgICAgICB2YXIgWiA9IG5ldyBBcnJheSgyNTYpO1xcbiAgICAgICAgICAgIGkoWik7XFxuICAgICAgICAgICAgdmFyIFIgPSBuZXcgQXJyYXkocyk7XFxuICAgICAgICAgICAgaShSKTtcXG4gICAgICAgICAgICB2YXIgQywgTiwgTywgRCA9IG5ldyBBcnJheSh1KTtcXG5cXG4gICAgICAgICAgICBmdW5jdGlvbiBJKHQsIGUsIGEsIGksIG4pIHtcXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0aWNfdHJlZSA9IHQsIHRoaXMuZXh0cmFfYml0cyA9IGUsIHRoaXMuZXh0cmFfYmFzZSA9IGEsIHRoaXMuZWxlbXMgPSBpLCB0aGlzLm1heF9sZW5ndGggPSBuLCB0aGlzLmhhc19zdHJlZSA9IHQgJiYgdC5sZW5ndGhcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgZnVuY3Rpb24gcih0LCBlKSB7XFxuICAgICAgICAgICAgICAgIHRoaXMuZHluX3RyZWUgPSB0LCB0aGlzLm1heF9jb2RlID0gMCwgdGhpcy5zdGF0X2Rlc2MgPSBlXFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIGZ1bmN0aW9uIFUodCkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdCA8IDI1NiA/IEFbdF0gOiBBWzI1NiArICh0ID4+PiA3KV1cXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgZnVuY3Rpb24gVCh0LCBlKSB7XFxuICAgICAgICAgICAgICAgIHQucGVuZGluZ19idWZbdC5wZW5kaW5nKytdID0gMjU1ICYgZSwgdC5wZW5kaW5nX2J1Zlt0LnBlbmRpbmcrK10gPSBlID4+PiA4ICYgMjU1XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIGZ1bmN0aW9uIEYodCwgZSwgYSkge1xcbiAgICAgICAgICAgICAgICB0LmJpX3ZhbGlkID4gbiAtIGEgPyAodC5iaV9idWYgfD0gZSA8PCB0LmJpX3ZhbGlkICYgNjU1MzUsIFQodCwgdC5iaV9idWYpLCB0LmJpX2J1ZiA9IGUgPj4gbiAtIHQuYmlfdmFsaWQsIHQuYmlfdmFsaWQgKz0gYSAtIG4pIDogKHQuYmlfYnVmIHw9IGUgPDwgdC5iaV92YWxpZCAmIDY1NTM1LCB0LmJpX3ZhbGlkICs9IGEpXFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIGZ1bmN0aW9uIEwodCwgZSwgYSkge1xcbiAgICAgICAgICAgICAgICBGKHQsIGFbMiAqIGVdLCBhWzIgKiBlICsgMV0pXFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIGZ1bmN0aW9uIEgodCwgZSkge1xcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBhID0gMDsgYSB8PSAxICYgdCwgdCA+Pj49IDEsIGEgPDw9IDEsIDAgPCAtLWU7KTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGEgPj4+IDFcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgZnVuY3Rpb24gaih0LCBlLCBhKSB7XFxuICAgICAgICAgICAgICAgIHZhciBpLCBuLCByID0gbmV3IEFycmF5KG0gKyAxKSxcXG4gICAgICAgICAgICAgICAgICAgIHMgPSAwO1xcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAxOyBpIDw9IG07IGkrKykgcltpXSA9IHMgPSBzICsgYVtpIC0gMV0gPDwgMTtcXG4gICAgICAgICAgICAgICAgZm9yIChuID0gMDsgbiA8PSBlOyBuKyspIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBvID0gdFsyICogbiArIDFdO1xcbiAgICAgICAgICAgICAgICAgICAgMCAhPT0gbyAmJiAodFsyICogbl0gPSBIKHJbb10rKywgbykpXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgZnVuY3Rpb24gSyh0KSB7XFxuICAgICAgICAgICAgICAgIHZhciBlO1xcbiAgICAgICAgICAgICAgICBmb3IgKGUgPSAwOyBlIDwgXzsgZSsrKSB0LmR5bl9sdHJlZVsyICogZV0gPSAwO1xcbiAgICAgICAgICAgICAgICBmb3IgKGUgPSAwOyBlIDwgdTsgZSsrKSB0LmR5bl9kdHJlZVsyICogZV0gPSAwO1xcbiAgICAgICAgICAgICAgICBmb3IgKGUgPSAwOyBlIDwgYzsgZSsrKSB0LmJsX3RyZWVbMiAqIGVdID0gMDtcXG4gICAgICAgICAgICAgICAgdC5keW5fbHRyZWVbMiAqIHddID0gMSwgdC5vcHRfbGVuID0gdC5zdGF0aWNfbGVuID0gMCwgdC5sYXN0X2xpdCA9IHQubWF0Y2hlcyA9IDBcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgZnVuY3Rpb24gTSh0KSB7XFxuICAgICAgICAgICAgICAgIDggPCB0LmJpX3ZhbGlkID8gVCh0LCB0LmJpX2J1ZikgOiAwIDwgdC5iaV92YWxpZCAmJiAodC5wZW5kaW5nX2J1Zlt0LnBlbmRpbmcrK10gPSB0LmJpX2J1ZiksIHQuYmlfYnVmID0gMCwgdC5iaV92YWxpZCA9IDBcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgZnVuY3Rpb24gUCh0LCBlLCBhLCBpKSB7XFxuICAgICAgICAgICAgICAgIHZhciBuID0gMiAqIGUsXFxuICAgICAgICAgICAgICAgICAgICByID0gMiAqIGE7XFxuICAgICAgICAgICAgICAgIHJldHVybiB0W25dIDwgdFtyXSB8fCB0W25dID09PSB0W3JdICYmIGlbZV0gPD0gaVthXVxcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBmdW5jdGlvbiBZKHQsIGUsIGEpIHtcXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IHQuaGVhcFthXSwgbiA9IGEgPDwgMTsgbiA8PSB0LmhlYXBfbGVuICYmIChuIDwgdC5oZWFwX2xlbiAmJiBQKGUsIHQuaGVhcFtuICsgMV0sIHQuaGVhcFtuXSwgdC5kZXB0aCkgJiYgbisrLCAhUChlLCBpLCB0LmhlYXBbbl0sIHQuZGVwdGgpKTspIHQuaGVhcFthXSA9IHQuaGVhcFtuXSwgYSA9IG4sIG4gPDw9IDE7XFxuICAgICAgICAgICAgICAgIHQuaGVhcFthXSA9IGlcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgZnVuY3Rpb24gcSh0LCBlLCBhKSB7XFxuICAgICAgICAgICAgICAgIHZhciBpLCBuLCByLCBzLCBvID0gMDtcXG4gICAgICAgICAgICAgICAgaWYgKDAgIT09IHQubGFzdF9saXQpXFxuICAgICAgICAgICAgICAgICAgICBmb3IgKDsgaSA9IHQucGVuZGluZ19idWZbdC5kX2J1ZiArIDIgKiBvXSA8PCA4IHwgdC5wZW5kaW5nX2J1Zlt0LmRfYnVmICsgMiAqIG8gKyAxXSwgbiA9IHQucGVuZGluZ19idWZbdC5sX2J1ZiArIG9dLCBvKyssIDAgPT09IGkgPyBMKHQsIG4sIGUpIDogKEwodCwgKHIgPSBaW25dKSArIGYgKyAxLCBlKSwgMCAhPT0gKHMgPSB5W3JdKSAmJiBGKHQsIG4gLT0gUltyXSwgcyksIEwodCwgciA9IFUoLS1pKSwgYSksIDAgIT09IChzID0geFtyXSkgJiYgRih0LCBpIC09IERbcl0sIHMpKSwgbyA8IHQubGFzdF9saXQ7KTtcXG4gICAgICAgICAgICAgICAgTCh0LCB3LCBlKVxcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBmdW5jdGlvbiBHKHQsIGUpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGEsIGksIG4sIHIgPSBlLmR5bl90cmVlLFxcbiAgICAgICAgICAgICAgICAgICAgcyA9IGUuc3RhdF9kZXNjLnN0YXRpY190cmVlLFxcbiAgICAgICAgICAgICAgICAgICAgbyA9IGUuc3RhdF9kZXNjLmhhc19zdHJlZSxcXG4gICAgICAgICAgICAgICAgICAgIGwgPSBlLnN0YXRfZGVzYy5lbGVtcyxcXG4gICAgICAgICAgICAgICAgICAgIGggPSAtMTtcXG4gICAgICAgICAgICAgICAgZm9yICh0LmhlYXBfbGVuID0gMCwgdC5oZWFwX21heCA9IGcsIGEgPSAwOyBhIDwgbDsgYSsrKSAwICE9PSByWzIgKiBhXSA/ICh0LmhlYXBbKyt0LmhlYXBfbGVuXSA9IGggPSBhLCB0LmRlcHRoW2FdID0gMCkgOiByWzIgKiBhICsgMV0gPSAwO1xcbiAgICAgICAgICAgICAgICBmb3IgKDsgdC5oZWFwX2xlbiA8IDI7KSByWzIgKiAobiA9IHQuaGVhcFsrK3QuaGVhcF9sZW5dID0gaCA8IDIgPyArK2ggOiAwKV0gPSAxLCB0LmRlcHRoW25dID0gMCwgdC5vcHRfbGVuLS0sIG8gJiYgKHQuc3RhdGljX2xlbiAtPSBzWzIgKiBuICsgMV0pO1xcbiAgICAgICAgICAgICAgICBmb3IgKGUubWF4X2NvZGUgPSBoLCBhID0gdC5oZWFwX2xlbiA+PiAxOyAxIDw9IGE7IGEtLSkgWSh0LCByLCBhKTtcXG4gICAgICAgICAgICAgICAgZm9yIChuID0gbDsgYSA9IHQuaGVhcFsxXSwgdC5oZWFwWzFdID0gdC5oZWFwW3QuaGVhcF9sZW4tLV0sIFkodCwgciwgMSksIGkgPSB0LmhlYXBbMV0sIHQuaGVhcFstLXQuaGVhcF9tYXhdID0gYSwgdC5oZWFwWy0tdC5oZWFwX21heF0gPSBpLCByWzIgKiBuXSA9IHJbMiAqIGFdICsgclsyICogaV0sIHQuZGVwdGhbbl0gPSAodC5kZXB0aFthXSA+PSB0LmRlcHRoW2ldID8gdC5kZXB0aFthXSA6IHQuZGVwdGhbaV0pICsgMSwgclsyICogYSArIDFdID0gclsyICogaSArIDFdID0gbiwgdC5oZWFwWzFdID0gbisrLCBZKHQsIHIsIDEpLCAyIDw9IHQuaGVhcF9sZW47KTtcXG4gICAgICAgICAgICAgICAgdC5oZWFwWy0tdC5oZWFwX21heF0gPSB0LmhlYXBbMV0sXFxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbih0LCBlKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEsIGksIG4sIHIsIHMsIG8sIGwgPSBlLmR5bl90cmVlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoID0gZS5tYXhfY29kZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZCA9IGUuc3RhdF9kZXNjLnN0YXRpY190cmVlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gZS5zdGF0X2Rlc2MuaGFzX3N0cmVlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfID0gZS5zdGF0X2Rlc2MuZXh0cmFfYml0cyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IGUuc3RhdF9kZXNjLmV4dHJhX2Jhc2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBlLnN0YXRfZGVzYy5tYXhfbGVuZ3RoLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gMDtcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHIgPSAwOyByIDw9IG07IHIrKykgdC5ibF9jb3VudFtyXSA9IDA7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsWzIgKiB0LmhlYXBbdC5oZWFwX21heF0gKyAxXSA9IDAsIGEgPSB0LmhlYXBfbWF4ICsgMTsgYSA8IGc7IGErKykgYyA8IChyID0gbFsyICogbFsyICogKGkgPSB0LmhlYXBbYV0pICsgMV0gKyAxXSArIDEpICYmIChyID0gYywgYisrKSwgbFsyICogaSArIDFdID0gciwgaCA8IGkgfHwgKHQuYmxfY291bnRbcl0rKywgcyA9IDAsIHUgPD0gaSAmJiAocyA9IF9baSAtIHVdKSwgbyA9IGxbMiAqIGldLCB0Lm9wdF9sZW4gKz0gbyAqIChyICsgcyksIGYgJiYgKHQuc3RhdGljX2xlbiArPSBvICogKGRbMiAqIGkgKyAxXSArIHMpKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDAgIT09IGIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChyID0gYyAtIDE7IDAgPT09IHQuYmxfY291bnRbcl07KSByLS07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LmJsX2NvdW50W3JdLS0sIHQuYmxfY291bnRbciArIDFdICs9IDIsIHQuYmxfY291bnRbY10tLSwgYiAtPSAyXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKDAgPCBiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChyID0gYzsgMCAhPT0gcjsgci0tKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gdC5ibF9jb3VudFtyXTsgMCAhPT0gaTspIGggPCAobiA9IHQuaGVhcFstLWFdKSB8fCAobFsyICogbiArIDFdICE9PSByICYmICh0Lm9wdF9sZW4gKz0gKHIgLSBsWzIgKiBuICsgMV0pICogbFsyICogbl0sIGxbMiAqIG4gKyAxXSA9IHIpLCBpLS0pXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSh0LCBlKSwgaihyLCBoLCB0LmJsX2NvdW50KVxcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBmdW5jdGlvbiBYKHQsIGUsIGEpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGksIG4sIHIgPSAtMSxcXG4gICAgICAgICAgICAgICAgICAgIHMgPSBlWzFdLFxcbiAgICAgICAgICAgICAgICAgICAgbyA9IDAsXFxuICAgICAgICAgICAgICAgICAgICBsID0gNyxcXG4gICAgICAgICAgICAgICAgICAgIGggPSA0O1xcbiAgICAgICAgICAgICAgICBmb3IgKDAgPT09IHMgJiYgKGwgPSAxMzgsIGggPSAzKSwgZVsyICogKGEgKyAxKSArIDFdID0gNjU1MzUsIGkgPSAwOyBpIDw9IGE7IGkrKykgbiA9IHMsIHMgPSBlWzIgKiAoaSArIDEpICsgMV0sICsrbyA8IGwgJiYgbiA9PT0gcyB8fCAobyA8IGggPyB0LmJsX3RyZWVbMiAqIG5dICs9IG8gOiAwICE9PSBuID8gKG4gIT09IHIgJiYgdC5ibF90cmVlWzIgKiBuXSsrLCB0LmJsX3RyZWVbMiAqIHBdKyspIDogbyA8PSAxMCA/IHQuYmxfdHJlZVsyICogdl0rKyA6IHQuYmxfdHJlZVsyICoga10rKywgciA9IG4sIChvID0gMCkgPT09IHMgPyAobCA9IDEzOCwgaCA9IDMpIDogbiA9PT0gcyA/IChsID0gNiwgaCA9IDMpIDogKGwgPSA3LCBoID0gNCkpXFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIGZ1bmN0aW9uIFcodCwgZSwgYSkge1xcbiAgICAgICAgICAgICAgICB2YXIgaSwgbiwgciA9IC0xLFxcbiAgICAgICAgICAgICAgICAgICAgcyA9IGVbMV0sXFxuICAgICAgICAgICAgICAgICAgICBvID0gMCxcXG4gICAgICAgICAgICAgICAgICAgIGwgPSA3LFxcbiAgICAgICAgICAgICAgICAgICAgaCA9IDQ7XFxuICAgICAgICAgICAgICAgIGZvciAoMCA9PT0gcyAmJiAobCA9IDEzOCwgaCA9IDMpLCBpID0gMDsgaSA8PSBhOyBpKyspXFxuICAgICAgICAgICAgICAgICAgICBpZiAobiA9IHMsIHMgPSBlWzIgKiAoaSArIDEpICsgMV0sICEoKytvIDwgbCAmJiBuID09PSBzKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvIDwgaClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IEwodCwgbiwgdC5ibF90cmVlKSwgMCAhPSAtLW87KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIDAgIT09IG4gPyAobiAhPT0gciAmJiAoTCh0LCBuLCB0LmJsX3RyZWUpLCBvLS0pLCBMKHQsIHAsIHQuYmxfdHJlZSksIEYodCwgbyAtIDMsIDIpKSA6IG8gPD0gMTAgPyAoTCh0LCB2LCB0LmJsX3RyZWUpLCBGKHQsIG8gLSAzLCAzKSkgOiAoTCh0LCBrLCB0LmJsX3RyZWUpLCBGKHQsIG8gLSAxMSwgNykpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBuLCAobyA9IDApID09PSBzID8gKGwgPSAxMzgsIGggPSAzKSA6IG4gPT09IHMgPyAobCA9IDYsIGggPSAzKSA6IChsID0gNywgaCA9IDQpXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGkoRCk7XFxuICAgICAgICAgICAgdmFyIEogPSAhMTtcXG5cXG4gICAgICAgICAgICBmdW5jdGlvbiBRKHQsIGUsIGEsIGkpIHtcXG4gICAgICAgICAgICAgICAgdmFyIG4sIHIsIHMsIG87XFxuICAgICAgICAgICAgICAgIEYodCwgKGQgPDwgMSkgKyAoaSA/IDEgOiAwKSwgMyksIHIgPSBlLCBzID0gYSwgbyA9ICEwLCBNKG4gPSB0KSwgbyAmJiAoVChuLCBzKSwgVChuLCB+cykpLCBsLmFycmF5U2V0KG4ucGVuZGluZ19idWYsIG4ud2luZG93LCByLCBzLCBuLnBlbmRpbmcpLCBuLnBlbmRpbmcgKz0gc1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBhLl90cl9pbml0ID0gZnVuY3Rpb24odCkge1xcbiAgICAgICAgICAgICAgICBKIHx8IChmdW5jdGlvbigpIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciB0LCBlLCBhLCBpLCBuLCByID0gbmV3IEFycmF5KG0gKyAxKTtcXG4gICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IGEgPSAwOyBpIDwgcyAtIDE7IGkrKylcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFJbaV0gPSBhLCB0ID0gMDsgdCA8IDEgPDwgeVtpXTsgdCsrKSBaW2ErK10gPSBpO1xcbiAgICAgICAgICAgICAgICAgICAgZm9yIChaW2EgLSAxXSA9IGksIGkgPSBuID0gMDsgaSA8IDE2OyBpKyspXFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChEW2ldID0gbiwgdCA9IDA7IHQgPCAxIDw8IHhbaV07IHQrKykgQVtuKytdID0gaTtcXG4gICAgICAgICAgICAgICAgICAgIGZvciAobiA+Pj0gNzsgaSA8IHU7IGkrKylcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKERbaV0gPSBuIDw8IDcsIHQgPSAwOyB0IDwgMSA8PCB4W2ldIC0gNzsgdCsrKSBBWzI1NiArIG4rK10gPSBpO1xcbiAgICAgICAgICAgICAgICAgICAgZm9yIChlID0gMDsgZSA8PSBtOyBlKyspIHJbZV0gPSAwO1xcbiAgICAgICAgICAgICAgICAgICAgZm9yICh0ID0gMDsgdCA8PSAxNDM7KSBTWzIgKiB0ICsgMV0gPSA4LCB0KyssIHJbOF0rKztcXG4gICAgICAgICAgICAgICAgICAgIGZvciAoOyB0IDw9IDI1NTspIFNbMiAqIHQgKyAxXSA9IDksIHQrKywgcls5XSsrO1xcbiAgICAgICAgICAgICAgICAgICAgZm9yICg7IHQgPD0gMjc5OykgU1syICogdCArIDFdID0gNywgdCsrLCByWzddKys7XFxuICAgICAgICAgICAgICAgICAgICBmb3IgKDsgdCA8PSAyODc7KSBTWzIgKiB0ICsgMV0gPSA4LCB0KyssIHJbOF0rKztcXG4gICAgICAgICAgICAgICAgICAgIGZvciAoaihTLCBfICsgMSwgciksIHQgPSAwOyB0IDwgdTsgdCsrKSBFWzIgKiB0ICsgMV0gPSA1LCBFWzIgKiB0XSA9IEgodCwgNSk7XFxuICAgICAgICAgICAgICAgICAgICBDID0gbmV3IEkoUywgeSwgZiArIDEsIF8sIG0pLCBOID0gbmV3IEkoRSwgeCwgMCwgdSwgbSksIE8gPSBuZXcgSShuZXcgQXJyYXkoMCksIHosIDAsIGMsIGIpXFxuICAgICAgICAgICAgICAgIH0oKSwgSiA9ICEwKSwgdC5sX2Rlc2MgPSBuZXcgcih0LmR5bl9sdHJlZSwgQyksIHQuZF9kZXNjID0gbmV3IHIodC5keW5fZHRyZWUsIE4pLCB0LmJsX2Rlc2MgPSBuZXcgcih0LmJsX3RyZWUsIE8pLCB0LmJpX2J1ZiA9IDAsIHQuYmlfdmFsaWQgPSAwLCBLKHQpXFxuICAgICAgICAgICAgfSwgYS5fdHJfc3RvcmVkX2Jsb2NrID0gUSwgYS5fdHJfZmx1c2hfYmxvY2sgPSBmdW5jdGlvbih0LCBlLCBhLCBpKSB7XFxuICAgICAgICAgICAgICAgIHZhciBuLCByLCBzID0gMDtcXG4gICAgICAgICAgICAgICAgMCA8IHQubGV2ZWwgPyAoMiA9PT0gdC5zdHJtLmRhdGFfdHlwZSAmJiAodC5zdHJtLmRhdGFfdHlwZSA9IGZ1bmN0aW9uKHQpIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBlLCBhID0gNDA5MzYyNDQ0NztcXG4gICAgICAgICAgICAgICAgICAgIGZvciAoZSA9IDA7IGUgPD0gMzE7IGUrKywgYSA+Pj49IDEpXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDEgJiBhICYmIDAgIT09IHQuZHluX2x0cmVlWzIgKiBlXSkgcmV0dXJuIG87XFxuICAgICAgICAgICAgICAgICAgICBpZiAoMCAhPT0gdC5keW5fbHRyZWVbMThdIHx8IDAgIT09IHQuZHluX2x0cmVlWzIwXSB8fCAwICE9PSB0LmR5bl9sdHJlZVsyNl0pIHJldHVybiBoO1xcbiAgICAgICAgICAgICAgICAgICAgZm9yIChlID0gMzI7IGUgPCBmOyBlKyspXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDAgIT09IHQuZHluX2x0cmVlWzIgKiBlXSkgcmV0dXJuIGg7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb1xcbiAgICAgICAgICAgICAgICB9KHQpKSwgRyh0LCB0LmxfZGVzYyksIEcodCwgdC5kX2Rlc2MpLCBzID0gZnVuY3Rpb24odCkge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIGU7XFxuICAgICAgICAgICAgICAgICAgICBmb3IgKFgodCwgdC5keW5fbHRyZWUsIHQubF9kZXNjLm1heF9jb2RlKSwgWCh0LCB0LmR5bl9kdHJlZSwgdC5kX2Rlc2MubWF4X2NvZGUpLCBHKHQsIHQuYmxfZGVzYyksIGUgPSBjIC0gMTsgMyA8PSBlICYmIDAgPT09IHQuYmxfdHJlZVsyICogQltlXSArIDFdOyBlLS0pO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHQub3B0X2xlbiArPSAzICogKGUgKyAxKSArIDUgKyA1ICsgNCwgZVxcbiAgICAgICAgICAgICAgICB9KHQpLCBuID0gdC5vcHRfbGVuICsgMyArIDcgPj4+IDMsIChyID0gdC5zdGF0aWNfbGVuICsgMyArIDcgPj4+IDMpIDw9IG4gJiYgKG4gPSByKSkgOiBuID0gciA9IGEgKyA1LCBhICsgNCA8PSBuICYmIC0xICE9PSBlID8gUSh0LCBlLCBhLCBpKSA6IDQgPT09IHQuc3RyYXRlZ3kgfHwgciA9PT0gbiA/IChGKHQsIDIgKyAoaSA/IDEgOiAwKSwgMyksIHEodCwgUywgRSkpIDogKEYodCwgNCArIChpID8gMSA6IDApLCAzKSwgZnVuY3Rpb24odCwgZSwgYSwgaSkge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIG47XFxuICAgICAgICAgICAgICAgICAgICBmb3IgKEYodCwgZSAtIDI1NywgNSksIEYodCwgYSAtIDEsIDUpLCBGKHQsIGkgLSA0LCA0KSwgbiA9IDA7IG4gPCBpOyBuKyspIEYodCwgdC5ibF90cmVlWzIgKiBCW25dICsgMV0sIDMpO1xcbiAgICAgICAgICAgICAgICAgICAgVyh0LCB0LmR5bl9sdHJlZSwgZSAtIDEpLCBXKHQsIHQuZHluX2R0cmVlLCBhIC0gMSlcXG4gICAgICAgICAgICAgICAgfSh0LCB0LmxfZGVzYy5tYXhfY29kZSArIDEsIHQuZF9kZXNjLm1heF9jb2RlICsgMSwgcyArIDEpLCBxKHQsIHQuZHluX2x0cmVlLCB0LmR5bl9kdHJlZSkpLCBLKHQpLCBpICYmIE0odClcXG4gICAgICAgICAgICB9LCBhLl90cl90YWxseSA9IGZ1bmN0aW9uKHQsIGUsIGEpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHQucGVuZGluZ19idWZbdC5kX2J1ZiArIDIgKiB0Lmxhc3RfbGl0XSA9IGUgPj4+IDggJiAyNTUsIHQucGVuZGluZ19idWZbdC5kX2J1ZiArIDIgKiB0Lmxhc3RfbGl0ICsgMV0gPSAyNTUgJiBlLCB0LnBlbmRpbmdfYnVmW3QubF9idWYgKyB0Lmxhc3RfbGl0XSA9IDI1NSAmIGEsIHQubGFzdF9saXQrKywgMCA9PT0gZSA/IHQuZHluX2x0cmVlWzIgKiBhXSsrIDogKHQubWF0Y2hlcysrLCBlLS0sIHQuZHluX2x0cmVlWzIgKiAoWlthXSArIGYgKyAxKV0rKywgdC5keW5fZHRyZWVbMiAqIFUoZSldKyspLCB0Lmxhc3RfbGl0ID09PSB0LmxpdF9idWZzaXplIC0gMVxcbiAgICAgICAgICAgIH0sIGEuX3RyX2FsaWduID0gZnVuY3Rpb24odCkge1xcbiAgICAgICAgICAgICAgICB2YXIgZTtcXG4gICAgICAgICAgICAgICAgRih0LCAyLCAzKSwgTCh0LCB3LCBTKSwgMTYgPT09IChlID0gdCkuYmlfdmFsaWQgPyAoVChlLCBlLmJpX2J1ZiksIGUuYmlfYnVmID0gMCwgZS5iaV92YWxpZCA9IDApIDogOCA8PSBlLmJpX3ZhbGlkICYmIChlLnBlbmRpbmdfYnVmW2UucGVuZGluZysrXSA9IDI1NSAmIGUuYmlfYnVmLCBlLmJpX2J1ZiA+Pj0gOCwgZS5iaV92YWxpZCAtPSA4KVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICBcXFwiLi4vdXRpbHMvY29tbW9uXFxcIjogM1xcbiAgICAgICAgfV0sXFxuICAgICAgICAxNTogW2Z1bmN0aW9uKHQsIGUsIGEpIHtcXG4gICAgICAgICAgICBcXFwidXNlIHN0cmljdFxcXCI7XFxuICAgICAgICAgICAgZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XFxuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXQgPSBudWxsLCB0aGlzLm5leHRfaW4gPSAwLCB0aGlzLmF2YWlsX2luID0gMCwgdGhpcy50b3RhbF9pbiA9IDAsIHRoaXMub3V0cHV0ID0gbnVsbCwgdGhpcy5uZXh0X291dCA9IDAsIHRoaXMuYXZhaWxfb3V0ID0gMCwgdGhpcy50b3RhbF9vdXQgPSAwLCB0aGlzLm1zZyA9IFxcXCJcXFwiLCB0aGlzLnN0YXRlID0gbnVsbCwgdGhpcy5kYXRhX3R5cGUgPSAyLCB0aGlzLmFkbGVyID0gMFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIHt9XSxcXG4gICAgICAgIFxcXCIvXFxcIjogW2Z1bmN0aW9uKHQsIGUsIGEpIHtcXG4gICAgICAgICAgICBcXFwidXNlIHN0cmljdFxcXCI7XFxuICAgICAgICAgICAgdmFyIGkgPSB7fTtcXG4gICAgICAgICAgICAoMCwgdChcXFwiLi9saWIvdXRpbHMvY29tbW9uXFxcIikuYXNzaWduKShpLCB0KFxcXCIuL2xpYi9kZWZsYXRlXFxcIiksIHQoXFxcIi4vbGliL2luZmxhdGVcXFwiKSwgdChcXFwiLi9saWIvemxpYi9jb25zdGFudHNcXFwiKSksIGUuZXhwb3J0cyA9IGlcXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICBcXFwiLi9saWIvZGVmbGF0ZVxcXCI6IDEsXFxuICAgICAgICAgICAgXFxcIi4vbGliL2luZmxhdGVcXFwiOiAyLFxcbiAgICAgICAgICAgIFxcXCIuL2xpYi91dGlscy9jb21tb25cXFwiOiAzLFxcbiAgICAgICAgICAgIFxcXCIuL2xpYi96bGliL2NvbnN0YW50c1xcXCI6IDZcXG4gICAgICAgIH1dXFxuICAgIH0sIHt9LCBbXSkoXFxcIi9cXFwiKVxcbn0pO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5b+r5o235pCc57SiXCIsXCJwYXRoXCI6XCJxc2VhcmNoZFwiLFwicnVsZVwiOlwiLy/mkJzntKLvvIzku6XkuIvln7rmnKzkuI3pnIDopoHkv67mlLnjgIJcXG5kLnB1c2goe1xcbiAgICBjb2xfdHlwZTogJ2xpbmUnXFxufSlcXG5cXG5cXG50cnkge1xcbiAgICBcXG4gICAgdmFyIHRpdGxlID0gZ2V0UGFnZVRpdGxlKCk7XFxuICAgIHZhciBDb2xvciA9IFxcXCIjZjEzYjY2YVxcXCI7XFxuICAgIHZhciBDb2xvcjEgPSBcXFwiIzA5OEFDMVxcXCI7XFxuXFxuXFxuXFxuICAgIGZ1bmN0aW9uIGdldEhlYWQodGl0bGUpIHtcXG4gICAgICAgIHJldHVybiAn4oCY4oCY4oCZ4oCZPHN0cm9uZz48Zm9udCBjb2xvcj1cXFwiJyArIENvbG9yICsgJ1xcXCI+JyArIHRpdGxlICsgJzwvZnJvbnQ+PC9zdHJvbmc+JztcXG4gICAgfVxcbn0gY2F0Y2gge31cXG5cXG52YXIgcnVsZXMgPSB7XFxuICAgIFxcXCJxdWlja1NlYXJjaENvbmZpZ3NcXFwiOiB7XFxuICAgICAgICBcXFwibW9kZVxcXCI6IFxcXCJpY29uX3JvdW5kX3NtYWxsXzRcXFwiLFxcbiAgICAgICAgXFxcIm9yZGVyXFxcIjogW1xcXCLmtbfpmJTmkJzntKJcXFwiLCBcXFwi6aOO5b2xXFxcIiwgXFxcIummmeaDhVxcXCIsIFxcXCLogZrlvbFcXFwiXSxcXG4gICAgICAgIFxcXCLmtbfpmJTmkJzntKJcXFwiOiB7XFxuICAgICAgICAgICAgXFxcIm5hbWVcXFwiOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBcXFwicGljXFxcIjogXFxcImh0dHBzOi8vaGlrZXJmYW5zLmNvbS90dWJpYW8vbW92aWUvMTM1LnN2Z1xcXCJcXG4gICAgICAgIH0sXFxuICAgICAgICBcXFwi6aOO5b2xXFxcIjoge1xcbiAgICAgICAgICAgIFxcXCJuYW1lXFxcIjogXFxcIumjjuW9sVxcXCIsXFxuICAgICAgICAgICAgXFxcInBpY1xcXCI6IFxcXCJodHRwczovL3BpYzEuaW1nZGIuY24vaXRlbS82MzQ2YmVkYTE2ZjJjMmJlYjFmMWJiZGUuanBnXFxcIixcXG4gICAgICAgICAgICBcXFwicnVsZVxcXCI6IFxcXCJjb3B5Oi8vaHR0cHM6Ly9uZXRjdXQuY24vcC9mNmZlM2JlYzg3MDI1ZDVlXFxcIlxcbiAgICAgICAgfSxcXG4gICAgICAgIFxcXCLpppnmg4VcXFwiOiB7XFxuICAgICAgICAgICAgXFxcIm5hbWVcXFwiOiBcXFwi6aaZ5oOF5b2x6KeGXFxcIixcXG4gICAgICAgICAgICBcXFwicGljXFxcIjogXFxcImh0dHBzOi8vY29kZWJlcmcub3JnL2x6azIzNTU5L1B1YmxpY1J1bGUvcmF3L2JyYW5jaC9tYXN0ZXIveHF5cy5wbmdcXFwiXFxuICAgICAgICB9LFxcbiAgICAgICAgXFxcIuiBmuW9sVxcXCI6IHtcXG4gICAgICAgICAgICBcXFwibmFtZVxcXCI6IFxcXCLogZrlvbHiiJpcXFwiLFxcbiAgICAgICAgICAgIFxcXCJwaWNcXFwiOiBcXFwiaHR0cHM6Ly9pbWcudmludWEuY24vaW1hZ2VzL1FxeUMucG5nXFxcIixcXG4gICAgICAgICAgICBcXFwicnVsZVxcXCI6IFxcXCJjb3B5Omh0dHBzOi8vcGFzdGVtZS50eXJhbnRnLmNvbS94eHh4eHgvdmt2aGJxb3B2NXU2dTZvcFxcXCJcXG4gICAgICAgIH1cXG4gICAgfVxcbn1cXG5cXG52YXIganNvbiA9IHJ1bGVzO1xcbnZhciBsaXN0ID0ganNvbi5xdWlja1NlYXJjaENvbmZpZ3Mub3JkZXI7XFxuXFxuZm9yIChsIGluIGxpc3QpIHtcXG4gICAgdmFyIG9iaiA9IGpzb24ucXVpY2tTZWFyY2hDb25maWdzW2xpc3RbbF1dO1xcbiAgICAvL2xvZyhvYmoubmFtZSlcXG5cXG5cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBsaXN0W2xdLFxcbiAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChvYmosIGhvbWUsIHRpdGxlKSA9PiB7XFxuICAgICAgICAgICAgbGV0IHJ1bGVMaXN0ID0gSlNPTi5wYXJzZShyZXF1ZXN0KGhvbWUpKTtcXG4gICAgICAgICAgICBsZXQgaGFzUnVsZSA9IHJ1bGVMaXN0LnNvbWUoaXRlbSA9PiBpdGVtLnRpdGxlID09PSBvYmoubmFtZSk7XFxuICAgICAgICAgICAgaWYgKGhhc1J1bGUgfHwgb2JqLm5hbWUgPT0gJycpIHtcXG4gICAgICAgICAgICAgICAgLy90b2FzdChcXFwi6K+36YWN572u5b+r6YCf5pCc57SiXFxcIilcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL3NlYXJjaD9zPScgKyB0aXRsZSArICcmcnVsZT0nICsgb2JqLm5hbWU7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG5cXG4gICAgICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShcXFwicnVsZVxcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAob2JqLnJ1bGUuaW5kZXhPZignY29weScpIT0tMSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KFxcXCLlt7Lnu4/lpI3liLbor7flr7zlhaXop4TliJlcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iai5ydWxlXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v6K+35a6J6KOFXFxcIiArIG9iai5uYW1lICsgXFxcIuWwj+eoi+W6j1xcXCI7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LCBvYmosIFxcXCJoaWtlcjovL2hvbWVcXFwiLCB0aXRsZSksXFxuICAgICAgICBwaWNfdXJsOiBvYmoucGljLFxcbiAgICAgICAgY29sX3R5cGU6IGpzb24ucXVpY2tTZWFyY2hDb25maWdzLm1vZGUsXFxuICAgICAgICBleHRyYTp7aWQ6J3FzZWFyY2gnfVxcbiAgICB9KVxcbn1cXG5cXG5cXG4vKiAgICAkKCkubGF6eVJ1bGUoKG9iaiwgaG9tZSwgdGl0bGUpID0+IHtcXG4gICAgICAgIGxldCBydWxlTGlzdCA9IEpTT04ucGFyc2UocmVxdWVzdChob21lKSk7XFxuICAgICAgICBsZXQgaGFzUnVsZSA9IHJ1bGVMaXN0LnNvbWUoaXRlbSA9PiBpdGVtLnRpdGxlID09PSBvYmoubmFtZSk7XFxuICAgICAgICBpZiAoaGFzUnVsZSkge1xcblxcbiAgICAgICAgICAgIC8vdG9hc3QoXFxcIuivt+mFjee9ruW/q+mAn+aQnOe0olxcXCIpXFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL3NlYXJjaD9zPScgKyB0aXRsZSArICcmcnVsZT0nICsgb2JqLm5hbWUsXFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIC8vdG9hc3QoXFxcIuivt+WuieijhemdkuixhuWwj+eoi+W6j1xcXCIpXFxuICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShcXFwicnVsZVxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/or7flronoo4VcXFwiICsgb2JqLm5hbWUgKyBcXFwi5bCP56iL5bqPXFxcIjtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcblxcbiAgICAgICAgICAgICAgICByZXR1cm4gJzInXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICB9LCBvYmosIFxcXCJoaWtlcjovL2hvbWVcXFwiLCB0aXRsZSkqL1xcblxcblxcblxcblxcbi8qZC5wdXNoKHtcXG4gICAgY29sX3R5cGU6ICdsaW5lJ1xcbn0pXFxuKi9cXG5cXG4vKmQucHVzaCh7XFxuICAgIHRpdGxlOiAn6YWN572uJyxcXG4gICAgY29sX3R5cGU6ICdmbGV4X2J1dHRvbicsXFxuICAgIHVybDogJCgpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgIHRvYXN0KFxcXCLngrnlh7vorr7nva7phY3nva7lv6vpgJ/mkJzntKJcXFwiKTtcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9ob21lQOmdkuixhidcXG4gICAgfSlcXG5cXG59KSovXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLop6Plr4ZcIixcInBhdGhcIjpcInBhcnNlXCIsXCJydWxlXCI6XCJqczpcXG5ldmFsUHJpdmF0ZUpTKFxcXCJwWFhSU3laeXFRS1hURjcyQWJNSzFxSW1SUlhTYXd4cXczWlFUemFENGdLcUlMVC9sdmhxV3dZTWNCTEplTXl6Kzhha2hDQmlOazd1SUdPbzNCQkpITkNzUWwzcHFLakh4bzQwMzFSLzBpTFNST2VHdUhqT3I3VFJpU3RmSkRnQzEwQUxEZXJYckhxOU5sVEh3amRWaGVZNEZHa05PSFZ1L2o1eVFmdHVveXdCTzFFWVNBbG5Felg3TjRTaDlMTXVjVlhwVjZrQk9HaFovbEpQUmRQWFZ0bWhqVFk3N29WcW5CYy9ZMWFPTS9wUTRLY3pSRXE2YlRDMHNDY1N5Q0RJSVlDV1BtWERSaml2QjZnQW9sNFpLVDZCRnByTVgvT1g0cHdYZTZoTjQ4UnhVekt5bXpUVVpaaGYwODFpYjR2b3NjblJIUWVCQVBYUCtZODVDMG5IZFZRblFWSUJBUnVvN1lVRXhUdG80OG9XU3I0em9kcUh2c2l4aWNtOEZveUFvcDluUGc2bHRrR2Fkaks4OWQ3TVQvdkt3OG1kbXpaQmY0dHhzOG01b0Q5YVNKMWxlNlAzTGhRbTU4SWhOM2pBNVVxTXJKbzI0OTVIdmd1aktoZnNBTXVZai9YeGVIR0dYOTJwQys0UVRza05ONnVYNE02eTZoSi9BdHVvMDhoZ1EwVGRGUzllR2JJTjNOQ21OUFRLdlBWdWhJVkdPUGZ5TFJ0MWtUSno4RDlWV1AyUHFlRklGTGJRczlheDhqMVdwaE5sK2ZGK2RPVW5xUEtyZkRpQmYvU1VPZ28zRVFCcnZNRitYMlUxQ2lNeEpKWG9WK0lRdjJ5ZFVtbHFxTWw3YmpWdnJhQlE3VkdNK0FHLzNNSFlEN1dMR3FLcG41WWdyNVNKR0JIRjlNS0dtZkNXbWFvTHErNk5LWFI3d2ZtSVJpSXprL00zUDQvZHR2cnpaWnNjSGNxWDVxVGdLdDRNTTMwUmIzb1hRM1laVTNEaGtZUzYrdlNacmV0bVQyUktFWjVoOHFVWnJZU1h0SC80Yzc4dkhHWEYvSTNYMldKYzZpWFd4UXpML2tMdzdjaWNKU0VXeWJ6a1NZZlRhUFZUMnB3TllHNm9PcUkxWjhvTlk1UUEybTAxR0szWXFva1Bua05hdW1OYnVxZEJwTUlRSW1BNHlmN0Faei8yMGJkVVMzdHIyODU5WlhaTHZhZ0dtN0wyL0d5REd6ZmhlZ2ZIeVBHY3I4ZnhEenBTeUFVNXUwWTFydlViUFU3c1hOZXgxcFJzTXRjaFFFYk1sMk8vS3ZISkQ4dUJ2SnpDTCtjTzJvOGVhS1FQSXE0MkV5K0o0TGh5ZVFXb0pqVmFkV1NvR0UzQUMzNkNmOGJzZ0JISzMyQ3lzdFhKYUhRYldrWTFPL2xTYVdISjkrK2JjZDhaZkhhL3hjaTJSUjcxYU01bVFXOW9UNnB6YmhSNi9SMy8zZ3hCN28yNVd5V0RERlR1TmJmMkFFTHhTeXVab2JBNjc1bHlaK0JyQVFzb2VlZTZ4NnE0Z1RWRVZnOVJPZldnd3VJaTl0UFRXSjQ1U1NjNm1acWxMVEpwWXZqU1huaFlpdEIwaFlvVWZwbkVrRVVJSGNUa1BpQWx6YlpYSW5HbXlOUlU3RkEvRk5YV0xFcU8yTHNsY1JiOFBsRVc0Q2lvYmtJUFRGNXFMSGUvVHF0c1h3TCttSStjWjlPSFNHM0RXV2hBK0xrRzlnRmFpWjBKWFliSGJWaU5kQlo4VW1aK0RLdjJ0SDVqOGprUDNNbWpKZEk0YzdqU09GWk5ON2tTRk5GT21sQkljRndOYlh2MGpIUGJQOTdMSFhTMEt2M1hpbUVaMDVVTjFMMVp6bENraXJmV0ZCTHJWdDU0R1p3L3pPaFpvUi9pY3ZFSVFvZ3Z5UnlyK2dSVXlNYm9Cc2FDTkNtdjJzVk55MVB0ZU9Mcko4RzhVUkhPUHdPdjdnUTRYYVdqVVduZ0l5TlpiMURwSERKU2x3M2dNVVhBbGtTZ2g2WnpHZmh3MVgzZ3dGUjh0UURlZ2VrUjNDM3hISDBDYlNSNzIwSmhPNjdBaWwvektnNG5TQU5rWC9EK244VGtmNTZKNG9PVTk0ZDhHQXIwK3dOdVUvNy9Cd1dTRUZtZVpoZkZ1a0V2aFB4WjNpbHhUeWhLYXRYbkc2RjlNWDl4N0hPOGkzNHlpM09TU1haZWU4S3ppTitxNUVCcjNob1N0L29NVEJPTVg3VVg3SlVYZEY5eGpCQm04TFlYNzBLQk5mVDR1SVV0Y01hZG45ek9lNVBvNUVJc2h3MGtBVTNJMmhrT0xhOUtrUmpUTFBVMDAxdDlLWHQ4d3NKTUQ4QVhiVE9SOW14bkw2WFkwRlExOEwwN29YUzhzU0JmV3NHcTFEQXd3SlFFK01MaG1aMWpoSFUxNWxoMVErYUV0U29LRHF3SDNzalA1N3dZNlJuOGtKQ2VDM1pmQ08zMU9ZTU5BTVZZREwyQ2ZodG9SQmYyUVN1RHdTaHY0VFZzZ295dVRkR3I3bzVCekxLbWxyd2Rsa0ZjMWFOM3lVMGc5MHhVMDd3emZKanJVeWFYRU1MQzU1aFJiVkQ4WlhOTFV4bENwMjYrbTRqbFJPZVRWRnA3dWo1YlQ1MmVoWWxadC9GWlJpMEhQdE9CbVdIcWZrWS9lak82OVhoZUJLNTR4RW5YNXJ0VElLQ0VyTFRTR0hqVjBLTURsOEJGcWhLUVN4YytjcFEzK3ZrZFZHVERocFB5RHRLRkNRMGFzdFNhb2VNSGtYSVZSS2ZGRUhRWG1UZVhMT1V0YU40T20yMUQ2YTBCSXRDeUJLbUsrUEVmMEhJYU9pWlpvUmJ2M1Q3SEZvWHFENmtVZGcrMG1STGUyNEEwQU5MQWovMWtWdjNJdUQ2ZElSeDZyVDJET25oSDE2RWFhd2FuSHRYOVZCcW03b1ZrZHJ1TENoUUVFdUQvSkZjc3l5dkxTTlpXYy9zSW4vdldTQUhVOW5rWlFvTEdIMnNUTWNreS9KWjZaT1ErNnRrYTVsSE9WL2lXSVdDU0YvTnVJT05rUzNoZGxja3pCK0hIM1B5dmlqWlVWMWR6VEZBMmpPUjdsUWFkc3NHTWl3c2JsRVRUM0ZMUlEyMHZzU0YxVksyZFNlYm8rUy9qM1dMbWgvampMSnV6N29xRzc0OHl0cUtpMUZhTGRHVlZvTmM4Y2E3N0d3bU5FSkhzYzcyUkorYm51a3ZXU2lnUUZaUXMzMkZ0cmdia2VMTXYrWmM5ZmRxbE9aQ2k0YndSckJzWjFIeUZnWGNLRm9KVlZlbkdSVlFGcGlOcmh5T2EwNWdEUWkzencvSWFkK1dCc0c2N29yUkdMSTMyN3drTlluN1BPRHlLcTZTZkEvanUwTE5MVG12eGtHN3ZHMkpkeXdGUnZTRTdldm1PdXlPTkU3UHJDSHN5WmJjZmhBRFFBcWhaREZHZi9LZFBTRVNJSTNhbS93U2w5a1V6SENwN2d1NlBTaE13Y2xQTVoxc3IyNXRpaWtNNE91Y2NVY0drRFZkOFQ4ZW55T1VtQVUwdG81dE96cGp3cFd6VWRWcXpyWk82L0dncmUwcjVFcEhFc2JDOEEzWGtBYjduelJHNjZCczN1K1Y0SmJzZW00V1Q3WW51SnM4OStrWm0yRE1OTGdpSGlaV3J1SWhsV0FqY2VGTldQMEhGckliN1VucjE4T3J1VW1uWnRZUyt5TzdyTm00Y0JrTjdCTmZsdmgrVGFrK24rSDM1WGpseHdRRVBId3NVUzRCSTRKaHVUekoyaW9IZk5wTWtCL2JiZUNLVmllVUdRWTIya1FFOUs5UXROampCbkpaZlY3RHBoczJUZzhGZHBTdlVGSFYrQzV5a3NsbUpaVC9iZjZ0OEhJT0RKUTBRYkNwRTlOeGxRb2FaSHU2d3d2eWJ5QWl4M05GNHdTd01XQWgwNTMyRjdwS0xOZnNpYUxVaDFnbWFkVS90bVFXNG5lWUVGOUU3YkhjQUV3M0xBRVJJblFWMzIvcDduZHdKMTJYQXM0NXByUVI0enZDY2tCMFlEZDB1Q2ozaUVGWnhpeXh2RmR5QjFnOE00Z2lpZ0dCRmNMcjNmVkcrYURlWGUzdzVlSjczeHpRRkJpckxkS3EvWmhjNi82aU85TFVjNkdaWU96eDV3dDAvQXIzZU5QTGlnMEw0K0E4NzBFTUc3czFQaU9wTytDalFvWDlqeUxEVW85SHBHclVXTmZjbTgzNmJSZXd4WDI5R0psWDAvM0o5d1ZReTB2Y08wM1hhYkZJN1NYODhaNkhpL0lWZ08rQmRXeFBJdXZxVUc3VUZ1bHZreHphK1RXNE1hdDBoeHRZRHJPNUR4RkEySEw5OXViQVoxbVhqNHdDWnc5Um0yR3BxMHl6MEI5TENWdE11aG1MciszWm0wTDZtWDNqM2VNV3pmcGFQZDZQaThGM2ppTmFqU0JLSElUR2dBTU1acTZkcHRwSWlSa2RRSzJwa2hMOFVCdE0ydmFOcCtIanZzbHBwUjJGVTlseTBYU1kzdE5vWEpmRklVTWw4cFJXdmZrZEZDbUwvUXE2VU9DbkVoaWMyQURXRjgzZTh0ak1xa2MyaHRnR3IvZERzWjZPK2E3eUhHcjVwZ2FGTXE3MHlsWnMyRHpjMUl6VE5lSlRab0xVdWtWclJJZmRHVFB1cWJwVm05WVo1aWY3WWlJbHEwblN4VUtpLzY4dmV2NER4L2MvTzc5U0NWa3dJNjlYVURnY2V4QlFXdHFCUEFMQU9wMFNsOXBxREJ5cmlCbllWemlxd3ppZlRLbGNBNU40WjFzZ0ZsZjJXWVhSVGJyUU5rNHBoTElqYnAvc3lrcDRXOGxxL0pXT2dSbnlhdy8wbzJKSnFYV1pCdzQ5SE1UdTcrMHB0SjdaZ2pkSERJYXdTdVFNZTZ4cTAyNTVpUG4vQ0x4WW0yeVUyUGZ3NnN3YlUweWNQcU4vUHh5azFPNERKTmtxWVo3NC9LU3VaNEN2dWdOZWRZZEJ1Sm1VYksvQStTbGUzSGgvTkxOcmhXazRCZXRWZEZYRDdmOUF3dkI5TXJ1WDJXdVFtS2hPczVNdmw3Q0x0bDd0VVNyYURGeUtwdVQ5N1hwTDR3MUVkUG10U2ROQ1FwTktVTzNiVXlndmE4cU9jQlE1SkNQYzNQa1Q3c3BvVkpZMkluOTFWdzY1U3pEYzhaTmlXMFJNbnptbjJ3d1FZNVkxZFRiVFQvNDk0b2hDUzFPazh3RFdUWnUvRHRNRDVpMzJHQXVGb2RYcm5TMVpxdkN1bjMrYWFUUzRodFdZVUo5TGlYMFJWdWNiTVc0RHA1VFJ6ZnU4akljK0dqay93MlZBbis3akk2K0M5R3dJZm1nSEFWZVpWbjRCczBLR3RzaGNRcWowWXc0MVR1ZVBnUHVlbEUzZGRuU3NnMGZBWHhHcElMK1JLVzMzZ2dpT2lqNUhkTk1ocEtvZFAwekViTzVPUytoMUdJak9UOHpjL2o5MjIrdk5sbXh3ZFhBSlp2UUR0TFMyQWlzaDRLRlhlWGlDcG9aNEZzQWdEMTBBZzhTQ3lNR080dTAweHduUWJYWEEwaXhFWXJzMTZ4Y3dqMlVub29pSGZiTzVVYmFneXFsM0FKWFdQc0p0QjMvcGs1b3dJSEppOWFsOU11VHhrN0RpQUcyMDBFZklPR1NuNXRybHFFTkUreDNHYVNvTjFqTThoOU5FODBOUGtYNE5ERmlZTHc2VXdiRmtNVlJGSnM3ZXAzME1abHBJOVpiODM5L1VoMEljU2NHTHdLTVFROXhiZzhENHdYTTl1QTNOOXQ1aUFEUzJGTjhXeGE3OVNJcEUycjloeCtsbFlDSkhLVzNXeCt0c0RnL0lxNW5OMkk1VEgwR3ZVN2R1RE9WNUY1ZGJhTWhPVG1pQUxWTld4ZTNsRGlPTlJvOEVjMjdIQjF4bVpNQTVVMU4zZTVUbXRUczBScWNaWGIvRWhoWVRkTS9JTHFxQlZCaU9WWktBSHNRQXhxemI3YkxNRXlkWkdzRUUyQ01MY2JtSWR5Y293QUQ3WDltTlA1L2VDWXdNRnNXbWNJYmtXNGNEVy9yZ1p6Y0ZQUlZGaUloUEdzNzhMa2Jna0dqdnFRUFY3MW8xZW14cWEzTE9SVHRCTnU0a3d4Q3V2UG40UFJjMVpVRldMb1crR0JneWVscXlyeHRTVEN3d1Nublo1Q0VDcm9QSHBMVkMyMGRlQ1NQblRQdXJuWFoxNjU5c29Zd0VuT0loY3VxenVuL3FjL0wvaEovVHpHcUxLcGVBMVhab3pqRXBRamIvTkNMUC9LR0dzNy95aHVpN0Jwd3hYd0xkblgwcUxHTUk0SnRmQWJEaHZWVG1ka2pYRUY4YS9NcjF5ejlDLyszVm5wbFppV3BWN2t0Q2JTMHQ1enpJa3E4QVQvUVYzaUFTYXY0Wkd1aUU3clRsY1BGZkluQUVpR2NNeXo1UUxkRnlvdFdUaHJEbTZFb0tSR1U5UzBoUm4zTEFCdGxjcVEya3RSS0dhYUVtMXJXTVg0Z3BLZXh6c3NLNmFkYk13ZXl3TlV1eXJiYTN3c0NRSnFVV05SWUhyRVRmejIwcERJeTN4QVRLVzZhV3BSOHVubUpzZVFBZWtBaDhUQlNHbFMwOTh6WWJ4eWs2TWVIb0RWMEpWSGovTlNzRFMyWlltcjFmaDB6djFqTGwxbHEranhvRG83dXFTWWFMb21kQXhFTU9SODc2Z09kckIvWVNNS0I3MnZpalQ2Z0k4TkVlVXZSWGd5bW1JVEZvS1BUVkIvQ3BrYzBYd2UrVUZZeFQ5L2xRT0xiOW5LMytYcC9xcGN6N1F5UjhJZS95dDZrVEY3NHE0NFhGZWc5TldwdEZ3cjZpaHJzSjluWmlnaHZXRDRiTGJXY0lwQUpPdFlIZ1JNT3NGUFdENHc1NGJDRmljUTNyVXJ0QnN3L3o4Vml1VFlGRHRaWk54cjZGY0dHZStsN3l4V1lNN01pVkpNanhoWnlQWmZlT0tzQ0NqY2c2d0lKeEhyaGowQ09ldmdncDNQUnhTalAyUkNzcDJwUGdTY0lWNE1WdGdMcnArUzNLNTV2ZFFHTmFjMGJIR3VxRGVYdGcwampHSFNQZ1RMRDBUT1FRNS94TUtwaE9lWUlNcm5MN0ZSQksrR1Q0WjNWaEY4QUtTTjV2cnNFdG8xeDN6eDduM0NtNFVLQTdtSW9BVjBiY0I3d1RhY0VpbjY0NEdpVFZBK01RM1lnNzBEdmJwUGhBTlV0U3EvbEdZSzdoUVdlQU4yNlEzTEJCbnhJQTEzM0ZFRHgzOVhwaG5qcDFnMmYrQ0VORnhZMzdpOEZpTjBNNVBrWkZyS2VlNGxEYzkwUGhpN2JuMllPNG8yd3lPbUtRclpYbVRmMVhxODhiZEF6NDhCMDJNUHhPd0w5M3NIcy9TaTErNFRLVmVFUThDaThPbU5DRjdJVTZyWkhxSTAvbTZGTmt4RlAvUEpVbDVCeWRVSk9nKzNXdkxYUmtXY3BaYWxnNUFyZmdFYXg0QzJWb21lam5iYW1Ia0o4TWZuOFg2cUM0OGdDQzB4Uk9rUjcwUEJ0TDdDVVZ0ZWNmRW53ZW92WnZyQmNFb2FsZU8vQmZYU2lZa0ZjQnhBQ3VOZS9jTFdMUjdEdEdteThlUG9kUWg3NW9Ib1JydCtmUDhCeWM4R0hjMFlRT3YwMlhyVkZnbk01N0N6NDdlQzQweG9jUnloaVZ3c2YyRkJvT29EcmdwRU5jeFl4RE05Y3RWYVRuNFg2ZVJiT1BIckZ4Lzl3VjBhOWh4V044NUZ5V3RGMHRPbDFuVkRlNjhkMlFNWkl5T3VMNE12MlhXOC9odU43QTFLQ293UmVBTVRsVk5JL2NQUnNON0NjU0J2bGhldmNGOFBuZFhkM3YvVHNHS0syQ2hZR29qR3gzM3ZDc1RsQkZaWTdPcm0zWUh5M09qZlMxWSs5and3UXYxNUQvbTZXajNyeGdvWkV5SEZNZG12Zz09XFxcIilcXG52YXIgdXJsID0gZ2V0KGh0bWwpXCJ9XSIsImljb24iOiJodHRwczovL3d3dy41MmJkeXMuY29tL2ltYWdlcy9mYXZpY29uLnBuZyIsInByb3h5IjoiIn0=
Add Comment
Please, Sign In to add comment