3NCUbh7cABzRyEMEXAcGCAozSuxvUTf75ms · data · 2.7c767379.chunk.js_15
{
"2.7c767379.chunk.js_15": "base64:cmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpOnR9ZnVuY3Rpb24gZ2woZSl7cmV0dXJuKGdsPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9KShlKX1mdW5jdGlvbiB2bChlLHQpe3JldHVybih2bD1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0pKGUsdCl9dmFyIG1sPWZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlfSxibD1mdW5jdGlvbihlLHQpe3JldHVybiEwPT09ZT9OZigpKHQsbWwpOnUoKShlKT9OZigpKHQsZSk6dH0sX2w9WC5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIm5vbmUiIT09ZX0pLFNsPUsoKHVsPXNsPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxyOyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpO2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLGk9bmV3IEFycmF5KG4pLG89MDtvPG47bysrKWlbb109YXJndW1lbnRzW29dO3JldHVybihyPXlsKHRoaXMsKGU9Z2wodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSkpLnN0YXRlPXtib3hXaWR0aDotMSxib3hIZWlnaHQ6LTF9LHJ9dmFyIHIsbixpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmdmwoZSx0KX0odCx5WyJDb21wb25lbnQiXSkscj10LGk9W3trZXk6ImdldFdpdGhIZWlnaHQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5wcm9wcy5sYXlvdXQ7cmV0dXJuInZlcnRpY2FsIj09PXImJlIoZS5wcm9wcy5oZWlnaHQpP3toZWlnaHQ6ZS5wcm9wcy5oZWlnaHR9OiJob3Jpem9udGFsIj09PXI/e3dpZHRoOmUucHJvcHMud2lkdGh8fHR9Om51bGx9fV0sKG49W3trZXk6ImNvbXBvbmVudERpZE1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMudXBkYXRlQkJveCgpfX0se2tleToiY29tcG9uZW50RGlkVXBkYXRlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMudXBkYXRlQkJveCgpfX0se2tleToiZ2V0QkJveCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0YXRlLHQ9ZS5ib3hXaWR0aCxyPWUuYm94SGVpZ2h0O3JldHVybiB0Pj0wJiZyPj0wP3t3aWR0aDp0LGhlaWdodDpyfTpudWxsfX0se2tleToiZ2V0RGVmYXVsdFBvc2l0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyLG49dGhpcy5wcm9wcyxpPW4ubGF5b3V0LG89bi5hbGlnbixhPW4udmVydGljYWxBbGlnbixzPW4ubWFyZ2luLHU9bi5jaGFydFdpZHRoLGM9bi5jaGFydEhlaWdodDtlJiYodm9pZCAwIT09ZS5sZWZ0JiZudWxsIT09ZS5sZWZ0fHx2b2lkIDAhPT1lLnJpZ2h0JiZudWxsIT09ZS5yaWdodCl8fCh0PSJjZW50ZXIiPT09byYmInZlcnRpY2FsIj09PWk/e2xlZnQ6KCh1fHwwKS0odGhpcy5nZXRCQm94KCl8fHt3aWR0aDowfSkud2lkdGgpLzJ9OiJyaWdodCI9PT1vP3tyaWdodDpzJiZzLnJpZ2h0fHwwfTp7bGVmdDpzJiZzLmxlZnR8fDB9KTtlJiYodm9pZCAwIT09ZS50b3AmJm51bGwhPT1lLnRvcHx8dm9pZCAwIT09ZS5ib3R0b20mJm51bGwhPT1lLmJvdHRvbSl8fChyPSJtaWRkbGUiPT09YT97dG9wOigoY3x8MCktKHRoaXMuZ2V0QkJveCgpfHx7aGVpZ2h0OjB9KS5oZWlnaHQpLzJ9OiJib3R0b20iPT09YT97Ym90dG9tOnMmJnMuYm90dG9tfHwwfTp7dG9wOnMmJnMudG9wfHwwfSk7cmV0dXJuIGhsKHt9LHQscil9fSx7a2V5OiJ1cGRhdGVCQm94Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuc3RhdGUsdD1lLmJveFdpZHRoLHI9ZS5ib3hIZWlnaHQsbj10aGlzLnByb3BzLm9uQkJveFVwZGF0ZTtpZih0aGlzLndyYXBwZXJOb2RlJiZ0aGlzLndyYXBwZXJOb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCl7dmFyIGk9dGhpcy53cmFwcGVyTm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsoTWF0aC5hYnMoaS53aWR0aC10KT4xfHxNYXRoLmFicyhpLmhlaWdodC1yKT4xKSYmdGhpcy5zZXRTdGF0ZSh7Ym94V2lkdGg6aS53aWR0aCxib3hIZWlnaHQ6aS5oZWlnaHR9LGZ1bmN0aW9uKCl7biYmbihpKX0pfWVsc2UtMT09PXQmJi0xPT09cnx8dGhpcy5zZXRTdGF0ZSh7Ym94V2lkdGg6LTEsYm94SGVpZ2h0Oi0xfSxmdW5jdGlvbigpe24mJm4obnVsbCl9KX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wcyxyPXQuY29udGVudCxuPXQud2lkdGgsaT10LmhlaWdodCxvPXQud3JhcHBlclN0eWxlLGE9dC5wYXlsb2RVbmlxQnkscz10LnBheWxvYWQsYz1obCh7cG9zaXRpb246ImFic29sdXRlIix3aWR0aDpufHwiYXV0byIsaGVpZ2h0Oml8fCJhdXRvIn0sdGhpcy5nZXREZWZhdWx0UG9zaXRpb24obyksbyk7cmV0dXJuIGcuYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InJlY2hhcnRzLWxlZ2VuZC13cmFwcGVyIixzdHlsZTpjLHJlZjpmdW5jdGlvbih0KXtlLndyYXBwZXJOb2RlPXR9fSxmdW5jdGlvbihlLHQpe3JldHVybiBnLmEuaXNWYWxpZEVsZW1lbnQoZSk/Zy5hLmNsb25lRWxlbWVudChlLHQpOnUoKShlKT9lKHQpOmcuYS5jcmVhdGVFbGVtZW50KGZsLHQpfShyLGhsKHt9LHRoaXMucHJvcHMse3BheWxvYWQ6YmwoYSxzKX0pKSl9fV0pJiZkbChyLnByb3RvdHlwZSxuKSxpJiZkbChyLGkpLHR9KCksc2wuZGlzcGxheU5hbWU9IkxlZ2VuZCIsc2wucHJvcFR5cGVzPXtjb250ZW50Om0uYS5vbmVPZlR5cGUoW20uYS5lbGVtZW50LG0uYS5mdW5jXSksd3JhcHBlclN0eWxlOm0uYS5vYmplY3QsY2hhcnRXaWR0aDptLmEubnVtYmVyLGNoYXJ0SGVpZ2h0Om0uYS5udW1iZXIsd2lkdGg6bS5hLm51bWJlcixoZWlnaHQ6bS5hLm51bWJlcixpY29uU2l6ZTptLmEubnVtYmVyLGljb25UeXBlOm0uYS5vbmVPZihfbCksbGF5b3V0Om0uYS5vbmVPZihbImhvcml6b250YWwiLCJ2ZXJ0aWNhbCJdKSxhbGlnbjptLmEub25lT2YoWyJjZW50ZXIiLCJsZWZ0IiwicmlnaHQiXSksdmVydGljYWxBbGlnbjptLmEub25lT2YoWyJ0b3AiLCJib3R0b20iLCJtaWRkbGUiXSksbWFyZ2luOm0uYS5zaGFwZSh7dG9wOm0uYS5udW1iZXIsbGVmdDptLmEubnVtYmVyLGJvdHRvbTptLmEubnVtYmVyLHJpZ2h0Om0uYS5udW1iZXJ9KSxwYXlsb2FkOm0uYS5hcnJheU9mKG0uYS5zaGFwZSh7dmFsdWU6bS5hLmFueSxpZDptLmEuYW55LHR5cGU6bS5hLm9uZU9mKFgpfSkpLHBheWxvZFVuaXFCeTptLmEub25lT2ZUeXBlKFttLmEuZnVuYyxtLmEuYm9vbF0pLGZvcm1hdHRlcjptLmEuZnVuYyxvbk1vdXNlRW50ZXI6bS5hLmZ1bmMsb25Nb3VzZUxlYXZlOm0uYS5mdW5jLG9uQ2xpY2s6bS5hLmZ1bmMsb25CQm94VXBkYXRlOm0uYS5mdW5jfSxzbC5kZWZhdWx0UHJvcHM9e2ljb25TaXplOjE0LGxheW91dDoiaG9yaXpvbnRhbCIsYWxpZ246ImNlbnRlciIsdmVydGljYWxBbGlnbjoiYm90dG9tIn0sYWw9dWwpKXx8YWw7ZnVuY3Rpb24gRWwoZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpe2Zvcih2YXIgdD0wLHI9bmV3IEFycmF5KGUubGVuZ3RoKTt0PGUubGVuZ3RoO3QrKylyW3RdPWVbdF07cmV0dXJuIHJ9fShlKXx8ZnVuY3Rpb24oZSl7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChlKXx8IltvYmplY3QgQXJndW1lbnRzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkpcmV0dXJuIEFycmF5LmZyb20oZSl9KGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9KCl9ZnVuY3Rpb24gd2woZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fSxuPU9iamVjdC5rZXlzKHIpOyJmdW5jdGlvbiI9PT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKG49bi5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhyKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKS5lbnVtZXJhYmxlfSkpKSxuLmZvckVhY2goZnVuY3Rpb24odCl7VGwoZSx0LHJbdF0pfSl9cmV0dXJuIGV9ZnVuY3Rpb24gVGwoZSx0LHIpe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09cixlfXZhciBBbD1mdW5jdGlvbihlLHQscil7cmV0dXJuIGYoKShlKXx8ZigpKHQpP3I6Qih0KT9UKCkoZSx0LHIpOnUoKSh0KT90KGUpOnJ9LENsPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBpPUZlKCkoZSxmdW5jdGlvbihlKXtyZXR1cm4gQWwoZSx0KX0pO2lmKCJudW1iZXIiPT09cil7dmFyIG89aS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIFIoZSl8fHBhcnNlRmxvYXQoZSwxMCl9KTtyZXR1cm4gby5sZW5ndGg/W2plKCkobyksTGUoKShvKV06WzEvMCwtMS8wXX1yZXR1cm4obj9pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZigpKGUpfSk6aSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBCKGUpP2U6IiJ9KX0seGw9ZnVuY3Rpb24oZSl7dmFyIHQ7c3dpdGNoKGUudHlwZS5kaXNwbGF5TmFtZSl7Y2FzZSJMaW5lIjpjYXNlIkFyZWEiOmNhc2UiUmFkYXIiOnQ9ZS5wcm9wcy5zdHJva2U7YnJlYWs7ZGVmYXVsdDp0PWUucHJvcHMuZmlsbH1yZXR1cm4gdH0sSWw9ZnVuY3Rpb24oZSl7dmFyIHQscj1lLmNoaWxkcmVuLG49ZS5mb3JtYXRlZEdyYXBoaWNhbEl0ZW1zLGk9ZS5sZWdlbmRXaWR0aCxvPWUubGVnZW5kQ29udGVudCxhPUoocixTbCk7cmV0dXJuIGE/KHQ9YS5wcm9wcyYmYS5wcm9wcy5wYXlsb2FkP2EucHJvcHMmJmEucHJvcHMucGF5bG9hZDoiY2hpbGRyZW4iPT09bz8obnx8W10pLnJlZHVjZShmdW5jdGlvbihlLHQpe3ZhciByPXQuaXRlbSxuPXQucHJvcHMsaT1uLnNlY3RvcnN8fG4uZGF0YXx8W107cmV0dXJuIGUuY29uY2F0KGkubWFwKGZ1bmN0aW9uKGUpe3JldHVybnt0eXBlOmEucHJvcHMuaWNvblR5cGV8fHIucHJvcHMubGVnZW5kVHlwZSx2YWx1ZTplLm5hbWUsY29sb3I6ZS5maWxsLHBheWxvYWQ6ZX19KSl9LFtdKToobnx8W10pLm1hcChmdW5jdGlvbihlKXt2YXIgdD1lLml0ZW0scj10LnByb3BzLG49ci5kYXRhS2V5LGk9ci5uYW1lLG89ci5sZWdlbmRUeXBlO3JldHVybntpbmFjdGl2ZTpyLmhpZGUsZGF0YUtleTpuLHR5cGU6YS5wcm9wcy5pY29uVHlwZXx8b3x8InNxdWFyZSIsY29sb3I6eGwodCksdmFsdWU6aXx8bixwYXlsb2FkOnQucHJvcHN9fSksd2woe30sYS5wcm9wcyxTbC5nZXRXaXRoSGVpZ2h0KGEsaSkse3BheWxvYWQ6dCxpdGVtOmF9KSk6bnVsbH0sa2w9ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGk9dC5wcm9wcy5jaGlsZHJlbixvPVooaSxrZikuZmlsdGVyKGZ1bmN0aW9uKGUpe3ZhciB0PWUucHJvcHMuZGlyZWN0aW9uO3JldHVybiEoIWYoKSh0KSYmIWYoKShuKSl8fG4uaW5kZXhPZih0KT49MH0pO2lmKG8mJm8ubGVuZ3RoKXt2YXIgYT1vLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5wcm9wcy5kYXRhS2V5fSk7cmV0dXJuIGUucmVkdWNlKGZ1bmN0aW9uKGUsdCl7dmFyIG49QWwodCxyLDApLGk9ZCgpKG4pP1tqZSgpKG4pLExlKCkobildOltuLG5dLG89YS5yZWR1Y2UoZnVuY3Rpb24oZSxyKXt2YXIgbj1BbCh0LHIsMCksbz1pWzBdLU1hdGguYWJzKGQoKShuKT9uWzBdOm4pLGE9aVsxXStNYXRoLmFicyhkKCkobik/blsxXTpuKTtyZXR1cm5bTWF0aC5taW4obyxlWzBdKSxNYXRoLm1heChhLGVbMV0pXX0sWzEvMCwtMS8wXSk7cmV0dXJuW01hdGgubWluKG9bMF0sZVswXSksTWF0aC5tYXgob1sxXSxlWzFdKV19LFsxLzAsLTEvMF0pfXJldHVybiBudWxsfSxPbD1mdW5jdGlvbihlLHQscixuKXt2YXIgaT10Lm1hcChmdW5jdGlvbih0KXt2YXIgaT10LnByb3BzLmRhdGFLZXk7cmV0dXJuIm51bWJlciI9PT1yJiZpJiZrbChlLHQsaSl8fENsKGUsaSxyLG4pfSk7aWYoIm51bWJlciI9PT1yKXJldHVybiBpLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybltNYXRoLm1pbihlWzBdLHRbMF0pLE1hdGgubWF4KGVbMV0sdFsxXSldfSxbMS8wLC0xLzBdKTt2YXIgbz17fTtyZXR1cm4gaS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjtyKyspb1t0W3JdXXx8KG9bdFtyXV09ITAsZS5wdXNoKHRbcl0pKTtyZXR1cm4gZX0sW10pfSxObD1mdW5jdGlvbihlLHQpe3JldHVybiJob3Jpem9udGFsIj09PWUmJiJ4QXhpcyI9PT10fHwidmVydGljYWwiPT09ZSYmInlBeGlzIj09PXR8fCJjZW50cmljIj09PWUmJiJhbmdsZUF4aXMiPT09dHx8InJhZGlhbCI9PT1lJiYicmFkaXVzQXhpcyI9PT10fSxQbD1mdW5jdGlvbihlLHQscil7dmFyIG4saSxvPWUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNvb3JkaW5hdGU9PT10JiYobj0hMCksZS5jb29yZGluYXRlPT09ciYmKGk9ITApLGUuY29vcmRpbmF0ZX0pO3JldHVybiBufHxvLnB1c2godCksaXx8by5wdXNoKHIpLG99LFJsPWZ1bmN0aW9uKGUsdCxyKXtpZighZSlyZXR1cm4gbnVsbDt2YXIgbj1lLnNjYWxlLGk9ZS5kdXBsaWNhdGVEb21haW4sbz1lLnR5cGUsYT1lLnJhbmdlLHM9KHR8fHIpJiYiY2F0ZWdvcnkiPT09byYmbi5iYW5kd2lkdGg/bi5iYW5kd2lkdGgoKS8yOjA7cmV0dXJuIHM9ImFuZ2xlQXhpcyI9PT1lLmF4aXNUeXBlPzIqTihhWzBdLWFbMV0pKnM6cyx0JiYoZS50aWNrc3x8ZS5uaWNlVGlja3MpPyhlLnRpY2tzfHxlLm5pY2VUaWNrcykubWFwKGZ1bmN0aW9uKGUpe3ZhciB0PWk/aS5pbmRleE9mKGUpOmU7cmV0dXJue2Nvb3JkaW5hdGU6bih0KStzLHZhbHVlOmUsb2Zmc2V0OnN9fSk6ZS5pc0NhdGVnb3JpYWwmJmUuY2F0ZWdvcmljYWxEb21haW4/ZS5jYXRlZ29yaWNhbERvbWFpbi5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm57Y29vcmRpbmF0ZTpuKGUpLHZhbHVlOmUsaW5kZXg6dCxvZmZzZXQ6c319KTpuLnRpY2tzJiYhcj9uLnRpY2tzKGUudGlja0NvdW50KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJue2Nvb3JkaW5hdGU6bihlKStzLHZhbHVlOmUsb2Zmc2V0OnN9fSk6bi5kb21haW4oKS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm57Y29vcmRpbmF0ZTpuKGUpK3MsdmFsdWU6aT9pW2VdOmUsaW5kZXg6dCxvZmZzZXQ6c319KX0sQmw9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuO3JldHVybiB1KCkocik/bj1yOnUoKSh0KSYmKG49dCksdSgpKGUpfHxuP2Z1bmN0aW9uKHQscixpLG8pe3UoKShlKSYmZSh0LHIsaSxvKSx1KCkobikmJm4odCxyLGksbyl9Om51bGx9LE1sPWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5zY2FsZSxpPWUudHlwZSxvPWUubGF5b3V0LGE9ZS5heGlzVHlwZTtpZigiYXV0byI9PT1yKXJldHVybiJyYWRpYWwiPT09byYmInJhZGl1c0F4aXMiPT09YT97c2NhbGU6Z3QoKSxyZWFsU2NhbGVUeXBlOiJiYW5kIn06InJhZGlhbCI9PT1vJiYiYW5nbGVBeGlzIj09PWE/e3NjYWxlOnduKCkscmVhbFNjYWxlVHlwZToibGluZWFyIn06ImNhdGVnb3J5Ij09PWkmJnQmJih0LmluZGV4T2YoIkxpbmVDaGFydCIpPj0wfHx0LmluZGV4T2YoIkFyZWFDaGFydCIpPj0wKT97c2NhbGU6dnQoKSxyZWFsU2NhbGVUeXBlOiJwb2ludCJ9OiJjYXRlZ29yeSI9PT1pP3tzY2FsZTpndCgpLHJlYWxTY2FsZVR5cGU6ImJhbmQifTp7c2NhbGU6d24oKSxyZWFsU2NhbGVUeXBlOiJsaW5lYXIifTtpZihPKCkocikpe3ZhciBzPSJzY2FsZSIuY29uY2F0KHIuc2xpY2UoMCwxKS50b1VwcGVyQ2FzZSgpKS5jb25jYXQoci5zbGljZSgxKSk7cmV0dXJue3NjYWxlOihuW3NdfHx2dCkoKSxyZWFsU2NhbGVUeXBlOm5bc10/czoicG9pbnQifX1yZXR1cm4gdSgpKHIpP3tzY2FsZTpyfTp7c2NhbGU6dnQoKSxyZWFsU2NhbGVUeXBlOiJwb2ludCJ9fSxMbD1mdW5jdGlvbihlKXt2YXIgdD1lLmRvbWFpbigpO2lmKHQmJiEodC5sZW5ndGg8PTIpKXt2YXIgcj10Lmxlbmd0aCxuPWUucmFuZ2UoKSxpPU1hdGgubWluKG5bMF0sblsxXSktMWUtNCxvPU1hdGgubWF4KG5bMF0sblsxXSkrMWUtNCxhPWUodFswXSkscz1lKHRbci0xXSk7KGE8aXx8YT5vfHxzPGl8fHM+bykmJmUuZG9tYWluKFt0WzBdLHRbci0xXV0pfX0sRGw9e3NpZ246ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGg7aWYoISh0PD0wKSlmb3IodmFyIHI9MCxuPWVbMF0ubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPTAsbz0wLGE9MDthPHQ7KythKXt2YXIgcz1DKCkoZVthXVtyXVsxXSk/ZVthXVtyXVswXTplW2FdW3JdWzFdO3M+PTA/KGVbYV1bcl1bMF09aSxlW2FdW3JdWzFdPWkrcyxpPWVbYV1bcl1bMV0pOihlW2FdW3JdWzBdPW8sZVthXVtyXVsxXT1vK3Msbz1lW2FdW3JdWzFdKX19LGV4cGFuZDpmdW5jdGlvbihlLHQpe2lmKChuPWUubGVuZ3RoKT4wKXtmb3IodmFyIHIsbixpLG89MCxhPWVbMF0ubGVuZ3RoO288YTsrK28pe2ZvcihpPXI9MDtyPG47KytyKWkrPWVbcl1bb11bMV18fDA7aWYoaSlmb3Iocj0wO3I8bjsrK3IpZVtyXVtvXVsxXS89aX1CcyhlLHQpfX0sbm9uZTpCcyxzaWxob3VldHRlOmZ1bmN0aW9uKGUsdCl7aWYoKHI9ZS5sZW5ndGgpPjApe2Zvcih2YXIgcixuPTAsaT1lW3RbMF1dLG89aS5sZW5ndGg7bjxvOysrbil7Zm9yKHZhciBhPTAscz0wO2E8cjsrK2Epcys9ZVthXVtuXVsxXXx8MDtpW25dWzFdKz1pW25dWzBdPS1zLzJ9QnMoZSx0KX19LHdpZ2dsZTpmdW5jdGlvbihlLHQpe2lmKChpPWUubGVuZ3RoKT4wJiYobj0ocj1lW3RbMF1dKS5sZW5ndGgpPjApe2Zvcih2YXIgcixuLGksbz0wLGE9MTthPG47KythKXtmb3IodmFyIHM9MCx1PTAsYz0wO3M8aTsrK3Mpe2Zvcih2YXIgZj1lW3Rbc11dLGw9ZlthXVsxXXx8MCxoPShsLShmW2EtMV1bMV18fDApKS8yLHA9MDtwPHM7KytwKXt2YXIgZD1lW3RbcF1dO2grPShkW2FdWzFdfHwwKS0oZFthLTFdWzFdfHwwKX11Kz1sLGMrPWgqbH1yW2EtMV1bMV0rPXJbYS0xXVswXT1vLHUmJihvLT1jL3UpfXJbYS0xXVsxXSs9clthLTFdWzBdPW8sQnMoZSx0KX19fSxqbD1mdW5jdGlvbihlLHQscil7dmFyIG49dC5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUucHJvcHMuZGF0YUtleX0pO3JldHVybiBmdW5jdGlvbigpe3ZhciBlPUJhKFtdKSx0PU1zLHI9QnMsbj1McztmdW5jdGlvbiBpKGkpe3ZhciBvLGEscz1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx1PWkubGVuZ3RoLGM9cy5sZW5ndGgsZj1uZXcgQXJyYXkoYyk7Zm9yKG89MDtvPGM7KytvKXtmb3IodmFyIGwsaD1zW29dLHA9ZltvXT1uZXcgQXJyYXkodSksZD0wO2Q8dTsrK2QpcFtkXT1sPVswLCtuKGlbZF0saCxkLGkpXSxsLmRhdGE9aVtkXTtwLmtleT1ofWZvcihvPTAsYT10KGYpO288YzsrK28pZlthW29dXS5pbmRleD1vO3JldHVybiByKGYsYSksZn1yZXR1cm4gaS5rZXlzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PT10eXBlb2YgdD90OkJhKEhhLmNhbGwodCkpLGkpOmV9LGkudmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09PXR5cGVvZiBlP2U6QmEoK2UpLGkpOm59LGkub3JkZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bnVsbD09ZT9NczoiZnVuY3Rpb24iPT09dHlwZW9mIGU/ZTpCYShIYS5jYWxsKGUpKSxpKTp0fSxpLm9mZnNldD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT1lP0JzOmUsaSk6cn0saX0oKS5rZXlzKG4pLnZhbHVlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuK0FsKGUsdCwwKX0pLm9yZGVyKE1zKS5vZmZzZXQoRGxbcl0pKGUpfSxVbD1mdW5jdGlvbihlLHQpe3ZhciByPXQucmVhbFNjYWxlVHlwZSxuPXQudHlwZSxpPXQudGlja0NvdW50LG89dC5vcmlnaW5hbERvbWFpbixhPXQuYWxsb3dEZWNpbWFscyxzPXJ8fHQuc2NhbGU7aWYoImF1dG8iIT09cyYmImxpbmVhciIhPT1zKXJldHVybiBudWxsO2lmKGkmJiJudW1iZXIiPT09biYmbyYmKCJhdXRvIj09PW9bMF18fCJhdXRvIj09PW9bMV0pKXt2YXIgdT1lLmRvbWFpbigpLGM9T2JqZWN0KFZlLmdldE5pY2VUaWNrVmFsdWVzKSh1LGksYSk7cmV0dXJuIGUuZG9tYWluKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIm51bWJlciI9PT10P1tqZSgpKGUpLExlKCkoZSldOmV9KGMsbikpLHtuaWNlVGlja3M6Y319aWYoaSYmIm51bWJlciI9PT1uKXt2YXIgZj1lLmRvbWFpbigpO3JldHVybntuaWNlVGlja3M6T2JqZWN0KFZlLmdldFRpY2tWYWx1ZXNGaXhlZERvbWFpbikoZixpLGEpfX1yZXR1cm4gbnVsbH0sRmw9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5heGlzLHI9ZS50aWNrcyxuPWUuYmFuZFNpemUsaT1lLmVudHJ5LG89ZS5pbmRleCxhPWUuZGF0YUtleTtpZigiY2F0ZWdvcnkiPT09dC50eXBlKXtpZighdC5hbGxvd0R1cGxpY2F0ZWRDYXRlZ29yeSYmdC5kYXRhS2V5JiYhZigpKGlbdC5kYXRhS2V5XSkpe3ZhciBzPUYociwidmFsdWUiLGlbdC5kYXRhS2V5XSk7aWYocylyZXR1cm4gcy5jb29yZGluYXRlK24vMn1yZXR1cm4gcltvXT9yW29dLmNvb3JkaW5hdGUrbi8yOm51bGx9dmFyIHU9QWwoaSxmKCkoYSk/dC5kYXRhS2V5OmEpO3JldHVybiBmKCkodSk/bnVsbDp0LnNjYWxlKHUpfSxWbD1mdW5jdGlvbihlLHQpe3ZhciByPWUuYWx3YXlzU2hvdyxuPWUuaWZPdmVyZmxvdztyZXR1cm4gciYmKG49ImV4dGVuZERvbWFpbiIpLG49PT10fSxxbD1mdW5jdGlvbihlLHQscixuLGkpe3ZhciBvPVooZSxMdSksYT1aKGUsVHUpLHM9by5jb25jYXQoYSksdT1aKGUsYmYpLGM9IiIuY29uY2F0KG4sIklkIiksZj1uWzBdLGw9dDtpZihzLmxlbmd0aCYmKGw9cy5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtpZih0LnByb3BzW2NdPT09ciYmVmwodC5wcm9wcywiZXh0ZW5kRG9tYWluIikmJlIodC5wcm9wc1tmXSkpe3ZhciBuPXQucHJvcHNbZl07cmV0dXJuW01hdGgubWluKGVbMF0sbiksTWF0aC5tYXgoZVsxXSxuKV19cmV0dXJuIGV9LGwpKSx1Lmxlbmd0aCl7dmFyIGg9IiIuY29uY2F0KGYsIjEiKSxwPSIiLmNvbmNhdChmLCIyIik7bD11LnJlZHVjZShmdW5jdGlvbihlLHQpe2lmKHQucHJvcHNbY109PT1yJiZWbCh0LnByb3BzLCJleHRlbmREb21haW4iKSYmUih0LnByb3BzW2hdKSYmUih0LnByb3BzW3BdKSl7dmFyIG49dC5wcm9wc1toXSxpPXQucHJvcHNbcF07cmV0dXJuW01hdGgubWluKGVbMF0sbixpKSxNYXRoLm1heChlWzFdLG4saSldfXJldHVybiBlfSxsKX1yZXR1cm4gaSYmaS5sZW5ndGgmJihsPWkucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIFIodCk/W01hdGgubWluKGVbMF0sdCksTWF0aC5tYXgoZVsxXSx0KV06ZX0sbCkpLGx9LEtsPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkucmVkdWNlKGZ1bmN0aW9uKG4saSl7dmFyIG89ZVtpXS5zdGFja2VkRGF0YS5yZWR1Y2UoZnVuY3Rpb24oZSxuKXt2YXIgaT1uLnNsaWNlKHQscisxKS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm5bamUoKSh0LmNvbmNhdChbZVswXV0pLmZpbHRlcihSKSksTGUoKSh0LmNvbmNhdChbZVsxXV0pLmZpbHRlcihSKSldfSxbMS8wLC0xLzBdKTtyZXR1cm5bTWF0aC5taW4oZVswXSxpWzBdKSxNYXRoLm1heChlWzFdLGlbMV0pXX0sWzEvMCwtMS8wXSk7cmV0dXJuW01hdGgubWluKG9bMF0sblswXSksTWF0aC5tYXgob1sxXSxuWzFdKV19LFsxLzAsLTEvMF0pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZT09PTEvMHx8ZT09PS0xLzA/MDplfSl9LHpsPS9eZGF0YU1pbltcc10qLVtcc10qKFswLTldKyhbLl17MX1bMC05XSspezAsMX0pJC8sR2w9L15kYXRhTWF4W1xzXSpcK1tcc10qKFswLTldKyhbLl17MX1bMC05XSspezAsMX0pJC8sSGw9ZnVuY3Rpb24oZSx0LHIpe2lmKCFkKCkoZSkpcmV0dXJuIHQ7dmFyIG49W107aWYoUihlWzBdKSluWzBdPXI/ZVswXTpNYXRoLm1pbihlWzBdLHRbMF0pO2Vsc2UgaWYoemwudGVzdChlWzBdKSl7dmFyIGk9K3psLmV4ZWMoZVswXSlbMV07blswXT10WzBdLWl9ZWxzZSB1KCkoZVswXSk/blswXT1lWzBdKHRbMF0pOm5bMF09dFswXTtpZihSKGVbMV0pKW5bMV09cj9lWzFdOk1hdGgubWF4KGVbMV0sdFsxXSk7ZWxzZSBpZihHbC50ZXN0KGVbMV0pKXt2YXIgbz0rR2wuZXhlYyhlWzFdKVsxXTtuWzFdPXRbMV0rb31lbHNlIHUoKShlWzFdKT9uWzFdPWVbMV0odFsxXSk6blsxXT10WzFdO3JldHVybiBufSxXbD1mdW5jdGlvbihlLHQpe2lmKGUmJmUuc2NhbGUmJmUuc2NhbGUuYmFuZHdpZHRoKXJldHVybiBlLnNjYWxlLmJhbmR3aWR0aCgpO2lmKGUmJnQmJnQubGVuZ3RoPj0yKXtmb3IodmFyIHI9QmUoKSh0LGZ1bmN0aW9uKGUpe3JldHVybiBlLmNvb3JkaW5hdGV9KSxuPTEvMCxpPTEsbz1yLmxlbmd0aDtpPG87aSsrKXt2YXIgYT1yW2ldLHM9cltpLTFdO249TWF0aC5taW4oKGEuY29vcmRpbmF0ZXx8MCktKHMuY29vcmRpbmF0ZXx8MCksbil9cmV0dXJuIG49PT0xLzA/MDpufXJldHVybiAwfSxZbD1mdW5jdGlvbihlLHQscil7cmV0dXJuIGUmJmUubGVuZ3RoP1BlKCkoZSxUKCkociwidHlwZS5kZWZhdWx0UHJvcHMuZG9tYWluIikpP3Q6ZTp0fTtmdW5jdGlvbiBYbChlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9LG49T2JqZWN0LmtleXMocik7ImZ1bmN0aW9uIj09PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYobj1uLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHIpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLGUpLmVudW1lcmFibGV9KSkpLG4uZm9yRWFjaChmdW5jdGlvbih0KXtRbChlLHQsclt0XSl9KX1yZXR1cm4gZX1mdW5jdGlvbiBRbChlLHQscil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1yLGV9dmFyICRsPU1hdGguUEkvMTgwLFpsPWZ1bmN0aW9uKGUpe3JldHVybiAxODAqZS9NYXRoLlBJfSxKbD1mdW5jdGlvbihlLHQscixuKXtyZXR1cm57eDplK01hdGguY29zKC0kbCpuKSpyLHk6dCtNYXRoLnNpbigtJGwqbikqcn19LGVoPWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS54LG49ZS55LGk9dC5jeCxvPXQuY3ksYT1mdW5jdGlvbihlLHQpe3ZhciByPWUueCxuPWUueSxpPXQueCxvPXQueTtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHItaSwyKStNYXRoLnBvdyhuLW8sMikpfSh7eDpyLHk6bn0se3g6aSx5Om99KTtpZihhPD0wKXJldHVybntyYWRpdXM6YX07dmFyIHM9KHItaSkvYSx1PU1hdGguYWNvcyhzKTtyZXR1cm4gbj5vJiYodT0yKk1hdGguUEktdSkse3JhZGl1czphLGFuZ2xlOlpsKHUpLGFuZ2xlSW5SYWRpYW46dX19LHRoPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dC5zdGFydEFuZ2xlLG49dC5lbmRBbmdsZSxpPU1hdGguZmxvb3Ioci8zNjApLG89TWF0aC5mbG9vcihuLzM2MCk7cmV0dXJuIGUrMzYwKk1hdGgubWluKGksbyl9LHJoPWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS54LG49ZS55LGk9ZWgoe3g6cix5Om59LHQpLG89aS5yYWRpdXMsYT1pLmFuZ2xlLHM9dC5pbm5lclJhZGl1cyx1PXQub3V0ZXJSYWRpdXM7aWYobzxzfHxvPnUpcmV0dXJuITE7aWYoMD09PW8pcmV0dXJuITA7dmFyIGMsZj1mdW5jdGlvbihlKXt2YXIgdD1lLnN0YXJ0QW5nbGUscj1lLmVuZEFuZ2xlLG49TWF0aC5mbG9vcih0LzM2MCksaT1NYXRoLmZsb29yKHIvMzYwKSxvPU1hdGgubWluKG4saSk7cmV0dXJue3N0YXJ0QW5nbGU6dC0zNjAqbyxlbmRBbmdsZTpyLTM2MCpvfX0odCksbD1mLnN0YXJ0QW5nbGUsaD1mLmVuZEFuZ2xlLHA9YTtpZihsPD1oKXtmb3IoO3A+aDspcC09MzYwO2Zvcig7cDxsOylwKz0zNjA7Yz1wPj1sJiZwPD1ofWVsc2V7Zm9yKDtwPmw7KXAtPTM2MDtmb3IoO3A8aDspcCs9MzYwO2M9cD49aCYmcDw9bH1yZXR1cm4gYz9YbCh7fSx0LHtyYWRpdXM6byxhbmdsZTp0aChwLHQpfSk6bnVsbH07ZnVuY3Rpb24gbmgoZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpe2Zvcih2YXIgdD0wLHI9bmV3IEFycmF5KGUubGVuZ3RoKTt0PGUubGVuZ3RoO3QrKylyW3RdPWVbdF07cmV0dXJuIHJ9fShlKXx8ZnVuY3Rpb24oZSl7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChlKXx8IltvYmplY3QgQXJndW1lbnRzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkpcmV0dXJuIEFycmF5LmZyb20oZSl9KGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9KCl9ZnVuY3Rpb24gaWgoKXtyZXR1cm4oaWg9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9YXJndW1lbnRzW3RdO2Zvcih2YXIgbiBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG4pJiYoZVtuXT1yW25dKX1yZXR1cm4gZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBvaChlLHQscil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1yLGV9dmFyIGFoPW0uYS5zaGFwZSh7eDptLmEubnVtYmVyLHk6bS5hLm51bWJlcix3aWR0aDptLmEubnVtYmVyLGhlaWdodDptLmEubnVtYmVyfSksc2g9bS5hLnNoYXBlKHtjeDptLmEubnVtYmVyLGN5Om0uYS5udW1iZXIsaW5uZXJSYWRpdXM6bS5hLm51bWJlcixvdXRlclJhZGl1czptLmEubnVtYmVyLHN0YXJ0QW5nbGU6bS5hLm51bWJlcixlbmRBbmdsZTptLmEubnVtYmVyfSksdWg9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fSxuPU9iamVjdC5rZXlzKHIpOyJmdW5jdGlvbiI9PT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKG49bi5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhyKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKS5lbnVtZXJhYmxlfSkpKSxuLmZvckVhY2goZnVuY3Rpb24odCl7b2goZSx0LHJbdF0pfSl9cmV0dXJuIGV9KHt9LEgse3ZpZXdCb3g6bS5hLm9uZU9mVHlwZShbYWgsc2hdKSxmb3JtYXR0ZXI6bS5hLmZ1bmMsdmFsdWU6bS5hLm9uZU9mVHlwZShbbS5hLm51bWJlcixtLmEuc3RyaW5nXSksb2Zmc2V0Om0uYS5udW1iZXIscG9zaXRpb246bS5hLm9uZU9mKFsidG9wIiwibGVmdCIsInJpZ2h0IiwiYm90dG9tIiwiaW5zaWRlIiwib3V0c2lkZSIsImluc2lkZUxlZnQiLCJpbnNpZGVSaWdodCIsImluc2lkZVRvcCIsImluc2lkZUJvdHRvbSIsImluc2lkZVRvcExlZnQiLCJpbnNpZGVCb3R0b21MZWZ0IiwiaW5zaWRlVG9wUmlnaHQiLCJpbnNpZGVCb3R0b21SaWdodCIsImluc2lkZVN0YXJ0IiwiaW5zaWRlRW5kIiwiZW5kIiwiY2VudGVyIiwiY2VudGVyVG9wIiwiY2VudGVyQm90dG9tIl0pLGNoaWxkcmVuOm0uYS5vbmVPZlR5cGUoW20uYS5hcnJheU9mKG0uYS5ub2RlKSxtLmEubm9kZV0pLGNsYXNzTmFtZTptLmEuc3RyaW5nLGNvbnRlbnQ6bS5hLm9uZU9mVHlwZShbbS5hLmVsZW1lbnQsbS5hLmZ1bmNdKX0pLGNoPWZ1bmN0aW9uKGUpe3ZhciB0PWUudmFsdWUscj1lLmZvcm1hdHRlcixuPWYoKShlLmNoaWxkcmVuKT90OmUuY2hpbGRyZW47cmV0dXJuIHUoKShyKT9yKG4pOm59LGZoPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbixpLG89ZS5wb3NpdGlvbixhPWUudmlld0JveCxzPWUub2Zmc2V0LHU9ZS5jbGFzc05hbWUsYz1hLmN4LGw9YS5jeSxoPWEuaW5uZXJSYWRpdXMscD1hLm91dGVyUmFkaXVzLGQ9YS5zdGFydEFuZ2xlLHk9YS5lbmRBbmdsZSx2PWEuY2xvY2tXaXNlLG09KGgrcCkvMixiPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE4odC1lKSpNYXRoLm1pbihNYXRoLmFicyh0LWUpLDM2MCl9KGQseSksUz1iPj0wPzE6LTE7Imluc2lkZVN0YXJ0Ij09PW8/KG49ZCtTKnMsaT12KToiaW5zaWRlRW5kIj09PW8/KG49eS1TKnMsaT0hdik6ImVuZCI9PT1vJiYobj15K1MqcyxpPXYpLGk9Yjw9MD9pOiFpO3ZhciBFPUpsKGMsbCxtLG4pLHc9SmwoYyxsLG0sbiszNTkqKGk/MTotMSkpLFQ9Ik0iLmNvbmNhdChFLngsIiwiKS5jb25jYXQoRS55LCJcbiAgICBBIikuY29uY2F0KG0sIiwiKS5jb25jYXQobSwiLDAsMSwiKS5jb25jYXQoaT8wOjEsIixcbiAgICAiKS5jb25jYXQody54LCIsIikuY29uY2F0KHcueSksQT1mKCkoZS5pZCk/TCgicmVjaGFydHMtcmFkaWFsLWxpbmUtIik6ZS5pZDtyZXR1cm4gZy5hLmNyZWF0ZUVsZW1lbnQoInRleHQiLGloKHt9LHIse2RvbWluYW50QmFzZWxpbmU6ImNlbnRyYWwiLGNsYXNzTmFtZTpfKCkoInJlY2hhcnRzLXJhZGlhbC1iYXItbGFiZWwiLHUpfSksZy5hLmNyZWF0ZUVsZW1lbnQoImRlZnMiLG51bGwsZy5hLmNyZWF0ZUVsZW1lbnQoInBhdGgiLHtpZDpBLGQ6VH0pKSxnLmEuY3JlYXRlRWxlbWVudCgidGV4dFBhdGgiLHt4bGlua0hyZWY6IiMiLmNvbmNhdChBKX0sdCkpfSxsaD1mdW5jdGlvbihlKXt2YXIgdD1lLnZpZXdCb3gscj1lLm9mZnNldCxuPWUucG9zaXRpb24saT10LmN4LG89dC5jeSxhPXQuaW5uZXJSYWRpdXMscz10Lm91dGVyUmFkaXVzLHU9KHQuc3RhcnRBbmdsZSt0LmVuZEFuZ2xlKS8yO2lmKCJvdXRzaWRlIj09PW4pe3ZhciBjPUpsKGksbyxzK3IsdSksZj1jLng7cmV0dXJue3g6Zix5OmMueSx0ZXh0QW5jaG9yOmY+PWk/InN0YXJ0IjoiZW5kIix2ZXJ0aWNhbEFuY2hvcjoibWlkZGxlIn19aWYoImNlbnRlciI9PT1uKXJldHVybnt4OmkseTpvLHRleHRBbmNob3I6Im1pZGRsZSIsdmVydGljYWxBbmNob3I6Im1pZGRsZSJ9O2lmKCJjZW50ZXJUb3AiPT09bilyZXR1cm57eDppLHk6byx0ZXh0QW5jaG9yOiJtaWRkbGUiLHZlcnRpY2FsQW5jaG9yOiJzdGFydCJ9O2lmKCJjZW50ZXJCb3R0b20iPT09bilyZXR1cm57eDppLHk6byx0ZXh0QW5jaG9yOiJtaWRkbGUiLHZlcnRpY2FsQW5jaG9yOiJlbmQifTt2YXIgbD1KbChpLG8sKGErcykvMix1KTtyZXR1cm57eDpsLngseTpsLnksdGV4dEFuY2hvcjoibWlkZGxlIix2ZXJ0aWNhbEFuY2hvcjoibWlkZGxlIn19LGhoPWZ1bmN0aW9uKGUpe3ZhciB0PWUudmlld0JveCxyPWUub2Zmc2V0LG49ZS5wb3NpdGlvbixpPXQueCxvPXQueSxzPXQud2lkdGgsdT10LmhlaWdodCxjPXU+PTA/MTotMTtyZXR1cm4idG9wIj09PW4/e3g6aStzLzIseTpvLWMqcix0ZXh0QW5jaG9yOiJtaWRkbGUiLHZlcnRpY2FsQW5jaG9yOmM+MD8iZW5kIjoic3RhcnQifToiYm90dG9tIj09PW4/e3g6aStzLzIseTpvK3UrYypyLHRleHRBbmNob3I6Im1pZGRsZSIsdmVydGljYWxBbmNob3I6InN0YXJ0In06ImxlZnQiPT09bj97eDppLXIseTpvK3UvMix0ZXh0QW5jaG9yOiJlbmQiLHZlcnRpY2FsQW5jaG9yOiJtaWRkbGUifToicmlnaHQiPT09bj97eDppK3Mrcix5Om8rdS8yLHRleHRBbmNob3I6InN0YXJ0Iix2ZXJ0aWNhbEFuY2hvcjoibWlkZGxlIn06Imluc2lkZUxlZnQiPT09bj97eDppK3IseTpvK3UvMix0ZXh0QW5jaG9yOiJzdGFydCIsdmVydGljYWxBbmNob3I6Im1pZGRsZSJ9OiJpbnNpZGVSaWdodCI9PT1uP3t4Omkrcy1yLHk6byt1LzIsdGV4dEFuY2hvcjoiZW5kIix2ZXJ0aWNhbEFuY2hvcjoibWlkZGxlIn06Imluc2lkZVRvcCI9PT1uP3t4Omkrcy8yLHk6bytjKnIsdGV4dEFuY2hvcjoibWlkZGxlIix2ZXJ0aWNhbEFuY2hvcjoic3RhcnQifToiaW5zaWRlQm90dG9tIj09PW4/e3g6aStzLzIseTpvK3UtYypyLHRleHRBbmNob3I6Im1pZGRsZSIsdmVydGljYWxBbmNob3I6ImVuZCJ9OiJpbnNpZGVUb3BMZWZ0Ij09PW4/e3g6aStyLHk6bytjKnIsdGV4dEFuY2hvcjoic3RhcnQiLHZlcnRpY2FsQW5jaG9yOiJzdGFydCJ9OiJpbnNpZGVUb3BSaWdodCI9PT1uP3t4Omkrcy1yLHk6bytjKnIsdGV4dEFuY2hvcjoiZW5kIix2ZXJ0aWNhbEFuY2hvcjoic3RhcnQifToiaW5zaWRlQm90dG9tTGVmdCI9PT1uP3t4Omkrcix5Om8rdS1jKnIsdGV4dEFuY2hvcjoic3RhcnQiLHZlcnRpY2FsQW5jaG9yOiJlbmQifToiaW5zaWRlQm90dG9tUmlnaHQiPT09bj97eDppK3Mtcix5Om8rdS1jKnIsdGV4dEFuY2hvcjoiZW5kIix2ZXJ0aWNhbEFuY2hvcjoiZW5kIn06YSgpKG4pJiYoUihuLngpfHxQKG4ueCkpJiYoUihuLnkpfHxQKG4ueSkpP3t4OmkrRChuLngscykseTpvK0Qobi55LHUpLHRleHRBbmNob3I6ImVuZCIsdmVydGljYWxBbmNob3I6ImVuZCJ9Ont4Omkrcy8yLHk6byt1LzIsdGV4dEFuY2hvcjoibWlkZGxlIix2ZXJ0aWNhbEFuY2hvcjoibWlkZGxlIn19LHBoPWZ1bmN0aW9uKGUpe3JldHVybiBSKGUuY3gpfTtmdW5jdGlvbiBkaChlKXt2YXIgdCxyPWUudmlld0JveCxuPWUucG9zaXRpb24saT1lLnZhbHVlLG89ZS5jaGlsZHJlbixhPWUuY29udGVudCxzPWUuY2xhc3NOYW1lLGM9dm9pZCAwPT09cz8iIjpzO2lmKCFyfHxmKCkoaSkmJmYoKShvKSYmIU9iamVjdCh5LmlzVmFsaWRFbGVtZW50KShhKSYmIXUoKShhKSlyZXR1cm4gbnVsbDtpZihPYmplY3QoeS5pc1ZhbGlkRWxlbWVudCkoYSkpcmV0dXJuIE9iamVjdCh5LmNsb25lRWxlbWVudCkoYSxlKTtpZih1KCkoYSkpe2lmKHQ9YShlKSxPYmplY3QoeS5pc1ZhbGlkRWxlbWVudCkodCkpcmV0dXJuIHR9ZWxzZSB0PWNoKGUpO3ZhciBsPXBoKHIpLGg9ZWUoZSk7aWYobCYmKCJpbnNpZGVTdGFydCI9PT1ufHwiaW5zaWRlRW5kIj09PW58fCJlbmQiPT09bikpcmV0dXJuIGZoKGUsdCxoKTt2YXIgcD1sP2xoKGUpOmhoKGUpO3JldHVybiBnLmEuY3JlYXRlRWxlbWVudChPZSxpaCh7Y2xhc3NOYW1lOl8oKSgicmVjaGFydHMtbGFiZWwiLGMpfSxoLHApLHQpfWRoLmRpc3BsYXlOYW1lPSJMYWJlbCIsZGguZGVmYXVsdFByb3BzPXtvZmZzZXQ6NX0sZGgucHJvcFR5cGVzPXVoO3ZhciB5aD1mdW5jdGlvbihlKXt2YXIgdD1lLmN4LHI9ZS5jeSxuPWUuYW5nbGUsaT1lLnN0YXJ0QW5nbGUsbz1lLmVuZEFuZ2xlLGE9ZS5yLHM9ZS5yYWRpdXMsdT1lLmlubmVyUmFkaXVzLGM9ZS5vdXRlclJhZGl1cyxmPWUueCxsPWUueSxoPWUudG9wLHA9ZS5sZWZ0LGQ9ZS53aWR0aCx5PWUuaGVpZ2h0LGc9ZS5jbG9ja1dpc2U7aWYoUihkKSYmUih5KSl7aWYoUihmKSYmUihsKSlyZXR1cm57eDpmLHk6bCx3aWR0aDpkLGhlaWdodDp5fTtpZihSKGgpJiZSKHApKXJldHVybnt4OmgseTpwLHdpZHRoOmQsaGVpZ2h0Onl9fXJldHVybiBSKGYpJiZSKGwpP3t4OmYseTpsLHdpZHRoOjAsaGVpZ2h0OjB9OlIodCkmJlIocik/e2N4OnQsY3k6cixzdGFydEFuZ2xlOml8fG58fDAsZW5kQW5nbGU6b3x8bnx8MCxpbm5lclJhZGl1czp1fHwwLG91dGVyUmFkaXVzOmN8fHN8fGF8fDAsY2xvY2tXaXNlOmd9OmUudmlld0JveD9lLnZpZXdCb3g6e319O2RoLnBhcnNlVmlld0JveD15aCxkaC5yZW5kZXJDYWxsQnlQYXJlbnQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO2lmKCFlfHwhZS5jaGlsZHJlbiYmciYmIWUubGFiZWwpcmV0dXJuIG51bGw7dmFyIG49ZS5jaGlsZHJlbixpPXloKGUpLG89WihuLGRoKS5tYXAoZnVuY3Rpb24oZSxyKXtyZXR1cm4gT2JqZWN0KHkuY2xvbmVFbGVtZW50KShlLHt2aWV3Qm94OnR8fGksa2V5OiJsYWJlbC0iLmNvbmNhdChyKX0pfSk7cmV0dXJuIHI/W2Z1bmN0aW9uKGUsdCl7cmV0dXJuIGU/ITA9PT1lP2cuYS5jcmVhdGVFbGVtZW50KGRoLHtrZXk6ImxhYmVsLWltcGxpY2l0Iix2aWV3Qm94OnR9KTpCKGUpP2cuYS5jcmVhdGVFbGVtZW50KGRoLHtrZXk6ImxhYmVsLWltcGxpY2l0Iix2aWV3Qm94OnQsdmFsdWU6ZX0pOk9iamVjdCh5LmlzVmFsaWRFbGVtZW50KShlKT9lLnR5cGU9PT1kaD9PYmplY3QoeS5jbG9uZUVsZW1lbnQpKGUse2tleToibGFiZWwtaW1wbGljaXQiLHZpZXdCb3g6dH0pOmcuYS5jcmVhdGVFbGVtZW50KGRoLHtrZXk6ImxhYmVsLWltcGxpY2l0Iixjb250ZW50OmUsdmlld0JveDp0fSk6dSgpKGUpP2cuYS5jcmVhdGVFbGVtZW50KGRoLHtrZXk6ImxhYmVsLWltcGxpY2l0Iixjb250ZW50OmUsdmlld0JveDp0fSk6YSgpKGUpP2cuYS5jcmVhdGVFbGVtZW50KGRoLGloKHt2aWV3Qm94OnR9LGUse2tleToibGFiZWwtaW1wbGljaXQifSkpOm51bGw6bnVsbH0oZS5sYWJlbCx0fHxpKV0uY29uY2F0KG5oKG8pKTpvfTt2YXIgZ2g9ZGg7ZnVuY3Rpb24gdmgoZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpe2Zvcih2YXIgdD0wLHI9bmV3IEFycmF5KGUubGVuZ3RoKTt0PGUubGVuZ3RoO3QrKylyW3RdPWVbdF07cmV0dXJuIHJ9fShlKXx8ZnVuY3Rpb24oZSl7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChlKXx8IltvYmplY3QgQXJndW1lbnRzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkpcmV0dXJuIEFycmF5LmZyb20oZSl9KGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9KCl9ZnVuY3Rpb24gbWgoKXtyZXR1cm4obWg9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9YXJndW1lbnRzW3RdO2Zvcih2YXIgbiBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG4pJiYoZVtuXT1yW25dKX1yZXR1cm4gZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBiaChlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9LG49T2JqZWN0LmtleXMocik7ImZ1bmN0aW9uIj09PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYobj1uLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHIpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLGUpLmVudW1lcmFibGV9KSkpLG4uZm9yRWFjaChmdW5jdGlvbih0KXtfaChlLHQsclt0XSl9KX1yZXR1cm4gZX1mdW5jdGlvbiBfaChlLHQscil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1yLGV9ZnVuY3Rpb24gU2goZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciByLG4saT1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHIsbixpPXt9LG89T2JqZWN0LmtleXMoZSk7Zm9yKG49MDtuPG8ubGVuZ3RoO24rKylyPW9bbl0sdC5pbmRleE9mKHIpPj0wfHwoaVtyXT1lW3JdKTtyZXR1cm4gaX0oZSx0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihuPTA7bjxvLmxlbmd0aDtuKyspcj1vW25dLHQuaW5kZXhPZihyKT49MHx8T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscikmJihpW3JdPWVbcl0pfXJldHVybiBpfXZhciBFaD17aWQ6bS5hLnN0cmluZyxkYXRhOm0uYS5hcnJheU9mKG0uYS5vYmplY3QpLHZhbHVlQWNjZXNzb3I6bS5hLmZ1bmMsY2xvY2tXaXNlOm0uYS5ib29sLGRhdGFLZXk6bS5hLm9uZU9mVHlwZShbbS5hLnN0cmluZyxtLmEubnVtYmVyLG0uYS5mdW5jXSk="
}
Changelog:
{
"2020.04.17 15:39": "base64:cmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpOnR9ZnVuY3Rpb24gZ2woZSl7cmV0dXJuKGdsPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9KShlKX1mdW5jdGlvbiB2bChlLHQpe3JldHVybih2bD1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0pKGUsdCl9dmFyIG1sPWZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlfSxibD1mdW5jdGlvbihlLHQpe3JldHVybiEwPT09ZT9OZigpKHQsbWwpOnUoKShlKT9OZigpKHQsZSk6dH0sX2w9WC5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIm5vbmUiIT09ZX0pLFNsPUsoKHVsPXNsPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxyOyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpO2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLGk9bmV3IEFycmF5KG4pLG89MDtvPG47bysrKWlbb109YXJndW1lbnRzW29dO3JldHVybihyPXlsKHRoaXMsKGU9Z2wodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSkpLnN0YXRlPXtib3hXaWR0aDotMSxib3hIZWlnaHQ6LTF9LHJ9dmFyIHIsbixpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmdmwoZSx0KX0odCx5WyJDb21wb25lbnQiXSkscj10LGk9W3trZXk6ImdldFdpdGhIZWlnaHQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5wcm9wcy5sYXlvdXQ7cmV0dXJuInZlcnRpY2FsIj09PXImJlIoZS5wcm9wcy5oZWlnaHQpP3toZWlnaHQ6ZS5wcm9wcy5oZWlnaHR9OiJob3Jpem9udGFsIj09PXI/e3dpZHRoOmUucHJvcHMud2lkdGh8fHR9Om51bGx9fV0sKG49W3trZXk6ImNvbXBvbmVudERpZE1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMudXBkYXRlQkJveCgpfX0se2tleToiY29tcG9uZW50RGlkVXBkYXRlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMudXBkYXRlQkJveCgpfX0se2tleToiZ2V0QkJveCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0YXRlLHQ9ZS5ib3hXaWR0aCxyPWUuYm94SGVpZ2h0O3JldHVybiB0Pj0wJiZyPj0wP3t3aWR0aDp0LGhlaWdodDpyfTpudWxsfX0se2tleToiZ2V0RGVmYXVsdFBvc2l0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyLG49dGhpcy5wcm9wcyxpPW4ubGF5b3V0LG89bi5hbGlnbixhPW4udmVydGljYWxBbGlnbixzPW4ubWFyZ2luLHU9bi5jaGFydFdpZHRoLGM9bi5jaGFydEhlaWdodDtlJiYodm9pZCAwIT09ZS5sZWZ0JiZudWxsIT09ZS5sZWZ0fHx2b2lkIDAhPT1lLnJpZ2h0JiZudWxsIT09ZS5yaWdodCl8fCh0PSJjZW50ZXIiPT09byYmInZlcnRpY2FsIj09PWk/e2xlZnQ6KCh1fHwwKS0odGhpcy5nZXRCQm94KCl8fHt3aWR0aDowfSkud2lkdGgpLzJ9OiJyaWdodCI9PT1vP3tyaWdodDpzJiZzLnJpZ2h0fHwwfTp7bGVmdDpzJiZzLmxlZnR8fDB9KTtlJiYodm9pZCAwIT09ZS50b3AmJm51bGwhPT1lLnRvcHx8dm9pZCAwIT09ZS5ib3R0b20mJm51bGwhPT1lLmJvdHRvbSl8fChyPSJtaWRkbGUiPT09YT97dG9wOigoY3x8MCktKHRoaXMuZ2V0QkJveCgpfHx7aGVpZ2h0OjB9KS5oZWlnaHQpLzJ9OiJib3R0b20iPT09YT97Ym90dG9tOnMmJnMuYm90dG9tfHwwfTp7dG9wOnMmJnMudG9wfHwwfSk7cmV0dXJuIGhsKHt9LHQscil9fSx7a2V5OiJ1cGRhdGVCQm94Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuc3RhdGUsdD1lLmJveFdpZHRoLHI9ZS5ib3hIZWlnaHQsbj10aGlzLnByb3BzLm9uQkJveFVwZGF0ZTtpZih0aGlzLndyYXBwZXJOb2RlJiZ0aGlzLndyYXBwZXJOb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCl7dmFyIGk9dGhpcy53cmFwcGVyTm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsoTWF0aC5hYnMoaS53aWR0aC10KT4xfHxNYXRoLmFicyhpLmhlaWdodC1yKT4xKSYmdGhpcy5zZXRTdGF0ZSh7Ym94V2lkdGg6aS53aWR0aCxib3hIZWlnaHQ6aS5oZWlnaHR9LGZ1bmN0aW9uKCl7biYmbihpKX0pfWVsc2UtMT09PXQmJi0xPT09cnx8dGhpcy5zZXRTdGF0ZSh7Ym94V2lkdGg6LTEsYm94SGVpZ2h0Oi0xfSxmdW5jdGlvbigpe24mJm4obnVsbCl9KX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wcyxyPXQuY29udGVudCxuPXQud2lkdGgsaT10LmhlaWdodCxvPXQud3JhcHBlclN0eWxlLGE9dC5wYXlsb2RVbmlxQnkscz10LnBheWxvYWQsYz1obCh7cG9zaXRpb246ImFic29sdXRlIix3aWR0aDpufHwiYXV0byIsaGVpZ2h0Oml8fCJhdXRvIn0sdGhpcy5nZXREZWZhdWx0UG9zaXRpb24obyksbyk7cmV0dXJuIGcuYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InJlY2hhcnRzLWxlZ2VuZC13cmFwcGVyIixzdHlsZTpjLHJlZjpmdW5jdGlvbih0KXtlLndyYXBwZXJOb2RlPXR9fSxmdW5jdGlvbihlLHQpe3JldHVybiBnLmEuaXNWYWxpZEVsZW1lbnQoZSk/Zy5hLmNsb25lRWxlbWVudChlLHQpOnUoKShlKT9lKHQpOmcuYS5jcmVhdGVFbGVtZW50KGZsLHQpfShyLGhsKHt9LHRoaXMucHJvcHMse3BheWxvYWQ6YmwoYSxzKX0pKSl9fV0pJiZkbChyLnByb3RvdHlwZSxuKSxpJiZkbChyLGkpLHR9KCksc2wuZGlzcGxheU5hbWU9IkxlZ2VuZCIsc2wucHJvcFR5cGVzPXtjb250ZW50Om0uYS5vbmVPZlR5cGUoW20uYS5lbGVtZW50LG0uYS5mdW5jXSksd3JhcHBlclN0eWxlOm0uYS5vYmplY3QsY2hhcnRXaWR0aDptLmEubnVtYmVyLGNoYXJ0SGVpZ2h0Om0uYS5udW1iZXIsd2lkdGg6bS5hLm51bWJlcixoZWlnaHQ6bS5hLm51bWJlcixpY29uU2l6ZTptLmEubnVtYmVyLGljb25UeXBlOm0uYS5vbmVPZihfbCksbGF5b3V0Om0uYS5vbmVPZihbImhvcml6b250YWwiLCJ2ZXJ0aWNhbCJdKSxhbGlnbjptLmEub25lT2YoWyJjZW50ZXIiLCJsZWZ0IiwicmlnaHQiXSksdmVydGljYWxBbGlnbjptLmEub25lT2YoWyJ0b3AiLCJib3R0b20iLCJtaWRkbGUiXSksbWFyZ2luOm0uYS5zaGFwZSh7dG9wOm0uYS5udW1iZXIsbGVmdDptLmEubnVtYmVyLGJvdHRvbTptLmEubnVtYmVyLHJpZ2h0Om0uYS5udW1iZXJ9KSxwYXlsb2FkOm0uYS5hcnJheU9mKG0uYS5zaGFwZSh7dmFsdWU6bS5hLmFueSxpZDptLmEuYW55LHR5cGU6bS5hLm9uZU9mKFgpfSkpLHBheWxvZFVuaXFCeTptLmEub25lT2ZUeXBlKFttLmEuZnVuYyxtLmEuYm9vbF0pLGZvcm1hdHRlcjptLmEuZnVuYyxvbk1vdXNlRW50ZXI6bS5hLmZ1bmMsb25Nb3VzZUxlYXZlOm0uYS5mdW5jLG9uQ2xpY2s6bS5hLmZ1bmMsb25CQm94VXBkYXRlOm0uYS5mdW5jfSxzbC5kZWZhdWx0UHJvcHM9e2ljb25TaXplOjE0LGxheW91dDoiaG9yaXpvbnRhbCIsYWxpZ246ImNlbnRlciIsdmVydGljYWxBbGlnbjoiYm90dG9tIn0sYWw9dWwpKXx8YWw7ZnVuY3Rpb24gRWwoZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpe2Zvcih2YXIgdD0wLHI9bmV3IEFycmF5KGUubGVuZ3RoKTt0PGUubGVuZ3RoO3QrKylyW3RdPWVbdF07cmV0dXJuIHJ9fShlKXx8ZnVuY3Rpb24oZSl7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChlKXx8IltvYmplY3QgQXJndW1lbnRzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkpcmV0dXJuIEFycmF5LmZyb20oZSl9KGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9KCl9ZnVuY3Rpb24gd2woZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fSxuPU9iamVjdC5rZXlzKHIpOyJmdW5jdGlvbiI9PT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKG49bi5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhyKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKS5lbnVtZXJhYmxlfSkpKSxuLmZvckVhY2goZnVuY3Rpb24odCl7VGwoZSx0LHJbdF0pfSl9cmV0dXJuIGV9ZnVuY3Rpb24gVGwoZSx0LHIpe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09cixlfXZhciBBbD1mdW5jdGlvbihlLHQscil7cmV0dXJuIGYoKShlKXx8ZigpKHQpP3I6Qih0KT9UKCkoZSx0LHIpOnUoKSh0KT90KGUpOnJ9LENsPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBpPUZlKCkoZSxmdW5jdGlvbihlKXtyZXR1cm4gQWwoZSx0KX0pO2lmKCJudW1iZXIiPT09cil7dmFyIG89aS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIFIoZSl8fHBhcnNlRmxvYXQoZSwxMCl9KTtyZXR1cm4gby5sZW5ndGg/W2plKCkobyksTGUoKShvKV06WzEvMCwtMS8wXX1yZXR1cm4obj9pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZigpKGUpfSk6aSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBCKGUpP2U6IiJ9KX0seGw9ZnVuY3Rpb24oZSl7dmFyIHQ7c3dpdGNoKGUudHlwZS5kaXNwbGF5TmFtZSl7Y2FzZSJMaW5lIjpjYXNlIkFyZWEiOmNhc2UiUmFkYXIiOnQ9ZS5wcm9wcy5zdHJva2U7YnJlYWs7ZGVmYXVsdDp0PWUucHJvcHMuZmlsbH1yZXR1cm4gdH0sSWw9ZnVuY3Rpb24oZSl7dmFyIHQscj1lLmNoaWxkcmVuLG49ZS5mb3JtYXRlZEdyYXBoaWNhbEl0ZW1zLGk9ZS5sZWdlbmRXaWR0aCxvPWUubGVnZW5kQ29udGVudCxhPUoocixTbCk7cmV0dXJuIGE/KHQ9YS5wcm9wcyYmYS5wcm9wcy5wYXlsb2FkP2EucHJvcHMmJmEucHJvcHMucGF5bG9hZDoiY2hpbGRyZW4iPT09bz8obnx8W10pLnJlZHVjZShmdW5jdGlvbihlLHQpe3ZhciByPXQuaXRlbSxuPXQucHJvcHMsaT1uLnNlY3RvcnN8fG4uZGF0YXx8W107cmV0dXJuIGUuY29uY2F0KGkubWFwKGZ1bmN0aW9uKGUpe3JldHVybnt0eXBlOmEucHJvcHMuaWNvblR5cGV8fHIucHJvcHMubGVnZW5kVHlwZSx2YWx1ZTplLm5hbWUsY29sb3I6ZS5maWxsLHBheWxvYWQ6ZX19KSl9LFtdKToobnx8W10pLm1hcChmdW5jdGlvbihlKXt2YXIgdD1lLml0ZW0scj10LnByb3BzLG49ci5kYXRhS2V5LGk9ci5uYW1lLG89ci5sZWdlbmRUeXBlO3JldHVybntpbmFjdGl2ZTpyLmhpZGUsZGF0YUtleTpuLHR5cGU6YS5wcm9wcy5pY29uVHlwZXx8b3x8InNxdWFyZSIsY29sb3I6eGwodCksdmFsdWU6aXx8bixwYXlsb2FkOnQucHJvcHN9fSksd2woe30sYS5wcm9wcyxTbC5nZXRXaXRoSGVpZ2h0KGEsaSkse3BheWxvYWQ6dCxpdGVtOmF9KSk6bnVsbH0sa2w9ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGk9dC5wcm9wcy5jaGlsZHJlbixvPVooaSxrZikuZmlsdGVyKGZ1bmN0aW9uKGUpe3ZhciB0PWUucHJvcHMuZGlyZWN0aW9uO3JldHVybiEoIWYoKSh0KSYmIWYoKShuKSl8fG4uaW5kZXhPZih0KT49MH0pO2lmKG8mJm8ubGVuZ3RoKXt2YXIgYT1vLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5wcm9wcy5kYXRhS2V5fSk7cmV0dXJuIGUucmVkdWNlKGZ1bmN0aW9uKGUsdCl7dmFyIG49QWwodCxyLDApLGk9ZCgpKG4pP1tqZSgpKG4pLExlKCkobildOltuLG5dLG89YS5yZWR1Y2UoZnVuY3Rpb24oZSxyKXt2YXIgbj1BbCh0LHIsMCksbz1pWzBdLU1hdGguYWJzKGQoKShuKT9uWzBdOm4pLGE9aVsxXStNYXRoLmFicyhkKCkobik/blsxXTpuKTtyZXR1cm5bTWF0aC5taW4obyxlWzBdKSxNYXRoLm1heChhLGVbMV0pXX0sWzEvMCwtMS8wXSk7cmV0dXJuW01hdGgubWluKG9bMF0sZVswXSksTWF0aC5tYXgob1sxXSxlWzFdKV19LFsxLzAsLTEvMF0pfXJldHVybiBudWxsfSxPbD1mdW5jdGlvbihlLHQscixuKXt2YXIgaT10Lm1hcChmdW5jdGlvbih0KXt2YXIgaT10LnByb3BzLmRhdGFLZXk7cmV0dXJuIm51bWJlciI9PT1yJiZpJiZrbChlLHQsaSl8fENsKGUsaSxyLG4pfSk7aWYoIm51bWJlciI9PT1yKXJldHVybiBpLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybltNYXRoLm1pbihlWzBdLHRbMF0pLE1hdGgubWF4KGVbMV0sdFsxXSldfSxbMS8wLC0xLzBdKTt2YXIgbz17fTtyZXR1cm4gaS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjtyKyspb1t0W3JdXXx8KG9bdFtyXV09ITAsZS5wdXNoKHRbcl0pKTtyZXR1cm4gZX0sW10pfSxObD1mdW5jdGlvbihlLHQpe3JldHVybiJob3Jpem9udGFsIj09PWUmJiJ4QXhpcyI9PT10fHwidmVydGljYWwiPT09ZSYmInlBeGlzIj09PXR8fCJjZW50cmljIj09PWUmJiJhbmdsZUF4aXMiPT09dHx8InJhZGlhbCI9PT1lJiYicmFkaXVzQXhpcyI9PT10fSxQbD1mdW5jdGlvbihlLHQscil7dmFyIG4saSxvPWUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNvb3JkaW5hdGU9PT10JiYobj0hMCksZS5jb29yZGluYXRlPT09ciYmKGk9ITApLGUuY29vcmRpbmF0ZX0pO3JldHVybiBufHxvLnB1c2godCksaXx8by5wdXNoKHIpLG99LFJsPWZ1bmN0aW9uKGUsdCxyKXtpZighZSlyZXR1cm4gbnVsbDt2YXIgbj1lLnNjYWxlLGk9ZS5kdXBsaWNhdGVEb21haW4sbz1lLnR5cGUsYT1lLnJhbmdlLHM9KHR8fHIpJiYiY2F0ZWdvcnkiPT09byYmbi5iYW5kd2lkdGg/bi5iYW5kd2lkdGgoKS8yOjA7cmV0dXJuIHM9ImFuZ2xlQXhpcyI9PT1lLmF4aXNUeXBlPzIqTihhWzBdLWFbMV0pKnM6cyx0JiYoZS50aWNrc3x8ZS5uaWNlVGlja3MpPyhlLnRpY2tzfHxlLm5pY2VUaWNrcykubWFwKGZ1bmN0aW9uKGUpe3ZhciB0PWk/aS5pbmRleE9mKGUpOmU7cmV0dXJue2Nvb3JkaW5hdGU6bih0KStzLHZhbHVlOmUsb2Zmc2V0OnN9fSk6ZS5pc0NhdGVnb3JpYWwmJmUuY2F0ZWdvcmljYWxEb21haW4/ZS5jYXRlZ29yaWNhbERvbWFpbi5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm57Y29vcmRpbmF0ZTpuKGUpLHZhbHVlOmUsaW5kZXg6dCxvZmZzZXQ6c319KTpuLnRpY2tzJiYhcj9uLnRpY2tzKGUudGlja0NvdW50KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJue2Nvb3JkaW5hdGU6bihlKStzLHZhbHVlOmUsb2Zmc2V0OnN9fSk6bi5kb21haW4oKS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm57Y29vcmRpbmF0ZTpuKGUpK3MsdmFsdWU6aT9pW2VdOmUsaW5kZXg6dCxvZmZzZXQ6c319KX0sQmw9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuO3JldHVybiB1KCkocik/bj1yOnUoKSh0KSYmKG49dCksdSgpKGUpfHxuP2Z1bmN0aW9uKHQscixpLG8pe3UoKShlKSYmZSh0LHIsaSxvKSx1KCkobikmJm4odCxyLGksbyl9Om51bGx9LE1sPWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5zY2FsZSxpPWUudHlwZSxvPWUubGF5b3V0LGE9ZS5heGlzVHlwZTtpZigiYXV0byI9PT1yKXJldHVybiJyYWRpYWwiPT09byYmInJhZGl1c0F4aXMiPT09YT97c2NhbGU6Z3QoKSxyZWFsU2NhbGVUeXBlOiJiYW5kIn06InJhZGlhbCI9PT1vJiYiYW5nbGVBeGlzIj09PWE/e3NjYWxlOnduKCkscmVhbFNjYWxlVHlwZToibGluZWFyIn06ImNhdGVnb3J5Ij09PWkmJnQmJih0LmluZGV4T2YoIkxpbmVDaGFydCIpPj0wfHx0LmluZGV4T2YoIkFyZWFDaGFydCIpPj0wKT97c2NhbGU6dnQoKSxyZWFsU2NhbGVUeXBlOiJwb2ludCJ9OiJjYXRlZ29yeSI9PT1pP3tzY2FsZTpndCgpLHJlYWxTY2FsZVR5cGU6ImJhbmQifTp7c2NhbGU6d24oKSxyZWFsU2NhbGVUeXBlOiJsaW5lYXIifTtpZihPKCkocikpe3ZhciBzPSJzY2FsZSIuY29uY2F0KHIuc2xpY2UoMCwxKS50b1VwcGVyQ2FzZSgpKS5jb25jYXQoci5zbGljZSgxKSk7cmV0dXJue3NjYWxlOihuW3NdfHx2dCkoKSxyZWFsU2NhbGVUeXBlOm5bc10/czoicG9pbnQifX1yZXR1cm4gdSgpKHIpP3tzY2FsZTpyfTp7c2NhbGU6dnQoKSxyZWFsU2NhbGVUeXBlOiJwb2ludCJ9fSxMbD1mdW5jdGlvbihlKXt2YXIgdD1lLmRvbWFpbigpO2lmKHQmJiEodC5sZW5ndGg8PTIpKXt2YXIgcj10Lmxlbmd0aCxuPWUucmFuZ2UoKSxpPU1hdGgubWluKG5bMF0sblsxXSktMWUtNCxvPU1hdGgubWF4KG5bMF0sblsxXSkrMWUtNCxhPWUodFswXSkscz1lKHRbci0xXSk7KGE8aXx8YT5vfHxzPGl8fHM+bykmJmUuZG9tYWluKFt0WzBdLHRbci0xXV0pfX0sRGw9e3NpZ246ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGg7aWYoISh0PD0wKSlmb3IodmFyIHI9MCxuPWVbMF0ubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPTAsbz0wLGE9MDthPHQ7KythKXt2YXIgcz1DKCkoZVthXVtyXVsxXSk/ZVthXVtyXVswXTplW2FdW3JdWzFdO3M+PTA/KGVbYV1bcl1bMF09aSxlW2FdW3JdWzFdPWkrcyxpPWVbYV1bcl1bMV0pOihlW2FdW3JdWzBdPW8sZVthXVtyXVsxXT1vK3Msbz1lW2FdW3JdWzFdKX19LGV4cGFuZDpmdW5jdGlvbihlLHQpe2lmKChuPWUubGVuZ3RoKT4wKXtmb3IodmFyIHIsbixpLG89MCxhPWVbMF0ubGVuZ3RoO288YTsrK28pe2ZvcihpPXI9MDtyPG47KytyKWkrPWVbcl1bb11bMV18fDA7aWYoaSlmb3Iocj0wO3I8bjsrK3IpZVtyXVtvXVsxXS89aX1CcyhlLHQpfX0sbm9uZTpCcyxzaWxob3VldHRlOmZ1bmN0aW9uKGUsdCl7aWYoKHI9ZS5sZW5ndGgpPjApe2Zvcih2YXIgcixuPTAsaT1lW3RbMF1dLG89aS5sZW5ndGg7bjxvOysrbil7Zm9yKHZhciBhPTAscz0wO2E8cjsrK2Epcys9ZVthXVtuXVsxXXx8MDtpW25dWzFdKz1pW25dWzBdPS1zLzJ9QnMoZSx0KX19LHdpZ2dsZTpmdW5jdGlvbihlLHQpe2lmKChpPWUubGVuZ3RoKT4wJiYobj0ocj1lW3RbMF1dKS5sZW5ndGgpPjApe2Zvcih2YXIgcixuLGksbz0wLGE9MTthPG47KythKXtmb3IodmFyIHM9MCx1PTAsYz0wO3M8aTsrK3Mpe2Zvcih2YXIgZj1lW3Rbc11dLGw9ZlthXVsxXXx8MCxoPShsLShmW2EtMV1bMV18fDApKS8yLHA9MDtwPHM7KytwKXt2YXIgZD1lW3RbcF1dO2grPShkW2FdWzFdfHwwKS0oZFthLTFdWzFdfHwwKX11Kz1sLGMrPWgqbH1yW2EtMV1bMV0rPXJbYS0xXVswXT1vLHUmJihvLT1jL3UpfXJbYS0xXVsxXSs9clthLTFdWzBdPW8sQnMoZSx0KX19fSxqbD1mdW5jdGlvbihlLHQscil7dmFyIG49dC5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUucHJvcHMuZGF0YUtleX0pO3JldHVybiBmdW5jdGlvbigpe3ZhciBlPUJhKFtdKSx0PU1zLHI9QnMsbj1McztmdW5jdGlvbiBpKGkpe3ZhciBvLGEscz1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx1PWkubGVuZ3RoLGM9cy5sZW5ndGgsZj1uZXcgQXJyYXkoYyk7Zm9yKG89MDtvPGM7KytvKXtmb3IodmFyIGwsaD1zW29dLHA9ZltvXT1uZXcgQXJyYXkodSksZD0wO2Q8dTsrK2QpcFtkXT1sPVswLCtuKGlbZF0saCxkLGkpXSxsLmRhdGE9aVtkXTtwLmtleT1ofWZvcihvPTAsYT10KGYpO288YzsrK28pZlthW29dXS5pbmRleD1vO3JldHVybiByKGYsYSksZn1yZXR1cm4gaS5rZXlzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PT10eXBlb2YgdD90OkJhKEhhLmNhbGwodCkpLGkpOmV9LGkudmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09PXR5cGVvZiBlP2U6QmEoK2UpLGkpOm59LGkub3JkZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bnVsbD09ZT9NczoiZnVuY3Rpb24iPT09dHlwZW9mIGU/ZTpCYShIYS5jYWxsKGUpKSxpKTp0fSxpLm9mZnNldD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT1lP0JzOmUsaSk6cn0saX0oKS5rZXlzKG4pLnZhbHVlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuK0FsKGUsdCwwKX0pLm9yZGVyKE1zKS5vZmZzZXQoRGxbcl0pKGUpfSxVbD1mdW5jdGlvbihlLHQpe3ZhciByPXQucmVhbFNjYWxlVHlwZSxuPXQudHlwZSxpPXQudGlja0NvdW50LG89dC5vcmlnaW5hbERvbWFpbixhPXQuYWxsb3dEZWNpbWFscyxzPXJ8fHQuc2NhbGU7aWYoImF1dG8iIT09cyYmImxpbmVhciIhPT1zKXJldHVybiBudWxsO2lmKGkmJiJudW1iZXIiPT09biYmbyYmKCJhdXRvIj09PW9bMF18fCJhdXRvIj09PW9bMV0pKXt2YXIgdT1lLmRvbWFpbigpLGM9T2JqZWN0KFZlLmdldE5pY2VUaWNrVmFsdWVzKSh1LGksYSk7cmV0dXJuIGUuZG9tYWluKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIm51bWJlciI9PT10P1tqZSgpKGUpLExlKCkoZSldOmV9KGMsbikpLHtuaWNlVGlja3M6Y319aWYoaSYmIm51bWJlciI9PT1uKXt2YXIgZj1lLmRvbWFpbigpO3JldHVybntuaWNlVGlja3M6T2JqZWN0KFZlLmdldFRpY2tWYWx1ZXNGaXhlZERvbWFpbikoZixpLGEpfX1yZXR1cm4gbnVsbH0sRmw9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5heGlzLHI9ZS50aWNrcyxuPWUuYmFuZFNpemUsaT1lLmVudHJ5LG89ZS5pbmRleCxhPWUuZGF0YUtleTtpZigiY2F0ZWdvcnkiPT09dC50eXBlKXtpZighdC5hbGxvd0R1cGxpY2F0ZWRDYXRlZ29yeSYmdC5kYXRhS2V5JiYhZigpKGlbdC5kYXRhS2V5XSkpe3ZhciBzPUYociwidmFsdWUiLGlbdC5kYXRhS2V5XSk7aWYocylyZXR1cm4gcy5jb29yZGluYXRlK24vMn1yZXR1cm4gcltvXT9yW29dLmNvb3JkaW5hdGUrbi8yOm51bGx9dmFyIHU9QWwoaSxmKCkoYSk/dC5kYXRhS2V5OmEpO3JldHVybiBmKCkodSk/bnVsbDp0LnNjYWxlKHUpfSxWbD1mdW5jdGlvbihlLHQpe3ZhciByPWUuYWx3YXlzU2hvdyxuPWUuaWZPdmVyZmxvdztyZXR1cm4gciYmKG49ImV4dGVuZERvbWFpbiIpLG49PT10fSxxbD1mdW5jdGlvbihlLHQscixuLGkpe3ZhciBvPVooZSxMdSksYT1aKGUsVHUpLHM9by5jb25jYXQoYSksdT1aKGUsYmYpLGM9IiIuY29uY2F0KG4sIklkIiksZj1uWzBdLGw9dDtpZihzLmxlbmd0aCYmKGw9cy5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtpZih0LnByb3BzW2NdPT09ciYmVmwodC5wcm9wcywiZXh0ZW5kRG9tYWluIikmJlIodC5wcm9wc1tmXSkpe3ZhciBuPXQucHJvcHNbZl07cmV0dXJuW01hdGgubWluKGVbMF0sbiksTWF0aC5tYXgoZVsxXSxuKV19cmV0dXJuIGV9LGwpKSx1Lmxlbmd0aCl7dmFyIGg9IiIuY29uY2F0KGYsIjEiKSxwPSIiLmNvbmNhdChmLCIyIik7bD11LnJlZHVjZShmdW5jdGlvbihlLHQpe2lmKHQucHJvcHNbY109PT1yJiZWbCh0LnByb3BzLCJleHRlbmREb21haW4iKSYmUih0LnByb3BzW2hdKSYmUih0LnByb3BzW3BdKSl7dmFyIG49dC5wcm9wc1toXSxpPXQucHJvcHNbcF07cmV0dXJuW01hdGgubWluKGVbMF0sbixpKSxNYXRoLm1heChlWzFdLG4saSldfXJldHVybiBlfSxsKX1yZXR1cm4gaSYmaS5sZW5ndGgmJihsPWkucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIFIodCk/W01hdGgubWluKGVbMF0sdCksTWF0aC5tYXgoZVsxXSx0KV06ZX0sbCkpLGx9LEtsPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkucmVkdWNlKGZ1bmN0aW9uKG4saSl7dmFyIG89ZVtpXS5zdGFja2VkRGF0YS5yZWR1Y2UoZnVuY3Rpb24oZSxuKXt2YXIgaT1uLnNsaWNlKHQscisxKS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm5bamUoKSh0LmNvbmNhdChbZVswXV0pLmZpbHRlcihSKSksTGUoKSh0LmNvbmNhdChbZVsxXV0pLmZpbHRlcihSKSldfSxbMS8wLC0xLzBdKTtyZXR1cm5bTWF0aC5taW4oZVswXSxpWzBdKSxNYXRoLm1heChlWzFdLGlbMV0pXX0sWzEvMCwtMS8wXSk7cmV0dXJuW01hdGgubWluKG9bMF0sblswXSksTWF0aC5tYXgob1sxXSxuWzFdKV19LFsxLzAsLTEvMF0pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZT09PTEvMHx8ZT09PS0xLzA/MDplfSl9LHpsPS9eZGF0YU1pbltcc10qLVtcc10qKFswLTldKyhbLl17MX1bMC05XSspezAsMX0pJC8sR2w9L15kYXRhTWF4W1xzXSpcK1tcc10qKFswLTldKyhbLl17MX1bMC05XSspezAsMX0pJC8sSGw9ZnVuY3Rpb24oZSx0LHIpe2lmKCFkKCkoZSkpcmV0dXJuIHQ7dmFyIG49W107aWYoUihlWzBdKSluWzBdPXI/ZVswXTpNYXRoLm1pbihlWzBdLHRbMF0pO2Vsc2UgaWYoemwudGVzdChlWzBdKSl7dmFyIGk9K3psLmV4ZWMoZVswXSlbMV07blswXT10WzBdLWl9ZWxzZSB1KCkoZVswXSk/blswXT1lWzBdKHRbMF0pOm5bMF09dFswXTtpZihSKGVbMV0pKW5bMV09cj9lWzFdOk1hdGgubWF4KGVbMV0sdFsxXSk7ZWxzZSBpZihHbC50ZXN0KGVbMV0pKXt2YXIgbz0rR2wuZXhlYyhlWzFdKVsxXTtuWzFdPXRbMV0rb31lbHNlIHUoKShlWzFdKT9uWzFdPWVbMV0odFsxXSk6blsxXT10WzFdO3JldHVybiBufSxXbD1mdW5jdGlvbihlLHQpe2lmKGUmJmUuc2NhbGUmJmUuc2NhbGUuYmFuZHdpZHRoKXJldHVybiBlLnNjYWxlLmJhbmR3aWR0aCgpO2lmKGUmJnQmJnQubGVuZ3RoPj0yKXtmb3IodmFyIHI9QmUoKSh0LGZ1bmN0aW9uKGUpe3JldHVybiBlLmNvb3JkaW5hdGV9KSxuPTEvMCxpPTEsbz1yLmxlbmd0aDtpPG87aSsrKXt2YXIgYT1yW2ldLHM9cltpLTFdO249TWF0aC5taW4oKGEuY29vcmRpbmF0ZXx8MCktKHMuY29vcmRpbmF0ZXx8MCksbil9cmV0dXJuIG49PT0xLzA/MDpufXJldHVybiAwfSxZbD1mdW5jdGlvbihlLHQscil7cmV0dXJuIGUmJmUubGVuZ3RoP1BlKCkoZSxUKCkociwidHlwZS5kZWZhdWx0UHJvcHMuZG9tYWluIikpP3Q6ZTp0fTtmdW5jdGlvbiBYbChlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9LG49T2JqZWN0LmtleXMocik7ImZ1bmN0aW9uIj09PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYobj1uLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHIpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLGUpLmVudW1lcmFibGV9KSkpLG4uZm9yRWFjaChmdW5jdGlvbih0KXtRbChlLHQsclt0XSl9KX1yZXR1cm4gZX1mdW5jdGlvbiBRbChlLHQscil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1yLGV9dmFyICRsPU1hdGguUEkvMTgwLFpsPWZ1bmN0aW9uKGUpe3JldHVybiAxODAqZS9NYXRoLlBJfSxKbD1mdW5jdGlvbihlLHQscixuKXtyZXR1cm57eDplK01hdGguY29zKC0kbCpuKSpyLHk6dCtNYXRoLnNpbigtJGwqbikqcn19LGVoPWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS54LG49ZS55LGk9dC5jeCxvPXQuY3ksYT1mdW5jdGlvbihlLHQpe3ZhciByPWUueCxuPWUueSxpPXQueCxvPXQueTtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHItaSwyKStNYXRoLnBvdyhuLW8sMikpfSh7eDpyLHk6bn0se3g6aSx5Om99KTtpZihhPD0wKXJldHVybntyYWRpdXM6YX07dmFyIHM9KHItaSkvYSx1PU1hdGguYWNvcyhzKTtyZXR1cm4gbj5vJiYodT0yKk1hdGguUEktdSkse3JhZGl1czphLGFuZ2xlOlpsKHUpLGFuZ2xlSW5SYWRpYW46dX19LHRoPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dC5zdGFydEFuZ2xlLG49dC5lbmRBbmdsZSxpPU1hdGguZmxvb3Ioci8zNjApLG89TWF0aC5mbG9vcihuLzM2MCk7cmV0dXJuIGUrMzYwKk1hdGgubWluKGksbyl9LHJoPWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS54LG49ZS55LGk9ZWgoe3g6cix5Om59LHQpLG89aS5yYWRpdXMsYT1pLmFuZ2xlLHM9dC5pbm5lclJhZGl1cyx1PXQub3V0ZXJSYWRpdXM7aWYobzxzfHxvPnUpcmV0dXJuITE7aWYoMD09PW8pcmV0dXJuITA7dmFyIGMsZj1mdW5jdGlvbihlKXt2YXIgdD1lLnN0YXJ0QW5nbGUscj1lLmVuZEFuZ2xlLG49TWF0aC5mbG9vcih0LzM2MCksaT1NYXRoLmZsb29yKHIvMzYwKSxvPU1hdGgubWluKG4saSk7cmV0dXJue3N0YXJ0QW5nbGU6dC0zNjAqbyxlbmRBbmdsZTpyLTM2MCpvfX0odCksbD1mLnN0YXJ0QW5nbGUsaD1mLmVuZEFuZ2xlLHA9YTtpZihsPD1oKXtmb3IoO3A+aDspcC09MzYwO2Zvcig7cDxsOylwKz0zNjA7Yz1wPj1sJiZwPD1ofWVsc2V7Zm9yKDtwPmw7KXAtPTM2MDtmb3IoO3A8aDspcCs9MzYwO2M9cD49aCYmcDw9bH1yZXR1cm4gYz9YbCh7fSx0LHtyYWRpdXM6byxhbmdsZTp0aChwLHQpfSk6bnVsbH07ZnVuY3Rpb24gbmgoZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpe2Zvcih2YXIgdD0wLHI9bmV3IEFycmF5KGUubGVuZ3RoKTt0PGUubGVuZ3RoO3QrKylyW3RdPWVbdF07cmV0dXJuIHJ9fShlKXx8ZnVuY3Rpb24oZSl7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChlKXx8IltvYmplY3QgQXJndW1lbnRzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkpcmV0dXJuIEFycmF5LmZyb20oZSl9KGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9KCl9ZnVuY3Rpb24gaWgoKXtyZXR1cm4oaWg9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9YXJndW1lbnRzW3RdO2Zvcih2YXIgbiBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG4pJiYoZVtuXT1yW25dKX1yZXR1cm4gZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBvaChlLHQscil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1yLGV9dmFyIGFoPW0uYS5zaGFwZSh7eDptLmEubnVtYmVyLHk6bS5hLm51bWJlcix3aWR0aDptLmEubnVtYmVyLGhlaWdodDptLmEubnVtYmVyfSksc2g9bS5hLnNoYXBlKHtjeDptLmEubnVtYmVyLGN5Om0uYS5udW1iZXIsaW5uZXJSYWRpdXM6bS5hLm51bWJlcixvdXRlclJhZGl1czptLmEubnVtYmVyLHN0YXJ0QW5nbGU6bS5hLm51bWJlcixlbmRBbmdsZTptLmEubnVtYmVyfSksdWg9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fSxuPU9iamVjdC5rZXlzKHIpOyJmdW5jdGlvbiI9PT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKG49bi5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhyKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKS5lbnVtZXJhYmxlfSkpKSxuLmZvckVhY2goZnVuY3Rpb24odCl7b2goZSx0LHJbdF0pfSl9cmV0dXJuIGV9KHt9LEgse3ZpZXdCb3g6bS5hLm9uZU9mVHlwZShbYWgsc2hdKSxmb3JtYXR0ZXI6bS5hLmZ1bmMsdmFsdWU6bS5hLm9uZU9mVHlwZShbbS5hLm51bWJlcixtLmEuc3RyaW5nXSksb2Zmc2V0Om0uYS5udW1iZXIscG9zaXRpb246bS5hLm9uZU9mKFsidG9wIiwibGVmdCIsInJpZ2h0IiwiYm90dG9tIiwiaW5zaWRlIiwib3V0c2lkZSIsImluc2lkZUxlZnQiLCJpbnNpZGVSaWdodCIsImluc2lkZVRvcCIsImluc2lkZUJvdHRvbSIsImluc2lkZVRvcExlZnQiLCJpbnNpZGVCb3R0b21MZWZ0IiwiaW5zaWRlVG9wUmlnaHQiLCJpbnNpZGVCb3R0b21SaWdodCIsImluc2lkZVN0YXJ0IiwiaW5zaWRlRW5kIiwiZW5kIiwiY2VudGVyIiwiY2VudGVyVG9wIiwiY2VudGVyQm90dG9tIl0pLGNoaWxkcmVuOm0uYS5vbmVPZlR5cGUoW20uYS5hcnJheU9mKG0uYS5ub2RlKSxtLmEubm9kZV0pLGNsYXNzTmFtZTptLmEuc3RyaW5nLGNvbnRlbnQ6bS5hLm9uZU9mVHlwZShbbS5hLmVsZW1lbnQsbS5hLmZ1bmNdKX0pLGNoPWZ1bmN0aW9uKGUpe3ZhciB0PWUudmFsdWUscj1lLmZvcm1hdHRlcixuPWYoKShlLmNoaWxkcmVuKT90OmUuY2hpbGRyZW47cmV0dXJuIHUoKShyKT9yKG4pOm59LGZoPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbixpLG89ZS5wb3NpdGlvbixhPWUudmlld0JveCxzPWUub2Zmc2V0LHU9ZS5jbGFzc05hbWUsYz1hLmN4LGw9YS5jeSxoPWEuaW5uZXJSYWRpdXMscD1hLm91dGVyUmFkaXVzLGQ9YS5zdGFydEFuZ2xlLHk9YS5lbmRBbmdsZSx2PWEuY2xvY2tXaXNlLG09KGgrcCkvMixiPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE4odC1lKSpNYXRoLm1pbihNYXRoLmFicyh0LWUpLDM2MCl9KGQseSksUz1iPj0wPzE6LTE7Imluc2lkZVN0YXJ0Ij09PW8/KG49ZCtTKnMsaT12KToiaW5zaWRlRW5kIj09PW8/KG49eS1TKnMsaT0hdik6ImVuZCI9PT1vJiYobj15K1MqcyxpPXYpLGk9Yjw9MD9pOiFpO3ZhciBFPUpsKGMsbCxtLG4pLHc9SmwoYyxsLG0sbiszNTkqKGk/MTotMSkpLFQ9Ik0iLmNvbmNhdChFLngsIiwiKS5jb25jYXQoRS55LCJcbiAgICBBIikuY29uY2F0KG0sIiwiKS5jb25jYXQobSwiLDAsMSwiKS5jb25jYXQoaT8wOjEsIixcbiAgICAiKS5jb25jYXQody54LCIsIikuY29uY2F0KHcueSksQT1mKCkoZS5pZCk/TCgicmVjaGFydHMtcmFkaWFsLWxpbmUtIik6ZS5pZDtyZXR1cm4gZy5hLmNyZWF0ZUVsZW1lbnQoInRleHQiLGloKHt9LHIse2RvbWluYW50QmFzZWxpbmU6ImNlbnRyYWwiLGNsYXNzTmFtZTpfKCkoInJlY2hhcnRzLXJhZGlhbC1iYXItbGFiZWwiLHUpfSksZy5hLmNyZWF0ZUVsZW1lbnQoImRlZnMiLG51bGwsZy5hLmNyZWF0ZUVsZW1lbnQoInBhdGgiLHtpZDpBLGQ6VH0pKSxnLmEuY3JlYXRlRWxlbWVudCgidGV4dFBhdGgiLHt4bGlua0hyZWY6IiMiLmNvbmNhdChBKX0sdCkpfSxsaD1mdW5jdGlvbihlKXt2YXIgdD1lLnZpZXdCb3gscj1lLm9mZnNldCxuPWUucG9zaXRpb24saT10LmN4LG89dC5jeSxhPXQuaW5uZXJSYWRpdXMscz10Lm91dGVyUmFkaXVzLHU9KHQuc3RhcnRBbmdsZSt0LmVuZEFuZ2xlKS8yO2lmKCJvdXRzaWRlIj09PW4pe3ZhciBjPUpsKGksbyxzK3IsdSksZj1jLng7cmV0dXJue3g6Zix5OmMueSx0ZXh0QW5jaG9yOmY+PWk/InN0YXJ0IjoiZW5kIix2ZXJ0aWNhbEFuY2hvcjoibWlkZGxlIn19aWYoImNlbnRlciI9PT1uKXJldHVybnt4OmkseTpvLHRleHRBbmNob3I6Im1pZGRsZSIsdmVydGljYWxBbmNob3I6Im1pZGRsZSJ9O2lmKCJjZW50ZXJUb3AiPT09bilyZXR1cm57eDppLHk6byx0ZXh0QW5jaG9yOiJtaWRkbGUiLHZlcnRpY2FsQW5jaG9yOiJzdGFydCJ9O2lmKCJjZW50ZXJCb3R0b20iPT09bilyZXR1cm57eDppLHk6byx0ZXh0QW5jaG9yOiJtaWRkbGUiLHZlcnRpY2FsQW5jaG9yOiJlbmQifTt2YXIgbD1KbChpLG8sKGErcykvMix1KTtyZXR1cm57eDpsLngseTpsLnksdGV4dEFuY2hvcjoibWlkZGxlIix2ZXJ0aWNhbEFuY2hvcjoibWlkZGxlIn19LGhoPWZ1bmN0aW9uKGUpe3ZhciB0PWUudmlld0JveCxyPWUub2Zmc2V0LG49ZS5wb3NpdGlvbixpPXQueCxvPXQueSxzPXQud2lkdGgsdT10LmhlaWdodCxjPXU+PTA/MTotMTtyZXR1cm4idG9wIj09PW4/e3g6aStzLzIseTpvLWMqcix0ZXh0QW5jaG9yOiJtaWRkbGUiLHZlcnRpY2FsQW5jaG9yOmM+MD8iZW5kIjoic3RhcnQifToiYm90dG9tIj09PW4/e3g6aStzLzIseTpvK3UrYypyLHRleHRBbmNob3I6Im1pZGRsZSIsdmVydGljYWxBbmNob3I6InN0YXJ0In06ImxlZnQiPT09bj97eDppLXIseTpvK3UvMix0ZXh0QW5jaG9yOiJlbmQiLHZlcnRpY2FsQW5jaG9yOiJtaWRkbGUifToicmlnaHQiPT09bj97eDppK3Mrcix5Om8rdS8yLHRleHRBbmNob3I6InN0YXJ0Iix2ZXJ0aWNhbEFuY2hvcjoibWlkZGxlIn06Imluc2lkZUxlZnQiPT09bj97eDppK3IseTpvK3UvMix0ZXh0QW5jaG9yOiJzdGFydCIsdmVydGljYWxBbmNob3I6Im1pZGRsZSJ9OiJpbnNpZGVSaWdodCI9PT1uP3t4Omkrcy1yLHk6byt1LzIsdGV4dEFuY2hvcjoiZW5kIix2ZXJ0aWNhbEFuY2hvcjoibWlkZGxlIn06Imluc2lkZVRvcCI9PT1uP3t4Omkrcy8yLHk6bytjKnIsdGV4dEFuY2hvcjoibWlkZGxlIix2ZXJ0aWNhbEFuY2hvcjoic3RhcnQifToiaW5zaWRlQm90dG9tIj09PW4/e3g6aStzLzIseTpvK3UtYypyLHRleHRBbmNob3I6Im1pZGRsZSIsdmVydGljYWxBbmNob3I6ImVuZCJ9OiJpbnNpZGVUb3BMZWZ0Ij09PW4/e3g6aStyLHk6bytjKnIsdGV4dEFuY2hvcjoic3RhcnQiLHZlcnRpY2FsQW5jaG9yOiJzdGFydCJ9OiJpbnNpZGVUb3BSaWdodCI9PT1uP3t4Omkrcy1yLHk6bytjKnIsdGV4dEFuY2hvcjoiZW5kIix2ZXJ0aWNhbEFuY2hvcjoic3RhcnQifToiaW5zaWRlQm90dG9tTGVmdCI9PT1uP3t4Omkrcix5Om8rdS1jKnIsdGV4dEFuY2hvcjoic3RhcnQiLHZlcnRpY2FsQW5jaG9yOiJlbmQifToiaW5zaWRlQm90dG9tUmlnaHQiPT09bj97eDppK3Mtcix5Om8rdS1jKnIsdGV4dEFuY2hvcjoiZW5kIix2ZXJ0aWNhbEFuY2hvcjoiZW5kIn06YSgpKG4pJiYoUihuLngpfHxQKG4ueCkpJiYoUihuLnkpfHxQKG4ueSkpP3t4OmkrRChuLngscykseTpvK0Qobi55LHUpLHRleHRBbmNob3I6ImVuZCIsdmVydGljYWxBbmNob3I6ImVuZCJ9Ont4Omkrcy8yLHk6byt1LzIsdGV4dEFuY2hvcjoibWlkZGxlIix2ZXJ0aWNhbEFuY2hvcjoibWlkZGxlIn19LHBoPWZ1bmN0aW9uKGUpe3JldHVybiBSKGUuY3gpfTtmdW5jdGlvbiBkaChlKXt2YXIgdCxyPWUudmlld0JveCxuPWUucG9zaXRpb24saT1lLnZhbHVlLG89ZS5jaGlsZHJlbixhPWUuY29udGVudCxzPWUuY2xhc3NOYW1lLGM9dm9pZCAwPT09cz8iIjpzO2lmKCFyfHxmKCkoaSkmJmYoKShvKSYmIU9iamVjdCh5LmlzVmFsaWRFbGVtZW50KShhKSYmIXUoKShhKSlyZXR1cm4gbnVsbDtpZihPYmplY3QoeS5pc1ZhbGlkRWxlbWVudCkoYSkpcmV0dXJuIE9iamVjdCh5LmNsb25lRWxlbWVudCkoYSxlKTtpZih1KCkoYSkpe2lmKHQ9YShlKSxPYmplY3QoeS5pc1ZhbGlkRWxlbWVudCkodCkpcmV0dXJuIHR9ZWxzZSB0PWNoKGUpO3ZhciBsPXBoKHIpLGg9ZWUoZSk7aWYobCYmKCJpbnNpZGVTdGFydCI9PT1ufHwiaW5zaWRlRW5kIj09PW58fCJlbmQiPT09bikpcmV0dXJuIGZoKGUsdCxoKTt2YXIgcD1sP2xoKGUpOmhoKGUpO3JldHVybiBnLmEuY3JlYXRlRWxlbWVudChPZSxpaCh7Y2xhc3NOYW1lOl8oKSgicmVjaGFydHMtbGFiZWwiLGMpfSxoLHApLHQpfWRoLmRpc3BsYXlOYW1lPSJMYWJlbCIsZGguZGVmYXVsdFByb3BzPXtvZmZzZXQ6NX0sZGgucHJvcFR5cGVzPXVoO3ZhciB5aD1mdW5jdGlvbihlKXt2YXIgdD1lLmN4LHI9ZS5jeSxuPWUuYW5nbGUsaT1lLnN0YXJ0QW5nbGUsbz1lLmVuZEFuZ2xlLGE9ZS5yLHM9ZS5yYWRpdXMsdT1lLmlubmVyUmFkaXVzLGM9ZS5vdXRlclJhZGl1cyxmPWUueCxsPWUueSxoPWUudG9wLHA9ZS5sZWZ0LGQ9ZS53aWR0aCx5PWUuaGVpZ2h0LGc9ZS5jbG9ja1dpc2U7aWYoUihkKSYmUih5KSl7aWYoUihmKSYmUihsKSlyZXR1cm57eDpmLHk6bCx3aWR0aDpkLGhlaWdodDp5fTtpZihSKGgpJiZSKHApKXJldHVybnt4OmgseTpwLHdpZHRoOmQsaGVpZ2h0Onl9fXJldHVybiBSKGYpJiZSKGwpP3t4OmYseTpsLHdpZHRoOjAsaGVpZ2h0OjB9OlIodCkmJlIocik/e2N4OnQsY3k6cixzdGFydEFuZ2xlOml8fG58fDAsZW5kQW5nbGU6b3x8bnx8MCxpbm5lclJhZGl1czp1fHwwLG91dGVyUmFkaXVzOmN8fHN8fGF8fDAsY2xvY2tXaXNlOmd9OmUudmlld0JveD9lLnZpZXdCb3g6e319O2RoLnBhcnNlVmlld0JveD15aCxkaC5yZW5kZXJDYWxsQnlQYXJlbnQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO2lmKCFlfHwhZS5jaGlsZHJlbiYmciYmIWUubGFiZWwpcmV0dXJuIG51bGw7dmFyIG49ZS5jaGlsZHJlbixpPXloKGUpLG89WihuLGRoKS5tYXAoZnVuY3Rpb24oZSxyKXtyZXR1cm4gT2JqZWN0KHkuY2xvbmVFbGVtZW50KShlLHt2aWV3Qm94OnR8fGksa2V5OiJsYWJlbC0iLmNvbmNhdChyKX0pfSk7cmV0dXJuIHI/W2Z1bmN0aW9uKGUsdCl7cmV0dXJuIGU/ITA9PT1lP2cuYS5jcmVhdGVFbGVtZW50KGRoLHtrZXk6ImxhYmVsLWltcGxpY2l0Iix2aWV3Qm94OnR9KTpCKGUpP2cuYS5jcmVhdGVFbGVtZW50KGRoLHtrZXk6ImxhYmVsLWltcGxpY2l0Iix2aWV3Qm94OnQsdmFsdWU6ZX0pOk9iamVjdCh5LmlzVmFsaWRFbGVtZW50KShlKT9lLnR5cGU9PT1kaD9PYmplY3QoeS5jbG9uZUVsZW1lbnQpKGUse2tleToibGFiZWwtaW1wbGljaXQiLHZpZXdCb3g6dH0pOmcuYS5jcmVhdGVFbGVtZW50KGRoLHtrZXk6ImxhYmVsLWltcGxpY2l0Iixjb250ZW50OmUsdmlld0JveDp0fSk6dSgpKGUpP2cuYS5jcmVhdGVFbGVtZW50KGRoLHtrZXk6ImxhYmVsLWltcGxpY2l0Iixjb250ZW50OmUsdmlld0JveDp0fSk6YSgpKGUpP2cuYS5jcmVhdGVFbGVtZW50KGRoLGloKHt2aWV3Qm94OnR9LGUse2tleToibGFiZWwtaW1wbGljaXQifSkpOm51bGw6bnVsbH0oZS5sYWJlbCx0fHxpKV0uY29uY2F0KG5oKG8pKTpvfTt2YXIgZ2g9ZGg7ZnVuY3Rpb24gdmgoZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpe2Zvcih2YXIgdD0wLHI9bmV3IEFycmF5KGUubGVuZ3RoKTt0PGUubGVuZ3RoO3QrKylyW3RdPWVbdF07cmV0dXJuIHJ9fShlKXx8ZnVuY3Rpb24oZSl7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChlKXx8IltvYmplY3QgQXJndW1lbnRzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkpcmV0dXJuIEFycmF5LmZyb20oZSl9KGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9KCl9ZnVuY3Rpb24gbWgoKXtyZXR1cm4obWg9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9YXJndW1lbnRzW3RdO2Zvcih2YXIgbiBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG4pJiYoZVtuXT1yW25dKX1yZXR1cm4gZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBiaChlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9LG49T2JqZWN0LmtleXMocik7ImZ1bmN0aW9uIj09PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYobj1uLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHIpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLGUpLmVudW1lcmFibGV9KSkpLG4uZm9yRWFjaChmdW5jdGlvbih0KXtfaChlLHQsclt0XSl9KX1yZXR1cm4gZX1mdW5jdGlvbiBfaChlLHQscil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1yLGV9ZnVuY3Rpb24gU2goZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciByLG4saT1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHIsbixpPXt9LG89T2JqZWN0LmtleXMoZSk7Zm9yKG49MDtuPG8ubGVuZ3RoO24rKylyPW9bbl0sdC5pbmRleE9mKHIpPj0wfHwoaVtyXT1lW3JdKTtyZXR1cm4gaX0oZSx0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihuPTA7bjxvLmxlbmd0aDtuKyspcj1vW25dLHQuaW5kZXhPZihyKT49MHx8T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscikmJihpW3JdPWVbcl0pfXJldHVybiBpfXZhciBFaD17aWQ6bS5hLnN0cmluZyxkYXRhOm0uYS5hcnJheU9mKG0uYS5vYmplY3QpLHZhbHVlQWNjZXNzb3I6bS5hLmZ1bmMsY2xvY2tXaXNlOm0uYS5ib29sLGRhdGFLZXk6bS5hLm9uZU9mVHlwZShbbS5hLnN0cmluZyxtLmEubnVtYmVyLG0uYS5mdW5jXSk="
}