3NAxHUEaM6RAG7rVDPL9L6DFZWkrqFtY98t · data · 2.7c767379.chunk.js?4?3?3
{
    "2.7c767379.chunk.js?4?3?3": "base64:ZW5kLWljb24ifSk6InJlY3QiPT09ZS50eXBlP2cuYS5jcmVhdGVFbGVtZW50KCJwYXRoIix7c3Ryb2tlOiJub25lIixmaWxsOnIsZDoiTTAsIi5jb25jYXQoNCwiaCIpLmNvbmNhdCgzMiwidiIpLmNvbmNhdCgyNCwiaCIpLmNvbmNhdCgtMzIsInoiKSxjbGFzc05hbWU6InJlY2hhcnRzLWxlZ2VuZC1pY29uIn0pOmcuYS5jcmVhdGVFbGVtZW50KFpmLHtmaWxsOnIsY3g6MTYsY3k6MTYsc2l6ZTozMixzaXplVHlwZToiZGlhbWV0ZXIiLHR5cGU6ZS50eXBlfSl9fSx7a2V5OiJyZW5kZXJJdGVtcyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wcyxyPXQucGF5bG9hZCxuPXQuaWNvblNpemUsaT10LmxheW91dCxvPXQuZm9ybWF0dGVyLGE9e3g6MCx5OjAsd2lkdGg6MzIsaGVpZ2h0OjMyfSxzPXtkaXNwbGF5OiJob3Jpem9udGFsIj09PWk/ImlubGluZS1ibG9jayI6ImJsb2NrIixtYXJnaW5SaWdodDoxMH0sdT17ZGlzcGxheToiaW5saW5lLWJsb2NrIix2ZXJ0aWNhbEFsaWduOiJtaWRkbGUiLG1hcmdpblJpZ2h0OjR9O3JldHVybiByLm1hcChmdW5jdGlvbih0LHIpe3ZhciBpLGM9dC5mb3JtYXR0ZXJ8fG8sZj1fKCkoKHRsKGk9eyJyZWNoYXJ0cy1sZWdlbmQtaXRlbSI6ITB9LCJsZWdlbmQtaXRlbS0iLmNvbmNhdChyKSwhMCksdGwoaSwiaW5hY3RpdmUiLHQuaW5hY3RpdmUpLGkpKTtyZXR1cm4ibm9uZSI9PT10LnR5cGU/bnVsbDpnLmEuY3JlYXRlRWxlbWVudCgibGkiLGVsKHtjbGFzc05hbWU6ZixzdHlsZTpzLGtleToibGVnZW5kLWl0ZW0tIi5jb25jYXQocil9LGllKGUucHJvcHMsdCxyKSksZy5hLmNyZWF0ZUVsZW1lbnQoVWYse3dpZHRoOm4saGVpZ2h0Om4sdmlld0JveDphLHN0eWxlOnV9LGUucmVuZGVySWNvbih0KSksZy5hLmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6InJlY2hhcnRzLWxlZ2VuZC1pdGVtLXRleHQifSxjP2ModC52YWx1ZSx0LHIpOnQudmFsdWUpKX0pfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnBheWxvYWQscj1lLmxheW91dCxuPWUuYWxpZ247aWYoIXR8fCF0Lmxlbmd0aClyZXR1cm4gbnVsbDt2YXIgaT17cGFkZGluZzowLG1hcmdpbjowLHRleHRBbGlnbjoiaG9yaXpvbnRhbCI9PT1yP246ImxlZnQifTtyZXR1cm4gZy5hLmNyZWF0ZUVsZW1lbnQoInVsIix7Y2xhc3NOYW1lOiJyZWNoYXJ0cy1kZWZhdWx0LWxlZ2VuZCIsc3R5bGU6aX0sdGhpcy5yZW5kZXJJdGVtcygpKX19XSkmJnJsKHIucHJvdG90eXBlLG4pLGkmJnJsKHIsaSksdH0oKSxZZi5kaXNwbGF5TmFtZT0iTGVnZW5kIixZZi5wcm9wVHlwZXM9e2NvbnRlbnQ6bS5hLmVsZW1lbnQsaWNvblNpemU6bS5hLm51bWJlcixpY29uVHlwZTptLmEub25lT2YoY2wpLGxheW91dDptLmEub25lT2YoWyJob3Jpem9udGFsIiwidmVydGljYWwiXSksYWxpZ246bS5hLm9uZU9mKFsiY2VudGVyIiwibGVmdCIsInJpZ2h0Il0pLHZlcnRpY2FsQWxpZ246bS5hLm9uZU9mKFsidG9wIiwiYm90dG9tIiwibWlkZGxlIl0pLHBheWxvYWQ6bS5hLmFycmF5T2YobS5hLnNoYXBlKHt2YWx1ZTptLmEuYW55LGlkOm0uYS5hbnksdHlwZTptLmEub25lT2YoWCl9KSksaW5hY3RpdmVDb2xvcjptLmEuc3RyaW5nLGZvcm1hdHRlcjptLmEuZnVuYyxvbk1vdXNlRW50ZXI6bS5hLmZ1bmMsb25Nb3VzZUxlYXZlOm0uYS5mdW5jLG9uQ2xpY2s6bS5hLmZ1bmN9LFlmLmRlZmF1bHRQcm9wcz17aWNvblNpemU6MTQsbGF5b3V0OiJob3Jpem9udGFsIixhbGlnbjoiY2VudGVyIix2ZXJ0aWNhbEFsaWduOiJtaWRkbGUiLGluYWN0aXZlQ29sb3I6IiNjY2MifSxXZj1YZikpfHxXZjtmdW5jdGlvbiBsbChlKXtyZXR1cm4obGw9ImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBobChlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9LG49T2JqZWN0LmtleXMocik7ImZ1bmN0aW9uIj09PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYobj1uLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHIpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLGUpLmVudW1lcmFibGV9KSkpLG4uZm9yRWFjaChmdW5jdGlvbih0KXtwbChlLHQsclt0XSl9KX1yZXR1cm4gZX1mdW5jdGlvbiBwbChlLHQscil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1yLGV9ZnVuY3Rpb24gZGwoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiB5bChlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PWxsKHQpJiYiZnVuY3Rpb24iIT09dHlwZW9mIHQ/ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKTp0fWZ1bmN0aW9uIGdsKGUpe3JldHVybihnbD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24gdmwoZSx0KXtyZXR1cm4odmw9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfXZhciBtbD1mdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZX0sYmw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4hMD09PWU/TmYoKSh0LG1sKTp1KCkoZSk/TmYoKSh0LGUpOnR9LF9sPVguZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiJub25lIiE9PWV9KSxTbD1LKCh1bD1zbD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUscjshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KTtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxpPW5ldyBBcnJheShuKSxvPTA7bzxuO28rKylpW29dPWFyZ3VtZW50c1tvXTtyZXR1cm4ocj15bCh0aGlzLChlPWdsKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpKS5zdGF0ZT17Ym94V2lkdGg6LTEsYm94SGVpZ2h0Oi0xfSxyfXZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJnZsKGUsdCl9KHQseVsiQ29tcG9uZW50Il0pLHI9dCxpPVt7a2V5OiJnZXRXaXRoSGVpZ2h0Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPWUucHJvcHMubGF5b3V0O3JldHVybiJ2ZXJ0aWNhbCI9PT1yJiZSKGUucHJvcHMuaGVpZ2h0KT97aGVpZ2h0OmUucHJvcHMuaGVpZ2h0fToiaG9yaXpvbnRhbCI9PT1yP3t3aWR0aDplLnByb3BzLndpZHRofHx0fTpudWxsfX1dLChuPVt7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnVwZGF0ZUJCb3goKX19LHtrZXk6ImNvbXBvbmVudERpZFVwZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnVwZGF0ZUJCb3goKX19LHtrZXk6ImdldEJCb3giLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdGF0ZSx0PWUuYm94V2lkdGgscj1lLmJveEhlaWdodDtyZXR1cm4gdD49MCYmcj49MD97d2lkdGg6dCxoZWlnaHQ6cn06bnVsbH19LHtrZXk6ImdldERlZmF1bHRQb3NpdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscixuPXRoaXMucHJvcHMsaT1uLmxheW91dCxvPW4uYWxpZ24sYT1uLnZlcnRpY2FsQWxpZ24scz1uLm1hcmdpbix1PW4uY2hhcnRXaWR0aCxjPW4uY2hhcnRIZWlnaHQ7ZSYmKHZvaWQgMCE9PWUubGVmdCYmbnVsbCE9PWUubGVmdHx8dm9pZCAwIT09ZS5yaWdodCYmbnVsbCE9PWUucmlnaHQpfHwodD0iY2VudGVyIj09PW8mJiJ2ZXJ0aWNhbCI9PT1pP3tsZWZ0OigodXx8MCktKHRoaXMuZ2V0QkJveCgpfHx7d2lkdGg6MH0pLndpZHRoKS8yfToicmlnaHQiPT09bz97cmlnaHQ6cyYmcy5yaWdodHx8MH06e2xlZnQ6cyYmcy5sZWZ0fHwwfSk7ZSYmKHZvaWQgMCE9PWUudG9wJiZudWxsIT09ZS50b3B8fHZvaWQgMCE9PWUuYm90dG9tJiZudWxsIT09ZS5ib3R0b20pfHwocj0ibWlkZGxlIj09PWE/e3RvcDooKGN8fDApLSh0aGlzLmdldEJCb3goKXx8e2hlaWdodDowfSkuaGVpZ2h0KS8yfToiYm90dG9tIj09PWE/e2JvdHRvbTpzJiZzLmJvdHRvbXx8MH06e3RvcDpzJiZzLnRvcHx8MH0pO3JldHVybiBobCh7fSx0LHIpfX0se2tleToidXBkYXRlQkJveCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0YXRlLHQ9ZS5ib3hXaWR0aCxyPWUuYm94SGVpZ2h0LG49dGhpcy5wcm9wcy5vbkJCb3hVcGRhdGU7aWYodGhpcy53cmFwcGVyTm9kZSYmdGhpcy53cmFwcGVyTm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3Qpe3ZhciBpPXRoaXMud3JhcHBlck5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7KE1hdGguYWJzKGkud2lkdGgtdCk+MXx8TWF0aC5hYnMoaS5oZWlnaHQtcik+MSkmJnRoaXMuc2V0U3RhdGUoe2JveFdpZHRoOmkud2lkdGgsYm94SGVpZ2h0OmkuaGVpZ2h0fSxmdW5jdGlvbigpe24mJm4oaSl9KX1lbHNlLTE9PT10JiYtMT09PXJ8fHRoaXMuc2V0U3RhdGUoe2JveFdpZHRoOi0xLGJveEhlaWdodDotMX0sZnVuY3Rpb24oKXtuJiZuKG51bGwpfSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMscj10LmNvbnRlbnQsbj10LndpZHRoLGk9dC5oZWlnaHQsbz10LndyYXBwZXJTdHlsZSxhPXQucGF5bG9kVW5pcUJ5LHM9dC5wYXlsb2FkLGM9aGwoe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsd2lkdGg6bnx8ImF1dG8iLGhlaWdodDppfHwiYXV0byJ9LHRoaXMuZ2V0RGVmYXVsdFBvc2l0aW9uKG8pLG8pO3JldHVybiBnLmEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJyZWNoYXJ0cy1sZWdlbmQtd3JhcHBlciIsc3R5bGU6YyxyZWY6ZnVuY3Rpb24odCl7ZS53cmFwcGVyTm9kZT10fX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gZy5hLmlzVmFsaWRFbGVtZW50KGUpP2cuYS5jbG9uZUVsZW1lbnQoZSx0KTp1KCkoZSk/ZSh0KTpnLmEuY3JlYXRlRWxlbWVudChmbCx0KX0ocixobCh7fSx0aGlzLnByb3BzLHtwYXlsb2FkOmJsKGEscyl9KSkpfX1dKSYmZGwoci5wcm90b3R5cGUsbiksaSYmZGwocixpKSx0fSgpLHNsLmRpc3BsYXlOYW1lPSJMZWdlbmQiLHNsLnByb3BUeXBlcz17Y29udGVudDptLmEub25lT2ZUeXBlKFttLmEuZWxlbWVudCxtLmEuZnVuY10pLHdyYXBwZXJTdHlsZTptLmEub2JqZWN0LGNoYXJ0V2lkdGg6bS5hLm51bWJlcixjaGFydEhlaWdodDptLmEubnVtYmVyLHdpZHRoOm0uYS5udW1iZXIsaGVpZ2h0Om0uYS5udW1iZXIsaWNvblNpemU6bS5hLm51bWJlcixpY29uVHlwZTptLmEub25lT2YoX2wpLGxheW91dDptLmEub25lT2YoWyJob3Jpem9udGFsIiwidmVydGljYWwiXSksYWxpZ246bS5hLm9uZU9mKFsiY2VudGVyIiwibGVmdCIsInJpZ2h0Il0pLHZlcnRpY2FsQWxpZ246bS5hLm9uZU9mKFsidG9wIiwiYm90dG9tIiwibWlkZGxlIl0pLG1hcmdpbjptLmEuc2hhcGUoe3RvcDptLmEubnVtYmVyLGxlZnQ6bS5hLm51bWJlcixib3R0b206bS5hLm51bWJlcixyaWdodDptLmEubnVtYmVyfSkscGF5bG9hZDptLmEuYXJyYXlPZihtLmEuc2hhcGUoe3ZhbHVlOm0uYS5hbnksaWQ6bS5hLmFueSx0eXBlOm0uYS5vbmVPZihYKX0pKSxwYXlsb2RVbmlxQnk6bS5hLm9uZU9mVHlwZShbbS5hLmZ1bmMsbS5hLmJvb2xdKSxmb3JtYXR0ZXI6bS5hLmZ1bmMsb25Nb3VzZUVudGVyOm0uYS5mdW5jLG9uTW91c2VMZWF2ZTptLmEuZnVuYyxvbkNsaWNrOm0uYS5mdW5jLG9uQkJveFVwZGF0ZTptLmEuZnVuY30sc2wuZGVmYXVsdFByb3BzPXtpY29uU2l6ZToxNCxsYXlvdXQ6Imhvcml6b250YWwiLGFsaWduOiJjZW50ZXIiLHZlcnRpY2FsQWxpZ246ImJvdHRvbSJ9LGFsPXVsKSl8fGFsO2Z1bmN0aW9uIEVsKGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHQ9MCxyPW5ldyBBcnJheShlLmxlbmd0aCk7dDxlLmxlbmd0aDt0Kyspclt0XT1lW3RdO3JldHVybiByfX0oZSl8fGZ1bmN0aW9uKGUpe2lmKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoZSl8fCJbb2JqZWN0IEFyZ3VtZW50c10iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfSgpfWZ1bmN0aW9uIHdsKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30sbj1PYmplY3Qua2V5cyhyKTsiZnVuY3Rpb24iPT09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihuPW4uY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkuZW51bWVyYWJsZX0pKSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe1RsKGUsdCxyW3RdKX0pfXJldHVybiBlfWZ1bmN0aW9uIFRsKGUsdCxyKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPXIsZX12YXIgQWw9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBmKCkoZSl8fGYoKSh0KT9yOkIodCk/VCgpKGUsdCxyKTp1KCkodCk/dChlKTpyfSxDbD1mdW5jdGlvbihlLHQscixuKXt2YXIgaT1GZSgpKGUsZnVuY3Rpb24oZSl7cmV0dXJuIEFsKGUsdCl9KTtpZigibnVtYmVyIj09PXIpe3ZhciBvPWkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBSKGUpfHxwYXJzZUZsb2F0KGUsMTApfSk7cmV0dXJuIG8ubGVuZ3RoP1tqZSgpKG8pLExlKCkobyldOlsxLzAsLTEvMF19cmV0dXJuKG4/aS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWYoKShlKX0pOmkpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gQihlKT9lOiIifSl9LHhsPWZ1bmN0aW9uKGUpe3ZhciB0O3N3aXRjaChlLnR5cGUuZGlzcGxheU5hbWUpe2Nhc2UiTGluZSI6Y2FzZSJBcmVhIjpjYXNlIlJhZGFyIjp0PWUucHJvcHMuc3Ryb2tlO2JyZWFrO2RlZmF1bHQ6dD1lLnByb3BzLmZpbGx9cmV0dXJuIHR9LElsPWZ1bmN0aW9uKGUpe3ZhciB0LHI9ZS5jaGlsZHJlbixuPWUuZm9ybWF0ZWRHcmFwaGljYWxJdGVtcyxpPWUubGVnZW5kV2lkdGgsbz1lLmxlZ2VuZENvbnRlbnQsYT1KKHIsU2wpO3JldHVybiBhPyh0PWEucHJvcHMmJmEucHJvcHMucGF5bG9hZD9hLnByb3BzJiZhLnByb3BzLnBheWxvYWQ6ImNoaWxkcmVuIj09PW8/KG58fFtdKS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXt2YXIgcj10Lml0ZW0sbj10LnByb3BzLGk9bi5zZWN0b3JzfHxuLmRhdGF8fFtdO3JldHVybiBlLmNvbmNhdChpLm1hcChmdW5jdGlvbihlKXtyZXR1cm57dHlwZTphLnByb3BzLmljb25UeXBlfHxyLnByb3BzLmxlZ2VuZFR5cGUsdmFsdWU6ZS5uYW1lLGNvbG9yOmUuZmlsbCxwYXlsb2FkOmV9fSkpfSxbXSk6KG58fFtdKS5tYXAoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pdGVtLHI9dC5wcm9wcyxuPXIuZGF0YUtleSxpPXIubmFtZSxvPXIubGVnZW5kVHlwZTtyZXR1cm57aW5hY3RpdmU6ci5oaWRlLGRhdGFLZXk6bix0eXBlOmEucHJvcHMuaWNvblR5cGV8fG98fCJzcXVhcmUiLGNvbG9yOnhsKHQpLHZhbHVlOml8fG4scGF5bG9hZDp0LnByb3BzfX0pLHdsKHt9LGEucHJvcHMsU2wuZ2V0V2l0aEhlaWdodChhLGkpLHtwYXlsb2FkOnQsaXRlbTphfSkpOm51bGx9LGtsPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBpPXQucHJvcHMuY2hpbGRyZW4sbz1aKGksa2YpLmZpbHRlcihmdW5jdGlvbihlKXt2YXIgdD1lLnByb3BzLmRpcmVjdGlvbjtyZXR1cm4hKCFmKCkodCkmJiFmKCkobikpfHxuLmluZGV4T2YodCk+PTB9KTtpZihvJiZvLmxlbmd0aCl7dmFyIGE9by5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUucHJvcHMuZGF0YUtleX0pO3JldHVybiBlLnJlZHVjZShmdW5jdGlvbihlLHQpe3ZhciBuPUFsKHQsciwwKSxpPWQoKShuKT9bamUoKShuKSxMZSgpKG4pXTpbbixuXSxvPWEucmVkdWNlKGZ1bmN0aW9uKGUscil7dmFyIG49QWwodCxyLDApLG89aVswXS1NYXRoLmFicyhkKCkobik/blswXTpuKSxhPWlbMV0rTWF0aC5hYnMoZCgpKG4pP25bMV06bik7cmV0dXJuW01hdGgubWluKG8sZVswXSksTWF0aC5tYXgoYSxlWzFdKV19LFsxLzAsLTEvMF0pO3JldHVybltNYXRoLm1pbihvWzBdLGVbMF0pLE1hdGgubWF4KG9bMV0sZVsxXSldfSxbMS8wLC0xLzBdKX1yZXR1cm4gbnVsbH0sT2w9ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGk9dC5tYXAoZnVuY3Rpb24odCl7dmFyIGk9dC5wcm9wcy5kYXRhS2V5O3JldHVybiJudW1iZXIiPT09ciYmaSYma2woZSx0LGkpfHxDbChlLGkscixuKX0pO2lmKCJudW1iZXIiPT09cilyZXR1cm4gaS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm5bTWF0aC5taW4oZVswXSx0WzBdKSxNYXRoLm1heChlWzFdLHRbMV0pXX0sWzEvMCwtMS8wXSk7dmFyIG89e307cmV0dXJuIGkucmVkdWNlKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPTAsbj10Lmxlbmd0aDtyPG47cisrKW9bdFtyXV18fChvW3Rbcl1dPSEwLGUucHVzaCh0W3JdKSk7cmV0dXJuIGV9LFtdKX0sTmw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4iaG9yaXpvbnRhbCI9PT1lJiYieEF4aXMiPT09dHx8InZlcnRpY2FsIj09PWUmJiJ5QXhpcyI9PT10fHwiY2VudHJpYyI9PT1lJiYiYW5nbGVBeGlzIj09PXR8fCJyYWRpYWwiPT09ZSYmInJhZGl1c0F4aXMiPT09dH0sUGw9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGksbz1lLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5jb29yZGluYXRlPT09dCYmKG49ITApLGUuY29vcmRpbmF0ZT09PXImJihpPSEwKSxlLmNvb3JkaW5hdGV9KTtyZXR1cm4gbnx8by5wdXNoKHQpLGl8fG8ucHVzaChyKSxvfSxSbD1mdW5jdGlvbihlLHQscil7aWYoIWUpcmV0dXJuIG51bGw7dmFyIG49ZS5zY2FsZSxpPWUuZHVwbGljYXRlRG9tYWluLG89ZS50eXBlLGE9ZS5yYW5nZSxzPSh0fHxyKSYmImNhdGVnb3J5Ij09PW8mJm4uYmFuZHdpZHRoP24uYmFuZHdpZHRoKCkvMjowO3JldHVybiBzPSJhbmdsZUF4aXMiPT09ZS5heGlzVHlwZT8yKk4oYVswXS1hWzFdKSpzOnMsdCYmKGUudGlja3N8fGUubmljZVRpY2tzKT8oZS50aWNrc3x8ZS5uaWNlVGlja3MpLm1hcChmdW5jdGlvbihlKXt2YXIgdD1pP2kuaW5kZXhPZihlKTplO3JldHVybntjb29yZGluYXRlOm4odCkrcyx2YWx1ZTplLG9mZnNldDpzfX0pOmUuaXNDYXRlZ29yaWFsJiZlLmNhdGVnb3JpY2FsRG9tYWluP2UuY2F0ZWdvcmljYWxEb21haW4ubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJue2Nvb3JkaW5hdGU6bihlKSx2YWx1ZTplLGluZGV4OnQsb2Zmc2V0OnN9fSk6bi50aWNrcyYmIXI/bi50aWNrcyhlLnRpY2tDb3VudCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybntjb29yZGluYXRlOm4oZSkrcyx2YWx1ZTplLG9mZnNldDpzfX0pOm4uZG9tYWluKCkubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJue2Nvb3JkaW5hdGU6bihlKStzLHZhbHVlOmk/aVtlXTplLGluZGV4OnQsb2Zmc2V0OnN9fSl9LEJsPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbjtyZXR1cm4gdSgpKHIpP249cjp1KCkodCkmJihuPXQpLHUoKShlKXx8bj9mdW5jdGlvbih0LHIsaSxvKXt1KCkoZSkmJmUodCxyLGksbyksdSgpKG4pJiZuKHQscixpLG8pfTpudWxsfSxNbD1mdW5jdGlvbihlLHQpe3ZhciByPWUuc2NhbGUsaT1lLnR5cGUsbz1lLmxheW91dCxhPWUuYXhpc1R5cGU7aWYoImF1dG8iPT09cilyZXR1cm4icmFkaWFsIj09PW8mJiJyYWRpdXNBeGlzIj09PWE/e3NjYWxlOmd0KCkscmVhbFNjYWxlVHlwZToiYmFuZCJ9OiJyYWRpYWwiPT09byYmImFuZ2xlQXhpcyI9PT1hP3tzY2FsZTp3bigpLHJlYWxTY2FsZVR5cGU6ImxpbmVhciJ9OiJjYXRlZ29yeSI9PT1pJiZ0JiYodC5pbmRleE9mKCJMaW5lQ2hhcnQiKT49MHx8dC5pbmRleE9mKCJBcmVhQ2hhcnQiKT49MCk/e3NjYWxlOnZ0KCkscmVhbFNjYWxlVHlwZToicG9pbnQifToiY2F0ZWdvcnkiPT09aT97c2NhbGU6Z3QoKSxyZWFsU2NhbGVUeXBlOiJiYW5kIn06e3NjYWxlOnduKCkscmVhbFNjYWxlVHlwZToibGluZWFyIn07aWYoTygpKHIpKXt2YXIgcz0ic2NhbGUiLmNvbmNhdChyLnNsaWNlKDAsMSkudG9VcHBlckNhc2UoKSkuY29uY2F0KHIuc2xpY2UoMSkpO3JldHVybntzY2FsZToobltzXXx8dnQpKCkscmVhbFNjYWxlVHlwZTpuW3NdP3M6InBvaW50In19cmV0dXJuIHUoKShyKT97c2NhbGU6cn06e3NjYWxlOnZ0KCkscmVhbFNjYWxlVHlwZToicG9pbnQifX0sTGw9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kb21haW4oKTtpZih0JiYhKHQubGVuZ3RoPD0yKSl7dmFyIHI9dC5sZW5ndGgsbj1lLnJhbmdlKCksaT1NYXRoLm1pbihuWzBdLG5bMV0pLTFlLTQsbz1NYXRoLm1heChuWzBdLG5bMV0pKzFlLTQsYT1lKHRbMF0pLHM9ZSh0W3ItMV0pOyhhPGl8fGE+b3x8czxpfHxzPm8pJiZlLmRvbWFpbihbdFswXSx0W3ItMV1dKX19LERsPXtzaWduOmZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoO2lmKCEodDw9MCkpZm9yKHZhciByPTAsbj1lWzBdLmxlbmd0aDtyPG47KytyKWZvcih2YXIgaT0wLG89MCxhPTA7YTx0OysrYSl7dmFyIHM9QygpKGVbYV1bcl1bMV0pP2VbYV1bcl1bMF06ZVthXVtyXVsxXTtzPj0wPyhlW2FdW3JdWzBdPWksZVthXVtyXVsxXT1pK3MsaT1lW2FdW3JdWzFdKTooZVthXVtyXVswXT1vLGVbYV1bcl1bMV09bytzLG89ZVthXVtyXVsxXSl9fSxleHBhbmQ6ZnVuY3Rpb24oZSx0KXtpZigobj1lLmxlbmd0aCk+MCl7Zm9yKHZhciByLG4saSxvPTAsYT1lWzBdLmxlbmd0aDtvPGE7KytvKXtmb3IoaT1yPTA7cjxuOysrcilpKz1lW3JdW29dWzFdfHwwO2lmKGkpZm9yKHI9MDtyPG47KytyKWVbcl1bb11bMV0vPWl9QnMoZSx0KX19LG5vbmU6QnMsc2lsaG91ZXR0ZTpmdW5jdGlvbihlLHQpe2lmKChyPWUubGVuZ3RoKT4wKXtmb3IodmFyIHIsbj0wLGk9ZVt0WzBdXSxvPWkubGVuZ3RoO248bzsrK24pe2Zvcih2YXIgYT0wLHM9MDthPHI7KythKXMrPWVbYV1bbl1bMV18fDA7aVtuXVsxXSs9aVtuXVswXT0tcy8yfUJzKGUsdCl9fSx3aWdnbGU6ZnVuY3Rpb24oZSx0KXtpZigoaT1lLmxlbmd0aCk+MCYmKG49KHI9ZVt0WzBdXSkubGVuZ3RoKT4wKXtmb3IodmFyIHIsbixpLG89MCxhPTE7YTxuOysrYSl7Zm9yKHZhciBzPTAsdT0wLGM9MDtzPGk7KytzKXtmb3IodmFyIGY9ZVt0W3NdXSxsPWZbYV1bMV18fDAsaD0obC0oZlthLTFdWzFdfHwwKSkvMixwPTA7cDxzOysrcCl7dmFyIGQ9ZVt0W3BdXTtoKz0oZFthXVsxXXx8MCktKGRbYS0xXVsxXXx8MCl9dSs9bCxjKz1oKmx9clthLTFdWzFdKz1yW2EtMV1bMF09byx1JiYoby09Yy91KX1yW2EtMV1bMV0rPXJbYS0xXVswXT1vLEJzKGUsdCl9fX0samw9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXQubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnByb3BzLmRhdGFLZXl9KTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1CYShbXSksdD1NcyxyPUJzLG49THM7ZnVuY3Rpb24gaShpKXt2YXIgbyxhLHM9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdT1pLmxlbmd0aCxjPXMubGVuZ3RoLGY9bmV3IEFycmF5KGMpO2ZvcihvPTA7bzxjOysrbyl7Zm9yKHZhciBsLGg9c1tvXSxwPWZbb109bmV3IEFycmF5KHUpLGQ9MDtkPHU7KytkKXBbZF09bD1bMCwrbihpW2RdLGgsZCxpKV0sbC5kYXRhPWlbZF07cC5rZXk9aH1mb3Iobz0wLGE9dChmKTtvPGM7KytvKWZbYVtvXV0uaW5kZXg9bztyZXR1cm4gcihmLGEpLGZ9cmV0dXJuIGkua2V5cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT09dHlwZW9mIHQ/dDpCYShIYS5jYWxsKHQpKSxpKTplfSxpLnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PT10eXBlb2YgZT9lOkJhKCtlKSxpKTpufSxpLm9yZGVyPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW51bGw9PWU/TXM6ImZ1bmN0aW9uIj09PXR5cGVvZiBlP2U6QmEoSGEuY2FsbChlKSksaSk6dH0saS5vZmZzZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09ZT9CczplLGkpOnJ9LGl9KCkua2V5cyhuKS52YWx1ZShmdW5jdGlvbihlLHQpe3JldHVybitBbChlLHQsMCl9KS5vcmRlcihNcykub2Zmc2V0KERsW3JdKShlKX0sVWw9ZnVuY3Rpb24oZSx0KXt2YXIgcj10LnJlYWxTY2FsZVR5cGUsbj10LnR5cGUsaT10LnRpY2tDb3VudCxvPXQub3JpZ2luYWxEb21haW4sYT10LmFsbG93RGVjaW1hbHMscz1yfHx0LnNjYWxlO2lmKCJhdXRvIiE9PXMmJiJsaW5lYXIiIT09cylyZXR1cm4gbnVsbDtpZihpJiYibnVtYmVyIj09PW4mJm8mJigiYXV0byI9PT1vWzBdfHwiYXV0byI9PT1vWzFdKSl7dmFyIHU9ZS5kb21haW4oKSxjPU9iamVjdChWZS5nZXROaWNlVGlja1ZhbHVlcykodSxpLGEpO3JldHVybiBlLmRvbWFpbihmdW5jdGlvbihlLHQpe3JldHVybiJudW1iZXIiPT09dD9bamUoKShlKSxMZSgpKGUpXTplfShjLG4pKSx7bmljZVRpY2tzOmN9fWlmKGkmJiJudW1iZXIiPT09bil7dmFyIGY9ZS5kb21haW4oKTtyZXR1cm57bmljZVRpY2tzOk9iamVjdChWZS5nZXRUaWNrVmFsdWVzRml4ZWREb21haW4pKGYsaSxhKX19cmV0dXJuIG51bGx9LEZsPWZ1bmN0aW9uKGUpe3ZhciB0PWUuYXhpcyxyPWUudGlja3Msbj1lLmJhbmRTaXplLGk9ZS5lbnRyeSxvPWUuaW5kZXgsYT1lLmRhdGFLZXk7aWYoImNhdGVnb3J5Ij09PXQudHlwZSl7aWYoIXQuYWxsb3dEdXBsaWNhdGVkQ2F0ZWdvcnkmJnQuZGF0YUtleSYmIWYoKShpW3QuZGF0YUtleV0pKXt2YXIgcz1GKHIsInZhbHVlIixpW3QuZGF0YUtleV0pO2lmKHMpcmV0dXJuIHMuY29vcmRpbmF0ZStuLzJ9cmV0dXJuIHJbb10/cltvXS5jb29yZGluYXRlK24vMjpudWxsfXZhciB1PUFsKGksZigpKGEpP3QuZGF0YUtleTphKTtyZXR1cm4gZigpKHUpP251bGw6dC5zY2FsZSh1KX0sVmw9ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmFsd2F5c1Nob3csbj1lLmlmT3ZlcmZsb3c7cmV0dXJuIHImJihuPSJleHRlbmREb21haW4iKSxuPT09dH0scWw9ZnVuY3Rpb24oZSx0LHIsbixpKXt2YXIgbz1aKGUsTHUpLGE9WihlLFR1KSxzPW8uY29uY2F0KGEpLHU9WihlLGJmKSxjPSIiLmNvbmNhdChuLCJJZCIpLGY9blswXSxsPXQ7aWYocy5sZW5ndGgmJihsPXMucmVkdWNlKGZ1bmN0aW9uKGUsdCl7aWYodC5wcm9wc1tjXT09PXImJlZsKHQucHJvcHMsImV4dGVuZERvbWFpbiIpJiZSKHQucHJvcHNbZl0pKXt2YXIgbj10LnByb3BzW2ZdO3JldHVybltNYXRoLm1pbihlWzBdLG4pLE1hdGgubWF4KGVbMV0sbildfXJldHVybiBlfSxsKSksdS5sZW5ndGgpe3ZhciBoPSIiLmNvbmNhdChmLCIxIikscD0iIi5jb25jYXQoZiwiMiIpO2w9dS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtpZih0LnByb3BzW2NdPT09ciYmVmwodC5wcm9wcywiZXh0ZW5kRG9tYWluIikmJlIodC5wcm9wc1toXSkmJlIodC5wcm9wc1twXSkpe3ZhciBuPXQucHJvcHNbaF0saT10LnByb3BzW3BdO3JldHVybltNYXRoLm1pbihlWzBdLG4saSksTWF0aC5tYXgoZVsxXSxuLGkpXX1yZXR1cm4gZX0sbCl9cmV0dXJuIGkmJmkubGVuZ3RoJiYobD1pLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiBSKHQpP1tNYXRoLm1pbihlWzBdLHQpLE1hdGgubWF4KGVbMV0sdCldOmV9LGwpKSxsfSxLbD1mdW5jdGlvbihlLHQscil7cmV0dXJuIE9iamVjdC5rZXlzKGUpLnJlZHVjZShmdW5jdGlvbihuLGkpe3ZhciBvPWVbaV0uc3RhY2tlZERhdGEucmVkdWNlKGZ1bmN0aW9uKGUsbil7dmFyIGk9bi5zbGljZSh0LHIrMSkucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuW2plKCkodC5jb25jYXQoW2VbMF1dKS5maWx0ZXIoUikpLExlKCkodC5jb25jYXQoW2VbMV1dKS5maWx0ZXIoUikpXX0sWzEvMCwtMS8wXSk7cmV0dXJuW01hdGgubWluKGVbMF0saVswXSksTWF0aC5tYXgoZVsxXSxpWzFdKV19LFsxLzAsLTEvMF0pO3JldHVybltNYXRoLm1pbihvWzBdLG5bMF0pLE1hdGgubWF4KG9bMV0sblsxXSldfSxbMS8wLC0xLzBdKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT0xLzB8fGU9PT0tMS8wPzA6ZX0pfSx6bD0vXmRhdGFNaW5bXHNdKi1bXHNdKihbMC05XSsoWy5dezF9WzAtOV0rKXswLDF9KSQvLEdsPS9eZGF0YU1heFtcc10qXCtbXHNdKihbMC05XSsoWy5dezF9WzAtOV0rKXswLDF9KSQvLEhsPWZ1bmN0aW9uKGUsdCxyKXtpZighZCgpKGUpKXJldHVybiB0O3ZhciBuPVtdO2lmKFIoZVswXSkpblswXT1yP2VbMF06TWF0aC5taW4oZVswXSx0WzBdKTtlbHNlIGlmKHpsLnRlc3QoZVswXSkpe3ZhciBpPSt6bC5leGVjKGVbMF0pWzFdO25bMF09dFswXS1pfWVsc2UgdSgpKGVbMF0pP25bMF09ZVswXSh0WzBdKTpuWzBdPXRbMF07aWYoUihlWzFdKSluWzFdPXI/ZVsxXTpNYXRoLm1heChlWzFdLHRbMV0pO2Vsc2UgaWYoR2wudGVzdChlWzFdKSl7dmFyIG89K0dsLmV4ZWMoZVsxXSlbMV07blsxXT10WzFdK299ZWxzZSB1KCkoZVsxXSk/blsxXT1lWzFdKHRbMV0pOm5bMV09dFsxXTtyZXR1cm4gbn0sV2w9ZnVuY3Rpb24oZSx0KXtpZihlJiZlLnNjYWxlJiZlLnNjYWxlLmJhbmR3aWR0aClyZXR1cm4gZS5zY2FsZS5iYW5kd2lkdGgoKTtpZihlJiZ0JiZ0Lmxlbmd0aD49Mil7Zm9yKHZhciByPUJlKCkodCxmdW5jdGlvbihlKXtyZXR1cm4gZS5jb29yZGluYXRlfSksbj0xLzAsaT0xLG89ci5sZW5ndGg7aTxvO2krKyl7dmFyIGE9cltpXSxzPXJbaS0xXTtuPU1hdGgubWluKChhLmNvb3JkaW5hdGV8fDApLShzLmNvb3JkaW5hdGV8fDApLG4pfXJldHVybiBuPT09MS8wPzA6bn1yZXR1cm4gMH0sWWw9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlJiZlLmxlbmd0aD9QZSgpKGUsVCgpKHIsInR5cGUuZGVmYXVsdFByb3BzLmRvbWFpbiIpKT90OmU6dH07ZnVuY3Rpb24gWGwoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fSxuPU9iamVjdC5rZXlzKHIpOyJmdW5jdGlvbiI9PT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKG49bi5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhyKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKS5lbnVtZXJhYmxlfSkpKSxuLmZvckVhY2goZnVuY3Rpb24odCl7UWwoZSx0LHJbdF0pfSl9cmV0dXJuIGV9ZnVuY3Rpb24gUWwoZSx0LHIpe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09cixlfXZhciAkbD1NYXRoLlBJLzE4MCxabD1mdW5jdGlvbihlKXtyZXR1cm4gMTgwKmUvTWF0aC5QSX0sSmw9ZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJue3g6ZStNYXRoLmNvcygtJGwqbikqcix5OnQrTWF0aC5zaW4oLSRsKm4pKnJ9fSxlaD1mdW5jdGlvbihlLHQpe3ZhciByPWUueCxuPWUueSxpPXQuY3gsbz10LmN5LGE9ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLngsbj1lLnksaT10Lngsbz10Lnk7cmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyhyLWksMikrTWF0aC5wb3cobi1vLDIpKX0oe3g6cix5Om59LHt4OmkseTpvfSk7aWYoYTw9MClyZXR1cm57cmFkaXVzOmF9O3ZhciBzPShyLWkpL2EsdT1NYXRoLmFjb3Mocyk7cmV0dXJuIG4+byYmKHU9MipNYXRoLlBJLXUpLHtyYWRpdXM6YSxhbmdsZTpabCh1KSxhbmdsZUluUmFkaWFuOnV9fSx0aD1mdW5jdGlvbihlLHQpe3ZhciByPXQuc3RhcnRBbmdsZSxuPXQuZW5kQW5nbGUsaT1NYXRoLmZsb29yKHIvMzYwKSxvPU1hdGguZmxvb3Iobi8zNjApO3JldHVybiBlKzM2MCpNYXRoLm1pbihpLG8pfSxyaD1mdW5jdGlvbihlLHQpe3ZhciByPWUueCxuPWUueSxpPWVoKHt4OnIseTpufSx0KSxvPWkucmFkaXVzLGE9aS5hbmdsZSxzPXQuaW5uZXJSYWRpdXMsdT10Lm91dGVyUmFkaXVzO2lmKG88c3x8bz51KXJldHVybiExO2lmKDA9PT1vKXJldHVybiEwO3ZhciBjLGY9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdGFydEFuZ2xlLHI9ZS5lbmRBbmdsZSxuPU1hdGguZmxvb3IodC8zNjApLGk9TWF0aC5mbG9vcihyLzM2MCksbz1NYXRoLm1pbihuLGkpO3JldHVybntzdGFydEFuZ2xlOnQtMzYwKm8sZW5kQW5nbGU6ci0zNjAqb319KHQpLGw9Zi5zdGFydEFuZ2xlLGg9Zi5lbmRBbmdsZSxwPWE7aWYobDw9aCl7Zm9yKDtwPmg7KXAtPTM2MDtmb3IoO3A8bDspcCs9MzYwO2M9cD49bCYmcDw9aH1lbHNle2Zvcig7cD5sOylwLT0zNjA7Zm9yKDtwPGg7KXArPTM2MDtjPXA+PWgmJnA8PWx9cmV0dXJuIGM/WGwoe30sdCx7cmFkaXVzOm8sYW5nbGU6dGgocCx0KX0pOm51bGx9O2Z1bmN0aW9uIG5oKGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHQ9MCxyPW5ldyBBcnJheShlLmxlbmd0aCk7dDxlLmxlbmd0aDt0Kyspclt0XT1lW3RdO3JldHVybiByfX0oZSl8fGZ1bmN0aW9uKGUpe2lmKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoZSl8fCJbb2JqZWN0IEFyZ3VtZW50c10iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfSgpfWZ1bmN0aW9uIGloKCl7cmV0dXJuKGloPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPWFyZ3VtZW50c1t0XTtmb3IodmFyIG4gaW4gcilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixuKSYmKGVbbl09cltuXSl9cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gb2goZSx0LHIpe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09cixlfXZhciBhaD1tLmEuc2hhcGUoe3g6bS5hLm51bWJlcix5Om0uYS5udW1iZXIsd2lkdGg6bS5hLm51bWJlcixoZWlnaHQ6bS5hLm51bWJlcn0pLHNoPW0uYS5zaGFwZSh7Y3g6bS5hLm51bWJlcixjeTptLmEubnVtYmVyLGlubmVyUmFkaXVzOm0uYS5udW1iZXIsb3V0ZXJSYWRpdXM6bS5hLm51bWJlcixzdGFydEFuZ2xlOm0uYS5udW1iZXIsZW5kQW5nbGU6bS5hLm51bWJlcn0pLHVoPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30sbj1PYmplY3Qua2V5cyhyKTsiZnVuY3Rpb24iPT09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihuPW4uY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkuZW51bWVyYWJsZX0pKSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe29oKGUsdCxyW3RdKX0pfXJldHVybiBlfSh7fSxILHt2aWV3Qm94Om0uYS5vbmVPZlR5cGUoW2FoLHNoXSksZm9ybWF0dGVyOm0uYS5mdW5jLHZhbHVlOm0uYS5vbmVPZlR5cGUoW20uYS5udW1iZXIsbS5hLnN0cmluZ10pLG9mZnNldDptLmEubnVtYmVyLHBvc2l0aW9uOm0uYS5vbmVPZihbInRvcCIsImxlZnQiLCJyaWdodCIsImJvdHRvbSIsImluc2lkZSIsIm91dHNpZGUiLCJpbnNpZGVMZWZ0IiwiaW5zaWRlUmlnaHQiLCJpbnNpZGVUb3AiLCJpbnNpZGVCb3R0b20iLCJpbnNpZGVUb3BMZWZ0IiwiaW5zaWRlQm90dG9tTGVmdCIsImluc2lkZVRvcFJpZ2h0IiwiaW5zaWRlQm90dG9tUmlnaHQiLCJpbnNpZGVTdGFydCIsImluc2lkZUVuZCIsImVuZCIsImNlbnRlciIsImNlbnRlclRvcCIsImNlbnRlckJvdHRvbSJdKSxjaGlsZHJlbjptLmEub25lT2ZUeXBlKFttLmEuYXJyYXlPZihtLmEubm9kZSksbS5hLm5vZGVdKSxjbGFzc05hbWU6bS5hLnN0cmluZyxjb250ZW50Om0uYS5vbmVPZlR5cGUoW20uYS5lbGVtZW50LG0uYS5mdW5jXSl9KSxjaD1mdW5jdGlvbihlKXt2YXIgdD1lLnZhbHVlLHI9ZS5mb3JtYXR0ZXIsbj1mKCkoZS5jaGlsZHJlbik/dDplLmNoaWxkcmVuO3JldHVybiB1KCkocik/cihuKTpufSxmaD1mdW5jdGlvbihlLHQscil7dmFyIG4saSxvPWUucG9zaXRpb24sYT1lLnZpZXdCb3gscz1lLm9mZnNldCx1PWUuY2xhc3NOYW1lLGM9YS5jeCxsPWEuY3ksaD1hLmlubmVyUmFkaXVzLHA9YS5vdXRlclJhZGl1cyxkPWEuc3RhcnRBbmdsZSx5PWEuZW5kQW5nbGUsdj1hLmNsb2NrV2lzZSxtPShoK3ApLzIsYj1mdW5jdGlvbihlLHQpe3JldHVybiBOKHQtZSkqTWF0aC5taW4oTWF0aC5hYnModC1lKSwzNjApfShkLHkpLFM9Yj49MD8xOi0xOyJpbnNpZGVTdGFydCI9PT1vPyhuPWQrUypzLGk9dik6Imluc2lkZUVuZCI9PT1vPyhuPXktUypzLGk9IXYpOiJlbmQiPT09byYmKG49eStTKnMsaT12KSxpPWI8PTA/aTohaTt2YXIgRT1KbChjLGwsbSxuKSx3PUpsKGMsbCxtLG4rMzU5KihpPzE6LTEpKSxUPSJNIi5jb25jYXQoRS54LCIsIikuY29uY2F0KEUueSwiXG4gICAgQSIpLmNvbmNhdChtLCIsIikuY29uY2F0KG0sIiwwLDEsIikuY29uY2F0KGk/MDoxLCIsXG4gICAgIikuY29uY2F0KHcueCwiLCIpLmNvbmNhdCh3LnkpLEE9ZigpKGUuaWQpP0woInJlY2hhcnRzLXJhZGlhbC1saW5lLSIpOmUuaWQ7cmV0dXJuIGcuYS5jcmVhdGVFbGVtZW50KCJ0ZXh0IixpaCh7fSxyLHtkb21pbmFudEJhc2VsaW5lOiJjZW50cmFsIixjbGFzc05hbWU6XygpKCJyZWNoYXJ0cy1yYWRpYWwtYmFyLWxhYmVsIix1KX0pLGcuYS5jcmVhdGVFbGVtZW50KCJkZWZzIixudWxsLGcuYS5jcmVhdGVFbGVtZW50KCJwYXRoIix7aWQ6QSxkOlR9KSksZy5hLmNyZQ=="
}

Changelog:

{
    "2019.12.27 16:44": "base64:ZW5kLWljb24ifSk6InJlY3QiPT09ZS50eXBlP2cuYS5jcmVhdGVFbGVtZW50KCJwYXRoIix7c3Ryb2tlOiJub25lIixmaWxsOnIsZDoiTTAsIi5jb25jYXQoNCwiaCIpLmNvbmNhdCgzMiwidiIpLmNvbmNhdCgyNCwiaCIpLmNvbmNhdCgtMzIsInoiKSxjbGFzc05hbWU6InJlY2hhcnRzLWxlZ2VuZC1pY29uIn0pOmcuYS5jcmVhdGVFbGVtZW50KFpmLHtmaWxsOnIsY3g6MTYsY3k6MTYsc2l6ZTozMixzaXplVHlwZToiZGlhbWV0ZXIiLHR5cGU6ZS50eXBlfSl9fSx7a2V5OiJyZW5kZXJJdGVtcyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wcyxyPXQucGF5bG9hZCxuPXQuaWNvblNpemUsaT10LmxheW91dCxvPXQuZm9ybWF0dGVyLGE9e3g6MCx5OjAsd2lkdGg6MzIsaGVpZ2h0OjMyfSxzPXtkaXNwbGF5OiJob3Jpem9udGFsIj09PWk/ImlubGluZS1ibG9jayI6ImJsb2NrIixtYXJnaW5SaWdodDoxMH0sdT17ZGlzcGxheToiaW5saW5lLWJsb2NrIix2ZXJ0aWNhbEFsaWduOiJtaWRkbGUiLG1hcmdpblJpZ2h0OjR9O3JldHVybiByLm1hcChmdW5jdGlvbih0LHIpe3ZhciBpLGM9dC5mb3JtYXR0ZXJ8fG8sZj1fKCkoKHRsKGk9eyJyZWNoYXJ0cy1sZWdlbmQtaXRlbSI6ITB9LCJsZWdlbmQtaXRlbS0iLmNvbmNhdChyKSwhMCksdGwoaSwiaW5hY3RpdmUiLHQuaW5hY3RpdmUpLGkpKTtyZXR1cm4ibm9uZSI9PT10LnR5cGU/bnVsbDpnLmEuY3JlYXRlRWxlbWVudCgibGkiLGVsKHtjbGFzc05hbWU6ZixzdHlsZTpzLGtleToibGVnZW5kLWl0ZW0tIi5jb25jYXQocil9LGllKGUucHJvcHMsdCxyKSksZy5hLmNyZWF0ZUVsZW1lbnQoVWYse3dpZHRoOm4saGVpZ2h0Om4sdmlld0JveDphLHN0eWxlOnV9LGUucmVuZGVySWNvbih0KSksZy5hLmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6InJlY2hhcnRzLWxlZ2VuZC1pdGVtLXRleHQifSxjP2ModC52YWx1ZSx0LHIpOnQudmFsdWUpKX0pfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnBheWxvYWQscj1lLmxheW91dCxuPWUuYWxpZ247aWYoIXR8fCF0Lmxlbmd0aClyZXR1cm4gbnVsbDt2YXIgaT17cGFkZGluZzowLG1hcmdpbjowLHRleHRBbGlnbjoiaG9yaXpvbnRhbCI9PT1yP246ImxlZnQifTtyZXR1cm4gZy5hLmNyZWF0ZUVsZW1lbnQoInVsIix7Y2xhc3NOYW1lOiJyZWNoYXJ0cy1kZWZhdWx0LWxlZ2VuZCIsc3R5bGU6aX0sdGhpcy5yZW5kZXJJdGVtcygpKX19XSkmJnJsKHIucHJvdG90eXBlLG4pLGkmJnJsKHIsaSksdH0oKSxZZi5kaXNwbGF5TmFtZT0iTGVnZW5kIixZZi5wcm9wVHlwZXM9e2NvbnRlbnQ6bS5hLmVsZW1lbnQsaWNvblNpemU6bS5hLm51bWJlcixpY29uVHlwZTptLmEub25lT2YoY2wpLGxheW91dDptLmEub25lT2YoWyJob3Jpem9udGFsIiwidmVydGljYWwiXSksYWxpZ246bS5hLm9uZU9mKFsiY2VudGVyIiwibGVmdCIsInJpZ2h0Il0pLHZlcnRpY2FsQWxpZ246bS5hLm9uZU9mKFsidG9wIiwiYm90dG9tIiwibWlkZGxlIl0pLHBheWxvYWQ6bS5hLmFycmF5T2YobS5hLnNoYXBlKHt2YWx1ZTptLmEuYW55LGlkOm0uYS5hbnksdHlwZTptLmEub25lT2YoWCl9KSksaW5hY3RpdmVDb2xvcjptLmEuc3RyaW5nLGZvcm1hdHRlcjptLmEuZnVuYyxvbk1vdXNlRW50ZXI6bS5hLmZ1bmMsb25Nb3VzZUxlYXZlOm0uYS5mdW5jLG9uQ2xpY2s6bS5hLmZ1bmN9LFlmLmRlZmF1bHRQcm9wcz17aWNvblNpemU6MTQsbGF5b3V0OiJob3Jpem9udGFsIixhbGlnbjoiY2VudGVyIix2ZXJ0aWNhbEFsaWduOiJtaWRkbGUiLGluYWN0aXZlQ29sb3I6IiNjY2MifSxXZj1YZikpfHxXZjtmdW5jdGlvbiBsbChlKXtyZXR1cm4obGw9ImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBobChlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9LG49T2JqZWN0LmtleXMocik7ImZ1bmN0aW9uIj09PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYobj1uLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHIpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLGUpLmVudW1lcmFibGV9KSkpLG4uZm9yRWFjaChmdW5jdGlvbih0KXtwbChlLHQsclt0XSl9KX1yZXR1cm4gZX1mdW5jdGlvbiBwbChlLHQscil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1yLGV9ZnVuY3Rpb24gZGwoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiB5bChlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PWxsKHQpJiYiZnVuY3Rpb24iIT09dHlwZW9mIHQ/ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKTp0fWZ1bmN0aW9uIGdsKGUpe3JldHVybihnbD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24gdmwoZSx0KXtyZXR1cm4odmw9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfXZhciBtbD1mdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZX0sYmw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4hMD09PWU/TmYoKSh0LG1sKTp1KCkoZSk/TmYoKSh0LGUpOnR9LF9sPVguZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiJub25lIiE9PWV9KSxTbD1LKCh1bD1zbD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUscjshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KTtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxpPW5ldyBBcnJheShuKSxvPTA7bzxuO28rKylpW29dPWFyZ3VtZW50c1tvXTtyZXR1cm4ocj15bCh0aGlzLChlPWdsKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpKS5zdGF0ZT17Ym94V2lkdGg6LTEsYm94SGVpZ2h0Oi0xfSxyfXZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJnZsKGUsdCl9KHQseVsiQ29tcG9uZW50Il0pLHI9dCxpPVt7a2V5OiJnZXRXaXRoSGVpZ2h0Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPWUucHJvcHMubGF5b3V0O3JldHVybiJ2ZXJ0aWNhbCI9PT1yJiZSKGUucHJvcHMuaGVpZ2h0KT97aGVpZ2h0OmUucHJvcHMuaGVpZ2h0fToiaG9yaXpvbnRhbCI9PT1yP3t3aWR0aDplLnByb3BzLndpZHRofHx0fTpudWxsfX1dLChuPVt7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnVwZGF0ZUJCb3goKX19LHtrZXk6ImNvbXBvbmVudERpZFVwZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnVwZGF0ZUJCb3goKX19LHtrZXk6ImdldEJCb3giLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdGF0ZSx0PWUuYm94V2lkdGgscj1lLmJveEhlaWdodDtyZXR1cm4gdD49MCYmcj49MD97d2lkdGg6dCxoZWlnaHQ6cn06bnVsbH19LHtrZXk6ImdldERlZmF1bHRQb3NpdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscixuPXRoaXMucHJvcHMsaT1uLmxheW91dCxvPW4uYWxpZ24sYT1uLnZlcnRpY2FsQWxpZ24scz1uLm1hcmdpbix1PW4uY2hhcnRXaWR0aCxjPW4uY2hhcnRIZWlnaHQ7ZSYmKHZvaWQgMCE9PWUubGVmdCYmbnVsbCE9PWUubGVmdHx8dm9pZCAwIT09ZS5yaWdodCYmbnVsbCE9PWUucmlnaHQpfHwodD0iY2VudGVyIj09PW8mJiJ2ZXJ0aWNhbCI9PT1pP3tsZWZ0OigodXx8MCktKHRoaXMuZ2V0QkJveCgpfHx7d2lkdGg6MH0pLndpZHRoKS8yfToicmlnaHQiPT09bz97cmlnaHQ6cyYmcy5yaWdodHx8MH06e2xlZnQ6cyYmcy5sZWZ0fHwwfSk7ZSYmKHZvaWQgMCE9PWUudG9wJiZudWxsIT09ZS50b3B8fHZvaWQgMCE9PWUuYm90dG9tJiZudWxsIT09ZS5ib3R0b20pfHwocj0ibWlkZGxlIj09PWE/e3RvcDooKGN8fDApLSh0aGlzLmdldEJCb3goKXx8e2hlaWdodDowfSkuaGVpZ2h0KS8yfToiYm90dG9tIj09PWE/e2JvdHRvbTpzJiZzLmJvdHRvbXx8MH06e3RvcDpzJiZzLnRvcHx8MH0pO3JldHVybiBobCh7fSx0LHIpfX0se2tleToidXBkYXRlQkJveCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0YXRlLHQ9ZS5ib3hXaWR0aCxyPWUuYm94SGVpZ2h0LG49dGhpcy5wcm9wcy5vbkJCb3hVcGRhdGU7aWYodGhpcy53cmFwcGVyTm9kZSYmdGhpcy53cmFwcGVyTm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3Qpe3ZhciBpPXRoaXMud3JhcHBlck5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7KE1hdGguYWJzKGkud2lkdGgtdCk+MXx8TWF0aC5hYnMoaS5oZWlnaHQtcik+MSkmJnRoaXMuc2V0U3RhdGUoe2JveFdpZHRoOmkud2lkdGgsYm94SGVpZ2h0OmkuaGVpZ2h0fSxmdW5jdGlvbigpe24mJm4oaSl9KX1lbHNlLTE9PT10JiYtMT09PXJ8fHRoaXMuc2V0U3RhdGUoe2JveFdpZHRoOi0xLGJveEhlaWdodDotMX0sZnVuY3Rpb24oKXtuJiZuKG51bGwpfSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMscj10LmNvbnRlbnQsbj10LndpZHRoLGk9dC5oZWlnaHQsbz10LndyYXBwZXJTdHlsZSxhPXQucGF5bG9kVW5pcUJ5LHM9dC5wYXlsb2FkLGM9aGwoe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsd2lkdGg6bnx8ImF1dG8iLGhlaWdodDppfHwiYXV0byJ9LHRoaXMuZ2V0RGVmYXVsdFBvc2l0aW9uKG8pLG8pO3JldHVybiBnLmEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJyZWNoYXJ0cy1sZWdlbmQtd3JhcHBlciIsc3R5bGU6YyxyZWY6ZnVuY3Rpb24odCl7ZS53cmFwcGVyTm9kZT10fX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gZy5hLmlzVmFsaWRFbGVtZW50KGUpP2cuYS5jbG9uZUVsZW1lbnQoZSx0KTp1KCkoZSk/ZSh0KTpnLmEuY3JlYXRlRWxlbWVudChmbCx0KX0ocixobCh7fSx0aGlzLnByb3BzLHtwYXlsb2FkOmJsKGEscyl9KSkpfX1dKSYmZGwoci5wcm90b3R5cGUsbiksaSYmZGwocixpKSx0fSgpLHNsLmRpc3BsYXlOYW1lPSJMZWdlbmQiLHNsLnByb3BUeXBlcz17Y29udGVudDptLmEub25lT2ZUeXBlKFttLmEuZWxlbWVudCxtLmEuZnVuY10pLHdyYXBwZXJTdHlsZTptLmEub2JqZWN0LGNoYXJ0V2lkdGg6bS5hLm51bWJlcixjaGFydEhlaWdodDptLmEubnVtYmVyLHdpZHRoOm0uYS5udW1iZXIsaGVpZ2h0Om0uYS5udW1iZXIsaWNvblNpemU6bS5hLm51bWJlcixpY29uVHlwZTptLmEub25lT2YoX2wpLGxheW91dDptLmEub25lT2YoWyJob3Jpem9udGFsIiwidmVydGljYWwiXSksYWxpZ246bS5hLm9uZU9mKFsiY2VudGVyIiwibGVmdCIsInJpZ2h0Il0pLHZlcnRpY2FsQWxpZ246bS5hLm9uZU9mKFsidG9wIiwiYm90dG9tIiwibWlkZGxlIl0pLG1hcmdpbjptLmEuc2hhcGUoe3RvcDptLmEubnVtYmVyLGxlZnQ6bS5hLm51bWJlcixib3R0b206bS5hLm51bWJlcixyaWdodDptLmEubnVtYmVyfSkscGF5bG9hZDptLmEuYXJyYXlPZihtLmEuc2hhcGUoe3ZhbHVlOm0uYS5hbnksaWQ6bS5hLmFueSx0eXBlOm0uYS5vbmVPZihYKX0pKSxwYXlsb2RVbmlxQnk6bS5hLm9uZU9mVHlwZShbbS5hLmZ1bmMsbS5hLmJvb2xdKSxmb3JtYXR0ZXI6bS5hLmZ1bmMsb25Nb3VzZUVudGVyOm0uYS5mdW5jLG9uTW91c2VMZWF2ZTptLmEuZnVuYyxvbkNsaWNrOm0uYS5mdW5jLG9uQkJveFVwZGF0ZTptLmEuZnVuY30sc2wuZGVmYXVsdFByb3BzPXtpY29uU2l6ZToxNCxsYXlvdXQ6Imhvcml6b250YWwiLGFsaWduOiJjZW50ZXIiLHZlcnRpY2FsQWxpZ246ImJvdHRvbSJ9LGFsPXVsKSl8fGFsO2Z1bmN0aW9uIEVsKGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHQ9MCxyPW5ldyBBcnJheShlLmxlbmd0aCk7dDxlLmxlbmd0aDt0Kyspclt0XT1lW3RdO3JldHVybiByfX0oZSl8fGZ1bmN0aW9uKGUpe2lmKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoZSl8fCJbb2JqZWN0IEFyZ3VtZW50c10iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfSgpfWZ1bmN0aW9uIHdsKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30sbj1PYmplY3Qua2V5cyhyKTsiZnVuY3Rpb24iPT09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihuPW4uY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkuZW51bWVyYWJsZX0pKSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe1RsKGUsdCxyW3RdKX0pfXJldHVybiBlfWZ1bmN0aW9uIFRsKGUsdCxyKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPXIsZX12YXIgQWw9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBmKCkoZSl8fGYoKSh0KT9yOkIodCk/VCgpKGUsdCxyKTp1KCkodCk/dChlKTpyfSxDbD1mdW5jdGlvbihlLHQscixuKXt2YXIgaT1GZSgpKGUsZnVuY3Rpb24oZSl7cmV0dXJuIEFsKGUsdCl9KTtpZigibnVtYmVyIj09PXIpe3ZhciBvPWkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBSKGUpfHxwYXJzZUZsb2F0KGUsMTApfSk7cmV0dXJuIG8ubGVuZ3RoP1tqZSgpKG8pLExlKCkobyldOlsxLzAsLTEvMF19cmV0dXJuKG4/aS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWYoKShlKX0pOmkpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gQihlKT9lOiIifSl9LHhsPWZ1bmN0aW9uKGUpe3ZhciB0O3N3aXRjaChlLnR5cGUuZGlzcGxheU5hbWUpe2Nhc2UiTGluZSI6Y2FzZSJBcmVhIjpjYXNlIlJhZGFyIjp0PWUucHJvcHMuc3Ryb2tlO2JyZWFrO2RlZmF1bHQ6dD1lLnByb3BzLmZpbGx9cmV0dXJuIHR9LElsPWZ1bmN0aW9uKGUpe3ZhciB0LHI9ZS5jaGlsZHJlbixuPWUuZm9ybWF0ZWRHcmFwaGljYWxJdGVtcyxpPWUubGVnZW5kV2lkdGgsbz1lLmxlZ2VuZENvbnRlbnQsYT1KKHIsU2wpO3JldHVybiBhPyh0PWEucHJvcHMmJmEucHJvcHMucGF5bG9hZD9hLnByb3BzJiZhLnByb3BzLnBheWxvYWQ6ImNoaWxkcmVuIj09PW8/KG58fFtdKS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXt2YXIgcj10Lml0ZW0sbj10LnByb3BzLGk9bi5zZWN0b3JzfHxuLmRhdGF8fFtdO3JldHVybiBlLmNvbmNhdChpLm1hcChmdW5jdGlvbihlKXtyZXR1cm57dHlwZTphLnByb3BzLmljb25UeXBlfHxyLnByb3BzLmxlZ2VuZFR5cGUsdmFsdWU6ZS5uYW1lLGNvbG9yOmUuZmlsbCxwYXlsb2FkOmV9fSkpfSxbXSk6KG58fFtdKS5tYXAoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pdGVtLHI9dC5wcm9wcyxuPXIuZGF0YUtleSxpPXIubmFtZSxvPXIubGVnZW5kVHlwZTtyZXR1cm57aW5hY3RpdmU6ci5oaWRlLGRhdGFLZXk6bix0eXBlOmEucHJvcHMuaWNvblR5cGV8fG98fCJzcXVhcmUiLGNvbG9yOnhsKHQpLHZhbHVlOml8fG4scGF5bG9hZDp0LnByb3BzfX0pLHdsKHt9LGEucHJvcHMsU2wuZ2V0V2l0aEhlaWdodChhLGkpLHtwYXlsb2FkOnQsaXRlbTphfSkpOm51bGx9LGtsPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBpPXQucHJvcHMuY2hpbGRyZW4sbz1aKGksa2YpLmZpbHRlcihmdW5jdGlvbihlKXt2YXIgdD1lLnByb3BzLmRpcmVjdGlvbjtyZXR1cm4hKCFmKCkodCkmJiFmKCkobikpfHxuLmluZGV4T2YodCk+PTB9KTtpZihvJiZvLmxlbmd0aCl7dmFyIGE9by5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUucHJvcHMuZGF0YUtleX0pO3JldHVybiBlLnJlZHVjZShmdW5jdGlvbihlLHQpe3ZhciBuPUFsKHQsciwwKSxpPWQoKShuKT9bamUoKShuKSxMZSgpKG4pXTpbbixuXSxvPWEucmVkdWNlKGZ1bmN0aW9uKGUscil7dmFyIG49QWwodCxyLDApLG89aVswXS1NYXRoLmFicyhkKCkobik/blswXTpuKSxhPWlbMV0rTWF0aC5hYnMoZCgpKG4pP25bMV06bik7cmV0dXJuW01hdGgubWluKG8sZVswXSksTWF0aC5tYXgoYSxlWzFdKV19LFsxLzAsLTEvMF0pO3JldHVybltNYXRoLm1pbihvWzBdLGVbMF0pLE1hdGgubWF4KG9bMV0sZVsxXSldfSxbMS8wLC0xLzBdKX1yZXR1cm4gbnVsbH0sT2w9ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGk9dC5tYXAoZnVuY3Rpb24odCl7dmFyIGk9dC5wcm9wcy5kYXRhS2V5O3JldHVybiJudW1iZXIiPT09ciYmaSYma2woZSx0LGkpfHxDbChlLGkscixuKX0pO2lmKCJudW1iZXIiPT09cilyZXR1cm4gaS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm5bTWF0aC5taW4oZVswXSx0WzBdKSxNYXRoLm1heChlWzFdLHRbMV0pXX0sWzEvMCwtMS8wXSk7dmFyIG89e307cmV0dXJuIGkucmVkdWNlKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPTAsbj10Lmxlbmd0aDtyPG47cisrKW9bdFtyXV18fChvW3Rbcl1dPSEwLGUucHVzaCh0W3JdKSk7cmV0dXJuIGV9LFtdKX0sTmw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4iaG9yaXpvbnRhbCI9PT1lJiYieEF4aXMiPT09dHx8InZlcnRpY2FsIj09PWUmJiJ5QXhpcyI9PT10fHwiY2VudHJpYyI9PT1lJiYiYW5nbGVBeGlzIj09PXR8fCJyYWRpYWwiPT09ZSYmInJhZGl1c0F4aXMiPT09dH0sUGw9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGksbz1lLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5jb29yZGluYXRlPT09dCYmKG49ITApLGUuY29vcmRpbmF0ZT09PXImJihpPSEwKSxlLmNvb3JkaW5hdGV9KTtyZXR1cm4gbnx8by5wdXNoKHQpLGl8fG8ucHVzaChyKSxvfSxSbD1mdW5jdGlvbihlLHQscil7aWYoIWUpcmV0dXJuIG51bGw7dmFyIG49ZS5zY2FsZSxpPWUuZHVwbGljYXRlRG9tYWluLG89ZS50eXBlLGE9ZS5yYW5nZSxzPSh0fHxyKSYmImNhdGVnb3J5Ij09PW8mJm4uYmFuZHdpZHRoP24uYmFuZHdpZHRoKCkvMjowO3JldHVybiBzPSJhbmdsZUF4aXMiPT09ZS5heGlzVHlwZT8yKk4oYVswXS1hWzFdKSpzOnMsdCYmKGUudGlja3N8fGUubmljZVRpY2tzKT8oZS50aWNrc3x8ZS5uaWNlVGlja3MpLm1hcChmdW5jdGlvbihlKXt2YXIgdD1pP2kuaW5kZXhPZihlKTplO3JldHVybntjb29yZGluYXRlOm4odCkrcyx2YWx1ZTplLG9mZnNldDpzfX0pOmUuaXNDYXRlZ29yaWFsJiZlLmNhdGVnb3JpY2FsRG9tYWluP2UuY2F0ZWdvcmljYWxEb21haW4ubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJue2Nvb3JkaW5hdGU6bihlKSx2YWx1ZTplLGluZGV4OnQsb2Zmc2V0OnN9fSk6bi50aWNrcyYmIXI/bi50aWNrcyhlLnRpY2tDb3VudCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybntjb29yZGluYXRlOm4oZSkrcyx2YWx1ZTplLG9mZnNldDpzfX0pOm4uZG9tYWluKCkubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJue2Nvb3JkaW5hdGU6bihlKStzLHZhbHVlOmk/aVtlXTplLGluZGV4OnQsb2Zmc2V0OnN9fSl9LEJsPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbjtyZXR1cm4gdSgpKHIpP249cjp1KCkodCkmJihuPXQpLHUoKShlKXx8bj9mdW5jdGlvbih0LHIsaSxvKXt1KCkoZSkmJmUodCxyLGksbyksdSgpKG4pJiZuKHQscixpLG8pfTpudWxsfSxNbD1mdW5jdGlvbihlLHQpe3ZhciByPWUuc2NhbGUsaT1lLnR5cGUsbz1lLmxheW91dCxhPWUuYXhpc1R5cGU7aWYoImF1dG8iPT09cilyZXR1cm4icmFkaWFsIj09PW8mJiJyYWRpdXNBeGlzIj09PWE/e3NjYWxlOmd0KCkscmVhbFNjYWxlVHlwZToiYmFuZCJ9OiJyYWRpYWwiPT09byYmImFuZ2xlQXhpcyI9PT1hP3tzY2FsZTp3bigpLHJlYWxTY2FsZVR5cGU6ImxpbmVhciJ9OiJjYXRlZ29yeSI9PT1pJiZ0JiYodC5pbmRleE9mKCJMaW5lQ2hhcnQiKT49MHx8dC5pbmRleE9mKCJBcmVhQ2hhcnQiKT49MCk/e3NjYWxlOnZ0KCkscmVhbFNjYWxlVHlwZToicG9pbnQifToiY2F0ZWdvcnkiPT09aT97c2NhbGU6Z3QoKSxyZWFsU2NhbGVUeXBlOiJiYW5kIn06e3NjYWxlOnduKCkscmVhbFNjYWxlVHlwZToibGluZWFyIn07aWYoTygpKHIpKXt2YXIgcz0ic2NhbGUiLmNvbmNhdChyLnNsaWNlKDAsMSkudG9VcHBlckNhc2UoKSkuY29uY2F0KHIuc2xpY2UoMSkpO3JldHVybntzY2FsZToobltzXXx8dnQpKCkscmVhbFNjYWxlVHlwZTpuW3NdP3M6InBvaW50In19cmV0dXJuIHUoKShyKT97c2NhbGU6cn06e3NjYWxlOnZ0KCkscmVhbFNjYWxlVHlwZToicG9pbnQifX0sTGw9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kb21haW4oKTtpZih0JiYhKHQubGVuZ3RoPD0yKSl7dmFyIHI9dC5sZW5ndGgsbj1lLnJhbmdlKCksaT1NYXRoLm1pbihuWzBdLG5bMV0pLTFlLTQsbz1NYXRoLm1heChuWzBdLG5bMV0pKzFlLTQsYT1lKHRbMF0pLHM9ZSh0W3ItMV0pOyhhPGl8fGE+b3x8czxpfHxzPm8pJiZlLmRvbWFpbihbdFswXSx0W3ItMV1dKX19LERsPXtzaWduOmZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoO2lmKCEodDw9MCkpZm9yKHZhciByPTAsbj1lWzBdLmxlbmd0aDtyPG47KytyKWZvcih2YXIgaT0wLG89MCxhPTA7YTx0OysrYSl7dmFyIHM9QygpKGVbYV1bcl1bMV0pP2VbYV1bcl1bMF06ZVthXVtyXVsxXTtzPj0wPyhlW2FdW3JdWzBdPWksZVthXVtyXVsxXT1pK3MsaT1lW2FdW3JdWzFdKTooZVthXVtyXVswXT1vLGVbYV1bcl1bMV09bytzLG89ZVthXVtyXVsxXSl9fSxleHBhbmQ6ZnVuY3Rpb24oZSx0KXtpZigobj1lLmxlbmd0aCk+MCl7Zm9yKHZhciByLG4saSxvPTAsYT1lWzBdLmxlbmd0aDtvPGE7KytvKXtmb3IoaT1yPTA7cjxuOysrcilpKz1lW3JdW29dWzFdfHwwO2lmKGkpZm9yKHI9MDtyPG47KytyKWVbcl1bb11bMV0vPWl9QnMoZSx0KX19LG5vbmU6QnMsc2lsaG91ZXR0ZTpmdW5jdGlvbihlLHQpe2lmKChyPWUubGVuZ3RoKT4wKXtmb3IodmFyIHIsbj0wLGk9ZVt0WzBdXSxvPWkubGVuZ3RoO248bzsrK24pe2Zvcih2YXIgYT0wLHM9MDthPHI7KythKXMrPWVbYV1bbl1bMV18fDA7aVtuXVsxXSs9aVtuXVswXT0tcy8yfUJzKGUsdCl9fSx3aWdnbGU6ZnVuY3Rpb24oZSx0KXtpZigoaT1lLmxlbmd0aCk+MCYmKG49KHI9ZVt0WzBdXSkubGVuZ3RoKT4wKXtmb3IodmFyIHIsbixpLG89MCxhPTE7YTxuOysrYSl7Zm9yKHZhciBzPTAsdT0wLGM9MDtzPGk7KytzKXtmb3IodmFyIGY9ZVt0W3NdXSxsPWZbYV1bMV18fDAsaD0obC0oZlthLTFdWzFdfHwwKSkvMixwPTA7cDxzOysrcCl7dmFyIGQ9ZVt0W3BdXTtoKz0oZFthXVsxXXx8MCktKGRbYS0xXVsxXXx8MCl9dSs9bCxjKz1oKmx9clthLTFdWzFdKz1yW2EtMV1bMF09byx1JiYoby09Yy91KX1yW2EtMV1bMV0rPXJbYS0xXVswXT1vLEJzKGUsdCl9fX0samw9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXQubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnByb3BzLmRhdGFLZXl9KTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1CYShbXSksdD1NcyxyPUJzLG49THM7ZnVuY3Rpb24gaShpKXt2YXIgbyxhLHM9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdT1pLmxlbmd0aCxjPXMubGVuZ3RoLGY9bmV3IEFycmF5KGMpO2ZvcihvPTA7bzxjOysrbyl7Zm9yKHZhciBsLGg9c1tvXSxwPWZbb109bmV3IEFycmF5KHUpLGQ9MDtkPHU7KytkKXBbZF09bD1bMCwrbihpW2RdLGgsZCxpKV0sbC5kYXRhPWlbZF07cC5rZXk9aH1mb3Iobz0wLGE9dChmKTtvPGM7KytvKWZbYVtvXV0uaW5kZXg9bztyZXR1cm4gcihmLGEpLGZ9cmV0dXJuIGkua2V5cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT09dHlwZW9mIHQ/dDpCYShIYS5jYWxsKHQpKSxpKTplfSxpLnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PT10eXBlb2YgZT9lOkJhKCtlKSxpKTpufSxpLm9yZGVyPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW51bGw9PWU/TXM6ImZ1bmN0aW9uIj09PXR5cGVvZiBlP2U6QmEoSGEuY2FsbChlKSksaSk6dH0saS5vZmZzZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09ZT9CczplLGkpOnJ9LGl9KCkua2V5cyhuKS52YWx1ZShmdW5jdGlvbihlLHQpe3JldHVybitBbChlLHQsMCl9KS5vcmRlcihNcykub2Zmc2V0KERsW3JdKShlKX0sVWw9ZnVuY3Rpb24oZSx0KXt2YXIgcj10LnJlYWxTY2FsZVR5cGUsbj10LnR5cGUsaT10LnRpY2tDb3VudCxvPXQub3JpZ2luYWxEb21haW4sYT10LmFsbG93RGVjaW1hbHMscz1yfHx0LnNjYWxlO2lmKCJhdXRvIiE9PXMmJiJsaW5lYXIiIT09cylyZXR1cm4gbnVsbDtpZihpJiYibnVtYmVyIj09PW4mJm8mJigiYXV0byI9PT1vWzBdfHwiYXV0byI9PT1vWzFdKSl7dmFyIHU9ZS5kb21haW4oKSxjPU9iamVjdChWZS5nZXROaWNlVGlja1ZhbHVlcykodSxpLGEpO3JldHVybiBlLmRvbWFpbihmdW5jdGlvbihlLHQpe3JldHVybiJudW1iZXIiPT09dD9bamUoKShlKSxMZSgpKGUpXTplfShjLG4pKSx7bmljZVRpY2tzOmN9fWlmKGkmJiJudW1iZXIiPT09bil7dmFyIGY9ZS5kb21haW4oKTtyZXR1cm57bmljZVRpY2tzOk9iamVjdChWZS5nZXRUaWNrVmFsdWVzRml4ZWREb21haW4pKGYsaSxhKX19cmV0dXJuIG51bGx9LEZsPWZ1bmN0aW9uKGUpe3ZhciB0PWUuYXhpcyxyPWUudGlja3Msbj1lLmJhbmRTaXplLGk9ZS5lbnRyeSxvPWUuaW5kZXgsYT1lLmRhdGFLZXk7aWYoImNhdGVnb3J5Ij09PXQudHlwZSl7aWYoIXQuYWxsb3dEdXBsaWNhdGVkQ2F0ZWdvcnkmJnQuZGF0YUtleSYmIWYoKShpW3QuZGF0YUtleV0pKXt2YXIgcz1GKHIsInZhbHVlIixpW3QuZGF0YUtleV0pO2lmKHMpcmV0dXJuIHMuY29vcmRpbmF0ZStuLzJ9cmV0dXJuIHJbb10/cltvXS5jb29yZGluYXRlK24vMjpudWxsfXZhciB1PUFsKGksZigpKGEpP3QuZGF0YUtleTphKTtyZXR1cm4gZigpKHUpP251bGw6dC5zY2FsZSh1KX0sVmw9ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmFsd2F5c1Nob3csbj1lLmlmT3ZlcmZsb3c7cmV0dXJuIHImJihuPSJleHRlbmREb21haW4iKSxuPT09dH0scWw9ZnVuY3Rpb24oZSx0LHIsbixpKXt2YXIgbz1aKGUsTHUpLGE9WihlLFR1KSxzPW8uY29uY2F0KGEpLHU9WihlLGJmKSxjPSIiLmNvbmNhdChuLCJJZCIpLGY9blswXSxsPXQ7aWYocy5sZW5ndGgmJihsPXMucmVkdWNlKGZ1bmN0aW9uKGUsdCl7aWYodC5wcm9wc1tjXT09PXImJlZsKHQucHJvcHMsImV4dGVuZERvbWFpbiIpJiZSKHQucHJvcHNbZl0pKXt2YXIgbj10LnByb3BzW2ZdO3JldHVybltNYXRoLm1pbihlWzBdLG4pLE1hdGgubWF4KGVbMV0sbildfXJldHVybiBlfSxsKSksdS5sZW5ndGgpe3ZhciBoPSIiLmNvbmNhdChmLCIxIikscD0iIi5jb25jYXQoZiwiMiIpO2w9dS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtpZih0LnByb3BzW2NdPT09ciYmVmwodC5wcm9wcywiZXh0ZW5kRG9tYWluIikmJlIodC5wcm9wc1toXSkmJlIodC5wcm9wc1twXSkpe3ZhciBuPXQucHJvcHNbaF0saT10LnByb3BzW3BdO3JldHVybltNYXRoLm1pbihlWzBdLG4saSksTWF0aC5tYXgoZVsxXSxuLGkpXX1yZXR1cm4gZX0sbCl9cmV0dXJuIGkmJmkubGVuZ3RoJiYobD1pLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiBSKHQpP1tNYXRoLm1pbihlWzBdLHQpLE1hdGgubWF4KGVbMV0sdCldOmV9LGwpKSxsfSxLbD1mdW5jdGlvbihlLHQscil7cmV0dXJuIE9iamVjdC5rZXlzKGUpLnJlZHVjZShmdW5jdGlvbihuLGkpe3ZhciBvPWVbaV0uc3RhY2tlZERhdGEucmVkdWNlKGZ1bmN0aW9uKGUsbil7dmFyIGk9bi5zbGljZSh0LHIrMSkucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuW2plKCkodC5jb25jYXQoW2VbMF1dKS5maWx0ZXIoUikpLExlKCkodC5jb25jYXQoW2VbMV1dKS5maWx0ZXIoUikpXX0sWzEvMCwtMS8wXSk7cmV0dXJuW01hdGgubWluKGVbMF0saVswXSksTWF0aC5tYXgoZVsxXSxpWzFdKV19LFsxLzAsLTEvMF0pO3JldHVybltNYXRoLm1pbihvWzBdLG5bMF0pLE1hdGgubWF4KG9bMV0sblsxXSldfSxbMS8wLC0xLzBdKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT0xLzB8fGU9PT0tMS8wPzA6ZX0pfSx6bD0vXmRhdGFNaW5bXHNdKi1bXHNdKihbMC05XSsoWy5dezF9WzAtOV0rKXswLDF9KSQvLEdsPS9eZGF0YU1heFtcc10qXCtbXHNdKihbMC05XSsoWy5dezF9WzAtOV0rKXswLDF9KSQvLEhsPWZ1bmN0aW9uKGUsdCxyKXtpZighZCgpKGUpKXJldHVybiB0O3ZhciBuPVtdO2lmKFIoZVswXSkpblswXT1yP2VbMF06TWF0aC5taW4oZVswXSx0WzBdKTtlbHNlIGlmKHpsLnRlc3QoZVswXSkpe3ZhciBpPSt6bC5leGVjKGVbMF0pWzFdO25bMF09dFswXS1pfWVsc2UgdSgpKGVbMF0pP25bMF09ZVswXSh0WzBdKTpuWzBdPXRbMF07aWYoUihlWzFdKSluWzFdPXI/ZVsxXTpNYXRoLm1heChlWzFdLHRbMV0pO2Vsc2UgaWYoR2wudGVzdChlWzFdKSl7dmFyIG89K0dsLmV4ZWMoZVsxXSlbMV07blsxXT10WzFdK299ZWxzZSB1KCkoZVsxXSk/blsxXT1lWzFdKHRbMV0pOm5bMV09dFsxXTtyZXR1cm4gbn0sV2w9ZnVuY3Rpb24oZSx0KXtpZihlJiZlLnNjYWxlJiZlLnNjYWxlLmJhbmR3aWR0aClyZXR1cm4gZS5zY2FsZS5iYW5kd2lkdGgoKTtpZihlJiZ0JiZ0Lmxlbmd0aD49Mil7Zm9yKHZhciByPUJlKCkodCxmdW5jdGlvbihlKXtyZXR1cm4gZS5jb29yZGluYXRlfSksbj0xLzAsaT0xLG89ci5sZW5ndGg7aTxvO2krKyl7dmFyIGE9cltpXSxzPXJbaS0xXTtuPU1hdGgubWluKChhLmNvb3JkaW5hdGV8fDApLShzLmNvb3JkaW5hdGV8fDApLG4pfXJldHVybiBuPT09MS8wPzA6bn1yZXR1cm4gMH0sWWw9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlJiZlLmxlbmd0aD9QZSgpKGUsVCgpKHIsInR5cGUuZGVmYXVsdFByb3BzLmRvbWFpbiIpKT90OmU6dH07ZnVuY3Rpb24gWGwoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fSxuPU9iamVjdC5rZXlzKHIpOyJmdW5jdGlvbiI9PT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKG49bi5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhyKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKS5lbnVtZXJhYmxlfSkpKSxuLmZvckVhY2goZnVuY3Rpb24odCl7UWwoZSx0LHJbdF0pfSl9cmV0dXJuIGV9ZnVuY3Rpb24gUWwoZSx0LHIpe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09cixlfXZhciAkbD1NYXRoLlBJLzE4MCxabD1mdW5jdGlvbihlKXtyZXR1cm4gMTgwKmUvTWF0aC5QSX0sSmw9ZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJue3g6ZStNYXRoLmNvcygtJGwqbikqcix5OnQrTWF0aC5zaW4oLSRsKm4pKnJ9fSxlaD1mdW5jdGlvbihlLHQpe3ZhciByPWUueCxuPWUueSxpPXQuY3gsbz10LmN5LGE9ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLngsbj1lLnksaT10Lngsbz10Lnk7cmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyhyLWksMikrTWF0aC5wb3cobi1vLDIpKX0oe3g6cix5Om59LHt4OmkseTpvfSk7aWYoYTw9MClyZXR1cm57cmFkaXVzOmF9O3ZhciBzPShyLWkpL2EsdT1NYXRoLmFjb3Mocyk7cmV0dXJuIG4+byYmKHU9MipNYXRoLlBJLXUpLHtyYWRpdXM6YSxhbmdsZTpabCh1KSxhbmdsZUluUmFkaWFuOnV9fSx0aD1mdW5jdGlvbihlLHQpe3ZhciByPXQuc3RhcnRBbmdsZSxuPXQuZW5kQW5nbGUsaT1NYXRoLmZsb29yKHIvMzYwKSxvPU1hdGguZmxvb3Iobi8zNjApO3JldHVybiBlKzM2MCpNYXRoLm1pbihpLG8pfSxyaD1mdW5jdGlvbihlLHQpe3ZhciByPWUueCxuPWUueSxpPWVoKHt4OnIseTpufSx0KSxvPWkucmFkaXVzLGE9aS5hbmdsZSxzPXQuaW5uZXJSYWRpdXMsdT10Lm91dGVyUmFkaXVzO2lmKG88c3x8bz51KXJldHVybiExO2lmKDA9PT1vKXJldHVybiEwO3ZhciBjLGY9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdGFydEFuZ2xlLHI9ZS5lbmRBbmdsZSxuPU1hdGguZmxvb3IodC8zNjApLGk9TWF0aC5mbG9vcihyLzM2MCksbz1NYXRoLm1pbihuLGkpO3JldHVybntzdGFydEFuZ2xlOnQtMzYwKm8sZW5kQW5nbGU6ci0zNjAqb319KHQpLGw9Zi5zdGFydEFuZ2xlLGg9Zi5lbmRBbmdsZSxwPWE7aWYobDw9aCl7Zm9yKDtwPmg7KXAtPTM2MDtmb3IoO3A8bDspcCs9MzYwO2M9cD49bCYmcDw9aH1lbHNle2Zvcig7cD5sOylwLT0zNjA7Zm9yKDtwPGg7KXArPTM2MDtjPXA+PWgmJnA8PWx9cmV0dXJuIGM/WGwoe30sdCx7cmFkaXVzOm8sYW5nbGU6dGgocCx0KX0pOm51bGx9O2Z1bmN0aW9uIG5oKGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHQ9MCxyPW5ldyBBcnJheShlLmxlbmd0aCk7dDxlLmxlbmd0aDt0Kyspclt0XT1lW3RdO3JldHVybiByfX0oZSl8fGZ1bmN0aW9uKGUpe2lmKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoZSl8fCJbb2JqZWN0IEFyZ3VtZW50c10iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfSgpfWZ1bmN0aW9uIGloKCl7cmV0dXJuKGloPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPWFyZ3VtZW50c1t0XTtmb3IodmFyIG4gaW4gcilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixuKSYmKGVbbl09cltuXSl9cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gb2goZSx0LHIpe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09cixlfXZhciBhaD1tLmEuc2hhcGUoe3g6bS5hLm51bWJlcix5Om0uYS5udW1iZXIsd2lkdGg6bS5hLm51bWJlcixoZWlnaHQ6bS5hLm51bWJlcn0pLHNoPW0uYS5zaGFwZSh7Y3g6bS5hLm51bWJlcixjeTptLmEubnVtYmVyLGlubmVyUmFkaXVzOm0uYS5udW1iZXIsb3V0ZXJSYWRpdXM6bS5hLm51bWJlcixzdGFydEFuZ2xlOm0uYS5udW1iZXIsZW5kQW5nbGU6bS5hLm51bWJlcn0pLHVoPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30sbj1PYmplY3Qua2V5cyhyKTsiZnVuY3Rpb24iPT09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihuPW4uY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkuZW51bWVyYWJsZX0pKSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe29oKGUsdCxyW3RdKX0pfXJldHVybiBlfSh7fSxILHt2aWV3Qm94Om0uYS5vbmVPZlR5cGUoW2FoLHNoXSksZm9ybWF0dGVyOm0uYS5mdW5jLHZhbHVlOm0uYS5vbmVPZlR5cGUoW20uYS5udW1iZXIsbS5hLnN0cmluZ10pLG9mZnNldDptLmEubnVtYmVyLHBvc2l0aW9uOm0uYS5vbmVPZihbInRvcCIsImxlZnQiLCJyaWdodCIsImJvdHRvbSIsImluc2lkZSIsIm91dHNpZGUiLCJpbnNpZGVMZWZ0IiwiaW5zaWRlUmlnaHQiLCJpbnNpZGVUb3AiLCJpbnNpZGVCb3R0b20iLCJpbnNpZGVUb3BMZWZ0IiwiaW5zaWRlQm90dG9tTGVmdCIsImluc2lkZVRvcFJpZ2h0IiwiaW5zaWRlQm90dG9tUmlnaHQiLCJpbnNpZGVTdGFydCIsImluc2lkZUVuZCIsImVuZCIsImNlbnRlciIsImNlbnRlclRvcCIsImNlbnRlckJvdHRvbSJdKSxjaGlsZHJlbjptLmEub25lT2ZUeXBlKFttLmEuYXJyYXlPZihtLmEubm9kZSksbS5hLm5vZGVdKSxjbGFzc05hbWU6bS5hLnN0cmluZyxjb250ZW50Om0uYS5vbmVPZlR5cGUoW20uYS5lbGVtZW50LG0uYS5mdW5jXSl9KSxjaD1mdW5jdGlvbihlKXt2YXIgdD1lLnZhbHVlLHI9ZS5mb3JtYXR0ZXIsbj1mKCkoZS5jaGlsZHJlbik/dDplLmNoaWxkcmVuO3JldHVybiB1KCkocik/cihuKTpufSxmaD1mdW5jdGlvbihlLHQscil7dmFyIG4saSxvPWUucG9zaXRpb24sYT1lLnZpZXdCb3gscz1lLm9mZnNldCx1PWUuY2xhc3NOYW1lLGM9YS5jeCxsPWEuY3ksaD1hLmlubmVyUmFkaXVzLHA9YS5vdXRlclJhZGl1cyxkPWEuc3RhcnRBbmdsZSx5PWEuZW5kQW5nbGUsdj1hLmNsb2NrV2lzZSxtPShoK3ApLzIsYj1mdW5jdGlvbihlLHQpe3JldHVybiBOKHQtZSkqTWF0aC5taW4oTWF0aC5hYnModC1lKSwzNjApfShkLHkpLFM9Yj49MD8xOi0xOyJpbnNpZGVTdGFydCI9PT1vPyhuPWQrUypzLGk9dik6Imluc2lkZUVuZCI9PT1vPyhuPXktUypzLGk9IXYpOiJlbmQiPT09byYmKG49eStTKnMsaT12KSxpPWI8PTA/aTohaTt2YXIgRT1KbChjLGwsbSxuKSx3PUpsKGMsbCxtLG4rMzU5KihpPzE6LTEpKSxUPSJNIi5jb25jYXQoRS54LCIsIikuY29uY2F0KEUueSwiXG4gICAgQSIpLmNvbmNhdChtLCIsIikuY29uY2F0KG0sIiwwLDEsIikuY29uY2F0KGk/MDoxLCIsXG4gICAgIikuY29uY2F0KHcueCwiLCIpLmNvbmNhdCh3LnkpLEE9ZigpKGUuaWQpP0woInJlY2hhcnRzLXJhZGlhbC1saW5lLSIpOmUuaWQ7cmV0dXJuIGcuYS5jcmVhdGVFbGVtZW50KCJ0ZXh0IixpaCh7fSxyLHtkb21pbmFudEJhc2VsaW5lOiJjZW50cmFsIixjbGFzc05hbWU6XygpKCJyZWNoYXJ0cy1yYWRpYWwtYmFyLWxhYmVsIix1KX0pLGcuYS5jcmVhdGVFbGVtZW50KCJkZWZzIixudWxsLGcuYS5jcmVhdGVFbGVtZW50KCJwYXRoIix7aWQ6QSxkOlR9KSksZy5hLmNyZQ==",
    "2019.12.27 16:43": "base64:ZW5kLWljb24ifSk6InJlY3QiPT09ZS50eXBlP2cuYS5jcmVhdGVFbGVtZW50KCJwYXRoIix7c3Ryb2tlOiJub25lIixmaWxsOnIsZDoiTTAsIi5jb25jYXQoNCwiaCIpLmNvbmNhdCgzMiwidiIpLmNvbmNhdCgyNCwiaCIpLmNvbmNhdCgtMzIsInoiKSxjbGFzc05hbWU6InJlY2hhcnRzLWxlZ2VuZC1pY29uIn0pOmcuYS5jcmVhdGVFbGVtZW50KFpmLHtmaWxsOnIsY3g6MTYsY3k6MTYsc2l6ZTozMixzaXplVHlwZToiZGlhbWV0ZXIiLHR5cGU6ZS50eXBlfSl9fSx7a2V5OiJyZW5kZXJJdGVtcyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wcyxyPXQucGF5bG9hZCxuPXQuaWNvblNpemUsaT10LmxheW91dCxvPXQuZm9ybWF0dGVyLGE9e3g6MCx5OjAsd2lkdGg6MzIsaGVpZ2h0OjMyfSxzPXtkaXNwbGF5OiJob3Jpem9udGFsIj09PWk/ImlubGluZS1ibG9jayI6ImJsb2NrIixtYXJnaW5SaWdodDoxMH0sdT17ZGlzcGxheToiaW5saW5lLWJsb2NrIix2ZXJ0aWNhbEFsaWduOiJtaWRkbGUiLG1hcmdpblJpZ2h0OjR9O3JldHVybiByLm1hcChmdW5jdGlvbih0LHIpe3ZhciBpLGM9dC5mb3JtYXR0ZXJ8fG8sZj1fKCkoKHRsKGk9eyJyZWNoYXJ0cy1sZWdlbmQtaXRlbSI6ITB9LCJsZWdlbmQtaXRlbS0iLmNvbmNhdChyKSwhMCksdGwoaSwiaW5hY3RpdmUiLHQuaW5hY3RpdmUpLGkpKTtyZXR1cm4ibm9uZSI9PT10LnR5cGU/bnVsbDpnLmEuY3JlYXRlRWxlbWVudCgibGkiLGVsKHtjbGFzc05hbWU6ZixzdHlsZTpzLGtleToibGVnZW5kLWl0ZW0tIi5jb25jYXQocil9LGllKGUucHJvcHMsdCxyKSksZy5hLmNyZWF0ZUVsZW1lbnQoVWYse3dpZHRoOm4saGVpZ2h0Om4sdmlld0JveDphLHN0eWxlOnV9LGUucmVuZGVySWNvbih0KSksZy5hLmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6InJlY2hhcnRzLWxlZ2VuZC1pdGVtLXRleHQifSxjP2ModC52YWx1ZSx0LHIpOnQudmFsdWUpKX0pfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnBheWxvYWQscj1lLmxheW91dCxuPWUuYWxpZ247aWYoIXR8fCF0Lmxlbmd0aClyZXR1cm4gbnVsbDt2YXIgaT17cGFkZGluZzowLG1hcmdpbjowLHRleHRBbGlnbjoiaG9yaXpvbnRhbCI9PT1yP246ImxlZnQifTtyZXR1cm4gZy5hLmNyZWF0ZUVsZW1lbnQoInVsIix7Y2xhc3NOYW1lOiJyZWNoYXJ0cy1kZWZhdWx0LWxlZ2VuZCIsc3R5bGU6aX0sdGhpcy5yZW5kZXJJdGVtcygpKX19XSkmJnJsKHIucHJvdG90eXBlLG4pLGkmJnJsKHIsaSksdH0oKSxZZi5kaXNwbGF5TmFtZT0iTGVnZW5kIixZZi5wcm9wVHlwZXM9e2NvbnRlbnQ6bS5hLmVsZW1lbnQsaWNvblNpemU6bS5hLm51bWJlcixpY29uVHlwZTptLmEub25lT2YoY2wpLGxheW91dDptLmEub25lT2YoWyJob3Jpem9udGFsIiwidmVydGljYWwiXSksYWxpZ246bS5hLm9uZU9mKFsiY2VudGVyIiwibGVmdCIsInJpZ2h0Il0pLHZlcnRpY2FsQWxpZ246bS5hLm9uZU9mKFsidG9wIiwiYm90dG9tIiwibWlkZGxlIl0pLHBheWxvYWQ6bS5hLmFycmF5T2YobS5hLnNoYXBlKHt2YWx1ZTptLmEuYW55LGlkOm0uYS5hbnksdHlwZTptLmEub25lT2YoWCl9KSksaW5hY3RpdmVDb2xvcjptLmEuc3RyaW5nLGZvcm1hdHRlcjptLmEuZnVuYyxvbk1vdXNlRW50ZXI6bS5hLmZ1bmMsb25Nb3VzZUxlYXZlOm0uYS5mdW5jLG9uQ2xpY2s6bS5hLmZ1bmN9LFlmLmRlZmF1bHRQcm9wcz17aWNvblNpemU6MTQsbGF5b3V0OiJob3Jpem9udGFsIixhbGlnbjoiY2VudGVyIix2ZXJ0aWNhbEFsaWduOiJtaWRkbGUiLGluYWN0aXZlQ29sb3I6IiNjY2MifSxXZj1YZikpfHxXZjtmdW5jdGlvbiBsbChlKXtyZXR1cm4obGw9ImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBobChlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9LG49T2JqZWN0LmtleXMocik7ImZ1bmN0aW9uIj09PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYobj1uLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHIpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLGUpLmVudW1lcmFibGV9KSkpLG4uZm9yRWFjaChmdW5jdGlvbih0KXtwbChlLHQsclt0XSl9KX1yZXR1cm4gZX1mdW5jdGlvbiBwbChlLHQscil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1yLGV9ZnVuY3Rpb24gZGwoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiB5bChlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PWxsKHQpJiYiZnVuY3Rpb24iIT09dHlwZW9mIHQ/ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKTp0fWZ1bmN0aW9uIGdsKGUpe3JldHVybihnbD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24gdmwoZSx0KXtyZXR1cm4odmw9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfXZhciBtbD1mdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZX0sYmw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4hMD09PWU/TmYoKSh0LG1sKTp1KCkoZSk/TmYoKSh0LGUpOnR9LF9sPVguZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiJub25lIiE9PWV9KSxTbD1LKCh1bD1zbD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUscjshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KTtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxpPW5ldyBBcnJheShuKSxvPTA7bzxuO28rKylpW29dPWFyZ3VtZW50c1tvXTtyZXR1cm4ocj15bCh0aGlzLChlPWdsKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpKS5zdGF0ZT17Ym94V2lkdGg6LTEsYm94SGVpZ2h0Oi0xfSxyfXZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJnZsKGUsdCl9KHQseVsiQ29tcG9uZW50Il0pLHI9dCxpPVt7a2V5OiJnZXRXaXRoSGVpZ2h0Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPWUucHJvcHMubGF5b3V0O3JldHVybiJ2ZXJ0aWNhbCI9PT1yJiZSKGUucHJvcHMuaGVpZ2h0KT97aGVpZ2h0OmUucHJvcHMuaGVpZ2h0fToiaG9yaXpvbnRhbCI9PT1yP3t3aWR0aDplLnByb3BzLndpZHRofHx0fTpudWxsfX1dLChuPVt7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnVwZGF0ZUJCb3goKX19LHtrZXk6ImNvbXBvbmVudERpZFVwZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnVwZGF0ZUJCb3goKX19LHtrZXk6ImdldEJCb3giLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdGF0ZSx0PWUuYm94V2lkdGgscj1lLmJveEhlaWdodDtyZXR1cm4gdD49MCYmcj49MD97d2lkdGg6dCxoZWlnaHQ6cn06bnVsbH19LHtrZXk6ImdldERlZmF1bHRQb3NpdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscixuPXRoaXMucHJvcHMsaT1uLmxheW91dCxvPW4uYWxpZ24sYT1uLnZlcnRpY2FsQWxpZ24scz1uLm1hcmdpbix1PW4uY2hhcnRXaWR0aCxjPW4uY2hhcnRIZWlnaHQ7ZSYmKHZvaWQgMCE9PWUubGVmdCYmbnVsbCE9PWUubGVmdHx8dm9pZCAwIT09ZS5yaWdodCYmbnVsbCE9PWUucmlnaHQpfHwodD0iY2VudGVyIj09PW8mJiJ2ZXJ0aWNhbCI9PT1pP3tsZWZ0OigodXx8MCktKHRoaXMuZ2V0QkJveCgpfHx7d2lkdGg6MH0pLndpZHRoKS8yfToicmlnaHQiPT09bz97cmlnaHQ6cyYmcy5yaWdodHx8MH06e2xlZnQ6cyYmcy5sZWZ0fHwwfSk7ZSYmKHZvaWQgMCE9PWUudG9wJiZudWxsIT09ZS50b3B8fHZvaWQgMCE9PWUuYm90dG9tJiZudWxsIT09ZS5ib3R0b20pfHwocj0ibWlkZGxlIj09PWE/e3RvcDooKGN8fDApLSh0aGlzLmdldEJCb3goKXx8e2hlaWdodDowfSkuaGVpZ2h0KS8yfToiYm90dG9tIj09PWE/e2JvdHRvbTpzJiZzLmJvdHRvbXx8MH06e3RvcDpzJiZzLnRvcHx8MH0pO3JldHVybiBobCh7fSx0LHIpfX0se2tleToidXBkYXRlQkJveCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0YXRlLHQ9ZS5ib3hXaWR0aCxyPWUuYm94SGVpZ2h0LG49dGhpcy5wcm9wcy5vbkJCb3hVcGRhdGU7aWYodGhpcy53cmFwcGVyTm9kZSYmdGhpcy53cmFwcGVyTm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3Qpe3ZhciBpPXRoaXMud3JhcHBlck5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7KE1hdGguYWJzKGkud2lkdGgtdCk+MXx8TWF0aC5hYnMoaS5oZWlnaHQtcik+MSkmJnRoaXMuc2V0U3RhdGUoe2JveFdpZHRoOmkud2lkdGgsYm94SGVpZ2h0OmkuaGVpZ2h0fSxmdW5jdGlvbigpe24mJm4oaSl9KX1lbHNlLTE9PT10JiYtMT09PXJ8fHRoaXMuc2V0U3RhdGUoe2JveFdpZHRoOi0xLGJveEhlaWdodDotMX0sZnVuY3Rpb24oKXtuJiZuKG51bGwpfSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMscj10LmNvbnRlbnQsbj10LndpZHRoLGk9dC5oZWlnaHQsbz10LndyYXBwZXJTdHlsZSxhPXQucGF5bG9kVW5pcUJ5LHM9dC5wYXlsb2FkLGM9aGwoe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsd2lkdGg6bnx8ImF1dG8iLGhlaWdodDppfHwiYXV0byJ9LHRoaXMuZ2V0RGVmYXVsdFBvc2l0aW9uKG8pLG8pO3JldHVybiBnLmEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJyZWNoYXJ0cy1sZWdlbmQtd3JhcHBlciIsc3R5bGU6YyxyZWY6ZnVuY3Rpb24odCl7ZS53cmFwcGVyTm9kZT10fX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gZy5hLmlzVmFsaWRFbGVtZW50KGUpP2cuYS5jbG9uZUVsZW1lbnQoZSx0KTp1KCkoZSk/ZSh0KTpnLmEuY3JlYXRlRWxlbWVudChmbCx0KX0ocixobCh7fSx0aGlzLnByb3BzLHtwYXlsb2FkOmJsKGEscyl9KSkpfX1dKSYmZGwoci5wcm90b3R5cGUsbiksaSYmZGwocixpKSx0fSgpLHNsLmRpc3BsYXlOYW1lPSJMZWdlbmQiLHNsLnByb3BUeXBlcz17Y29udGVudDptLmEub25lT2ZUeXBlKFttLmEuZWxlbWVudCxtLmEuZnVuY10pLHdyYXBwZXJTdHlsZTptLmEub2JqZWN0LGNoYXJ0V2lkdGg6bS5hLm51bWJlcixjaGFydEhlaWdodDptLmEubnVtYmVyLHdpZHRoOm0uYS5udW1iZXIsaGVpZ2h0Om0uYS5udW1iZXIsaWNvblNpemU6bS5hLm51bWJlcixpY29uVHlwZTptLmEub25lT2YoX2wpLGxheW91dDptLmEub25lT2YoWyJob3Jpem9udGFsIiwidmVydGljYWwiXSksYWxpZ246bS5hLm9uZU9mKFsiY2VudGVyIiwibGVmdCIsInJpZ2h0Il0pLHZlcnRpY2FsQWxpZ246bS5hLm9uZU9mKFsidG9wIiwiYm90dG9tIiwibWlkZGxlIl0pLG1hcmdpbjptLmEuc2hhcGUoe3RvcDptLmEubnVtYmVyLGxlZnQ6bS5hLm51bWJlcixib3R0b206bS5hLm51bWJlcixyaWdodDptLmEubnVtYmVyfSkscGF5bG9hZDptLmEuYXJyYXlPZihtLmEuc2hhcGUoe3ZhbHVlOm0uYS5hbnksaWQ6bS5hLmFueSx0eXBlOm0uYS5vbmVPZihYKX0pKSxwYXlsb2RVbmlxQnk6bS5hLm9uZU9mVHlwZShbbS5hLmZ1bmMsbS5hLmJvb2xdKSxmb3JtYXR0ZXI6bS5hLmZ1bmMsb25Nb3VzZUVudGVyOm0uYS5mdW5jLG9uTW91c2VMZWF2ZTptLmEuZnVuYyxvbkNsaWNrOm0uYS5mdW5jLG9uQkJveFVwZGF0ZTptLmEuZnVuY30sc2wuZGVmYXVsdFByb3BzPXtpY29uU2l6ZToxNCxsYXlvdXQ6Imhvcml6b250YWwiLGFsaWduOiJjZW50ZXIiLHZlcnRpY2FsQWxpZ246ImJvdHRvbSJ9LGFsPXVsKSl8fGFsO2Z1bmN0aW9uIEVsKGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHQ9MCxyPW5ldyBBcnJheShlLmxlbmd0aCk7dDxlLmxlbmd0aDt0Kyspclt0XT1lW3RdO3JldHVybiByfX0oZSl8fGZ1bmN0aW9uKGUpe2lmKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoZSl8fCJbb2JqZWN0IEFyZ3VtZW50c10iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfSgpfWZ1bmN0aW9uIHdsKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30sbj1PYmplY3Qua2V5cyhyKTsiZnVuY3Rpb24iPT09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihuPW4uY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkuZW51bWVyYWJsZX0pKSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe1RsKGUsdCxyW3RdKX0pfXJldHVybiBlfWZ1bmN0aW9uIFRsKGUsdCxyKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPXIsZX12YXIgQWw9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBmKCkoZSl8fGYoKSh0KT9yOkIodCk/VCgpKGUsdCxyKTp1KCkodCk/dChlKTpyfSxDbD1mdW5jdGlvbihlLHQscixuKXt2YXIgaT1GZSgpKGUsZnVuY3Rpb24oZSl7cmV0dXJuIEFsKGUsdCl9KTtpZigibnVtYmVyIj09PXIpe3ZhciBvPWkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBSKGUpfHxwYXJzZUZsb2F0KGUsMTApfSk7cmV0dXJuIG8ubGVuZ3RoP1tqZSgpKG8pLExlKCkobyldOlsxLzAsLTEvMF19cmV0dXJuKG4/aS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWYoKShlKX0pOmkpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gQihlKT9lOiIifSl9LHhsPWZ1bmN0aW9uKGUpe3ZhciB0O3N3aXRjaChlLnR5cGUuZGlzcGxheU5hbWUpe2Nhc2UiTGluZSI6Y2FzZSJBcmVhIjpjYXNlIlJhZGFyIjp0PWUucHJvcHMuc3Ryb2tlO2JyZWFrO2RlZmF1bHQ6dD1lLnByb3BzLmZpbGx9cmV0dXJuIHR9LElsPWZ1bmN0aW9uKGUpe3ZhciB0LHI9ZS5jaGlsZHJlbixuPWUuZm9ybWF0ZWRHcmFwaGljYWxJdGVtcyxpPWUubGVnZW5kV2lkdGgsbz1lLmxlZ2VuZENvbnRlbnQsYT1KKHIsU2wpO3JldHVybiBhPyh0PWEucHJvcHMmJmEucHJvcHMucGF5bG9hZD9hLnByb3BzJiZhLnByb3BzLnBheWxvYWQ6ImNoaWxkcmVuIj09PW8/KG58fFtdKS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXt2YXIgcj10Lml0ZW0sbj10LnByb3BzLGk9bi5zZWN0b3JzfHxuLmRhdGF8fFtdO3JldHVybiBlLmNvbmNhdChpLm1hcChmdW5jdGlvbihlKXtyZXR1cm57dHlwZTphLnByb3BzLmljb25UeXBlfHxyLnByb3BzLmxlZ2VuZFR5cGUsdmFsdWU6ZS5uYW1lLGNvbG9yOmUuZmlsbCxwYXlsb2FkOmV9fSkpfSxbXSk6KG58fFtdKS5tYXAoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pdGVtLHI9dC5wcm9wcyxuPXIuZGF0YUtleSxpPXIubmFtZSxvPXIubGVnZW5kVHlwZTtyZXR1cm57aW5hY3RpdmU6ci5oaWRlLGRhdGFLZXk6bix0eXBlOmEucHJvcHMuaWNvblR5cGV8fG98fCJzcXVhcmUiLGNvbG9yOnhsKHQpLHZhbHVlOml8fG4scGF5bG9hZDp0LnByb3BzfX0pLHdsKHt9LGEucHJvcHMsU2wuZ2V0V2l0aEhlaWdodChhLGkpLHtwYXlsb2FkOnQsaXRlbTphfSkpOm51bGx9LGtsPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBpPXQucHJvcHMuY2hpbGRyZW4sbz1aKGksa2YpLmZpbHRlcihmdW5jdGlvbihlKXt2YXIgdD1lLnByb3BzLmRpcmVjdGlvbjtyZXR1cm4hKCFmKCkodCkmJiFmKCkobikpfHxuLmluZGV4T2YodCk+PTB9KTtpZihvJiZvLmxlbmd0aCl7dmFyIGE9by5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUucHJvcHMuZGF0YUtleX0pO3JldHVybiBlLnJlZHVjZShmdW5jdGlvbihlLHQpe3ZhciBuPUFsKHQsciwwKSxpPWQoKShuKT9bamUoKShuKSxMZSgpKG4pXTpbbixuXSxvPWEucmVkdWNlKGZ1bmN0aW9uKGUscil7dmFyIG49QWwodCxyLDApLG89aVswXS1NYXRoLmFicyhkKCkobik/blswXTpuKSxhPWlbMV0rTWF0aC5hYnMoZCgpKG4pP25bMV06bik7cmV0dXJuW01hdGgubWluKG8sZVswXSksTWF0aC5tYXgoYSxlWzFdKV19LFsxLzAsLTEvMF0pO3JldHVybltNYXRoLm1pbihvWzBdLGVbMF0pLE1hdGgubWF4KG9bMV0sZVsxXSldfSxbMS8wLC0xLzBdKX1yZXR1cm4gbnVsbH0sT2w9ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGk9dC5tYXAoZnVuY3Rpb24odCl7dmFyIGk9dC5wcm9wcy5kYXRhS2V5O3JldHVybiJudW1iZXIiPT09ciYmaSYma2woZSx0LGkpfHxDbChlLGkscixuKX0pO2lmKCJudW1iZXIiPT09cilyZXR1cm4gaS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm5bTWF0aC5taW4oZVswXSx0WzBdKSxNYXRoLm1heChlWzFdLHRbMV0pXX0sWzEvMCwtMS8wXSk7dmFyIG89e307cmV0dXJuIGkucmVkdWNlKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPTAsbj10Lmxlbmd0aDtyPG47cisrKW9bdFtyXV18fChvW3Rbcl1dPSEwLGUucHVzaCh0W3JdKSk7cmV0dXJuIGV9LFtdKX0sTmw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4iaG9yaXpvbnRhbCI9PT1lJiYieEF4aXMiPT09dHx8InZlcnRpY2FsIj09PWUmJiJ5QXhpcyI9PT10fHwiY2VudHJpYyI9PT1lJiYiYW5nbGVBeGlzIj09PXR8fCJyYWRpYWwiPT09ZSYmInJhZGl1c0F4aXMiPT09dH0sUGw9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGksbz1lLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5jb29yZGluYXRlPT09dCYmKG49ITApLGUuY29vcmRpbmF0ZT09PXImJihpPSEwKSxlLmNvb3JkaW5hdGV9KTtyZXR1cm4gbnx8by5wdXNoKHQpLGl8fG8ucHVzaChyKSxvfSxSbD1mdW5jdGlvbihlLHQscil7aWYoIWUpcmV0dXJuIG51bGw7dmFyIG49ZS5zY2FsZSxpPWUuZHVwbGljYXRlRG9tYWluLG89ZS50eXBlLGE9ZS5yYW5nZSxzPSh0fHxyKSYmImNhdGVnb3J5Ij09PW8mJm4uYmFuZHdpZHRoP24uYmFuZHdpZHRoKCkvMjowO3JldHVybiBzPSJhbmdsZUF4aXMiPT09ZS5heGlzVHlwZT8yKk4oYVswXS1hWzFdKSpzOnMsdCYmKGUudGlja3N8fGUubmljZVRpY2tzKT8oZS50aWNrc3x8ZS5uaWNlVGlja3MpLm1hcChmdW5jdGlvbihlKXt2YXIgdD1pP2kuaW5kZXhPZihlKTplO3JldHVybntjb29yZGluYXRlOm4odCkrcyx2YWx1ZTplLG9mZnNldDpzfX0pOmUuaXNDYXRlZ29yaWFsJiZlLmNhdGVnb3JpY2FsRG9tYWluP2UuY2F0ZWdvcmljYWxEb21haW4ubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJue2Nvb3JkaW5hdGU6bihlKSx2YWx1ZTplLGluZGV4OnQsb2Zmc2V0OnN9fSk6bi50aWNrcyYmIXI/bi50aWNrcyhlLnRpY2tDb3VudCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybntjb29yZGluYXRlOm4oZSkrcyx2YWx1ZTplLG9mZnNldDpzfX0pOm4uZG9tYWluKCkubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJue2Nvb3JkaW5hdGU6bihlKStzLHZhbHVlOmk/aVtlXTplLGluZGV4OnQsb2Zmc2V0OnN9fSl9LEJsPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbjtyZXR1cm4gdSgpKHIpP249cjp1KCkodCkmJihuPXQpLHUoKShlKXx8bj9mdW5jdGlvbih0LHIsaSxvKXt1KCkoZSkmJmUodCxyLGksbyksdSgpKG4pJiZuKHQscixpLG8pfTpudWxsfSxNbD1mdW5jdGlvbihlLHQpe3ZhciByPWUuc2NhbGUsaT1lLnR5cGUsbz1lLmxheW91dCxhPWUuYXhpc1R5cGU7aWYoImF1dG8iPT09cilyZXR1cm4icmFkaWFsIj09PW8mJiJyYWRpdXNBeGlzIj09PWE/e3NjYWxlOmd0KCkscmVhbFNjYWxlVHlwZToiYmFuZCJ9OiJyYWRpYWwiPT09byYmImFuZ2xlQXhpcyI9PT1hP3tzY2FsZTp3bigpLHJlYWxTY2FsZVR5cGU6ImxpbmVhciJ9OiJjYXRlZ29yeSI9PT1pJiZ0JiYodC5pbmRleE9mKCJMaW5lQ2hhcnQiKT49MHx8dC5pbmRleE9mKCJBcmVhQ2hhcnQiKT49MCk/e3NjYWxlOnZ0KCkscmVhbFNjYWxlVHlwZToicG9pbnQifToiY2F0ZWdvcnkiPT09aT97c2NhbGU6Z3QoKSxyZWFsU2NhbGVUeXBlOiJiYW5kIn06e3NjYWxlOnduKCkscmVhbFNjYWxlVHlwZToibGluZWFyIn07aWYoTygpKHIpKXt2YXIgcz0ic2NhbGUiLmNvbmNhdChyLnNsaWNlKDAsMSkudG9VcHBlckNhc2UoKSkuY29uY2F0KHIuc2xpY2UoMSkpO3JldHVybntzY2FsZToobltzXXx8dnQpKCkscmVhbFNjYWxlVHlwZTpuW3NdP3M6InBvaW50In19cmV0dXJuIHUoKShyKT97c2NhbGU6cn06e3NjYWxlOnZ0KCkscmVhbFNjYWxlVHlwZToicG9pbnQifX0sTGw9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kb21haW4oKTtpZih0JiYhKHQubGVuZ3RoPD0yKSl7dmFyIHI9dC5sZW5ndGgsbj1lLnJhbmdlKCksaT1NYXRoLm1pbihuWzBdLG5bMV0pLTFlLTQsbz1NYXRoLm1heChuWzBdLG5bMV0pKzFlLTQsYT1lKHRbMF0pLHM9ZSh0W3ItMV0pOyhhPGl8fGE+b3x8czxpfHxzPm8pJiZlLmRvbWFpbihbdFswXSx0W3ItMV1dKX19LERsPXtzaWduOmZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoO2lmKCEodDw9MCkpZm9yKHZhciByPTAsbj1lWzBdLmxlbmd0aDtyPG47KytyKWZvcih2YXIgaT0wLG89MCxhPTA7YTx0OysrYSl7dmFyIHM9QygpKGVbYV1bcl1bMV0pP2VbYV1bcl1bMF06ZVthXVtyXVsxXTtzPj0wPyhlW2FdW3JdWzBdPWksZVthXVtyXVsxXT1pK3MsaT1lW2FdW3JdWzFdKTooZVthXVtyXVswXT1vLGVbYV1bcl1bMV09bytzLG89ZVthXVtyXVsxXSl9fSxleHBhbmQ6ZnVuY3Rpb24oZSx0KXtpZigobj1lLmxlbmd0aCk+MCl7Zm9yKHZhciByLG4saSxvPTAsYT1lWzBdLmxlbmd0aDtvPGE7KytvKXtmb3IoaT1yPTA7cjxuOysrcilpKz1lW3JdW29dWzFdfHwwO2lmKGkpZm9yKHI9MDtyPG47KytyKWVbcl1bb11bMV0vPWl9QnMoZSx0KX19LG5vbmU6QnMsc2lsaG91ZXR0ZTpmdW5jdGlvbihlLHQpe2lmKChyPWUubGVuZ3RoKT4wKXtmb3IodmFyIHIsbj0wLGk9ZVt0WzBdXSxvPWkubGVuZ3RoO248bzsrK24pe2Zvcih2YXIgYT0wLHM9MDthPHI7KythKXMrPWVbYV1bbl1bMV18fDA7aVtuXVsxXSs9aVtuXVswXT0tcy8yfUJzKGUsdCl9fSx3aWdnbGU6ZnVuY3Rpb24oZSx0KXtpZigoaT1lLmxlbmd0aCk+MCYmKG49KHI9ZVt0WzBdXSkubGVuZ3RoKT4wKXtmb3IodmFyIHIsbixpLG89MCxhPTE7YTxuOysrYSl7Zm9yKHZhciBzPTAsdT0wLGM9MDtzPGk7KytzKXtmb3IodmFyIGY9ZVt0W3NdXSxsPWZbYV1bMV18fDAsaD0obC0oZlthLTFdWzFdfHwwKSkvMixwPTA7cDxzOysrcCl7dmFyIGQ9ZVt0W3BdXTtoKz0oZFthXVsxXXx8MCktKGRbYS0xXVsxXXx8MCl9dSs9bCxjKz1oKmx9clthLTFdWzFdKz1yW2EtMV1bMF09byx1JiYoby09Yy91KX1yW2EtMV1bMV0rPXJbYS0xXVswXT1vLEJzKGUsdCl9fX0samw9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXQubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnByb3BzLmRhdGFLZXl9KTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1CYShbXSksdD1NcyxyPUJzLG49THM7ZnVuY3Rpb24gaShpKXt2YXIgbyxhLHM9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdT1pLmxlbmd0aCxjPXMubGVuZ3RoLGY9bmV3IEFycmF5KGMpO2ZvcihvPTA7bzxjOysrbyl7Zm9yKHZhciBsLGg9c1tvXSxwPWZbb109bmV3IEFycmF5KHUpLGQ9MDtkPHU7KytkKXBbZF09bD1bMCwrbihpW2RdLGgsZCxpKV0sbC5kYXRhPWlbZF07cC5rZXk9aH1mb3Iobz0wLGE9dChmKTtvPGM7KytvKWZbYVtvXV0uaW5kZXg9bztyZXR1cm4gcihmLGEpLGZ9cmV0dXJuIGkua2V5cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT09dHlwZW9mIHQ/dDpCYShIYS5jYWxsKHQpKSxpKTplfSxpLnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PT10eXBlb2YgZT9lOkJhKCtlKSxpKTpufSxpLm9yZGVyPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW51bGw9PWU/TXM6ImZ1bmN0aW9uIj09PXR5cGVvZiBlP2U6QmEoSGEuY2FsbChlKSksaSk6dH0saS5vZmZzZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09ZT9CczplLGkpOnJ9LGl9KCkua2V5cyhuKS52YWx1ZShmdW5jdGlvbihlLHQpe3JldHVybitBbChlLHQsMCl9KS5vcmRlcihNcykub2Zmc2V0KERsW3JdKShlKX0sVWw9ZnVuY3Rpb24oZSx0KXt2YXIgcj10LnJlYWxTY2FsZVR5cGUsbj10LnR5cGUsaT10LnRpY2tDb3VudCxvPXQub3JpZ2luYWxEb21haW4sYT10LmFsbG93RGVjaW1hbHMscz1yfHx0LnNjYWxlO2lmKCJhdXRvIiE9PXMmJiJsaW5lYXIiIT09cylyZXR1cm4gbnVsbDtpZihpJiYibnVtYmVyIj09PW4mJm8mJigiYXV0byI9PT1vWzBdfHwiYXV0byI9PT1vWzFdKSl7dmFyIHU9ZS5kb21haW4oKSxjPU9iamVjdChWZS5nZXROaWNlVGlja1ZhbHVlcykodSxpLGEpO3JldHVybiBlLmRvbWFpbihmdW5jdGlvbihlLHQpe3JldHVybiJudW1iZXIiPT09dD9bamUoKShlKSxMZSgpKGUpXTplfShjLG4pKSx7bmljZVRpY2tzOmN9fWlmKGkmJiJudW1iZXIiPT09bil7dmFyIGY9ZS5kb21haW4oKTtyZXR1cm57bmljZVRpY2tzOk9iamVjdChWZS5nZXRUaWNrVmFsdWVzRml4ZWREb21haW4pKGYsaSxhKX19cmV0dXJuIG51bGx9LEZsPWZ1bmN0aW9uKGUpe3ZhciB0PWUuYXhpcyxyPWUudGlja3Msbj1lLmJhbmRTaXplLGk9ZS5lbnRyeSxvPWUuaW5kZXgsYT1lLmRhdGFLZXk7aWYoImNhdGVnb3J5Ij09PXQudHlwZSl7aWYoIXQuYWxsb3dEdXBsaWNhdGVkQ2F0ZWdvcnkmJnQuZGF0YUtleSYmIWYoKShpW3QuZGF0YUtleV0pKXt2YXIgcz1GKHIsInZhbHVlIixpW3QuZGF0YUtleV0pO2lmKHMpcmV0dXJuIHMuY29vcmRpbmF0ZStuLzJ9cmV0dXJuIHJbb10/cltvXS5jb29yZGluYXRlK24vMjpudWxsfXZhciB1PUFsKGksZigpKGEpP3QuZGF0YUtleTphKTtyZXR1cm4gZigpKHUpP251bGw6dC5zY2FsZSh1KX0sVmw9ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmFsd2F5c1Nob3csbj1lLmlmT3ZlcmZsb3c7cmV0dXJuIHImJihuPSJleHRlbmREb21haW4iKSxuPT09dH0scWw9ZnVuY3Rpb24oZSx0LHIsbixpKXt2YXIgbz1aKGUsTHUpLGE9WihlLFR1KSxzPW8uY29uY2F0KGEpLHU9WihlLGJmKSxjPSIiLmNvbmNhdChuLCJJZCIpLGY9blswXSxsPXQ7aWYocy5sZW5ndGgmJihsPXMucmVkdWNlKGZ1bmN0aW9uKGUsdCl7aWYodC5wcm9wc1tjXT09PXImJlZsKHQucHJvcHMsImV4dGVuZERvbWFpbiIpJiZSKHQucHJvcHNbZl0pKXt2YXIgbj10LnByb3BzW2ZdO3JldHVybltNYXRoLm1pbihlWzBdLG4pLE1hdGgubWF4KGVbMV0sbildfXJldHVybiBlfSxsKSksdS5sZW5ndGgpe3ZhciBoPSIiLmNvbmNhdChmLCIxIikscD0iIi5jb25jYXQoZiwiMiIpO2w9dS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtpZih0LnByb3BzW2NdPT09ciYmVmwodC5wcm9wcywiZXh0ZW5kRG9tYWluIikmJlIodC5wcm9wc1toXSkmJlIodC5wcm9wc1twXSkpe3ZhciBuPXQucHJvcHNbaF0saT10LnByb3BzW3BdO3JldHVybltNYXRoLm1pbihlWzBdLG4saSksTWF0aC5tYXgoZVsxXSxuLGkpXX1yZXR1cm4gZX0sbCl9cmV0dXJuIGkmJmkubGVuZ3RoJiYobD1pLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiBSKHQpP1tNYXRoLm1pbihlWzBdLHQpLE1hdGgubWF4KGVbMV0sdCldOmV9LGwpKSxsfSxLbD1mdW5jdGlvbihlLHQscil7cmV0dXJuIE9iamVjdC5rZXlzKGUpLnJlZHVjZShmdW5jdGlvbihuLGkpe3ZhciBvPWVbaV0uc3RhY2tlZERhdGEucmVkdWNlKGZ1bmN0aW9uKGUsbil7dmFyIGk9bi5zbGljZSh0LHIrMSkucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuW2plKCkodC5jb25jYXQoW2VbMF1dKS5maWx0ZXIoUikpLExlKCkodC5jb25jYXQoW2VbMV1dKS5maWx0ZXIoUikpXX0sWzEvMCwtMS8wXSk7cmV0dXJuW01hdGgubWluKGVbMF0saVswXSksTWF0aC5tYXgoZVsxXSxpWzFdKV19LFsxLzAsLTEvMF0pO3JldHVybltNYXRoLm1pbihvWzBdLG5bMF0pLE1hdGgubWF4KG9bMV0sblsxXSldfSxbMS8wLC0xLzBdKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT0xLzB8fGU9PT0tMS8wPzA6ZX0pfSx6bD0vXmRhdGFNaW5bXHNdKi1bXHNdKihbMC05XSsoWy5dezF9WzAtOV0rKXswLDF9KSQvLEdsPS9eZGF0YU1heFtcc10qXCtbXHNdKihbMC05XSsoWy5dezF9WzAtOV0rKXswLDF9KSQvLEhsPWZ1bmN0aW9uKGUsdCxyKXtpZighZCgpKGUpKXJldHVybiB0O3ZhciBuPVtdO2lmKFIoZVswXSkpblswXT1yP2VbMF06TWF0aC5taW4oZVswXSx0WzBdKTtlbHNlIGlmKHpsLnRlc3QoZVswXSkpe3ZhciBpPSt6bC5leGVjKGVbMF0pWzFdO25bMF09dFswXS1pfWVsc2UgdSgpKGVbMF0pP25bMF09ZVswXSh0WzBdKTpuWzBdPXRbMF07aWYoUihlWzFdKSluWzFdPXI/ZVsxXTpNYXRoLm1heChlWzFdLHRbMV0pO2Vsc2UgaWYoR2wudGVzdChlWzFdKSl7dmFyIG89K0dsLmV4ZWMoZVsxXSlbMV07blsxXT10WzFdK299ZWxzZSB1KCkoZVsxXSk/blsxXT1lWzFdKHRbMV0pOm5bMV09dFsxXTtyZXR1cm4gbn0sV2w9ZnVuY3Rpb24oZSx0KXtpZihlJiZlLnNjYWxlJiZlLnNjYWxlLmJhbmR3aWR0aClyZXR1cm4gZS5zY2FsZS5iYW5kd2lkdGgoKTtpZihlJiZ0JiZ0Lmxlbmd0aD49Mil7Zm9yKHZhciByPUJlKCkodCxmdW5jdGlvbihlKXtyZXR1cm4gZS5jb29yZGluYXRlfSksbj0xLzAsaT0xLG89ci5sZW5ndGg7aTxvO2krKyl7dmFyIGE9cltpXSxzPXJbaS0xXTtuPU1hdGgubWluKChhLmNvb3JkaW5hdGV8fDApLShzLmNvb3JkaW5hdGV8fDApLG4pfXJldHVybiBuPT09MS8wPzA6bn1yZXR1cm4gMH0sWWw9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlJiZlLmxlbmd0aD9QZSgpKGUsVCgpKHIsInR5cGUuZGVmYXVsdFByb3BzLmRvbWFpbiIpKT90OmU6dH07ZnVuY3Rpb24gWGwoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fSxuPU9iamVjdC5rZXlzKHIpOyJmdW5jdGlvbiI9PT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKG49bi5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhyKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKS5lbnVtZXJhYmxlfSkpKSxuLmZvckVhY2goZnVuY3Rpb24odCl7UWwoZSx0LHJbdF0pfSl9cmV0dXJuIGV9ZnVuY3Rpb24gUWwoZSx0LHIpe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09cixlfXZhciAkbD1NYXRoLlBJLzE4MCxabD1mdW5jdGlvbihlKXtyZXR1cm4gMTgwKmUvTWF0aC5QSX0sSmw9ZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJue3g6ZStNYXRoLmNvcygtJGwqbikqcix5OnQrTWF0aC5zaW4oLSRsKm4pKnJ9fSxlaD1mdW5jdGlvbihlLHQpe3ZhciByPWUueCxuPWUueSxpPXQuY3gsbz10LmN5LGE9ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLngsbj1lLnksaT10Lngsbz10Lnk7cmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyhyLWksMikrTWF0aC5wb3cobi1vLDIpKX0oe3g6cix5Om59LHt4OmkseTpvfSk7aWYoYTw9MClyZXR1cm57cmFkaXVzOmF9O3ZhciBzPShyLWkpL2EsdT1NYXRoLmFjb3Mocyk7cmV0dXJuIG4+byYmKHU9MipNYXRoLlBJLXUpLHtyYWRpdXM6YSxhbmdsZTpabCh1KSxhbmdsZUluUmFkaWFuOnV9fSx0aD1mdW5jdGlvbihlLHQpe3ZhciByPXQuc3RhcnRBbmdsZSxuPXQuZW5kQW5nbGUsaT1NYXRoLmZsb29yKHIvMzYwKSxvPU1hdGguZmxvb3Iobi8zNjApO3JldHVybiBlKzM2MCpNYXRoLm1pbihpLG8pfSxyaD1mdW5jdGlvbihlLHQpe3ZhciByPWUueCxuPWUueSxpPWVoKHt4OnIseTpufSx0KSxvPWkucmFkaXVzLGE9aS5hbmdsZSxzPXQuaW5uZXJSYWRpdXMsdT10Lm91dGVyUmFkaXVzO2lmKG88c3x8bz51KXJldHVybiExO2lmKDA9PT1vKXJldHVybiEwO3ZhciBjLGY9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdGFydEFuZ2xlLHI9ZS5lbmRBbmdsZSxuPU1hdGguZmxvb3IodC8zNjApLGk9TWF0aC5mbG9vcihyLzM2MCksbz1NYXRoLm1pbihuLGkpO3JldHVybntzdGFydEFuZ2xlOnQtMzYwKm8sZW5kQW5nbGU6ci0zNjAqb319KHQpLGw9Zi5zdGFydEFuZ2xlLGg9Zi5lbmRBbmdsZSxwPWE7aWYobDw9aCl7Zm9yKDtwPmg7KXAtPTM2MDtmb3IoO3A8bDspcCs9MzYwO2M9cD49bCYmcDw9aH1lbHNle2Zvcig7cD5sOylwLT0zNjA7Zm9yKDtwPGg7KXArPTM2MDtjPXA+PWgmJnA8PWx9cmV0dXJuIGM/WGwoe30sdCx7cmFkaXVzOm8sYW5nbGU6dGgocCx0KX0pOm51bGx9O2Z1bmN0aW9uIG5oKGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHQ9MCxyPW5ldyBBcnJheShlLmxlbmd0aCk7dDxlLmxlbmd0aDt0Kyspclt0XT1lW3RdO3JldHVybiByfX0oZSl8fGZ1bmN0aW9uKGUpe2lmKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoZSl8fCJbb2JqZWN0IEFyZ3VtZW50c10iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfSgpfWZ1bmN0aW9uIGloKCl7cmV0dXJuKGloPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPWFyZ3VtZW50c1t0XTtmb3IodmFyIG4gaW4gcilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixuKSYmKGVbbl09cltuXSl9cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gb2goZSx0LHIpe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09cixlfXZhciBhaD1tLmEuc2hhcGUoe3g6bS5hLm51bWJlcix5Om0uYS5udW1iZXIsd2lkdGg6bS5hLm51bWJlcixoZWlnaHQ6bS5hLm51bWJlcn0pLHNoPW0uYS5zaGFwZSh7Y3g6bS5hLm51bWJlcixjeTptLmEubnVtYmVyLGlubmVyUmFkaXVzOm0uYS5udW1iZXIsb3V0ZXJSYWRpdXM6bS5hLm51bWJlcixzdGFydEFuZ2xlOm0uYS5udW1iZXIsZW5kQW5nbGU6bS5hLm51bWJlcn0pLHVoPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30sbj1PYmplY3Qua2V5cyhyKTsiZnVuY3Rpb24iPT09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihuPW4uY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkuZW51bWVyYWJsZX0pKSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe29oKGUsdCxyW3RdKX0pfXJldHVybiBlfSh7fSxILHt2aWV3Qm94Om0uYS5vbmVPZlR5cGUoW2FoLHNoXSksZm9ybWF0dGVyOm0uYS5mdW5jLHZhbHVlOm0uYS5vbmVPZlR5cGUoW20uYS5udW1iZXIsbS5hLnN0cmluZ10pLG9mZnNldDptLmEubnVtYmVyLHBvc2l0aW9uOm0uYS5vbmVPZihbInRvcCIsImxlZnQiLCJyaWdodCIsImJvdHRvbSIsImluc2lkZSIsIm91dHNpZGUiLCJpbnNpZGVMZWZ0IiwiaW5zaWRlUmlnaHQiLCJpbnNpZGVUb3AiLCJpbnNpZGVCb3R0b20iLCJpbnNpZGVUb3BMZWZ0IiwiaW5zaWRlQm90dG9tTGVmdCIsImluc2lkZVRvcFJpZ2h0IiwiaW5zaWRlQm90dG9tUmlnaHQiLCJpbnNpZGVTdGFydCIsImluc2lkZUVuZCIsImVuZCIsImNlbnRlciIsImNlbnRlclRvcCIsImNlbnRlckJvdHRvbSJdKSxjaGlsZHJlbjptLmEub25lT2ZUeXBlKFttLmEuYXJyYXlPZihtLmEubm9kZSksbS5hLm5vZGVdKSxjbGFzc05hbWU6bS5hLnN0cmluZyxjb250ZW50Om0uYS5vbmVPZlR5cGUoW20uYS5lbGVtZW50LG0uYS5mdW5jXSl9KSxjaD1mdW5jdGlvbihlKXt2YXIgdD1lLnZhbHVlLHI9ZS5mb3JtYXR0ZXIsbj1mKCkoZS5jaGlsZHJlbik/dDplLmNoaWxkcmVuO3JldHVybiB1KCkocik/cihuKTpufSxmaD1mdW5jdGlvbihlLHQscil7dmFyIG4saSxvPWUucG9zaXRpb24sYT1lLnZpZXdCb3gscz1lLm9mZnNldCx1PWUuY2xhc3NOYW1lLGM9YS5jeCxsPWEuY3ksaD1hLmlubmVyUmFkaXVzLHA9YS5vdXRlclJhZGl1cyxkPWEuc3RhcnRBbmdsZSx5PWEuZW5kQW5nbGUsdj1hLmNsb2NrV2lzZSxtPShoK3ApLzIsYj1mdW5jdGlvbihlLHQpe3JldHVybiBOKHQtZSkqTWF0aC5taW4oTWF0aC5hYnModC1lKSwzNjApfShkLHkpLFM9Yj49MD8xOi0xOyJpbnNpZGVTdGFydCI9PT1vPyhuPWQrUypzLGk9dik6Imluc2lkZUVuZCI9PT1vPyhuPXktUypzLGk9IXYpOiJlbmQiPT09byYmKG49eStTKnMsaT12KSxpPWI8PTA/aTohaTt2YXIgRT1KbChjLGwsbSxuKSx3PUpsKGMsbCxtLG4rMzU5KihpPzE6LTEpKSxUPSJNIi5jb25jYXQoRS54LCIsIikuY29uY2F0KEUueSwiXG4gICAgQSIpLmNvbmNhdChtLCIsIikuY29uY2F0KG0sIiwwLDEsIikuY29uY2F0KGk/MDoxLCIsXG4gICAgIikuY29uY2F0KHcueCwiLCIpLmNvbmNhdCh3LnkpLEE9ZigpKGUuaWQpP0woInJlY2hhcnRzLXJhZGlhbC1saW5lLSIpOmUuaWQ7cmV0dXJuIGcuYS5jcmVhdGVFbGVtZW50KCJ0ZXh0IixpaCh7fSxyLHtkb21pbmFudEJhc2VsaW5lOiJjZW50cmFsIixjbGFzc05hbWU6XygpKCJyZWNoYXJ0cy1yYWRpYWwtYmFyLWxhYmVsIix1KX0pLGcuYS5jcmVhdGVFbGVtZW50KCJkZWZzIixudWxsLGcuYS5jcmVhdGVFbGVtZW50KCJwYXRoIix7aWQ6QSxkOlR9KSksZy5hLmNyZQ==",
    "2019.12.27 16:40": "base64:ZW5kLWljb24ifSk6InJlY3QiPT09ZS50eXBlP2cuYS5jcmVhdGVFbGVtZW50KCJwYXRoIix7c3Ryb2tlOiJub25lIixmaWxsOnIsZDoiTTAsIi5jb25jYXQoNCwiaCIpLmNvbmNhdCgzMiwidiIpLmNvbmNhdCgyNCwiaCIpLmNvbmNhdCgtMzIsInoiKSxjbGFzc05hbWU6InJlY2hhcnRzLWxlZ2VuZC1pY29uIn0pOmcuYS5jcmVhdGVFbGVtZW50KFpmLHtmaWxsOnIsY3g6MTYsY3k6MTYsc2l6ZTozMixzaXplVHlwZToiZGlhbWV0ZXIiLHR5cGU6ZS50eXBlfSl9fSx7a2V5OiJyZW5kZXJJdGVtcyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wcyxyPXQucGF5bG9hZCxuPXQuaWNvblNpemUsaT10LmxheW91dCxvPXQuZm9ybWF0dGVyLGE9e3g6MCx5OjAsd2lkdGg6MzIsaGVpZ2h0OjMyfSxzPXtkaXNwbGF5OiJob3Jpem9udGFsIj09PWk/ImlubGluZS1ibG9jayI6ImJsb2NrIixtYXJnaW5SaWdodDoxMH0sdT17ZGlzcGxheToiaW5saW5lLWJsb2NrIix2ZXJ0aWNhbEFsaWduOiJtaWRkbGUiLG1hcmdpblJpZ2h0OjR9O3JldHVybiByLm1hcChmdW5jdGlvbih0LHIpe3ZhciBpLGM9dC5mb3JtYXR0ZXJ8fG8sZj1fKCkoKHRsKGk9eyJyZWNoYXJ0cy1sZWdlbmQtaXRlbSI6ITB9LCJsZWdlbmQtaXRlbS0iLmNvbmNhdChyKSwhMCksdGwoaSwiaW5hY3RpdmUiLHQuaW5hY3RpdmUpLGkpKTtyZXR1cm4ibm9uZSI9PT10LnR5cGU/bnVsbDpnLmEuY3JlYXRlRWxlbWVudCgibGkiLGVsKHtjbGFzc05hbWU6ZixzdHlsZTpzLGtleToibGVnZW5kLWl0ZW0tIi5jb25jYXQocil9LGllKGUucHJvcHMsdCxyKSksZy5hLmNyZWF0ZUVsZW1lbnQoVWYse3dpZHRoOm4saGVpZ2h0Om4sdmlld0JveDphLHN0eWxlOnV9LGUucmVuZGVySWNvbih0KSksZy5hLmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6InJlY2hhcnRzLWxlZ2VuZC1pdGVtLXRleHQifSxjP2ModC52YWx1ZSx0LHIpOnQudmFsdWUpKX0pfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnBheWxvYWQscj1lLmxheW91dCxuPWUuYWxpZ247aWYoIXR8fCF0Lmxlbmd0aClyZXR1cm4gbnVsbDt2YXIgaT17cGFkZGluZzowLG1hcmdpbjowLHRleHRBbGlnbjoiaG9yaXpvbnRhbCI9PT1yP246ImxlZnQifTtyZXR1cm4gZy5hLmNyZWF0ZUVsZW1lbnQoInVsIix7Y2xhc3NOYW1lOiJyZWNoYXJ0cy1kZWZhdWx0LWxlZ2VuZCIsc3R5bGU6aX0sdGhpcy5yZW5kZXJJdGVtcygpKX19XSkmJnJsKHIucHJvdG90eXBlLG4pLGkmJnJsKHIsaSksdH0oKSxZZi5kaXNwbGF5TmFtZT0iTGVnZW5kIixZZi5wcm9wVHlwZXM9e2NvbnRlbnQ6bS5hLmVsZW1lbnQsaWNvblNpemU6bS5hLm51bWJlcixpY29uVHlwZTptLmEub25lT2YoY2wpLGxheW91dDptLmEub25lT2YoWyJob3Jpem9udGFsIiwidmVydGljYWwiXSksYWxpZ246bS5hLm9uZU9mKFsiY2VudGVyIiwibGVmdCIsInJpZ2h0Il0pLHZlcnRpY2FsQWxpZ246bS5hLm9uZU9mKFsidG9wIiwiYm90dG9tIiwibWlkZGxlIl0pLHBheWxvYWQ6bS5hLmFycmF5T2YobS5hLnNoYXBlKHt2YWx1ZTptLmEuYW55LGlkOm0uYS5hbnksdHlwZTptLmEub25lT2YoWCl9KSksaW5hY3RpdmVDb2xvcjptLmEuc3RyaW5nLGZvcm1hdHRlcjptLmEuZnVuYyxvbk1vdXNlRW50ZXI6bS5hLmZ1bmMsb25Nb3VzZUxlYXZlOm0uYS5mdW5jLG9uQ2xpY2s6bS5hLmZ1bmN9LFlmLmRlZmF1bHRQcm9wcz17aWNvblNpemU6MTQsbGF5b3V0OiJob3Jpem9udGFsIixhbGlnbjoiY2VudGVyIix2ZXJ0aWNhbEFsaWduOiJtaWRkbGUiLGluYWN0aXZlQ29sb3I6IiNjY2MifSxXZj1YZikpfHxXZjtmdW5jdGlvbiBsbChlKXtyZXR1cm4obGw9ImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBobChlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9LG49T2JqZWN0LmtleXMocik7ImZ1bmN0aW9uIj09PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYobj1uLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHIpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLGUpLmVudW1lcmFibGV9KSkpLG4uZm9yRWFjaChmdW5jdGlvbih0KXtwbChlLHQsclt0XSl9KX1yZXR1cm4gZX1mdW5jdGlvbiBwbChlLHQscil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1yLGV9ZnVuY3Rpb24gZGwoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiB5bChlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PWxsKHQpJiYiZnVuY3Rpb24iIT09dHlwZW9mIHQ/ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKTp0fWZ1bmN0aW9uIGdsKGUpe3JldHVybihnbD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24gdmwoZSx0KXtyZXR1cm4odmw9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfXZhciBtbD1mdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZX0sYmw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4hMD09PWU/TmYoKSh0LG1sKTp1KCkoZSk/TmYoKSh0LGUpOnR9LF9sPVguZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiJub25lIiE9PWV9KSxTbD1LKCh1bD1zbD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUscjshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KTtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxpPW5ldyBBcnJheShuKSxvPTA7bzxuO28rKylpW29dPWFyZ3VtZW50c1tvXTtyZXR1cm4ocj15bCh0aGlzLChlPWdsKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpKS5zdGF0ZT17Ym94V2lkdGg6LTEsYm94SGVpZ2h0Oi0xfSxyfXZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJnZsKGUsdCl9KHQseVsiQ29tcG9uZW50Il0pLHI9dCxpPVt7a2V5OiJnZXRXaXRoSGVpZ2h0Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPWUucHJvcHMubGF5b3V0O3JldHVybiJ2ZXJ0aWNhbCI9PT1yJiZSKGUucHJvcHMuaGVpZ2h0KT97aGVpZ2h0OmUucHJvcHMuaGVpZ2h0fToiaG9yaXpvbnRhbCI9PT1yP3t3aWR0aDplLnByb3BzLndpZHRofHx0fTpudWxsfX1dLChuPVt7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnVwZGF0ZUJCb3goKX19LHtrZXk6ImNvbXBvbmVudERpZFVwZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnVwZGF0ZUJCb3goKX19LHtrZXk6ImdldEJCb3giLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdGF0ZSx0PWUuYm94V2lkdGgscj1lLmJveEhlaWdodDtyZXR1cm4gdD49MCYmcj49MD97d2lkdGg6dCxoZWlnaHQ6cn06bnVsbH19LHtrZXk6ImdldERlZmF1bHRQb3NpdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscixuPXRoaXMucHJvcHMsaT1uLmxheW91dCxvPW4uYWxpZ24sYT1uLnZlcnRpY2FsQWxpZ24scz1uLm1hcmdpbix1PW4uY2hhcnRXaWR0aCxjPW4uY2hhcnRIZWlnaHQ7ZSYmKHZvaWQgMCE9PWUubGVmdCYmbnVsbCE9PWUubGVmdHx8dm9pZCAwIT09ZS5yaWdodCYmbnVsbCE9PWUucmlnaHQpfHwodD0iY2VudGVyIj09PW8mJiJ2ZXJ0aWNhbCI9PT1pP3tsZWZ0OigodXx8MCktKHRoaXMuZ2V0QkJveCgpfHx7d2lkdGg6MH0pLndpZHRoKS8yfToicmlnaHQiPT09bz97cmlnaHQ6cyYmcy5yaWdodHx8MH06e2xlZnQ6cyYmcy5sZWZ0fHwwfSk7ZSYmKHZvaWQgMCE9PWUudG9wJiZudWxsIT09ZS50b3B8fHZvaWQgMCE9PWUuYm90dG9tJiZudWxsIT09ZS5ib3R0b20pfHwocj0ibWlkZGxlIj09PWE/e3RvcDooKGN8fDApLSh0aGlzLmdldEJCb3goKXx8e2hlaWdodDowfSkuaGVpZ2h0KS8yfToiYm90dG9tIj09PWE/e2JvdHRvbTpzJiZzLmJvdHRvbXx8MH06e3RvcDpzJiZzLnRvcHx8MH0pO3JldHVybiBobCh7fSx0LHIpfX0se2tleToidXBkYXRlQkJveCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0YXRlLHQ9ZS5ib3hXaWR0aCxyPWUuYm94SGVpZ2h0LG49dGhpcy5wcm9wcy5vbkJCb3hVcGRhdGU7aWYodGhpcy53cmFwcGVyTm9kZSYmdGhpcy53cmFwcGVyTm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3Qpe3ZhciBpPXRoaXMud3JhcHBlck5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7KE1hdGguYWJzKGkud2lkdGgtdCk+MXx8TWF0aC5hYnMoaS5oZWlnaHQtcik+MSkmJnRoaXMuc2V0U3RhdGUoe2JveFdpZHRoOmkud2lkdGgsYm94SGVpZ2h0OmkuaGVpZ2h0fSxmdW5jdGlvbigpe24mJm4oaSl9KX1lbHNlLTE9PT10JiYtMT09PXJ8fHRoaXMuc2V0U3RhdGUoe2JveFdpZHRoOi0xLGJveEhlaWdodDotMX0sZnVuY3Rpb24oKXtuJiZuKG51bGwpfSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMscj10LmNvbnRlbnQsbj10LndpZHRoLGk9dC5oZWlnaHQsbz10LndyYXBwZXJTdHlsZSxhPXQucGF5bG9kVW5pcUJ5LHM9dC5wYXlsb2FkLGM9aGwoe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsd2lkdGg6bnx8ImF1dG8iLGhlaWdodDppfHwiYXV0byJ9LHRoaXMuZ2V0RGVmYXVsdFBvc2l0aW9uKG8pLG8pO3JldHVybiBnLmEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJyZWNoYXJ0cy1sZWdlbmQtd3JhcHBlciIsc3R5bGU6YyxyZWY6ZnVuY3Rpb24odCl7ZS53cmFwcGVyTm9kZT10fX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gZy5hLmlzVmFsaWRFbGVtZW50KGUpP2cuYS5jbG9uZUVsZW1lbnQoZSx0KTp1KCkoZSk/ZSh0KTpnLmEuY3JlYXRlRWxlbWVudChmbCx0KX0ocixobCh7fSx0aGlzLnByb3BzLHtwYXlsb2FkOmJsKGEscyl9KSkpfX1dKSYmZGwoci5wcm90b3R5cGUsbiksaSYmZGwocixpKSx0fSgpLHNsLmRpc3BsYXlOYW1lPSJMZWdlbmQiLHNsLnByb3BUeXBlcz17Y29udGVudDptLmEub25lT2ZUeXBlKFttLmEuZWxlbWVudCxtLmEuZnVuY10pLHdyYXBwZXJTdHlsZTptLmEub2JqZWN0LGNoYXJ0V2lkdGg6bS5hLm51bWJlcixjaGFydEhlaWdodDptLmEubnVtYmVyLHdpZHRoOm0uYS5udW1iZXIsaGVpZ2h0Om0uYS5udW1iZXIsaWNvblNpemU6bS5hLm51bWJlcixpY29uVHlwZTptLmEub25lT2YoX2wpLGxheW91dDptLmEub25lT2YoWyJob3Jpem9udGFsIiwidmVydGljYWwiXSksYWxpZ246bS5hLm9uZU9mKFsiY2VudGVyIiwibGVmdCIsInJpZ2h0Il0pLHZlcnRpY2FsQWxpZ246bS5hLm9uZU9mKFsidG9wIiwiYm90dG9tIiwibWlkZGxlIl0pLG1hcmdpbjptLmEuc2hhcGUoe3RvcDptLmEubnVtYmVyLGxlZnQ6bS5hLm51bWJlcixib3R0b206bS5hLm51bWJlcixyaWdodDptLmEubnVtYmVyfSkscGF5bG9hZDptLmEuYXJyYXlPZihtLmEuc2hhcGUoe3ZhbHVlOm0uYS5hbnksaWQ6bS5hLmFueSx0eXBlOm0uYS5vbmVPZihYKX0pKSxwYXlsb2RVbmlxQnk6bS5hLm9uZU9mVHlwZShbbS5hLmZ1bmMsbS5hLmJvb2xdKSxmb3JtYXR0ZXI6bS5hLmZ1bmMsb25Nb3VzZUVudGVyOm0uYS5mdW5jLG9uTW91c2VMZWF2ZTptLmEuZnVuYyxvbkNsaWNrOm0uYS5mdW5jLG9uQkJveFVwZGF0ZTptLmEuZnVuY30sc2wuZGVmYXVsdFByb3BzPXtpY29uU2l6ZToxNCxsYXlvdXQ6Imhvcml6b250YWwiLGFsaWduOiJjZW50ZXIiLHZlcnRpY2FsQWxpZ246ImJvdHRvbSJ9LGFsPXVsKSl8fGFsO2Z1bmN0aW9uIEVsKGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHQ9MCxyPW5ldyBBcnJheShlLmxlbmd0aCk7dDxlLmxlbmd0aDt0Kyspclt0XT1lW3RdO3JldHVybiByfX0oZSl8fGZ1bmN0aW9uKGUpe2lmKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoZSl8fCJbb2JqZWN0IEFyZ3VtZW50c10iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfSgpfWZ1bmN0aW9uIHdsKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30sbj1PYmplY3Qua2V5cyhyKTsiZnVuY3Rpb24iPT09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihuPW4uY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkuZW51bWVyYWJsZX0pKSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe1RsKGUsdCxyW3RdKX0pfXJldHVybiBlfWZ1bmN0aW9uIFRsKGUsdCxyKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPXIsZX12YXIgQWw9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBmKCkoZSl8fGYoKSh0KT9yOkIodCk/VCgpKGUsdCxyKTp1KCkodCk/dChlKTpyfSxDbD1mdW5jdGlvbihlLHQscixuKXt2YXIgaT1GZSgpKGUsZnVuY3Rpb24oZSl7cmV0dXJuIEFsKGUsdCl9KTtpZigibnVtYmVyIj09PXIpe3ZhciBvPWkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBSKGUpfHxwYXJzZUZsb2F0KGUsMTApfSk7cmV0dXJuIG8ubGVuZ3RoP1tqZSgpKG8pLExlKCkobyldOlsxLzAsLTEvMF19cmV0dXJuKG4/aS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWYoKShlKX0pOmkpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gQihlKT9lOiIifSl9LHhsPWZ1bmN0aW9uKGUpe3ZhciB0O3N3aXRjaChlLnR5cGUuZGlzcGxheU5hbWUpe2Nhc2UiTGluZSI6Y2FzZSJBcmVhIjpjYXNlIlJhZGFyIjp0PWUucHJvcHMuc3Ryb2tlO2JyZWFrO2RlZmF1bHQ6dD1lLnByb3BzLmZpbGx9cmV0dXJuIHR9LElsPWZ1bmN0aW9uKGUpe3ZhciB0LHI9ZS5jaGlsZHJlbixuPWUuZm9ybWF0ZWRHcmFwaGljYWxJdGVtcyxpPWUubGVnZW5kV2lkdGgsbz1lLmxlZ2VuZENvbnRlbnQsYT1KKHIsU2wpO3JldHVybiBhPyh0PWEucHJvcHMmJmEucHJvcHMucGF5bG9hZD9hLnByb3BzJiZhLnByb3BzLnBheWxvYWQ6ImNoaWxkcmVuIj09PW8/KG58fFtdKS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXt2YXIgcj10Lml0ZW0sbj10LnByb3BzLGk9bi5zZWN0b3JzfHxuLmRhdGF8fFtdO3JldHVybiBlLmNvbmNhdChpLm1hcChmdW5jdGlvbihlKXtyZXR1cm57dHlwZTphLnByb3BzLmljb25UeXBlfHxyLnByb3BzLmxlZ2VuZFR5cGUsdmFsdWU6ZS5uYW1lLGNvbG9yOmUuZmlsbCxwYXlsb2FkOmV9fSkpfSxbXSk6KG58fFtdKS5tYXAoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pdGVtLHI9dC5wcm9wcyxuPXIuZGF0YUtleSxpPXIubmFtZSxvPXIubGVnZW5kVHlwZTtyZXR1cm57aW5hY3RpdmU6ci5oaWRlLGRhdGFLZXk6bix0eXBlOmEucHJvcHMuaWNvblR5cGV8fG98fCJzcXVhcmUiLGNvbG9yOnhsKHQpLHZhbHVlOml8fG4scGF5bG9hZDp0LnByb3BzfX0pLHdsKHt9LGEucHJvcHMsU2wuZ2V0V2l0aEhlaWdodChhLGkpLHtwYXlsb2FkOnQsaXRlbTphfSkpOm51bGx9LGtsPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBpPXQucHJvcHMuY2hpbGRyZW4sbz1aKGksa2YpLmZpbHRlcihmdW5jdGlvbihlKXt2YXIgdD1lLnByb3BzLmRpcmVjdGlvbjtyZXR1cm4hKCFmKCkodCkmJiFmKCkobikpfHxuLmluZGV4T2YodCk+PTB9KTtpZihvJiZvLmxlbmd0aCl7dmFyIGE9by5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUucHJvcHMuZGF0YUtleX0pO3JldHVybiBlLnJlZHVjZShmdW5jdGlvbihlLHQpe3ZhciBuPUFsKHQsciwwKSxpPWQoKShuKT9bamUoKShuKSxMZSgpKG4pXTpbbixuXSxvPWEucmVkdWNlKGZ1bmN0aW9uKGUscil7dmFyIG49QWwodCxyLDApLG89aVswXS1NYXRoLmFicyhkKCkobik/blswXTpuKSxhPWlbMV0rTWF0aC5hYnMoZCgpKG4pP25bMV06bik7cmV0dXJuW01hdGgubWluKG8sZVswXSksTWF0aC5tYXgoYSxlWzFdKV19LFsxLzAsLTEvMF0pO3JldHVybltNYXRoLm1pbihvWzBdLGVbMF0pLE1hdGgubWF4KG9bMV0sZVsxXSldfSxbMS8wLC0xLzBdKX1yZXR1cm4gbnVsbH0sT2w9ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGk9dC5tYXAoZnVuY3Rpb24odCl7dmFyIGk9dC5wcm9wcy5kYXRhS2V5O3JldHVybiJudW1iZXIiPT09ciYmaSYma2woZSx0LGkpfHxDbChlLGkscixuKX0pO2lmKCJudW1iZXIiPT09cilyZXR1cm4gaS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm5bTWF0aC5taW4oZVswXSx0WzBdKSxNYXRoLm1heChlWzFdLHRbMV0pXX0sWzEvMCwtMS8wXSk7dmFyIG89e307cmV0dXJuIGkucmVkdWNlKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPTAsbj10Lmxlbmd0aDtyPG47cisrKW9bdFtyXV18fChvW3Rbcl1dPSEwLGUucHVzaCh0W3JdKSk7cmV0dXJuIGV9LFtdKX0sTmw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4iaG9yaXpvbnRhbCI9PT1lJiYieEF4aXMiPT09dHx8InZlcnRpY2FsIj09PWUmJiJ5QXhpcyI9PT10fHwiY2VudHJpYyI9PT1lJiYiYW5nbGVBeGlzIj09PXR8fCJyYWRpYWwiPT09ZSYmInJhZGl1c0F4aXMiPT09dH0sUGw9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGksbz1lLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5jb29yZGluYXRlPT09dCYmKG49ITApLGUuY29vcmRpbmF0ZT09PXImJihpPSEwKSxlLmNvb3JkaW5hdGV9KTtyZXR1cm4gbnx8by5wdXNoKHQpLGl8fG8ucHVzaChyKSxvfSxSbD1mdW5jdGlvbihlLHQscil7aWYoIWUpcmV0dXJuIG51bGw7dmFyIG49ZS5zY2FsZSxpPWUuZHVwbGljYXRlRG9tYWluLG89ZS50eXBlLGE9ZS5yYW5nZSxzPSh0fHxyKSYmImNhdGVnb3J5Ij09PW8mJm4uYmFuZHdpZHRoP24uYmFuZHdpZHRoKCkvMjowO3JldHVybiBzPSJhbmdsZUF4aXMiPT09ZS5heGlzVHlwZT8yKk4oYVswXS1hWzFdKSpzOnMsdCYmKGUudGlja3N8fGUubmljZVRpY2tzKT8oZS50aWNrc3x8ZS5uaWNlVGlja3MpLm1hcChmdW5jdGlvbihlKXt2YXIgdD1pP2kuaW5kZXhPZihlKTplO3JldHVybntjb29yZGluYXRlOm4odCkrcyx2YWx1ZTplLG9mZnNldDpzfX0pOmUuaXNDYXRlZ29yaWFsJiZlLmNhdGVnb3JpY2FsRG9tYWluP2UuY2F0ZWdvcmljYWxEb21haW4ubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJue2Nvb3JkaW5hdGU6bihlKSx2YWx1ZTplLGluZGV4OnQsb2Zmc2V0OnN9fSk6bi50aWNrcyYmIXI/bi50aWNrcyhlLnRpY2tDb3VudCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybntjb29yZGluYXRlOm4oZSkrcyx2YWx1ZTplLG9mZnNldDpzfX0pOm4uZG9tYWluKCkubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJue2Nvb3JkaW5hdGU6bihlKStzLHZhbHVlOmk/aVtlXTplLGluZGV4OnQsb2Zmc2V0OnN9fSl9LEJsPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbjtyZXR1cm4gdSgpKHIpP249cjp1KCkodCkmJihuPXQpLHUoKShlKXx8bj9mdW5jdGlvbih0LHIsaSxvKXt1KCkoZSkmJmUodCxyLGksbyksdSgpKG4pJiZuKHQscixpLG8pfTpudWxsfSxNbD1mdW5jdGlvbihlLHQpe3ZhciByPWUuc2NhbGUsaT1lLnR5cGUsbz1lLmxheW91dCxhPWUuYXhpc1R5cGU7aWYoImF1dG8iPT09cilyZXR1cm4icmFkaWFsIj09PW8mJiJyYWRpdXNBeGlzIj09PWE/e3NjYWxlOmd0KCkscmVhbFNjYWxlVHlwZToiYmFuZCJ9OiJyYWRpYWwiPT09byYmImFuZ2xlQXhpcyI9PT1hP3tzY2FsZTp3bigpLHJlYWxTY2FsZVR5cGU6ImxpbmVhciJ9OiJjYXRlZ29yeSI9PT1pJiZ0JiYodC5pbmRleE9mKCJMaW5lQ2hhcnQiKT49MHx8dC5pbmRleE9mKCJBcmVhQ2hhcnQiKT49MCk/e3NjYWxlOnZ0KCkscmVhbFNjYWxlVHlwZToicG9pbnQifToiY2F0ZWdvcnkiPT09aT97c2NhbGU6Z3QoKSxyZWFsU2NhbGVUeXBlOiJiYW5kIn06e3NjYWxlOnduKCkscmVhbFNjYWxlVHlwZToibGluZWFyIn07aWYoTygpKHIpKXt2YXIgcz0ic2NhbGUiLmNvbmNhdChyLnNsaWNlKDAsMSkudG9VcHBlckNhc2UoKSkuY29uY2F0KHIuc2xpY2UoMSkpO3JldHVybntzY2FsZToobltzXXx8dnQpKCkscmVhbFNjYWxlVHlwZTpuW3NdP3M6InBvaW50In19cmV0dXJuIHUoKShyKT97c2NhbGU6cn06e3NjYWxlOnZ0KCkscmVhbFNjYWxlVHlwZToicG9pbnQifX0sTGw9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kb21haW4oKTtpZih0JiYhKHQubGVuZ3RoPD0yKSl7dmFyIHI9dC5sZW5ndGgsbj1lLnJhbmdlKCksaT1NYXRoLm1pbihuWzBdLG5bMV0pLTFlLTQsbz1NYXRoLm1heChuWzBdLG5bMV0pKzFlLTQsYT1lKHRbMF0pLHM9ZSh0W3ItMV0pOyhhPGl8fGE+b3x8czxpfHxzPm8pJiZlLmRvbWFpbihbdFswXSx0W3ItMV1dKX19LERsPXtzaWduOmZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoO2lmKCEodDw9MCkpZm9yKHZhciByPTAsbj1lWzBdLmxlbmd0aDtyPG47KytyKWZvcih2YXIgaT0wLG89MCxhPTA7YTx0OysrYSl7dmFyIHM9QygpKGVbYV1bcl1bMV0pP2VbYV1bcl1bMF06ZVthXVtyXVsxXTtzPj0wPyhlW2FdW3JdWzBdPWksZVthXVtyXVsxXT1pK3MsaT1lW2FdW3JdWzFdKTooZVthXVtyXVswXT1vLGVbYV1bcl1bMV09bytzLG89ZVthXVtyXVsxXSl9fSxleHBhbmQ6ZnVuY3Rpb24oZSx0KXtpZigobj1lLmxlbmd0aCk+MCl7Zm9yKHZhciByLG4saSxvPTAsYT1lWzBdLmxlbmd0aDtvPGE7KytvKXtmb3IoaT1yPTA7cjxuOysrcilpKz1lW3JdW29dWzFdfHwwO2lmKGkpZm9yKHI9MDtyPG47KytyKWVbcl1bb11bMV0vPWl9QnMoZSx0KX19LG5vbmU6QnMsc2lsaG91ZXR0ZTpmdW5jdGlvbihlLHQpe2lmKChyPWUubGVuZ3RoKT4wKXtmb3IodmFyIHIsbj0wLGk9ZVt0WzBdXSxvPWkubGVuZ3RoO248bzsrK24pe2Zvcih2YXIgYT0wLHM9MDthPHI7KythKXMrPWVbYV1bbl1bMV18fDA7aVtuXVsxXSs9aVtuXVswXT0tcy8yfUJzKGUsdCl9fSx3aWdnbGU6ZnVuY3Rpb24oZSx0KXtpZigoaT1lLmxlbmd0aCk+MCYmKG49KHI9ZVt0WzBdXSkubGVuZ3RoKT4wKXtmb3IodmFyIHIsbixpLG89MCxhPTE7YTxuOysrYSl7Zm9yKHZhciBzPTAsdT0wLGM9MDtzPGk7KytzKXtmb3IodmFyIGY9ZVt0W3NdXSxsPWZbYV1bMV18fDAsaD0obC0oZlthLTFdWzFdfHwwKSkvMixwPTA7cDxzOysrcCl7dmFyIGQ9ZVt0W3BdXTtoKz0oZFthXVsxXXx8MCktKGRbYS0xXVsxXXx8MCl9dSs9bCxjKz1oKmx9clthLTFdWzFdKz1yW2EtMV1bMF09byx1JiYoby09Yy91KX1yW2EtMV1bMV0rPXJbYS0xXVswXT1vLEJzKGUsdCl9fX0samw9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXQubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnByb3BzLmRhdGFLZXl9KTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1CYShbXSksdD1NcyxyPUJzLG49THM7ZnVuY3Rpb24gaShpKXt2YXIgbyxhLHM9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdT1pLmxlbmd0aCxjPXMubGVuZ3RoLGY9bmV3IEFycmF5KGMpO2ZvcihvPTA7bzxjOysrbyl7Zm9yKHZhciBsLGg9c1tvXSxwPWZbb109bmV3IEFycmF5KHUpLGQ9MDtkPHU7KytkKXBbZF09bD1bMCwrbihpW2RdLGgsZCxpKV0sbC5kYXRhPWlbZF07cC5rZXk9aH1mb3Iobz0wLGE9dChmKTtvPGM7KytvKWZbYVtvXV0uaW5kZXg9bztyZXR1cm4gcihmLGEpLGZ9cmV0dXJuIGkua2V5cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT09dHlwZW9mIHQ/dDpCYShIYS5jYWxsKHQpKSxpKTplfSxpLnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PT10eXBlb2YgZT9lOkJhKCtlKSxpKTpufSxpLm9yZGVyPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW51bGw9PWU/TXM6ImZ1bmN0aW9uIj09PXR5cGVvZiBlP2U6QmEoSGEuY2FsbChlKSksaSk6dH0saS5vZmZzZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09ZT9CczplLGkpOnJ9LGl9KCkua2V5cyhuKS52YWx1ZShmdW5jdGlvbihlLHQpe3JldHVybitBbChlLHQsMCl9KS5vcmRlcihNcykub2Zmc2V0KERsW3JdKShlKX0sVWw9ZnVuY3Rpb24oZSx0KXt2YXIgcj10LnJlYWxTY2FsZVR5cGUsbj10LnR5cGUsaT10LnRpY2tDb3VudCxvPXQub3JpZ2luYWxEb21haW4sYT10LmFsbG93RGVjaW1hbHMscz1yfHx0LnNjYWxlO2lmKCJhdXRvIiE9PXMmJiJsaW5lYXIiIT09cylyZXR1cm4gbnVsbDtpZihpJiYibnVtYmVyIj09PW4mJm8mJigiYXV0byI9PT1vWzBdfHwiYXV0byI9PT1vWzFdKSl7dmFyIHU9ZS5kb21haW4oKSxjPU9iamVjdChWZS5nZXROaWNlVGlja1ZhbHVlcykodSxpLGEpO3JldHVybiBlLmRvbWFpbihmdW5jdGlvbihlLHQpe3JldHVybiJudW1iZXIiPT09dD9bamUoKShlKSxMZSgpKGUpXTplfShjLG4pKSx7bmljZVRpY2tzOmN9fWlmKGkmJiJudW1iZXIiPT09bil7dmFyIGY9ZS5kb21haW4oKTtyZXR1cm57bmljZVRpY2tzOk9iamVjdChWZS5nZXRUaWNrVmFsdWVzRml4ZWREb21haW4pKGYsaSxhKX19cmV0dXJuIG51bGx9LEZsPWZ1bmN0aW9uKGUpe3ZhciB0PWUuYXhpcyxyPWUudGlja3Msbj1lLmJhbmRTaXplLGk9ZS5lbnRyeSxvPWUuaW5kZXgsYT1lLmRhdGFLZXk7aWYoImNhdGVnb3J5Ij09PXQudHlwZSl7aWYoIXQuYWxsb3dEdXBsaWNhdGVkQ2F0ZWdvcnkmJnQuZGF0YUtleSYmIWYoKShpW3QuZGF0YUtleV0pKXt2YXIgcz1GKHIsInZhbHVlIixpW3QuZGF0YUtleV0pO2lmKHMpcmV0dXJuIHMuY29vcmRpbmF0ZStuLzJ9cmV0dXJuIHJbb10/cltvXS5jb29yZGluYXRlK24vMjpudWxsfXZhciB1PUFsKGksZigpKGEpP3QuZGF0YUtleTphKTtyZXR1cm4gZigpKHUpP251bGw6dC5zY2FsZSh1KX0sVmw9ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmFsd2F5c1Nob3csbj1lLmlmT3ZlcmZsb3c7cmV0dXJuIHImJihuPSJleHRlbmREb21haW4iKSxuPT09dH0scWw9ZnVuY3Rpb24oZSx0LHIsbixpKXt2YXIgbz1aKGUsTHUpLGE9WihlLFR1KSxzPW8uY29uY2F0KGEpLHU9WihlLGJmKSxjPSIiLmNvbmNhdChuLCJJZCIpLGY9blswXSxsPXQ7aWYocy5sZW5ndGgmJihsPXMucmVkdWNlKGZ1bmN0aW9uKGUsdCl7aWYodC5wcm9wc1tjXT09PXImJlZsKHQucHJvcHMsImV4dGVuZERvbWFpbiIpJiZSKHQucHJvcHNbZl0pKXt2YXIgbj10LnByb3BzW2ZdO3JldHVybltNYXRoLm1pbihlWzBdLG4pLE1hdGgubWF4KGVbMV0sbildfXJldHVybiBlfSxsKSksdS5sZW5ndGgpe3ZhciBoPSIiLmNvbmNhdChmLCIxIikscD0iIi5jb25jYXQoZiwiMiIpO2w9dS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtpZih0LnByb3BzW2NdPT09ciYmVmwodC5wcm9wcywiZXh0ZW5kRG9tYWluIikmJlIodC5wcm9wc1toXSkmJlIodC5wcm9wc1twXSkpe3ZhciBuPXQucHJvcHNbaF0saT10LnByb3BzW3BdO3JldHVybltNYXRoLm1pbihlWzBdLG4saSksTWF0aC5tYXgoZVsxXSxuLGkpXX1yZXR1cm4gZX0sbCl9cmV0dXJuIGkmJmkubGVuZ3RoJiYobD1pLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiBSKHQpP1tNYXRoLm1pbihlWzBdLHQpLE1hdGgubWF4KGVbMV0sdCldOmV9LGwpKSxsfSxLbD1mdW5jdGlvbihlLHQscil7cmV0dXJuIE9iamVjdC5rZXlzKGUpLnJlZHVjZShmdW5jdGlvbihuLGkpe3ZhciBvPWVbaV0uc3RhY2tlZERhdGEucmVkdWNlKGZ1bmN0aW9uKGUsbil7dmFyIGk9bi5zbGljZSh0LHIrMSkucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuW2plKCkodC5jb25jYXQoW2VbMF1dKS5maWx0ZXIoUikpLExlKCkodC5jb25jYXQoW2VbMV1dKS5maWx0ZXIoUikpXX0sWzEvMCwtMS8wXSk7cmV0dXJuW01hdGgubWluKGVbMF0saVswXSksTWF0aC5tYXgoZVsxXSxpWzFdKV19LFsxLzAsLTEvMF0pO3JldHVybltNYXRoLm1pbihvWzBdLG5bMF0pLE1hdGgubWF4KG9bMV0sblsxXSldfSxbMS8wLC0xLzBdKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT0xLzB8fGU9PT0tMS8wPzA6ZX0pfSx6bD0vXmRhdGFNaW5bXHNdKi1bXHNdKihbMC05XSsoWy5dezF9WzAtOV0rKXswLDF9KSQvLEdsPS9eZGF0YU1heFtcc10qXCtbXHNdKihbMC05XSsoWy5dezF9WzAtOV0rKXswLDF9KSQvLEhsPWZ1bmN0aW9uKGUsdCxyKXtpZighZCgpKGUpKXJldHVybiB0O3ZhciBuPVtdO2lmKFIoZVswXSkpblswXT1yP2VbMF06TWF0aC5taW4oZVswXSx0WzBdKTtlbHNlIGlmKHpsLnRlc3QoZVswXSkpe3ZhciBpPSt6bC5leGVjKGVbMF0pWzFdO25bMF09dFswXS1pfWVsc2UgdSgpKGVbMF0pP25bMF09ZVswXSh0WzBdKTpuWzBdPXRbMF07aWYoUihlWzFdKSluWzFdPXI/ZVsxXTpNYXRoLm1heChlWzFdLHRbMV0pO2Vsc2UgaWYoR2wudGVzdChlWzFdKSl7dmFyIG89K0dsLmV4ZWMoZVsxXSlbMV07blsxXT10WzFdK299ZWxzZSB1KCkoZVsxXSk/blsxXT1lWzFdKHRbMV0pOm5bMV09dFsxXTtyZXR1cm4gbn0sV2w9ZnVuY3Rpb24oZSx0KXtpZihlJiZlLnNjYWxlJiZlLnNjYWxlLmJhbmR3aWR0aClyZXR1cm4gZS5zY2FsZS5iYW5kd2lkdGgoKTtpZihlJiZ0JiZ0Lmxlbmd0aD49Mil7Zm9yKHZhciByPUJlKCkodCxmdW5jdGlvbihlKXtyZXR1cm4gZS5jb29yZGluYXRlfSksbj0xLzAsaT0xLG89ci5sZW5ndGg7aTxvO2krKyl7dmFyIGE9cltpXSxzPXJbaS0xXTtuPU1hdGgubWluKChhLmNvb3JkaW5hdGV8fDApLShzLmNvb3JkaW5hdGV8fDApLG4pfXJldHVybiBuPT09MS8wPzA6bn1yZXR1cm4gMH0sWWw9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlJiZlLmxlbmd0aD9QZSgpKGUsVCgpKHIsInR5cGUuZGVmYXVsdFByb3BzLmRvbWFpbiIpKT90OmU6dH07ZnVuY3Rpb24gWGwoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fSxuPU9iamVjdC5rZXlzKHIpOyJmdW5jdGlvbiI9PT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKG49bi5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhyKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKS5lbnVtZXJhYmxlfSkpKSxuLmZvckVhY2goZnVuY3Rpb24odCl7UWwoZSx0LHJbdF0pfSl9cmV0dXJuIGV9ZnVuY3Rpb24gUWwoZSx0LHIpe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09cixlfXZhciAkbD1NYXRoLlBJLzE4MCxabD1mdW5jdGlvbihlKXtyZXR1cm4gMTgwKmUvTWF0aC5QSX0sSmw9ZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJue3g6ZStNYXRoLmNvcygtJGwqbikqcix5OnQrTWF0aC5zaW4oLSRsKm4pKnJ9fSxlaD1mdW5jdGlvbihlLHQpe3ZhciByPWUueCxuPWUueSxpPXQuY3gsbz10LmN5LGE9ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLngsbj1lLnksaT10Lngsbz10Lnk7cmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyhyLWksMikrTWF0aC5wb3cobi1vLDIpKX0oe3g6cix5Om59LHt4OmkseTpvfSk7aWYoYTw9MClyZXR1cm57cmFkaXVzOmF9O3ZhciBzPShyLWkpL2EsdT1NYXRoLmFjb3Mocyk7cmV0dXJuIG4+byYmKHU9MipNYXRoLlBJLXUpLHtyYWRpdXM6YSxhbmdsZTpabCh1KSxhbmdsZUluUmFkaWFuOnV9fSx0aD1mdW5jdGlvbihlLHQpe3ZhciByPXQuc3RhcnRBbmdsZSxuPXQuZW5kQW5nbGUsaT1NYXRoLmZsb29yKHIvMzYwKSxvPU1hdGguZmxvb3Iobi8zNjApO3JldHVybiBlKzM2MCpNYXRoLm1pbihpLG8pfSxyaD1mdW5jdGlvbihlLHQpe3ZhciByPWUueCxuPWUueSxpPWVoKHt4OnIseTpufSx0KSxvPWkucmFkaXVzLGE9aS5hbmdsZSxzPXQuaW5uZXJSYWRpdXMsdT10Lm91dGVyUmFkaXVzO2lmKG88c3x8bz51KXJldHVybiExO2lmKDA9PT1vKXJldHVybiEwO3ZhciBjLGY9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdGFydEFuZ2xlLHI9ZS5lbmRBbmdsZSxuPU1hdGguZmxvb3IodC8zNjApLGk9TWF0aC5mbG9vcihyLzM2MCksbz1NYXRoLm1pbihuLGkpO3JldHVybntzdGFydEFuZ2xlOnQtMzYwKm8sZW5kQW5nbGU6ci0zNjAqb319KHQpLGw9Zi5zdGFydEFuZ2xlLGg9Zi5lbmRBbmdsZSxwPWE7aWYobDw9aCl7Zm9yKDtwPmg7KXAtPTM2MDtmb3IoO3A8bDspcCs9MzYwO2M9cD49bCYmcDw9aH1lbHNle2Zvcig7cD5sOylwLT0zNjA7Zm9yKDtwPGg7KXArPTM2MDtjPXA+PWgmJnA8PWx9cmV0dXJuIGM/WGwoe30sdCx7cmFkaXVzOm8sYW5nbGU6dGgocCx0KX0pOm51bGx9O2Z1bmN0aW9uIG5oKGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHQ9MCxyPW5ldyBBcnJheShlLmxlbmd0aCk7dDxlLmxlbmd0aDt0Kyspclt0XT1lW3RdO3JldHVybiByfX0oZSl8fGZ1bmN0aW9uKGUpe2lmKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoZSl8fCJbb2JqZWN0IEFyZ3VtZW50c10iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfSgpfWZ1bmN0aW9uIGloKCl7cmV0dXJuKGloPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPWFyZ3VtZW50c1t0XTtmb3IodmFyIG4gaW4gcilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixuKSYmKGVbbl09cltuXSl9cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gb2goZSx0LHIpe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09cixlfXZhciBhaD1tLmEuc2hhcGUoe3g6bS5hLm51bWJlcix5Om0uYS5udW1iZXIsd2lkdGg6bS5hLm51bWJlcixoZWlnaHQ6bS5hLm51bWJlcn0pLHNoPW0uYS5zaGFwZSh7Y3g6bS5hLm51bWJlcixjeTptLmEubnVtYmVyLGlubmVyUmFkaXVzOm0uYS5udW1iZXIsb3V0ZXJSYWRpdXM6bS5hLm51bWJlcixzdGFydEFuZ2xlOm0uYS5udW1iZXIsZW5kQW5nbGU6bS5hLm51bWJlcn0pLHVoPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30sbj1PYmplY3Qua2V5cyhyKTsiZnVuY3Rpb24iPT09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihuPW4uY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkuZW51bWVyYWJsZX0pKSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe29oKGUsdCxyW3RdKX0pfXJldHVybiBlfSh7fSxILHt2aWV3Qm94Om0uYS5vbmVPZlR5cGUoW2FoLHNoXSksZm9ybWF0dGVyOm0uYS5mdW5jLHZhbHVlOm0uYS5vbmVPZlR5cGUoW20uYS5udW1iZXIsbS5hLnN0cmluZ10pLG9mZnNldDptLmEubnVtYmVyLHBvc2l0aW9uOm0uYS5vbmVPZihbInRvcCIsImxlZnQiLCJyaWdodCIsImJvdHRvbSIsImluc2lkZSIsIm91dHNpZGUiLCJpbnNpZGVMZWZ0IiwiaW5zaWRlUmlnaHQiLCJpbnNpZGVUb3AiLCJpbnNpZGVCb3R0b20iLCJpbnNpZGVUb3BMZWZ0IiwiaW5zaWRlQm90dG9tTGVmdCIsImluc2lkZVRvcFJpZ2h0IiwiaW5zaWRlQm90dG9tUmlnaHQiLCJpbnNpZGVTdGFydCIsImluc2lkZUVuZCIsImVuZCIsImNlbnRlciIsImNlbnRlclRvcCIsImNlbnRlckJvdHRvbSJdKSxjaGlsZHJlbjptLmEub25lT2ZUeXBlKFttLmEuYXJyYXlPZihtLmEubm9kZSksbS5hLm5vZGVdKSxjbGFzc05hbWU6bS5hLnN0cmluZyxjb250ZW50Om0uYS5vbmVPZlR5cGUoW20uYS5lbGVtZW50LG0uYS5mdW5jXSl9KSxjaD1mdW5jdGlvbihlKXt2YXIgdD1lLnZhbHVlLHI9ZS5mb3JtYXR0ZXIsbj1mKCkoZS5jaGlsZHJlbik/dDplLmNoaWxkcmVuO3JldHVybiB1KCkocik/cihuKTpufSxmaD1mdW5jdGlvbihlLHQscil7dmFyIG4saSxvPWUucG9zaXRpb24sYT1lLnZpZXdCb3gscz1lLm9mZnNldCx1PWUuY2xhc3NOYW1lLGM9YS5jeCxsPWEuY3ksaD1hLmlubmVyUmFkaXVzLHA9YS5vdXRlclJhZGl1cyxkPWEuc3RhcnRBbmdsZSx5PWEuZW5kQW5nbGUsdj1hLmNsb2NrV2lzZSxtPShoK3ApLzIsYj1mdW5jdGlvbihlLHQpe3JldHVybiBOKHQtZSkqTWF0aC5taW4oTWF0aC5hYnModC1lKSwzNjApfShkLHkpLFM9Yj49MD8xOi0xOyJpbnNpZGVTdGFydCI9PT1vPyhuPWQrUypzLGk9dik6Imluc2lkZUVuZCI9PT1vPyhuPXktUypzLGk9IXYpOiJlbmQiPT09byYmKG49eStTKnMsaT12KSxpPWI8PTA/aTohaTt2YXIgRT1KbChjLGwsbSxuKSx3PUpsKGMsbCxtLG4rMzU5KihpPzE6LTEpKSxUPSJNIi5jb25jYXQoRS54LCIsIikuY29uY2F0KEUueSwiXG4gICAgQSIpLmNvbmNhdChtLCIsIikuY29uY2F0KG0sIiwwLDEsIikuY29uY2F0KGk/MDoxLCIsXG4gICAgIikuY29uY2F0KHcueCwiLCIpLmNvbmNhdCh3LnkpLEE9ZigpKGUuaWQpP0woInJlY2hhcnRzLXJhZGlhbC1saW5lLSIpOmUuaWQ7cmV0dXJuIGcuYS5jcmVhdGVFbGVtZW50KCJ0ZXh0IixpaCh7fSxyLHtkb21pbmFudEJhc2VsaW5lOiJjZW50cmFsIixjbGFzc05hbWU6XygpKCJyZWNoYXJ0cy1yYWRpYWwtYmFyLWxhYmVsIix1KX0pLGcuYS5jcmVhdGVFbGVtZW50KCJkZWZzIixudWxsLGcuYS5jcmVhdGVFbGVtZW50KCJwYXRoIix7aWQ6QSxkOlR9KSksZy5hLmNyZQ=="
}

github/deemru/w8io/169f3d6 
4.77 ms