Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:二级页面详情¥page_detail¥我的兄弟姐妹@@eyJkYXRhIjoie1wiYXNzb2NpYXRlZE1vZGVsc01hcEZvckpvaW5UYWJsZVwiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhGS1wiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhvdXRGS1wiOnt9LFwiZGlzcGxheU5hbWVcIjpcIueIsemFt+W9seinhlwiLFwiZmllbGRzVG9TZXRUb0RlZmF1bHRcIjpbXSxcImlkXCI6MCxcImxhc3RfY2hhcHRlcl9ydWxlXCI6XCJqczooXFxuZnVuY3Rpb24gKGFwcHR5cGUsIGFwcFVybCwgYXBwVWEpIHtcXG4gICAgbGV0IGNocCA9IFtdO1xcbiAgICB0cnkge1xcbiAgICAgICAgbGV0IGNvbnRzID0gW10sIGh0bWwgPSBKU09OLnBhcnNlKGZldGNoKE1ZX1VSTC5zcGxpdChcXFwiIyNcXFwiKVsxXSwge2hlYWRlcnM6IHtcXFwiVXNlci1BZ2VudFxcXCI6IGFwcFVhfX0pKTtcXG4gICAgICAgIGlmICgv56We6amsfFRWLy50ZXN0KGFwcHR5cGUpKSB7XFxuICAgICAgICAgICAgY29udHMgPSBPYmplY3Qua2V5cyhodG1sLnZpZGVvbGlzdCk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGlmIChhcHBVcmwuaW5jbHVkZXMoXFxcImFwaS5waHAvYXBwXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgY29udHMgPSBodG1sLmRhdGEudm9kX3VybF93aXRoX3BsYXllcjtcXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRzLmxlbmd0aCA8IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRzID0gaHRtbC5kYXRhLnZvZF9wbGF5X3VybC5zcGxpdChcXFwiJCQkXFxcIik7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBpZiAoYXBwVXJsLmluY2x1ZGVzKFxcXCJ4Z2FwcFxcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICBjb250cyA9IGh0bWwuZGF0YS52b2RfaW5mby52b2RfdXJsX3dpdGhfcGxheWVyO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRzLmxlbmd0aCA8IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cyA9IGh0bWwuZGF0YS52b2RfaW5mby52b2RfcGxheV91cmwuc3BsaXQoXFxcIiQkJFxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgY29udHMgPSBodG1sLmRhdGEudm9kX3BsYXlfbGlzdDtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250cy5sZW5ndGggPCAxKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHMgPSBodG1sLmRhdGEudm9kX3BsYXlfdXJsLnNwbGl0KFxcXCIkJCRcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIGxldCBsaXN0ID0gW107XFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbnRzLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgaWYgKC/npZ7pqax8VFYvLnRlc3QoYXBwdHlwZSkpIHtcXG4gICAgICAgICAgICAgICAgbGlzdCA9IGh0bWwudmlkZW9saXN0W2NvbnRzW2ldXTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBpZiAoY29udHNbaV0udXJscykge1xcbiAgICAgICAgICAgICAgICAgICAgbGlzdCA9IGNvbnRzW2ldLnVybHM7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udHNbaV0udXJsKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IGNvbnRzW2ldLnVybC5zcGxpdChcXFwiI1xcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gY29udHNbaV0uc3BsaXQoXFxcIiNcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBjaHAucHVzaChsaXN0Lmxlbmd0aCk7XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgY2F0Y2ggKGUpIHtcXG4gICAgfVxcbiAgICBzZXRSZXN1bHQoXFxcIlxcXFx1NjZmNFxcXFx1NjViMFxcXFx1ODFmMzpcXFwiICsgKE1hdGgubWF4LmFwcGx5KE1hdGgsIGNocCkpKTtcXG59XFxuKShcXFwi5LyY6LSoXFxcIixcXFwiaHR0cHM6Ly93d3cuemhhbmxhbmdidS5jb20vcnVpZmVuZ2xiX2FwaS5waHAvdjEudm9kXFxcIixcXFwib2todHRwLzQuMS4wXFxcIilcIixcImxpc3RUb0NsZWFyQXNzb2NpYXRlZEZLXCI6W10sXCJsaXN0VG9DbGVhclNlbGZGS1wiOltdLFwicGFnZUxpc3RcIjpbe1wibmFtZVwiOlwiQVBQ5YiG57G75YiX6KGoXCIsXCJwYXRoXCI6XCJhcHBsaXN0ZGF0YVwiLFwicnVsZVwiOlwiKFxcbmZ1bmN0aW9uICgpIHtcXG4gICAgbGV0IGxpc3QgPSBbXTtcXG4gICAgaWYgKGFwcFVybC5pbmNsdWRlcyhcXFwiYXBpLnBocC9hcHBcXFwiKSkge1xcbiAgICAgICAgbGlzdCA9IGh0bWwubGlzdDtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIGlmIChhcHBVcmwuaW5jbHVkZXMoXFxcInhnYXBwXFxcIikpIHtcXG4gICAgICAgICAgICBsaXN0ID0gaHRtbC5kYXRhO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBpZiAoYXBwVXJsLmluY2x1ZGVzKFxcXCIudm9kXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgbGlzdCA9IGh0bWwuZGF0YS5saXN0O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgIGxldCB7dm9kX25hbWUsIHZvZF9waWMsIHZvZF9pZCwgdm9kX3JlbWFya3N9ID0gbGlzdFtpXTtcXG4gICAgICAgIGxldCBsaW5rID0gXFxcIlxcXCI7XFxuICAgICAgICBpZiAoYXBwVXJsLmluY2x1ZGVzKFxcXCJhcGkucGhwL2FwcFxcXCIpIHx8IGFwcFVybC5pbmNsdWRlcyhcXFwieGdhcHBcXFwiKSkge1xcbiAgICAgICAgICAgIGxpbmsgPSBhcHBVcmwgKyBcXFwidmlkZW9fZGV0YWlsP2lkPVxcXCIgKyB2b2RfaWQgKyBcXFwiJnRva2VuPVxcXCI7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGlmIChhcHBVcmwuaW5jbHVkZXMoXFxcIi52b2RcXFwiKSkge1xcbiAgICAgICAgICAgICAgICBsZXQgZGF0ZSA9IG5ldyBEYXRlKCk7XFxuICAgICAgICAgICAgICAgIGxpbmsgPSBhcHBVcmwgKyBcXFwiL2RldGFpbD92b2RfaWQ9XFxcIiArIHZvZF9pZCArIFxcXCImcmVsX2xpbWl0PTEwJmtleT1cXFwiICsgKGRhdGUuZ2V0TW9udGgoKSArIDEpICsgKGRhdGUuZ2V0RGF0ZSgpIDwgMTAgPyBcXFwiMFxcXCIgKyBkYXRlLmdldERhdGUoKSA6IGRhdGUuZ2V0RGF0ZSgpKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoL2lvcGVueXVuLy50ZXN0KGFwcFVybCkpIHtcXG4gICAgICAgICAgICBsaW5rID0gYXBwVXJsICsgXFxcIi9kZXRhaWxJRD92b2RfaWQ9XFxcIiArIHZvZF9pZCArIFxcXCImcmVsX2xpbWl0PTEwXFxcIjtcXG4gICAgICAgIH1cXG4gICAgICAgIGl0ZW1zLnB1c2goe3RpdGxlOiB2b2RfbmFtZSwgcGljX3VybDogdm9kX3BpYyArIFxcXCJAUmVmZXJlcj1cXFwiLCBkZXNjOiB2b2RfcmVtYXJrcywgY29sX3R5cGU6IFxcXCJtb3ZpZV8zX21hcnF1ZWVcXFwiLCB1cmw6ICQoXFxcIiNpbW1lcnNpdmVUaGVtZSNoaWtlcjovL2VtcHR5IyNcXFwiICsgbGluaykucnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXCJoaWtlcjovL3BhZ2UvYXBwbW92bGlzdFxcXCIpKS5ydWxlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgbG9nKFxcXCJcXFxcdTVmNzFcXFxcdTcyNDdcXFxcdThiZTZcXFxcdTYwYzVcXFxcdTUxZmFcXFxcdTk1MTk6XFxcIiArIGUubWVzc2FnZSk7XFxuICAgICAgICAgICAgICAgIHNldFJlc3VsdChbXSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgKX0pO1xcbiAgICB9XFxufVxcbikoKVwifSx7XCJuYW1lXCI6XCJBUFDpppbpobXliJfooahcIixcInBhdGhcIjpcImFwcGluZGV4ZGF0YVwiLFwicnVsZVwiOlwiKFxcbmZ1bmN0aW9uICgpIHtcXG4gICAgbGV0IGxpc3QgPSBbXTtcXG4gICAgaWYgKGFwcFVybC5pbmNsdWRlcyhcXFwiYXBpLnBocC9hcHBcXFwiKSkge1xcbiAgICAgICAgbGlzdCA9IGh0bWwubGlzdDtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIGlmIChhcHBVcmwuaW5jbHVkZXMoXFxcInhnYXBwXFxcIikpIHtcXG4gICAgICAgICAgICBsaXN0ID0gaHRtbC5kYXRhO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBpZiAoYXBwVXJsLmluY2x1ZGVzKFxcXCIudm9kXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgbGlzdCA9IGh0bWwuZGF0YS5saXN0O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgIGxldCBsaXN0cyA9IFtdLCB0eXBlbmFtZSA9IFxcXCJcXFwiO1xcbiAgICAgICAgaWYgKGFwcFVybC5pbmNsdWRlcyhcXFwiYXBpLnBocC9hcHBcXFwiKSB8fCBhcHBVcmwuaW5jbHVkZXMoXFxcInhnYXBwXFxcIikpIHtcXG4gICAgICAgICAgICBsaXN0cyA9IGxpc3RbaV0udmxpc3Q7XFxuICAgICAgICAgICAgdHlwZW5hbWUgPSBsaXN0W2ldLnR5cGVfbmFtZTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgaWYgKGFwcFVybC5pbmNsdWRlcyhcXFwiLnZvZFxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIGxpc3RzID0gbGlzdFtpXS52b2RfbGlzdDtcXG4gICAgICAgICAgICAgICAgdHlwZW5hbWUgPSBsaXN0W2ldLnZvZF90eXBlX25hbWU7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgaXRlbXMucHVzaCh7dGl0bGU6IHR5cGVuYW1lLCBjb2xfdHlwZTogXFxcInRleHRfMVxcXCIsIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwifSk7XFxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxpc3RzLmxlbmd0aDsgaisrKSB7XFxuICAgICAgICAgICAgbGV0IHt2b2RfbmFtZSwgdm9kX3BpYywgdm9kX2lkLCB2b2RfcmVtYXJrc30gPSBsaXN0c1tqXTtcXG4gICAgICAgICAgICBsZXQgbGluayA9IFxcXCJcXFwiO1xcbiAgICAgICAgICAgIGlmIChhcHBVcmwuaW5jbHVkZXMoXFxcImFwaS5waHAvYXBwXFxcIikgfHwgYXBwVXJsLmluY2x1ZGVzKFxcXCJ4Z2FwcFxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIGxpbmsgPSBhcHBVcmwgKyBcXFwidmlkZW9fZGV0YWlsP2lkPVxcXCIgKyB2b2RfaWQgKyBcXFwiJnRva2VuPSZrZXk9XFxcIjtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBpZiAoYXBwVXJsLmluY2x1ZGVzKFxcXCIudm9kXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRlID0gbmV3IERhdGUoKTtcXG4gICAgICAgICAgICAgICAgICAgIGxpbmsgPSBhcHBVcmwgKyBcXFwiL2RldGFpbD92b2RfaWQ9XFxcIiArIHZvZF9pZCArIFxcXCImcmVsX2xpbWl0PTEwJmtleT1cXFwiICsgKGRhdGUuZ2V0TW9udGgoKSArIDEpICsgKGRhdGUuZ2V0RGF0ZSgpIDwgMTAgPyBcXFwiMFxcXCIgKyBkYXRlLmdldERhdGUoKSA6IGRhdGUuZ2V0RGF0ZSgpKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAoL2lvcGVueXVuLy50ZXN0KGFwcFVybCkpIHtcXG4gICAgICAgICAgICAgICAgbGluayA9IGFwcFVybCArIFxcXCIvZGV0YWlsSUQ/dm9kX2lkPVxcXCIgKyB2b2RfaWQgKyBcXFwiJnJlbF9saW1pdD0xMFxcXCI7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goe3RpdGxlOiB2b2RfbmFtZSwgcGljX3VybDogdm9kX3BpYyArIFxcXCJAUmVmZXJlcj1cXFwiLCBkZXNjOiB2b2RfcmVtYXJrcywgY29sX3R5cGU6IFxcXCJtb3ZpZV8zX21hcnF1ZWVcXFwiLCB1cmw6ICQoXFxcIiNpbW1lcnNpdmVUaGVtZSNoaWtlcjovL2VtcHR5IyNcXFwiICsgbGluaykucnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICBldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcImhpa2VyOi8vcGFnZS9hcHBtb3ZsaXN0XFxcIikpLnJ1bGUpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgICAgICBsb2coXFxcIlxcXFx1NWY3MVxcXFx1NzI0N1xcXFx1OGJlNlxcXFx1NjBjNVxcXFx1NTFmYVxcXFx1OTUxOTpcXFwiICsgZS5tZXNzYWdlKTtcXG4gICAgICAgICAgICAgICAgICAgIHNldFJlc3VsdChbXSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgKX0pO1xcbiAgICAgICAgfVxcbiAgICB9XFxufVxcbikoKVwifSx7XCJuYW1lXCI6XCJBUFDpgInpm4ZcIixcInBhdGhcIjpcImFwcG1vdmxpc3RcIixcInJ1bGVcIjpcIihcXG5mdW5jdGlvbiAoY2hhbmdlVXJsLCBhcHBVcmwsIGFwcFVhKSB7XFxuICAgIGFkZExpc3RlbmVyKFxcXCJvbkNsb3NlXFxcIiwgJC50b1N0cmluZygodXJsKSA9PiB7XFxuICAgICAgICBjbGVhclZhcihcXFwiYXBwbm93XFxcIik7XFxuICAgICAgICBjbGVhclZhcih1cmwpO1xcbiAgICB9XFxuICAgICwgTVlfVVJMKSk7XFxuICAgIGxldCBpdGVtcyA9IFtdLCBodG1sID0gZ2V0VmFyKE1ZX1VSTCwgXFxcIlxcXCIpLCBkYXRhID0ge307XFxuICAgIGlmIChodG1sID09IFxcXCJcXFwiKSB7XFxuICAgICAgICBsZXQgdXJsID0gTVlfVVJMLnNwbGl0KFxcXCIjI1xcXCIpWzFdO1xcbiAgICAgICAgdXJsID0gY2hhbmdlVXJsKHVybCk7XFxuICAgICAgICBodG1sID0gZmV0Y2godXJsLCB7aGVhZGVyczoge1xcXCJVc2VyLUFnZW50XFxcIjogYXBwVWF9fSk7XFxuICAgICAgICBwdXRWYXIoTVlfVVJMLCBodG1sKTtcXG4gICAgfVxcbiAgICBpZiAoYXBwVXJsLmluY2x1ZGVzKFxcXCJ4Z2FwcFxcXCIpKSB7XFxuICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShodG1sKS5kYXRhLnZvZF9pbmZvO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgZGF0YSA9IEpTT04ucGFyc2UoaHRtbCkuZGF0YTtcXG4gICAgfVxcbiAgICBsZXQge3ZvZF9uYW1lLCB2b2RfcGljLCB2b2RfY29udGVudCwgdm9kX2NsYXNzLCB2b2RfcmVtYXJrcywgdm9kX2RpcmVjdG9yLCB2b2RfYWN0b3IsIHZvZF9hcmVhLCB2b2RfbGFuZywgdm9kX3llYXJ9ID0gZGF0YTtcXG4gICAgaXRlbXMucHVzaCh7dGl0bGU6IHZvZF9uYW1lICsgXFxcIlxcXFxuXFxcIiArIHZvZF9jbGFzcyArIFxcXCIsXFxcIiArIHZvZF9yZW1hcmtzICsgXFxcIlxcXFxuXFxcIiArIHZvZF9hcmVhICsgXFxcIi9cXFwiICsgdm9kX2xhbmcgKyBcXFwiL1xcXCIgKyB2b2RfeWVhciwgZGVzYzogXFxcIlxcXFx1NWJmY1xcXFx1NmYxNDpcXFwiICsgdm9kX2RpcmVjdG9yICsgXFxcIlxcXFxuXFxcXHU0ZTNiXFxcXHU2ZjE0OlxcXCIgKyB2b2RfYWN0b3IsIHBpY191cmw6IHZvZF9waWMsIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLCBjb2xfdHlwZTogXFxcIm1vdmllXzFfdmVydGljYWxfcGljX2JsdXJcXFwifSwge3RpdGxlOiBcXFwiXFxcXHU1MjY3XFxcXHU2MGM1XFxcXHU3YjgwXFxcXHU0ZWNiOlxcXCIsIGRlc2M6IHZvZF9jb250ZW50LCB1cmw6ICQoXFxcImhpa2VyOi8vZW1wdHkjbm9SZWNvcmRIaXN0b3J5I1xcXCIpLnJ1bGUoKGRlc2MpID0+IHtcXG4gICAgICAgIHNldFJlc3VsdChbe3RpdGxlOiBkZXNjLCBjb2xfdHlwZTogXFxcImxvbmdfdGV4dFxcXCJ9XSk7XFxuICAgIH1cXG4gICAgLCB2b2RfY29udGVudCksIGNvbF90eXBlOiBcXFwidGV4dF8xXFxcIn0pO1xcbiAgICBsZXQgZG5lbiA9IGdldE15VmFyKFxcXCJkbmVuXFxcIiwgXFxcIjBcXFwiKTtcXG4gICAgaXRlbXMucHVzaCh7dGl0bGU6IFxcXCJcXFxcdTY1YWRcXFxcdTYzZDI6XFxcIiArIChkbmVuID09IFxcXCIxXFxcIiA/IFxcXCJcXFxcdTIwMWNcXFxcdTIwMWNcXFxcdTI3MDVcXFxcdTIwMWRcXFxcdTIwMWRcXFwiIDogXFxcIlxcXFx1Mjc0ZVxcXCIpLCB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKGRuZW4pID0+IHtcXG4gICAgICAgIGlmIChkbmVuID09IFxcXCIxXFxcIikge1xcbiAgICAgICAgICAgIHB1dE15VmFyKFxcXCJkbmVuXFxcIiwgXFxcIjBcXFwiKTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL1xcXFx1NWRmMlxcXFx1Nzk4MVxcXFx1NzUyOFxcXFx1NjVhZFxcXFx1NjNkMlxcXFx1OGMwM1xcXFx1NzUyOCFcXFwiO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBwdXRNeVZhcihcXFwiZG5lblxcXCIsIFxcXCIxXFxcIik7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9cXFxcdTVkZjJcXFxcdTVmMDBcXFxcdTU0MmZcXFxcdTY1YWRcXFxcdTYzZDJcXFxcdThjMDNcXFxcdTc1MjghXFxcIjtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICAsIGRuZW4pLCBjb2xfdHlwZTogXFxcInRleHRfMlxcXCJ9KTtcXG4gICAgaXRlbXMucHVzaCh7dGl0bGU6IFxcXCJcXFxcdTdlYmZcXFxcdThkZWZcXFxcdTkxNGRcXFxcdTdmNmVcXFwiLCB1cmw6IFxcXCJoaWtlcjovL2VtcHR5I25vUmVjb3JkSGlzdG9yeSNAcnVsZT1qczp0aGlzLmQ9W107cmVxdWlyZSgnaHR0cHM6Ly9naXRlYS5jb20vQUk5NTcvSGlrZXIvcmF3L20vdi9Sb3V0ZS5qcycpO1JvdXRlLnNldFBhcnNlKCk7c2V0UmVzdWx0KGQpO1xcXCIsIGNvbF90eXBlOiBcXFwidGV4dF8yXFxcIn0pO1xcbiAgICBsZXQgY29udHMgPSBbXSwgdGFicyA9IFtdO1xcbiAgICBpZiAoYXBwVXJsLmluY2x1ZGVzKFxcXCJhcGkucGhwL2FwcFxcXCIpIHx8IGFwcFVybC5pbmNsdWRlcyhcXFwieGdhcHBcXFwiKSkge1xcbiAgICAgICAgY29udHMgPSBkYXRhLnZvZF91cmxfd2l0aF9wbGF5ZXI7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBjb250cyA9IGRhdGEudm9kX3BsYXlfbGlzdDtcXG4gICAgfVxcbiAgICBpZiAoY29udHMubGVuZ3RoIDwgMSkge1xcbiAgICAgICAgY29udHMgPSBkYXRhLnZvZF9wbGF5X3VybC5zcGxpdChcXFwiJCQkXFxcIik7XFxuICAgICAgICB0YWJzID0gZGF0YS52b2RfcGxheV9mcm9tLnNwbGl0KFxcXCIkJCRcXFwiKTtcXG4gICAgfVxcbiAgICBsZXQgcHRhYiA9IFxcXCJcXFwiLCBwdGFibmFtZSA9IFxcXCJcXFwiO1xcbiAgICBpZiAoZ2V0VmFyKFxcXCJhcHBub3dcXFwiLCBcXFwiXFxcIikgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgIHB1dFZhcihcXFwiYXBwbm93XFxcIiwgXFxcIjBcXFwiKTtcXG4gICAgfVxcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbnRzLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICBsZXQgc3B0YWIgPSBcXFwiXFxcIiwgdGFibmFtZSA9IFxcXCJcXFwiO1xcbiAgICAgICAgaWYgKGFwcFVybC5pbmNsdWRlcyhcXFwiYXBpLnBocC9hcHBcXFwiKSB8fCBhcHBVcmwuaW5jbHVkZXMoXFxcInhnYXBwXFxcIikpIHtcXG4gICAgICAgICAgICBzcHRhYiA9IGNvbnRzW2ldLmNvZGUgPyBjb250c1tpXS5jb2RlIDogdGFic1tpXTtcXG4gICAgICAgICAgICB0YWJuYW1lID0gY29udHNbaV0ubmFtZSB8fCBzcHRhYjtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgc3B0YWIgPSBjb250c1tpXS5mcm9tID8gY29udHNbaV0uZnJvbSA6IHRhYnNbaV07XFxuICAgICAgICAgICAgdGFibmFtZSA9IGNvbnRzW2ldLnBsYXllcl9pbmZvID8gY29udHNbaV0ucGxheWVyX2luZm8uc2hvdyA6IHNwdGFiO1xcbiAgICAgICAgfVxcbiAgICAgICAgaXRlbXMucHVzaCh7dGl0bGU6IGdldFZhcihcXFwiYXBwbm93XFxcIikgPT0gaSA/IFxcXCJcXFxcdTIwMWNcXFxcdTIwMWNcXFxcdTIwMWRcXFxcdTIwMWRcXFwiICsgdGFibmFtZS5ib2xkKCkuZm9udGNvbG9yKFxcXCIjRkE3Mjk4XFxcIikgOiB0YWJuYW1lLCB1cmw6IFxcXCJoaWtlcjovL2VtcHR5I25vTG9hZGluZyNAbGF6eVJ1bGU9LmpzOnB1dFZhcignYXBwbm93JywnXFxcIiArIGkgKyBcXFwiJyk7cmVmcmVzaFBhZ2UoZmFsc2UpOyd0b2FzdDovL1xcXFx1NTIwN1xcXFx1NjM2MlxcXFx1NjIxMFxcXFx1NTI5ZiEnXFxcIiwgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIn0pO1xcbiAgICAgICAgaWYgKGdldFZhcihcXFwiYXBwbm93XFxcIikgPT0gaSkge1xcbiAgICAgICAgICAgIHB0YWIgPSBzcHRhYjtcXG4gICAgICAgICAgICBwdGFibmFtZSA9IHRhYm5hbWU7XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgaXRlbXMucHVzaCh7dGl0bGU6IFxcXCJcXFxcdTIwMWNcXFxcdTIwMWNcXFxcdTIxOTNcXFxcdTIxOTFcXFxcdTIwMWRcXFxcdTIwMWRcXFwiICsgcHRhYm5hbWUgKyBcXFwiLVxcXCIgKyBwdGFiLCB1cmw6IFxcXCJoaWtlcjovL2VtcHR5QGxhenlSdWxlPS5qczpwdXRWYXIoJ2FwcG1hcHBzb3J0JywgZ2V0VmFyKCdhcHBtYXBwc29ydCcsJzEnKT09JzEnPycwJzonMScpO3JlZnJlc2hQYWdlKGZhbHNlKTsndG9hc3Q6Ly9cXFxcdTUyMDdcXFxcdTYzNjJcXFxcdTYyMTBcXFxcdTUyOWYhJ1xcXCIsIGNvbF90eXBlOiBcXFwidGV4dF8xXFxcIiwgZXh0cmE6IHtsaW5lVmlzaWJsZTogZmFsc2V9fSk7XFxuICAgIGxldCBsaXN0ID0gW10sIGluZGV4ID0gZ2V0VmFyKFxcXCJhcHBub3dcXFwiKTtcXG4gICAgaWYgKGFwcFVybC5pbmNsdWRlcyhcXFwiYXBpLnBocC9hcHBcXFwiKSB8fCBhcHBVcmwuaW5jbHVkZXMoXFxcInhnYXBwXFxcIikpIHtcXG4gICAgICAgIGxpc3QgPSBjb250c1tpbmRleF0udXJsLnNwbGl0KFxcXCIjXFxcIik7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBsaXN0ID0gY29udHNbaW5kZXhdLnVybHMgPyBjb250c1tpbmRleF0udXJscyA6IGNvbnRzW2luZGV4XS51cmwuc3BsaXQoXFxcIiNcXFwiKTtcXG4gICAgfVxcbiAgICBpZiAoZ2V0VmFyKFxcXCJhcHBtYXBwc29ydFxcXCIsIFxcXCIxXFxcIikgPT0gXFxcIjBcXFwiKSB7XFxuICAgICAgICBsaXN0LnJldmVyc2UoKTtcXG4gICAgfVxcbiAgICBsZXQgamllayA9IFtdO1xcbiAgICB0cnkge1xcbiAgICAgICAgaWYgKGFwcFVybC5pbmNsdWRlcyhcXFwiYXBpLnBocC9hcHBcXFwiKSB8fCBhcHBVcmwuaW5jbHVkZXMoXFxcInhnYXBwXFxcIikpIHtcXG4gICAgICAgICAgICBqaWVrLnB1c2goY29udHNbaW5kZXhdLnBhcnNlX2FwaSB8fCBcXFwiXFxcIik7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGppZWsgPSAoY29udHNbaW5kZXhdLnBsYXllcl9pbmZvLnBhcnNlMiB8fCBcXFwiXFxcIikuc3BsaXQoXFxcIixcXFwiKS5jb25jYXQoKGNvbnRzW2luZGV4XS5wbGF5ZXJfaW5mby5wYXJzZSB8fCBcXFwiXFxcIikuc3BsaXQoXFxcIixcXFwiKSk7XFxuICAgICAgICAgICAgamllayA9IGppZWsubWFwKGN1ciA9PiBjdXIucmVwbGFjZShcXFwiLi5cXFwiLCBcXFwiLlxcXCIpLnJlcGxhY2UoXFxcImpzb25ic1xcXCIsIFxcXCJcXFwiKSk7XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgY2F0Y2ggKGUpIHtcXG4gICAgfVxcbiAgICBqaWVrID0gamllay5maWx0ZXIoY3VyID0+ICEhY3VyKTtcXG4gICAgbGV0IGp4VXJsID0gamlla1swXSB8fCBcXFwiXFxcIjtcXG4gICAgbG9nKFxcXCJcXFxcblxcXFx1NWY1M1xcXFx1NTI0ZFxcXFx1N2ViZlxcXFx1OGRlZjpcXFwiICsgcHRhYiArIFxcXCJcXFxcblxcXFx1ODllM1xcXFx1Njc5MFxcXFx1NTIxN1xcXFx1ODg2ODpcXFwiICsgJC5zdHJpbmdpZnkoamllaykpO1xcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxpc3QubGVuZ3RoOyBqKyspIHtcXG4gICAgICAgIGxldCB2bGluayA9IFxcXCJcXFwiLCB0aXRsZSA9IFxcXCJcXFwiO1xcbiAgICAgICAgaWYgKGxpc3Rbal0udXJsKSB7XFxuICAgICAgICAgICAgdmxpbmsgPSBsaXN0W2pdLnVybC5yZXBsYWNlKC8jNDU2Iy9nLCBcXFwiaHR0cFxcXCIpLnJlcGxhY2UoLyMxMjMjL2csIFxcXCIuXFxcIikucmVwbGFjZSgvIzc4OSMvZywgXFxcIjpcXFwiKTtcXG4gICAgICAgICAgICB0aXRsZSA9IGxpc3Rbal0ubmFtZTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgdmxpbmsgPSBsaXN0W2pdLnNwbGl0KFxcXCIkXFxcIilbMV07XFxuICAgICAgICAgICAgdGl0bGUgPSBsaXN0W2pdLnNwbGl0KFxcXCIkXFxcIilbMF07XFxuICAgICAgICB9XFxuICAgICAgICBpdGVtcy5wdXNoKHt0aXRsZTogdGl0bGUsIGNvbF90eXBlOiBcXFwidGV4dF80XFxcIiwgdXJsOiBldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcImhpa2VyOi8vcGFnZS9sYXp5UGFyc2VcXFwiKSkucnVsZSl9KTtcXG4gICAgfVxcbiAgICBzZXRSZXN1bHQoaXRlbXMpO1xcbn1cXG4pKFxcbmZ1bmN0aW9uIGNoYW5nZVVybCh1cmwpIHtcXG4gICAgbGV0IG5ld1VybCA9IHVybDtcXG4gICAgaWYgKHVybC5pbmNsdWRlcyhcXFwib21vZnVuXFxcIikpIHtcXG4gICAgICAgIG5ld1VybCA9IHVybCArIFxcXCImY3NyZj1hJTJCSUtHTHVuSkNadWFkJTJCeEVUTHJadUJvcWhsdUZDRDBkSDg2RThJRU52QnpNZkJMYTZkQjhSem94eEl2dkJFTWVKekpuVVN0NTFGaGxQQmQ0S3I1eWhHWGx5TnZEa0p5Tk1EZ0RaMWIlMkZzalhBZU10ajE3WHRlTThwdVRZMlBRblF3WU95aiUyRkhVQ0FWUlprcmZsc2s4N1lHMVZlU3duRVQ4VHByREQ4dDZ1ZyUzREBzaWduYXR1cmU9RkVENEEwOTJENUJCQkUxODExN0EzQjU1OEVCNjQ2MUE5MkE1MkNGN1xcXCI7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBpZiAodXJsLmluY2x1ZGVzKFxcXCJ4aW5sdWFuXFxcIikpIHtcXG4gICAgICAgICAgICBuZXdVcmwgPSB1cmwgKyBcXFwiJmNzcmY9U1JFUUFQWDh0RkVLcFYyZExEakxaaEtrOEl4SmZEV2hOJTJCbWtzV0olMkZrZFJWd2dVaCUyRlFrVERaRW9RQVNhQXA3SHpVaXg4N1QlMkJQTGtBSXc2eUglMkI2TXJ2YXFKTTlySjVsMmI4NUlRUmJCYlclMkJEYlNZUk84Ym1Uc0tkTFlEVFZ0UkhoejVueWxSV2xHVWlkeEhmVnlMTzl0WlVpQmsxWTJBd28lMkZ6c2EydEgydTglM0RAc2lnbmF0dXJlPUZCQzcwODhDNjc3RDI5N0U2QkJCQzg1ODRBOTMzNzJEREUxMEZEOTZcXFwiO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBpZiAodXJsLmluY2x1ZGVzKFxcXCJzeGJyZFxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIG5ld1VybCA9IHVybCArIFxcXCImY3NyZj1yMk5ETHRwUzhFdXFoJTJGJTJGOFk5NnljT1VPS1M5SUN6Tll6eWF3NUMyVWZFZ29ERkRIWCUyRnJxaiUyQlljTFdRekg1JTJCUjZtb1VPbHdPQW9KUkV0VWEzNzZ1ZDc0NjI3VUR6TlExc1JHZFREOGtiMzZzMWVUTWVtY244ZDBpN1dKNms5aWg1SVA0QWQ3ZnBhNiUyRjNEc3Qxam9HbmN5cjcxNmRSSERNZmN2cnMzUzI5akklM0RAY2xpZW50X25hbWU9NTVXRjU1eUw1YjJ4NktlR1xcXCI7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIHJldHVybiBuZXdVcmw7XFxufVxcbixcXFwiaHR0cHM6Ly93d3cuemhhbmxhbmdidS5jb20vcnVpZmVuZ2xiX2FwaS5waHAvdjEudm9kXFxcIixcXFwib2todHRwLzQuMS4wXFxcIilcIn0se1wibmFtZVwiOlwi6KeG6aKR6Kej5p6QXCIsXCJwYXRoXCI6XCJsYXp5UGFyc2VcIixcInJ1bGVcIjpcIihcXG5mdW5jdGlvbiAoKSB7XFxuICAgIGxldCBlbkRuID0gZ2V0TXlWYXIoXFxcImRuZW5cXFwiLCBcXFwiMFxcXCIpLCB0ZXN0MSA9IHZsaW5rLnNlYXJjaCgveW91a3V8bWd0dnxpeGlndWF8cXEuY29tfHFpeWl8bWlndXxiaWxpYmlsaXxzb2h1fHBwdHZ8bGV8MTkwNS5jb20vKSAhPSAtMSwgdGVzdDIgPSB2bGluay5zZWFyY2goL0xUXFxcXC18Um9uZ1hpbmdWUlxcXFwtfHJlbnJlbm1pXFxcXC18eGZ5XFxcXC18c3VveW9cXFxcLmNjfGZlblxcXFwubGFvZGl8cnVpZmVuZ2xifHh1ZXJlblxcXFwtLykgIT0gLTE7XFxuICAgIGlmICgodGVzdDEgfHwgdGVzdDIpICYmIGVuRG4gPT0gXFxcIjFcXFwiKSB7XFxuICAgICAgICByZXR1cm4gJChcXFwiaGlrZXI6Ly9lbXB0eVxcXCIpLmxhenlSdWxlKCh2bGluaykgPT4ge1xcbiAgICAgICAgICAgIGxvZyhcXFwiXFxcXG5cXFxcdThjMDNcXFxcdTc1MjhcXFxcdTY1YWRcXFxcdTYzZDJcXFxcdTg5ZTNcXFxcdTY3OTAsXFxcXHU4OWM2XFxcXHU5ODkxXFxcXHU5NGZlXFxcXHU2M2E1OlxcXCIgKyB2bGluayk7XFxuICAgICAgICAgICAgZXZhbChcXFwibGV0IGNvbmZpZyA9XFxcIiArIGZldGNoKFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015UGFyc2VTZXQuanNvblxcXCIpKTtcXG4gICAgICAgICAgICBldmFsKGZldGNoKGNvbmZpZy5jaikpO1xcbiAgICAgICAgICAgIHJldHVybiBheXRtUGFyc2UodmxpbmspO1xcbiAgICAgICAgfVxcbiAgICAgICAgLCB2bGluayk7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICByZXR1cm4gJChcXFwiaGlrZXI6Ly9lbXB0eVxcXCIpLmxhenlSdWxlKChwdGFiLCB2bGluaywganhVcmwsIGFwcFVybCkgPT4ge1xcbiAgICAgICAgICAgIGxvZyhcXFwiXFxcXG5cXFxcdTRmN2ZcXFxcdTc1MjhcXFxcdTllZDhcXFxcdThiYTRcXFxcdTg5ZTNcXFxcdTY3OTAsXFxcXHU4OWM2XFxcXHU5ODkxXFxcXHU5NGZlXFxcXHU2M2E1OlxcXCIgKyB2bGluayk7XFxuICAgICAgICAgICAgZnVuY3Rpb24gY2hhbmdlVmlkZW9VcmwodXJsKSB7XFxuICAgICAgICAgICAgICAgIGlmICh1cmwuaW5jbHVkZXMoXFxcIndrZmlsZVxcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICB1cmwgPSB1cmwgKyBcXFwiO3tSZWZlcmVyQGh0dHBzOi8vZmFudHVhbi53a2ZpbGUuY29tL31cXFwiO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHB0YWIgPT0gXFxcImJpbGliaWxpXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IHVybCArIFxcXCI7e1JlZmVyZXJAaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tLyYmVXNlci1BZ2VudEBNb3ppbGxhLzUuMH1cXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHRhYiA9PSBcXFwibWd0dlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gdXJsICsgXFxcIjt7UmVmZXJlckB3d3cubWd0di5jb20mJlVzZXItQWdlbnRATW96aWxsYS81LjB9XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXJsLmluY2x1ZGVzKFxcXCJvamJrXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IHVybCArIFxcXCI7e1JlZmVyZXJAaHR0cHM6Ly9iYWsub2pia2p4LmNvbS99XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoIXVybC5pbmNsdWRlcyhcXFwiaHR0cFxcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIlxcXFx1OTRmZVxcXFx1NjNhNVxcXFx1NGUwZFxcXFx1NjYyZlxcXFx1NGVlNWh0dHBcXFxcdTVmMDBcXFxcdTU5MzQoXFxcXHU1M2VmXFxcXHU4MGZkXFxcXHU1MmEwXFxcXHU1YmM2XFxcXHU0ZTg2KVxcXCIpO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKC9cXFxcLm0zdTgvLnRlc3QodXJsKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWNoZU0zdTgodXJsKTtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVybCArIFxcXCIjaXNWaWRlbz10cnVlI1xcXCI7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgaWYgKC9cXFxcLm0zdTh8XFxcXC5tcDR8b2JqXFxcXC90b3N8bmV0ZWFzZVxcXFwuY29tLy50ZXN0KHZsaW5rKSAmJiAvaHR0cC8udGVzdCh2bGluaykgJiYgIS9cXFxcLmh0bWwvLnRlc3QodmxpbmspKSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoIS9mZW5cXFxcLmxhb2RpfHJ1aWZlbmdsYnxzdW95b1xcXFwuY2MvLnRlc3QodmxpbmspKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9nKFxcXCJcXFxcdTY4YzBcXFxcdTZkNGJcXFxcdTUyMzBcXFxcdThkNDRcXFxcdTZlOTBcXFxcdTU3MzBcXFxcdTU3NDBcXFxcdTUzZWZcXFxcdTgwZmRcXFxcdTY2MmZcXFxcdTg5YzZcXFxcdTk4OTFcXFxcdTk0ZmVcXFxcdTYzYTVcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hhbmdlVmlkZW9VcmwodmxpbmspO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmICghanhVcmwgfHwgL3hcXFxcLW5cXFxcLmNjLy50ZXN0KGp4VXJsKSkge1xcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCJcXFxcdTY1ZTBcXFxcdTUzZWZcXFxcdTc1MjhcXFxcdTg5ZTNcXFxcdTY3OTBcXFwiKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBsb2coXFxcIlxcXFx1NGY3ZlxcXFx1NzUyOFxcXFx1ODllM1xcXFx1Njc5MDpcXFwiICsganhVcmwpO1xcbiAgICAgICAgICAgICAgICBsZXQgbGluayA9IGp4VXJsICsgdmxpbmssIHNjb2RlID0gSlNPTi5wYXJzZShmZXRjaChsaW5rLCB7aGVhZGVyczoge1xcXCJVc2VyLUFnZW50XFxcIjogXFxcIkRhcnQvMi4xMyAoZGFydDppbylcXFwifSwgcmVkaXJlY3Q6IGZhbHNlLCB3aXRoU3RhdHVzQ29kZTogdHJ1ZX0pKTtcXG4gICAgICAgICAgICAgICAgaWYgKHNjb2RlLnN0YXR1c0NvZGUgPT0gXFxcIjMwMlxcXCIgfHwgc2NvZGUuc3RhdHVzQ29kZSA9PSBcXFwiMzAxXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlZHVybCA9IHNjb2RlLmhlYWRlcnMubG9jYXRpb25bMF0ucmVwbGFjZSgvXFxcXFxcXFwvZywgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKFxcXCJcXFxcdTkxY2RcXFxcdTViOWFcXFxcdTU0MTE6XFxcIiArIHJlZHVybCk7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoIS8odXJsfHZpZHx2KVxcXFw9Ly50ZXN0KHJlZHVybCkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hhbmdlVmlkZW9VcmwocmVkdXJsKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIHNjb2RlLmJvZHkgPSBmZXRjaChyZWR1cmwpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGxldCBodG1sID0gc2NvZGUuYm9keTtcXG4gICAgICAgICAgICAgICAgaWYgKC80MDQgTm90IEZvdW5kfOWkh+ahiOWQjuWPr+e7p+e7reiuv+mXri8udGVzdChodG1sKSkge1xcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCI0MDRcXFxcdTRlODZcXFwiKTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIGlmICgvXFxcXDxib2R5Ly50ZXN0KGh0bWwpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoW1xcXCJcXFxcdTVmMDBcXFxcdTU5Y2JcXFxcdTg5YzZcXFxcdTk4OTFcXFxcdTU1YzVcXFxcdTYzYTJcXFwiLCBcXFwiXFxcXHU2MjUzXFxcXHU1ZjAwXFxcXHU4OWUzXFxcXHU2NzkwXFxcXHU3ZjUxXFxcXHU5ODc1XFxcIiwgXFxcIlxcXFx1NGY3ZlxcXFx1NzUyOFxcXFx1NTE4NVxcXFx1N2Y2ZVxcXFx1ODllM1xcXFx1Njc5MFxcXCJdLCAxLCBcXFwiXFxcXHU2OGMwXFxcXHU2ZDRiXFxcXHU1MjMwXFxcXHU4OWUzXFxcXHU2NzkwXFxcXHU0ZTNhXFxcXHU3ZjUxXFxcXHU5ODc1XFxcXHU2NTcwXFxcXHU2MzZlXFxcIikuc2VsZWN0KChsaW5rLCBwdGFiLCB2bGluaywgYXBwVXJsKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PSBcXFwiXFxcXHU1ZjAwXFxcXHU1OWNiXFxcXHU4OWM2XFxcXHU5ODkxXFxcXHU1NWM1XFxcXHU2M2EyXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZUNhY2hlKFxcXCJodHRwczovL2NvZGUuYWxpeXVuLmNvbS9semsyMzU1OS9QdWJsaWNSdWxlL3Jhdy9tYXN0ZXIveDVydWxlLmpzXFxcIiwgMjQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHg1cnVsZShsaW5rLCBsaW5rKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PSBcXFwiXFxcXHU2MjUzXFxcXHU1ZjAwXFxcXHU4OWUzXFxcXHU2NzkwXFxcXHU3ZjUxXFxcXHU5ODc1XFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwid2ViOi8vXFxcIiArIGxpbms7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PSBcXFwiXFxcXHU0ZjdmXFxcXHU3NTI4XFxcXHU1MTg1XFxcXHU3ZjZlXFxcXHU4OWUzXFxcXHU2NzkwXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2coXFxcIlxcXFx1NGY3ZlxcXFx1NzUyOFxcXFx1NTE4NVxcXFx1N2Y2ZVxcXFx1ODllM1xcXFx1Njc5MFxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93TG9hZGluZyhcXFwiXFxcXHU2YjYzXFxcXHU1NzI4XFxcXHU4ZmRiXFxcXHU4ODRjXFxcXHU4OWUzXFxcXHU2NzkwLi4uXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcImhpa2VyOi8vcGFnZS9teVBhcnNlXFxcIikpLnJ1bGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAsIGxpbmssIHB0YWIsIHZsaW5rLCBhcHBVcmwpO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcHVybCA9IEpTT04ucGFyc2UoaHRtbCkudXJsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hhbmdlVmlkZW9VcmwocHVybCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwiXFxcXHU4OWUzXFxcXHU2NzkwXFxcXHU1M2VmXFxcXHU4MGZkXFxcXHU1MmEwXFxcXHU1YmM2XFxcXHU0ZTg2XFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgIGxvZyhcXFwiXFxcXG5cXFxcdTY3MmFcXFxcdTgwZmRcXFxcdTYyMTBcXFxcdTUyOWZcXFxcdTgzYjdcXFxcdTUzZDZcXFxcdTg5YzZcXFxcdTk4OTFcXFxcdTU3MzBcXFxcdTU3NDA6XFxcIiArIGUubWVzc2FnZSArIFxcXCJcXFxcblxcXFx1NWMxZFxcXFx1OGJkNVxcXFx1NGY3ZlxcXFx1NzUyOFxcXFx1ODljNFxcXFx1NTIxOVxcXFx1NTE4NVxcXFx1N2Y2ZVxcXFx1ODllM1xcXFx1Njc5MFxcXCIpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXCJoaWtlcjovL3BhZ2UvbXlQYXJzZVxcXCIpKS5ydWxlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICAsIHB0YWIsIHZsaW5rLCBqeFVybCwgYXBwVXJsKTtcXG4gICAgfVxcbn1cXG4pKClcIn0se1wibmFtZVwiOlwi5YaF572u6Kej5p6QXCIsXCJwYXRoXCI6XCJteVBhcnNlXCIsXCJydWxlXCI6XCIoKCkgPT4ge1xcbiAgICBmdW5jdGlvbiBjaGFuZ2VWaWRlb1VybCh1cmwpIHtcXG4gICAgICAgIC8v5pS55Y+Y54m55a6a5Zyw5Z2A55qEUmVmZXJlclxcbiAgICAgICAgaWYgKHVybC5pbmNsdWRlcyhcXFwid2tmaWxlXFxcIikpIHtcXG4gICAgICAgICAgICB1cmwgPSB1cmwgKyAnO3tSZWZlcmVyQGh0dHBzOi8vZmFudHVhbi53a2ZpbGUuY29tL30nO1xcbiAgICAgICAgfSBlbHNlIGlmIChwdGFiID09ICdiaWxpYmlsaScpIHtcXG4gICAgICAgICAgICB1cmwgPSB1cmwgKyAnO3tSZWZlcmVyQGh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS8mJlVzZXItQWdlbnRATW96aWxsYS81LjB9JztcXG4gICAgICAgIH0gZWxzZSBpZiAocHRhYiA9PSAnbWd0dicpIHtcXG4gICAgICAgICAgICB1cmwgPSB1cmwgKyAnO3tSZWZlcmVyQHd3dy5tZ3R2LmNvbSYmVXNlci1BZ2VudEBNb3ppbGxhLzUuMH0nO1xcbiAgICAgICAgfSBlbHNlIGlmICh1cmwuaW5jbHVkZXMoXFxcIm9qYmtcXFwiKSkge1xcbiAgICAgICAgICAgIHVybCA9IHVybCArICc7e1JlZmVyZXJAaHR0cHM6Ly9iYWsub2pia2p4LmNvbS99JztcXG4gICAgICAgIH1cXG4gICAgICAgIC8v6L+U5Zue6KeG6aKR6ZO+5o6lXFxuICAgICAgICBpZiAoIXVybC5pbmNsdWRlcyhcXFwiaHR0cFxcXCIpKSB7XFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLpk77mjqXkuI3mmK/ku6VodHRw5byA5aS0KOWPr+iDveWKoOWvhuS6hilcXFwiKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgaWYgKC9cXFxcLm0zdTgvLnRlc3QodXJsKSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FjaGVNM3U4KHVybCk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVybCArICcjaXNWaWRlbz10cnVlIyc7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIC8vYWVz6Kej5a+GXFxuICAgIGZ1bmN0aW9uIERlKGRhdGEsIHRva2VuX2tleSwgdG9rZW5faXYpIHtcXG4gICAgICAgIGV2YWwoZ2V0Q3J5cHRvSlMoKSk7XFxuICAgICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UodG9rZW5fa2V5KTtcXG4gICAgICAgIHZhciBpdiA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKHRva2VuX2l2KTtcXG4gICAgICAgIHJldHVybiBDcnlwdG9KUy5BRVMuZGVjcnlwdChkYXRhLCBrZXksIHtcXG4gICAgICAgICAgICBpdjogaXYsXFxuICAgICAgICAgICAgbW9kZTogQ3J5cHRvSlMubW9kZS5DQkMsXFxuICAgICAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3XFxuICAgICAgICB9KS50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XFxuICAgIH07XFxuICAgIGlmICh2bGluay5pbmNsdWRlcygnbTN1OC5jYWNoZS5zdW95by5jYycpKSB7XFxuICAgICAgICBsZXQgdXJsID0gSlNPTi5wYXJzZShmZXRjaCgnaHR0cHM6Ly9qaHBjLm1hbmR1aHUuY29tL2R1b2R1by9hcGkucGhwJywgeyBib2R5OiAndXJsPScgKyB2bGluaywgbWV0aG9kOiAnUE9TVCcgfSkpLnVybDtcXG4gICAgICAgIHJldHVybiBjaGFuZ2VWaWRlb1VybChEZSh1cmwsIG1kNSgnclhqV3ZYbDYnKSwgJ05YYkhvV0picHNFT2luOGInKSk7XFxuICAgIH0gZWxzZSBpZiAodmxpbmsuaW5jbHVkZXMoJ3J1aWZlbmdsYicpKSB7XFxuICAgICAgICBsZXQgdXJsID0gSlNPTi5wYXJzZShmZXRjaCgnaHR0cDovL3RzLnlqaGFuLmNvbTo4MDkwL2FwaS8/a2V5PURTUUZnWGRtajl4a0R5aVhkciZ1cmw9JyArIHZsaW5rKSkudXJsO1xcbiAgICAgICAgcmV0dXJuIGNoYW5nZVZpZGVvVXJsKHVybCk7XFxuICAgICAgICAvKmxldCBodG1sID0gZmV0Y2goJ2h0dHBzOi8vdHYueWpoYW4uY29tOjQ0MjMvQ0w0Sy8/dXJsPScgKyB2bGluayksXFxuICAgICAgICAgICAgbGVfdG9rZW4gPSBodG1sLm1hdGNoKC9sZV90b2tlbi4qPS4qXFxcIiguKilcXFwiLylbMV0sXFxuICAgICAgICAgICAgdXJsID0gaHRtbC5tYXRjaCgvXFxcInVybFxcXCIuKjouKlxcXCIoLiopXFxcIi8pWzFdO1xcbiAgICAgICAgcmV0dXJuIGNoYW5nZVZpZGVvVXJsKERlKHVybCwgXFxcIkE0MkVBQzBDMkI0MDg0NzJcXFwiLCBsZV90b2tlbikpOyovXFxuICAgIH0gZWxzZSBpZiAodmxpbmsuaW5jbHVkZXMoXFxcInh1ZXJlbi1cXFwiKSkge1xcbiAgICAgICAgbGV0IGh0bWwgPSBmZXRjaCgnaHR0cHM6Ly9kaWFveW9uZy5xZDIzNC5jbi8/dXJsPScgKyB2bGluayksXFxuICAgICAgICAgICAgbGVfdG9rZW4gPSBodG1sLm1hdGNoKC9sZV90b2tlblxcXFxzKj1cXFxccypcXFwiKC4qKVxcXCIvKVsxXSxcXG4gICAgICAgICAgICB1cmwgPSBodG1sLm1hdGNoKC9cXFwidXJsXFxcIlxcXFxzKjpcXFxccypcXFwiKC4qKVxcXCIvKVsxXTtcXG4gICAgICAgIHJldHVybiBjaGFuZ2VWaWRlb1VybChEZSh1cmwsICdBNDJFQUMwQzJCNDA4NDczJywgbGVfdG9rZW4pKTtcXG4gICAgfSBlbHNlIGlmICh2bGluay5pbmNsdWRlcyhcXFwibmV0ZmxpeG1vbS1cXFwiKSkge1xcbiAgICAgICAgbGV0IGh0bWwgPSBmZXRjaCgnaHR0cHM6Ly9wbGF5ZXIuNGt5YS5jb20vP3VybD0nICsgdmxpbmssIHsgaGVhZGVyczogeyByZWZlcmVyOiAnaHR0cHM6Ly9uZXRmbGl4Lm1vbScgfSB9KSxcXG4gICAgICAgICAgICBsZV90b2tlbiA9IGh0bWwubWF0Y2goL2xlX3Rva2VuXFxcXHMqPVxcXFxzKlxcXCIoLiopXFxcIi8pWzFdLFxcbiAgICAgICAgICAgIHVybCA9IGh0bWwubWF0Y2goL1xcXCJ1cmxcXFwiXFxcXHMqOlxcXFxzKlxcXCIoLiopXFxcIi8pWzFdO1xcbiAgICAgICAgcmV0dXJuIGNoYW5nZVZpZGVvVXJsKERlKHVybCwgJzMzMzE4MEIzRUYwRUQ5RDAnLCBsZV90b2tlbikpO1xcbiAgICB9IGVsc2UgaWYgKHB0YWIuaW5jbHVkZXMoJ25mdXhzJykpIHtcXG4gICAgICAgIGxldCBodG1sID0gZmV0Y2goJ2h0dHBzOi8vYXBpLnhrdmlkZW8uZGVzaWduL20zdTgucGhwP3VybD0nICsgdmxpbmspLFxcbiAgICAgICAgICAgIGJ0X3Rva2VuID0gaHRtbC5tYXRjaCgvYnRfdG9rZW5cXFxccyo9XFxcXHMqXFxcIiguKilcXFwiLylbMV0sXFxuICAgICAgICAgICAgdXJsID0gaHRtbC5tYXRjaCgvXFxcInVybFxcXCJcXFxccyo6XFxcXHMqZ2V0VmlkZW9JbmZvXFxcXChcXFwiKC4qKVxcXCIvKVsxXTtcXG4gICAgICAgIHJldHVybiBjaGFuZ2VWaWRlb1VybChEZSh1cmwsICd6c2RyZjg4MDIwM2dodXJkJywgYnRfdG9rZW4pKTtcXG4gICAgfSBlbHNlIGlmICgvcWl5aXx5b3VrdXxxcS5jb218bWd0dnxiaWxpYmlsaXxpeGlndWF8bWlndXxzb2h1fHBwdHZ8bGV8MTkwNVxcXFwuY29tfGZ1blxcXFwudHYvLnRlc3QodmxpbmspKSB7XFxuICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoXFxcImh0dHBzOi8vanhxZC50a3lzLnR2L2RubWEucGhwP3VybD1cXFwiICsgdmxpbmspLFxcbiAgICAgICAgICAgIGJ0X3Rva2VuID0gaHRtbC5tYXRjaCgvYnRfdG9rZW5cXFxccyo9XFxcXHMqXFxcIiguKilcXFwiLylbMV0sXFxuICAgICAgICAgICAgdXJsID0gaHRtbC5tYXRjaCgvXFxcInVybFxcXCJcXFxccyo6XFxcXHMqZ2V0VmlkZW9JbmZvXFxcXChcXFwiKC4qKVxcXCIvKVsxXTtcXG4gICAgICAgIHJldHVybiBjaGFuZ2VWaWRlb1VybChEZSh1cmwsIFxcXCI3NjkyQUE3MEVFRjkyQjQyXFxcIiwgYnRfdG9rZW4pKTtcXG4gICAgfSBlbHNlIGlmICh2bGluay5pbmNsdWRlcyhcXFwiTFQtXFxcIikpIHtcXG4gICAgICAgIGxldCBodG1sID0gcmVxdWVzdChcXFwiaHR0cHM6Ly9qeHFkLnRreXMudHYvZG5tYS5waHA/dXJsPVxcXCIgKyB2bGluayksXFxuICAgICAgICAgICAgYnRfdG9rZW4gPSBodG1sLm1hdGNoKC9idF90b2tlblxcXFxzKj1cXFxccypcXFwiKC4qKVxcXCIvKVsxXSxcXG4gICAgICAgICAgICB1cmwgPSBodG1sLm1hdGNoKC9cXFwidXJsXFxcIlxcXFxzKjpcXFxccypnZXRWaWRlb0luZm9cXFxcKFxcXCIoLiopXFxcIi8pWzFdO1xcbiAgICAgICAgcmV0dXJuIGNoYW5nZVZpZGVvVXJsKERlKHVybCwgXFxcIjc2OTJBQTcwRUVGOTJCNDJcXFwiLCBidF90b2tlbikpO1xcbiAgICB9IGVsc2UgaWYgKHZsaW5rLmluY2x1ZGVzKFxcXCJyZW5yZW5taS1cXFwiKSkge1xcbiAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KFxcXCJodHRwczovL2p4cWQudGt5cy50di9kbm1hLnBocD91cmw9XFxcIiArIHZsaW5rKSxcXG4gICAgICAgICAgICBidF90b2tlbiA9IGh0bWwubWF0Y2goL2J0X3Rva2VuXFxcXHMqPVxcXFxzKlxcXCIoLiopXFxcIi8pWzFdLFxcbiAgICAgICAgICAgIHVybCA9IGh0bWwubWF0Y2goL1xcXCJ1cmxcXFwiXFxcXHMqOlxcXFxzKmdldFZpZGVvSW5mb1xcXFwoXFxcIiguKilcXFwiLylbMV07XFxuICAgICAgICByZXR1cm4gY2hhbmdlVmlkZW9VcmwoRGUodXJsLCBcXFwiNzY5MkFBNzBFRUY5MkI0MlxcXCIsIGJ0X3Rva2VuKSk7XFxuICAgIH0gZWxzZSBpZiAodmxpbmsuaW5jbHVkZXMoXFxcIlJvbmdYaW5nVlItXFxcIikpIHtcXG4gICAgICAgIGxldCB1cmwgPSBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImh0dHBzOi8vdnZpcC5mdW5zbGluZS5jbjo4ODY2L2FwaS8/a2V5PWZLNngwNzZrMThMVTM0eDAyTiZ1cmw9XFxcIiArIHZsaW5rKSkudXJsO1xcbiAgICAgICAgcmV0dXJuIGNoYW5nZVZpZGVvVXJsKHVybCk7XFxuICAgIH0gZWxzZSBpZiAodmxpbmsuaW5jbHVkZXMoXFxcInhmeS1cXFwiKSkge1xcbiAgICAgICAgbGV0IHVybCA9IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaHR0cHM6Ly92aXAueGZ5dW4ub25lL2hvbWUvYXBpP3R5cGU9eXMmdWlkPTI1ODE5MjMma2V5PWFlZmlrbG90d3pDRUZISk80OCZ1cmw9XFxcIiArIHZsaW5rKSkudXJsO1xcbiAgICAgICAgcmV0dXJuIGNoYW5nZVZpZGVvVXJsKHVybCk7XFxuICAgIH0gZWxzZSBpZiAodmxpbmsuaW5jbHVkZXMoXFxcImZlbi5sYW9kaVxcXCIpKSB7XFxuICAgICAgICBsZXQgaHRtbCA9IGZldGNoKFxcXCJodHRwczovL3BsYXkudGt5cy50di9sYW9kaS5waHAvP3VybD1cXFwiICsgdmxpbmspLFxcbiAgICAgICAgICAgIHVybCA9IGh0bWwubWF0Y2goL3Z1cmxcXFxccyo9XFxcXHMqJyguKiknLylbMV07XFxuICAgICAgICByZXR1cm4gY2hhbmdlVmlkZW9VcmwodXJsKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIHJldHVybiB2bGluaztcXG4gICAgfVxcbn0pKCk7XCJ9XSxcInNhdmVkXCI6ZmFsc2UsXCJ0aXRsZVwiOlwi6L275ZCI6ZuGLmFwcFwiLFwidmVyc2lvblwiOjAsXCJ1cmxcIjpcIiNpbW1lcnNpdmVUaGVtZSNoaWtlcjovL2VtcHR5IyNodHRwczovL3d3dy56aGFubGFuZ2J1LmNvbS9ydWlmZW5nbGJfYXBpLnBocC92MS52b2QvZGV0YWlsP3ZvZF9pZD0xNjc0NTkmdG9rZW49XCIsXCJmaW5kX3J1bGVcIjpcImpzOihcXG4oYXBwdHlwZSkgPT4ge1xcbiAgICBpZiAoL+elnumprHxUVi8udGVzdChhcHB0eXBlKSkge1xcbiAgICAgICAgZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXCJoaWtlcjovL3BhZ2UvdHZtb3ZsaXN0XFxcIikpLnJ1bGUpO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXCJoaWtlcjovL3BhZ2UvYXBwbW92bGlzdFxcXCIpKS5ydWxlKTtcXG4gICAgfVxcbn1cXG4pKFxcXCLkvJjotKhcXFwiKVwiLFwiZ3JvdXBcIjpcIui9u+WQiOmbhi5hcHBcIixcInBhZ2VzXCI6XCJbe1xcXCJuYW1lXFxcIjpcXFwiQVBQ5YiG57G75YiX6KGoXFxcIixcXFwicGF0aFxcXCI6XFxcImFwcGxpc3RkYXRhXFxcIixcXFwicnVsZVxcXCI6XFxcIihcXFxcbmZ1bmN0aW9uICgpIHtcXFxcbiAgICBsZXQgbGlzdCA9IFtdO1xcXFxuICAgIGlmIChhcHBVcmwuaW5jbHVkZXMoXFxcXFxcXCJhcGkucGhwL2FwcFxcXFxcXFwiKSkge1xcXFxuICAgICAgICBsaXN0ID0gaHRtbC5saXN0O1xcXFxuICAgIH0gZWxzZSB7XFxcXG4gICAgICAgIGlmIChhcHBVcmwuaW5jbHVkZXMoXFxcXFxcXCJ4Z2FwcFxcXFxcXFwiKSkge1xcXFxuICAgICAgICAgICAgbGlzdCA9IGh0bWwuZGF0YTtcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIGlmIChhcHBVcmwuaW5jbHVkZXMoXFxcXFxcXCIudm9kXFxcXFxcXCIpKSB7XFxcXG4gICAgICAgICAgICAgICAgbGlzdCA9IGh0bWwuZGF0YS5saXN0O1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xcXFxuICAgICAgICBsZXQge3ZvZF9uYW1lLCB2b2RfcGljLCB2b2RfaWQsIHZvZF9yZW1hcmtzfSA9IGxpc3RbaV07XFxcXG4gICAgICAgIGxldCBsaW5rID0gXFxcXFxcXCJcXFxcXFxcIjtcXFxcbiAgICAgICAgaWYgKGFwcFVybC5pbmNsdWRlcyhcXFxcXFxcImFwaS5waHAvYXBwXFxcXFxcXCIpIHx8IGFwcFVybC5pbmNsdWRlcyhcXFxcXFxcInhnYXBwXFxcXFxcXCIpKSB7XFxcXG4gICAgICAgICAgICBsaW5rID0gYXBwVXJsICsgXFxcXFxcXCJ2aWRlb19kZXRhaWw/aWQ9XFxcXFxcXCIgKyB2b2RfaWQgKyBcXFxcXFxcIiZ0b2tlbj1cXFxcXFxcIjtcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIGlmIChhcHBVcmwuaW5jbHVkZXMoXFxcXFxcXCIudm9kXFxcXFxcXCIpKSB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IGRhdGUgPSBuZXcgRGF0ZSgpO1xcXFxuICAgICAgICAgICAgICAgIGxpbmsgPSBhcHBVcmwgKyBcXFxcXFxcIi9kZXRhaWw/dm9kX2lkPVxcXFxcXFwiICsgdm9kX2lkICsgXFxcXFxcXCImcmVsX2xpbWl0PTEwJmtleT1cXFxcXFxcIiArIChkYXRlLmdldE1vbnRoKCkgKyAxKSArIChkYXRlLmdldERhdGUoKSA8IDEwID8gXFxcXFxcXCIwXFxcXFxcXCIgKyBkYXRlLmdldERhdGUoKSA6IGRhdGUuZ2V0RGF0ZSgpKTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBpZiAoL2lvcGVueXVuLy50ZXN0KGFwcFVybCkpIHtcXFxcbiAgICAgICAgICAgIGxpbmsgPSBhcHBVcmwgKyBcXFxcXFxcIi9kZXRhaWxJRD92b2RfaWQ9XFxcXFxcXCIgKyB2b2RfaWQgKyBcXFxcXFxcIiZyZWxfbGltaXQ9MTBcXFxcXFxcIjtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBpdGVtcy5wdXNoKHt0aXRsZTogdm9kX25hbWUsIHBpY191cmw6IHZvZF9waWMgKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiLCBkZXNjOiB2b2RfcmVtYXJrcywgY29sX3R5cGU6IFxcXFxcXFwibW92aWVfM19tYXJxdWVlXFxcXFxcXCIsIHVybDogJChcXFxcXFxcIiNpbW1lcnNpdmVUaGVtZSNoaWtlcjovL2VtcHR5IyNcXFxcXFxcIiArIGxpbmspLnJ1bGUoKCkgPT4ge1xcXFxuICAgICAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgICAgICBldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBwbW92bGlzdFxcXFxcXFwiKSkucnVsZSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgICAgIGxvZyhcXFxcXFxcIlxcXFxcXFxcdTVmNzFcXFxcXFxcXHU3MjQ3XFxcXFxcXFx1OGJlNlxcXFxcXFxcdTYwYzVcXFxcXFxcXHU1MWZhXFxcXFxcXFx1OTUxOTpcXFxcXFxcIiArIGUubWVzc2FnZSk7XFxcXG4gICAgICAgICAgICAgICAgc2V0UmVzdWx0KFtdKTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfVxcXFxuICAgICAgICApfSk7XFxcXG4gICAgfVxcXFxufVxcXFxuKSgpXFxcIn0se1xcXCJuYW1lXFxcIjpcXFwiQVBQ6aaW6aG15YiX6KGoXFxcIixcXFwicGF0aFxcXCI6XFxcImFwcGluZGV4ZGF0YVxcXCIsXFxcInJ1bGVcXFwiOlxcXCIoXFxcXG5mdW5jdGlvbiAoKSB7XFxcXG4gICAgbGV0IGxpc3QgPSBbXTtcXFxcbiAgICBpZiAoYXBwVXJsLmluY2x1ZGVzKFxcXFxcXFwiYXBpLnBocC9hcHBcXFxcXFxcIikpIHtcXFxcbiAgICAgICAgbGlzdCA9IGh0bWwubGlzdDtcXFxcbiAgICB9IGVsc2Uge1xcXFxuICAgICAgICBpZiAoYXBwVXJsLmluY2x1ZGVzKFxcXFxcXFwieGdhcHBcXFxcXFxcIikpIHtcXFxcbiAgICAgICAgICAgIGxpc3QgPSBodG1sLmRhdGE7XFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICBpZiAoYXBwVXJsLmluY2x1ZGVzKFxcXFxcXFwiLnZvZFxcXFxcXFwiKSkge1xcXFxuICAgICAgICAgICAgICAgIGxpc3QgPSBodG1sLmRhdGEubGlzdDtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcXFxcbiAgICAgICAgbGV0IGxpc3RzID0gW10sIHR5cGVuYW1lID0gXFxcXFxcXCJcXFxcXFxcIjtcXFxcbiAgICAgICAgaWYgKGFwcFVybC5pbmNsdWRlcyhcXFxcXFxcImFwaS5waHAvYXBwXFxcXFxcXCIpIHx8IGFwcFVybC5pbmNsdWRlcyhcXFxcXFxcInhnYXBwXFxcXFxcXCIpKSB7XFxcXG4gICAgICAgICAgICBsaXN0cyA9IGxpc3RbaV0udmxpc3Q7XFxcXG4gICAgICAgICAgICB0eXBlbmFtZSA9IGxpc3RbaV0udHlwZV9uYW1lO1xcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgaWYgKGFwcFVybC5pbmNsdWRlcyhcXFxcXFxcIi52b2RcXFxcXFxcIikpIHtcXFxcbiAgICAgICAgICAgICAgICBsaXN0cyA9IGxpc3RbaV0udm9kX2xpc3Q7XFxcXG4gICAgICAgICAgICAgICAgdHlwZW5hbWUgPSBsaXN0W2ldLnZvZF90eXBlX25hbWU7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgaXRlbXMucHVzaCh7dGl0bGU6IHR5cGVuYW1lLCBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0XzFcXFxcXFxcIiwgdXJsOiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIn0pO1xcXFxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxpc3RzLmxlbmd0aDsgaisrKSB7XFxcXG4gICAgICAgICAgICBsZXQge3ZvZF9uYW1lLCB2b2RfcGljLCB2b2RfaWQsIHZvZF9yZW1hcmtzfSA9IGxpc3RzW2pdO1xcXFxuICAgICAgICAgICAgbGV0IGxpbmsgPSBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgaWYgKGFwcFVybC5pbmNsdWRlcyhcXFxcXFxcImFwaS5waHAvYXBwXFxcXFxcXCIpIHx8IGFwcFVybC5pbmNsdWRlcyhcXFxcXFxcInhnYXBwXFxcXFxcXCIpKSB7XFxcXG4gICAgICAgICAgICAgICAgbGluayA9IGFwcFVybCArIFxcXFxcXFwidmlkZW9fZGV0YWlsP2lkPVxcXFxcXFwiICsgdm9kX2lkICsgXFxcXFxcXCImdG9rZW49JmtleT1cXFxcXFxcIjtcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgaWYgKGFwcFVybC5pbmNsdWRlcyhcXFxcXFxcIi52b2RcXFxcXFxcIikpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGUgPSBuZXcgRGF0ZSgpO1xcXFxuICAgICAgICAgICAgICAgICAgICBsaW5rID0gYXBwVXJsICsgXFxcXFxcXCIvZGV0YWlsP3ZvZF9pZD1cXFxcXFxcIiArIHZvZF9pZCArIFxcXFxcXFwiJnJlbF9saW1pdD0xMCZrZXk9XFxcXFxcXCIgKyAoZGF0ZS5nZXRNb250aCgpICsgMSkgKyAoZGF0ZS5nZXREYXRlKCkgPCAxMCA/IFxcXFxcXFwiMFxcXFxcXFwiICsgZGF0ZS5nZXREYXRlKCkgOiBkYXRlLmdldERhdGUoKSk7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgaWYgKC9pb3Blbnl1bi8udGVzdChhcHBVcmwpKSB7XFxcXG4gICAgICAgICAgICAgICAgbGluayA9IGFwcFVybCArIFxcXFxcXFwiL2RldGFpbElEP3ZvZF9pZD1cXFxcXFxcIiArIHZvZF9pZCArIFxcXFxcXFwiJnJlbF9saW1pdD0xMFxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgaXRlbXMucHVzaCh7dGl0bGU6IHZvZF9uYW1lLCBwaWNfdXJsOiB2b2RfcGljICsgXFxcXFxcXCJAUmVmZXJlcj1cXFxcXFxcIiwgZGVzYzogdm9kX3JlbWFya3MsIGNvbF90eXBlOiBcXFxcXFxcIm1vdmllXzNfbWFycXVlZVxcXFxcXFwiLCB1cmw6ICQoXFxcXFxcXCIjaW1tZXJzaXZlVGhlbWUjaGlrZXI6Ly9lbXB0eSMjXFxcXFxcXCIgKyBsaW5rKS5ydWxlKCgpID0+IHtcXFxcbiAgICAgICAgICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgICAgICAgICBldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBwbW92bGlzdFxcXFxcXFwiKSkucnVsZSk7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxvZyhcXFxcXFxcIlxcXFxcXFxcdTVmNzFcXFxcXFxcXHU3MjQ3XFxcXFxcXFx1OGJlNlxcXFxcXFxcdTYwYzVcXFxcXFxcXHU1MWZhXFxcXFxcXFx1OTUxOTpcXFxcXFxcIiArIGUubWVzc2FnZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHNldFJlc3VsdChbXSk7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgKX0pO1xcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxufVxcXFxuKSgpXFxcIn0se1xcXCJuYW1lXFxcIjpcXFwiQVBQ6YCJ6ZuGXFxcIixcXFwicGF0aFxcXCI6XFxcImFwcG1vdmxpc3RcXFwiLFxcXCJydWxlXFxcIjpcXFwiKFxcXFxuZnVuY3Rpb24gKGNoYW5nZVVybCwgYXBwVXJsLCBhcHBVYSkge1xcXFxuICAgIGFkZExpc3RlbmVyKFxcXFxcXFwib25DbG9zZVxcXFxcXFwiLCAkLnRvU3RyaW5nKCh1cmwpID0+IHtcXFxcbiAgICAgICAgY2xlYXJWYXIoXFxcXFxcXCJhcHBub3dcXFxcXFxcIik7XFxcXG4gICAgICAgIGNsZWFyVmFyKHVybCk7XFxcXG4gICAgfVxcXFxuICAgICwgTVlfVVJMKSk7XFxcXG4gICAgbGV0IGl0ZW1zID0gW10sIGh0bWwgPSBnZXRWYXIoTVlfVVJMLCBcXFxcXFxcIlxcXFxcXFwiKSwgZGF0YSA9IHt9O1xcXFxuICAgIGlmIChodG1sID09IFxcXFxcXFwiXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgbGV0IHVybCA9IE1ZX1VSTC5zcGxpdChcXFxcXFxcIiMjXFxcXFxcXCIpWzFdO1xcXFxuICAgICAgICB1cmwgPSBjaGFuZ2VVcmwodXJsKTtcXFxcbiAgICAgICAgaHRtbCA9IGZldGNoKHVybCwge2hlYWRlcnM6IHtcXFxcXFxcIlVzZXItQWdlbnRcXFxcXFxcIjogYXBwVWF9fSk7XFxcXG4gICAgICAgIHB1dFZhcihNWV9VUkwsIGh0bWwpO1xcXFxuICAgIH1cXFxcbiAgICBpZiAoYXBwVXJsLmluY2x1ZGVzKFxcXFxcXFwieGdhcHBcXFxcXFxcIikpIHtcXFxcbiAgICAgICAgZGF0YSA9IEpTT04ucGFyc2UoaHRtbCkuZGF0YS52b2RfaW5mbztcXFxcbiAgICB9IGVsc2Uge1xcXFxuICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShodG1sKS5kYXRhO1xcXFxuICAgIH1cXFxcbiAgICBsZXQge3ZvZF9uYW1lLCB2b2RfcGljLCB2b2RfY29udGVudCwgdm9kX2NsYXNzLCB2b2RfcmVtYXJrcywgdm9kX2RpcmVjdG9yLCB2b2RfYWN0b3IsIHZvZF9hcmVhLCB2b2RfbGFuZywgdm9kX3llYXJ9ID0gZGF0YTtcXFxcbiAgICBpdGVtcy5wdXNoKHt0aXRsZTogdm9kX25hbWUgKyBcXFxcXFxcIlxcXFxcXFxcblxcXFxcXFwiICsgdm9kX2NsYXNzICsgXFxcXFxcXCIsXFxcXFxcXCIgKyB2b2RfcmVtYXJrcyArIFxcXFxcXFwiXFxcXFxcXFxuXFxcXFxcXCIgKyB2b2RfYXJlYSArIFxcXFxcXFwiL1xcXFxcXFwiICsgdm9kX2xhbmcgKyBcXFxcXFxcIi9cXFxcXFxcIiArIHZvZF95ZWFyLCBkZXNjOiBcXFxcXFxcIlxcXFxcXFxcdTViZmNcXFxcXFxcXHU2ZjE0OlxcXFxcXFwiICsgdm9kX2RpcmVjdG9yICsgXFxcXFxcXCJcXFxcXFxcXG5cXFxcXFxcXHU0ZTNiXFxcXFxcXFx1NmYxNDpcXFxcXFxcIiArIHZvZF9hY3RvciwgcGljX3VybDogdm9kX3BpYywgdXJsOiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIiwgY29sX3R5cGU6IFxcXFxcXFwibW92aWVfMV92ZXJ0aWNhbF9waWNfYmx1clxcXFxcXFwifSwge3RpdGxlOiBcXFxcXFxcIlxcXFxcXFxcdTUyNjdcXFxcXFxcXHU2MGM1XFxcXFxcXFx1N2I4MFxcXFxcXFxcdTRlY2I6XFxcXFxcXCIsIGRlc2M6IHZvZF9jb250ZW50LCB1cmw6ICQoXFxcXFxcXCJoaWtlcjovL2VtcHR5I25vUmVjb3JkSGlzdG9yeSNcXFxcXFxcIikucnVsZSgoZGVzYykgPT4ge1xcXFxuICAgICAgICBzZXRSZXN1bHQoW3t0aXRsZTogZGVzYywgY29sX3R5cGU6IFxcXFxcXFwibG9uZ190ZXh0XFxcXFxcXCJ9XSk7XFxcXG4gICAgfVxcXFxuICAgICwgdm9kX2NvbnRlbnQpLCBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0XzFcXFxcXFxcIn0pO1xcXFxuICAgIGxldCBkbmVuID0gZ2V0TXlWYXIoXFxcXFxcXCJkbmVuXFxcXFxcXCIsIFxcXFxcXFwiMFxcXFxcXFwiKTtcXFxcbiAgICBpdGVtcy5wdXNoKHt0aXRsZTogXFxcXFxcXCJcXFxcXFxcXHU2NWFkXFxcXFxcXFx1NjNkMjpcXFxcXFxcIiArIChkbmVuID09IFxcXFxcXFwiMVxcXFxcXFwiID8gXFxcXFxcXCJcXFxcXFxcXHUyMDFjXFxcXFxcXFx1MjAxY1xcXFxcXFxcdTI3MDVcXFxcXFxcXHUyMDFkXFxcXFxcXFx1MjAxZFxcXFxcXFwiIDogXFxcXFxcXCJcXFxcXFxcXHUyNzRlXFxcXFxcXCIpLCB1cmw6ICQoXFxcXFxcXCIjbm9Mb2FkaW5nI1xcXFxcXFwiKS5sYXp5UnVsZSgoZG5lbikgPT4ge1xcXFxuICAgICAgICBpZiAoZG5lbiA9PSBcXFxcXFxcIjFcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgcHV0TXlWYXIoXFxcXFxcXCJkbmVuXFxcXFxcXCIsIFxcXFxcXFwiMFxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8vXFxcXFxcXFx1NWRmMlxcXFxcXFxcdTc5ODFcXFxcXFxcXHU3NTI4XFxcXFxcXFx1NjVhZFxcXFxcXFxcdTYzZDJcXFxcXFxcXHU4YzAzXFxcXFxcXFx1NzUyOCFcXFxcXFxcIjtcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIHB1dE15VmFyKFxcXFxcXFwiZG5lblxcXFxcXFwiLCBcXFxcXFxcIjFcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL1xcXFxcXFxcdTVkZjJcXFxcXFxcXHU1ZjAwXFxcXFxcXFx1NTQyZlxcXFxcXFxcdTY1YWRcXFxcXFxcXHU2M2QyXFxcXFxcXFx1OGMwM1xcXFxcXFxcdTc1MjghXFxcXFxcXCI7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG4gICAgLCBkbmVuKSwgY29sX3R5cGU6IFxcXFxcXFwidGV4dF8yXFxcXFxcXCJ9KTtcXFxcbiAgICBpdGVtcy5wdXNoKHt0aXRsZTogXFxcXFxcXCJcXFxcXFxcXHU3ZWJmXFxcXFxcXFx1OGRlZlxcXFxcXFxcdTkxNGRcXFxcXFxcXHU3ZjZlXFxcXFxcXCIsIHVybDogXFxcXFxcXCJoaWtlcjovL2VtcHR5I25vUmVjb3JkSGlzdG9yeSNAcnVsZT1qczp0aGlzLmQ9W107cmVxdWlyZSgnaHR0cHM6Ly9naXRlYS5jb20vQUk5NTcvSGlrZXIvcmF3L20vdi9Sb3V0ZS5qcycpO1JvdXRlLnNldFBhcnNlKCk7c2V0UmVzdWx0KGQpO1xcXFxcXFwiLCBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0XzJcXFxcXFxcIn0pO1xcXFxuICAgIGxldCBjb250cyA9IFtdLCB0YWJzID0gW107XFxcXG4gICAgaWYgKGFwcFVybC5pbmNsdWRlcyhcXFxcXFxcImFwaS5waHAvYXBwXFxcXFxcXCIpIHx8IGFwcFVybC5pbmNsdWRlcyhcXFxcXFxcInhnYXBwXFxcXFxcXCIpKSB7XFxcXG4gICAgICAgIGNvbnRzID0gZGF0YS52b2RfdXJsX3dpdGhfcGxheWVyO1xcXFxuICAgIH0gZWxzZSB7XFxcXG4gICAgICAgIGNvbnRzID0gZGF0YS52b2RfcGxheV9saXN0O1xcXFxuICAgIH1cXFxcbiAgICBpZiAoY29udHMubGVuZ3RoIDwgMSkge1xcXFxuICAgICAgICBjb250cyA9IGRhdGEudm9kX3BsYXlfdXJsLnNwbGl0KFxcXFxcXFwiJCQkXFxcXFxcXCIpO1xcXFxuICAgICAgICB0YWJzID0gZGF0YS52b2RfcGxheV9mcm9tLnNwbGl0KFxcXFxcXFwiJCQkXFxcXFxcXCIpO1xcXFxuICAgIH1cXFxcbiAgICBsZXQgcHRhYiA9IFxcXFxcXFwiXFxcXFxcXCIsIHB0YWJuYW1lID0gXFxcXFxcXCJcXFxcXFxcIjtcXFxcbiAgICBpZiAoZ2V0VmFyKFxcXFxcXFwiYXBwbm93XFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpID09IFxcXFxcXFwiXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgcHV0VmFyKFxcXFxcXFwiYXBwbm93XFxcXFxcXCIsIFxcXFxcXFwiMFxcXFxcXFwiKTtcXFxcbiAgICB9XFxcXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb250cy5sZW5ndGg7IGkrKykge1xcXFxuICAgICAgICBsZXQgc3B0YWIgPSBcXFxcXFxcIlxcXFxcXFwiLCB0YWJuYW1lID0gXFxcXFxcXCJcXFxcXFxcIjtcXFxcbiAgICAgICAgaWYgKGFwcFVybC5pbmNsdWRlcyhcXFxcXFxcImFwaS5waHAvYXBwXFxcXFxcXCIpIHx8IGFwcFVybC5pbmNsdWRlcyhcXFxcXFxcInhnYXBwXFxcXFxcXCIpKSB7XFxcXG4gICAgICAgICAgICBzcHRhYiA9IGNvbnRzW2ldLmNvZGUgPyBjb250c1tpXS5jb2RlIDogdGFic1tpXTtcXFxcbiAgICAgICAgICAgIHRhYm5hbWUgPSBjb250c1tpXS5uYW1lIHx8IHNwdGFiO1xcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgc3B0YWIgPSBjb250c1tpXS5mcm9tID8gY29udHNbaV0uZnJvbSA6IHRhYnNbaV07XFxcXG4gICAgICAgICAgICB0YWJuYW1lID0gY29udHNbaV0ucGxheWVyX2luZm8gPyBjb250c1tpXS5wbGF5ZXJfaW5mby5zaG93IDogc3B0YWI7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgaXRlbXMucHVzaCh7dGl0bGU6IGdldFZhcihcXFxcXFxcImFwcG5vd1xcXFxcXFwiKSA9PSBpID8gXFxcXFxcXCJcXFxcXFxcXHUyMDFjXFxcXFxcXFx1MjAxY1xcXFxcXFxcdTIwMWRcXFxcXFxcXHUyMDFkXFxcXFxcXCIgKyB0YWJuYW1lLmJvbGQoKS5mb250Y29sb3IoXFxcXFxcXCIjRkE3Mjk4XFxcXFxcXCIpIDogdGFibmFtZSwgdXJsOiBcXFxcXFxcImhpa2VyOi8vZW1wdHkjbm9Mb2FkaW5nI0BsYXp5UnVsZT0uanM6cHV0VmFyKCdhcHBub3cnLCdcXFxcXFxcIiArIGkgKyBcXFxcXFxcIicpO3JlZnJlc2hQYWdlKGZhbHNlKTsndG9hc3Q6Ly9cXFxcXFxcXHU1MjA3XFxcXFxcXFx1NjM2MlxcXFxcXFxcdTYyMTBcXFxcXFxcXHU1MjlmISdcXFxcXFxcIiwgY29sX3R5cGU6IFxcXFxcXFwic2Nyb2xsX2J1dHRvblxcXFxcXFwifSk7XFxcXG4gICAgICAgIGlmIChnZXRWYXIoXFxcXFxcXCJhcHBub3dcXFxcXFxcIikgPT0gaSkge1xcXFxuICAgICAgICAgICAgcHRhYiA9IHNwdGFiO1xcXFxuICAgICAgICAgICAgcHRhYm5hbWUgPSB0YWJuYW1lO1xcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxuICAgIGl0ZW1zLnB1c2goe3RpdGxlOiBcXFxcXFxcIlxcXFxcXFxcdTIwMWNcXFxcXFxcXHUyMDFjXFxcXFxcXFx1MjE5M1xcXFxcXFxcdTIxOTFcXFxcXFxcXHUyMDFkXFxcXFxcXFx1MjAxZFxcXFxcXFwiICsgcHRhYm5hbWUgKyBcXFxcXFxcIi1cXFxcXFxcIiArIHB0YWIsIHVybDogXFxcXFxcXCJoaWtlcjovL2VtcHR5QGxhenlSdWxlPS5qczpwdXRWYXIoJ2FwcG1hcHBzb3J0JywgZ2V0VmFyKCdhcHBtYXBwc29ydCcsJzEnKT09JzEnPycwJzonMScpO3JlZnJlc2hQYWdlKGZhbHNlKTsndG9hc3Q6Ly9cXFxcXFxcXHU1MjA3XFxcXFxcXFx1NjM2MlxcXFxcXFxcdTYyMTBcXFxcXFxcXHU1MjlmISdcXFxcXFxcIiwgY29sX3R5cGU6IFxcXFxcXFwidGV4dF8xXFxcXFxcXCIsIGV4dHJhOiB7bGluZVZpc2libGU6IGZhbHNlfX0pO1xcXFxuICAgIGxldCBsaXN0ID0gW10sIGluZGV4ID0gZ2V0VmFyKFxcXFxcXFwiYXBwbm93XFxcXFxcXCIpO1xcXFxuICAgIGlmIChhcHBVcmwuaW5jbHVkZXMoXFxcXFxcXCJhcGkucGhwL2FwcFxcXFxcXFwiKSB8fCBhcHBVcmwuaW5jbHVkZXMoXFxcXFxcXCJ4Z2FwcFxcXFxcXFwiKSkge1xcXFxuICAgICAgICBsaXN0ID0gY29udHNbaW5kZXhdLnVybC5zcGxpdChcXFxcXFxcIiNcXFxcXFxcIik7XFxcXG4gICAgfSBlbHNlIHtcXFxcbiAgICAgICAgbGlzdCA9IGNvbnRzW2luZGV4XS51cmxzID8gY29udHNbaW5kZXhdLnVybHMgOiBjb250c1tpbmRleF0udXJsLnNwbGl0KFxcXFxcXFwiI1xcXFxcXFwiKTtcXFxcbiAgICB9XFxcXG4gICAgaWYgKGdldFZhcihcXFxcXFxcImFwcG1hcHBzb3J0XFxcXFxcXCIsIFxcXFxcXFwiMVxcXFxcXFwiKSA9PSBcXFxcXFxcIjBcXFxcXFxcIikge1xcXFxuICAgICAgICBsaXN0LnJldmVyc2UoKTtcXFxcbiAgICB9XFxcXG4gICAgbGV0IGppZWsgPSBbXTtcXFxcbiAgICB0cnkge1xcXFxuICAgICAgICBpZiAoYXBwVXJsLmluY2x1ZGVzKFxcXFxcXFwiYXBpLnBocC9hcHBcXFxcXFxcIikgfHwgYXBwVXJsLmluY2x1ZGVzKFxcXFxcXFwieGdhcHBcXFxcXFxcIikpIHtcXFxcbiAgICAgICAgICAgIGppZWsucHVzaChjb250c1tpbmRleF0ucGFyc2VfYXBpIHx8IFxcXFxcXFwiXFxcXFxcXCIpO1xcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgamllayA9IChjb250c1tpbmRleF0ucGxheWVyX2luZm8ucGFyc2UyIHx8IFxcXFxcXFwiXFxcXFxcXCIpLnNwbGl0KFxcXFxcXFwiLFxcXFxcXFwiKS5jb25jYXQoKGNvbnRzW2luZGV4XS5wbGF5ZXJfaW5mby5wYXJzZSB8fCBcXFxcXFxcIlxcXFxcXFwiKS5zcGxpdChcXFxcXFxcIixcXFxcXFxcIikpO1xcXFxuICAgICAgICAgICAgamllayA9IGppZWsubWFwKGN1ciA9PiBjdXIucmVwbGFjZShcXFxcXFxcIi4uXFxcXFxcXCIsIFxcXFxcXFwiLlxcXFxcXFwiKS5yZXBsYWNlKFxcXFxcXFwianNvbmJzXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpKTtcXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbiAgICBjYXRjaCAoZSkge1xcXFxuICAgIH1cXFxcbiAgICBqaWVrID0gamllay5maWx0ZXIoY3VyID0+ICEhY3VyKTtcXFxcbiAgICBsZXQganhVcmwgPSBqaWVrWzBdIHx8IFxcXFxcXFwiXFxcXFxcXCI7XFxcXG4gICAgbG9nKFxcXFxcXFwiXFxcXFxcXFxuXFxcXFxcXFx1NWY1M1xcXFxcXFxcdTUyNGRcXFxcXFxcXHU3ZWJmXFxcXFxcXFx1OGRlZjpcXFxcXFxcIiArIHB0YWIgKyBcXFxcXFxcIlxcXFxcXFxcblxcXFxcXFxcdTg5ZTNcXFxcXFxcXHU2NzkwXFxcXFxcXFx1NTIxN1xcXFxcXFxcdTg4Njg6XFxcXFxcXCIgKyAkLnN0cmluZ2lmeShqaWVrKSk7XFxcXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBsaXN0Lmxlbmd0aDsgaisrKSB7XFxcXG4gICAgICAgIGxldCB2bGluayA9IFxcXFxcXFwiXFxcXFxcXCIsIHRpdGxlID0gXFxcXFxcXCJcXFxcXFxcIjtcXFxcbiAgICAgICAgaWYgKGxpc3Rbal0udXJsKSB7XFxcXG4gICAgICAgICAgICB2bGluayA9IGxpc3Rbal0udXJsLnJlcGxhY2UoLyM0NTYjL2csIFxcXFxcXFwiaHR0cFxcXFxcXFwiKS5yZXBsYWNlKC8jMTIzIy9nLCBcXFxcXFxcIi5cXFxcXFxcIikucmVwbGFjZSgvIzc4OSMvZywgXFxcXFxcXCI6XFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgdGl0bGUgPSBsaXN0W2pdLm5hbWU7XFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICB2bGluayA9IGxpc3Rbal0uc3BsaXQoXFxcXFxcXCIkXFxcXFxcXCIpWzFdO1xcXFxuICAgICAgICAgICAgdGl0bGUgPSBsaXN0W2pdLnNwbGl0KFxcXFxcXFwiJFxcXFxcXFwiKVswXTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBpdGVtcy5wdXNoKHt0aXRsZTogdGl0bGUsIGNvbF90eXBlOiBcXFxcXFxcInRleHRfNFxcXFxcXFwiLCB1cmw6IGV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFxcXFxcImhpa2VyOi8vcGFnZS9sYXp5UGFyc2VcXFxcXFxcIikpLnJ1bGUpfSk7XFxcXG4gICAgfVxcXFxuICAgIHNldFJlc3VsdChpdGVtcyk7XFxcXG59XFxcXG4pKFxcXFxuZnVuY3Rpb24gY2hhbmdlVXJsKHVybCkge1xcXFxuICAgIGxldCBuZXdVcmwgPSB1cmw7XFxcXG4gICAgaWYgKHVybC5pbmNsdWRlcyhcXFxcXFxcIm9tb2Z1blxcXFxcXFwiKSkge1xcXFxuICAgICAgICBuZXdVcmwgPSB1cmwgKyBcXFxcXFxcIiZjc3JmPWElMkJJS0dMdW5KQ1p1YWQlMkJ4RVRMclp1Qm9xaGx1RkNEMGRIODZFOElFTnZCek1mQkxhNmRCOFJ6b3h4SXZ2QkVNZUp6Sm5VU3Q1MUZobFBCZDRLcjV5aEdYbHlOdkRrSnlOTURnRFoxYiUyRnNqWEFlTXRqMTdYdGVNOHB1VFkyUFFuUXdZT3lqJTJGSFVDQVZSWmtyZmxzazg3WUcxVmVTd25FVDhUcHJERDh0NnVnJTNEQHNpZ25hdHVyZT1GRUQ0QTA5MkQ1QkJCRTE4MTE3QTNCNTU4RUI2NDYxQTkyQTUyQ0Y3XFxcXFxcXCI7XFxcXG4gICAgfSBlbHNlIHtcXFxcbiAgICAgICAgaWYgKHVybC5pbmNsdWRlcyhcXFxcXFxcInhpbmx1YW5cXFxcXFxcIikpIHtcXFxcbiAgICAgICAgICAgIG5ld1VybCA9IHVybCArIFxcXFxcXFwiJmNzcmY9U1JFUUFQWDh0RkVLcFYyZExEakxaaEtrOEl4SmZEV2hOJTJCbWtzV0olMkZrZFJWd2dVaCUyRlFrVERaRW9RQVNhQXA3SHpVaXg4N1QlMkJQTGtBSXc2eUglMkI2TXJ2YXFKTTlySjVsMmI4NUlRUmJCYlclMkJEYlNZUk84Ym1Uc0tkTFlEVFZ0UkhoejVueWxSV2xHVWlkeEhmVnlMTzl0WlVpQmsxWTJBd28lMkZ6c2EydEgydTglM0RAc2lnbmF0dXJlPUZCQzcwODhDNjc3RDI5N0U2QkJCQzg1ODRBOTMzNzJEREUxMEZEOTZcXFxcXFxcIjtcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIGlmICh1cmwuaW5jbHVkZXMoXFxcXFxcXCJzeGJyZFxcXFxcXFwiKSkge1xcXFxuICAgICAgICAgICAgICAgIG5ld1VybCA9IHVybCArIFxcXFxcXFwiJmNzcmY9cjJOREx0cFM4RXVxaCUyRiUyRjhZOTZ5Y09VT0tTOUlDek5ZenlhdzVDMlVmRWdvREZESFglMkZycWolMkJZY0xXUXpINSUyQlI2bW9VT2x3T0FvSlJFdFVhMzc2dWQ3NDYyN1VEek5RMXNSR2RURDhrYjM2czFlVE1lbWNuOGQwaTdXSjZrOWloNUlQNEFkN2ZwYTYlMkYzRHN0MWpvR25jeXI3MTZkUkhETWZjdnJzM1MyOWpJJTNEQGNsaWVudF9uYW1lPTU1V0Y1NXlMNWIyeDZLZUdcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbiAgICByZXR1cm4gbmV3VXJsO1xcXFxufVxcXFxuLFxcXFxcXFwiaHR0cHM6Ly93d3cuemhhbmxhbmdidS5jb20vcnVpZmVuZ2xiX2FwaS5waHAvdjEudm9kXFxcXFxcXCIsXFxcXFxcXCJva2h0dHAvNC4xLjBcXFxcXFxcIilcXFwifSx7XFxcIm5hbWVcXFwiOlxcXCLop4bpopHop6PmnpBcXFwiLFxcXCJwYXRoXFxcIjpcXFwibGF6eVBhcnNlXFxcIixcXFwicnVsZVxcXCI6XFxcIihcXFxcbmZ1bmN0aW9uICgpIHtcXFxcbiAgICBsZXQgZW5EbiA9IGdldE15VmFyKFxcXFxcXFwiZG5lblxcXFxcXFwiLCBcXFxcXFxcIjBcXFxcXFxcIiksIHRlc3QxID0gdmxpbmsuc2VhcmNoKC95b3VrdXxtZ3R2fGl4aWd1YXxxcS5jb218cWl5aXxtaWd1fGJpbGliaWxpfHNvaHV8cHB0dnxsZXwxOTA1LmNvbS8pICE9IC0xLCB0ZXN0MiA9IHZsaW5rLnNlYXJjaCgvTFRcXFxcXFxcXC18Um9uZ1hpbmdWUlxcXFxcXFxcLXxyZW5yZW5taVxcXFxcXFxcLXx4ZnlcXFxcXFxcXC18c3VveW9cXFxcXFxcXC5jY3xmZW5cXFxcXFxcXC5sYW9kaXxydWlmZW5nbGJ8eHVlcmVuXFxcXFxcXFwtLykgIT0gLTE7XFxcXG4gICAgaWYgKCh0ZXN0MSB8fCB0ZXN0MikgJiYgZW5EbiA9PSBcXFxcXFxcIjFcXFxcXFxcIikge1xcXFxuICAgICAgICByZXR1cm4gJChcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIikubGF6eVJ1bGUoKHZsaW5rKSA9PiB7XFxcXG4gICAgICAgICAgICBsb2coXFxcXFxcXCJcXFxcXFxcXG5cXFxcXFxcXHU4YzAzXFxcXFxcXFx1NzUyOFxcXFxcXFxcdTY1YWRcXFxcXFxcXHU2M2QyXFxcXFxcXFx1ODllM1xcXFxcXFxcdTY3OTAsXFxcXFxcXFx1ODljNlxcXFxcXFxcdTk4OTFcXFxcXFxcXHU5NGZlXFxcXFxcXFx1NjNhNTpcXFxcXFxcIiArIHZsaW5rKTtcXFxcbiAgICAgICAgICAgIGV2YWwoXFxcXFxcXCJsZXQgY29uZmlnID1cXFxcXFxcIiArIGZldGNoKFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVBhcnNlU2V0Lmpzb25cXFxcXFxcIikpO1xcXFxuICAgICAgICAgICAgZXZhbChmZXRjaChjb25maWcuY2opKTtcXFxcbiAgICAgICAgICAgIHJldHVybiBheXRtUGFyc2UodmxpbmspO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgICwgdmxpbmspO1xcXFxuICAgIH0gZWxzZSB7XFxcXG4gICAgICAgIHJldHVybiAkKFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiKS5sYXp5UnVsZSgocHRhYiwgdmxpbmssIGp4VXJsLCBhcHBVcmwpID0+IHtcXFxcbiAgICAgICAgICAgIGxvZyhcXFxcXFxcIlxcXFxcXFxcblxcXFxcXFxcdTRmN2ZcXFxcXFxcXHU3NTI4XFxcXFxcXFx1OWVkOFxcXFxcXFxcdThiYTRcXFxcXFxcXHU4OWUzXFxcXFxcXFx1Njc5MCxcXFxcXFxcXHU4OWM2XFxcXFxcXFx1OTg5MVxcXFxcXFxcdTk0ZmVcXFxcXFxcXHU2M2E1OlxcXFxcXFwiICsgdmxpbmspO1xcXFxuICAgICAgICAgICAgZnVuY3Rpb24gY2hhbmdlVmlkZW9VcmwodXJsKSB7XFxcXG4gICAgICAgICAgICAgICAgaWYgKHVybC5pbmNsdWRlcyhcXFxcXFxcIndrZmlsZVxcXFxcXFwiKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICB1cmwgPSB1cmwgKyBcXFxcXFxcIjt7UmVmZXJlckBodHRwczovL2ZhbnR1YW4ud2tmaWxlLmNvbS99XFxcXFxcXCI7XFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKHB0YWIgPT0gXFxcXFxcXCJiaWxpYmlsaVxcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSB1cmwgKyBcXFxcXFxcIjt7UmVmZXJlckBodHRwczovL3d3dy5iaWxpYmlsaS5jb20vJiZVc2VyLUFnZW50QE1vemlsbGEvNS4wfVxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHB0YWIgPT0gXFxcXFxcXCJtZ3R2XFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSB1cmwgKyBcXFxcXFxcIjt7UmVmZXJlckB3d3cubWd0di5jb20mJlVzZXItQWdlbnRATW96aWxsYS81LjB9XFxcXFxcXCI7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1cmwuaW5jbHVkZXMoXFxcXFxcXCJvamJrXFxcXFxcXCIpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IHVybCArIFxcXFxcXFwiO3tSZWZlcmVyQGh0dHBzOi8vYmFrLm9qYmtqeC5jb20vfVxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICBpZiAoIXVybC5pbmNsdWRlcyhcXFxcXFxcImh0dHBcXFxcXFxcIikpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXFxcXFwiXFxcXFxcXFx1OTRmZVxcXFxcXFxcdTYzYTVcXFxcXFxcXHU0ZTBkXFxcXFxcXFx1NjYyZlxcXFxcXFxcdTRlZTVodHRwXFxcXFxcXFx1NWYwMFxcXFxcXFxcdTU5MzQoXFxcXFxcXFx1NTNlZlxcXFxcXFxcdTgwZmRcXFxcXFxcXHU1MmEwXFxcXFxcXFx1NWJjNlxcXFxcXFxcdTRlODYpXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGlmICgvXFxcXFxcXFwubTN1OC8udGVzdCh1cmwpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FjaGVNM3U4KHVybCk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXJsICsgXFxcXFxcXCIjaXNWaWRlbz10cnVlI1xcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgICAgICBpZiAoL1xcXFxcXFxcLm0zdTh8XFxcXFxcXFwubXA0fG9ialxcXFxcXFxcL3Rvc3xuZXRlYXNlXFxcXFxcXFwuY29tLy50ZXN0KHZsaW5rKSAmJiAvaHR0cC8udGVzdCh2bGluaykgJiYgIS9cXFxcXFxcXC5odG1sLy50ZXN0KHZsaW5rKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICBpZiAoIS9mZW5cXFxcXFxcXC5sYW9kaXxydWlmZW5nbGJ8c3VveW9cXFxcXFxcXC5jYy8udGVzdCh2bGluaykpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZyhcXFxcXFxcIlxcXFxcXFxcdTY4YzBcXFxcXFxcXHU2ZDRiXFxcXFxcXFx1NTIzMFxcXFxcXFxcdThkNDRcXFxcXFxcXHU2ZTkwXFxcXFxcXFx1NTczMFxcXFxcXFxcdTU3NDBcXFxcXFxcXHU1M2VmXFxcXFxcXFx1ODBmZFxcXFxcXFxcdTY2MmZcXFxcXFxcXHU4OWM2XFxcXFxcXFx1OTg5MVxcXFxcXFxcdTk0ZmVcXFxcXFxcXHU2M2E1XFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoYW5nZVZpZGVvVXJsKHZsaW5rKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICBpZiAoIWp4VXJsIHx8IC94XFxcXFxcXFwtblxcXFxcXFxcLmNjLy50ZXN0KGp4VXJsKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcXFxcXCJcXFxcXFxcXHU2NWUwXFxcXFxcXFx1NTNlZlxcXFxcXFxcdTc1MjhcXFxcXFxcXHU4OWUzXFxcXFxcXFx1Njc5MFxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgbG9nKFxcXFxcXFwiXFxcXFxcXFx1NGY3ZlxcXFxcXFxcdTc1MjhcXFxcXFxcXHU4OWUzXFxcXFxcXFx1Njc5MDpcXFxcXFxcIiArIGp4VXJsKTtcXFxcbiAgICAgICAgICAgICAgICBsZXQgbGluayA9IGp4VXJsICsgdmxpbmssIHNjb2RlID0gSlNPTi5wYXJzZShmZXRjaChsaW5rLCB7aGVhZGVyczoge1xcXFxcXFwiVXNlci1BZ2VudFxcXFxcXFwiOiBcXFxcXFxcIkRhcnQvMi4xMyAoZGFydDppbylcXFxcXFxcIn0sIHJlZGlyZWN0OiBmYWxzZSwgd2l0aFN0YXR1c0NvZGU6IHRydWV9KSk7XFxcXG4gICAgICAgICAgICAgICAgaWYgKHNjb2RlLnN0YXR1c0NvZGUgPT0gXFxcXFxcXCIzMDJcXFxcXFxcIiB8fCBzY29kZS5zdGF0dXNDb2RlID09IFxcXFxcXFwiMzAxXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlZHVybCA9IHNjb2RlLmhlYWRlcnMubG9jYXRpb25bMF0ucmVwbGFjZSgvXFxcXFxcXFxcXFxcXFxcXC9nLCBcXFxcXFxcIlxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgbG9nKFxcXFxcXFwiXFxcXFxcXFx1OTFjZFxcXFxcXFxcdTViOWFcXFxcXFxcXHU1NDExOlxcXFxcXFwiICsgcmVkdXJsKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEvKHVybHx2aWR8dilcXFxcXFxcXD0vLnRlc3QocmVkdXJsKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoYW5nZVZpZGVvVXJsKHJlZHVybCk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgc2NvZGUuYm9keSA9IGZldGNoKHJlZHVybCk7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIGxldCBodG1sID0gc2NvZGUuYm9keTtcXFxcbiAgICAgICAgICAgICAgICBpZiAoLzQwNCBOb3QgRm91bmR85aSH5qGI5ZCO5Y+v57un57ut6K6/6ZeuLy50ZXN0KGh0bWwpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFxcXFxcIjQwNFxcXFxcXFxcdTRlODZcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKC9cXFxcXFxcXDxib2R5Ly50ZXN0KGh0bWwpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChbXFxcXFxcXCJcXFxcXFxcXHU1ZjAwXFxcXFxcXFx1NTljYlxcXFxcXFxcdTg5YzZcXFxcXFxcXHU5ODkxXFxcXFxcXFx1NTVjNVxcXFxcXFxcdTYzYTJcXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcXHU2MjUzXFxcXFxcXFx1NWYwMFxcXFxcXFxcdTg5ZTNcXFxcXFxcXHU2NzkwXFxcXFxcXFx1N2Y1MVxcXFxcXFxcdTk4NzVcXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcXHU0ZjdmXFxcXFxcXFx1NzUyOFxcXFxcXFxcdTUxODVcXFxcXFxcXHU3ZjZlXFxcXFxcXFx1ODllM1xcXFxcXFxcdTY3OTBcXFxcXFxcIl0sIDEsIFxcXFxcXFwiXFxcXFxcXFx1NjhjMFxcXFxcXFxcdTZkNGJcXFxcXFxcXHU1MjMwXFxcXFxcXFx1ODllM1xcXFxcXFxcdTY3OTBcXFxcXFxcXHU0ZTNhXFxcXFxcXFx1N2Y1MVxcXFxcXFxcdTk4NzVcXFxcXFxcXHU2NTcwXFxcXFxcXFx1NjM2ZVxcXFxcXFwiKS5zZWxlY3QoKGxpbmssIHB0YWIsIHZsaW5rLCBhcHBVcmwpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT0gXFxcXFxcXCJcXFxcXFxcXHU1ZjAwXFxcXFxcXFx1NTljYlxcXFxcXFxcdTg5YzZcXFxcXFxcXHU5ODkxXFxcXFxcXFx1NTVjNVxcXFxcXFxcdTYzYTJcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlQ2FjaGUoXFxcXFxcXCJodHRwczovL2NvZGUuYWxpeXVuLmNvbS9semsyMzU1OS9QdWJsaWNSdWxlL3Jhdy9tYXN0ZXIveDVydWxlLmpzXFxcXFxcXCIsIDI0KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHg1cnVsZShsaW5rLCBsaW5rKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT0gXFxcXFxcXCJcXFxcXFxcXHU2MjUzXFxcXFxcXFx1NWYwMFxcXFxcXFxcdTg5ZTNcXFxcXFxcXHU2NzkwXFxcXFxcXFx1N2Y1MVxcXFxcXFxcdTk4NzVcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwid2ViOi8vXFxcXFxcXCIgKyBsaW5rO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0ID09IFxcXFxcXFwiXFxcXFxcXFx1NGY3ZlxcXFxcXFxcdTc1MjhcXFxcXFxcXHU1MTg1XFxcXFxcXFx1N2Y2ZVxcXFxcXFxcdTg5ZTNcXFxcXFxcXHU2NzkwXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2coXFxcXFxcXCJcXFxcXFxcXHU0ZjdmXFxcXFxcXFx1NzUyOFxcXFxcXFxcdTUxODVcXFxcXFxcXHU3ZjZlXFxcXFxcXFx1ODllM1xcXFxcXFxcdTY3OTBcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0xvYWRpbmcoXFxcXFxcXCJcXFxcXFxcXHU2YjYzXFxcXFxcXFx1NTcyOFxcXFxcXFxcdThmZGJcXFxcXFxcXHU4ODRjXFxcXFxcXFx1ODllM1xcXFxcXFxcdTY3OTAuLi5cXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFxcXFxcImhpa2VyOi8vcGFnZS9teVBhcnNlXFxcXFxcXCIpKS5ydWxlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICwgbGluaywgcHRhYiwgdmxpbmssIGFwcFVybCk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwdXJsID0gSlNPTi5wYXJzZShodG1sKS51cmw7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoYW5nZVZpZGVvVXJsKHB1cmwpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcXFxcXCJcXFxcXFxcXHU4OWUzXFxcXFxcXFx1Njc5MFxcXFxcXFxcdTUzZWZcXFxcXFxcXHU4MGZkXFxcXFxcXFx1NTJhMFxcXFxcXFxcdTViYzZcXFxcXFxcXHU0ZTg2XFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgICAgICAgICBsb2coXFxcXFxcXCJcXFxcXFxcXG5cXFxcXFxcXHU2NzJhXFxcXFxcXFx1ODBmZFxcXFxcXFxcdTYyMTBcXFxcXFxcXHU1MjlmXFxcXFxcXFx1ODNiN1xcXFxcXFxcdTUzZDZcXFxcXFxcXHU4OWM2XFxcXFxcXFx1OTg5MVxcXFxcXFxcdTU3MzBcXFxcXFxcXHU1NzQwOlxcXFxcXFwiICsgZS5tZXNzYWdlICsgXFxcXFxcXCJcXFxcXFxcXG5cXFxcXFxcXHU1YzFkXFxcXFxcXFx1OGJkNVxcXFxcXFxcdTRmN2ZcXFxcXFxcXHU3NTI4XFxcXFxcXFx1ODljNFxcXFxcXFxcdTUyMTlcXFxcXFxcXHU1MTg1XFxcXFxcXFx1N2Y2ZVxcXFxcXFxcdTg5ZTNcXFxcXFxcXHU2NzkwXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcXFxcXCJoaWtlcjovL3BhZ2UvbXlQYXJzZVxcXFxcXFwiKSkucnVsZSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgLCBwdGFiLCB2bGluaywganhVcmwsIGFwcFVybCk7XFxcXG4gICAgfVxcXFxufVxcXFxuKSgpXFxcIn0se1xcXCJuYW1lXFxcIjpcXFwi5YaF572u6Kej5p6QXFxcIixcXFwicGF0aFxcXCI6XFxcIm15UGFyc2VcXFwiLFxcXCJydWxlXFxcIjpcXFwiKCgpID0+IHtcXFxcbiAgICBmdW5jdGlvbiBjaGFuZ2VWaWRlb1VybCh1cmwpIHtcXFxcbiAgICAgICAgLy/mlLnlj5jnibnlrprlnLDlnYDnmoRSZWZlcmVyXFxcXG4gICAgICAgIGlmICh1cmwuaW5jbHVkZXMoXFxcXFxcXCJ3a2ZpbGVcXFxcXFxcIikpIHtcXFxcbiAgICAgICAgICAgIHVybCA9IHVybCArICc7e1JlZmVyZXJAaHR0cHM6Ly9mYW50dWFuLndrZmlsZS5jb20vfSc7XFxcXG4gICAgICAgIH0gZWxzZSBpZiAocHRhYiA9PSAnYmlsaWJpbGknKSB7XFxcXG4gICAgICAgICAgICB1cmwgPSB1cmwgKyAnO3tSZWZlcmVyQGh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS8mJlVzZXItQWdlbnRATW96aWxsYS81LjB9JztcXFxcbiAgICAgICAgfSBlbHNlIGlmIChwdGFiID09ICdtZ3R2Jykge1xcXFxuICAgICAgICAgICAgdXJsID0gdXJsICsgJzt7UmVmZXJlckB3d3cubWd0di5jb20mJlVzZXItQWdlbnRATW96aWxsYS81LjB9JztcXFxcbiAgICAgICAgfSBlbHNlIGlmICh1cmwuaW5jbHVkZXMoXFxcXFxcXCJvamJrXFxcXFxcXCIpKSB7XFxcXG4gICAgICAgICAgICB1cmwgPSB1cmwgKyAnO3tSZWZlcmVyQGh0dHBzOi8vYmFrLm9qYmtqeC5jb20vfSc7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgLy/ov5Tlm57op4bpopHpk77mjqVcXFxcbiAgICAgICAgaWYgKCF1cmwuaW5jbHVkZXMoXFxcXFxcXCJodHRwXFxcXFxcXCIpKSB7XFxcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcXFxcXCLpk77mjqXkuI3mmK/ku6VodHRw5byA5aS0KOWPr+iDveWKoOWvhuS6hilcXFxcXFxcIik7XFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICBpZiAoL1xcXFxcXFxcLm0zdTgvLnRlc3QodXJsKSkge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBjYWNoZU0zdTgodXJsKTtcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVybCArICcjaXNWaWRlbz10cnVlIyc7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG4gICAgLy9hZXPop6Plr4ZcXFxcbiAgICBmdW5jdGlvbiBEZShkYXRhLCB0b2tlbl9rZXksIHRva2VuX2l2KSB7XFxcXG4gICAgICAgIGV2YWwoZ2V0Q3J5cHRvSlMoKSk7XFxcXG4gICAgICAgIHZhciBrZXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZSh0b2tlbl9rZXkpO1xcXFxuICAgICAgICB2YXIgaXYgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZSh0b2tlbl9pdik7XFxcXG4gICAgICAgIHJldHVybiBDcnlwdG9KUy5BRVMuZGVjcnlwdChkYXRhLCBrZXksIHtcXFxcbiAgICAgICAgICAgIGl2OiBpdixcXFxcbiAgICAgICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLFxcXFxuICAgICAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3XFxcXG4gICAgICAgIH0pLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KTtcXFxcbiAgICB9O1xcXFxuICAgIGlmICh2bGluay5pbmNsdWRlcygnbTN1OC5jYWNoZS5zdW95by5jYycpKSB7XFxcXG4gICAgICAgIGxldCB1cmwgPSBKU09OLnBhcnNlKGZldGNoKCdodHRwczovL2pocGMubWFuZHVodS5jb20vZHVvZHVvL2FwaS5waHAnLCB7IGJvZHk6ICd1cmw9JyArIHZsaW5rLCBtZXRob2Q6ICdQT1NUJyB9KSkudXJsO1xcXFxuICAgICAgICByZXR1cm4gY2hhbmdlVmlkZW9VcmwoRGUodXJsLCBtZDUoJ3JYald2WGw2JyksICdOWGJIb1dKYnBzRU9pbjhiJykpO1xcXFxuICAgIH0gZWxzZSBpZiAodmxpbmsuaW5jbHVkZXMoJ3J1aWZlbmdsYicpKSB7XFxcXG4gICAgICAgIGxldCB1cmwgPSBKU09OLnBhcnNlKGZldGNoKCdodHRwOi8vdHMueWpoYW4uY29tOjgwOTAvYXBpLz9rZXk9RFNRRmdYZG1qOXhrRHlpWGRyJnVybD0nICsgdmxpbmspKS51cmw7XFxcXG4gICAgICAgIHJldHVybiBjaGFuZ2VWaWRlb1VybCh1cmwpO1xcXFxuICAgICAgICAvKmxldCBodG1sID0gZmV0Y2goJ2h0dHBzOi8vdHYueWpoYW4uY29tOjQ0MjMvQ0w0Sy8/dXJsPScgKyB2bGluayksXFxcXG4gICAgICAgICAgICBsZV90b2tlbiA9IGh0bWwubWF0Y2goL2xlX3Rva2VuLio9LipcXFxcXFxcIiguKilcXFxcXFxcIi8pWzFdLFxcXFxuICAgICAgICAgICAgdXJsID0gaHRtbC5tYXRjaCgvXFxcXFxcXCJ1cmxcXFxcXFxcIi4qOi4qXFxcXFxcXCIoLiopXFxcXFxcXCIvKVsxXTtcXFxcbiAgICAgICAgcmV0dXJuIGNoYW5nZVZpZGVvVXJsKERlKHVybCwgXFxcXFxcXCJBNDJFQUMwQzJCNDA4NDcyXFxcXFxcXCIsIGxlX3Rva2VuKSk7Ki9cXFxcbiAgICB9IGVsc2UgaWYgKHZsaW5rLmluY2x1ZGVzKFxcXFxcXFwieHVlcmVuLVxcXFxcXFwiKSkge1xcXFxuICAgICAgICBsZXQgaHRtbCA9IGZldGNoKCdodHRwczovL2RpYW95b25nLnFkMjM0LmNuLz91cmw9JyArIHZsaW5rKSxcXFxcbiAgICAgICAgICAgIGxlX3Rva2VuID0gaHRtbC5tYXRjaCgvbGVfdG9rZW5cXFxcXFxcXHMqPVxcXFxcXFxccypcXFxcXFxcIiguKilcXFxcXFxcIi8pWzFdLFxcXFxuICAgICAgICAgICAgdXJsID0gaHRtbC5tYXRjaCgvXFxcXFxcXCJ1cmxcXFxcXFxcIlxcXFxcXFxccyo6XFxcXFxcXFxzKlxcXFxcXFwiKC4qKVxcXFxcXFwiLylbMV07XFxcXG4gICAgICAgIHJldHVybiBjaGFuZ2VWaWRlb1VybChEZSh1cmwsICdBNDJFQUMwQzJCNDA4NDczJywgbGVfdG9rZW4pKTtcXFxcbiAgICB9IGVsc2UgaWYgKHZsaW5rLmluY2x1ZGVzKFxcXFxcXFwibmV0ZmxpeG1vbS1cXFxcXFxcIikpIHtcXFxcbiAgICAgICAgbGV0IGh0bWwgPSBmZXRjaCgnaHR0cHM6Ly9wbGF5ZXIuNGt5YS5jb20vP3VybD0nICsgdmxpbmssIHsgaGVhZGVyczogeyByZWZlcmVyOiAnaHR0cHM6Ly9uZXRmbGl4Lm1vbScgfSB9KSxcXFxcbiAgICAgICAgICAgIGxlX3Rva2VuID0gaHRtbC5tYXRjaCgvbGVfdG9rZW5cXFxcXFxcXHMqPVxcXFxcXFxccypcXFxcXFxcIiguKilcXFxcXFxcIi8pWzFdLFxcXFxuICAgICAgICAgICAgdXJsID0gaHRtbC5tYXRjaCgvXFxcXFxcXCJ1cmxcXFxcXFxcIlxcXFxcXFxccyo6XFxcXFxcXFxzKlxcXFxcXFwiKC4qKVxcXFxcXFwiLylbMV07XFxcXG4gICAgICAgIHJldHVybiBjaGFuZ2VWaWRlb1VybChEZSh1cmwsICczMzMxODBCM0VGMEVEOUQwJywgbGVfdG9rZW4pKTtcXFxcbiAgICB9IGVsc2UgaWYgKHB0YWIuaW5jbHVkZXMoJ25mdXhzJykpIHtcXFxcbiAgICAgICAgbGV0IGh0bWwgPSBmZXRjaCgnaHR0cHM6Ly9hcGkueGt2aWRlby5kZXNpZ24vbTN1OC5waHA/dXJsPScgKyB2bGluayksXFxcXG4gICAgICAgICAgICBidF90b2tlbiA9IGh0bWwubWF0Y2goL2J0X3Rva2VuXFxcXFxcXFxzKj1cXFxcXFxcXHMqXFxcXFxcXCIoLiopXFxcXFxcXCIvKVsxXSxcXFxcbiAgICAgICAgICAgIHVybCA9IGh0bWwubWF0Y2goL1xcXFxcXFwidXJsXFxcXFxcXCJcXFxcXFxcXHMqOlxcXFxcXFxccypnZXRWaWRlb0luZm9cXFxcXFxcXChcXFxcXFxcIiguKilcXFxcXFxcIi8pWzFdO1xcXFxuICAgICAgICByZXR1cm4gY2hhbmdlVmlkZW9VcmwoRGUodXJsLCAnenNkcmY4ODAyMDNnaHVyZCcsIGJ0X3Rva2VuKSk7XFxcXG4gICAgfSBlbHNlIGlmICgvcWl5aXx5b3VrdXxxcS5jb218bWd0dnxiaWxpYmlsaXxpeGlndWF8bWlndXxzb2h1fHBwdHZ8bGV8MTkwNVxcXFxcXFxcLmNvbXxmdW5cXFxcXFxcXC50di8udGVzdCh2bGluaykpIHtcXFxcbiAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KFxcXFxcXFwiaHR0cHM6Ly9qeHFkLnRreXMudHYvZG5tYS5waHA/dXJsPVxcXFxcXFwiICsgdmxpbmspLFxcXFxuICAgICAgICAgICAgYnRfdG9rZW4gPSBodG1sLm1hdGNoKC9idF90b2tlblxcXFxcXFxccyo9XFxcXFxcXFxzKlxcXFxcXFwiKC4qKVxcXFxcXFwiLylbMV0sXFxcXG4gICAgICAgICAgICB1cmwgPSBodG1sLm1hdGNoKC9cXFxcXFxcInVybFxcXFxcXFwiXFxcXFxcXFxzKjpcXFxcXFxcXHMqZ2V0VmlkZW9JbmZvXFxcXFxcXFwoXFxcXFxcXCIoLiopXFxcXFxcXCIvKVsxXTtcXFxcbiAgICAgICAgcmV0dXJuIGNoYW5nZVZpZGVvVXJsKERlKHVybCwgXFxcXFxcXCI3NjkyQUE3MEVFRjkyQjQyXFxcXFxcXCIsIGJ0X3Rva2VuKSk7XFxcXG4gICAgfSBlbHNlIGlmICh2bGluay5pbmNsdWRlcyhcXFxcXFxcIkxULVxcXFxcXFwiKSkge1xcXFxuICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoXFxcXFxcXCJodHRwczovL2p4cWQudGt5cy50di9kbm1hLnBocD91cmw9XFxcXFxcXCIgKyB2bGluayksXFxcXG4gICAgICAgICAgICBidF90b2tlbiA9IGh0bWwubWF0Y2goL2J0X3Rva2VuXFxcXFxcXFxzKj1cXFxcXFxcXHMqXFxcXFxcXCIoLiopXFxcXFxcXCIvKVsxXSxcXFxcbiAgICAgICAgICAgIHVybCA9IGh0bWwubWF0Y2goL1xcXFxcXFwidXJsXFxcXFxcXCJcXFxcXFxcXHMqOlxcXFxcXFxccypnZXRWaWRlb0luZm9cXFxcXFxcXChcXFxcXFxcIiguKilcXFxcXFxcIi8pWzFdO1xcXFxuICAgICAgICByZXR1cm4gY2hhbmdlVmlkZW9VcmwoRGUodXJsLCBcXFxcXFxcIjc2OTJBQTcwRUVGOTJCNDJcXFxcXFxcIiwgYnRfdG9rZW4pKTtcXFxcbiAgICB9IGVsc2UgaWYgKHZsaW5rLmluY2x1ZGVzKFxcXFxcXFwicmVucmVubWktXFxcXFxcXCIpKSB7XFxcXG4gICAgICAgIGxldCBodG1sID0gcmVxdWVzdChcXFxcXFxcImh0dHBzOi8vanhxZC50a3lzLnR2L2RubWEucGhwP3VybD1cXFxcXFxcIiArIHZsaW5rKSxcXFxcbiAgICAgICAgICAgIGJ0X3Rva2VuID0gaHRtbC5tYXRjaCgvYnRfdG9rZW5cXFxcXFxcXHMqPVxcXFxcXFxccypcXFxcXFxcIiguKilcXFxcXFxcIi8pWzFdLFxcXFxuICAgICAgICAgICAgdXJsID0gaHRtbC5tYXRjaCgvXFxcXFxcXCJ1cmxcXFxcXFxcIlxcXFxcXFxccyo6XFxcXFxcXFxzKmdldFZpZGVvSW5mb1xcXFxcXFxcKFxcXFxcXFwiKC4qKVxcXFxcXFwiLylbMV07XFxcXG4gICAgICAgIHJldHVybiBjaGFuZ2VWaWRlb1VybChEZSh1cmwsIFxcXFxcXFwiNzY5MkFBNzBFRUY5MkI0MlxcXFxcXFwiLCBidF90b2tlbikpO1xcXFxuICAgIH0gZWxzZSBpZiAodmxpbmsuaW5jbHVkZXMoXFxcXFxcXCJSb25nWGluZ1ZSLVxcXFxcXFwiKSkge1xcXFxuICAgICAgICBsZXQgdXJsID0gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaHR0cHM6Ly92dmlwLmZ1bnNsaW5lLmNuOjg4NjYvYXBpLz9rZXk9Zks2eDA3NmsxOExVMzR4MDJOJnVybD1cXFxcXFxcIiArIHZsaW5rKSkudXJsO1xcXFxuICAgICAgICByZXR1cm4gY2hhbmdlVmlkZW9VcmwodXJsKTtcXFxcbiAgICB9IGVsc2UgaWYgKHZsaW5rLmluY2x1ZGVzKFxcXFxcXFwieGZ5LVxcXFxcXFwiKSkge1xcXFxuICAgICAgICBsZXQgdXJsID0gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaHR0cHM6Ly92aXAueGZ5dW4ub25lL2hvbWUvYXBpP3R5cGU9eXMmdWlkPTI1ODE5MjMma2V5PWFlZmlrbG90d3pDRUZISk80OCZ1cmw9XFxcXFxcXCIgKyB2bGluaykpLnVybDtcXFxcbiAgICAgICAgcmV0dXJuIGNoYW5nZVZpZGVvVXJsKHVybCk7XFxcXG4gICAgfSBlbHNlIGlmICh2bGluay5pbmNsdWRlcyhcXFxcXFxcImZlbi5sYW9kaVxcXFxcXFwiKSkge1xcXFxuICAgICAgICBsZXQgaHRtbCA9IGZldGNoKFxcXFxcXFwiaHR0cHM6Ly9wbGF5LnRreXMudHYvbGFvZGkucGhwLz91cmw9XFxcXFxcXCIgKyB2bGluayksXFxcXG4gICAgICAgICAgICB1cmwgPSBodG1sLm1hdGNoKC92dXJsXFxcXFxcXFxzKj1cXFxcXFxcXHMqJyguKiknLylbMV07XFxcXG4gICAgICAgIHJldHVybiBjaGFuZ2VWaWRlb1VybCh1cmwpO1xcXFxuICAgIH0gZWxzZSB7XFxcXG4gICAgICAgIHJldHVybiB2bGluaztcXFxcbiAgICB9XFxcXG59KSgpO1xcXCJ9XVwifSIsInBpY1VybCI6Imh0dHBzOi8vd3d3LnpoYW5sYW5nYnUuY29tL3VwbG9hZC92b2QvMjAyMjA3MDgtMS85N2E4YjM4ZTViOWI4MTgwNTcxODI2YWI5YmYyMWY5Ny5qcGdAUmVmZXJlcj0iLCJ0aXRsZSI6IuaIkeeahOWFhOW8n+WnkOWmuSJ9
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement