xiaomianao666

小程序:磁力君.简

Mar 27th, 2024
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@磁力君.简@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoi56OB5Yqb5ZCbLueugCIsImF1dGhvciI6IuWwj+ajieiihPCfjJ4mQExveURnSWsiLCJ1cmwiOiJoaWtlcjovL2VtcHR5IyNmeXBhZ2UiLCJ2ZXJzaW9uIjoyMjMsImNvbF90eXBlIjoibW92aWVfMyIsImNsYXNzX25hbWUiOiIiLCJ0eXBlIjoiYWxsIiwiY2xhc3NfdXJsIjoiIiwiYXJlYV9uYW1lIjoiIiwiYXJlYV91cmwiOiIiLCJzb3J0X25hbWUiOiIiLCJ5ZWFyX25hbWUiOiIiLCJzb3J0X3VybCI6IiIsInllYXJfdXJsIjoiIiwiZmluZF9ydWxlIjoianM6JC5yZXF1aXJlKFwiTWFpblwiKTsiLCJzZWFyY2hfdXJsIjoiaGlrZXI6Ly9lbXB0eT9zZWFyY2hUZXJtcz0qKiIsImdyb3VwIjoi4pGjNFPnu7Tkv64iLCJzZWFyY2hGaW5kIjoianM6XG5jbGVhclB1YmxpY0l0ZW0oXCLno4HlipvlkJsu566A6Lez6L2sXCIpO1xubGV0IGtleSA9IGdldFBhcmFtKFwic2VhcmNoVGVybXNcIik7XG5zZXRSZXN1bHQoW3tcbiAgICB0aXRsZTogXCLngrnmiJHlvIDlp4vogZrlkIjmkJzntKJcIiArIGtleSxcbiAgICB1cmw6IFwiaGlrZXI6Ly9wYWdlL3NvdSNub0hpc3RvcnkjP3A9ZnlwYWdlXCIsXG4gICAgZXh0cmE6IHtcbiAgICAgICAgcGFnZVRpdGxlOiBcIuaQnOe0olwiICsga2V5LFxuICAgICAgICBzZWFyY2hUZXJtczoga2V5LFxuICAgICAgICBoaWRlU2V0dGluZzogdHJ1ZVxuICAgIH1cbn1dKTsiLCJkZXRhaWxfY29sX3R5cGUiOiJtb3ZpZV8xIiwiZGV0YWlsX2ZpbmRfcnVsZSI6IiIsInNkZXRhaWxfY29sX3R5cGUiOiJtb3ZpZV8xIiwic2RldGFpbF9maW5kX3J1bGUiOiIiLCJ1YSI6Im1vYmlsZSIsInByZVJ1bGUiOiIiLCJwYWdlcyI6Ilt7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6KeE5YiZ5aSE55CGXCIsXCJwYXRoXCI6XCJkYXRhXCIsXCJydWxlXCI6XCJqczpcXG5mdW5jdGlvbiBkb3VibGVUcmVhdGluZyhjb25maWcsIGdldE1vZGVVcmwpIHtcXG4gICAgbGV0IHtcXG4gICAgICAgIG9wZW5Nb2RlLFxcbiAgICAgICAgZmluZEFsaVVybCxcXG4gICAgICAgIGJhc2ljVXJsLFxcbiAgICAgICAgbmFtZVxcbiAgICB9ID0gY29uZmlnO1xcbiAgICBsZXQgY2lsaVVybCA9IGlucHV0O1xcbiAgICBsZXQgc2hhcmVQd2Q7XFxuICAgIGlmIChmaW5kQWxpVXJsKSB7XFxuICAgICAgICBsZXQgcmVzdWx0O1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICByZXN1bHQgPSBmaW5kQWxpVXJsKGNpbGlVcmwsIGJhc2ljVXJsKTtcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICByZXR1cm4gJChcXFwi5pCc57Si5byV5pOO44CMXFxcIiArIG5hbWUgKyBcXFwi44CN5aSx5pWI6K+36IGU57O75pCc57Si5byV5pOO5L2c6ICF5L+u5aSN5oiW5Yig6ZmkXFxcXG5cXFxcbuW8leaTjuS9nOiAheWPr+S7peWOu+WumOaWuemikemBk+ivoumXrlxcXFxu54K55Ye756Gu5a6a5b+r6YCf5Yig6ZmkXFxcIikuY29uZmlybSgobmFtZSkgPT4ge1xcbiAgICAgICAgICAgICAgICBjb25maXJtKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi5rip6aao5o+Q56S6XFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFxcXCLnoa7lrpropoHliKDpmaRcXFwiICsgbmFtZSArIFxcXCLlkJfvvJ/ms6jmhI/liKDpmaTlkI7ml6Dms5XmgaLlpI1cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgY29uZmlybTogJC50b1N0cmluZygobmFtZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcnIgPSAkLnJlcXVpcmUoXFxcImNvbmZpZ3NcXFwiKS5nZXRKc29uKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gYXJyLmZpbmRJbmRleCh2ID0+IHYubmFtZSA9PT0gbmFtZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnNwbGljZShpbmRleCwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgJC5yZXF1aXJlKFxcXCJjb25maWdzXFxcIikuc2F2ZUpzb24oYXJyKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhckl0ZW0oXFxcInJ1bGVcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5Yig6Zmk5oiQ5YqfXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgIH0sIG5hbWUpXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH0sIG5hbWUpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0KSAmJiByZXN1bHQubGVuZ3RoID09PSAxKSB7XFxuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0WzBdO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT09IFxcXCJzdHJpbmdcXFwiKSB7XFxuICAgICAgICAgICAgY2lsaVVybCA9IHJlc3VsdDtcXG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpICYmIHJlc3VsdC5sZW5ndGgpIHtcXG4gICAgICAgICAgICBsZXQgaXNTdHIgPSB0eXBlb2YocmVzdWx0WzBdKSA9PT0gXFxcInN0cmluZ1xcXCI7XFxuICAgICAgICAgICAgbGV0IHNlbGVjdCA9IHJlc3VsdDtcXG4gICAgICAgICAgICBpZiAoIWlzU3RyKSB7XFxuICAgICAgICAgICAgICAgIHNlbGVjdCA9IHJlc3VsdC5tYXAodiA9PiB2LmNpbGlVcmwpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBzZWxlY3QgPSBzZWxlY3QubWFwKHYgPT4gdi5yZXBsYWNlKC9odHRwLio/XFxcXC9zXFxcXC8vLCBcXFwiXFxcIikpO1xcbiAgICAgICAgICAgIHJldHVybiAkKHNlbGVjdCkuc2VsZWN0KChjb25maWcsIGdldE1vZGVVcmwsIGlzU3RyLCByZXN1bHQpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IGNpbGlVcmw7XFxuICAgICAgICAgICAgICAgIGxldCBzaGFyZVB3ZDtcXG4gICAgICAgICAgICAgICAgaWYgKCFpc1N0cikge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHIgPSByZXN1bHQuZmluZCh2ID0+IHYuY2lsaVVybC5pbmNsdWRlcyhpbnB1dCkpO1xcbiAgICAgICAgICAgICAgICAgICAgY2lsaVVybCA9IHIuY2lsaVVybDtcXG4gICAgICAgICAgICAgICAgICAgIHNoYXJlUHdkID0gci5zaGFyZVB3ZDtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIGNpbGlVcmwgPSByZXN1bHQuZmluZCh2ID0+IHYuaW5jbHVkZXMoaW5wdXQpKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0TW9kZVVybChjaWxpVXJsLCBzaGFyZVB3ZCwgY29uZmlnLm9wZW5Nb2RlKTtcXG4gICAgICAgICAgICB9LCBjb25maWcsIGdldE1vZGVVcmwsIGlzU3RyLCByZXN1bHQpO1xcbiAgICAgICAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheShyZXN1bHQpICYmIHR5cGVvZihyZXN1bHQpID09PSBcXFwib2JqZWN0XFxcIikge1xcbiAgICAgICAgICAgIGNpbGlVcmwgPSByZXN1bHQuY2lsaVVybCwgc2hhcmVQd2QgPSByZXN1bHQuc2hhcmVQd2Q7XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIGdldE1vZGVVcmwoY2lsaVVybCwgc2hhcmVQd2QsIG9wZW5Nb2RlKTtcXG59XFxuXFxuZnVuY3Rpb24gZ2V0TW9kZVVybChjaWxpVXJsLCBzaGFyZVB3ZCwgb3Blbk1vZGUpIHtcXG4gICAgaWYgKGNpbGlVcmwuc3RhcnRzV2l0aChcXFwibWFnbmV0XFxcIikpIHtcXG4gICAgICAgIGlmIChvcGVuTW9kZSA9PT0gXFxcIua1t+mYlOinhueVjFxcXCIpIHtcXG4gICAgICAgICAgICByZXR1cm4gY2lsaVVybDtcXG4gICAgICAgIH0gZWxzZSBpZiAob3Blbk1vZGUgPT09IFxcXCLov4Xpm7fkuIvovb1cXFwiKSB7ICAgICAgICAgXFxub3BlbkFwcEludGVudCgnY29tLnh1bmxlaS5kb3dubG9hZHByb3ZpZGVyJywgJ2NvbS54dW5sZWkuZG93bmxvYWRwcm92aWRlci5sYXVuY2guTGF1bmNoQWN0aXZpdHkyJywge2ludGVudERhdGE6IGNpbGlVcmx9KVxcbiAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v44CQ6L+F6Zu35LiL6L2944CRJ1xcbiAgICAgICAgfSBlbHNlIGlmIChvcGVuTW9kZSA9PT0gXFxcIlBJS1BBS1xcXCIpIHsgICAgICAgICBcXG4gICAgICAgICAgcmV0dXJuICdwaWtwYWthcHA6Ly9teXBpa3Bhay5jb20veHBhbi9tYWluX3RhYj90YWI9MSZhZGRfdXJsPScgKyBjaWxpVXJsXFxuICAgICAgICB9IGVsc2UgaWYgKG9wZW5Nb2RlID09PSBcXFwi5bm75b2x5LiL6L29XFxcIikge1xcbiBvcGVuQXBwSW50ZW50KCdjb20ueGluZ3N1LmRvd25sb2FkZXInLCAnY29tLmU0YS5ydW50aW1lLmFuZHJvaWQubWFpbkFjdGl2aXR5Jywge2ludGVudERhdGE6IGNpbGlVcmx9KVxcbiAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v44CQ5bm75b2x5LiL6L2944CRJ1xcbiAgICAgICAgfWVsc2UgaWYgKG9wZW5Nb2RlID09PSBcXFwi5LqM6am05LiL6L29XFxcIikge1xcbiAgICAgICAgICBvcGVuQXBwSW50ZW50KCdjb20ucWlrY2xvdWQucWlrJywgJ2NvbS5lNGEucnVudGltZS5hbmRyb2lkLm1haW5BY3Rpdml0eScsIHtpbnRlbnREYXRhOiBjaWxpVXJsfSlcXG4gICAgICAgICAgcmV0dXJuICd0b2FzdDovL+OAkOS6jOmptOS4i+i9veOAkSdcXG4gICAgICAgIH1lbHNlIGlmIChvcGVuTW9kZSA9PT0gXFxcIuWwj+eZveS4i+i9vVxcXCIpIHtcXG4gICAgICAgICAgb3BlbkFwcEludGVudCgneGIuZG93bmxvYWQuY29tJywgJ2lvLmRjbG91ZC5QYW5kb3JhRW50cnknLCB7aW50ZW50RGF0YTogY2lsaVVybH0pXFxuICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/jgJDlsI/nmb3kuIvovb3jgJEnXFxuICAgICAgICB9ZWxzZSBpZiAob3Blbk1vZGUgPT09IFxcXCLmgp/nqbrkuIvovb1cXFwiKSB7XFxub3BlbkFwcEludGVudCgnY29tLnlmb28ud2tEb3dubG9hZGVyJywgJ2NvbS55Zm9vLndrRG93bmxvYWRlci5NYWluQWN0aXZpdHknLCB7aW50ZW50RGF0YTogY2lsaVVybH0pXFxuICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/jgJDmgp/nqbrkuIvovb3jgJEnXFxuICAgICAgICB9ICBlbHNlIHtyZXR1cm4gY2lsaVVybDt9XFxuICAgIH0gZWxzZSBpZiAoY2lsaVVybC5pbmNsdWRlcyhcXFwicGFuLnF1YXJrLmNuL3MvXFxcIikpIHtcXG4gICAgICAgIGxldCBoYXMgPSBmZXRjaChcXFwiaGlrZXI6Ly9ob21lQFF1YXJrLueugFxcXCIpIT1cXFwibnVsbFxcXCI7XFxuICAgICAgICBpZiAoaGFzKSB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL3BhZ2UvcXVhcmtMaXN0P3J1bGU9UXVhcmsu566AJnJlYWx1cmw9XFxcIiArIGVuY29kZVVSSUNvbXBvbmVudChjaWxpVXJsKSArIFxcXCImc2hhcmVQd2Q9XFxcIiArIChzaGFyZVB3ZCB8fCBcXFwiXFxcIik7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHJldHVybiBjaWxpVXJsO1xcbiAgICAgICAgfVxcbiAgICB9IGVsc2UgaWYgKC9hbGkocGFufHl1bmRyaXZlKVxcXFwuY29tLy50ZXN0KGNpbGlVcmwpKXtcXG4gICAgICAgIGxldCBoYXMgPSBmZXRjaChcXFwiaGlrZXI6Ly9ob21lQOS6keebmOWQmy7nroBcXFwiKSE9XFxcIm51bGxcXFwiO1xcbiAgICAgICAgaWYgKGhhcykge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9wYWdlL2FsaXl1bj9ydWxlPeS6keebmOWQmy7nroAmcGFnZT1meXBhZ2UmcmVhbHVybD1cXFwiICsgZW5jb2RlVVJJQ29tcG9uZW50KGlucHV0KSArIFxcXCImc2hhcmVQd2Q9XFxcIjtcXG4gICAgICAgICB9XFxuICAgIH1lbHNlIGlmIChjaWxpVXJsLnN0YXJ0c1dpdGgoXFxcImh0dHBcXFwiKSkge1xcbiAgICAgICAgcmV0dXJuIFxcXCJ3ZWI6Ly9cXFwiICsgY2lsaVVybDtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIHJldHVybiBjaWxpVXJsO1xcbiAgICB9XFxufVxcblxcbmZ1bmN0aW9uIGdldENvbXBsZXRlUnVsZShydWxlKSB7XFxuICAgIGxldCBmaW5kID0gbmV3IEZ1bmN0aW9uKFxcXCJzXFxcIiwgXFxcInBhZ2VcXFwiLCBcXFwidXNlclxcXCIsIFxcXCJiYXNpY1VybFxcXCIsIHJ1bGUuZmluZCk7XFxuICAgIHJ1bGUuZmluZCA9IChzLCBwYWdlKSA9PiBmaW5kKHMsIHBhZ2UsIHJ1bGUudXNlciB8fCB7fSwgcnVsZS5iYXNpY1VybCB8fCBcXFwiXFxcIik7XFxuICAgIGlmIChydWxlLmZpbmRBbGlVcmwpIHtcXG4gICAgICAgIHJ1bGUuZmluZEFsaVVybCA9IG5ldyBGdW5jdGlvbihcXFwiaW5wdXRcXFwiLCBcXFwiYmFzaWNVcmxcXFwiLCBydWxlLmZpbmRBbGlVcmwpO1xcbiAgICB9XFxuICAgIHJldHVybiBydWxlO1xcbn1cXG4kLmV4cG9ydHMuY2FycnlSdWxlID0gZnVuY3Rpb24ocnVsZSwgcywgcGFnZSwgc2VhcmNoTW9kZSwgb3Blbk1vZGUpIHtcXG4gICAgcnVsZSA9IGdldENvbXBsZXRlUnVsZShydWxlKTtcXG4gICAgbGV0IGxpc3QgPSBydWxlLmZpbmQocywgcGFnZSk7XFxuICAgIGlmICghbGlzdCkgcmV0dXJuIFtdO1xcbiAgICBsZXQgdXJsTGF6eSA9ICQoXFxcIlxcXCIpLmxhenlSdWxlKGRvdWJsZVRyZWF0aW5nLCB7XFxuICAgICAgICBvcGVuTW9kZTogb3Blbk1vZGUsXFxuICAgICAgICBmaW5kQWxpVXJsOiBydWxlLmZpbmRBbGlVcmwsXFxuICAgICAgICBiYXNpY1VybDogcnVsZS5iYXNpY1VybCxcXG4gICAgICAgIG5hbWU6IHJ1bGUubmFtZVxcbiAgICB9LCBnZXRNb2RlVXJsKTtcXG4gICAgbGV0IGRlc2NUaXBzID0gXFxcIuKAnOKAnOKAneKAnVxcXCIgKyBydWxlLm5hbWUuZm9udGNvbG9yKFxcXCIjZjEzYjY2YVxcXCIpICsgXFxcIiZuYnNwO1xcXCI7XFxuICAgIGxldCByZXNMaXN0ID0gW107XFxuXFxuLy/lhbPplK7or43pq5jkuq5cXG5mdW5jdGlvbiBoaWdobGlnaHRLZXl3b3Jkcyh0ZXh0LCBrZXl3b3Jkcykge1xcbiAga2V5d29yZHMgPSBrZXl3b3Jkcy5zcGxpdChcXFwiXFxcIik7XFxuICBrZXl3b3Jkcy5mb3JFYWNoKGZ1bmN0aW9uKGtleXdvcmQpIHtcXG4gICAgLy8g5a+55YWz6ZSu5a2X6L+b6KGM6L2s5LmJ5Lul6YG/5YWN54m55q6K5a2X56ym5Zyo5q2j5YiZ5Lit55qE6Zeu6aKY77yM54S25ZCO5bu656uL55So5LqO5Yy56YWN55qE5q2j5YiZ6KGo6L6+5byPXFxuICAgIHZhciBlc2NhcGVkS2V5d29yZCA9IGtleXdvcmQucmVwbGFjZSgvWy1cXFxcL1xcXFxcXFxcXiQqKz8uKCl8W1xcXFxde31dL2csICdcXFxcXFxcXCQmJyk7XFxuICAgIC8vIOmrmOS6ruWFs+mUruivje+8jOaOkumZpEhUTUzmoIfnrb7lhoXnmoTljLnphY1cXG4gICAgdmFyIHBhdHRlcm4gPSBuZXcgUmVnRXhwKCcoPyE8W148Pl0qKSgnICsgZXNjYXBlZEtleXdvcmQgKyAnKSg/IVtePD5dKj4pJywgJ2dpJyk7XFxuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UocGF0dGVybiwgZnVuY3Rpb24obWF0Y2gpIHtcXG4gICAgICByZXR1cm4gJ+KAnOKAnOKAneKAnScgKyBtYXRjaC5mb250Y29sb3IoJyNGRjAwRkYnKTtcXG4gICAgfSk7XFxuICB9KTtcXG4gIHJldHVybiB0ZXh0O1xcbn1cXG4gICAgZm9yIChsZXQgaXQgb2YgbGlzdCkge1xcbiAgICAgICAgaWYgKGl0LnNraXApIHtcXG4gICAgICAgICAgICByZXNMaXN0LnB1c2goaXQpO1xcbiAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKHNlYXJjaE1vZGUgJiYgIXNlYXJjaENvbnRhaW5zKGl0LnRpdGxlLCBzLCB0cnVlKSkgY29udGludWU7XFxuICAgICAgICBpdC51cmwgPSBydWxlLmZpbmRBbGlVcmwgPyBpdC51cmwgKyB1cmxMYXp5IDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZShnZXRNb2RlVXJsLCBpdC51cmwsIGl0LnNoYXJlUHdkIHx8IFxcXCJcXFwiLCBvcGVuTW9kZSk7XFxuICAgICAgICByZXNMaXN0LnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBpdC50aXRsZS5pbmNsdWRlcyhcXFwi4oCc4oCc4oCd4oCdXFxcIikgPyBpdC50aXRsZSA6IFxcXCLigJzigJzigJ3igJ1cXFwiICsgaGlnaGxpZ2h0S2V5d29yZHMoaXQudGl0bGUsIHMpLFxcbiAgICAgICAgICAgIGRlc2M6IGRlc2NUaXBzICsgKGl0LmRlc2MgfHwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgIHVybDogaXQudXJsLFxcbiAgICAgICAgICAgIHBpY191cmw6IGl0LnBpY191cmwsXFxuICAgICAgICAgICAgY29sX3R5cGU6IGl0LnBpY191cmwgPyAnbW92aWVfMV92ZXJ0aWNhbF9waWMnIDogXFxcInRleHRfMVxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IE9iamVjdC5hc3NpZ24oe1xcbiAgICAgICAgICAgICAgICBpbmhlcml0VGl0bGU6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICBub1BpYzogdHJ1ZVxcbiAgICAgICAgICAgIH0sIGl0LmV4dHJhKVxcbiAgICAgICAgfSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIHJlc0xpc3Q7XFxufVxcbmxldCBzaXplID0gMTA7XFxuXFxubGV0IHJ1bGVzID0gJC5yZXF1aXJlKFxcXCJjb25maWdzXFxcIikuZ2V0VXNlZnVsSnNvbigpO1xcblxcbiQuZXhwb3J0cy5nZXREYXRhID0gZnVuY3Rpb24ocGFnZSwgcnVsZSkge1xcbiAgICBpZiAoIXBhZ2UgJiYgIXJ1bGUpIHtcXG4gICAgICAgIHJldHVybiBydWxlcy5tYXAoaXQgPT4gaXQubmFtZSk7XFxuICAgIH1cXG4gICAgaWYgKHBhZ2UgPT09IC0xKSB7XFxuICAgICAgICByZXR1cm4gcnVsZXMubWFwKGl0ID0+IFtpdC5uYW1lLCBpdC5iYXNpY1VybF0pO1xcbiAgICB9XFxuICAgIGlmIChydWxlICE9IG51bGwpIHtcXG4gICAgICAgIGlmIChwYWdlICE9IG51bGwgJiYgcGFnZSA+IDEpIHtcXG4gICAgICAgICAgICByZXR1cm4gcnVsZXMuZmlsdGVyKGkgPT4gaS5uYW1lID09IHJ1bGUgJiYgaS5wYWdlKTtcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBydWxlcy5maWx0ZXIoaSA9PiBpLm5hbWUgPT0gcnVsZSk7XFxuICAgIH1cXG4gICAgbGV0IHN0YXJ0ID0gKHBhZ2UgLSAxKSAqIHNpemU7XFxuICAgIGlmIChydWxlcy5sZW5ndGggPCBzdGFydCArIDEpIHtcXG4gICAgICAgIHJldHVybiBbXTtcXG4gICAgfVxcbiAgICBsZXQgbGVuID0gc2l6ZTtcXG4gICAgaWYgKHJ1bGVzLmxlbmd0aCA8IHBhZ2UgKiBzaXplKSB7XFxuICAgICAgICBsZW4gPSBydWxlcy5sZW5ndGggLSBzdGFydDtcXG4gICAgfVxcbiAgICByZXR1cm4gcnVsZXMuc2xpY2Uoc3RhcnQsIHN0YXJ0ICsgbGVuKTtcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmkJzntKLpobXpnaJcIixcInBhdGhcIjpcInNvdVwiLFwicnVsZVwiOlwianM6XFxuY29uc3QgY29kZXRlc3QgPSAkLnJlcXVpcmUoXFxcImNvZGV0ZXN0XFxcIik7XFxuXFxuZnVuY3Rpb24gc2V0Q2xpcCgpIHtcXG4gICAgZnVuY3Rpb24gZ2V0Q29weSgpIHtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgY29uc3QgQ29udGV4dCA9IGFuZHJvaWQuY29udGVudC5Db250ZXh0O1xcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBjb20uZXhhbXBsZS5oaWtlcnZpZXcudWkuQXBwbGljYXRpb24oKS5nZXRDb250ZXh0KCk7XFxuICAgICAgICAgICAgLy8g6I635Y+W57O757uf5Ymq6LS05p2/XFxuICAgICAgICAgICAgbGV0IGNsaXBib2FyZCA9IGNvbnRleHQuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LkNMSVBCT0FSRF9TRVJWSUNFKTtcXG4gICAgICAgICAgICAvLyDov5Tlm57mlbDmja5cXG4gICAgICAgICAgICBsZXQgY2xpcERhdGEgPSBjbGlwYm9hcmQuZ2V0UHJpbWFyeUNsaXAoKTtcXG4gICAgICAgICAgICBpZiAoY2xpcERhdGEgIT0gbnVsbCAmJiBjbGlwRGF0YS5nZXRJdGVtQ291bnQoKSA+IDApIHtcXG4gICAgICAgICAgICAgICAgLy8g5LuO5pWw5o2u6ZuG5Lit6I635Y+W77yI57KY6LS077yJ56ys5LiA5p2h5paH5pys5pWw5o2uXFxuICAgICAgICAgICAgICAgIGxldCB0ZXh0ID0gY2xpcERhdGEuZ2V0SXRlbUF0KDApLmdldFRleHQoKTtcXG4gICAgICAgICAgICAgICAgaWYgKHRleHQgIT0gbnVsbCkge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0ZXh0LnRvU3RyaW5nKCkpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIGxldCB0ZXh0ID0gZ2V0Q29weSgpIHx8IFxcXCJcXFwiO1xcbiAgICBsZXQgdXJsID0gY29kZXRlc3QubWF0Y2hDb2RlKHRleHQpO1xcbiAgICBpZiAodXJsKSB7XFxuICAgICAgICBsZXQgY2FjaGUgPSBnZXRJdGVtKFxcXCJjbGlwYm9hcmRDYWNoZVxcXCIsIFxcXCJcXFwiKTtcXG4gICAgICAgIGlmICh1cmwgIT09IGNhY2hlKSB7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08Zm9udCBjb2xvcj1cXFwiIzEzQjYxQlxcXCI+4paQIDwvZm9udD48Yj7muKnppqjmj5DnpLo8Yj4nLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBcXFwi5qOA5rWL5Yiw5Ymq6LS05p2/5ZCr5pyJ55Wq5Y+35piv5ZCm5omT5byAP1xcXFxuXFxcIiArIHVybCxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChpbnB1dCwgaWQpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW0oaWQgKyBcXFwiY2xpcGJvYXJkXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vcGFnZS9zb3U/cD1meXBhZ2Umc2VhcmNoVGVybXM9XFxcIiArIGlucHV0O1xcbiAgICAgICAgICAgICAgICB9LCB1cmwsIGlkKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzFcXFwiLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGlkICsgXFxcImNsaXBib2FyZFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBwYWdlVGl0bGU6IFxcXCLmiZPlvIDpk77mjqVcXFwiXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBzZXRJdGVtKFxcXCJjbGlwYm9hcmRDYWNoZVxcXCIsIHVybCk7XFxuICAgICAgICB9XFxuICAgIH1cXG59XFxuXFxuZnVuY3Rpb24gc2V0SGVhZCgpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi5pCc57Si77yaXFxcIiArIFtcXFwi6buY6K6kXFxcIiwgXFxcIueyvuWHhlxcXCJdW3NlYXJjaE1vZGVdLFxcbiAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICBzZXRTZWFyY2hNb2RlKGdldFNlYXJjaE1vZGUoKSA/IDAgOiAxKTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogXFxcImljb25fMl9yb3VuZFxcXCIsXFxuICAgICAgICBkZXNjOiBcXFwiXFxcIixcXG4gICAgICAgIHBpY191cmw6IFxcXCJoaWtlcjovL2ltYWdlcy9pY29uX3NlYXJjaDZcXFwiXFxuICAgIH0pO1xcblxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLmqKHlvI/vvJpcXFwiICsgb3Blbk1vZGUsXFxuICAgICAgICB1cmw6IFxcXCJzZWxlY3Q6Ly9cXFwiICsgSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi56OB5Yqb5ZCbLueugOiuvue9rlxcXCIsXFxuICAgICAgICAgICAgb3B0aW9uczogW1xcXCLmqKHlvI/vvJrmtbfpmJTop4bnlYxcXFwiLCBcXFwi5qih5byP77ya6L+F6Zu35LiL6L29XFxcIixcXFwi5qih5byP77yaUElLUEFLXFxcIiwgXFxcIuaooeW8j++8muS6jOmptOS4i+i9vVxcXCIsIFxcXCLmqKHlvI/vvJrlsI/nmb3kuIvovb1cXFwiLFxcXCLmqKHlvI/vvJrlubvlvbHkuIvovb1cXFwiLCBcXFwi5qih5byP77ya5oKf56m65LiL6L29XFxcIixcXFwi5qih5byP77ya5YW25LuW5LiL6L29XFxcIiwgXFxcIuinhOWImeeuoeeQhlxcXCIsIFxcXCLmlK/mjIHkvZzogIVcXFwiXSxcXG4gICAgICAgICAgICBjb2w6IDIsXFxuICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICBpZiAoXFxcIuinhOWImeeuoeeQhlxcXCIgPT0gaW5wdXQpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9wYWdlL3J1bGVNYW5hZ2Ujbm9SZWNvcmRIaXN0b3J5IyNub0hpc3RvcnkjXFxcIjtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoXFxcIuaUr+aMgeS9nOiAhVxcXCIgPT0gaW5wdXQpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9wYWdlL0RvbmF0ZS52I25vUmVjb3JkSGlzdG9yeSMjbm9IaXN0b3J5I1xcXCI7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaW5wdXQgPSBpbnB1dC5yZXBsYWNlKFxcXCLmqKHlvI/vvJpcXFwiLCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcIm9wZW5Nb2RlXFxcIiwgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT0gXFxcIui/hembt+S4i+i9vVxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHTkv67mlLnmiJDlip9cXFxcbuivt+ehruS/neacieWuieijheOAkOi/hembt+S4i+i9veOAkVxcXCI7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0ID09IFxcXCJQSUtQQUtcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8vXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx05L+u5pS55oiQ5YqfXFxcXG7or7fnoa7kv53mnInlronoo4XjgJBQSUtQQUvjgJFcXFwiO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PSBcXFwi5LqM6am05LiL6L29XFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL1xcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdOS/ruaUueaIkOWKn1xcXFxu6K+356Gu5L+d5pyJ5a6J6KOF44CQ5LqM6am05LiL6L2944CRXFxcIjtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT0gXFxcIuW5u+W9seS4i+i9vVxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHTkv67mlLnmiJDlip9cXFxcbuivt+ehruS/neacieWuieijheOAkOW5u+W9seS4i+i9veOAkVxcXCI7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0ID09IFxcXCLlsI/nmb3kuIvovb1cXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8vXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx05L+u5pS55oiQ5YqfXFxcXG7or7fnoa7kv53mnInlronoo4XjgJDlsI/nmb3kuIvovb3jgJFcXFwiO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PSBcXFwi5oKf56m65LiL6L29XFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL1xcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdOS/ruaUueaIkOWKn1xcXFxu6K+356Gu5L+d5pyJ5a6J6KOF44CQ5oKf56m65LiL6L2944CRXFxcIjtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT0gXFxcIuWFtuS7luS4i+i9vVxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/plb/mjInpgInmi6njgJDkuIvovb3otYTmupDjgJFcXFwiO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJpY29uXzJfcm91bmRcXFwiLFxcbiAgICAgICAgZGVzYzogXFxcIlxcXCIsXFxuICAgICAgICBwaWNfdXJsOiBcXFwiaGlrZXI6Ly9pbWFnZXMvaWNvbl9tZW51NlxcXCJcXG4gICAgfSk7XFxuXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ/CflI4nLFxcbiAgICAgICAgZGVzYzogJ+ivt+i+k+WFpeWFs+mUruivjS/pk77mjqUnLFxcbiAgICAgICAgY29sX3R5cGU6ICdpbnB1dCcsXFxuICAgICAgICB1cmw6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgIGlucHV0ID0gaW5wdXQudHJpbSgpO1xcbiAgICAgICAgICAgIGlmICgvYWxpKHBhbnx5dW5kcml2ZSlcXFxcLmNvbS8udGVzdChpbnB1dCkpIHtcXG4gICAgICAgICAgICAgICAgY2xlYXJNeVZhcihcXFwic1xcXCIpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vcGFnZS9hbGl5dW4/cnVsZT3kupHnm5jlkJsu566AJnBhZ2U9ZnlwYWdlJnJlYWx1cmw9XFxcIiArIGVuY29kZVVSSUNvbXBvbmVudChpbnB1dCkgKyBcXFwiJnNoYXJlUHdkPVxcXCI7XFxuICAgICAgICAgICAgfWVsc2UgaWYoaW5wdXQuc3RhcnRzV2l0aChcXFwibWFnbmV0Oj9cXFwiKSl7XFxuICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoXFxcInNcXFwiKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHB1dE15VmFyKCdzJywgaW5wdXQpO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgfSksXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIG9uQ2hhbmdlOiBcXFwicHV0TXlWYXIoJ3JlZnMnLGlucHV0KVxcXCIsXFxuICAgICAgICAgICAgaWQ6IGlkICsgXFxcInNzXFxcIixcXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IHMsXFxuICAgICAgICAgICAgcGFnZVRpdGxlOiBcXFwi5omT5byA6ZO+5o6lXFxcIlxcbiAgICAgICAgfVxcbiAgICB9KTtcXG59XFxuXFxuZnVuY3Rpb24gc2V0UnVsZUl0ZW0oKSB7XFxuICAgIGxldCBydWxlcyA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2RhdGFcXFwiKS5nZXREYXRhKC0xKTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi8J+Mn1xcXCIsXFxuICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2NvbGxlY3Rpb24/cnVsZT1cXFwiICsgTVlfUlVMRS50aXRsZSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCIsXFxuICAgIH0sIHtcXG4gICAgICAgIHRpdGxlOiBcXFwiXFxcIiA9PSByID8gXFxcIuKAnOKAnOWFqOmDqOKAneKAnVxcXCIgOiBcXFwi5YWo6YOoXFxcIixcXG4gICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgocywgaWQpID0+IHtcXG4gICAgICAgICAgICBsZXQgcXIgPSBnZXRJdGVtKFxcXCJydWxlXFxcIiwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgIGNsZWFySXRlbShcXFwicnVsZVxcXCIpO1xcbiAgICAgICAgICAgIGlmIChzKSB7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgdXBkYXRlSXRlbShcXFwi5YWo6YOoXFxcIiArIGlkLCB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuKAnOKAnOWFqOmDqOKAneKAnVxcXCJcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGlmIChxcikge1xcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlSXRlbShpZCArIHFyLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHFyXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICB9LCBzLCBpZCksXFxuICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBpZDogXFxcIuWFqOmDqFxcXCIgKyBpZFxcbiAgICAgICAgfVxcbiAgICB9KTtcXG4gICAgZm9yIChsZXQgW2l0LCBiYXNpY1VybF0gb2YgcnVsZXMpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGl0ID09IHIgPyBcXFwi4oCc4oCcXFxcIiArIGl0ICsgXFxcIuKAneKAnVxcXCIgOiBpdCxcXG4gICAgICAgICAgICB1cmw6ICQoKGJhc2ljVXJsIHx8IFxcXCJcXFwiKSArIFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChyLCBzLCBpZCkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgcXIgPSBnZXRJdGVtKFxcXCJydWxlXFxcIiwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXCJydWxlXFxcIiwgcik7XFxuICAgICAgICAgICAgICAgIGlmIChzKSB7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlSXRlbShxciA/IChpZCArIHFyKSA6IChcXFwi5YWo6YOoXFxcIiArIGlkKSwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBxciB8fCBcXFwi5YWo6YOoXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKGlkICsgciwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi4oCc4oCcXFxcIiArIHIgKyBcXFwi4oCd4oCdXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgIH0sIGl0LCBzLCBpZCksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIixcXG4gICAgICAgICAgICBkZXNjOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBwaWNfdXJsOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDogaWQgKyBpdFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICB9XFxuXFxufVxcblxcbmZ1bmN0aW9uIHJlY29yZCgpIHtcXG4gICAgbGV0IGhpc3RvcnkgPSBzdG9yYWdlMC5nZXRJdGVtKFxcXCJzZWFyY2hIaXN0b3J5XFxcIiwgW10pO1xcbiAgICBsZXQgaWkgPSBoaXN0b3J5LmluZGV4T2Yocyk7XFxuICAgIGlmIChpaSA+IC0xKSB7XFxuICAgICAgICBoaXN0b3J5LnNwbGljZShpaSwgMSk7XFxuICAgIH1cXG4gICAgaWYgKGhpc3RvcnkubGVuZ3RoID4gMjApIHtcXG4gICAgICAgIGhpc3Rvcnkuc3BsaWNlKGhpc3RvcnkubGVuZ3RoIC0gMSwgMSk7XFxuICAgIH1cXG4gICAgaGlzdG9yeS51bnNoaWZ0KHMpO1xcbiAgICBzdG9yYWdlMC5zZXRJdGVtKFxcXCJzZWFyY2hIaXN0b3J5XFxcIiwgaGlzdG9yeSk7XFxufVxcblxcbmZ1bmN0aW9uIHNlYXJjaEVuZCgpIHtcXG4gICAgbGV0IHAgPSBNWV9QQUdFO1xcbiAgICBsZXQgZGF0YSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2RhdGFcXFwiKS5nZXREYXRhKHAsIHIgIT0gXFxcIlxcXCIgPyByIDogbnVsbCk7XFxuICAgIGxldCBwYWdlaWQgPSBpZCArIFxcXCJ5cGotcGFnZVxcXCIgKyBwO1xcbiAgICBpZiAoZGF0YS5sZW5ndGggPiAwKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi5Yqg6L2956ysXFxcIiArIHAgKyBcXFwi6aG15Lit77yM6L+b5bqm77yaMS9cXFwiICsgZGF0YS5sZW5ndGgsXFxuICAgICAgICAgICAgdXJsOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIHBpY191cmw6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOiBwYWdlaWRcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICBzZXRSZXN1bHQoZCk7XFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDApIHtcXG4gICAgICAgIC8v5aSa57q/56iL5Yqg6L29ICAgICAgICBcXG4gICAgICAgIGxldCByZWFsUGFnZSA9IFxcXCJcXFwiID09IHIgPyAxIDogcDtcXG4gICAgICAgIGxldCB0YXNrcyA9IGRhdGEubWFwKGl0ID0+IHtcXG4gICAgICAgICAgICByZXR1cm4ge1xcbiAgICAgICAgICAgICAgICBmdW5jOiBmdW5jdGlvbihydWxlKSB7XFxuICAgICAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImRhdGFcXFwiKS5jYXJyeVJ1bGUocnVsZSwgcywgcmVhbFBhZ2UsIHNlYXJjaE1vZGUsIG9wZW5Nb2RlKTtcXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2cocnVsZS5uYW1lICsgXFxcIjpcXFwiICsgZS50b1N0cmluZygpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAvKmlmKGRhdGEubGVuZ3RoPT09MSYmcD09PTEpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3tcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOlxcXCLigJzigJxcXFwiK3J1bGUubmFtZStcXFwiIEVSUk9S4oCd4oCdXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IGUudG9TdHJpbmcoKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOlxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDpcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZVZpc2libGU6IGZhbHNlXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1dO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0qL1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgLy9yZXR1cm4gcnVsZS5maW5kKHMsIHJlYWxQYWdlKTtcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgcGFyYW06IGl0LFxcbiAgICAgICAgICAgICAgICBpZDogXFxcInJ1bGVAXFxcIiArIGl0Lm5hbWVcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG5cXG4gICAgICAgIGJhdGNoRXhlY3V0ZSh0YXNrcywge1xcbiAgICAgICAgICAgIGZ1bmM6IGZ1bmN0aW9uKHBhcmFtLCBpZCwgZXJyb3IsIHJlc3VsdCkge1xcbiAgICAgICAgICAgICAgICBwYXJhbS5pICs9IDE7XFxuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpIHtcXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW0oXFxcIl9ub3RoYXZlXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICBhZGRJdGVtQmVmb3JlKHBhZ2VpZCwgcmVzdWx0KTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAocGFyYW0uaSA9PT0gcGFyYW0uYWxsKSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdCB8fCAhcmVzdWx0Lmxlbmd0aCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW0oXFxcIl9ub3RoYXZlXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYWRkSXRlbUJlZm9yZShwYWdlaWQsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi4oCc4oCc4oCd4oCdXFxcIiArIFxcXCJ+fn7ku4DkuYjotYTmupDpg73msqHmnInlk6Z+fn5cXFwiLmZvbnRjb2xvcihcXFwiR3JheVxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZVZpc2libGU6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFxcXCJfbm90aGF2ZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlSXRlbShwYWdlaWQpO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlSXRlbShwYWdlaWQsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuWKoOi9veesrFxcXCIgKyBNWV9QQUdFICsgXFxcIumhteS4re+8jOi/m+W6pu+8mlxcXCIgKyAocGFyYW0uaSArIDEpICsgXFxcIi9cXFwiICsgcGFyYW0uYWxsLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICBwYXJhbToge1xcbiAgICAgICAgICAgICAgICBhbGw6IGRhdGEubGVuZ3RoLFxcbiAgICAgICAgICAgICAgICBpOiAwLFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgIH1cXG59XFxuXFxuZnVuY3Rpb24gc2V0SGlzdG9yeSgpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAnPHNwYW4gc3R5bGU9XFxcImNvbG9yOiNmZjY2MDFcXFwiPjxiPuWOhuWPsuiusOW9lTwvYj48L3NwYW4+JyxcXG4gICAgICAgIHBpY191cmw6IFxcXCJoaWtlcjovL2ltYWdlcy9pY29uX2Nsb2NrXFxcIixcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIixcXG4gICAgICAgIHVybDogJChbXFxcIua4hemZpOaQnOe0ouiusOW9lVxcXCIsIFxcXCLmiZPlvIDop4LnnIvorrDlvZVcXFwiXSkuc2VsZWN0KChpZCkgPT4ge1xcbiAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gXFxcIua4hemZpOaQnOe0ouiusOW9lVxcXCIpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcIuehruWumua4hemZpOWFqOmDqOaQnOe0ouiusOW9le+8n1xcXCIpLmNvbmZpcm0oKGlkKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBjbGVhckl0ZW0oXFxcInNlYXJjaEhpc3RvcnlcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW1CeUNscyhpZCArIFxcXCI6a2V5XFxcIik7XFxuICAgICAgICAgICAgICAgICAgICBhZGRJdGVtQWZ0ZXIoaWQgKyBcXFwiOnNlYXJjaEhpc3RvcnlcXFwiLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuKAnOKAnOKAneKAnVxcXCIgKyBcXFwifn5+5LuA5LmI6YO95rKh5pyJ5ZOmfn5+XFxcIi5mb250Y29sb3IoXFxcIkdyYXlcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHM6IGlkICsgXFxcIjprZXlcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfSwgaWQpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9oaXN0b3J5P3J1bGU9XFxcIiArIE1ZX1JVTEUudGl0bGU7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwgaWQpLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBpZDogaWQgKyBcXFwiOnNlYXJjaEhpc3RvcnlcXFwiLFxcbiAgICAgICAgfVxcbiAgICB9KTtcXG5cXG4gICAgbGV0IGhpc3RvcnkgPSBzdG9yYWdlMC5nZXRJdGVtKFxcXCJzZWFyY2hIaXN0b3J5XFxcIiwgW10pO1xcbiAgICBsZXQgaSA9IDA7XFxuICAgIGZvciAobGV0IGtleSBvZiBoaXN0b3J5KSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBrZXksXFxuICAgICAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChpZCwga2V5KSA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCBleHRyYSA9IGZpbmRJdGVtKGlkICsgXFxcInNzXFxcIikuZXh0cmE7XFxuICAgICAgICAgICAgICAgIGV4dHJhLmRlZmF1bHRWYWx1ZSA9IGtleTtcXG4gICAgICAgICAgICAgICAgdXBkYXRlSXRlbSh7XFxuICAgICAgICAgICAgICAgICAgICBleHRyYTogZXh0cmFcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgfSwgaWQsIGtleSksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJmbGV4X2J1dHRvblxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgaWQ6IGlkICsgXFxcIjprZXk6XFxcIiArIGtleSxcXG4gICAgICAgICAgICAgICAgY2xzOiBpZCArIFxcXCI6a2V5XFxcIixcXG4gICAgICAgICAgICAgICAgbG9uZ0NsaWNrOiBbe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLliKDpmaTlhbPplK7or406XFxcIiArIGtleSxcXG4gICAgICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKChpZCwga2V5LCBpKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGhpc3RvcnkgPSBzdG9yYWdlMC5nZXRJdGVtKFxcXCJzZWFyY2hIaXN0b3J5XFxcIiwgW10pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpc3Rvcnkuc3BsaWNlKGksIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0oXFxcInNlYXJjaEhpc3RvcnlcXFwiLCBoaXN0b3J5KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVJdGVtKGlkICsgXFxcIjprZXk6XFxcIiArIGtleSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy90b2FzdCgpO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgaWQsIGtleSwgaSlcXG4gICAgICAgICAgICAgICAgfV1cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICAgIGkrKztcXG4gICAgfVxcbiAgICBpZiAoaGlzdG9yeS5sZW5ndGggPT09IDApIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgICAgICB0aXRsZTogXFxcIuKAnOKAnOKAneKAnVxcXCIgKyBcXFwifn5+5LuA5LmI6YO95rKh5pyJ5ZOmfn5+XFxcIi5mb250Y29sb3IoXFxcIkdyYXlcXFwiKSxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBjbHM6IGlkICsgXFxcIjprZXlcXFwiLFxcbiAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgfVxcbn1cXG5cXG5mdW5jdGlvbiBzZXRUcmVuZGluZ1RhYkVuZCgpIHtcXG4gICAgbGV0IGhvdENsYXNzID0ge1xcbiAgICAgICAgXFxcIueZvuW6plxcXCI6IHtcXG4gICAgICAgICAgICBcXFwi55S16KeG5YmnXFxcIjogXFxcInRlbGVwbGF5XFxcIixcXG4gICAgICAgICAgICBcXFwi55S15b2xXFxcIjogXFxcIm1vdmllXFxcIlxcbiAgICAgICAgfSxcXG4gICAgICAgIFxcXCLlpLjlhYtcXFwiOiB7XFxuICAgICAgICAgICAgXFxcIueUteinhuWJp1xcXCI6IFxcXCLnlLXop4bliadcXFwiLFxcbiAgICAgICAgICAgIFxcXCLnlLXlvbFcXFwiOiBcXFwi55S15b2xXFxcIixcXG4gICAgICAgICAgICBcXFwi5Yqo5ryrXFxcIjogXFxcIuWKqOa8q1xcXCIsXFxuICAgICAgICAgICAgXFxcIue7vOiJulxcXCI6IFxcXCLnu7zoibpcXFwiXFxuICAgICAgICB9XFxuICAgIH07XFxuICAgIGxldCBkYXRhU291cmNlID0gT2JqZWN0LmtleXMoaG90Q2xhc3MpO1xcbiAgICBsZXQgc2VsZWN0c291cmNlID0gZ2V0SXRlbShcXFwiZGF0YVNvdXJjZVxcXCIsIGRhdGFTb3VyY2VbMF0pO1xcbiAgICBsZXQgaG90a2V5cyA9IE9iamVjdC5rZXlzKGhvdENsYXNzW3NlbGVjdHNvdXJjZV0pO1xcbiAgICBsZXQgc2VsZWN0a2V5ID0gZ2V0SXRlbShcXFwiaG90a2V5XFxcIiwgaG90a2V5c1swXSk7XFxuICAgIGxldCB0YWJrZXkgPSBob3RDbGFzc1tzZWxlY3Rzb3VyY2VdW3NlbGVjdGtleV07XFxuXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJzxzcGFuIHN0eWxlPVxcXCJjb2xvcjojZmY2NjAxXFxcIj48Yj4nICsgc2VsZWN0c291cmNlICsgc2VsZWN0a2V5ICsgJ+eDreaQnDwvYj48L3NwYW4+JyxcXG4gICAgICAgIHVybDogJChob3RrZXlzLCAxLCBcXFwi5YiH5o2i54Ot5pCcXFxcIikuc2VsZWN0KCgpID0+IHtcXG4gICAgICAgICAgICBzZXRJdGVtKFxcXCJob3RrZXlcXFwiLCBpbnB1dCk7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lt7LliIfmjaLkuLpcXFwiICsgaW5wdXQ7XFxuICAgICAgICB9KSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIixcXG4gICAgICAgIHBpY191cmw6IFxcXCJoaWtlcjovL2ltYWdlcy9pY29uX2ZpcmVcXFwiLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi5YiH5o2i5pWw5o2u5rqQXFxcIixcXG4gICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKGRhdGFTb3VyY2UpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKGRhdGFTb3VyY2UsIDEsIFxcXCLliIfmjaLmlbDmja7mupBcXFwiKS5zZWxlY3QoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcImRhdGFTb3VyY2VcXFwiLCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJdGVtKFxcXCJob3RrZXlcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+W3suWIh+aNouS4ulxcXCIgKyBpbnB1dDtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9LCBkYXRhU291cmNlKVxcbiAgICAgICAgICAgIH1dXFxuICAgICAgICB9XFxuICAgIH0pO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLmraPlnKjliqDovb0uLi5cXFwiLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBpZDogaWQgKyBcXFwiOmhvdGtleVxcXCIsXFxuICAgICAgICAgICAgbGluZVZpc2libGU6IGZhbHNlXFxuICAgICAgICB9XFxuICAgIH0pO1xcbiAgICBzZXRSZXN1bHQoZCk7XFxuICAgIGxldCBzZCA9IFtdO1xcbiAgICBsZXQgc2V0U2VhcmNoS2V5ID0gbmFtZSA9PiB7XFxuICAgICAgICBwdXRNeVZhcigncycsIG5hbWUpO1xcbiAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgfTtcXG5cXG4gICAgbGV0IGdldFRpdGxlID0gKGksIG5hbWUpID0+IHtcXG4gICAgICAgIGxldCBjb2xvcjtcXG4gICAgICAgIHN3aXRjaCAoaSkge1xcbiAgICAgICAgICAgIGNhc2UgMDpcXG4gICAgICAgICAgICAgICAgY29sb3IgPSBcXFwiI2ZmMzMwMFxcXCI7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIGNhc2UgMTpcXG4gICAgICAgICAgICAgICAgY29sb3IgPSBcXFwiI2ZmNjYwMFxcXCI7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIGNhc2UgMjpcXG4gICAgICAgICAgICAgICAgY29sb3IgPSBcXFwiI2ZmOTkwMFxcXCJcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgZGVmYXVsdDpcXG4gICAgICAgICAgICAgICAgY29sb3IgPSBcXFwiYmxhY2tcXFwiO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIFxcXCLigJzigJzigJ3igJ1cXFwiICsgU3RyaW5nKGkgKyAxKS5mb250Y29sb3IoY29sb3IpICsgXFxcIlxcXFx0XFxcXHRcXFxcdFxcXCIgKyBuYW1lO1xcbiAgICB9XFxuICAgIHRyeSB7XFxuICAgICAgICBzd2l0Y2ggKHNlbGVjdHNvdXJjZSkge1xcbiAgICAgICAgICAgIGNhc2UgXFxcIueZvuW6plxcXCI6XFxuICAgICAgICAgICAgICAgIHZhciBqc29uID0gcmVxdWVzdCgnaHR0cHM6Ly90b3AuYmFpZHUuY29tL2FwaS9ib2FyZD9wbGF0Zm9ybT13aXNlJnRhYj0nICsgdGFia2V5ICsgJyZ0YWc9JTdCJTIyY2F0ZWdvcnklMjI6JTIyJUU1JTg1JUE4JUU5JTgzJUE4JUU3JUIxJUJCJUU1JTlFJThCJTIyJTdEJywge1xcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICdVc2VyLUFnZW50JzogJ01vemlsbGEvNS4wIChMaW51eDsgQW5kcm9pZCA2LjA7IE5leHVzIDUgQnVpbGQvTVJBNThOKSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvOTkuMC40ODQ0LjUxIE1vYmlsZSBTYWZhcmkvNTM3LjM2JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAnSG9zdCc6ICd0b3AuYmFpZHUuY29tJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0FjY2VwdC1MYW5ndWFnZSc6ICd6aC1DTix6aDtxPTAuOSxlbi1VUztxPTAuOCxlbjtxPTAuNycsXFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0FjY2VwdC1FbmNvZGluZyc6ICdnemlwLCBkZWZsYXRlLCBicicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1JlZmVyZXInOiAnaHR0cHM6Ly90b3AuYmFpZHUuY29tL2JvYXJkP3RhYj1ub3ZlbCcsXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAvL3ZhciBzID0gRGF0ZS5ub3coKTtcXG4gICAgICAgICAgICAgICAgdmFyIGxpc3QgPSBKU09OLnBhcnNlKGpzb24pLmRhdGEuY2FyZHNbMF0uY29udGVudDtcXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgaXRlbSA9IGxpc3RbaV07XFxuICAgICAgICAgICAgICAgICAgICBsZXQgbmFtZSA9IGl0ZW0ud29yZCArICcgKCcgKyBpdGVtLnNob3dbMl0gKyAnKSc7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgZGVzID0gaXRlbS5kZXNjO1xcbiAgICAgICAgICAgICAgICAgICAgc2QucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGdldFRpdGxlKGksIG5hbWUpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZShzZXRTZWFyY2hLZXksIGl0ZW0ud29yZCksXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogZGVzLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogaXRlbS5pbWcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJtb3ZpZV8xX3ZlcnRpY2FsX3BpY1xcXCJcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIGNhc2UgXFxcIuWkuOWFi1xcXCI6XFxuICAgICAgICAgICAgICAgIHZhciBqc29uID0gcmVxdWVzdChcXFwiaHR0cHM6Ly9uZXdzLm15cXVhcmsuY24vdjIvdG9wbGlzdC9tb3ZpZT8mY2hhbm5lbD1cXFwiICsgdGFia2V5ICsgXFxcIiZyYW5rX3R5cGU9JUU2JTlDJTgwJUU3JTgzJUFEXFxcIik7XFxuICAgICAgICAgICAgICAgIHZhciB4bWxEYXRhID0gKEpTT04ucGFyc2UoanNvbikuZGF0YSB8fCBcXFwiXFxcIikucmVwbGFjZSgvdGl0bGU+L2csIFxcXCJoX3RpdGxlPlxcXCIpLnJlcGxhY2UoL3NyYz4vZywgXFxcImhfc3JjPlxcXCIpLnJlcGxhY2UoL2FyZWE+L2csIFxcXCJoX2FyZWFcXFwiKTtcXG4gICAgICAgICAgICAgICAgdmFyIGxpc3QgPSBwZGZhKHhtbERhdGEsIFxcXCJib2R5JiZpdGVtXFxcIik7XFxuICAgICAgICAgICAgICAgIHZhciBnZXRUZXh0ID0gdCA9PiB0O1xcbiAgICAgICAgICAgICAgICB2YXIgdHJlbmQgPSBbXFxcIuOEp1xcXCIsIFxcXCLihpFcXFwiLCBcXFwi4oaTXFxcIl07XFxuICAgICAgICAgICAgICAgIC8vdmFyIHMgPSBEYXRlLm5vdygpO1xcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBpdGVtID0gbGlzdFtpXTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBuYW1lID0gcGRmaChpdGVtLCBcXFwiaF90aXRsZSYmVGV4dFxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRlcyA9IFxcXCLng63luqbvvJpcXFwiICsgcGRmaChpdGVtLCBcXFwiaG90X3Njb3JlJiZUZXh0XFxcIikgKyBcXFwiIFxcXCIgKyB0cmVuZC5hdChwZGZoKGl0ZW0sIFxcXCJob3RfdHJlbmQmJlRleHRcXFwiKSkgK1xcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJcXFxcbuivhOWIhu+8mlxcXCIgKyBwZGZoKGl0ZW0sIFxcXCJzY29yZV9hdmcmJlRleHRcXFwiKS5yZXBsYWNlKC9eMCQvLCBcXFwi5pqC5peg6K+E5YiGXFxcIikgK1xcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJcXFxcblxcXCIgKyBwZGZoKGl0ZW0sIFxcXCJ5ZWFyJiZUZXh0XFxcIikgKyBcXFwiwrdcXFwiICsgcGRmaChpdGVtLCBcXFwiaF9hcmVhJiZUZXh0XFxcIikgKyBcXFwiwrdcXFwiICsgcGRmaChpdGVtLCBcXFwiY2F0ZWdvcnkmJlRleHRcXFwiKS5yZXBsYWNlKFxcXCIsXFxcIiwgXFxcIsK3XFxcIik7XFxuICAgICAgICAgICAgICAgICAgICBzZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZ2V0VGl0bGUoaSwgbmFtZSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKHNldFNlYXJjaEtleSwgbmFtZSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogZGVzLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogcGRmaChpdGVtLCBcXFwiaF9zcmMmJlRleHRcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcIm1vdmllXzFfdmVydGljYWxfcGljXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICB9XFxuICAgICAgICBhZGRJdGVtQWZ0ZXIoaWQgKyBcXFwiOmhvdGtleVxcXCIsIHNkKTtcXG4gICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgbG9nKGUudG9TdHJpbmcoKSk7XFxuICAgIH0gZmluYWxseSB7XFxuICAgICAgICBkZWxldGVJdGVtKGlkICsgXFxcIjpob3RrZXlcXFwiKTtcXG4gICAgfVxcbn1cXG5sZXQgciA9IGdldEl0ZW0oXFxcInJ1bGVcXFwiLCBcXFwiXFxcIik7XFxubGV0IGhpZGVTZXR0aW5nID0gTVlfUEFSQU1TLmhpZGVTZXR0aW5nIHx8IGdldFBhcmFtKFxcXCJzZWFyY2hUZXJtc1xcXCIsIFxcXCJcXFwiKSA9PT0gXFxcInRydWVcXFwiO1xcbmxldCBzID0gZ2V0TXlWYXIoJ3MnLCAnJykgfHwgTVlfUEFSQU1TLnNlYXJjaFRlcm1zIHx8IGRlY29kZVVSSUNvbXBvbmVudChnZXRQYXJhbShcXFwic2VhcmNoVGVybXNcXFwiLCBcXFwiXFxcIikpO1xcbmxldCBzZWFyY2hNb2RlID0gZ2V0U2VhcmNoTW9kZSgpO1xcbmxldCBvcGVuTW9kZSA9IGdldEl0ZW0oXFxcIm9wZW5Nb2RlXFxcIiwgXFxcIua1t+mYlOinhueVjFxcXCIpO1xcbmxldCBpZCA9IERhdGUubm93KCkgKyBNWV9SVUxFLnRpdGxlO1xcbmxldCBkID0gW107XFxuaWYgKE1ZX1BBR0UgPT09IDEpIHtcXG4gICAvLyBzZXRQcmVwb3NlKCk7XFxuICAgIGlmICghaGlkZVNldHRpbmcpIHtcXG4gICAgICAgIHNldENsaXAoKTtcXG4gICAgICAgIHNldEhlYWQoKTtcXG4gICAgfVxcbiAgICBzZXRSdWxlSXRlbSgpO1xcbiAgICBpZiAoIXMpIHtcXG4gICAgICAgIHNldEhpc3RvcnkoKTtcXG4gICAgfVxcbn1cXG5pZiAocykge1xcbiAgICByZWNvcmQoKTtcXG4gICAgc2VhcmNoRW5kKCk7XFxufSBlbHNlIGlmIChNWV9QQUdFID09PSAxKSB7XFxuICAgIHNldFRyZW5kaW5nVGFiRW5kKCk7XFxufSBlbHNlIHtcXG4gICAgc2V0UmVzdWx0KFtdKTtcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLnvZHpobXmtY/op4hcIixcInBhdGhcIjpcInlzZnhcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxuXFxubGV0IG9wZW5Nb2RlID0gZ2V0SXRlbShcXFwib3Blbk1vZGVcXFwiKTtcXG5sZXQgcnVsZSA9IE1ZX1JVTEUudGl0bGU7XFxubGV0IHVybCA9IGRlY29kZVVSSUNvbXBvbmVudChnZXRQYXJhbShcXFwid2ViVXJsXFxcIixcXFwiXFxcIikpO1xcblxcbmZ1bmN0aW9uIGludGVyY2VwdChydWxlLCBvcmlnaW4sIG9wZW5Nb2RlKSB7XFxuICAgIGxldCBob3N0ID0gb3JpZ2luLnJlcGxhY2UobmV3IFJlZ0V4cChcXFwiaHR0cDovL3xodHRwczovL1xcXCIpLCBcXFwiXFxcIikuc3BsaXQoXFxcIi9cXFwiKVswXTtcXG4gICAgbGV0IGhvc3RzID0gaG9zdC5zcGxpdChcXFwiLlxcXCIpO1xcbiAgICBpZiAoaG9zdHMubGVuZ3RoID4gMikge1xcbiAgICAgICAgaG9zdCA9IGhvc3RzW2hvc3RzLmxlbmd0aCAtIDJdICsgXFxcIi5cXFwiICsgaG9zdHNbaG9zdHMubGVuZ3RoIC0gMV07XFxuICAgIH1cXG4gICAgaWYgKGlucHV0LnN0YXJ0c1dpdGgoXFxcIm1hZ25ldFxcXCIpKSB7XFxuICAgICAgICBjb25maXJtKHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIua4qemmqOaPkOekulxcXCIsXFxuICAgICAgICAgICAgY29udGVudDogXFxcIuajgOa1i+WIsOaWsOeahOejgemTvuWcsOWdgO+8jOeCueWHu+ehruWumuaMiemSruWNs+WPr+aSreaUvu+8jOeCueWHu+WPlua2iOaMiemSruWPr+S7peWkjeWItumTvuaOpVxcXCIsXFxuICAgICAgICAgICAgY29uZmlybTogJC50b1N0cmluZygobWFnKSA9PiB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBtYWc7XFxuICAgICAgICAgICAgfSwgaW5wdXQpLFxcbiAgICAgICAgICAgIGNhbmNlbDogJC50b1N0cmluZygobWFnKSA9PiB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiY29weTovL1xcXCIgKyBtYWdcXG4gICAgICAgICAgICB9LCBpbnB1dClcXG4gICAgICAgIH0pO1xcbiAgICAgICAgcmV0dXJuIHRydWU7XFxuICAgIH0gIGVsc2UgaWYgKC9cXFxcLihtcDN8ZmxhY3xtNGEpJC8udGVzdChpbnB1dCkpIHtcXG4gICAgICAgIGxvZyhpbnB1dCk7XFxuICAgICAgICByZXR1cm4gJC50b1N0cmluZygodXJsLCBydWxlKSA9PiB7XFxuICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5wbGF5VmlkZW8odXJsKTtcXG4gICAgICAgIH0sIGlucHV0LCBydWxlKTtcXG4gICAgfSBlbHNlIGlmICghaW5wdXQuaW5jbHVkZXMoaG9zdCkgJiYgaW5wdXQuc3RhcnRzV2l0aChcXFwiaHR0cFxcXCIpKSB7XFxuICAgICAgICBsb2coaW5wdXQpO1xcbiAgICAgICAgcmV0dXJuICQudG9TdHJpbmcoKHVybCwgcnVsZSkgPT4ge1xcbiAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAub3BlbihKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi6K+m5oOFXFxcIixcXG4gICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3lzZng/d2ViVXJsPVxcXCIrZW5jb2RlVVJJQ29tcG9uZW50KHVybCkrXFxcIiZydWxlPVxcXCIrcnVsZSxcXG4gICAgICAgICAgICB9KSlcXG4gICAgICAgIH0sIGlucHV0LCBydWxlKTtcXG4gICAgfSBlbHNlIGlmICghaW5wdXQuc3RhcnRzV2l0aChcXFwiaHR0cFxcXCIpKSB7XFxuICAgICAgICBsb2coaW5wdXQpO1xcbiAgICAgICAgLy/og73llKTotbdBUFDnmoTnmb3lkI3ljZVcXG4gICAgICAgIGxldCB3aGl0ZSA9IFtcXG4gICAgICAgICAgICBcXFwicWtsaW5rXFxcIixcXG4gICAgICAgICAgICBcXFwiYmRuZXRkaXNrXFxcIixcXG4gICAgICAgICAgICBcXFwieHVubGVpYXBwXFxcIixcXG4gICAgICAgICAgICBcXFwic21hcnRkcml2ZVxcXCJcXG4gICAgICAgIF07XFxuICAgICAgICBsZXQgaW5XaGl0ZSA9IHdoaXRlLmZpbHRlcihpdCA9PiBpbnB1dC5zdGFydHNXaXRoKGl0KSkubGVuZ3RoID4gMDtcXG4gICAgICAgIGlmICghaW5XaGl0ZSkge1xcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiAkLnRvU3RyaW5nKCh1cmwsIHJ1bGUpID0+IHtcXG4gICAgICAgICAgICBmeV9icmlkZ2VfYXBwLm9wZW5UaGlyZEFwcCAmJiBmeV9icmlkZ2VfYXBwLm9wZW5UaGlyZEFwcCh1cmwpO1xcbiAgICAgICAgfSwgaW5wdXQsIHJ1bGUpO1xcbiAgICB9XFxufVxcblxcbmZ1bmN0aW9uIGxvYWRKcygpIHtcXG4gICAgdHJ5IHtcXG4gICAgICAgIGlmIChkb2N1bWVudC50aXRsZSAmJiBkb2N1bWVudC50aXRsZS5sZW5ndGgpIHtcXG4gICAgICAgICAgICBsZXQgciA9ICQkJCgpLmxhenlSdWxlKCh0KSA9PiB7XFxuICAgICAgICAgICAgICAgIHNldFBhZ2VUaXRsZSh0KTtcXG4gICAgICAgICAgICB9LCBkb2N1bWVudC50aXRsZSk7XFxuICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5wYXJzZUxhenlSdWxlKHIpO1xcbiAgICAgICAgfVxcbiAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICBmeV9icmlkZ2VfYXBwLmxvZyhlLnRvU3RyaW5nKCkpO1xcbiAgICB9XFxufVxcblxcbmQucHVzaCh7XFxuICAgIHVybDogdXJsLFxcbiAgICBjb2xfdHlwZTogXFxcIng1X3dlYnZpZXdfc2luZ2xlXFxcIixcXG4gICAgZGVzYzogXFxcIjEwMCUmJmZsb2F0XFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIHVybEludGVyY2VwdG9yOiAkLnRvU3RyaW5nKGludGVyY2VwdCwgcnVsZSwgZ2V0SG9tZSh1cmwpLCBvcGVuTW9kZSksXFxuICAgICAgICBqczogJC50b1N0cmluZyhsb2FkSnMpLFxcbiAgICAgICAgY2FuQmFjazogdHJ1ZSxcXG4gICAgICAgIGpzTG9hZGluZ0luamVjdDogdHJ1ZSxcXG4gICAgICAgIGZsb2F0VmlkZW86IHRydWVcXG4gICAgfVxcbn0pO1xcblxcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS4u+mhteWkhOeQhlwiLFwicGF0aFwiOlwiTWFpblwiLFwicnVsZVwiOlwiaWYgKGdldEl0ZW0oXFxcImZpcnN0XFxcIikgPT0gTVlfUlVMRS52ZXJzaW9uKSB7XFxuICAgICQucmVxdWlyZShcXFwic291XFxcIik7XFxufSBlbHNlIGlmIChNWV9QQUdFID09PSAxKSB7XFxuICAgIGxldCBkID0gW11cXG4gICAgbGV0IHRpbWUgPSBnZXRJdGVtKFxcXCJmaXJzdFxcXCIsIFxcXCJcXFwiKSA/IDYgOiAyMDtcXG4gICAgbGV0IGlkID0gRGF0ZS5ub3coKTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi4oCc4oCc4oCd4oCdPHN0cm9uZz7kvb/nlKjliY3pobvnn6U8L3N0cm9uZz5cXFwiLmJpZygpLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIjEuIOacrOWwj+eoi+W6j+aJgOacieS7o+eggeWFqOmDqOW8gOa6kO+8jOS4lOacrOinhOWImeS4uuWtpuS5oOebrueahO+8jOivt+S6juWvvOWFpTI05bCP5pe25YaF5Yig6Zmk77yB77yB77yBPGJyPjIuIOacrOWwj+eoi+W6jzxiPuWujOWFqOWFjei0uTwvYj7vvIzlpoLmnpzkvaDmmK/ku5jotLnotK3kubDnmoTmga3llpzkvaDooqvpqpfkuobjgII8YnI+5b2T54S25aaC5p6c5pyJ6IO95Yqb5oOz6byT5Yqx5L2c6ICF55qE5Y+v5LulPGEgaHJlZj0naGlrZXI6Ly9wYWdlL0RvbmF0ZS52I25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5Iyc+5pSv5oyB5LiA5LiLPC9hPig8c21hbGw+54K55Ye75Y+v6L+b5YWl5o2Q6LWg77yM5Y+v5Zyo5Li76aG16I+c5Y2V6L+b5YWlPC9zbWFsbD4p44CCPGJyPjMuIOacrOWwj+eoi+W6j+aYr+WcqOWOn+eJiOOAjOS6keebmOWQmy7nroDjgI3nmoTln7rnoYDov5vooYznmoTkuozmrKHkv67mlLnvvIzor7fmlK/mjIHljp/niYjjgII8YnI+NC4g6K+344CM56OB5Yqb5ZCbLueugOOAjeeahOS6jOasoeS/ruaUueWwiumHjeS4gOS4i+WOn+eJiO+8jOiwouiwouOAgjxicj48YnI+PGI+5byA5aeL5L2/55So5pys6KeE5YiZ5Y2z5Luj6KGo6YG15a6I6KeE5YiZ5p2h5L6LPC9iPjxicj7lvZPliY3niYjmnKzvvJpcXFwiICsgTVlfUlVMRS52ZXJzaW9uLFxcbiAgICAgICAgXFxcImNvbF90eXBlXFxcIjogXFxcInJpY2hfdGV4dFxcXCJcXG4gICAgfSwge1xcbiAgICAgICAgY29sX3R5cGU6IFxcXCJsaW5lXFxcIlxcbiAgICB9LCB7XFxuICAgICAgICB0aXRsZTogdGltZSArIFxcXCLnp5LlkI7nu6fnu61cXFwiLFxcbiAgICAgICAgdXJsOiBcXFwidG9hc3Q6Ly/or7forqTnnJ/pmIXor7vku6XkuIrlhoXlrrlcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgaWQ6IGlkICsgXFxcInRpbWVyXFxcIlxcbiAgICAgICAgfVxcbiAgICB9KTtcXG4gICAgc2V0UmVzdWx0KGQpO1xcbiAgICB3aGlsZSAodGltZSAhPSAwKSB7XFxuICAgICAgICBqYXZhLmxhbmcuVGhyZWFkLnNsZWVwKDEwMDApO1xcbiAgICAgICAgdGltZSAtPSAxO1xcbiAgICAgICAgdXBkYXRlSXRlbShpZCArIFxcXCJ0aW1lclxcXCIsIHtcXG4gICAgICAgICAgICB0aXRsZTogdGltZSArIFxcXCLnp5LlkI7nu6fnu61cXFwiXFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICB1cGRhdGVJdGVtKGlkICsgXFxcInRpbWVyXFxcIiwge1xcbiAgICAgICAgdGl0bGU6IFxcXCLigJzigJzmiJHlkIzmhI/ku6XkuIropoHmsYLigJ3igJ1cXFwiLFxcbiAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKCh2KSA9PiB7XFxuICAgICAgICAgICAgc2V0SXRlbShcXFwiZmlyc3RcXFwiLCBTdHJpbmcodikpO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+aEn+iwouaCqOeahOeQhuino1xcXCI7XFxuICAgICAgICB9LCBNWV9SVUxFLnZlcnNpb24pLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIlxcbiAgICB9KTtcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmjZDotaBcIixcInBhdGhcIjpcIkRvbmF0ZS52XCIsXCJydWxlXCI6XCJqczpcXG5sZXQgZCA9IFtdO1xcbnNldFBhZ2VUaXRsZShcXFwi5o2Q6LWgL+aUr+aMgVxcXCIpO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwi5o2Q6LWgL+aUr+aMgVxcXCIsXFxuICAgIGRlc2M6IFxcXCLov5nkuKrmjZDotaDkuI3og73kuLrkvaDluKbmnaXnibnmnYPvvIzkvYbmgqjnmoTmlK/mjIHmmK/miJHmm7TmlrDliJvkvZznmoTliqjlipvjgIJcXFwiLFxcbiAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICB1cmw6IFxcXCJ0b2FzdDovL+aEn+iwouaCqOeahOaUr+aMgVxcXCJcXG59KTtcXG5kLnB1c2goe1xcbiAgICBjb2xfdHlwZTogXFxcInBpY18xX2Z1bGxcXFwiLFxcbiAgICB1cmw6IFxcXCJodHRwczovL2dpdGVlLmNvbS9Mb3lEZ0lrL0xveURnSWtfUnVsZS9yYXcvbWFzdGVyLzY3ZDhmMDE4N2YwMTg2YzEucG5nXFxcIixcXG4gICAgcGljX3VybDogXFxcImh0dHBzOi8vZ2l0ZWUuY29tL0xveURnSWsvTG95RGdJa19SdWxlL3Jhdy9tYXN0ZXIvNjdkOGYwMTg3ZjAxODZjMS5wbmdcXFwiXFxufSk7XFxuZC5wdXNoKHtcXG4gICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgdGl0bGU6IFxcXCLigJzigJzigJ3igJ1cXFwiICsgXFxcIuWbvueJh+WKoOi9vee8k+aFouivt+eojeetiVxcXCIuc21hbGwoKS5mb250Y29sb3IoXFxcIkdyYXlcXFwiKSxcXG4gICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXG4gICAgfVxcbn0pO1xcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuinhOWImeaWh+S7tlwiLFwicGF0aFwiOlwiY29uZmlnc1wiLFwicnVsZVwiOlwiY29uc3QgcGF0aCA9IFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL0xveURnSWsvY2lsaVNpbXBsZVJ1bGVzLmpzb25cXFwiO1xcblxcblxcbmZ1bmN0aW9uIGdldEpzb24oKSB7XFxuICAgIHRyeSB7XFxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShyZWFkRmlsZShwYXRoKSB8fCBcXFwiW11cXFwiKTtcXG4gICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgZGVsZXRlRmlsZShwYXRoKTtcXG4gICAgICAgIHJldHVybiBbXTtcXG4gICAgfVxcbn1cXG5cXG5mdW5jdGlvbiBzYXZlSnNvbihqc29uKSB7XFxuICAgIHNhdmVGaWxlKHBhdGgsIEpTT04uc3RyaW5naWZ5KGpzb24pKTtcXG59XFxuXFxuZnVuY3Rpb24gZ2V0VXNlZnVsSnNvbigpIHtcXG4gICAgcmV0dXJuIGdldEpzb24oKS5maWx0ZXIodiA9PiAhdi5mb3JiaWRkZW4pO1xcbn1cXG5mdW5jdGlvbiBnZXRGb3JiaWRkZW5Kc29uKCl7XFxuICAgIHJldHVybiBnZXRKc29uKCkuZmlsdGVyKHYgPT4gdi5mb3JiaWRkZW4pO1xcbn1cXG5cXG5pZighZmlsZUV4aXN0KHBhdGgpJiZNWV9SVUxFKXtcXG4gICAgbGV0IHJ1bGVzID0gJC5yZXF1aXJlKFxcXCJydWxlc1xcXCIpO1xcbiAgICAkLmhpa2VyLndpbmRvdyA9IHt9O1xcbiAgICBldmFsLmNhbGwobnVsbCwgZmV0Y2goJ2hpa2VyOi8vYXNzZXRzL2JlYXV0aWZ5LmpzJykpO1xcbiAgICBydWxlcyA9IHJ1bGVzLm1hcCgodik9PntcXG4gICAgICAgIHYuZmluZCA9IHdpbmRvdy5qc19iZWF1dGlmeSh2LmZpbmQudG9TdHJpbmcoKS5yZXBsYWNlKC9mdW5jdGlvbi4qP1xcXFwocy4qP3BhZ2VcXFxcKS4qP1xcXFx7LywgXFxcIlxcXCIpLnJlcGxhY2UoLyhcXFxcfVtcXFxcc1xcXFxTXS4qPykkLyxcXFwiXFxcIikpO1xcbiAgICAgICAgaWYodi5maW5kQWxpVXJsKXtcXG4gICAgICAgICAgICB2LmZpbmRBbGlVcmwgPSB3aW5kb3cuanNfYmVhdXRpZnkodi5maW5kQWxpVXJsLnRvU3RyaW5nKCkucmVwbGFjZSgvZnVuY3Rpb24uKj9cXFxcKGlucHV0XFxcXCkuKj9cXFxcey8sIFxcXCJcXFwiKS5yZXBsYWNlKC8oXFxcXH1bXFxcXHNcXFxcU10uKj8pJC8sXFxcIlxcXCIpKTtcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiB2O1xcbiAgICB9KTtcXG4gICAgc2F2ZUpzb24ocnVsZXMpO1xcbiAgICB0b2FzdChcXFwi5bey5Yid5aeL5YyWXFxcIik7XFxufVxcbiQuZXhwb3J0cyA9IHtcXG4gICAgZ2V0SnNvbjogZ2V0SnNvbixcXG4gICAgc2F2ZUpzb246IHNhdmVKc29uLFxcbiAgICBnZXRVc2VmdWxKc29uOiBnZXRVc2VmdWxKc29uLFxcbiAgICBnZXRGb3JiaWRkZW5Kc29uOiBnZXRGb3JiaWRkZW5Kc29uLFxcbiAgICBwYXRoOiBwYXRoXFxufTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuinhOWImeeuoeeQhlwiLFwicGF0aFwiOlwicnVsZU1hbmFnZVwiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG5zZXRQYWdlVGl0bGUoXFxcIuinhOWImeeuoeeQhlxcXCIpO1xcbmxldCBhcnIgPSAkLnJlcXVpcmUoXFxcImNvbmZpZ3NcXFwiKS5nZXRKc29uKCk7XFxubGV0IGxlbmd0aCA9IGFyci5sZW5ndGg7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCLmlrDlop5cXFwiLFxcbiAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvcnVsZUVkaXQjbm9SZWNvcmRIaXN0b3J5IyNub0hpc3RvcnkjXFxcIixcXG4gICAgY29sX3R5cGU6IFxcXCJpY29uX3JvdW5kX3NtYWxsXzRcXFwiLFxcbiAgICBwaWNfdXJsOiBcXFwiaGlrZXI6Ly9pbWFnZXMvaWNvbl9kb21haW5fY29uZmlnXFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIHBhZ2VUaXRsZTogXFxcIuaWsOWinuinhOWImVxcXCJcXG4gICAgfVxcbn0pO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwi5YiG5LqrXFxcIixcXG4gICAgdXJsOiAkKFxcXCItMVxcXCIsIFxcXCLovpPlhaXkvaDopoHliIbkuqvop4TliJnnmoTluo/lj7dcXFxcbi0x5YWo6YOo77yMLTLlt7LlkK/nlKjnmoTvvIwtM+W3suemgeeUqOeahO+8jOWkmuS4queUqCfvvIwn6ZqU5byAXFxcIikuaW5wdXQoKGxlbmd0aCkgPT4ge1xcbiAgICAgICAgbGV0IGluZGV4YyA9IGlucHV0LnNwbGl0KC8sfO+8jC8pO1xcbiAgICAgICAgbGV0IGluZGV4cyA9IFtdO1xcbiAgICAgICAgbGV0IG1vID0gcGFyc2VJbnQoaW5kZXhjWzBdKTtcXG4gICAgICAgIGlmICghKGluZGV4Yy5sZW5ndGggPT09IDEgJiYgbW8gPCAwICYmIG1vID4gLTQpKSB7XFxuICAgICAgICAgICAgZm9yIChsZXQgaXQgb2YgaW5kZXhjKSB7XFxuICAgICAgICAgICAgICAgIGxldCBudW0gPSBwYXJzZUludChpdCk7XFxuICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNOYU4obnVtKSB8fCBudW0gPj0gbGVuZ3RoIHx8IG51bSA8IDApIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/mlbDlrZfkuI3lkIjms5VcXFwiO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGluZGV4cy5wdXNoKG51bSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuICQoW1xcXCJISUtFUlxcXCIsIFxcXCJUWFRcXFwiXS5jb25jYXQoZ2V0UGFzdGVzKCkpLCAyLCBcXFwi5YiG5Lqr5pa55byPXFxcIikuc2VsZWN0KChtbywgaW5kZXhzKSA9PiB7XFxuICAgICAgICAgICAgZnVuY3Rpb24gdXAocnVsZXMpIHtcXG4gICAgICAgICAgICAgICAgbGV0IHJ1bGViNjQgPSBiYXNlNjRFbmNvZGUoSlNPTi5zdHJpbmdpZnkocnVsZXMpKTtcXG4gICAgICAgICAgICAgICAgbGV0IGdldFBhc3MgPSAobGVuZ3RoLCBydWxlLCB0eXBlKSA9PiBcXFwi5rW36ZiU6KeG55WM56OB5Yqb5ZCbLueugOaQnOe0ouW8leaTju+8jOWFseOAjFxcXCIgKyBsZW5ndGggKyBcXFwi44CN5p2h77yM5aSN5Yi25pW05p2h5Y+j5Luk5omT5byA6L2v5Lu25bCx5Lya6Ieq5Yqo5a+85YWlJFxcXCIgKyBydWxlICsgXFxcIiRcXFwiICsgdHlwZSArIFxcXCJAaW1wb3J0PWpzOiQucmVxdWlyZSgnaW1wb3J0P3J1bGU9JytcXFwiICsgSlNPTi5zdHJpbmdpZnkoTVlfUlVMRS50aXRsZSkgKyBcXFwiKShpbnB1dClcXFwiO1xcbiAgICAgICAgICAgICAgICBpZiAoZ2V0UGFzdGVzKCkuaW5jbHVkZXMoaW5wdXQpKSB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IHNoYXJlUGFzdGUocnVsZWI2NCwgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJjb3B5Oi8vXFxcIiArIGdldFBhc3MocnVsZXMubGVuZ3RoLCB1LCBcXFwiYlxcXCIpO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBhdGggPSBcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9Mb3lEZ0lrL3NoYXJlL+S6keeugOaQnOe0ouW8leaTjuinhOWImeOAjFxcXCIgKyBydWxlcy5sZW5ndGggKyBcXFwi44CN5p2hLlxcXCIgKyAoaW5wdXQgPT09IFxcXCJISUtFUlxcXCIgPyBcXFwiaGlrZXJcXFwiIDogXFxcInR4dFxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKHBhdGgsIGdldFBhc3MocnVsZXMubGVuZ3RoLCBydWxlYjY0LCBcXFwiYVxcXCIpKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwic2hhcmU6Ly9cXFwiICsgcGF0aDtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBsZXQgcnVsZXM7XFxuICAgICAgICAgICAgaWYgKG1vID09PSAtMSkge1xcbiAgICAgICAgICAgICAgICBydWxlcyA9ICQucmVxdWlyZShcXFwiY29uZmlnc1xcXCIpLmdldEpzb24oKTtcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1vID09PSAtMikge1xcbiAgICAgICAgICAgICAgICBydWxlcyA9ICQucmVxdWlyZShcXFwiY29uZmlnc1xcXCIpLmdldFVzZWZ1bEpzb24oKTtcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1vID09PSAtMykge1xcbiAgICAgICAgICAgICAgICBydWxlcyA9ICQucmVxdWlyZShcXFwiY29uZmlnc1xcXCIpLmdldEZvcmJpZGRlbkpzb24oKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBydWxlcyA9ICQucmVxdWlyZShcXFwiY29uZmlnc1xcXCIpLmdldEpzb24oKS5maWx0ZXIoKHYsIGkpID0+IGluZGV4cy5pbmNsdWRlcyhpKSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJ1bGVzID0gcnVsZXMubWFwKCh2KSA9PiB7XFxuICAgICAgICAgICAgICAgIHYudXNlciA9IHVuZGVmaW5lZDtcXG4gICAgICAgICAgICAgICAgdi5mb3JiaWRkZW4gPSB1bmRlZmluZWQ7XFxuICAgICAgICAgICAgICAgIHJldHVybiB2O1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHJldHVybiB1cChydWxlcyk7XFxuICAgICAgICB9LCBtbywgaW5kZXhzKTtcXG5cXG4gICAgfSwgbGVuZ3RoKSxcXG4gICAgY29sX3R5cGU6IFxcXCJpY29uX3JvdW5kX3NtYWxsXzRcXFwiLFxcbiAgICBwaWNfdXJsOiBcXFwiaGlrZXI6Ly9pbWFnZXMvaWNvbl9zaGFyZV9ncmVlblxcXCJcXG59KTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIumHjee9rlxcXCIsXFxuICAgIHVybDogJChcXFwi5L2g56Gu5a6a6YeN572u77yfXFxcXG7or6Xmk43kvZzkvJrliKDpmaTnjrDmnInop4TliJnvvIzmgaLlpI3oh6rluKbop4TliJnjgIJcXFwiKS5jb25maXJtKChwYXRoKSA9PiB7XFxuICAgICAgICBkZWxldGVGaWxlKHBhdGgpO1xcbiAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgfSwgJC5yZXF1aXJlKFxcXCJjb25maWdzXFxcIikucGF0aCksXFxuICAgIGNvbF90eXBlOiBcXFwiaWNvbl9yb3VuZF9zbWFsbF80XFxcIixcXG4gICAgcGljX3VybDogXFxcImhpa2VyOi8vaW1hZ2VzL2ljb25fcmVmcmVzaFxcXCJcXG59KTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIua4heepulxcXCIsXFxuICAgIHVybDogJChcXFwi5L2g56Gu5a6a5YWo6YOo5Yig6Zmk77yfXFxcXG7or6Xmk43kvZzkvJrliKDpmaTnjrDmnInop4TliJnjgIJcXFwiKS5jb25maXJtKChwYXRoKSA9PiB7XFxuICAgICAgICB3cml0ZUZpbGUocGF0aCwgXFxcIltdXFxcIik7XFxuICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICB9LCAkLnJlcXVpcmUoXFxcImNvbmZpZ3NcXFwiKS5wYXRoKSxcXG4gICAgY29sX3R5cGU6IFxcXCJpY29uX3JvdW5kX3NtYWxsXzRcXFwiLFxcbiAgICBwaWNfdXJsOiBcXFwiaGlrZXI6Ly9pbWFnZXMvaWNvbl9jb2RlX3ZpZXdcXFwiXFxufSk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICc8Zm9udCBjb2xvcj1cXFwiIzEzQjYxQlxcXCI+4paQIDwvZm9udD48Yj7op4TliJnliJfooag8Yj4gKCcgKyBTdHJpbmcobGVuZ3RoKS5mb250Y29sb3IoXFxcIiNmZjY2MDFcXFwiKSArIFxcXCIpXFxcIixcXG4gICAgY29sX3R5cGU6IFxcXCJyaWNoX3RleHRcXFwiLFxcbn0pO1xcblxcbmZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcXG4gICAgbGV0IGl0ID0gYXJyW2ldO1xcbiAgICBsZXQgdXNlciA9IGl0LnVzZXIgfHwge307XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnVsnICsgaSArICddPGI+ICAnICsgaXQubmFtZSArICc8Yj4nICsgKGl0LmZvcmJpZGRlbiA/IFxcXCIgI+KAnOKAnOemgeeUqOKAneKAnVxcXCIuc21hbGwoKSA6IFxcXCJcXFwiKSArIChpdC5yZWdpc3RlclVybCAmJiAhKHVzZXIucGFzc3dvcmQgfHwgdXNlci5hY2NvdW50IHx8IHVzZXIuZXh0cmEpID8gXFxcIiAj6ZyA6KaB55m75b2VXFxcIi5zbWFsbCgpIDogXFxcIlxcXCIpLFxcbiAgICAgICAgdXJsOiAkKFtcXFwi57yW6L6RXFxcIiwgXFxcIui0puWPt1xcXCIsIFxcXCLliIbkuqtcXFwiLCBcXFwi56aB55SoL+WQr+eUqFxcXCIsIFxcXCLnp7vliqhcXFwiLCBcXFwi572u6aG2XFxcIl0sIDEsIFxcXCLmk43kvZzvvJpcXFwiICsgaXQubmFtZSkuc2VsZWN0KChpbmRleCwgbGVuZ3RoKSA9PiB7XFxuICAgICAgICAgICAgaWYgKGlucHV0ID09PSBcXFwi57yW6L6RXFxcIikge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vcGFnZS9ydWxlRWRpdCNub1JlY29yZEhpc3RvcnkjI25vSGlzdG9yeSNcXFwiO1xcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09IFxcXCLotKblj7dcXFwiKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9wYWdlL3Bhc3N3b3JkI25vUmVjb3JkSGlzdG9yeSMjbm9IaXN0b3J5I1xcXCI7XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dCA9PT0gXFxcIuWIhuS6q1xcXCIpIHtcXG4gICAgICAgICAgICAgICAgbGV0IG9wcyA9IGdldFBhc3RlcygpO1xcbiAgICAgICAgICAgICAgICBvcHMudW5zaGlmdChcXFwi5a6M5pW05Y+j5LukXFxcIik7XFxuICAgICAgICAgICAgICAgIHJldHVybiAkKG9wcywgMiwgXFxcIuWIhuS6q+aWueW8j1xcXCIpLnNlbGVjdCgoaW5kZXgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBydWxlID0gJC5yZXF1aXJlKFxcXCJjb25maWdzXFxcIikuZ2V0SnNvbigpW2luZGV4XTtcXG4gICAgICAgICAgICAgICAgICAgIHJ1bGUudXNlciA9IHVuZGVmaW5lZDtcXG4gICAgICAgICAgICAgICAgICAgIHJ1bGUuZm9yYmlkZGVuID0gdW5kZWZpbmVkO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJ1bGViNjQgPSBiYXNlNjRFbmNvZGUoSlNPTi5zdHJpbmdpZnkocnVsZSkpO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGdldFBhc3MgPSAobmFtZSwgcnVsZSwgdHlwZSkgPT4gXFxcIua1t+mYlOinhueVjO+8jOOAjFxcXCIgKyBuYW1lICsgXFxcIuOAjeejgeWKm+WQmy7nroDmkJzntKLlvJXmk47vvIzlpI3liLbmlbTmnaHlj6Pku6TmiZPlvIDova/ku7blsLHkvJroh6rliqjlr7zlhaUkXFxcIiArIHJ1bGUgKyBcXFwiJFxcXCIgKyB0eXBlICsgXFxcIkBpbXBvcnQ9anM6JC5yZXF1aXJlKCdpbXBvcnQ/cnVsZT0nK1xcXCIgKyBKU09OLnN0cmluZ2lmeShNWV9SVUxFLnRpdGxlKSArIFxcXCIpKGlucHV0KVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT0gXFxcIuWujOaVtOWPo+S7pFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImNvcHk6Ly9cXFwiICsgZ2V0UGFzcyhydWxlLm5hbWUsIHJ1bGViNjQsIFxcXCJhXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB1ID0gc2hhcmVQYXN0ZShydWxlYjY0LCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJjb3B5Oi8vXFxcIiArIGdldFBhc3MocnVsZS5uYW1lLCB1LCBcXFwiYlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9LCBpbmRleCk7XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dCA9PT0gXFxcIuenu+WKqFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQoaW5kZXggKyBcXFwiXFxcIiwgXFxcIui+k+WFpeS9jee9rlxcXCIpLmlucHV0KChpbmRleCwgbGVuZ3RoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgbmV3SW5kZXggPSBOdW1iZXIoaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc05hTihuZXdJbmRleCkgfHwgbmV3SW5kZXggPj0gbGVuZ3RoKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+S4jeWSjOinhOeahOS9jee9rlxcXCI7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBsZXQgcnVsZXMgPSAkLnJlcXVpcmUoXFxcImNvbmZpZ3NcXFwiKS5nZXRKc29uKCk7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgcnVsZSA9IHJ1bGVzLnNwbGljZShpbmRleCwgMSlbMF07XFxuICAgICAgICAgICAgICAgICAgICBydWxlcy5zcGxpY2UobmV3SW5kZXgsIDAsIHJ1bGUpO1xcbiAgICAgICAgICAgICAgICAgICAgJC5yZXF1aXJlKFxcXCJjb25maWdzXFxcIikuc2F2ZUpzb24ocnVsZXMpO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICB9LCBpbmRleCwgbGVuZ3RoKTtcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09PSBcXFwi572u6aG2XFxcIikge1xcbiAgICAgICAgICAgICAgICBsZXQgbmV3SW5kZXggPSAwO1xcbiAgICAgICAgICAgICAgICBsZXQgcnVsZXMgPSAkLnJlcXVpcmUoXFxcImNvbmZpZ3NcXFwiKS5nZXRKc29uKCk7XFxuICAgICAgICAgICAgICAgIGxldCBydWxlID0gcnVsZXMuc3BsaWNlKGluZGV4LCAxKVswXTtcXG4gICAgICAgICAgICAgICAgcnVsZXMuc3BsaWNlKG5ld0luZGV4LCAwLCBydWxlKTtcXG4gICAgICAgICAgICAgICAgJC5yZXF1aXJlKFxcXCJjb25maWdzXFxcIikuc2F2ZUpzb24ocnVsZXMpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgbGV0IGFyciA9ICQucmVxdWlyZShcXFwiY29uZmlnc1xcXCIpLmdldEpzb24oKTtcXG4gICAgICAgICAgICAgICAgbGV0IHJ1bGUgPSBhcnJbaW5kZXhdO1xcbiAgICAgICAgICAgICAgICBydWxlLmZvcmJpZGRlbiA9ICFydWxlLmZvcmJpZGRlbjtcXG4gICAgICAgICAgICAgICAgJC5yZXF1aXJlKFxcXCJjb25maWdzXFxcIikuc2F2ZUpzb24oYXJyKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAvL3JldHVybiBcXFwidG9hc3Q6Ly9cXFwiICsgKHJ1bGUuZm9yYmlkZGVuID8gXFxcIuemgeeUqFxcXCIgOiBcXFwi5ZCv55SoXFxcIikgKyBydWxlLm5hbWU7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwgaSwgbGVuZ3RoKSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8xXFxcIixcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgaTogaSxcXG4gICAgICAgICAgICBwYWdlVGl0bGU6IGl0Lm5hbWVcXG4gICAgICAgIH1cXG4gICAgfSk7XFxufVxcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuinhOWImee8lui+kVwiLFwicGF0aFwiOlwicnVsZUVkaXRcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxuXFxuYWRkTGlzdGVuZXIoXFxcIm9uQ2xvc2VcXFwiLCAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgY2xlYXJNeVZhcihcXFwicHNfbmFtZVxcXCIpO1xcbiAgICBjbGVhck15VmFyKFxcXCJwc19maW5kXFxcIik7XFxuICAgIGNsZWFyTXlWYXIoXFxcInBzX2ZpbmRBbGlVcmxcXFwiKTtcXG4gICAgY2xlYXJNeVZhcihcXFwicHNfcGFnZVxcXCIpO1xcbiAgICBjbGVhck15VmFyKFxcXCJwc19yZWdpc3RlclVybFxcXCIpO1xcbiAgICBjbGVhck15VmFyKFxcXCJwc19iYXNpY1VybFxcXCIpO1xcbn0pKTtcXG5sZXQgdXJsSW5kZXggPSBwYXJzZUludChnZXRQYXJhbShcXFwiaW5kZXhcXFwiLCBcXFwiXFxcIikpO1xcbnVybEluZGV4ID0gTnVtYmVyLmlzTmFOKHVybEluZGV4KSA/IHZvaWQoMCkgOiB1cmxJbmRleDtcXG5sZXQgaW5kZXggPSB2b2lkKDApID09PSB1cmxJbmRleCA/IE1ZX1BBUkFNUy5pIDogdXJsSW5kZXg7XFxuXFxubGV0IGFyciA9ICQucmVxdWlyZShcXFwiY29uZmlnc1xcXCIpLmdldEpzb24oKTtcXG5sZXQgb2JqO1xcbmlmIChnZXRQYXJhbShcXFwiaXNJbXBvcnRcXFwiLCBcXFwiXFxcIikpIHtcXG4gICAgdHJ5IHtcXG4gICAgICAgIG9iaiA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9maWxlcy9fY2FjaGUvY2lsaVNpbXBsZUltcG9ydC5qc29uXFxcIik7XFxuICAgICAgICBsZXQgdGlwID0gaW5kZXggIT09IHZvaWQoMCkgPyBcXFwi5pu05paw6KeE5YiZXFxcIiA6IFxcXCLlr7zlhaXop4TliJlcXFwiO1xcbiAgICAgICAgc2V0UGFnZVRpdGxlKHRpcCArIFxcXCI6XFxcIiArIG9iai5uYW1lKTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLigJjigJhcXFwiICsgdGlwICsgXFxcIuKAmeKAmVxcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG5cXG4gICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgb2JqID0ge307XFxuICAgICAgICBiYWNrKCk7XFxuICAgICAgICB0b2FzdChcXFwi5a+85YWl6ZSZ6K+vXFxcIik7XFxuICAgIH1cXG59IGVsc2UgaWYgKGluZGV4ICE9PSB2b2lkKDApKSB7XFxuICAgIG9iaiA9IGFycltpbmRleF07XFxuICAgIHNldFBhZ2VUaXRsZShcXFwi57yW6L6R6KeE5YiZOlxcXCIgKyBvYmoubmFtZSk7XFxuICAgIGlmIChvYmoubGFzdE1vZGlmeSkge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIuS4iuasoeS/ruaUue+8mlxcXCIgKyAkLmRhdGVGb3JtYXQob2JqLmxhc3RNb2RpZnksIFxcXCJ5eXl5LU1NLWRkwqBISDptbTpzc1xcXCIpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgbGluZVZpc2libGU6IGZhbHNlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgIH1cXG59IGVsc2Uge1xcbiAgICBvYmogPSB7XFxuICAgICAgICBwYWdlOiB0cnVlXFxuICAgIH07XFxuICAgIHNldFBhZ2VUaXRsZShcXFwi5paw5bu66KeE5YiZXFxcIik7XFxufVxcblxcbmQucHVzaCh7XFxuICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICBkZXNjOiBcXFwi5ZCN5a2XKOW/heWhqylcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgb25DaGFuZ2U6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgIHB1dE15VmFyKFxcXCJwc19uYW1lXFxcIiwgaW5wdXQpO1xcbiAgICAgICAgfSksXFxuICAgICAgICBkZWZhdWx0VmFsdWU6IG9iai5uYW1lLFxcbiAgICAgICAgdGl0bGVWaXNpYmxlOiBmYWxzZVxcbiAgICB9XFxufSk7XFxuXFxuZC5wdXNoKHtcXG4gICAgY29sX3R5cGU6IFxcXCJpbnB1dFxcXCIsXFxuICAgIGRlc2M6IFxcXCLmkJzntKLop4TliJko5b+F5aGrKVxcXFxu5YaF572u5Y+Y6YeP77yac+aQnOe0ouWFs+mUruivje+8jHBhZ2XpobXmlbDvvIxiYXNpY1VybOWfuuacrOmTvuaOpe+8jHVzZXLnlKjmiLfotKblj7fkv6Hmga8odXNlci5hY2NvdW50LHVzZXIucGFzc3dvcmQpXFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIHR5cGU6IFxcXCJ0ZXh0YXJlYVxcXCIsXFxuICAgICAgICBoZWlnaHQ6IDMsXFxuICAgICAgICBoaWdobGlnaHQ6IHRydWUsXFxuICAgICAgICBvbkNoYW5nZTogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgcHV0TXlWYXIoXFxcInBzX2ZpbmRcXFwiLCBpbnB1dCk7XFxuICAgICAgICB9KSxcXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogb2JqLmZpbmQsXFxuICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlLFxcbiAgICB9XFxufSk7XFxuZC5wdXNoKHtcXG4gICAgY29sX3R5cGU6IFxcXCJpbnB1dFxcXCIsXFxuICAgIGRlc2M6IFxcXCJVUkzop4TliJko6YCJ5aGrKVxcXFxu5YaF572u5Y+Y6YeP77yaaW5wdXTpk77mjqXvvIxiYXNpY1VybOWfuuacrOmTvuaOpVxcXCIsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICB0eXBlOiBcXFwidGV4dGFyZWFcXFwiLFxcbiAgICAgICAgaGVpZ2h0OiAzLFxcbiAgICAgICAgaGlnaGxpZ2h0OiB0cnVlLFxcbiAgICAgICAgb25DaGFuZ2U6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgIHB1dE15VmFyKFxcXCJwc19maW5kQWxpVXJsXFxcIiwgaW5wdXQpO1xcbiAgICAgICAgfSksXFxuICAgICAgICBkZWZhdWx0VmFsdWU6IG9iai5maW5kQWxpVXJsLFxcbiAgICAgICAgdGl0bGVWaXNpYmxlOiBmYWxzZSxcXG4gICAgfVxcbn0pO1xcbmQucHVzaCh7XFxuICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICBkZXNjOiBcXFwi5Z+65pys6ZO+5o6lKOmAieWhqykg5Luj56CB5Lit55SoYmFzaWNVcmzlvJXnlKhcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgb25DaGFuZ2U6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgIHB1dE15VmFyKFxcXCJwc19iYXNpY1VybFxcXCIsIGlucHV0KTtcXG4gICAgICAgIH0pLFxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBvYmouYmFzaWNVcmwsXFxuICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlLFxcbiAgICB9XFxufSk7XFxuZC5wdXNoKHtcXG4gICAgY29sX3R5cGU6IFxcXCJpbnB1dFxcXCIsXFxuICAgIGRlc2M6IFxcXCLms6jlhozlnLDlnYAo6YCJ5aGrKVxcXCIsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBvbkNoYW5nZTogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgcHV0TXlWYXIoXFxcInBzX3JlZ2lzdGVyVXJsXFxcIiwgaW5wdXQpO1xcbiAgICAgICAgfSksXFxuICAgICAgICBkZWZhdWx0VmFsdWU6IG9iai5yZWdpc3RlclVybCxcXG4gICAgICAgIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxuICAgIH1cXG59KTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIuaYr+WQpuWPr+S7pee/u+mhte+8mlxcXCIgKyBvYmoucGFnZSxcXG4gICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzFcXFwiLFxcbiAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKHBhZ2UpID0+IHtcXG4gICAgICAgIGxldCBpc1BhZ2UgPSAhIWdldE15VmFyKFxcXCJwc19wYWdlXFxcIiwgcGFnZSA/IFxcXCIxXFxcIiA6IFxcXCJcXFwiKTtcXG4gICAgICAgIHB1dE15VmFyKFxcXCJwc19wYWdlXFxcIiwgaXNQYWdlID8gXFxcIlxcXCIgOiBcXFwiMVxcXCIpO1xcbiAgICAgICAgdXBkYXRlSXRlbShcXFwicnVsZWVkcHNfcGFnZVxcXCIsIHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIuaYr+WQpuWPr+S7pee/u+mhte+8mlxcXCIgKyAhaXNQYWdlXFxuICAgICAgICB9KTtcXG4gICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgIH0sIG9iai5wYWdlKSxcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIGlkOiBcXFwicnVsZWVkcHNfcGFnZVxcXCJcXG4gICAgfVxcbn0pO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwi5Yig6ZmkXFxcIixcXG4gICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChpbmRleCwgdXJsSW5kZXgpID0+IHtcXG4gICAgICAgIGlmIChpbmRleCA9PT0gdm9pZCgwKSkge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/mraTpobnml6Dms5XliKDpmaRcXFwiO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKHVybEluZGV4ICE9PSB2b2lkKDApKSB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+ato+WcqOabtOaWsOinhOWIme+8jOWIoOmZpOivt+S7juinhOWImeeuoeeQhui/m+WFpVxcXCI7XFxuICAgICAgICB9XFxuICAgICAgICBjb25maXJtKHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIua4qemmqOaPkOekulxcXCIsXFxuICAgICAgICAgICAgY29udGVudDogXFxcIuehruWumuimgeWIoOmZpOatpOinhOWImeWQl++8n+azqOaEj+WIoOmZpOWQjuaXoOazleaBouWkjVxcXCIsXFxuICAgICAgICAgICAgY29uZmlybTogJC50b1N0cmluZygoaW5kZXgpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IGFyciA9ICQucmVxdWlyZShcXFwiY29uZmlnc1xcXCIpLmdldEpzb24oKTtcXG4gICAgICAgICAgICAgICAgYXJyLnNwbGljZShpbmRleCwgMSk7XFxuICAgICAgICAgICAgICAgICQucmVxdWlyZShcXFwiY29uZmlnc1xcXCIpLnNhdmVKc29uKGFycik7XFxuICAgICAgICAgICAgICAgIGJhY2sodHJ1ZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/liKDpmaTmiJDlip9cXFwiO1xcbiAgICAgICAgICAgIH0sIGluZGV4KVxcbiAgICAgICAgfSk7XFxuICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgIH0sIGluZGV4LCB1cmxJbmRleCksXFxuICAgIGNvbF90eXBlOiBcXFwidGV4dF8yXFxcIixcXG59KTtcXG5cXG5kLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIuS/neWtmFxcXCIsXFxuICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoaW5kZXgsIHBhZ2UpID0+IHtcXG4gICAgICAgIGxldCBuYW1lID0gZ2V0TXlWYXIoXFxcInBzX25hbWVcXFwiLCBcXFwiXFxcIik7XFxuICAgICAgICBpZiAobmFtZSA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lkI3lrZflvpfmnInkuIDkuKrlkKdcXFwiXFxuICAgICAgICB9XFxuICAgICAgICBsZXQgZmluZCA9IGdldE15VmFyKFxcXCJwc19maW5kXFxcIiwgXFxcIlxcXCIpO1xcbiAgICAgICAgaWYgKGZpbmQgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5pCc57Si6KeE5YiZ5LiN6IO95Li656m6XFxcIlxcbiAgICAgICAgfVxcbiAgICAgICAgbGV0IGFyciA9ICQucmVxdWlyZShcXFwiY29uZmlnc1xcXCIpLmdldEpzb24oKTtcXG4gICAgICAgIGxldCBvYmoxID0ge1xcbiAgICAgICAgICAgIG5hbWU6IG5hbWUsXFxuICAgICAgICAgICAgZmluZDogZmluZCxcXG4gICAgICAgICAgICBiYXNpY1VybDogZ2V0TXlWYXIoXFxcInBzX2Jhc2ljVXJsXFxcIiwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgIGZpbmRBbGlVcmw6IGdldE15VmFyKFxcXCJwc19maW5kQWxpVXJsXFxcIiwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgIHBhZ2U6ICEhZ2V0TXlWYXIoXFxcInBzX3BhZ2VcXFwiLCBwYWdlID8gXFxcIjFcXFwiIDogXFxcIlxcXCIpLFxcbiAgICAgICAgICAgIHJlZ2lzdGVyVXJsOiBnZXRNeVZhcihcXFwicHNfcmVnaXN0ZXJVcmxcXFwiLCBcXFwiXFxcIikgfHwgdW5kZWZpbmVkLFxcbiAgICAgICAgICAgIGxhc3RNb2RpZnk6IERhdGUubm93KClcXG4gICAgICAgIH07XFxuICAgICAgICBpZiAoaW5kZXggPT09IHZvaWQoMCkpIHtcXG4gICAgICAgICAgICBpZiAoYXJyLnNvbWUodiA9PiB2Lm5hbWUgPT09IG5hbWUpKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lt7Lnu4/lrZjlnKjor6Xop4TliJlcXFwiO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBhcnIudW5zaGlmdChvYmoxKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgbGV0IG5hbWV5ID0gYXJyW2luZGV4XS5uYW1lO1xcbiAgICAgICAgICAgIGlmIChuYW1lICE9PSBuYW1leSkge1xcbiAgICAgICAgICAgICAgICBpZiAoYXJyLnNvbWUodiA9PiB2Lm5hbWUgPT09IG5hbWUpKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5bey57uP5a2Y5Zyo6K+l6KeE5YiZXFxcIjtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBvYmoxID0gT2JqZWN0LmFzc2lnbihhcnJbaW5kZXhdLCBvYmoxKTtcXG4gICAgICAgICAgICBhcnIuc3BsaWNlKGluZGV4LCAxLCBvYmoxKTtcXG4gICAgICAgIH1cXG4gICAgICAgICQucmVxdWlyZShcXFwiY29uZmlnc1xcXCIpLnNhdmVKc29uKGFycik7XFxuICAgICAgICBiYWNrKHRydWUpO1xcbiAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+S/neWtmOaIkOWKn1xcXCI7XFxuICAgIH0sIGluZGV4LCBvYmoucGFnZSksXFxuICAgIGNvbF90eXBlOiBcXFwidGV4dF8yXFxcIixcXG59KTtcXG5cXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLop4TliJnotKblj7dcIixcInBhdGhcIjpcInBhc3N3b3JkXCIsXCJydWxlXCI6XCJqczpcXG4oZnVuY3Rpb24oKSB7XFxuICAgIHZhciBkID0gW107XFxuICAgIGFkZExpc3RlbmVyKFxcXCJvbkNsb3NlXFxcIiwgJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICBjbGVhck15VmFyKFxcXCJwc19hY2NvdW50XFxcIik7XFxuICAgICAgICBjbGVhck15VmFyKFxcXCJwc19wYXNzd29yZFxcXCIpO1xcbiAgICAgICAgY2xlYXJNeVZhcihcXFwicHNfZXh0cmFcXFwiKTtcXG4gICAgfSkpO1xcbiAgICBsZXQgaW5kZXggPSBNWV9QQVJBTVMuaTtcXG4gICAgbGV0IGFyciA9ICQucmVxdWlyZShcXFwiY29uZmlnc1xcXCIpLmdldEpzb24oKTtcXG4gICAgbGV0IG9iaiA9IGFycltpbmRleF0gfHwge307XFxuICAgIHNldFBhZ2VUaXRsZShcXFwi6K6+572u6LSm5Y+3OlxcXCIgKyBvYmoubmFtZSk7XFxuICAgIGxldCByZWdpc3RlclVybCA9IG9iai5yZWdpc3RlclVybDtcXG4gICAgaWYgKHJlZ2lzdGVyVXJsKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLliY3lvoDms6jlhoxcXFwiLFxcbiAgICAgICAgICAgIHVybDogJChcXFwiaGlrZXI6Ly9lbXB0eSNub1JlY29yZEhpc3RvcnkjI25vSGlzdG9yeSNcXFwiKS5ydWxlKChyZWdpc3RlclVybCk9PntcXG4gICAgICAgICAgICAgICAgc2V0UmVzdWx0KFt7XFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTpcXFwieDVfd2Vidmlld19zaW5nbGVcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOnJlZ2lzdGVyVXJsLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzpcXFwiZmxvYXQmJjEwMCVcXFwiXFxuICAgICAgICAgICAgICAgIH1dKTtcXG4gICAgICAgICAgICB9LCByZWdpc3RlclVybCksXFxuICAgICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgICBwYWdlVGl0bGU6IFxcXCLms6jlhozotKblj7c6XFxcIiArIG9iai5uYW1lXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgIH1cXG4gICAgb2JqID0gb2JqLnVzZXIgfHwge307XFxuICAgIGQucHVzaCh7XFxuICAgICAgICBjb2xfdHlwZTogXFxcImlucHV0XFxcIixcXG4gICAgICAgIGRlc2M6IFxcXCLnlKjmiLflkI1cXFwiLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBvbkNoYW5nZTogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJwc19hY2NvdW50XFxcIiwgaW5wdXQpO1xcbiAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogb2JqLmFjY291bnQsXFxuICAgICAgICAgICAgdGl0bGVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgfVxcbiAgICB9KTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICAgICAgZGVzYzogXFxcIuWvhueggVxcXCIsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIHR5cGU6IFxcXCJwYXNzd29yZFxcXCIsXFxuICAgICAgICAgICAgb25DaGFuZ2U6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwicHNfcGFzc3dvcmRcXFwiLCBpbnB1dCk7XFxuICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBvYmoucGFzc3dvcmQsXFxuICAgICAgICAgICAgdGl0bGVWaXNpYmxlOiBmYWxzZSxcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICBjb2xfdHlwZTogXFxcImlucHV0XFxcIixcXG4gICAgICAgIGRlc2M6IFxcXCLpop3lpJZcXFwiLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICB0eXBlOiBcXFwidGV4dGFyZWFcXFwiLFxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInBzX2V4dHJhXFxcIiwgaW5wdXQpO1xcbiAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogb2JqLmV4dHJhLFxcbiAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxuICAgICAgICAgICAgaGVpZ2h0OiAtMVxcbiAgICAgICAgfVxcbiAgICB9KTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi5L+d5a2YXFxcIixcXG4gICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoaW5kZXgpID0+IHtcXG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IGdldE15VmFyKFxcXCJwc19hY2NvdW50XFxcIiwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgIGxldCBwYXNzd29yZCA9IGdldE15VmFyKFxcXCJwc19wYXNzd29yZFxcXCIsIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICBsZXQgZXh0cmEgPSBnZXRNeVZhcihcXFwicHNfZXh0cmFcXFwiLCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgLyppZiAoIShhY2NvdW50fHxwYXNzd29yZHx8ZXh0cmEpKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/kuI3og73lhajpg6jkuLrnqbpcXFwiO1xcbiAgICAgICAgICAgIH0qL1xcbiAgICAgICAgICAgIGxldCBhcnIgPSAkLnJlcXVpcmUoXFxcImNvbmZpZ3NcXFwiKS5nZXRKc29uKCk7XFxuICAgICAgICAgICAgbGV0IGl0ZW0gPSBhcnJbaW5kZXhdO1xcbiAgICAgICAgICAgIGl0ZW0udXNlciA9IHt9O1xcbiAgICAgICAgICAgIGl0ZW0udXNlci5hY2NvdW50ID0gYWNjb3VudFxcbiAgICAgICAgICAgIGl0ZW0udXNlci5wYXNzd29yZCA9IHBhc3N3b3JkO1xcbiAgICAgICAgICAgIGl0ZW0udXNlci5leHRyYSA9IGV4dHJhO1xcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gdm9pZCgwKSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8vaWTplJnor69cXFwiO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGFyci5zcGxpY2UoaW5kZXgsIDEsIGl0ZW0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAkLnJlcXVpcmUoXFxcImNvbmZpZ3NcXFwiKS5zYXZlSnNvbihhcnIpO1xcbiAgICAgICAgICAgIGJhY2sodHJ1ZSk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+S/neWtmOaIkOWKn1xcXCI7XFxuICAgICAgICB9LCBpbmRleCksXFxuICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICB9KTtcXG4gICAgc2V0UmVzdWx0KGQpO1xcbn0pKClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuinhOWImeWvvOWFpVwiLFwicGF0aFwiOlwiaW1wb3J0XCIsXCJydWxlXCI6XCJqczpcXG5mdW5jdGlvbiBzYXZlQ2FjaGUoanNvbikge1xcbiAgICB3cml0ZUZpbGUoXFxcImhpa2VyOi8vZmlsZXMvX2NhY2hlL2NpbGlTaW1wbGVJbXBvcnQuanNvblxcXCIsIEpTT04uc3RyaW5naWZ5KGpzb24pKTtcXG59XFxuJC5leHBvcnRzID0gZnVuY3Rpb24ocGFzcykge1xcbiAgICB0cnkge1xcbiAgICAgICAgbGV0IFtfLCBydWxlLCB0eXBlXSA9IHBhc3Muc3BsaXQoXFxcIiRcXFwiKTtcXG4gICAgICAgIGlmICh0eXBlID09PSBcXFwiYlxcXCIpIHtcXG4gICAgICAgICAgICBydWxlID0gcGFyc2VQYXN0ZShydWxlKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGxldCBydWxlcyA9IEpTT04ucGFyc2UoYmFzZTY0RGVjb2RlKHJ1bGUpKTtcXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShydWxlcykpIHtcXG4gICAgICAgICAgICBydWxlcyA9IFtydWxlc107XFxuICAgICAgICB9XFxuICAgICAgICBydWxlcy5yZXZlcnNlKCk7XFxuICAgICAgICBNWV9VUkwgPSBtb2R1bGUuaWQ7XFxuICAgICAgICBsZXQgcnVsZVRpdGxlID0gZ2V0UGFyYW0oXFxcInJ1bGVcXFwiKTtcXG4gICAgICAgIGxldCBhcnIgPSAkLnJlcXVpcmUoXFxcImNvbmZpZ3M/cnVsZT1cXFwiICsgcnVsZVRpdGxlKS5nZXRKc29uKCk7XFxuICAgICAgICBsZXQgbmV3SSA9IDA7XFxuICAgICAgICBmb3IgKGxldCBydWxlIG9mIHJ1bGVzKSB7XFxuICAgICAgICAgICAgbGV0IGluZGV4ID0gYXJyLmZpbmRJbmRleCh2ID0+IHYubmFtZSA9PT0gcnVsZS5uYW1lKTtcXG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xcbiAgICAgICAgICAgICAgICBydWxlID0gT2JqZWN0LmFzc2lnbihhcnJbaW5kZXhdLCBydWxlKTtcXG4gICAgICAgICAgICAgICAgYXJyLnNwbGljZShpbmRleCwgMSwgcnVsZSk7XFxuICAgICAgICAgICAgICAgIGlmIChydWxlcy5sZW5ndGggPT09IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgIHNhdmVDYWNoZShydWxlKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9wYWdlL3J1bGVFZGl0I25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5Iz9pc0ltcG9ydD10cnVlJmluZGV4PVxcXCIgKyBpbmRleCArIFxcXCImcnVsZT1cXFwiICsgcnVsZVRpdGxlO1xcbiAgICAgICAgICAgICAgICAgICAgLy90b2FzdChcXFwi5bey5pu05paw6KeE5YiZ77yaXFxcIiArIHJ1bGUubmFtZSk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBsb2coXFxcIuW3suabtOaWsOinhOWIme+8mlxcXCIgKyBydWxlLm5hbWUpXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBuZXdJKys7XFxuICAgICAgICAgICAgICAgIGFyci51bnNoaWZ0KHJ1bGUpO1xcbiAgICAgICAgICAgICAgICBpZiAocnVsZXMubGVuZ3RoID09PSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICBzYXZlQ2FjaGUocnVsZSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vcGFnZS9ydWxlRWRpdCNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSM/aXNJbXBvcnQ9dHJ1ZSZydWxlPVxcXCIgKyBydWxlVGl0bGU7XFxuICAgICAgICAgICAgICAgICAgICAvL3RvYXN0KFxcXCLlt7Llr7zlhaXop4TliJnvvJpcXFwiICsgcnVsZS5uYW1lKTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIGxvZyhcXFwi5bey5a+85YWl6KeE5YiZ77yaXFxcIiArIHJ1bGUubmFtZSlcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChydWxlcy5sZW5ndGggPiAxKSB7XFxuICAgICAgICAgICAgJC5yZXF1aXJlKFxcXCJjb25maWdzP3J1bGU9XFxcIiArIHJ1bGVUaXRsZSkuc2F2ZUpzb24oYXJyKTtcXG4gICAgICAgICAgICB0b2FzdChcXFwi5paw5aKe77yaXFxcIiArIG5ld0kgKyBcXFwiIOimhuebluabtOaWsO+8mlxcXCIgKyAocnVsZXMubGVuZ3RoIC0gbmV3SSkpO1xcbiAgICAgICAgfVxcbiAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICBsb2coZS50b1N0cmluZygpKTtcXG4gICAgICAgIHRvYXN0KFxcXCLlr7zlhaXlpLHotKVcXFwiKTtcXG4gICAgfVxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuinhOWImeWIl+ihqFwiLFwicGF0aFwiOlwicnVsZXNcIixcInJ1bGVcIjpcImpzOlxcbiQuZXhwb3J0cyA9IFt7XFxuICAgICAgICBuYW1lOiBcXFwiQlRTT1dcXFwiLFxcbiAgICAgICAgcGFnZTogdHJ1ZSxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgICAgICBsZXQgYmFzaWNVcmwgPSBcXFwiaHR0cHM6Ly9idHNvdy5tb3RvcmN5Y2xlc1xcXCI7XFxuICAgICAgICAgICAgbGV0IGFwaSA9IFxcXCIvc2VhcmNoL1xcXCIgKyBlbmNvZGVVUklDb21wb25lbnQocykgKyBcXFwiL3BhZ2UvXFxcIiArIHBhZ2U7XFxuICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KGJhc2ljVXJsICsgYXBpKTtcXG4gICAgICAgICAgICBsZXQgYXJyID0gcGRmYShodG1sLCBcXFwiLmRhdGEtbGlzdCYmLnJvdzpub3QoLmhpZGRlbi14cylcXFwiKTtcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7ICAgICAgIFxcbiAgICAgICAgICAgICB2YXIgdXJsbCA9IHBkZmgoYXJyW2ldLCBcXFwiYSYmaHJlZlxcXCIpOyAgICAgICAgXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGFycltpXSwgXFxcImEmJnRpdGxlXFxcIikuc21hbGwoKSxcXG4gICAgICAgICAgICAgICAgZGVzYzogcGRmaChhcnJbaV0sIFxcXCIuc2l6ZS1kYXRlJiZUZXh0XFxcIiksXFxuICAgICAgICAgICAgICAgIHVybDogdXJsbC5zdGFydHNXaXRoKFxcXCJodHRwXFxcIik/dXJsbDogXFxcImh0dHBzOlxcXCIgKyB1cmxsLFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9LFxcbiAgICAgICAgZmluZEFsaVVybChpbnB1dCkge1xcbiAgICAgICAgICAgdmFyIGh0bWwgPSBwZGZoKHJlcXVlc3QoaW5wdXQsIHt9KSwgJyNtYWduZXRPcGVuJiZhJiZocmVmJyk7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0bWw7XFxuICAgICAgICAgICB9XFxuICAgIH0se1xcbiAgICAgICAgbmFtZTogXFxcIkJU5ZCD5YqbXFxcIixcXG4gICAgICAgIHBhZ2U6IHRydWUsXFxuICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxuICAgICAgICAgICAgbGV0IGJhc2ljVXJsID0gXFxcImh0dHBzOi8vMjIzLnNva2syMy5idXp6XFxcIjtcXG4gICAgICAgICAgICBsZXQgYXBpID0gXFxcIi9zZWFyY2gvXFxcIiArIGVuY29kZVVSSUNvbXBvbmVudChzKSArIFxcXCIvcGFnZS1cXFwiICsgcGFnZSArIFxcXCIuaHRtbFxcXCI7XFxuICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KGJhc2ljVXJsICsgYXBpKTtcXG4gICAgICAgICAgICBsZXQgYXJyID0gcGRmYShodG1sLCBcXFwiLmxpc3QtdmlldyYmLml0ZW06bm90KDptYXRjaGVzKOWcqOe6v+aSreaUvikpXFxcIik7XFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgeyAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChhcnJbaV0sIFxcXCJoNC0tLmxhYmVsJiZUZXh0XFxcIikuc21hbGwoKSxcXG4gICAgICAgICAgICAgICAgZGVzYzogcGRmaChhcnJbaV0sIFxcXCJwJiZUZXh0XFxcIikubWF0Y2goLyjmlofku7blpKflsI8uKj8p5paH5Lu25pWw6YePLylbMV0uc2xpY2UoMCwtOSksXFxuICAgICAgICAgICAgICAgIHVybDogYmFzaWNVcmwgKyBwZGZoKGFycltpXSwgXFxcImEmJmhyZWZcXFwiKSxcXG4gICAgICAgICAgICAgICAgfSk7ICAgICAgICAgXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBkO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGZpbmRBbGlVcmwoaW5wdXQpIHtcXG4gICAgICAgICAgIHZhciBodG1sID0gcGRmaChyZXF1ZXN0KGlucHV0KSwgJy5saXN0LXVuc3R5bGVkJiZhJiZocmVmJyk7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0bWw7XFxuICAgICAgICAgICB9XFxuICAgIH0se1xcbiAgICAgICAgbmFtZTogXFxcIuejgeaQnC5jb21cXFwiLFxcbiAgICAgICAgcGFnZTogdHJ1ZSxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgICAgICBsZXQgYmFzaWNVcmwgPSBcXFwiaHR0cHM6Ly/no4HmkJwuY29tXFxcIjtcXG4gICAgICAgICAgICBsZXQgYXBpID0gXFxcIi9zZWFyY2gucGhwP2tleT1cXFwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHMpICsgXFxcIiZwPVxcXCIgKyBwYWdlO1xcbiAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdChiYXNpY1VybCArIGFwaSk7XFxuICAgICAgICAgICBsZXQgYXJyID0gcGRmYShodG1sLCBcXFwiYm9keSYmLnNzYm94XFxcIik7XFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgeyAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChhcnJbaV0sIFxcXCJhJiZUZXh0XFxcIikuc21hbGwoKSxcXG4gICAgICAgICAgICAgICAgZGVzYzogcGRmaChhcnJbaV0sIFxcXCIuc2JhciYmVGV4dFxcXCIpLFxcbiAgICAgICAgICAgICAgICB1cmw6IGJhc2ljVXJsICsgcGRmaChhcnJbaV0sIFxcXCJhJiZocmVmXFxcIiksXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gZDtcXG4gICAgICAgIH0sXFxuICAgICAgICBmaW5kQWxpVXJsKGlucHV0KSB7XFxuICAgICAgICAgICB2YXIgaHRtbCA9IHBkZmgocmVxdWVzdChpbnB1dCwge30pLCAnc3BhbiYmaHJlZicpO1xcbiAgICAgICAgICAgICAgICAgIHJldHVybiBodG1sO1xcbiAgICAgICAgICAgfVxcbiAgICB9LHtcXG4gICAgICAgIG5hbWU6IFxcXCLno4HlipvmkJzntKJcXFwiLFxcbiAgICAgICAgcGFnZTogZmFsc2UsXFxuICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxuICAgICAgICAgICAgbGV0IGJhc2ljVXJsID0gXFxcImh0dHBzOi8vY2lsaXNvdXN1by5jb21cXFwiO1xcbiAgICAgICAgICAgIGxldCBhcGkgPSBcXFwiL3NlYXJjaD9xPVxcXCIgKyBlbmNvZGVVUklDb21wb25lbnQocyk7XFxuICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KGJhc2ljVXJsICsgYXBpKTtcXG4gICAgICAgICAgICBsZXQgYXJyID0gcGRmYShodG1sLCBcXFwiLmxpc3QmJi5pdGVtXFxcIik7XFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgeyAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChhcnJbaV0sIFxcXCIuZmlsZW5hbWUmJlRleHRcXFwiKS5zbWFsbCgpLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBwZGZoKGFycltpXSwgXFxcIi5zaXplJiZUZXh0XFxcIiksXFxuICAgICAgICAgICAgICAgIHVybDogYmFzaWNVcmwgKyBwZGZoKGFycltpXSwgXFxcImEmJmhyZWZcXFwiKSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBkO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGZpbmRBbGlVcmwoaW5wdXQpIHtcXG4gICAgICAgICAgIHZhciBodG1sID0gcGRmaChyZXF1ZXN0KGlucHV0LCB7fSksICdib2R5JiYubWFnbmV0LWJveCYmaW5wdXQmJnZhbHVlJyk7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0bWw7XFxuICAgICAgICAgICB9XFxuICAgIH0se1xcbiAgICAgICAgbmFtZTogXFxcIuWPo+iii+ejgeWKm1xcXCIsXFxuICAgICAgICBwYWdlOiB0cnVlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIGxldCBiYXNpY1VybCA9IFxcXCJodHRwczovL2tkLmNsa2QueHl6XFxcIjtcXG4gICAgICAgICAgICBsZXQgYXBpID0gXFxcIi9zZWFyY2gvXFxcIiArIGVuY29kZVVSSUNvbXBvbmVudChzKSArIFxcXCIvXFxcIiArIHBhZ2U7XFxuICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KGJhc2ljVXJsICsgYXBpKTtcXG4gICAgICAgICAgICBsZXQgYXJyID0gcGRmYShodG1sLCBcXFwidGJvZHkmJnRyXFxcIik7XFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgeyAgICAgICBcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoYXJyW2ldLCBcXFwiYSYmVGV4dFxcXCIpLnNtYWxsKCksXFxuICAgICAgICAgICAgICAgIGRlc2M6IHBkZmgoYXJyW2ldLCBcXFwiVGV4dFxcXCIpLm1hdGNoKC9cXFxcZCtcXFxcLVxcXFxkK1xcXFwtXFxcXGQrLiovKVswXSxcXG4gICAgICAgICAgICAgICAgdXJsOiBwZGZoKGFycltpXSwgXFxcImEsMSYmaHJlZlxcXCIpLCAgICAgICAgXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gZDtcXG4gICAgICAgIH0sXFxuICAgIH0se1xcbiAgICAgICAgLy/msLjkuYXlnLDlnYDvvJpodHRwOi8vZGRjbC5tZS9cXG4gICAgICAgIG5hbWU6IFxcXCLmu7Tmu7Tno4HliptcXFwiLFxcbiAgICAgICAgcGFnZTogdHJ1ZSxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgICAgICBsZXQgYmFzaWNVcmwgPSBcXFwiaHR0cHM6Ly9hMnJiNDU4Y2V4NzlpbXN3Lnh5elxcXCI7XFxuICAgICAgICAgICAgbGV0IGFwaSA9IFxcXCIvc2VhcmNoL1xcXCIgKyBlbmNvZGVVUklDb21wb25lbnQocykgKyBcXFwiX2N0aW1lX1xcXCIgKyBwYWdlICsgXFxcIi5odG1sXFxcIjtcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoYmFzaWNVcmwgKyBhcGkpO1xcbiAgICAgICAgICAgIGxldCBhcnIgPSBwZGZhKGh0bWwsIFxcXCJib2R5JiYucGFuZWxcXFwiKTtcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7ICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGFycltpXSwgXFxcImEmJlRleHRcXFwiKS5zbWFsbCgpLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBwZGZoKGFycltpXSwgXFxcInRib2R5JiZUZXh0XFxcIiksXFxuICAgICAgICAgICAgICAgIHVybDogYmFzaWNVcmwgKyBwZGZoKGFycltpXSwgXFxcImEmJmhyZWZcXFwiKSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBkO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGZpbmRBbGlVcmwoaW5wdXQpIHtcXG4gICAgICAgICAgIHZhciBodG1sID0gcGRmaChyZXF1ZXN0KGlucHV0KSwgXFxcIi5kb3duYnV0dG9uJiZhJiZocmVmXFxcIik7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0bWw7XFxuICAgICAgICAgICB9XFxuICAgIH0se1xcbiAgICAgICAgLy/msLjkuYXlnLDlnYDvvJpodHRwOi8vamo5MTUudG9wL1xcbiAgICAgICAgbmFtZTogXFxcIuiIheiIheejgeWKm1xcXCIsXFxuICAgICAgICBwYWdlOiB0cnVlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIGxldCBiYXNpY1VybCA9IFxcXCJodHRwOi8vamozNDg4LnRvcFxcXCI7XFxuICAgICAgICAgICAgbGV0IGFwaSA9IFxcXCIvc2VhcmNoP3NvcnQ9cmVsZSZ3b3JkPVxcXCIgKyBlbmNvZGVVUklDb21wb25lbnQocykgKyBcXFwiJnBhZ2U9XFxcIiArIHBhZ2U7XFxuICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KGJhc2ljVXJsICsgYXBpKTtcXG4gICAgICAgICAgICBsZXQgYXJyID0gcGRmYShodG1sLCBcXFwiYm9keSYmLmxpc3QtZ3JvdXAtaXRlbVxcXCIpO1xcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoYXJyW2ldLCBcXFwiYSYmVGV4dFxcXCIpLnNtYWxsKCksXFxuICAgICAgICAgICAgICAgIGRlc2M6IHBkZmgoYXJyW2ldLCBcXFwiLmFsaWduLXNlbGYtY2VudGVyJiZUZXh0XFxcIiksXFxuICAgICAgICAgICAgICAgIHVybDogYmFzaWNVcmwgKyBwZGZoKGFycltpXSwgXFxcImEmJmhyZWZcXFwiKSxcXG4gICAgICAgICAgICAgICAgfSk7ICAgICAgICAgXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBkO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGZpbmRBbGlVcmwoaW5wdXQpIHtcXG4gICAgICAgICAgIHZhciBodG1sID0gcGRmaChyZXF1ZXN0KGlucHV0KSwgJy5idC1ib3gmJmEmJmhyZWYnKTtcXG4gICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbDtcXG4gICAgICAgICAgIH1cXG4gICAgfSx7XFxuICAgICAgICAvL+awuOS5heWcsOWdgO+8mmh0dHBzOi8vc29mYW4uY2x1Yi9cXG4gICAgICAgIG5hbWU6IFxcXCLmkJznlapcXFwiLFxcbiAgICAgICAgcGFnZTogdHJ1ZSxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgICAgICBsZXQgYmFzaWNVcmwgPSBcXFwiaHR0cHM6Ly9jZG4uc29mYW4ub25lOjY1NTMzXFxcIjtcXG4gICAgICAgICAgICBsZXQgYXBpID0gXFxcIi9zP3dvcmQ9XFxcIiArIGVuY29kZVVSSUNvbXBvbmVudChzKSArIFxcXCImcGFnZT1cXFwiICsgcGFnZTtcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoYmFzaWNVcmwgKyBhcGkse1xcbiAgICAgICAgICAgIGhlYWRlcnM6e1xcbiAgICAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICAgIFJlZmVyZXI6IFxcXCJodHRwczovL2Nkbi5zb2Zhbi5vbmUvXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGxldCBhcnIgPSBwZGZhKGh0bWwsIFxcXCJib2R5JiYubGlzdC11bnN0eWxlZFxcXCIpO1xcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoYXJyW2ldLCBcXFwiYSYmVGV4dFxcXCIpLnNtYWxsKCksXFxuICAgICAgICAgICAgICAgIGRlc2M6IHBkZmgoYXJyW2ldLCBcXFwiLnJlc3VsdC1yZXNvdXJjZS1tZXRhLWluZm8tLS5jb21tb24tbGluayYmVGV4dFxcXCIpLFxcbiAgICAgICAgICAgICAgICB1cmw6IGJhc2ljVXJsICsgcGRmaChhcnJbaV0sIFxcXCJhJiZocmVmXFxcIiksXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gZDtcXG4gICAgICAgIH0sXFxuICAgICAgICBmaW5kQWxpVXJsKGlucHV0KSB7XFxuICAgICAgICAgICB2YXIgaHRtbCA9IHBkZmgocmVxdWVzdChpbnB1dCx7XFxuICAgICAgICAgICAgaGVhZGVyczp7ICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICAgIFJlZmVyZXI6IFxcXCJodHRwczovL2Nkbi5zb2Zhbi5vbmUvXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgIH0pLCAnI21hZ25ldC1saW5rJiZhJiZocmVmJyk7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0bWw7XFxuICAgICAgICAgICB9XFxuICAgIH0se1xcbiAgICAgICAgLy/msLjkuYXlnLDlnYDvvJp6aG9uZ3ppYmEuY2MgIHNlZWQ4Lm9yZ1xcbiAgICAgICAgbmFtZTogXFxcIuenjeWtkOWQp1xcXCIsXFxuICAgICAgICBwYWdlOiB0cnVlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIGxldCBiYXNpY1VybCA9IFxcXCJodHRwOi8venpiMDAudG9wXFxcIjtcXG4gICAgICAgICAgICBsZXQgYXBpID0gXFxcIi9zZWFyY2g/d2Q9XFxcIiArIGVuY29kZVVSSUNvbXBvbmVudChzKSArIFxcXCImc29ydD1yZWwmcGFnZT1cXFwiICsgcGFnZTtcXG4gICAgICAgICAgICBsZXQgaHRsID0gcGRmaChyZXF1ZXN0KGJhc2ljVXJsICsgYXBpKSxcXFwic2NyaXB0JiZIdG1sXFxcIikucmVwbGFjZSgvZG9jdW1lbnQud3JpdGVcXFxcKCguKj8pXFxcXClcXFxcOy8sXFxcIiQxXFxcIikucmVwbGFjZShcXFwid2luZG93XFxcIixcXFwid2luZG93MFxcXCIpO1xcbiAgICAgICAgICAgIGxldCBodG1sID0gZXZhbChodGwpXFxuICAgICAgICAgICAgbGV0IGFyciA9IHBkZmEoaHRtbCwgXFxcIi5tZWRpYS1saXN0JiYubWVkaWEtYm9keVxcXCIpO1xcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoYXJyW2ldLCBcXFwiYSYmVGV4dFxcXCIpLnNtYWxsKCksXFxuICAgICAgICAgICAgICAgIGRlc2M6IHBkZmgoYXJyW2ldLCBcXFwiLnNlYXJjaC1pbmZvJiZUZXh0XFxcIiksXFxuICAgICAgICAgICAgICAgIHVybDogYmFzaWNVcmwgKyBwZGZoKGFycltpXSwgXFxcImEmJmhyZWZcXFwiKSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBkO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGZpbmRBbGlVcmwoaW5wdXQpIHtcXG4gICAgICAgICAgICBsZXQgaHRsID0gcGRmaChyZXF1ZXN0KGlucHV0KSwgXFxcInNjcmlwdCYmSHRtbFxcXCIpLnJlcGxhY2UoL2RvY3VtZW50LndyaXRlXFxcXCgoLio/KVxcXFwpXFxcXDsvLCBcXFwiJDFcXFwiKS5yZXBsYWNlKFxcXCJ3aW5kb3dcXFwiLCBcXFwid2luZG93MFxcXCIpO1xcbiAgICAgICAgICAgIGxldCBodG1sID0gcGRmaChldmFsKGh0bCksIFxcXCIuYnQtb3B0JiZhJiZocmVmXFxcIik7XFxuICAgICAgICAgICAgcmV0dXJuIGh0bWw7XFxuICAgICAgICAgICB9XFxuICAgIH0se1xcbiAgICAgICAgbmFtZTogXFxcIumbqOiKsemYgVxcXCIsXFxuICAgICAgICBwYWdlOiB0cnVlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIGxldCBiYXNpY1VybCA9IFxcXCJodHRwczovL3d3dy5peXVodWFnZS5vbmxpbmVcXFwiO1xcbiAgICAgICAgICAgIGxldCBhcGkgPSBcXFwiL3NlYXJjaC9cXFwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHMpICsgXFxcIi1cXFwiICsgcGFnZSArIFxcXCIuaHRtbFxcXCI7XFxuICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KGJhc2ljVXJsICsgYXBpKTtcXG4gICAgICAgICAgICBsZXQgYXJyID0gcGRmYShodG1sLCBcXFwiI2NvbnRlbnQmJi5zZWFyY2gtaXRlbVxcXCIpO1xcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoYXJyW2ldLCBcXFwiYSYmVGV4dFxcXCIpLnNtYWxsKCksXFxuICAgICAgICAgICAgICAgIGRlc2M6IHBkZmgoYXJyW2ldLCBcXFwiLml0ZW0tYmFyJiZUZXh0XFxcIiksXFxuICAgICAgICAgICAgICAgIHVybDogYmFzaWNVcmwgKyBwZGZoKGFycltpXSwgXFxcImEmJmhyZWZcXFwiKSxcXG4gICAgICAgICAgICAgICAgfSk7ICAgICAgICAgXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBkO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGZpbmRBbGlVcmwoaW5wdXQpIHtcXG4gICAgICAgICAgIHZhciBodG1sID0gcGRmaChyZXF1ZXN0KGlucHV0KSwgJyNjb250ZW50JiZpbnB1dCYmdmFsdWUnKTtcXG4gICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbDtcXG4gICAgICAgICAgIH1cXG4gICAgfSx7XFxuICAgICAgICAvL+awuOS5heWcsOWdgO+8mmh0dHBzOi8vd3d3LnpoYW9jaWxpLnh5ei9cXG4gICAgICAgIG5hbWU6IFxcXCLmib7no4HliptcXFwiLFxcbiAgICAgICAgcGFnZTogdHJ1ZSxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgICAgICBsZXQgYmFzaWNVcmwgPSBcXFwiaHR0cHM6Ly8xMDFidHNvdy52aXAvXFxcIjtcXG4gICAgICAgICAgICBsZXQgYXBpID0gXFxcInMucGhwP3E9XFxcIiArIGVuY29kZVVSSUNvbXBvbmVudChzKTtcXG4gICAgICAgICAgICBsZXQgdXJsID0gSlNPTi5wYXJzZShyZXF1ZXN0KGJhc2ljVXJsICsgYXBpLHtvbmx5SGVhZGVyczp0cnVlfSkpLnVybDtcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QodXJsLnJlcGxhY2UoJy5odG1sJywnXycrcGFnZSsnLmh0bWwnKSlcXG4gICAgICAgICAgICBsZXQgYXJyID0gcGRmYShodG1sLCBcXFwidGJvZHkmJnRyOmhhcyhhW3RpdGxlXSlcXFwiKTtcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7ICAgICAgIFxcbiAgICAgICAgICAgICB2YXIgdXJsbCA9IHBkZmgoYXJyW2ldLCBcXFwiYSYmaHJlZlxcXCIpOyAgICAgICAgXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGFycltpXSwgXFxcImEmJnRpdGxlXFxcIikuc21hbGwoKSxcXG4gICAgICAgICAgICAgICAgZGVzYzogcGRmaChhcnJbaV0sIFxcXCJUZXh0XFxcIikubWF0Y2goL1xcXFxkKyg/OlxcXFwuXFxcXGQrKT8oPzpcXFxccyspP1tnbWtiXSsuKj8oPzpcXFxcLVxcXFxkKykvaSlbMF0sXFxuICAgICAgICAgICAgICAgIHVybDogdXJsbC5zdGFydHNXaXRoKFxcXCJodHRwXFxcIik/dXJsbDogXFxcImh0dHBzOlxcXCIgKyB1cmxsLFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9LFxcbiAgICAgICAgZmluZEFsaVVybChpbnB1dCkge1xcbiAgICAgICAgICAgbGV0IGh0bWwgPSBwZGZoKGZldGNoKGlucHV0KSxcXFwiI2lucHV0LW1hZ25ldCYmdmFsdWVcXFwiKVxcbiAgICAgICAgICAgICAgICAgIHJldHVybiBodG1sO1xcbiAgICAgICAgICAgfVxcbiAgICB9LHtcXG4gICAgICAgIC8v5rC45LmF5Zyw5Z2A77yaaHR0cHM6Ly/no4HlipvmkJwueHl6LyBodHRwczovL+ejgeWKm+aQnC5jb20vICAgaHR0cHM6Ly9jbHNjbHMudG9wL1xcbiAgICAgICAgbmFtZTogXFxcIuejgeWKm+aQnFxcXCIsXFxuICAgICAgICBwYWdlOiB0cnVlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIGxldCBiYXNpY1VybCA9IFxcXCJodHRwczovL2NsczA3MS5idXp6XFxcIjtcXG4gICAgICAgICAgICBsZXQgYXBpID0gXFxcIi9zZWFyY2gtXFxcIiArIGVuY29kZVVSSUNvbXBvbmVudChzKSArIFxcXCItMC0wLVxcXCIgKyBwYWdlICsgXFxcIi5odG1sXFxcIjtcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoYmFzaWNVcmwgKyBhcGkpO1xcbiAgICAgICAgICAgIGxldCBhcnIgPSBwZGZhKGh0bWwsIFxcXCJib2R5JiYuc3Nib3hcXFwiKTtcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7ICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGFycltpXSwgXFxcIi50aXRsZSYmVGV4dFxcXCIpLnNtYWxsKCksXFxuICAgICAgICAgICAgICAgIGRlc2M6IHBkZmgoYXJyW2ldLCBcXFwiLnNiYXImJlRleHRcXFwiKS5tYXRjaCgvKOa3u+WKoOaXtumXtC4qPynmnIDov5EvKVsxXSxcXG4gICAgICAgICAgICAgICAgdXJsOiBwZGZoKGFycltpXSwgXFxcIi5zYmFyJiZhJiZocmVmXFxcIiksXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gZDtcXG4gICAgICAgIH0sXFxuICAgIH0se1xcbiAgICAgICAgbmFtZTogXFxcIuejgeWKm+eJh1xcXCIsXFxuICAgICAgICBwYWdlOiB0cnVlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIGxldCBiYXNpY1VybCA9IFxcXCJodHRwczovL20uYnRhcHAuY2NcXFwiO1xcbiAgICAgICAgICAgIGxldCBhcGkgPSBcXFwiL3NvLnBocD9wYWdlPVxcXCIgKyBwYWdlICsgXFxcIiZ3b3JkPVxcXCIgKyBlbmNvZGVVUklDb21wb25lbnQocyk7XFxuICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KGJhc2ljVXJsICsgYXBpKTtcXG4gICAgICAgICAgICBsZXQgYXJyID0gcGRmYShodG1sLCBcXFwidGJvZHkmJi5kZWZhdWx0OmhhcyhhW2hyZWZePS9dKVxcXCIpO1xcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoYXJyW2ldLCBcXFwiYSYmVGV4dFxcXCIpLnNtYWxsKCksXFxuICAgICAgICAgICAgICAgIGRlc2M6IHBkZmgoYXJyW2ldLCBcXFwiVGV4dFxcXCIpLm1hdGNoKC9cXFxcZCsoPzpcXFxcLlxcXFxkKyk/KD86XFxcXHMrKT9bZ21rYl0rLio/KD86XFxcXC1cXFxcZCtcXFxccykvaSlbMF0sXFxuICAgICAgICAgICAgICAgIHVybDogYmFzaWNVcmwgKyBwZGZoKGFycltpXSwgXFxcImEmJmhyZWZcXFwiKSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBkO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGZpbmRBbGlVcmwoaW5wdXQpIHtcXG4gICAgICAgICAgIHZhciBodG1sID0gcGRmaChyZXF1ZXN0KGlucHV0LCB7fSksICcjbWFnbmV0JiZ0aXRsZScpO1xcbiAgICAgICAgICAgICAgICAgIHJldHVybiBodG1sO1xcbiAgICAgICAgICAgfVxcbiAgICB9LHtcXG4gICAgICAgLy/msLjkuYXlnLDlnYDvvJpodHRwczovL2NpbGlkdW8ub3JnL1xcbiAgICAgICAgbmFtZTogXFxcIuejgeWKm+WkmlxcXCIsXFxuICAgICAgICBwYWdlOiB0cnVlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIGxldCBiYXNpY1VybCA9IFxcXCJodHRwczovL2RvYy5odG1jZG4uY29tOjM5OTg4XFxcIjtcXG4gICAgICAgICAgICBsZXQgYXBpID0gXFxcIi9zZWFyY2g/d29yZD1cXFwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHMpICsgXFxcIiZzb3J0PSZwYWdlPVxcXCIgK3BhZ2U7XFxuICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KGJhc2ljVXJsICsgYXBpLHtcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgUmVmZXJlcjogXFxcImh0dHBzOi8vZG9jLmh0bWNkbi5jb206Mzk5ODhcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBsZXQgYXJyID0gcGRmYShodG1sLCBcXFwiYm9keSYmLnNzYm94OmhhcyhhKVxcXCIpO1xcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoYXJyW2ldLCBcXFwiaDMmJlRleHRcXFwiKS5zbWFsbCgpLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBwZGZoKGFycltpXSwgXFxcIlRleHRcXFwiKS5tYXRjaCgv5re75Yqg5pe26Ze0LiovKVswXS5zcGxpdChcXFwi5paH5Lu25pWwXFxcIilbMF0sXFxuICAgICAgICAgICAgICAgIHVybDogcGRmaChhcnJbaV0sIFxcXCJhOm1hdGNoZXMo56OB5Yqb6ZO+5o6lKSYmaHJlZlxcXCIpLFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9XFxuICAgIH0se1xcbiAgICAgICAgLy/msLjkuYXlnLDlnYDvvJpodHRwczovL2hhaXR1dHUudmlwL1xcbiAgICAgICAgbmFtZTogXFxcIuejgeWKm+a1t1xcXCIsXFxuICAgICAgICBwYWdlOiB0cnVlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIGxldCBiYXNpY1VybCA9IFxcXCJodHRwczovL2MwbjRoamhxLnRvcFxcXCI7XFxuICAgICAgICAgICAgbGV0IGFwaSA9IFxcXCIvc2VhcmNoLVxcXCIgKyBlbmNvZGVVUklDb21wb25lbnQocykgKyBcXFwiLTAtMC1cXFwiICsgcGFnZSArIFxcXCIuaHRtbFxcXCI7XFxuICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KGJhc2ljVXJsICsgYXBpKTtcXG4gICAgICAgICAgICBsZXQgYXJyID0gcGRmYShodG1sLCBcXFwiLnNlYXJjaF9saXN0JiZkbFxcXCIpO1xcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoYXJyW2ldLCBcXFwiYSYmVGV4dFxcXCIpLnNtYWxsKCksXFxuICAgICAgICAgICAgICAgIGRlc2M6IHBkZmgoYXJyW2ldLCBcXFwiLmluZm8mJlRleHRcXFwiKS5tYXRjaCgvKOaUtuW9leaXtumXtC4qPynno4HlipsvKVsxXSxcXG4gICAgICAgICAgICAgICAgdXJsOiBwZGZoKGFycltpXSwgXFxcIi5pbmZvJiZhJiZocmVmXFxcIiksXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gZDtcXG4gICAgICAgIH0sXFxuICAgIH0se1xcbiAgICAgICAgbmFtZTogXFxcIuejgeWKm+mFt1xcXCIsXFxuICAgICAgICBwYWdlOiB0cnVlLFxcbiAgICAgICAgZmluZChzLCBwYWdlKSB7XFxuICAgICAgICAgICAgbGV0IHVybCA9IFxcXCJodHRwczovL2NpbGlrdS5uZXQvdG9TZWFyY2hcXFwiO1xcbiAgICAgICAgICAgIGxldCBqc29uID0gcG9zdCh1cmwsIHtcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luOiBcXFwiaHR0cHM6Ly9jaWxpa3UubmV0XFxcIixcXG4gICAgICAgICAgICAgICAgICAgIFJlZmVyZXI6IFxcXCJodHRwczovL2NpbGlrdS5uZXQvXFxcIixcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgYm9keToge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcImtleXdvcmRcXFwiOiBzLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcInBhZ2VcXFwiOiBwYWdlLTEsXFxuICAgICAgICAgICAgICAgICAgICBcXFwic2l6ZVxcXCI6IDE1XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBqc29uID0gSlNPTi5wYXJzZShqc29uKTtcXG4gICAgICAgICAgICBsZXQgbGlzdCA9IGpzb24uZGF0YS5jb250ZW50O1xcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgZnVuY3Rpb24gZm9ybWF0RmlsZVNpemUoc2l6ZSkge1xcbiAgICAgICAgICAgICAgICAgIGlmIChzaXplID09PSAwKSByZXR1cm4gJzAgQnl0ZXMnO1xcbiAgICAgICAgICAgICAgICAgIHZhciB1bml0cyA9IFsnQnl0ZXMnLCAnS0InLCAnTUInLCAnR0InLCAnVEInXTtcXG4gICAgICAgICAgICAgICAgICB2YXIgaSA9IE1hdGguZmxvb3IoTWF0aC5sb2coc2l6ZSkgLyBNYXRoLmxvZygxMDI0KSk7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGAkeyhzaXplIC8gTWF0aC5wb3coMTAyNCwgaSkpLnRvRml4ZWQoMil9ICR7dW5pdHNbaV19YDtcXG59XFxuICAgICAgICAgICBmb3IgKGxldCBpdCBvZiBsaXN0KSB7XFxuICAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKGl0LnRpbWVzdGFtcCk7XFxuICAgICB2YXIgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcXG4gICAgIHZhciBtb250aCA9IGRhdGUuZ2V0TW9udGgoKSArIDE7XFxuICAgICB2YXIgZGF5ID0gZGF0ZS5nZXREYXRlKCk7XFxuICAgICB2YXIgZm9ybWF0dGVkRGF0ZSA9IGAke3llYXJ9LSR7bW9udGggPCAxMCA/ICcwJyArIG1vbnRoIDogbW9udGh9LSR7ZGF5IDwgMTAgPyAnMCcgKyBkYXkgOiBkYXl9YDtcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpdC5uYW1lLnNtYWxsKCksXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJtYWduZXQ6P3h0PXVybjpidGloOlxcXCIgKyBpdC5idGloLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcIuaWh+S7tuWkp+Wwj++8mlxcXCIgKyBmb3JtYXRGaWxlU2l6ZShpdC5zaXplKSArIFxcXCJcXFxcdFxcXFx05pS25b2V5pe26Ze077yaXFxcIiArIGZvcm1hdHRlZERhdGUsXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9XFxuICAgIH0se1xcbiAgICAgICAgLy/msLjkuYXlnLDlnYDvvJpodHRwczovL2J0Zm94Lm9uZS9cXG4gICAgICAgIG5hbWU6IFxcXCLno4Hlipvni5BcXFwiLFxcbiAgICAgICAgcGFnZTogdHJ1ZSxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgICAgICBsZXQgYmFzaWNVcmwgPSBcXFwiaHR0cHM6Ly9jYWNoZS5mb3hzLnRvcFxcXCI7XFxuICAgICAgICAgICAgbGV0IGFwaSA9IFxcXCIvc2VhcmNoP3dvcmQ9XFxcIiArIGVuY29kZVVSSUNvbXBvbmVudChzKSArIFxcXCImcGFnZT1cXFwiICsgcGFnZTtcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoYmFzaWNVcmwgKyBhcGkse1xcbiAgICAgICAgICAgIGhlYWRlcnM6e1xcbiAgICAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICAgIFJlZmVyZXI6IFxcXCJodHRwczovL2NhY2hlLmZveHMudG9wXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGxldCBhcnIgPSBwZGZhKGh0bWwsIFxcXCJib2R5JiYuc2VhcmNoLWJveFxcXCIpO1xcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoYXJyW2ldLCBcXFwiYSYmVGV4dFxcXCIpLnNtYWxsKCksXFxuICAgICAgICAgICAgICAgIGRlc2M6IHBkZmgoYXJyW2ldLCBcXFwiLmxheXVpLXNob3cmJlRleHRcXFwiKSxcXG4gICAgICAgICAgICAgICAgdXJsOiBiYXNpY1VybCArIHBkZmgoYXJyW2ldLCBcXFwiYSYmaHJlZlxcXCIpLFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9LFxcbiAgICAgICAgZmluZEFsaVVybChpbnB1dCkge1xcbiAgICAgICAgICAgdmFyIGh0bWwgPSBwZGZoKHJlcXVlc3QoaW5wdXQse1xcbiAgICAgICAgICAgIGhlYWRlcnM6eyAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICBSZWZlcmVyOiBcXFwiaHR0cHM6Ly9jYWNoZS5mb3hzLnRvcFxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICB9KSwgJyNsaW5rLXVybCYmYSYmaHJlZicpO1xcbiAgICAgICAgICAgICAgICAgIHJldHVybiBodG1sO1xcbiAgICAgICAgICAgfVxcbiAgICB9LHtcXG4gICAgICAgIC8v5rC45LmF5Zyw5Z2A77yaaHR0cHM6Ly9jbGdvdS5jeW91LyBodHRwczovL+mtlOazleeMq+WSqi5sb2wvXFxuICAgICAgICBuYW1lOiBcXFwi56OB5Yqb54uX54yrXFxcIixcXG4gICAgICAgIHBhZ2U6IHRydWUsXFxuICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxuICAgICAgICAgICAgbGV0IGJhc2ljVXJsID0gXFxcImh0dHBzOi8vY2xnMTYyLmJ1enpcXFwiO1xcbiAgICAgICAgICAgIGxldCBhcGkgPSBcXFwiL3NlYXJjaC1cXFwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHMpICsgXFxcIi0wLTAtXFxcIiArIHBhZ2UgKyBcXFwiLmh0bWxcXFwiO1xcbiAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdChiYXNpY1VybCArIGFwaSk7XFxuICAgICAgICAgICAgbGV0IGFyciA9IHBkZmEoaHRtbCwgXFxcImJvZHkmJi5zc2JveFxcXCIpO1xcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoYXJyW2ldLCBcXFwiLnRpdGxlJiZUZXh0XFxcIikuc21hbGwoKSxcXG4gICAgICAgICAgICAgICAgZGVzYzogcGRmaChhcnJbaV0sIFxcXCIuc2JhciYmVGV4dFxcXCIpLm1hdGNoKC8o5re75Yqg5pe26Ze0Lio/KeacgOi/kS8pWzFdLFxcbiAgICAgICAgICAgICAgICB1cmw6IHBkZmgoYXJyW2ldLCBcXFwiLnNiYXImJmEmJmhyZWZcXFwiKSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBkO1xcbiAgICAgICAgfSxcXG4gICAgfSx7XFxuICAgICAgICAvL+WPkeW4g+WcsOWdgO+8mmh0dHA6Ly9mYi5jaWxpZ291ZmFidXllMS54eXo6MTIzNC9cXG4gICAgICAgIG5hbWU6IFxcXCLno4HlipvnjKvni5dcXFwiLFxcbiAgICAgICAgcGFnZTogdHJ1ZSxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG5cXHQgICAgICAgICAgIHZhciB3b3JkMTExPSBzXFxyXFxuXFx0ICAgICAgICAgICB2YXIgZW5jb2RlYmVmb3JlID0gYmFzZTY0RW5jb2RlKHdvcmQxMTEpOyBcXHJcXG4gICAgICAgICAgICBcXHRlbmNvZGViZWZvcmU9ICdWamR3d1cyOScrZW5jb2RlYmVmb3JlKydOamR3d1cyNCc7IFxcclxcblxcdFxcdCAgICAgICAgICB2YXIgZW5jb2RlYmVmb3JlMTExMSA9ZW5jb2RlYmVmb3JlLnJlcGxhY2UoL1xcXFwrL2csIFxcXCJqR1lYV2d4MTNcXFwiKTsgXFxyXFxuICAgICAgICAgICAgbWQ1cHdkID0gZW5jb2RlYmVmb3JlMTExMTtcXG4gICAgICAgICAgICBsZXQgYmFzaWNVcmwgPSBcXFwiaHR0cHM6Ly9jbG0xLmNsbWFwcDEueHl6XFxcIjtcXG4gICAgICAgICAgICBsZXQgYXBpID0gXFxcIi9jbGxqLnBocD9uYW1lPVxcXCIgKyBtZDVwd2QgKyBcXFwiJnNvcnQ9JnBhZ2U9XFxcIiArIHBhZ2U7XFxuICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KGJhc2ljVXJsICsgYXBpKTtcXG4gICAgICAgICAgICBsZXQgYXJyID0gcGRmYShodG1sLCBcXFwiI1NlYXJjaF9saXN0X3dyYXBwZXImJmxpOmhhcyguU2VhcmNoX2xpc3RfaW5mbylcXFwiKTtcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7ICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGFycltpXSwgXFxcImEmJlRleHRcXFwiKS5zbWFsbCgpLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBwZGZoKGFycltpXSwgXFxcIi5TZWFyY2hfbGlzdF9pbmZvJiZUZXh0XFxcIikubWF0Y2goLyjlpKflsI8uKj8p54Ot5bqmLylbMV0sXFxuICAgICAgICAgICAgICAgIHVybDogYmFzaWNVcmwgKyBwZGZoKGFycltpXSwgXFxcImEmJmhyZWZcXFwiKSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfSAgICAgICAgICAgIFxcbiAgICAgICAgICAgIHJldHVybiBkO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGZpbmRBbGlVcmwoaW5wdXQpIHtcXG4gICAgICAgICAgIHZhciBodG1sID0gcGRmaChyZXF1ZXN0KGlucHV0KSwgJyNJbmZvcm1hdGlvbl9jb3B5X3RleHQmJnZhbHVlJyk7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0bWw7XFxuICAgICAgICAgICB9XFxuICAgIH0se1xcbiAgICAgICAgbmFtZTogXFxcIuejgeWKm+icmOibm1xcXCIsXFxuICAgICAgICBwYWdlOiB0cnVlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIGxldCBiYXNpY1VybCA9IFxcXCJodHRwOi8vd3d3LmJ0bW92aS52aW5cXFwiO1xcbiAgICAgICAgICAgIGxldCBhcGkgPSBcXFwiL3NvL1xcXCIgKyBlbmNvZGVVUklDb21wb25lbnQocykgKyBcXFwiX3JlbF9cXFwiICsgcGFnZSArIFxcXCIuaHRtbFxcXCI7XFxuICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KGJhc2ljVXJsICsgYXBpKTtcXG4gICAgICAgICAgICBsZXQgYXJyID0gcGRmYShodG1sLCBcXFwiYm9keSYmLnNlYXJjaC1pdGVtXFxcIik7XFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgeyAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChhcnJbaV0sIFxcXCJhJiZUZXh0XFxcIikuc21hbGwoKSxcXG4gICAgICAgICAgICAgICAgZGVzYzogcGRmaChhcnJbaV0sIFxcXCIuaXRlbS1iYXImJlRleHRcXFwiKSxcXG4gICAgICAgICAgICAgICAgdXJsOiBiYXNpY1VybCArIHBkZmgoYXJyW2ldLCBcXFwiYSYmaHJlZlxcXCIpLFxcbiAgICAgICAgICAgICAgICB9KTsgICAgICAgICBcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9LFxcbiAgICAgICAgZmluZEFsaVVybChpbnB1dCkge1xcbiAgICAgICAgICAgdmFyIGh0bWwgPSBwZGZoKHJlcXVlc3QoaW5wdXQpLCAnI21fbGluayYmdmFsdWUnKTtcXG4gICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbDtcXG4gICAgICAgICAgIH1cXG4gICAgfSx7XFxuICAgICAgICBuYW1lOiBcXFwi5peg5p6B56OB6ZO+XFxcIixcXG4gICAgICAgIHBhZ2U6IGZhbHNlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIGxldCBiYXNpY1VybCA9IFxcXCJodHRwczovLzBjaWxpLnRvcFxcXCI7XFxuICAgICAgICAgICAgbGV0IGFwaSA9IFxcXCIvc2VhcmNoP3E9XFxcIiArIGVuY29kZVVSSUNvbXBvbmVudChzKTtcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoYmFzaWNVcmwgKyBhcGkpO1xcbiAgICAgICAgICAgIGxldCBhcnIgPSBwZGZhKGh0bWwsIFxcXCJ0YWJsZSYmdHJcXFwiKTtcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7ICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGFycltpXSwgXFxcInAmJlRleHRcXFwiKS5zbWFsbCgpLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBwZGZoKGFycltpXSwgXFxcIlRleHRcXFwiKS5tYXRjaCgvXFxcXGQrKFxcXFwuP1xcXFxkKyk/W2dta2JdKy9pKVswXSxcXG4gICAgICAgICAgICAgICAgdXJsOiBiYXNpY1VybCArIHBkZmgoYXJyW2ldLCBcXFwiYSYmaHJlZlxcXCIpLFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9LFxcbiAgICAgICAgZmluZEFsaVVybChpbnB1dCkge1xcbiAgICAgICAgICAgdmFyIGh0bWwgPSBwZGZoKHJlcXVlc3QoaW5wdXQpLCAnLm1hZ25ldC1ib3gmJmlucHV0JiZ2YWx1ZScpO1xcbiAgICAgICAgICAgICAgICAgIHJldHVybiBodG1sO1xcbiAgICAgICAgICAgfVxcbiAgICB9LHtcXG4gICAgICAgIG5hbWU6IFxcXCJVM0MzXFxcIixcXG4gICAgICAgIHBhZ2U6IHRydWUsXFxuICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxuICAgICAgICAgICAgbGV0IGJhc2ljVXJsID0gXFxcImh0dHBzOi8vYS51M2MzLmxpZmVcXFwiO1xcbiAgICAgICAgICAgIGxldCBhcGkgPSBcXFwiLz9wPVxcXCIgKyBwYWdlICsgXFxcIiZzZWFyY2gyPWVlbGphM2xmZWEmc2VhcmNoPVxcXCIgKyBlbmNvZGVVUklDb21wb25lbnQocyk7XFxuICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KGJhc2ljVXJsICsgYXBpKTtcXG4gICAgICAgICAgICBsZXQgYXJyID0gcGRmYShodG1sLCBcXFwidGJvZHkmJi5kZWZhdWx0XFxcIik7XFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgeyAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChhcnJbaV0sIFxcXCJhLDEmJnRpdGxlXFxcIikuc21hbGwoKSxcXG4gICAgICAgICAgICAgICAgZGVzYzogcGRmaChhcnJbaV0sIFxcXCJUZXh0XFxcIikubWF0Y2goLyhcXFxcZCsoPzpcXFxcLlxcXFxkKyk/W2dta2JdKy4qPynmmpfnvZEvaSlbMV0sXFxuICAgICAgICAgICAgICAgIHVybDogcGRmaChhcnJbaV0sIFxcXCJhLDMmJmhyZWZcXFwiKSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBkO1xcbiAgICAgICAgfSxcXG4gICAgfSx7XFxuICAgICAgICBuYW1lOiBcXFwiVTlBOVxcXCIsXFxuICAgICAgICBwYWdlOiB0cnVlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIGxldCBiYXNpY1VybCA9IFxcXCJodHRwczovL3U5YTkub25lXFxcIjtcXG4gICAgICAgICAgICBsZXQgYXBpID0gXFxcIi8/dHlwZT0yJnNlYXJjaD1cXFwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHMpICsgXFxcIiZwPVxcXCIgKyBwYWdlO1xcbiAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdChiYXNpY1VybCArIGFwaSk7XFxuICAgICAgICAgICAgbGV0IGFyciA9IHBkZmEoaHRtbCwgXFxcInRhYmxlJiYuZGVmYXVsdFxcXCIpO1xcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoYXJyW2ldLCBcXFwiYSYmdGl0bGVcXFwiKS5zbWFsbCgpLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBwZGZoKGFycltpXSwgXFxcIlRleHRcXFwiKS5tYXRjaCgvXFxcXGQrKFxcXFwuP1xcXFxkKyk/XFxcXHNbZ21rYl0rLiovaSlbMF0sXFxuICAgICAgICAgICAgICAgIHVybDogcGRmaChhcnJbaV0sIFxcXCJhLDImJmhyZWZcXFwiKSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBkO1xcbiAgICAgICAgfSxcXG4gICAgfSx7XFxuICAgICAgICBuYW1lOiBcXFwiVG9ycmVudCBLaXR0eVxcXCIsXFxuICAgICAgICBwYWdlOiB0cnVlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIGxldCBiYXNpY1VybCA9IFxcXCJodHRwczovL2NuLnRvcnJlbnRraXR0eS5pbmtcXFwiO1xcbiAgICAgICAgICAgIGxldCBhcGkgPSBcXFwiL3NlYXJjaC9cXFwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHMpICsgXFxcIi9cXFwiICsgcGFnZTtcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoYmFzaWNVcmwgKyBhcGkpO1xcbiAgICAgICAgICAgIGxldCBhcnIgPSBwZGZhKGh0bWwsIFxcXCIjYXJjaGl2ZVJlc3VsdCYmdHI6aGFzKGEpXFxcIik7XFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgeyAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChhcnJbaV0sIFxcXCJUZXh0XFxcIikubWF0Y2goLyguKj8pXFxcXGQrKD86XFxcXC5cXFxcZCspP1xcXFxzKz9bZ21rYl0rL2kpWzFdLnNtYWxsKCksXFxuICAgICAgICAgICAgICAgIGRlc2M6IHBkZmgoYXJyW2ldLCBcXFwiVGV4dFxcXCIpLm1hdGNoKC8oXFxcXGQrKD86XFxcXC5cXFxcZCspP1xcXFxzKz9bZ21rYl0rLio/KeivpuaDhS9pKVsxXSxcXG4gICAgICAgICAgICAgICAgdXJsOiBwZGZoKGFycltpXSwgXFxcImEsMSYmaHJlZlxcXCIpLFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9LFxcbiAgICB9XFxuXTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIueVquWPt+WMuemFjVwiLFwicGF0aFwiOlwiY29kZXRlc3RcIixcInJ1bGVcIjpcImpzOlxcbmxldCBtYXRjaFJlZyA9IC9bYS16QS1aMC05XSsoXFxcXC18XFxcXF98XFxcXHMpXFxcXGQrLztcXG5sZXQgbWF0Y2hSZWdHID0gL1thLXpBLVowLTldKyhcXFxcLXxcXFxcX3xcXFxccylcXFxcZCsvZztcXG5sZXQgdGVzdFJlZyA9IC9cXFxcLXxcXFxcX3xcXFxccy87XFxuJC5leHBvcnRzID0ge1xcbiAgICBtYXRjaENvZGUodGV4dCwgaXNHKSB7XFxuICAgICAgICBpZiAoaXNHKSB7XFxuICAgICAgICAgICAgbGV0IHVybCA9IHRleHQubWF0Y2gobWF0Y2hSZWdHKTtcXG4gICAgICAgICAgICBpZiAodXJsKSByZXR1cm4gdXJsO1xcbiAgICAgICAgICAgIGVsc2UgcmV0dXJuIFtdO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBsZXQgdXJsID0gdGV4dC5tYXRjaChtYXRjaFJlZyk7XFxuICAgICAgICAgICAgcmV0dXJuIHVybCA9IHVybCAmJiB1cmxbMF0gfHwgXFxcIlxcXCI7XFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIHRlc3QodGV4dCl7XFxuICAgICAgICByZXR1cm4gdGVzdFJlZy50ZXN0KHRleHQpO1xcbiAgICB9XFxufVxcblwifV0iLCJpY29uIjoiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFJQUFBQUNBQ0FZQUFBRERQbUhMQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQVZRRWxFUVZSNG5PMmRDMXhUVjU3SHJkVk8xOXJIN2s3YmJUK3puL2F6KzVseHQ5MEprQVJJQUUwZ0VkOG9JM253RUcxVkpBRmx0QTgvMjUyZE91M3NqRzFuWjhlMXp0YldpZ1FmVTE4ZFVTc0M4bERSQWdaNWhmQVVCQXdodkFRTStJSzc1MFNpTnpjM3liM0p2WmQ3YmU3SC93Zkk0M2YrT2QvZlBmZWNjOCtKMCtSeTZWTWdab0tZNXMwQjN6ZjUvcWRRNGRmamloNm5rL2ZyK2E3SDZlVDllclRwTVZxWVg0OWRlb3dXNXRkamx4NmpoZm4xMktYSGFHRitQWGJwTVZxWVg0OWRlb3dXNXRkamx4NmpoZm4xMktmSGFHRitQZmJwY1RwNXY1N3ZlcHhPM3EvbnV4Nm5rL2ZyK2E3SDZlVDllcjdyY1RwNXZ4NEZlcHhPbnVDQklNakQzaTRiODV0U1BVNG43K0dBNEMyV3ZveWVudDVCOEZOMy9mcjFsOW1VSHl2ME9KMjhtOE5zN3BNRDhBWUFIb0VCZmtkTXB1NlI5dmFPajNmcytKOW5wem8vMXVoeE9ubWNvNmVuNTJjQS9pazcrRWZ3emNpTkc5MzJhRzVydTY1K0hENnZ6M3FjVGg1MUFQQ3pBZWh0QVBodEQvQnRmOFBIZTNyNnpvSDNCWER4ODFLbXgrbmtwOW11ODA4QWtNa0F0aGtOM2hOODFHdkdZZi9BYkRhL3pJWFBTN2tlbDVQdjdlME50bGg2TDJQQkU0V1BpUkhZZ2pRMk52NklyWitYU1QxR0N5T3JCOEMvQ3M5YUFHeUNJdmlvOS9ZMVdTejlDalo5WHFiMUdDMk1qQjVvN3A5Nk1LenJHM1lOMEh2NEdDT2NNNXNIZUd5SDlZT0IzNko0TzZPOVROL2xIaG8xOE8xaE5sdnVkM2JlK09MY3VVdXZzQkhXRHdMK21FejFzMUdaNnZTWVhJVU1MRXlZcU43Nm01YnVHOTMzNllhUDF1dnFNZzIydDNkOHNHdlg1N1BaQXV1eGh6OG9XZjdDbUV5NUhjQy9BK0dqbzJ0NThsajlnU090VE1DM1IyZG5sOTVvTkw3TGxmcWo3R0E2ZVdUYXRDZEdaY3JrTWJuU2pBV1BqU2JGdXNIVzB2SnVPdUdEczcrdG9hSHhjazFORFFMaXQyeXZQMG9QcHBPM3l0VkMwT1JmOWdUZUhxTnlKVEl3WDQzb05lKzFkelJkRzZXNDJiL1YzTnhhVWxsWmVSdkNyNjJ0SlcwQXRzTjMrejRtazcrMUlQRVZBSE0zT1BQSHljQWZSb1ZwVWNKOS9VZWZOWFdiekxoRFE2THdBZmp4OXZicnBkWFZWWmFyVjY4aWR2aGtEY0FGK1BEOVU1cDhSL0NhbWJmbHFneXJURGxFRkR3ZWZIdkF4OXRpM3hwcFBKM2I3aDM4TGtOTlRhMEJnc2ZDSjJNQXJzQ0hPbE9XL0MyWlFtNlZxd3hrd0h1Qy8rZzFLc1NZb09tNVhtM29Kd0svcTZ2YjFOallXQXFhK3dsWDhJa2FnRXZ3blF6QVJQSnRjc1cvV3VXS2syVEJFNFdQam9FRkNSTTFXMzdWYXU0eTNYRUIzOXJTY3Eya3FxcHExQTdlRlh3aUJ1QWFmQWNEMEYzWVdYbnMzdzdLRkIrQjV2NDJFL0RSWVZxYWROZndSV1lqQ3Z6RWpSdW1TOVhWTlYxbzhPN2dleklBRitFLzdBUFFXVmhTV09pUExMS1ZhNGRsQ2hNUldGVERkeGcyS3RjTnRGeTRyQWZEdWxvc2VFL3czUm1BcS9CdGVuUVcxaGExTW5SSXJyamtEU3lxNFE4dVRFQ3VMbzFIQ3RMZWEvSUd2aXNEY0JyKzVBc29MK3lpYk1rL0RNZ1ZPNGRreXZ0VERkODZYNDNVeGlRaGRVSTVVaDhnUmM1b3RqUjdBeC9QQUp5SFAva2l5Z3I3TWlKMlZyOWNzV1ZJcnJ6cDdabEtKZnhyTWF1UXFubkxFQ01BRCtIWDRoaUFLSHlzQVI0TCtKTXZwS1F3czF3WmZWT3VNUGpTVEZNRnYzY3hhTzRYcVd6ZzBmQ3hCaUFESDIyQXh3Yis1SXQ5S213NFV2blBOMldLSEYrdjBWVEFINDZPUnlxWHIwSU1Bamt1ZkxRQnlNSzNHK0N4Z2ovNUJxOEtReVNTR1FCS3hwQk1jWXNOOEp0QmMxOGR2dmdoZUR6NGRnTjRBeDlHZFhYMWJ4OHIrUFkza1QzdVJDc0RSbVdLQ2lwNjU3N0NOeTFKUWlybnh6bUFkd1VmUnA3Mm5XWnY0RVBUVkZSVS9PNnhndS9OTVNwVGJiSEtsZmVtR2o0YzFsVXVTMFRxZ3lJSnc0ZVA1NmU5UzlvQUVENjhiQUFEL0o2TnNCaUJqMGhXUHcwcWZoOVY0M0p2NGR2bStVRnpYeE82d0FtOEovaEdMd3hnaDQ4eEFHdGdNUUovZUtIaXhUR1o2dXBVdzcrK2JCV2lqMXlCQzU0SWZMSUdRTU5IR1dES1lQWDI5ajVMcFI2aFkyUiswa3Znckt1WlV2Z3lWWDk3Wkd4emZSQStlS0x3eVJnQUMzL1NBTCtiQ3Zod2t5dUFuMkt4OVBhQytMNjd1eStVbVROL1h2eVA0UzNicVlJUC9yNTdjOTZLb29ZQTZaQXI4R1RnRXpVQUhud1ljQlRnVFQzNkFndHVjZ1hRYXpHcmxjZTd1a3o3TDF3NC94UDZydmtmZmpnZGRQaHlwd3IrU0pUaWFxdEEzdXdPUEZuNFJBemdDajdUYXdMaEp0ZWVucjZUZEs5V2RubU15WldmVGcxOHBja2tYbkxSRTNodjRIc3lnRHY0ZVBjQ1BCM2V3QjhjSEh3QmdONXV3V3h5ZGJmNjJXenViYlJZTEV2SU1uYVp4NmhjSVFGRHZRa200WVBXeHRvL2QzbGVZMERrQ0YzdzNSbkFFM3dRNXcwR3c1dGtLcGNNZkhDZG56NjV5YldINkZKMTV3V3d2Zm1nci9BR21meWNFNUZJWmxobHlsb200WTlFeFZVMDhXV0V6bnBmNExzeWdJZG12eE84SmhudVFxWUxQb0FtQmZDcXlPeFRjTFg2R1R4MkY3UUlPd1lHQnA0bmtwL1RrMWFaWWlOVDhPR21qMjd4MHZNMnFEeHBHZDN3OFF6Z0JyNFZQTCs5cnE1dU5sSHdaT0gzOS9mL0k0Q21JN3RKaGRqU2Qwc2YrSmNCalB1a3Uvd2NFcnFZbmpaOVNLNW9aUWErMHRvZXZLRG1JVmdDQnZBVlB0WUFlUERod2xEdytHSFEzTDlHQmp3WitOM2QzYzlNZnBuRkdEM3cwUnA5K3A2ZWdRaFgrVGtrYjVISHhUQUNYNjY2QitEWE84RDFZQUFxNEtNTmdIL21WK3JCVUMrQ0xIaWk4Q1VmRnMySWVlLzBaMVgxcmQxa2R5ajVzdWtGcm9FRWw0WDlsWlg2MTdINU9TUi9VNjQ4eU1RMTN4eStyTUlKc0JzRFVBWGZiZ0FzZkZBeHB2THljczNGaXhlbTB3VS9URk1jS2RhVzFJalRTcENvVGQ5TmZMd3JwN2E3dStjZTNmQXhlbGI0SlZtN2QvL2Zjdy96UXljUG12OU91dUhma2luYkcvQWd1ekFBbGZCaHdMdUJxT2IrenBVclYzWWVPM2IwNyttYTRRdEpML3FKS0sxRUI4RmpZOW5tYjYzZm5pbXRad2krYmRkVFEwUGpCYjFlbi9idzg5cVRiNUlwNWpBeHpqZUZMRGJpZ3NZeEFOWHcwV3NDQWZoVCtmbDVjM3laUVhNSFg1QnlaUmFBdkUyc0xSN0ZnMitQc0xRaVJQbitVWE5sVFZNWG5mRGIydG9Od1BEMlhVK2IwUi9DbG5pM0xHNGgzZkRoM3IrR29NaHhJZ2FnQTc1dFBjRDZqQXVscGFYemZaMCtkUWRmcENsZUJ1QzJ1UU9QRFVuNjJRbnRSMzlwYW1sdEg2RVMvdlhybmFicTZwcUh1NTdnNVEvMGM1d05ZSkd2aktkOWJsK211T0VTRU1vQU5NRWZxT1JKdC94NlVmVGYwQVZmbkZid0w2RnB4V2ZKZ0xlRnRoaEVJWWh6aUR3OTUrNmY5cDZwQWMzMWhDL3c0ZlcrcnM1UUFxQ1BZaWUxOEF3dzB4cWwyRUFuZk52MVB6S3UxWk1CcUladkNKQ01Wd2RJOTM4bmpIaVZ6Rnc4R2ZqelZtZTlKTklXN3hCcFMrNzVBaDhkTVp1UEQrVVdYV2tnQzk5c3RrdzBON2RjQm1kOEYzWlNDN1cwemNFQXRzb1lrc1N0b3hNK0RHQ3libmNHb0J3K1QxcCtPVkFhVG5SR2ppeDhZV3o2MDZLVTNMZEVtaUlMYWZBdTRSYytlQnc4SDVGV2lDUi9jTFNqc2JuZFFnUitaMmRYL2RXclZVNjduckJySUxFR3NQM3NtN3RzRFozdzdYMkF4a0RuSlZ5VHNNb29nOCtUbXVwNDB1VFZZU0ZQMFFWZnZQNjBUSlJhVUcySFJUVjhkRVJ0ekIzZitvZmpCakJzZExwQkJNTmtzcGlOUnVONWNOYVBFOW4wNG1BQSs5RVVJazhmbGFzbTZJSnZqNDZRaGJqWDZHcHd0dm9NbnllOVd4OGcyVkVWc3VBNWJETk5GZnl3TmRtdml6VDUrd0d3Q1NiZ28yTlJSczVZNXVIQ0t0UzEvZzc4RmhNQWRKak1kamRjQTRDSzIzd3JTdGxNSjN3WVE1S1ZpREhRdVhlT05ZQVg4UFByQXFQZUlEb2RTeGIrM09UL2ZsNmNtcmROckNtd0VvRkZOWHowc0RIKy9TUGRsOHVyenRmVjFYVVF1SXRKM0FEOWtoWG42WVJ2anh1aGk1eDYrMmdEa0lFUDhtNXBDSlFvc0djcWxmQkZLYWRqeGFrRjE4akNvaHErclJYWWRBS0pYcCtKL09xenc0M2V3SGRyZ0JaQjlEVzY0VS8yQlpBV2dkeWh1YmNiZ0RCOG5zUnFESkJzYTN0TjhqUmQ4TVBYNXJ3Snp2aGNiMkZSQ1YrMk1SZUowV1lpd1FsWmlDQmVoL3pIcDk4MGVydkwyYVVCWU1YZWlsTFUwZ25mcmpjVXBVQWFoVElIQTVBNDgwOGFnaUpmUThPaUVyNGtQZmNGVVdyK3B3RCtuYW1HRDBjQ01ac09JZUtrVEJ0NFc2aXprQTgrT2VSa0FLSTdudHdhb0ROMDRWVzY0ZHMxYnNvVVNHdEl0TTBBQmlLM2czbFNZMzNndlBuWU01VXkrQjhpMDBXcGhja2liVUdQTDgwME5mQ0xrU1VaeHhIWldoVDRTZmdDZFNieXdmYURqZDdBOTJnQUdNUFNPRDNkOE5GaGlZaEJhb01YVmJ1QlAyRDh1VFNqU0NLWlFSZDhVZnI1Y0xHbVNPL3JOWm9LK05HYlRpSEx0SHNSSVJvOENqN1dBR1QzT3RvTjRGQlBhQU8wQk1tNnJITGxLQlB3V3hlc1JqWW43VWFrcVhuajI1ZHRRL1NDUmVnT0hyeHZvR3NLREg4UkM0d3ErT0hwRndKRWFVVi9wYUtENWl0OHljWUNKR1pqTmhLYXVNOFJQQVkrMmdEZWJIU0ZCckRYSDY0QjRMVzRUYlJZVHlmOFhua0M4cWU0M3lOU1RZRmpKWUMvdDhiOUVUa2tUV2tvRnk0T3c0UG1LM3hCU3Y3ekltMVJ2RWhiZkk2cTNybHY4SXVSbUl4dkVNbGJtYzdnY2VEYkRBRDZBTjd1Y29aM0ErMzE1MlFBOU5ETVBHOTVLUjN3ajhXOGh5eFpuK094SWtWcHhRTmlUY21CMFBRU1ZlaUdvdGVuVFVPZThBYStJT1hLekhEdGhUZEYycEowc2JZa0gxVDRYYXA2NTc3Q1g1aVJneXplOERVK2VCZndZY0JSZ0Rmd29Xbkt5OHZldGRlZGd3R3djL0YxUE9tOS9zaVZsVlRCTDF1Y09yQjZUWmJYbFF2TzJtSFFNeThUcCtaOWJadVVTYzNkSWs0OXMwNnNLWTRMMDVSRWk5T0xGV0hhb3ZWQS94MEEramNpVGZFaDJ5b2NiZkVkYWp0b3ZzT1AzSmlIckVqUHdtL3VQY0NIajhONUFHL2d3OHRHV1JtT0FlcUFBVnpNeGQ4ZmpveXI4QVYrNS96a29hMkpPL3ZEWVhNL2haTW9yTkRURm84dnpUaU1SS3h5MGR3VGdBK2ZKMnNBOUtRUnlnQ1AxZ1JXQmtyZWRUVVgzeEFRZVJlWW9Kd3MvQUc1K3Q2dXVJL2JaQnRPVFhBU0ZzVjZvTTlSR3I3bVFKZGI4QVRna3pVQWRzWncwZ0NPYXdLeEJzQk95b0MvSjNyQ1k0bzlmYU8zSGY1M01lKzBybGg3NUI1WFlWR3BCL295cmNMVjN4NFJ4R2Zkb1FJK0dRUGdUUmRQOWdFZTlxaHRIU3EwQWR6TnlIV0VMQ29mbGF0dXVvTGZGUDIyUlp2MDVTQlhZVkdwQnpxZHQwSlR6bjRMd1BkNEJFOENQbEVEdUxwWGdMc20wRzRBSXRPeHpYeVplU1JxcGNPTVliODgzdnF4K285ZGN6Vm5PUW1MV3IzaWlWQk5ZYjR3NmFDZUVIaVM4SWtZd04yTkl0dzFnZEFBWkcvQmRvb1dYN0xLVlAySFl2K3plY0c2RStQY2hFV3hucWFvUnJENnlCR0JXamRPRjN4UEJuRHovUVlUNFBrRFJxUHhWYXdCWnRhaEpvTEl4RWxKd3BYWTVDd2tRcFBIUFZnVTZvRWg2dldRdDNPT0EyaFhDWVAzRXI0N0E3ZzU4Ni9VMWRVNTczcXk5d2JydlRBQWJERk9oOGRXd0lURjhabEliTElPK2VFTjljNzFpdGFkT1FhZ21DR1lvUGlzV3JyaHV6S0FpNzJPcHFxcXFwVERodzgvNlFUZlBnUkV6d1NTZ1YrTE1vQTl3dVAzSVhHZ1JaQ2xubVVoTEFyMU5oUTBoNjQ5Y1pLdjFqa002d2did0FmNGVBYkFnWDlYcjlmdkJQQ2ZjemxGaWo3cUE2VmFzdkNkRGZBbytlQ0ViR1JGNGw1aytkcGpTRmlhaDBybkNueE53YWdvSmJjb09QbWJBb0Y2N3gwOFdJUU00Q044ckFHdzhPR3VwOExDd2pta2Jvd1plRklWV2ZpT0JuQ2RmQVJzRlZabEFqTWNkVFlEeStHTHRNWDNSUnZ5THdldlBuWWFET2RNbm1CNU5BQUY4TkVHUU1NSHpYM0Q5OTlmWHVyVkxmRUdYbVFVV2ZpUERFQThlVWxpRmhLWHVBZFJydG1QeURhY1lTZDhiWEdMS0NVdkwzak44WE9PMEQzRGNtc0FpdURiRFdDSEQ4RDNWMVNVYjlteTVaZXp2RjRNQSsrNXc5aytNdkJoNUliSGxwTk5IbDBaODlWZkFrUHNSbVJyanhuRkcvTHFSWnJpMjB6Q0IyZjRUVkZxWVVYb3V0eDhBTHlJbjNTd0FVQ2Y4QmFXU3dOUUNCL0c1SnBBY0oyLzh0WEprem12RUxrcjZ2RXc4dVlaeU1DSGo1OE4vd1Y1QTdpcERINjg3ajZBMEJHOCtyZytlTzJwQzZJTnVSZEVxUVVWWWsyaEFjRHNCR0VsQTk4R09LMm9GZnhkTGRJV2xJYXV6eTBJWHB0VEdMejZhSmt3OGVBMWZueldQU3BoNFJxQVl2andmZS8vMTRFVGhZWG5mazdGR3NpSEI5eFVRUWErMFJzRFVGRVpDZG0zaGVyOWc4S0VBeVpCd3Y0T1FkTCthd0NtVVppNHYwV1FvT3NBcitrVXFyTUgrZXJzTVNyTlNlVDlUZ2FnR3I1cVg1TlEvWldhcWdXd0RvY2hJUEpOOUdXQXlGNDlVZ2FnNFV4Z201NkRBU2pOTDJ0RW9ONjNqUitkUHB2S3BlOU9CNEI2bmloOFVnWmdJU3c2OUI0YWdLcjgxTHB4Y0ZuVWhhcDBMOU94NmNYcGlRYWVaQ0daWGJxRURNQlNXSFRvMlF4QWtSNWZyU3NUcUhTVWZ6RTBXZy8zeVJxZTlLOUVOMnA2TkFDTFlkR2h4MWZ2cTZWQUQ4NHVKbnU3QnBJb2ZDY0QySjhzNUV0K0NxQ1BFRmtmNE5ZQUxJZEZoeDVmdlJmSEFJVDFySHgxMXZZM0ZJZG40OEdpR3I2REFiQlBWZ1RPVTlTQURxR25XOFF1RGNBQldIVG9BUVBVZWFXbjFwME1VR1crN2c0VzFmQWQxZ1RpUFZuUGszemlhWFlRMXdBY2dVV0hucU1CaU9obDZmbXE3TGxFWUZFTjMyRk5JTjZUaUVMeEpHZ0JEcEV5QUlkZzBhSDN5QUR1OVVBSHI0OGZuNTJoVUJ4MisxMit0TUtmZklIYndxQUpqTHg1K3dnWmdHT3c2TkI3MEFkd282ZlczUVZuL1E2QjRyRFR0M2t6RG4veVJSNExRNlpObXc0dUIxKzROUUFIWWRHaFp4c0Z1RDdyOHdNVHMzRy96MzlLNEdNTTRMR3dlbDVrY2oxUE91cGtBSTdDb2tNUDcxNEFQMTdYS0ZCbnUvd2ZQYVlNUHNvQWhBc3pCa21Fd0FSdGRnUFk3Z1p5RkJZZGVwaXA0RUZCZ200ckdOWTVUN2l3QWY3a0cwZ1hka1d3ZEphUko5bHU0RW51WTVlRWNRa1dIWG9QWmdJZlROL3lrblF2VVFyTHcrR1ZuaStGZmMrWGlFNkVLLzdDVlZoMDZBV3BzcklEbGJvQVdtQXhxRWU0c0loZnBEd2pVTzM1dFVDVk9jZzFXRlRxOGVPelJzSFBQNFM5dmVkWk12WEhhZmpvd3NMVy9QbFplTDNqcTdPRzJBNkxVajB3cklQTlBYb1dqMGxZcklDUExrd1FmK0RIMEFpZ2d0cFpCNHRDUFFDOUg1ejFud1FsN0NmOGZ3czk5dkRSQjV6aEFtUGlXSENHNUlLS3V2OFl3YThBcmR4NndkTGRzK2lzUDZiMWFDMU1wUGpxNzBDbEpzTWJIclkxZUZ5RHI5cGJMMUR2K1VpWXNHL09WTlFmM1hxTUZnWlh0b0JPWTdKQTlYVVdxTnd1TnNMbnEvWU9nVGdoVU83WkpGRHNlb05Oc0RnTkgwOHZXUG0vL3daYWhUV2dXZDBKV29oTGs3MXB4dUREeXhPNG50ZUIzL2NKVlBzMkN0UzdJNktpYk92cldRZUxEajFHQ3lPaUo1RVV6UkFtWnMrQlU2ZkFGTDhVeEdkOXpsZnJUZ05JbGVEdlR2RDdHQm40RHdCbm1XMlExYnBDOFB4ZW9QSHZvS09xRUtxemduaEp1bWVtOHZOT3RSNG5rNGREVHBGNjUwOURsSi9QQ1ZtNUswaW8yaVVTcVA0Y3lvL2ZLNEJRaFFrSC9nbEdvT0xyRitHeUtxYno0NUllcDVQMzYvbXV4K25rL1hxKzYzRTZlYitlNzNxY1R0NnZSNEVlcDVQMzYvbXV4K25rL1hxKzYzRTZlYitlNzNxY1R0NnY1N3NlcDVQMzYvbXV4K25rL1hxKzYzRTZlYjhlYlhxTUZ1YlhZNWNlbzRYNTlkaWx4MmhoZmoxMjZURmFtRitQWFhxTUZ1YlhZNC9lL3dNU2pMWGVtdGNpSmdBQUFBQkpSVTVFcmtKZ2dnPT0iLCJwcm94eSI6IiJ9
Add Comment
Please, Sign In to add comment