{"Headers":{"Last-Modified":"Wed, 06 May 2020 07:48:58 GMT","X-Content-Type-Options":"nosniff"},"Body":"LyohDQogKiBDb3B5cmlnaHQgMjAyMCBQcm9ncmVzcyBTb2Z0d2FyZSBDb3Jwb3JhdGlvbiBhbmQvb3Igb25lIG9mIGl0cyBzdWJzaWRpYXJpZXMgb3IgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqDQogKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsNCiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4NCiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KICoNCiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCiAqDQogKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQogKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQogKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQogKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCiAqLw0KIWZ1bmN0aW9uKGUsZGVmaW5lKXtkZWZpbmUoImtlbmRvLmxpc3QubWluIixbImtlbmRvLmRhdGEubWluIiwia2VuZG8ucG9wdXAubWluIl0sZSl9KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaShlLGkpe3JldHVybiBlIT09dCYmIiIhPT1lJiZudWxsIT09ZSYmKCJib29sZWFuIj09PWk/KCJib29sZWFuIiE9dHlwZW9mIGUmJihlPSJ0cnVlIj09PWUudG9Mb3dlckNhc2UoKSksZT0hIWUpOiJudW1iZXIiPT09aT9lPStlOiJzdHJpbmciPT09aSYmKGU9IiIrZSkpLGV9ZnVuY3Rpb24gbihlKXtyZXR1cm4gZVtlLmxlbmd0aC0xXX1mdW5jdGlvbiBhKGUpe3ZhciB0PWUuc2VsZWN0ZWRJbmRleDtyZXR1cm4gdD4tMT9lLm9wdGlvbnNbdF06e319ZnVuY3Rpb24gcyhlLHQpe3ZhciBpLG4sYSxzLHI9dC5sZW5ndGgsbD1lLmxlbmd0aCxvPVtdLHU9W107aWYobClmb3IoYT0wO2E8bDthKyspe2ZvcihpPWVbYV0sbj0hMSxzPTA7czxyO3MrKylpZihpPT09dFtzXSl7bj0hMCxvLnB1c2goe2luZGV4OmEsaXRlbTppfSk7YnJlYWt9bnx8dS5wdXNoKGkpfXJldHVybntjaGFuZ2VkOm8sdW5jaGFuZ2VkOnV9fWZ1bmN0aW9uIHIodCl7cmV0dXJuISghdHx8ZS5pc0VtcHR5T2JqZWN0KHQpKSYmISh0LmZpbHRlcnMmJiF0LmZpbHRlcnMubGVuZ3RoKX1mdW5jdGlvbiBsKHQsaSl7dmFyIG4sYT0hMTtyZXR1cm4gdC5maWx0ZXJzJiYobj1lLmdyZXAodC5maWx0ZXJzLGZ1bmN0aW9uKGUpe3JldHVybiBhPWwoZSxpKSxlLmZpbHRlcnM/ZS5maWx0ZXJzLmxlbmd0aDplLmZpZWxkIT1pfSksYXx8dC5maWx0ZXJzLmxlbmd0aD09PW4ubGVuZ3RofHwoYT0hMCksdC5maWx0ZXJzPW4pLGF9dmFyIG8sdSxjPXdpbmRvdy5rZW5kbyxkPWMudWksaD1jLl9vdXRlckhlaWdodCxmPS9eXGQrKFwuXGQrKT8lJC9pLHA9ZC5XaWRnZXQsXz1jLmtleXMsZz1jLnN1cHBvcnQsbT1jLmh0bWxFbmNvZGUsdj1jLl9hY3RpdmVFbGVtZW50LGI9Yy5fb3V0ZXJXaWR0aCx4PWMuZGF0YS5PYnNlcnZhYmxlQXJyYXksST0iaWQiLHc9ImNoYW5nZSIsUz0iay1zdGF0ZS1mb2N1c2VkIix5PSJrLXN0YXRlLWhvdmVyIixUPSJrLWktbG9hZGluZyIsRj0iLmstZ3JvdXAtaGVhZGVyIixrPSIuay1pdGVtIixWPSJfbGFiZWwiLEM9Im9wZW4iLEQ9ImNsb3NlIixIPSJjYXNjYWRlIixCPSJzZWxlY3QiLEU9InNlbGVjdGVkIixMPSJyZXF1ZXN0U3RhcnQiLFA9InJlcXVlc3RFbmQiLEc9ImJsdXIiLFc9ImZvY3VzIixBPSJmb2N1c291dCIscT1lLmV4dGVuZCxOPWUucHJveHksTz1lLmlzQXJyYXksTT1nLmJyb3dzZXIsej0iay1oaWRkZW4iLFI9IndpZHRoIixVPU0ubXNpZSxqPVUmJk0udmVyc2lvbjw5LCQ9LyIvZyxRPXtDb21ib0JveDpbIkRyb3BEb3duTGlzdCIsIk11bHRpQ29sdW1uQ29tYm9Cb3giXSxEcm9wRG93bkxpc3Q6WyJDb21ib0JveCIsIk11bHRpQ29sdW1uQ29tYm9Cb3giXSxNdWx0aUNvbHVtbkNvbWJvQm94OlsiQ29tYm9Cb3giLCJEcm9wRG93bkxpc3QiXX0sWT1jLnVpLkRhdGFCb3VuZFdpZGdldC5leHRlbmQoe2luaXQ6ZnVuY3Rpb24odCxpKXt2YXIgbixhPXRoaXMscz1hLm5zO3AuZm4uaW5pdC5jYWxsKGEsdCxpKSx0PWEuZWxlbWVudCxpPWEub3B0aW9ucyxhLl9pc1NlbGVjdD10LmlzKEIpLGEuX2lzU2VsZWN0JiZhLmVsZW1lbnRbMF0ubGVuZ3RoJiYoaS5kYXRhU291cmNlfHwoaS5kYXRhVGV4dEZpZWxkPWkuZGF0YVRleHRGaWVsZHx8InRleHQiLGkuZGF0YVZhbHVlRmllbGQ9aS5kYXRhVmFsdWVGaWVsZHx8InZhbHVlIikpLGEudWw9ZSgnPHVsIHVuc2VsZWN0YWJsZT0ib24iIGNsYXNzPSJrLWxpc3Qgay1yZXNldCIvPicpLmF0dHIoe3RhYkluZGV4Oi0xLCJhcmlhLWhpZGRlbiI6ITB9KSxhLmxpc3Q9ZSgiPGRpdiBjbGFzcz0nay1saXN0LWNvbnRhaW5lcicvPiIpLmFwcGVuZChhLnVsKS5vbigibW91c2Vkb3duIitzLE4oYS5fbGlzdE1vdXNlZG93bixhKSksbj10LmF0dHIoSSksbnx8KG49Yy5ndWlkKCkpLGEubGlzdC5hdHRyKEksbisiLWxpc3QiKSxhLnVsLmF0dHIoSSxuKyJfbGlzdGJveCIpLGkuY29sdW1ucyYmaS5jb2x1bW5zLmxlbmd0aCYmKGEudWwucmVtb3ZlQ2xhc3MoImstbGlzdCIpLmFkZENsYXNzKCJrLWdyaWQtbGlzdCIpLGEuX2NvbHVtbnNIZWFkZXIoKSksYS5faGVhZGVyKCksYS5fbm9EYXRhKCksYS5fZm9vdGVyKCksYS5fYWNjZXNzb3JzKCksYS5faW5pdFZhbHVlKCl9LG9wdGlvbnM6e3ZhbHVlUHJpbWl0aXZlOiExLGZvb3RlclRlbXBsYXRlOiIiLGhlYWRlclRlbXBsYXRlOiIiLG5vRGF0YVRlbXBsYXRlOiEwLG1lc3NhZ2VzOntub0RhdGE6Ik5vIGRhdGEgZm91bmQuIixjbGVhcjoiY2xlYXIifX0sc2V0T3B0aW9uczpmdW5jdGlvbihlKXtwLmZuLnNldE9wdGlvbnMuY2FsbCh0aGlzLGUpLGUmJmUuZW5hYmxlIT09dCYmKGUuZW5hYmxlZD1lLmVuYWJsZSksZS5jb2x1bW5zJiZlLmNvbHVtbnMubGVuZ3RoJiZ0aGlzLl9jb2x1bW5zSGVhZGVyKCksdGhpcy5faGVhZGVyKCksdGhpcy5fbm9EYXRhKCksdGhpcy5fZm9vdGVyKCksdGhpcy5fcmVuZGVyRm9vdGVyKCksdGhpcy5fcmVuZGVyTm9EYXRhKCl9LGZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5fZm9jdXNlZC5mb2N1cygpfSxyZWFkb25seTpmdW5jdGlvbihlKXt0aGlzLl9lZGl0YWJsZSh7cmVhZG9ubHk6ZT09PXR8fGUsZGlzYWJsZTohMX0pfSxlbmFibGU6ZnVuY3Rpb24oZSl7dGhpcy5fZWRpdGFibGUoe3JlYWRvbmx5OiExLGRpc2FibGU6IShlPWU9PT10fHxlKX0pfSxfaGVhZGVyOmZ1bmN0aW9uKCl7dmFyIGksbj10aGlzLGE9ZShuLmhlYWRlcikscz1uLm9wdGlvbnMuaGVhZGVyVGVtcGxhdGU7cmV0dXJuIHRoaXMuX2FuZ3VsYXJFbGVtZW50KGEsImNsZWFudXAiKSxjLmRlc3Ryb3koYSksYS5yZW1vdmUoKSxzPyhpPSJmdW5jdGlvbiIhPXR5cGVvZiBzP2MudGVtcGxhdGUocyk6cyxhPWUoaSh7fSkpLG4uaGVhZGVyPWFbMF0/YTpudWxsLG4ubGlzdC5wcmVwZW5kKGEpLHRoaXMuX2FuZ3VsYXJFbGVtZW50KG4uaGVhZGVyLCJjb21waWxlIiksdCk6KG4uaGVhZGVyPW51bGwsdCl9LF9jb2x1bW5zSGVhZGVyOmZ1bmN0aW9uKCl7dmFyIHQsaSxuLGEscyxyLGwsbyx1LGQsaCxwPXRoaXMsXz1lKHAuY29sdW1uc0hlYWRlcik7Zm9yKHRoaXMuX2FuZ3VsYXJFbGVtZW50KF8sImNsZWFudXAiKSxjLmRlc3Ryb3koXyksXy5yZW1vdmUoKSx0PSI8ZGl2IGNsYXNzPSdrLWdyaWQtaGVhZGVyJz48ZGl2IGNsYXNzPSdrLWdyaWQtaGVhZGVyLXdyYXAnPjx0YWJsZSByb2xlPSdwcmVzZW50YXRpb24nPiIsaT0iPGNvbGdyb3VwPiIsbj0iPHRyPiIsYT0wO2E8dGhpcy5vcHRpb25zLmNvbHVtbnMubGVuZ3RoO2ErKylzPXRoaXMub3B0aW9ucy5jb2x1bW5zW2FdLHI9cy50aXRsZXx8cy5maWVsZHx8IiIsbD1zLmhlYWRlclRlbXBsYXRlfHxyLG89ImZ1bmN0aW9uIiE9dHlwZW9mIGw/Yy50ZW1wbGF0ZShsKTpsLHU9cy53aWR0aCxkPXBhcnNlSW50KHUsMTApLGg9IiIsdSYmIWlzTmFOKGQpJiYoaCs9InN0eWxlPSd3aWR0aDoiLGgrPWQsaCs9Zi50ZXN0KHUpPyIlIjoicHgiLGgrPSI7JyIpLGkrPSI8Y29sICIraCsiLz4iLG4rPSI8dGggY2xhc3M9J2staGVhZGVyJz4iLG4rPW8ocyksbis9IjwvdGg+IjtpKz0iPC9jb2xncm91cD4iLG4rPSI8L3RyPiIsdCs9aSx0Kz1uLHQrPSI8L3RhYmxlPjwvZGl2PjwvZGl2PiIscC5jb2x1bW5zSGVhZGVyPV89ZSh0KSxwLmxpc3QucHJlcGVuZChfKSx0aGlzLl9hbmd1bGFyRWxlbWVudChwLmNvbHVtbnNIZWFkZXIsImNvbXBpbGUiKX0sX25vRGF0YTpmdW5jdGlvbigpe3ZhciBpPXRoaXMsbj1lKGkubm9EYXRhKSxhPWkub3B0aW9ucy5ub0RhdGFUZW1wbGF0ZT09PSEwP2kub3B0aW9ucy5tZXNzYWdlcy5ub0RhdGE6aS5vcHRpb25zLm5vRGF0YVRlbXBsYXRlO3JldHVybiBpLmFuZ3VsYXIoImNsZWFudXAiLGZ1bmN0aW9uKCl7cmV0dXJue2VsZW1lbnRzOm59fSksYy5kZXN0cm95KG4pLG4ucmVtb3ZlKCksYT8oaS5ub0RhdGE9ZSgnPGRpdiBjbGFzcz0iay1ub2RhdGEiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPjxkaXY+PC9kaXY+PC9kaXY+JykuYXBwZW5kVG8oaS5saXN0KSxpLm5vRGF0YVRlbXBsYXRlPSJmdW5jdGlvbiIhPXR5cGVvZiBhP2MudGVtcGxhdGUoYSk6YSx0KTooaS5ub0RhdGE9bnVsbCx0KX0sX2Zvb3RlcjpmdW5jdGlvbigpe3ZhciBpPXRoaXMsbj1lKGkuZm9vdGVyKSxhPWkub3B0aW9ucy5mb290ZXJUZW1wbGF0ZTtyZXR1cm4gdGhpcy5fYW5ndWxhckVsZW1lbnQobiwiY2xlYW51cCIpLGMuZGVzdHJveShuKSxuLnJlbW92ZSgpLGE/KGkuZm9vdGVyPWUoJzxkaXYgY2xhc3M9ImstZm9vdGVyIj48L2Rpdj4nKS5hcHBlbmRUbyhpLmxpc3QpLGkuZm9vdGVyVGVtcGxhdGU9ImZ1bmN0aW9uIiE9dHlwZW9mIGE/Yy50ZW1wbGF0ZShhKTphLHQpOihpLmZvb3Rlcj1udWxsLHQpfSxfbGlzdE9wdGlvbnM6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcyxuPWkub3B0aW9ucyxhPW4udmlydHVhbCxzPXtjaGFuZ2U6TihpLl9saXN0Q2hhbmdlLGkpfSxyPU4oaS5fbGlzdEJvdW5kLGkpO3JldHVybiBhPSJvYmplY3QiPT10eXBlb2YgYT9hOnt9LHQ9ZS5leHRlbmQoe2F1dG9CaW5kOiExLHNlbGVjdGFibGU6ITAsZGF0YVNvdXJjZTppLmRhdGFTb3VyY2UsY2xpY2s6TihpLl9jbGljayxpKSxhY3RpdmF0ZTpOKGkuX2FjdGl2YXRlSXRlbSxpKSxjb2x1bW5zOm4uY29sdW1ucyxkZWFjdGl2YXRlOk4oaS5fZGVhY3RpdmF0ZUl0ZW0saSksZGF0YUJpbmRpbmc6ZnVuY3Rpb24oKXtpLnRyaWdnZXIoImRhdGFCaW5kaW5nIil9LGRhdGFCb3VuZDpyLGhlaWdodDpuLmhlaWdodCxkYXRhVmFsdWVGaWVsZDpuLmRhdGFWYWx1ZUZpZWxkLGRhdGFUZXh0RmllbGQ6bi5kYXRhVGV4dEZpZWxkLGdyb3VwVGVtcGxhdGU6bi5ncm91cFRlbXBsYXRlLGZpeGVkR3JvdXBUZW1wbGF0ZTpuLmZpeGVkR3JvdXBUZW1wbGF0ZSx0ZW1wbGF0ZTpuLnRlbXBsYXRlfSx0LGEscyksdC50ZW1wbGF0ZXx8KHQudGVtcGxhdGU9IiM6IitjLmV4cHIodC5kYXRhVGV4dEZpZWxkLCJkYXRhIikrIiMiKSxuLiRhbmd1bGFyJiYodC4kYW5ndWxhcj1uLiRhbmd1bGFyKSx0fSxfaW5pdExpc3Q6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS5fbGlzdE9wdGlvbnMoe3NlbGVjdGVkSXRlbUNoYW5nZTpOKGUuX2xpc3RDaGFuZ2UsZSl9KTtlLmxpc3RWaWV3PWUub3B0aW9ucy52aXJ0dWFsP25ldyBjLnVpLlZpcnR1YWxMaXN0KGUudWwsdCk6bmV3IGMudWkuU3RhdGljTGlzdChlLnVsLHQpLGUubGlzdFZpZXcuYmluZCgibGlzdEJvdW5kIixOKGUuX2xpc3RCb3VuZCxlKSksZS5fc2V0TGlzdFZhbHVlKCl9LF9zZXRMaXN0VmFsdWU6ZnVuY3Rpb24oZSl7ZT1lfHx0aGlzLm9wdGlvbnMudmFsdWUsZSE9PXQmJnRoaXMubGlzdFZpZXcudmFsdWUoZSkuZG9uZShOKHRoaXMuX3VwZGF0ZVNlbGVjdGlvblN0YXRlLHRoaXMpKX0sX3VwZGF0ZVNlbGVjdGlvblN0YXRlOmUubm9vcCxfbGlzdE1vdXNlZG93bjpmdW5jdGlvbihlKXt0aGlzLmZpbHRlcklucHV0JiZ0aGlzLmZpbHRlcklucHV0WzBdPT09ZS50YXJnZXR8fGUucHJldmVudERlZmF1bHQoKX0sX2lzRmlsdGVyRW5hYmxlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9ucy5maWx0ZXI7cmV0dXJuIGUmJiJub25lIiE9PWV9LF9oaWRlQ2xlYXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2UuX2NsZWFyJiZlLl9jbGVhci5hZGRDbGFzcyh6KX0sX3Nob3dDbGVhcjpmdW5jdGlvbigpe3RoaXMuX2NsZWFyJiZ0aGlzLl9jbGVhci5yZW1vdmVDbGFzcyh6KX0sX2NsZWFyVmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9jbGVhclRleHQoKSx0aGlzLl9hY2Nlc3NvcigiIiksdGhpcy5saXN0Vmlldy52YWx1ZShbXSksdGhpcy5faXNTZWxlY3QmJih0aGlzLl9jdXN0b21PcHRpb249dCksdGhpcy5faXNGaWx0ZXJFbmFibGVkKCkmJiF0aGlzLm9wdGlvbnMuZW5mb3JjZU1pbkxlbmd0aCYmKHRoaXMuX2ZpbHRlcih7d29yZDoiIixvcGVuOiExfSksdGhpcy5vcHRpb25zLmhpZ2hsaWdodEZpcnN0JiZ0aGlzLmxpc3RWaWV3LmZvY3VzKDApKSx0aGlzLl9jaGFuZ2UoKX0sX2NsZWFyVGV4dDpmdW5jdGlvbigpe3RoaXMudGV4dCgiIil9LF9jbGVhckZpbHRlcjpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy52aXJ0dWFsfHx0aGlzLmxpc3RWaWV3LmJvdW5kKCExKSx0aGlzLl9maWx0ZXJTb3VyY2UoKX0sX2ZpbHRlclNvdXJjZTpmdW5jdGlvbihlLHQpe3ZhciBpLG4sYT10aGlzLHM9YS5vcHRpb25zLG89cy5maWx0ZXJGaWVsZHMmJmUmJmUubG9naWMmJmUuZmlsdGVycyYmZS5maWx0ZXJzLmxlbmd0aCx1PWEuZGF0YVNvdXJjZSxjPXEoe30sdS5maWx0ZXIoKXx8e30pLGQ9ZXx8Yy5maWx0ZXJzJiZjLmZpbHRlcnMubGVuZ3RoJiYhZSxoPWwoYyxzLmRhdGFUZXh0RmllbGQpO2lmKHRoaXMuX2NsZWFyRmlsdGVyRXhwcmVzc2lvbnMoYyksIWUmJiFofHwhYS50cmlnZ2VyKCJmaWx0ZXJpbmciLHtmaWx0ZXI6ZX0pKXJldHVybiBpPXtmaWx0ZXJzOltdLGxvZ2ljOiJhbmQifSxvP2kuZmlsdGVycy5wdXNoKGUpOnRoaXMuX3B1c2hGaWx0ZXJFeHByZXNzaW9uKGksZSkscihjKSYmKGkubG9naWM9PT1jLmxvZ2ljP2kuZmlsdGVycz1pLmZpbHRlcnMuY29uY2F0KGMuZmlsdGVycyk6aS5maWx0ZXJzLnB1c2goYykpLGEuX2Nhc2NhZGluZyYmdGhpcy5saXN0Vmlldy5zZXREU0ZpbHRlcihpKSxuPXEoe30se3BhZ2U6ZD8xOnUucGFnZSgpLHBhZ2VTaXplOmQ/dS5vcHRpb25zLnBhZ2VTaXplOnUucGFnZVNpemUoKSxzb3J0OnUuc29ydCgpLGZpbHRlcjp1LmZpbHRlcigpLGdyb3VwOnUuZ3JvdXAoKSxhZ2dyZWdhdGU6dS5hZ2dyZWdhdGUoKX0se2ZpbHRlcjppfSksdVt0PyJyZWFkIjoicXVlcnkiXSh1Ll9tZXJnZVN0YXRlKG4pKX0sX3B1c2hGaWx0ZXJFeHByZXNzaW9uOmZ1bmN0aW9uKGUsdCl7cih0KSYmIiIhPT10LnZhbHVlJiZlLmZpbHRlcnMucHVzaCh0KX0sX2NsZWFyRmlsdGVyRXhwcmVzc2lvbnM6ZnVuY3Rpb24oZSl7dmFyIHQsaTtpZihlLmZpbHRlcnMpe2ZvcihpPTA7aTxlLmZpbHRlcnMubGVuZ3RoO2krKykiZnJvbUZpbHRlciJpbiBlLmZpbHRlcnNbaV0mJih0PWkpO2lzTmFOKHQpfHxlLmZpbHRlcnMuc3BsaWNlKHQsMSl9fSxfYW5ndWxhckVsZW1lbnQ6ZnVuY3Rpb24oZSx0KXtlJiZ0aGlzLmFuZ3VsYXIodCxmdW5jdGlvbigpe3JldHVybntlbGVtZW50czplfX0pfSxfcmVuZGVyTm9EYXRhOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUubm9EYXRhO3QmJih0aGlzLl9hbmd1bGFyRWxlbWVudCh0LCJjbGVhbnVwIiksdC5jaGlsZHJlbigiOmZpcnN0IikuaHRtbChlLm5vRGF0YVRlbXBsYXRlKHtpbnN0YW5jZTplfSkpLHRoaXMuX2FuZ3VsYXJFbGVtZW50KHQsImNvbXBpbGUiKSl9LF90b2dnbGVOb0RhdGE6ZnVuY3Rpb24odCl7ZSh0aGlzLm5vRGF0YSkudG9nZ2xlKHQpfSxfdG9nZ2xlSGVhZGVyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubGlzdFZpZXcuY29udGVudC5wcmV2KEYpO3QudG9nZ2xlKGUpfSxfcmVuZGVyRm9vdGVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuZm9vdGVyO3QmJih0aGlzLl9hbmd1bGFyRWxlbWVudCh0LCJjbGVhbnVwIiksdC5odG1sKGUuZm9vdGVyVGVtcGxhdGUoe2luc3RhbmNlOmV9KSksdGhpcy5fYW5ndWxhckVsZW1lbnQodCwiY29tcGlsZSIpKX0sX2FsbG93T3BlbmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMubm9EYXRhVGVtcGxhdGV8fHRoaXMuZGF0YVNvdXJjZS5mbGF0VmlldygpLmxlbmd0aH0sX2luaXRWYWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLm9wdGlvbnMudmFsdWU7bnVsbCE9PXQ/ZS5lbGVtZW50LnZhbCh0KToodD1lLl9hY2Nlc3NvcigpLGUub3B0aW9ucy52YWx1ZT10KSxlLl9vbGQ9dH0sX2lnbm9yZUNhc2U6ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMsaT10LmRhdGFTb3VyY2UucmVhZGVyLm1vZGVsO2kmJmkuZmllbGRzJiYoZT1pLmZpZWxkc1t0Lm9wdGlvbnMuZGF0YVRleHRGaWVsZF0sZSYmZS50eXBlJiYic3RyaW5nIiE9PWUudHlwZSYmKHQub3B0aW9ucy5pZ25vcmVDYXNlPSExKSl9LF9mb2N1czpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5saXN0Vmlldy5mb2N1cyhlKX0sX2ZpbHRlcjpmdW5jdGlvbihlKXt2YXIgdCxpLG49dGhpcyxhPW4ub3B0aW9ucyxzPWUud29yZCxyPWEuZmlsdGVyRmllbGRzLGw9YS5kYXRhVGV4dEZpZWxkO2lmKHImJnIubGVuZ3RoKWZvcih0PXtsb2dpYzoib3IiLGZpbHRlcnM6W10sZnJvbUZpbHRlcjohMH0saT0wO2k8ci5sZW5ndGg7aSsrKXRoaXMuX3B1c2hGaWx0ZXJFeHByZXNzaW9uKHQsbi5fYnVpbGRFeHByZXNzaW9uKHMscltpXSkpO2Vsc2UgdD1uLl9idWlsZEV4cHJlc3Npb24ocyxsKTtuLl9vcGVuPWUub3BlbixuLl9maWx0ZXJTb3VyY2UodCl9LF9idWlsZEV4cHJlc3Npb246ZnVuY3Rpb24oZSx0KXt2YXIgaT10aGlzLG49aS5vcHRpb25zLGE9bi5pZ25vcmVDYXNlLHM9aS5kYXRhU291cmNlLm9wdGlvbnMuYWNjZW50Rm9sZGluZ0ZpbHRlcmluZztyZXR1cm57dmFsdWU6YT9zP2UudG9Mb2NhbGVMb3dlckNhc2Uocyk6ZS50b0xvd2VyQ2FzZSgpOmUsZmllbGQ6dCxvcGVyYXRvcjpuLmZpbHRlcixpZ25vcmVDYXNlOmF9fSxfY2xlYXJCdXR0b246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGk9dC5vcHRpb25zLm1lc3NhZ2VzLmNsZWFyO3QuX2NsZWFyfHwodC5fY2xlYXI9ZSgnPHNwYW4gdW5zZWxlY3RhYmxlPSJvbiIgY2xhc3M9ImstaWNvbiBrLWNsZWFyLXZhbHVlIGstaS1jbG9zZSIgdGl0bGU9IicraSsnIj48L3NwYW4+JykuYXR0cih7cm9sZToiYnV0dG9uIix0YWJJbmRleDotMX0pKSx0Lm9wdGlvbnMuY2xlYXJCdXR0b258fHQuX2NsZWFyLnJlbW92ZSgpLHRoaXMuX2hpZGVDbGVhcigpfSxzZWFyY2g6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5vcHRpb25zO3Q9InN0cmluZyI9PXR5cGVvZiB0P3Q6dGhpcy5faW5wdXRWYWx1ZSgpLGNsZWFyVGltZW91dCh0aGlzLl90eXBpbmdUaW1lb3V0KSwoIWkuZW5mb3JjZU1pbkxlbmd0aCYmIXQubGVuZ3RofHx0Lmxlbmd0aD49aS5taW5MZW5ndGgpJiYodGhpcy5fc3RhdGU9ImZpbHRlciIsdGhpcy5saXN0VmlldyYmKHRoaXMubGlzdFZpZXcuX2VtcHR5U2VhcmNoPSFlLnRyaW0odCkubGVuZ3RoKSx0aGlzLl9pc0ZpbHRlckVuYWJsZWQoKT90aGlzLl9maWx0ZXIoe3dvcmQ6dCxvcGVuOiEwfSk6dGhpcy5fc2VhcmNoQnlXb3JkKHQpKX0sY3VycmVudDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fZm9jdXMoZSl9LGl0ZW1zOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudWxbMF0uY2hpbGRyZW59LGRlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS5ucztwLmZuLmRlc3Ryb3kuY2FsbChlKSxlLl91bmJpbmREYXRhU291cmNlKCksZS5saXN0Vmlldy5kZXN0cm95KCksZS5saXN0Lm9mZih0KSxlLnBvcHVwLmRlc3Ryb3koKSxlLl9mb3JtJiZlLl9mb3JtLm9mZigicmVzZXQiLGUuX3Jlc2V0SGFuZGxlcil9LGRhdGFJdGVtOmZ1bmN0aW9uKGkpe3ZhciBuPXRoaXM7aWYoaT09PXQpcmV0dXJuIG4ubGlzdFZpZXcuc2VsZWN0ZWREYXRhSXRlbXMoKVswXTtpZigibnVtYmVyIiE9dHlwZW9mIGkpe2lmKG4ub3B0aW9ucy52aXJ0dWFsKXJldHVybiBuLmRhdGFTb3VyY2UuZ2V0QnlVaWQoZShpKS5kYXRhKCJ1aWQiKSk7aT1lKG4uaXRlbXMoKSkuaW5kZXgoaSl9cmV0dXJuIG4uZGF0YVNvdXJjZS5mbGF0VmlldygpW2ldfSxfYWN0aXZhdGVJdGVtOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5saXN0Vmlldy5mb2N1cygpO2UmJnRoaXMuX2ZvY3VzZWQuYWRkKHRoaXMuZmlsdGVySW5wdXQpLmF0dHIoImFyaWEtYWN0aXZlZGVzY2VuZGFudCIsZS5hdHRyKCJpZCIpKX0sX2RlYWN0aXZhdGVJdGVtOmZ1bmN0aW9uKCl7dGhpcy5fZm9jdXNlZC5hZGQodGhpcy5maWx0ZXJJbnB1dCkucmVtb3ZlQXR0cigiYXJpYS1hY3RpdmVkZXNjZW5kYW50Iil9LF9hY2Nlc3NvcnM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS5lbGVtZW50LGk9ZS5vcHRpb25zLG49Yy5nZXR0ZXIsYT10LmF0dHIoYy5hdHRyKCJ0ZXh0LWZpZWxkIikpLHM9dC5hdHRyKGMuYXR0cigidmFsdWUtZmllbGQiKSk7IWkuZGF0YVRleHRGaWVsZCYmYSYmKGkuZGF0YVRleHRGaWVsZD1hKSwhaS5kYXRhVmFsdWVGaWVsZCYmcyYmKGkuZGF0YVZhbHVlRmllbGQ9cyksZS5fdGV4dD1uKGkuZGF0YVRleHRGaWVsZCksZS5fdmFsdWU9bihpLmRhdGFWYWx1ZUZpZWxkKX0sX2FyaWE6ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcyxuPWkub3B0aW9ucyxhPWkuX2ZvY3VzZWQuYWRkKGkuZmlsdGVySW5wdXQpO24uc3VnZ2VzdCE9PXQmJmEuYXR0cigiYXJpYS1hdXRvY29tcGxldGUiLG4uc3VnZ2VzdD8iYm90aCI6Imxpc3QiKSxlPWU/ZSsiICIraS51bFswXS5pZDppLnVsWzBdLmlkLGEuYXR0cigiYXJpYS1vd25zIixlKSxpLnVsLmF0dHIoImFyaWEtbGl2ZSIsaS5faXNGaWx0ZXJFbmFibGVkKCk/InBvbGl0ZSI6Im9mZiIpLGkuX2FyaWFMYWJlbCgpfSxfYXJpYUxhYmVsOmZ1bmN0aW9uKCl7dmFyIHQsaT10aGlzLG49aS5fZm9jdXNlZCxhPWkuZWxlbWVudCxzPWEuYXR0cigiaWQiKSxyPWUoJ2xhYmVsW2Zvcj0iJytzKyciXScpLGw9YS5hdHRyKCJhcmlhLWxhYmVsIiksbz1hLmF0dHIoImFyaWEtbGFiZWxsZWRieSIpO24hPT1hJiYobD9uLmF0dHIoImFyaWEtbGFiZWwiLGwpOm8/bi5hdHRyKCJhcmlhLWxhYmVsbGVkYnkiLG8pOnIubGVuZ3RoJiYodD1yLmF0dHIoImlkIil8fGkuX2dlbmVyYXRlTGFiZWxJZChyLHN8fGMuZ3VpZCgpKSxuLmF0dHIoImFyaWEtbGFiZWxsZWRieSIsdCkpKX0sX2dlbmVyYXRlTGFiZWxJZDpmdW5jdGlvbihlLHQpe3ZhciBpPXQrVjtyZXR1cm4gZS5hdHRyKCJpZCIsaSksaX0sX2JsdXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2UuX2NoYW5nZSgpLGUuY2xvc2UoKSxlLl91c2VyVHJpZ2dlcmVkPSExfSxfY2hhbmdlOmZ1bmN0aW9uKCl7dmFyIGUsbj10aGlzLGE9bi5zZWxlY3RlZEluZGV4LHM9bi5vcHRpb25zLnZhbHVlLHI9bi52YWx1ZSgpO24uX2lzU2VsZWN0JiYhbi5saXN0Vmlldy5ib3VuZCgpJiZzJiYocj1zKSxyIT09aShuLl9vbGQsdHlwZW9mIHIpJiZyIT09aShuLl9vbGRUZXh0LHR5cGVvZiByKT9lPSEwOm4uX3ZhbHVlQmVmb3JlQ2FzY2FkZSE9PXQmJm4uX3ZhbHVlQmVmb3JlQ2FzY2FkZSE9PWkobi5fb2xkLHR5cGVvZiBuLl92YWx1ZUJlZm9yZUNhc2NhZGUpJiZuLl91c2VyVHJpZ2dlcmVkP2U9ITA6YT09PXR8fGE9PT1uLl9vbGRJbmRleHx8bi5saXN0Vmlldy5pc0ZpbHRlcmVkKCl8fChlPSEwKSxlJiYobi5fdmFsdWVCZWZvcmVDYXNjYWRlPW4uX29sZD1udWxsPT09bi5fb2xkfHwiIj09PW4uX29sZHx8IiI9PT1yP3I6bi5kYXRhSXRlbSgpP24ub3B0aW9ucy5kYXRhVmFsdWVGaWVsZD9uLmRhdGFJdGVtKClbbi5vcHRpb25zLmRhdGFWYWx1ZUZpZWxkXTpuLmRhdGFJdGVtKCk6bnVsbCxuLl9vbGRJbmRleD1hLG4uX29sZFRleHQ9bi50ZXh0JiZuLnRleHQoKSxuLl90eXBpbmd8fG4uZWxlbWVudC50cmlnZ2VyKHcpLG4udHJpZ2dlcih3KSksbi50eXBpbmc9ITF9LF9kYXRhOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YVNvdXJjZS52aWV3KCl9LF9lbmFibGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLGk9ZS5vcHRpb25zLG49ZS5lbGVtZW50LmlzKCJbZGlzYWJsZWRdIik7aS5lbmFibGUhPT10JiYoaS5lbmFibGVkPWkuZW5hYmxlKSwhaS5lbmFibGVkfHxuP2UuZW5hYmxlKCExKTplLnJlYWRvbmx5KGUuZWxlbWVudC5pcygiW3JlYWRvbmx5XSIpKX0sX2RhdGFWYWx1ZTpmdW5jdGlvbihlKXt2YXIgaT10aGlzLl92YWx1ZShlKTtyZXR1cm4gaT09PXQmJihpPXRoaXMuX3RleHQoZSkpLGl9LF9vZmZzZXRIZWlnaHQ6ZnVuY3Rpb24oKXt2YXIgdD0wLGk9dGhpcy5saXN0Vmlldy5jb250ZW50LnByZXZBbGwoIjp2aXNpYmxlIik7cmV0dXJuIGkuZWFjaChmdW5jdGlvbigpe3ZhciBpPWUodGhpcyk7dCs9aChpLCEwKX0pLHR9LF9oZWlnaHQ6ZnVuY3Rpb24oaSl7dmFyIG4sYSxzLHI9dGhpcyxsPXIubGlzdCxvPXIub3B0aW9ucy5oZWlnaHQsdT1yLnBvcHVwLnZpc2libGUoKTtpZihpfHxyLm9wdGlvbnMubm9EYXRhVGVtcGxhdGUpe2lmKGE9bC5hZGQobC5wYXJlbnQoIi5rLWFuaW1hdGlvbi1jb250YWluZXIiKSkuc2hvdygpLCFsLmlzKCI6dmlzaWJsZSIpKXJldHVybiBhLmhpZGUoKSx0O289ci5saXN0Vmlldy5jb250ZW50WzBdLnNjcm9sbEhlaWdodD5vP286ImF1dG8iLGEuaGVpZ2h0KG8pLCJhdXRvIiE9PW8mJihuPXIuX29mZnNldEhlaWdodCgpLHM9aChlKHIuZm9vdGVyKSl8fDAsbz1vLW4tcyksci5saXN0Vmlldy5jb250ZW50LmhlaWdodChvKSx1fHxhLmhpZGUoKX1yZXR1cm4gb30sX29wZW5IYW5kbGVyOmZ1bmN0aW9uKGUpe3RoaXMuX2FkanVzdExpc3RXaWR0aCgpLHRoaXMudHJpZ2dlcihDKT9lLnByZXZlbnREZWZhdWx0KCk6KHRoaXMuX2ZvY3VzZWQuYXR0cigiYXJpYS1leHBhbmRlZCIsITApLHRoaXMudWwuYXR0cigiYXJpYS1oaWRkZW4iLCExKSl9LF9hZGp1c3RMaXN0V2lkdGg6ZnVuY3Rpb24oKXt2YXIgZSx0LGk9dGhpcyxuPWkubGlzdCxhPW5bMF0uc3R5bGUud2lkdGgscz1pLndyYXBwZXI7aWYobi5kYXRhKFIpfHwhYSlyZXR1cm4gZT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZT93aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShzWzBdLG51bGwpOjAsdD1wYXJzZUZsb2F0KGUmJmUud2lkdGgpfHxiKHMpLGUmJk0ubXNpZSYmKHQrPXBhcnNlRmxvYXQoZS5wYWRkaW5nTGVmdCkrcGFyc2VGbG9hdChlLnBhZGRpbmdSaWdodCkrcGFyc2VGbG9hdChlLmJvcmRlckxlZnRXaWR0aCkrcGFyc2VGbG9hdChlLmJvcmRlclJpZ2h0V2lkdGgpKSxhPSJib3JkZXItYm94IiE9PW4uY3NzKCJib3gtc2l6aW5nIik/dC0oYihuKS1uLndpZHRoKCkpOnQsbi5jc3Moe2ZvbnRGYW1pbHk6cy5jc3MoImZvbnQtZmFtaWx5Iiksd2lkdGg6aS5vcHRpb25zLmF1dG9XaWR0aD8iYXV0byI6YSxtaW5XaWR0aDphLHdoaXRlU3BhY2U6aS5vcHRpb25zLmF1dG9XaWR0aD8ibm93cmFwIjoibm9ybWFsIn0pLmRhdGEoUixhKSwhMH0sX2Nsb3NlSGFuZGxlcjpmdW5jdGlvbihlKXt0aGlzLnRyaWdnZXIoRCk/ZS5wcmV2ZW50RGVmYXVsdCgpOih0aGlzLl9mb2N1c2VkLmF0dHIoImFyaWEtZXhwYW5kZWQiLCExKSx0aGlzLnVsLmF0dHIoImFyaWEtaGlkZGVuIiwhMCkpfSxfZm9jdXNJdGVtOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5saXN0VmlldyxpPSFlLmZvY3VzKCksYT1uKGUuc2VsZWN0KCkpO2E9PT10JiZ0aGlzLm9wdGlvbnMuaGlnaGxpZ2h0Rmlyc3QmJmkmJihhPTApLGEhPT10P2UuZm9jdXMoYSk6aSYmZS5zY3JvbGxUb0luZGV4KDApfSxfY2FsY3VsYXRlR3JvdXBQYWRkaW5nOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMudWwuY2hpbGRyZW4oIi5rLWZpcnN0OmZpcnN0IiksaT10aGlzLmxpc3RWaWV3LmNvbnRlbnQucHJldihGKSxuPTAsYT0icmlnaHQiO2lbMF0mJiJub25lIiE9PWlbMF0uc3R5bGUuZGlzcGxheSYmKCJhdXRvIiE9PWUmJihuPWMuc3VwcG9ydC5zY3JvbGxiYXIoKSksdGhpcy5lbGVtZW50LnBhcmVudHMoIi5rLXJ0bCIpLmxlbmd0aCYmKGE9ImxlZnQiKSxuKz1wYXJzZUZsb2F0KHQuY3NzKCJib3JkZXItIithKyItd2lkdGgiKSwxMCkrcGFyc2VGbG9hdCh0LmNoaWxkcmVuKCIuay1ncm91cCIpLmNzcygicGFkZGluZy0iK2EpLDEwKSxpLmNzcygicGFkZGluZy0iK2EsbikpfSxfY2FsY3VsYXRlUG9wdXBIZWlnaHQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5faGVpZ2h0KHRoaXMuZGF0YVNvdXJjZS5mbGF0VmlldygpLmxlbmd0aHx8ZSk7dGhpcy5fY2FsY3VsYXRlR3JvdXBQYWRkaW5nKHQpLHRoaXMuX2NhbGN1bGF0ZUNvbHVtbnNIZWFkZXJQYWRkaW5nKHQpfSxfY2FsY3VsYXRlQ29sdW1uc0hlYWRlclBhZGRpbmc6ZnVuY3Rpb24oZSl7dmFyIHQsaSxuO3RoaXMub3B0aW9ucy5jb2x1bW5zJiZ0aGlzLm9wdGlvbnMuY29sdW1ucy5sZW5ndGgmJih0PXRoaXMsaT1nLmlzUnRsKHQud3JhcHBlciksbj1jLnN1cHBvcnQuc2Nyb2xsYmFyKCksdC5jb2x1bW5zSGVhZGVyLmNzcyhpPyJwYWRkaW5nLWxlZnQiOiJwYWRkaW5nLXJpZ2h0IiwiYXV0byIhPT1lP246MCkpfSxfcmVmcmVzaFNjcm9sbDpmdW5jdGlvbigpe3ZhciBlPXRoaXMubGlzdFZpZXcsdD1lLmVsZW1lbnQuaGVpZ2h0KCk+ZS5jb250ZW50LmhlaWdodCgpO3RoaXMub3B0aW9ucy5hdXRvV2lkdGgmJmUuY29udGVudC5jc3Moe292ZXJmbG93WDoiaGlkZGVuIixvdmVyZmxvd1k6dD8ic2Nyb2xsIjoiYXV0byJ9KX0sX3Jlc2l6ZVBvcHVwOmZ1bmN0aW9uKGUpe3RoaXMub3B0aW9ucy52aXJ0dWFsfHwodGhpcy5wb3B1cC5lbGVtZW50LmlzKCI6dmlzaWJsZSIpP3RoaXMuX2NhbGN1bGF0ZVBvcHVwSGVpZ2h0KGUpOih0aGlzLnBvcHVwLm9uZSgib3BlbiIsZnVuY3Rpb24oZSl7cmV0dXJuIE4oZnVuY3Rpb24oKXt0aGlzLl9jYWxjdWxhdGVQb3B1cEhlaWdodChlKX0sdGhpcyl9LmNhbGwodGhpcyxlKSksdGhpcy5wb3B1cC5vbmUoImFjdGl2YXRlIixOKHRoaXMuX3JlZnJlc2hTY3JvbGwsdGhpcykpKSl9LF9wb3B1cDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7ZS5wb3B1cD1uZXcgZC5Qb3B1cChlLmxpc3QscSh7fSxlLm9wdGlvbnMucG9wdXAse2FuY2hvcjplLndyYXBwZXIsb3BlbjpOKGUuX29wZW5IYW5kbGVyLGUpLGNsb3NlOk4oZS5fY2xvc2VIYW5kbGVyLGUpLGFuaW1hdGlvbjplLm9wdGlvbnMuYW5pbWF0aW9uLGlzUnRsOmcuaXNSdGwoZS53cmFwcGVyKSxhdXRvc2l6ZTplLm9wdGlvbnMuYXV0b1dpZHRofSkpfSxfbWFrZVVuc2VsZWN0YWJsZTpmdW5jdGlvbigpe2omJnRoaXMubGlzdC5maW5kKCIqIikubm90KCIuay10ZXh0Ym94IikuYXR0cigidW5zZWxlY3RhYmxlIiwib24iKX0sX3RvZ2dsZUhvdmVyOmZ1bmN0aW9uKHQpe2UodC5jdXJyZW50VGFyZ2V0KS50b2dnbGVDbGFzcyh5LCJtb3VzZWVudGVyIj09PXQudHlwZSl9LF90b2dnbGU6ZnVuY3Rpb24oZSxpKXt2YXIgbj10aGlzLGE9Zy5tb2JpbGVPUyYmKGcudG91Y2h8fGcuTVNQb2ludGVyc3x8Zy5wb2ludGVycyk7ZT1lIT09dD9lOiFuLnBvcHVwLnZpc2libGUoKSxpfHxhfHxuLl9mb2N1c2VkWzBdPT09digpfHwobi5fcHJldmVudD0hMCxuLl9mb2N1c2VkLmZvY3VzKCksbi5fcHJldmVudD0hMSksbltlP0M6RF0oKX0sX3RyaWdnZXJDYXNjYWRlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztlLl9jYXNjYWRlVHJpZ2dlcmVkJiZlLnZhbHVlKCk9PT1pKGUuX2Nhc2NhZGVkVmFsdWUsdHlwZW9mIGUudmFsdWUoKSl8fChlLl9jYXNjYWRlZFZhbHVlPWUudmFsdWUoKSxlLl9jYXNjYWRlVHJpZ2dlcmVkPSEwLGUudHJpZ2dlcihILHt1c2VyVHJpZ2dlcmVkOmUuX3VzZXJUcmlnZ2VyZWR9KSl9LF90cmlnZ2VyQ2hhbmdlOmZ1bmN0aW9uKCl7dGhpcy5fdmFsdWVCZWZvcmVDYXNjYWRlIT09dGhpcy52YWx1ZSgpJiZ0aGlzLnRyaWdnZXIodyl9LF91bmJpbmREYXRhU291cmNlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztlLmRhdGFTb3VyY2UudW5iaW5kKEwsZS5fcmVxdWVzdFN0YXJ0SGFuZGxlcikudW5iaW5kKFAsZS5fcmVxdWVzdEVuZEhhbmRsZXIpLnVuYmluZCgiZXJyb3IiLGUuX2Vycm9ySGFuZGxlcil9LHJlcXVpcmVWYWx1ZU1hcHBlcjpmdW5jdGlvbihlLHQpe3ZhciBpPShlLnZhbHVlIGluc3RhbmNlb2YgQXJyYXk/ZS52YWx1ZS5sZW5ndGg6ZS52YWx1ZSl8fCh0IGluc3RhbmNlb2YgQXJyYXk/dC5sZW5ndGg6dCk7aWYoaSYmZS52aXJ0dWFsJiYiZnVuY3Rpb24iIT10eXBlb2YgZS52aXJ0dWFsLnZhbHVlTWFwcGVyKXRocm93IEVycm9yKCJWYWx1ZU1hcHBlciBpcyBub3QgcHJvdmlkZWQgd2hpbGUgdGhlIHZhbHVlIGlzIGJlaW5nIHNldC4gU2VlIGh0dHA6Ly9kb2NzLnRlbGVyaWsuY29tL2tlbmRvLXVpL2NvbnRyb2xzL2VkaXRvcnMvY29tYm9ib3gvdmlydHVhbGl6YXRpb24jdGhlLXZhbHVlbWFwcGVyLWZ1bmN0aW9uIil9fSk7cShZLHtpbkFycmF5OmZ1bmN0aW9uKGUsdCl7dmFyIGksbixhPXQuY2hpbGRyZW47aWYoIWV8fGUucGFyZW50Tm9kZSE9PXQpcmV0dXJuLTE7Zm9yKGk9MCxuPWEubGVuZ3RoO2k8bjtpKyspaWYoZT09PWFbaV0pcmV0dXJuIGk7cmV0dXJuLTF9LHVuaWZ5VHlwZTppfSksYy51aS5MaXN0PVksZC5TZWxlY3Q9WS5leHRlbmQoe2luaXQ6ZnVuY3Rpb24oZSx0KXtZLmZuLmluaXQuY2FsbCh0aGlzLGUsdCksdGhpcy5faW5pdGlhbD10aGlzLmVsZW1lbnQudmFsKCl9LHNldERhdGFTb3VyY2U6ZnVuY3Rpb24oZSl7dmFyIHQsaT10aGlzO2kub3B0aW9ucy5kYXRhU291cmNlPWUsaS5fZGF0YVNvdXJjZSgpLGkubGlzdFZpZXcuYm91bmQoKSYmKGkuX2luaXRpYWxJbmRleD1udWxsLGkubGlzdFZpZXcuX2N1cnJlbnQ9bnVsbCksaS5saXN0Vmlldy5zZXREYXRhU291cmNlKGkuZGF0YVNvdXJjZSksaS5vcHRpb25zLmF1dG9CaW5kJiZpLmRhdGFTb3VyY2UuZmV0Y2goKSx0PWkuX3BhcmVudFdpZGdldCgpLHQmJmkuX2Nhc2NhZGVTZWxlY3QodCl9LGNsb3NlOmZ1bmN0aW9uKCl7dGhpcy5wb3B1cC5jbG9zZSgpfSxzZWxlY3Q6ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcztyZXR1cm4gZT09PXQ/aS5zZWxlY3RlZEluZGV4OmkuX3NlbGVjdChlKS5kb25lKGZ1bmN0aW9uKCl7aS5fY2FzY2FkZVZhbHVlPWkuX29sZD1pLl9hY2Nlc3NvcigpLGkuX29sZEluZGV4PWkuc2VsZWN0ZWRJbmRleH0pfSxfYWNjZXNzb3I6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpc1t0aGlzLl9pc1NlbGVjdD8iX2FjY2Vzc29yU2VsZWN0IjoiX2FjY2Vzc29ySW5wdXQiXShlLHQpfSxfYWNjZXNzb3JJbnB1dDpmdW5jdGlvbihlKXt2YXIgaT10aGlzLmVsZW1lbnRbMF07cmV0dXJuIGU9PT10P2kudmFsdWU6KG51bGw9PT1lJiYoZT0iIiksaS52YWx1ZT1lLHQpfSxfYWNjZXNzb3JTZWxlY3Q6ZnVuY3Rpb24oZSxpKXt2YXIgbixzPXRoaXMuZWxlbWVudFswXTtyZXR1cm4gZT09PXQ/YShzKS52YWx1ZXx8IiI6KGEocykuc2VsZWN0ZWQ9ITEsaT09PXQmJihpPS0xKSxuPW51bGwhPT1lJiYiIiE9PWUsbiYmaT09LTE/dGhpcy5fY3VzdG9tKGUpOmU/cy52YWx1ZT1lOnMuc2VsZWN0ZWRJbmRleD1pLHQpfSxfc3luY1ZhbHVlQW5kVGV4dDpmdW5jdGlvbigpe3JldHVybiEwfSxfY3VzdG9tOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMsbj1pLmVsZW1lbnQsYT1pLl9jdXN0b21PcHRpb247YXx8KGE9ZSgiPG9wdGlvbi8+IiksaS5fY3VzdG9tT3B0aW9uPWEsbi5hcHBlbmQoYSkpLGEudGV4dCh0KSxhWzBdLnNlbGVjdGVkPSEwfSxfaGlkZUJ1c3k6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2NsZWFyVGltZW91dChlLl9idXN5KSxlLl9hcnJvd0ljb24ucmVtb3ZlQ2xhc3MoVCksZS5fZm9jdXNlZC5hdHRyKCJhcmlhLWJ1c3kiLCExKSxlLl9idXN5PW51bGwsZS5fc2hvd0NsZWFyKCl9LF9zaG93QnVzeTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO2UuaXNEZWZhdWx0UHJldmVudGVkKCl8fCh0Ll9yZXF1ZXN0PSEwLHQuX2J1c3l8fCh0Ll9idXN5PXNldFRpbWVvdXQoZnVuY3Rpb24oKXt0Ll9hcnJvd0ljb24mJih0Ll9mb2N1c2VkLmF0dHIoImFyaWEtYnVzeSIsITApLHQuX2Fycm93SWNvbi5hZGRDbGFzcyhUKSx0Ll9oaWRlQ2xlYXIoKSl9LDEwMCkpKX0sX3JlcXVlc3RFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9yZXF1ZXN0PSExLHRoaXMuX2hpZGVCdXN5KCl9LF9kYXRhU291cmNlOmZ1bmN0aW9uKCl7dmFyIHQsaT10aGlzLG49aS5lbGVtZW50LGE9aS5vcHRpb25zLHM9YS5kYXRhU291cmNlfHx7fTtzPWUuaXNBcnJheShzKT97ZGF0YTpzfTpzLGkuX2lzU2VsZWN0JiYodD1uWzBdLnNlbGVjdGVkSW5kZXgsdD4tMSYmKGEuaW5kZXg9dCkscy5zZWxlY3Q9bixzLmZpZWxkcz1be2ZpZWxkOmEuZGF0YVRleHRGaWVsZH0se2ZpZWxkOmEuZGF0YVZhbHVlRmllbGR9XSksaS5kYXRhU291cmNlP2kuX3VuYmluZERhdGFTb3VyY2UoKTooaS5fcmVxdWVzdFN0YXJ0SGFuZGxlcj1OKGkuX3Nob3dCdXN5LGkpLGkuX3JlcXVlc3RFbmRIYW5kbGVyPU4oaS5fcmVxdWVzdEVuZCxpKSxpLl9lcnJvckhhbmRsZXI9TihpLl9oaWRlQnVzeSxpKSksaS5kYXRhU291cmNlPWMuZGF0YS5EYXRhU291cmNlLmNyZWF0ZShzKS5iaW5kKEwsaS5fcmVxdWVzdFN0YXJ0SGFuZGxlcikuYmluZChQLGkuX3JlcXVlc3RFbmRIYW5kbGVyKS5iaW5kKCJlcnJvciIsaS5fZXJyb3JIYW5kbGVyKX0sX2ZpcnN0SXRlbTpmdW5jdGlvbigpe3RoaXMubGlzdFZpZXcuZm9jdXNGaXJzdCgpfSxfbGFzdEl0ZW06ZnVuY3Rpb24oKXt0aGlzLmxpc3RWaWV3LmZvY3VzTGFzdCgpfSxfbmV4dEl0ZW06ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5saXN0Vmlldy5mb2N1c05leHQoKX0sX3ByZXZJdGVtOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGlzdFZpZXcuZm9jdXNQcmV2KCl9LF9nZXROb3JtYWxpemVkRGF0YUl0ZW06ZnVuY3Rpb24oZSl7dmFyIHQsaT10aGlzLG49aS5saXN0VmlldyxhPSJudW1iZXIiPT10eXBlb2YgZSxzPWkub3B0aW9uTGFiZWwmJmkub3B0aW9uTGFiZWwubGVuZ3RoO3JldHVybiB0PWE/cz8tLWU6ZTpuLmdldEVsZW1lbnRJbmRleChlKSxuLmRhdGFJdGVtQnlJbmRleCh0KX0sX2dldE5vcm1hbGl6ZWRTZWxlY3RDYW5kaWRhdGU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxpPXQub3B0aW9uTGFiZWwmJnQub3B0aW9uTGFiZWwubGVuZ3RoLG49Im51bWJlciI9PXR5cGVvZiBlLGE9ZTtyZXR1cm4gaSYmbiYmYSsrLGF9LF9tb3ZlOmZ1bmN0aW9uKGUpe3ZhciB0LGksbixhLHMscixsLG8sdSxjPXRoaXMsZD1jLmxpc3RWaWV3LGg9ZS5rZXlDb2RlLGY9aD09PV8uRE9XTixwPWMub3B0aW9ucy52aXJ0dWFsO2lmKGg9PT1fLlVQfHxmKXtpZihlLmFsdEtleSljLnRvZ2dsZShmKTtlbHNle2lmKCFkLmJvdW5kKCkmJiFjLnVsWzBdLmZpcnN0Q2hpbGQpcmV0dXJuIGMuX2ZldGNofHwoYy5kYXRhU291cmNlLm9uZSh3LGZ1bmN0aW9uKCl7Yy5fZmV0Y2g9ITEsYy5fbW92ZShlKX0pLGMuX2ZldGNoPSEwLGMuX2ZpbHRlclNvdXJjZSgpKSxlLnByZXZlbnREZWZhdWx0KCksITA7bj1jLl9mb2N1cygpLGMuX2ZldGNofHxuJiYhbi5oYXNDbGFzcygiay1zdGF0ZS1zZWxlY3RlZCIpfHwoZj8oYT1jLl9uZXh0SXRlbSgpLChwJiZhPD0wfHwhYy5fZm9jdXMoKSYmIWEpJiZjLl9sYXN0SXRlbSgpKTooYT1jLl9wcmV2SXRlbSgpLChwJiZhPj1kLmRhdGFTb3VyY2UudG90YWwoKS0xfHwhYy5fZm9jdXMoKSYmIWEpJiZjLl9maXJzdEl0ZW0oKSkpLHM9Yy5fZ2V0Tm9ybWFsaXplZFNlbGVjdENhbmRpZGF0ZShjLl9nZXQoYy5fZm9jdXMoKSl8fGF8fDApLGMuX3NlbGVjdChzLCEwKS5kb25lKGZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oKXtjLnBvcHVwLnZpc2libGUoKXx8Yy5fYmx1cigpLGMuX2Nhc2NhZGVkVmFsdWU9bnVsbD09PWMuX2Nhc2NhZGVkVmFsdWU/Yy52YWx1ZSgpOmMuZGF0YUl0ZW0oKT9jLmRhdGFJdGVtKClbYy5vcHRpb25zLmRhdGFWYWx1ZUZpZWxkXXx8Yy5kYXRhSXRlbSgpOm51bGx9O2MudHJpZ2dlcihCLHtkYXRhSXRlbTpjLl9nZXROb3JtYWxpemVkRGF0YUl0ZW0ocyksaXRlbTpjLl9mb2N1cygpfSk/Yy5fc2VsZWN0KG4pLmRvbmUoZSk6ZSgpfSl9ZS5wcmV2ZW50RGVmYXVsdCgpLGk9ITB9ZWxzZSBpZihoPT09Xy5FTlRFUnx8aD09PV8uVEFCKXtpZihjLnBvcHVwLnZpc2libGUoKSYmZS5wcmV2ZW50RGVmYXVsdCgpLG49Yy5fZm9jdXMoKSx0PWMuZGF0YUl0ZW0oKSxjLnBvcHVwLnZpc2libGUoKXx8dCYmYy50ZXh0KCk9PT1jLl90ZXh0KHQpfHwobj1udWxsKSxyPWMuZmlsdGVySW5wdXQmJmMuZmlsdGVySW5wdXRbMF09PT12KCksbil7aWYodD1kLmRhdGFJdGVtQnlJbmRleChkLmdldEVsZW1lbnRJbmRleChuKSksbz0hMCx0JiYobz1jLl92YWx1ZSh0KSE9PVkudW5pZnlUeXBlKGMudmFsdWUoKSx0eXBlb2YgYy5fdmFsdWUodCkpKSxvJiZjLnRyaWdnZXIoQix7ZGF0YUl0ZW06dCxpdGVtOm59KSlyZXR1cm47bD1jLl9zZWxlY3Qobil9ZWxzZSBjLmlucHV0JiYoKGMuX3N5bmNWYWx1ZUFuZFRleHQoKXx8Yy5faXNTZWxlY3QpJiZjLl9hY2Nlc3NvcihjLmlucHV0LnZhbCgpKSxjLmxpc3RWaWV3LnZhbHVlKGMuaW5wdXQudmFsKCkpKTtjLl9mb2N1c0VsZW1lbnQmJmMuX2ZvY3VzRWxlbWVudChjLndyYXBwZXIpLHImJmg9PT1fLlRBQj9jLndyYXBwZXIuZm9jdXNvdXQoKTpsJiYiZnVuY3Rpb24iPT10eXBlb2YgbC5kb25lP2wuZG9uZShmdW5jdGlvbigpe2MuX2JsdXIoKX0pOmMuX2JsdXIoKSxjLmNsb3NlKCksaT0hMH1lbHNlIGg9PT1fLkVTQz8oYy5wb3B1cC52aXNpYmxlKCkmJmUucHJldmVudERlZmF1bHQoKSxjLmNsb3NlKCksaT0hMCk6IWMucG9wdXAudmlzaWJsZSgpfHxoIT09Xy5QQUdFRE9XTiYmaCE9PV8uUEFHRVVQfHwoZS5wcmV2ZW50RGVmYXVsdCgpLHU9aD09PV8uUEFHRURPV04/MTotMSxkLnNjcm9sbFdpdGgodSpkLnNjcmVlbkhlaWdodCgpKSxpPSEwKTtyZXR1cm4gaX0sX2ZldGNoRGF0YTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD0hIWUuZGF0YVNvdXJjZS52aWV3KCkubGVuZ3RoO2UuX3JlcXVlc3R8fGUub3B0aW9ucy5jYXNjYWRlRnJvbXx8ZS5saXN0Vmlldy5ib3VuZCgpfHxlLl9mZXRjaHx8dHx8KGUuX2ZldGNoPSEwLGUuZGF0YVNvdXJjZS5mZXRjaCgpLmRvbmUoZnVuY3Rpb24oKXtlLl9mZXRjaD0hMX0pKX0sX29wdGlvbnM6ZnVuY3Rpb24oZSxpLG4pe3ZhciBzLHIsbCxvLHU9dGhpcyxjPXUuZWxlbWVudCxkPWNbMF0saD1lLmxlbmd0aCxmPSIiLHA9MDtmb3IoaSYmKGY9aSk7cDxoO3ArKylzPSI8b3B0aW9uIixyPWVbcF0sbD11Ll90ZXh0KHIpLG89dS5fdmFsdWUociksbyE9PXQmJihvKz0iIixvLmluZGV4T2YoJyInKSE9PS0xJiYobz1vLnJlcGxhY2UoJCwiJnF1b3Q7IikpLHMrPScgdmFsdWU9IicrbysnIicpLHMrPSI+IixsIT09dCYmKHMrPW0obCkpLHMrPSI8L29wdGlvbj4iLGYrPXM7Yy5odG1sKGYpLG4hPT10JiYoZC52YWx1ZT1uLGQudmFsdWUmJiFuJiYoZC5zZWxlY3RlZEluZGV4PS0xKSksZC5zZWxlY3RlZEluZGV4IT09LTEmJihzPWEoZCkscyYmcy5zZXRBdHRyaWJ1dGUoRSxFKSl9LF9yZXNldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMsaT10LmVsZW1lbnQsbj1pLmF0dHIoImZvcm0iKSxhPW4/ZSgiIyIrbik6aS5jbG9zZXN0KCJmb3JtIik7YVswXSYmKHQuX3Jlc2V0SGFuZGxlcj1mdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0LnZhbHVlKHQuX2luaXRpYWwpfSl9LHQuX2Zvcm09YS5vbigicmVzZXQiLHQuX3Jlc2V0SGFuZGxlcikpfSxfcGFyZW50V2lkZ2V0OmZ1bmN0aW9uKCl7dmFyIHQsaSxuLGE9dGhpcy5vcHRpb25zLm5hbWU7aWYodGhpcy5vcHRpb25zLmNhc2NhZGVGcm9tKXtpZih0PWUoIiMiK3RoaXMub3B0aW9ucy5jYXNjYWRlRnJvbSksaT10LmRhdGEoImtlbmRvIithKSwhaSlmb3Iobj0wO248UVthXS5sZW5ndGgmJiEoaT10LmRhdGEoImtlbmRvIitRW2FdW25dKSk7bis9MSk7cmV0dXJuIGl9fSxfY2FzY2FkZTpmdW5jdGlvbigpe3ZhciBlLHQ9dGhpcyxpPXQub3B0aW9ucyxuPWkuY2FzY2FkZUZyb207aWYobil7aWYoZT10Ll9wYXJlbnRXaWRnZXQoKSwhZSlyZXR1cm47dC5fY2FzY2FkZUhhbmRsZXJQcm94eT1OKHQuX2Nhc2NhZGVIYW5kbGVyLHQpLHQuX2Nhc2NhZGVGaWx0ZXJSZXF1ZXN0cz1bXSxpLmF1dG9CaW5kPSExLGUuYmluZCgic2V0IixmdW5jdGlvbigpe3Qub25lKCJzZXQiLGZ1bmN0aW9uKGUpe3QuX3NlbGVjdGVkVmFsdWU9ZS52YWx1ZXx8dC5fYWNjZXNzb3IoKX0pfSksZS5maXJzdChILHQuX2Nhc2NhZGVIYW5kbGVyUHJveHkpLGUubGlzdFZpZXcuYm91bmQoKT8odC5fdG9nZ2xlQ2FzY2FkZU9uRm9jdXMoKSx0Ll9jYXNjYWRlU2VsZWN0KGUpKTooZS5vbmUoImRhdGFCb3VuZCIsZnVuY3Rpb24oKXt0Ll90b2dnbGVDYXNjYWRlT25Gb2N1cygpLGUucG9wdXAudmlzaWJsZSgpJiZlLl9mb2N1c2VkLmZvY3VzKCl9KSxlLnZhbHVlKCl8fHQuZW5hYmxlKCExKSl9fSxfdG9nZ2xlQ2FzY2FkZU9uRm9jdXM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS5fcGFyZW50V2lkZ2V0KCksaT1VJiZ0IGluc3RhbmNlb2YgZC5Ecm9wRG93bkxpc3Q/RzpBO3QuX2ZvY3VzZWQuYWRkKHQuZmlsdGVySW5wdXQpLmJpbmQoVyxmdW5jdGlvbigpe3QudW5iaW5kKEgsZS5fY2FzY2FkZUhhbmRsZXJQcm94eSksdC5maXJzdCh3LGUuX2Nhc2NhZGVIYW5kbGVyUHJveHkpfSksdC5fZm9jdXNlZC5hZGQodC5maWx0ZXJJbnB1dCkuYmluZChpLGZ1bmN0aW9uKCl7dC51bmJpbmQodyxlLl9jYXNjYWRlSGFuZGxlclByb3h5KSx0LmZpcnN0KEgsZS5fY2FzY2FkZUhhbmRsZXJQcm94eSl9KX0sX2Nhc2NhZGVIYW5kbGVyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3BhcmVudFdpZGdldCgpLGk9dGhpcy52YWx1ZSgpO3RoaXMuX3VzZXJUcmlnZ2VyZWQ9ZS51c2VyVHJpZ2dlcmVkfHx0Ll91c2VyVHJpZ2dlcmVkLHRoaXMubGlzdFZpZXcuYm91bmQoKSYmdGhpcy5fY2xlYXJTZWxlY3Rpb24odCwhMCksdGhpcy5fY2FzY2FkZVNlbGVjdCh0LGkpfSxfY2FzY2FkZUNoYW5nZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dC5fYWNjZXNzb3IoKXx8dC5fc2VsZWN0ZWRWYWx1ZTt0Ll9jYXNjYWRlRmlsdGVyUmVxdWVzdHMubGVuZ3RofHwodC5fc2VsZWN0ZWRWYWx1ZT1udWxsKSx0Ll91c2VyVHJpZ2dlcmVkP3QuX2NsZWFyU2VsZWN0aW9uKGUsITApOm4/KG4hPT1pKHQubGlzdFZpZXcudmFsdWUoKVswXSx0eXBlb2YgbikmJnQudmFsdWUobiksdC5kYXRhU291cmNlLnZpZXcoKVswXSYmdC5zZWxlY3RlZEluZGV4IT09LTF8fHQuX2NsZWFyU2VsZWN0aW9uKGUsITApKTp0LmRhdGFTb3VyY2UuZmxhdFZpZXcoKS5sZW5ndGgmJnQuc2VsZWN0KHQub3B0aW9ucy5pbmRleCksdC5lbmFibGUoKSx0Ll90cmlnZ2VyQ2FzY2FkZSgpLHQuX3RyaWdnZXJDaGFuZ2UoKSx0Ll91c2VyVHJpZ2dlcmVkPSExfSxfY2FzY2FkZVNlbGVjdDpmdW5jdGlvbihlLGkpe3ZhciBuLGEscz10aGlzLHI9ZS5kYXRhSXRlbSgpLG89cj9yW3Mub3B0aW9ucy5jYXNjYWRlRnJvbVBhcmVudEZpZWxkXXx8ZS5fdmFsdWUocik6bnVsbCx1PXMub3B0aW9ucy5jYXNjYWRlRnJvbUZpZWxkfHxlLm9wdGlvbnMuZGF0YVZhbHVlRmllbGQ7cy5fdmFsdWVCZWZvcmVDYXNjYWRlPWkhPT10P2k6cy52YWx1ZSgpLG98fDA9PT1vPyhuPXMuZGF0YVNvdXJjZS5maWx0ZXIoKXx8e30sbChuLHUpLGE9ZnVuY3Rpb24oKXt2YXIgdD1zLl9jYXNjYWRlRmlsdGVyUmVxdWVzdHMuc2hpZnQoKTt0JiZzLnVuYmluZCgiZGF0YUJvdW5kIix0KSx0PXMuX2Nhc2NhZGVGaWx0ZXJSZXF1ZXN0c1swXSx0JiZzLmZpcnN0KCJkYXRhQm91bmQiLHQpLHMuX2Nhc2NhZGVDaGFuZ2UoZSl9LHMuX2Nhc2NhZGVGaWx0ZXJSZXF1ZXN0cy5wdXNoKGEpLDE9PT1zLl9jYXNjYWRlRmlsdGVyUmVxdWVzdHMubGVuZ3RoJiZzLmZpcnN0KCJkYXRhQm91bmQiLGEpLHMuX2Nhc2NhZGluZz0hMCxzLl9maWx0ZXJTb3VyY2Uoe2ZpZWxkOnUsb3BlcmF0b3I6ImVxIix2YWx1ZTpvfSkscy5fY2FzY2FkaW5nPSExKToocy5lbmFibGUoITEpLHMuX2NsZWFyU2VsZWN0aW9uKGUpLHMuX3RyaWdnZXJDYXNjYWRlKCkscy5fdHJpZ2dlckNoYW5nZSgpLHMuX3VzZXJUcmlnZ2VyZWQ9ITEpfX0pLG89Ii5TdGF0aWNMaXN0Iix1PWMudWkuRGF0YUJvdW5kV2lkZ2V0LmV4dGVuZCh7aW5pdDpmdW5jdGlvbih0LGkpe3AuZm4uaW5pdC5jYWxsKHRoaXMsdCxpKSx0aGlzLmVsZW1lbnQuYXR0cigicm9sZSIsImxpc3Rib3giKS5vbigiY2xpY2siK28sImxpIixOKHRoaXMuX2NsaWNrLHRoaXMpKS5vbigibW91c2VlbnRlciIrbywibGkiLGZ1bmN0aW9uKCl7ZSh0aGlzKS5hZGRDbGFzcyh5KX0pLm9uKCJtb3VzZWxlYXZlIitvLCJsaSIsZnVuY3Rpb24oKXtlKHRoaXMpLnJlbW92ZUNsYXNzKHkpfSksZy50b3VjaCYmdGhpcy5fdG91Y2hIYW5kbGVycygpLCJtdWx0aXBsZSI9PT10aGlzLm9wdGlvbnMuc2VsZWN0YWJsZSYmdGhpcy5lbGVtZW50LmF0dHIoImFyaWEtbXVsdGlzZWxlY3RhYmxlIiwhMCksdGhpcy5jb250ZW50PXRoaXMuZWxlbWVudC53cmFwKCI8ZGl2IGNsYXNzPSdrLWxpc3Qtc2Nyb2xsZXInIHVuc2VsZWN0YWJsZT0nb24nPjwvZGl2PiIpLnBhcmVudCgpLHRoaXMuaGVhZGVyPXRoaXMuY29udGVudC5iZWZvcmUoJzxkaXYgY2xhc3M9ImstZ3JvdXAtaGVhZGVyIiBzdHlsZT0iZGlzcGxheTpub25lIj48L2Rpdj4nKS5wcmV2KCksdGhpcy5ib3VuZCghMSksdGhpcy5fb3B0aW9uSUQ9Yy5ndWlkKCksdGhpcy5fc2VsZWN0ZWRJbmRpY2VzPVtdLHRoaXMuX3ZpZXc9W10sdGhpcy5fZGF0YUl0ZW1zPVtdLHRoaXMuX3ZhbHVlcz1bXTt2YXIgbj10aGlzLm9wdGlvbnMudmFsdWU7biYmKHRoaXMuX3ZhbHVlcz1lLmlzQXJyYXkobik/bi5zbGljZSgwKTpbbl0pLHRoaXMuX2dldHRlcigpLHRoaXMuX3RlbXBsYXRlcygpLHRoaXMuc2V0RGF0YVNvdXJjZSh0aGlzLm9wdGlvbnMuZGF0YVNvdXJjZSksdGhpcy5fb25TY3JvbGw9TihmdW5jdGlvbigpe3ZhciBlPXRoaXM7Y2xlYXJUaW1lb3V0KGUuX3Njcm9sbElkKSxlLl9zY3JvbGxJZD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5fcmVuZGVySGVhZGVyKCl9LDUwKX0sdGhpcyl9LG9wdGlvbnM6e25hbWU6IlN0YXRpY0xpc3QiLGRhdGFWYWx1ZUZpZWxkOm51bGwsdmFsdWVQcmltaXRpdmU6ITEsc2VsZWN0YWJsZTohMCx0ZW1wbGF0ZTpudWxsLGdyb3VwVGVtcGxhdGU6bnVsbCxmaXhlZEdyb3VwVGVtcGxhdGU6bnVsbH0sZXZlbnRzOlsiY2xpY2siLHcsImFjdGl2YXRlIiwiZGVhY3RpdmF0ZSIsImRhdGFCaW5kaW5nIiwiZGF0YUJvdW5kIiwic2VsZWN0ZWRJdGVtQ2hhbmdlIl0sc2V0RGF0YVNvdXJjZTpmdW5jdGlvbih0KXt2YXIgaSxuPXRoaXMsYT10fHx7fTthPWUuaXNBcnJheShhKT97ZGF0YTphfTphLGE9Yy5kYXRhLkRhdGFTb3VyY2UuY3JlYXRlKGEpLG4uZGF0YVNvdXJjZT8obi5kYXRhU291cmNlLnVuYmluZCh3LG4uX3JlZnJlc2hIYW5kbGVyKSxpPW4udmFsdWUoKSxuLnZhbHVlKFtdKSxuLmJvdW5kKCExKSxuLnZhbHVlKGkpKTpuLl9yZWZyZXNoSGFuZGxlcj1OKG4ucmVmcmVzaCxuKSxuLnNldERTRmlsdGVyKGEuZmlsdGVyKCkpLG4uZGF0YVNvdXJjZT1hLmJpbmQodyxuLl9yZWZyZXNoSGFuZGxlciksbi5fZml4ZWRIZWFkZXIoKX0sX3RvdWNoSGFuZGxlcnM6ZnVuY3Rpb24oKXt2YXIgdCxpLG49dGhpcyxhPWZ1bmN0aW9uKGUpe3JldHVybihlLm9yaWdpbmFsRXZlbnR8fGUpLmNoYW5nZWRUb3VjaGVzWzBdLnBhZ2VZfTtuLmVsZW1lbnQub24oInRvdWNoc3RhcnQiK28sZnVuY3Rpb24oZSl7dD1hKGUpfSksbi5lbGVtZW50Lm9uKCJ0b3VjaGVuZCIrbyxmdW5jdGlvbihzKXtzLmlzRGVmYXVsdFByZXZlbnRlZCgpfHwoaT1hKHMpLE1hdGguYWJzKGktdCk8MTAmJihuLl90b3VjaFRyaWdnZXJlZD0hMCxuLl90cmlnZ2VyQ2xpY2soZShzLnRhcmdldCkuY2xvc2VzdChrKS5nZXQoMCkpKSl9KX0sc2tpcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGFTb3VyY2Uuc2tpcCgpfSxzZXRPcHRpb25zOmZ1bmN0aW9uKGUpe3AuZm4uc2V0T3B0aW9ucy5jYWxsKHRoaXMsZSksdGhpcy5fZ2V0dGVyKCksdGhpcy5fdGVtcGxhdGVzKCksdGhpcy5fcmVuZGVyKCl9LGRlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQub2ZmKG8pLHRoaXMuX3JlZnJlc2hIYW5kbGVyJiZ0aGlzLmRhdGFTb3VyY2UudW5iaW5kKHcsdGhpcy5fcmVmcmVzaEhhbmRsZXIpLGNsZWFyVGltZW91dCh0aGlzLl9zY3JvbGxJZCkscC5mbi5kZXN0cm95LmNhbGwodGhpcyl9LGRhdGFJdGVtQnlJbmRleDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5kYXRhU291cmNlLmZsYXRWaWV3KClbZV19LHNjcmVlbkhlaWdodDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRlbnRbMF0uY2xpZW50SGVpZ2h0fSxzY3JvbGxUb0luZGV4OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZWxlbWVudFswXS5jaGlsZHJlbltlXTt0JiZ0aGlzLnNjcm9sbCh0KX0sc2Nyb2xsV2l0aDpmdW5jdGlvbihlKXt0aGlzLmNvbnRlbnQuc2Nyb2xsVG9wKHRoaXMuY29udGVudC5zY3JvbGxUb3AoKStlKX0sc2Nyb2xsOmZ1bmN0aW9uKGUpe2lmKGUpe2VbMF0mJihlPWVbMF0pO3ZhciB0PXRoaXMuY29udGVudFswXSxpPWUub2Zmc2V0VG9wLG49ZS5vZmZzZXRIZWlnaHQsYT10LnNjcm9sbFRvcCxzPXQuY2xpZW50SGVpZ2h0LHI9aStuO2E+aT9hPWk6cj5hK3MmJihhPXItcyksdC5zY3JvbGxUb3A9YX19LHNlbGVjdGVkRGF0YUl0ZW1zOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09dD90aGlzLl9kYXRhSXRlbXMuc2xpY2UoKToodGhpcy5fZGF0YUl0ZW1zPWUsdGhpcy5fdmFsdWVzPXRoaXMuX2dldFZhbHVlcyhlKSx0KX0sX2dldFZhbHVlczpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl92YWx1ZUdldHRlcjtyZXR1cm4gZS5tYXAodCxmdW5jdGlvbihlKXtyZXR1cm4gaShlKX0pfSxmb2N1c05leHQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmZvY3VzKCk7ZT1lP2UubmV4dCgpOjAsdGhpcy5mb2N1cyhlKX0sZm9jdXNQcmV2OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5mb2N1cygpO2U9ZT9lLnByZXYoKTp0aGlzLmVsZW1lbnRbMF0uY2hpbGRyZW4ubGVuZ3RoLTEsdGhpcy5mb2N1cyhlKX0sZm9jdXNGaXJzdDpmdW5jdGlvbigpe3RoaXMuZm9jdXModGhpcy5lbGVtZW50WzBdLmNoaWxkcmVuWzBdKX0sZm9jdXNMYXN0OmZ1bmN0aW9uKCl7dGhpcy5mb2N1cyhuKHRoaXMuZWxlbWVudFswXS5jaGlsZHJlbikpfSxmb2N1czpmdW5jdGlvbihpKXt2YXIgYSxzPXRoaXMscj1zLl9vcHRpb25JRDtyZXR1cm4gaT09PXQ/cy5fY3VycmVudDooaT1uKHMuX2dldChpKSksaT1lKHRoaXMuZWxlbWVudFswXS5jaGlsZHJlbltpXSkscy5fY3VycmVudCYmKHMuX2N1cnJlbnQucmVtb3ZlQ2xhc3MoUykucmVtb3ZlQXR0cihJKSxzLnRyaWdnZXIoImRlYWN0aXZhdGUiKSksYT0hIWlbMF0sYSYmKGkuYWRkQ2xhc3MoUykscy5zY3JvbGwoaSksaS5hdHRyKCJpZCIscikpLHMuX2N1cnJlbnQ9YT9pOm51bGwscy50cmlnZ2VyKCJhY3RpdmF0ZSIpLHQpfSxmb2N1c0luZGV4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZm9jdXMoKT90aGlzLmZvY3VzKCkuaW5kZXgoKTp0fSxza2lwVXBkYXRlOmZ1bmN0aW9uKGUpe3RoaXMuX3NraXBVcGRhdGU9ZX0sc2VsZWN0OmZ1bmN0aW9uKGkpe3ZhciBhLHMscixsPXRoaXMsbz1sLm9wdGlvbnMuc2VsZWN0YWJsZSx1PSJtdWx0aXBsZSIhPT1vJiZvIT09ITEsYz1sLl9zZWxlY3RlZEluZGljZXMsZD1bdGhpcy5lbGVtZW50LmZpbmQoIi5rLXN0YXRlLXNlbGVjdGVkIikuaW5kZXgoKV0saD1bXSxmPVtdO3JldHVybiBpPT09dD9jLnNsaWNlKCk6KGk9bC5fZ2V0KGkpLDE9PT1pLmxlbmd0aCYmaVswXT09PS0xJiYoaT1bXSkscz1lLkRlZmVycmVkKCkucmVzb2x2ZSgpLHI9bC5pc0ZpbHRlcmVkKCksciYmIXUmJmwuX2Rlc2VsZWN0RmlsdGVyZWQoaSk/czp1JiYhciYmZS5pbkFycmF5KG4oaSksYykhPT0tMSYmZS5pbkFycmF5KG4oaSksZCkhPT0tMT8obC5fZGF0YUl0ZW1zLmxlbmd0aCYmbC5fdmlldy5sZW5ndGgmJihsLl9kYXRhSXRlbXM9W2wuX3ZpZXdbY1swXV0uaXRlbV0pLHMpOihhPWwuX2Rlc2VsZWN0KGkpLGY9YS5yZW1vdmVkLGk9YS5pbmRpY2VzLGkubGVuZ3RoJiYodSYmKGk9W24oaSldKSxoPWwuX3NlbGVjdChpKSksKGgubGVuZ3RofHxmLmxlbmd0aCkmJihsLl92YWx1ZUNvbXBhcmVyPW51bGwsbC50cmlnZ2VyKHcse2FkZGVkOmgscmVtb3ZlZDpmfSkpLHMpKX0scmVtb3ZlQXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3NlbGVjdGVkSW5kaWNlcy5zcGxpY2UoZSwxKSx0aGlzLl92YWx1ZXMuc3BsaWNlKGUsMSksdGhpcy5fdmFsdWVDb21wYXJlcj1udWxsLHtwb3NpdGlvbjplLGRhdGFJdGVtOnRoaXMuX2RhdGFJdGVtcy5zcGxpY2UoZSwxKVswXX19LHNldFZhbHVlOmZ1bmN0aW9uKHQpe3Q9ZS5pc0FycmF5KHQpfHx0IGluc3RhbmNlb2YgeD90LnNsaWNlKDApOlt0XSx0aGlzLl92YWx1ZXM9dCx0aGlzLl92YWx1ZUNvbXBhcmVyPW51bGx9LHZhbHVlOmZ1bmN0aW9uKGkpe3ZhciBuLGE9dGhpcyxzPWEuX3ZhbHVlRGVmZXJyZWQ7cmV0dXJuIGk9PT10P2EuX3ZhbHVlcy5zbGljZSgpOihhLnNldFZhbHVlKGkpLHMmJiJyZXNvbHZlZCIhPT1zLnN0YXRlKCl8fChhLl92YWx1ZURlZmVycmVkPXM9ZS5EZWZlcnJlZCgpKSxhLmJvdW5kKCkmJihuPWEuX3ZhbHVlSW5kaWNlcyhhLl92YWx1ZXMpLCJtdWx0aXBsZSI9PT1hLm9wdGlvbnMuc2VsZWN0YWJsZSYmYS5zZWxlY3QoLTEpLGEuc2VsZWN0KG4pLHMucmVzb2x2ZSgpKSxhLl9za2lwVXBkYXRlPSExLHMpfSxpdGVtczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsZW1lbnQuY2hpbGRyZW4oayl9LF9jbGljazpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fdG91Y2hUcmlnZ2VyZWQ/KHRoaXMuX3RvdWNoVHJpZ2dlcmVkPSExLHQpOihlLmlzRGVmYXVsdFByZXZlbnRlZCgpfHx0aGlzLl90cmlnZ2VyQ2xpY2soZS5jdXJyZW50VGFyZ2V0KSx0KX0sX3RyaWdnZXJDbGljazpmdW5jdGlvbih0KXt0aGlzLnRyaWdnZXIoImNsaWNrIix7aXRlbTplKHQpfSl8fHRoaXMuc2VsZWN0KHQpfSxfdmFsdWVFeHByOmZ1bmN0aW9uKGUsdCl7dmFyIG4sYSxzPXRoaXMscj0wLGw9W107aWYoIXMuX3ZhbHVlQ29tcGFyZXJ8fHMuX3ZhbHVlVHlwZSE9PWUpe2ZvcihzLl92YWx1ZVR5cGU9ZTtyPHQubGVuZ3RoO3IrKylsLnB1c2goaSh0W3JdLGUpKTtuPSJmb3IgKHZhciBpZHggPSAwOyBpZHggPCAiK2wubGVuZ3RoKyI7IGlkeCsrKSB7IGlmIChjdXJyZW50ID09PSB2YWx1ZXNbaWR4XSkgeyAgIHJldHVybiBpZHg7IH19IHJldHVybiAtMTsiLGE9RnVuY3Rpb24oImN1cnJlbnQiLCJ2YWx1ZXMiLG4pLHMuX3ZhbHVlQ29tcGFyZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGEoZSxsKX19cmV0dXJuIHMuX3ZhbHVlQ29tcGFyZXJ9LF9kYXRhSXRlbVBvc2l0aW9uOmZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcy5fdmFsdWVHZXR0ZXIoZSksbj10aGlzLl92YWx1ZUV4cHIodHlwZW9mIGksdCk7cmV0dXJuIG4oaSl9LF9nZXR0ZXI6ZnVuY3Rpb24oKXt0aGlzLl92YWx1ZUdldHRlcj1jLmdldHRlcih0aGlzLm9wdGlvbnMuZGF0YVZhbHVlRmllbGQpfSxfZGVzZWxlY3Q6ZnVuY3Rpb24odCl7dmFyIGksbixhLHM9dGhpcyxyPXMuZWxlbWVudFswXS5jaGlsZHJlbixsPXMub3B0aW9ucy5zZWxlY3RhYmxlLG89cy5fc2VsZWN0ZWRJbmRpY2VzLHU9cy5fZGF0YUl0ZW1zLGM9cy5fdmFsdWVzLGQ9W10saD0wLGY9MDtpZih0PXQuc2xpY2UoKSxsIT09ITAmJnQubGVuZ3RoKXtpZigibXVsdGlwbGUiPT09bClmb3IoO2g8dC5sZW5ndGg7aCsrKWlmKG49dFtoXSxlKHJbbl0pLmhhc0NsYXNzKCJrLXN0YXRlLXNlbGVjdGVkIikpZm9yKGk9MDtpPG8ubGVuZ3RoO2krKylpZihhPW9baV0sYT09PW4pe2UoclthXSkucmVtb3ZlQ2xhc3MoImstc3RhdGUtc2VsZWN0ZWQiKS5hdHRyKCJhcmlhLXNlbGVjdGVkIiwhMSksZC5wdXNoKHtwb3NpdGlvbjppK2YsZGF0YUl0ZW06dS5zcGxpY2UoaSwxKVswXX0pLG8uc3BsaWNlKGksMSksdC5zcGxpY2UoaCwxKSxjLnNwbGljZShpLDEpLGYrPTEsaC09MSxpLT0xO2JyZWFrfX1lbHNle2Zvcig7aDxvLmxlbmd0aDtoKyspZShyW29baF1dKS5yZW1vdmVDbGFzcygiay1zdGF0ZS1zZWxlY3RlZCIpLmF0dHIoImFyaWEtc2VsZWN0ZWQiLCExKSxkLnB1c2goe3Bvc2l0aW9uOmgsZGF0YUl0ZW06dVtoXX0pO3MuX3ZhbHVlcz1bXSxzLl9kYXRhSXRlbXM9W10scy5fc2VsZWN0ZWRJbmRpY2VzPVtdfXJldHVybntpbmRpY2VzOnQscmVtb3ZlZDpkfX0sX2Rlc2VsZWN0RmlsdGVyZWQ6ZnVuY3Rpb24odCl7Zm9yKHZhciBpLG4sYSxzPXRoaXMuZWxlbWVudFswXS5jaGlsZHJlbixyPVtdLGw9MDtsPHQubGVuZ3RoO2wrKyluPXRbbF0saT10aGlzLl92aWV3W25dLml0ZW0sYT10aGlzLl9kYXRhSXRlbVBvc2l0aW9uKGksdGhpcy5fdmFsdWVzKSxhPi0xJiYoci5wdXNoKHRoaXMucmVtb3ZlQXQoYSkpLGUoc1tuXSkucmVtb3ZlQ2xhc3MoImstc3RhdGUtc2VsZWN0ZWQiKSk7cmV0dXJuISFyLmxlbmd0aCYmKHRoaXMudHJpZ2dlcih3LHthZGRlZDpbXSxyZW1vdmVkOnJ9KSwhMCl9LF9zZWxlY3Q6ZnVuY3Rpb24odCl7dmFyIGksYSxzPXRoaXMscj1zLmVsZW1lbnRbMF0uY2hpbGRyZW4sbD1zLl92aWV3LG89W10sdT0wO2ZvcihuKHQpIT09LTEmJnMuZm9jdXModCk7dTx0Lmxlbmd0aDt1KyspYT10W3VdLGk9bFthXSxhIT09LTEmJmkmJihpPWkuaXRlbSxzLl9zZWxlY3RlZEluZGljZXMucHVzaChhKSxzLl9kYXRhSXRlbXMucHVzaChpKSxzLl92YWx1ZXMucHVzaChzLl92YWx1ZUdldHRlcihpKSksZShyW2FdKS5hZGRDbGFzcygiay1zdGF0ZS1zZWxlY3RlZCIpLmF0dHIoImFyaWEtc2VsZWN0ZWQiLCEwKSxvLnB1c2goe2RhdGFJdGVtOml9KSk7cmV0dXJuIG99LGdldEVsZW1lbnRJbmRleDpmdW5jdGlvbih0KXtyZXR1cm4gZSh0KS5kYXRhKCJvZmZzZXQtaW5kZXgiKX0sX2dldDpmdW5jdGlvbihlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGU/ZT1bZV06TyhlKXx8KGU9dGhpcy5nZXRFbGVtZW50SW5kZXgoZSksZT1bZSE9PXQ/ZTotMV0pLGV9LF90ZW1wbGF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLm9wdGlvbnMsaT10LnRlbXBsYXRlO3JldHVybiBpPyhpPWMudGVtcGxhdGUoaSksaT1mdW5jdGlvbihlKXtyZXR1cm4nPGxpIHRhYmluZGV4PSItMSIgcm9sZT0ib3B0aW9uIiB1bnNlbGVjdGFibGU9Im9uIiBjbGFzcz0iay1pdGVtIj4nK2koZSkrIjwvbGk+In0pOmk9Yy50ZW1wbGF0ZSgnPGxpIHRhYmluZGV4PSItMSIgcm9sZT0ib3B0aW9uIiB1bnNlbGVjdGFibGU9Im9uIiBjbGFzcz0iay1pdGVtIj4keycrYy5leHByKHQuZGF0YVRleHRGaWVsZCwiZGF0YSIpKyJ9PC9saT4iLHt1c2VXaXRoQmxvY2s6ITF9KSxpfSxfdGVtcGxhdGVzOmZ1bmN0aW9uKCl7dmFyIGUsdCxpLG4sYSxzPXRoaXMub3B0aW9ucyxyPXt0ZW1wbGF0ZTpzLnRlbXBsYXRlLGdyb3VwVGVtcGxhdGU6cy5ncm91cFRlbXBsYXRlLGZpeGVkR3JvdXBUZW1wbGF0ZTpzLmZpeGVkR3JvdXBUZW1wbGF0ZX07aWYocy5jb2x1bW5zKWZvcih0PTA7dDxzLmNvbHVtbnMubGVuZ3RoO3QrKylpPXMuY29sdW1uc1t0XSxuPWkuZmllbGQ/IiIraS5maWVsZDoidGV4dCIsclsiY29sdW1uIit0XT1pLnRlbXBsYXRlfHwiIzogIituKyIjIjtmb3IoYSBpbiByKWU9clthXSxlJiYiZnVuY3Rpb24iIT10eXBlb2YgZSYmKHJbYV09Yy50ZW1wbGF0ZShlKSk7dGhpcy50ZW1wbGF0ZXM9cn0sX25vcm1hbGl6ZUluZGljZXM6ZnVuY3Rpb24oZSl7Zm9yKHZhciBpPVtdLG49MDtuPGUubGVuZ3RoO24rKyllW25dIT09dCYmaS5wdXNoKGVbbl0pO3JldHVybiBpfSxfdmFsdWVJbmRpY2VzOmZ1bmN0aW9uKGUsdCl7dmFyIGksbj10aGlzLl92aWV3LGE9MDtpZih0PXQ/dC5zbGljZSgpOltdLCFlLmxlbmd0aClyZXR1cm5bXTtmb3IoO2E8bi5sZW5ndGg7YSsrKWk9dGhpcy5fZGF0YUl0ZW1Qb3NpdGlvbihuW2FdLml0ZW0sZSksaSE9PS0xJiYodFtpXT1hKTtyZXR1cm4gdGhpcy5fbm9ybWFsaXplSW5kaWNlcyh0KX0sX2ZpcnN0VmlzaWJsZUl0ZW06ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5lbGVtZW50WzBdLGk9dGhpcy5jb250ZW50WzBdLG49aS5zY3JvbGxUb3AsYT1lKHQuY2hpbGRyZW5bMF0pLmhlaWdodCgpLHM9TWF0aC5mbG9vcihuL2EpfHwwLHI9dC5jaGlsZHJlbltzXXx8dC5sYXN0Q2hpbGQsbD1yLm9mZnNldFRvcDxuO3I7KWlmKGwpe2lmKHIub2Zmc2V0VG9wK2E+bnx8IXIubmV4dFNpYmxpbmcpYnJlYWs7cj1yLm5leHRTaWJsaW5nfWVsc2V7aWYoci5vZmZzZXRUb3A8PW58fCFyLnByZXZpb3VzU2libGluZylicmVhaztyPXIucHJldmlvdXNTaWJsaW5nfXJldHVybiB0aGlzLl92aWV3W2UocikuZGF0YSgib2Zmc2V0LWluZGV4IildfSxfZml4ZWRIZWFkZXI6ZnVuY3Rpb24oKXt0aGlzLmlzR3JvdXBlZCgpJiZ0aGlzLnRlbXBsYXRlcy5maXhlZEdyb3VwVGVtcGxhdGU/KHRoaXMuaGVhZGVyLnNob3coKSwNCnRoaXMuY29udGVudC5zY3JvbGwodGhpcy5fb25TY3JvbGwpKToodGhpcy5oZWFkZXIuaGlkZSgpLHRoaXMuY29udGVudC5vZmYoInNjcm9sbCIsdGhpcy5fb25TY3JvbGwpKX0sX3JlbmRlckhlYWRlcjpmdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy50ZW1wbGF0ZXMuZml4ZWRHcm91cFRlbXBsYXRlO3QmJihlPXRoaXMuX2ZpcnN0VmlzaWJsZUl0ZW0oKSxlJiYoIiIrZS5ncm91cCkubGVuZ3RoJiZ0aGlzLmhlYWRlci5odG1sKHQoZS5ncm91cCkpKX0sX3JlbmRlckl0ZW06ZnVuY3Rpb24oZSl7dmFyIHQ9JzxsaSB0YWJpbmRleD0iLTEiIHJvbGU9Im9wdGlvbiIgdW5zZWxlY3RhYmxlPSJvbiIgY2xhc3M9ImstaXRlbScsaT1lLml0ZW0sbj0wIT09ZS5pbmRleCxhPWUuc2VsZWN0ZWQscz10aGlzLmlzR3JvdXBlZCgpLHI9dGhpcy5vcHRpb25zLmNvbHVtbnMmJnRoaXMub3B0aW9ucy5jb2x1bW5zLmxlbmd0aDtyZXR1cm4gbiYmZS5uZXdHcm91cCYmKHQrPSIgay1maXJzdCIpLGUuaXNMYXN0R3JvdXBlZEl0ZW0mJnImJih0Kz0iIGstbGFzdCIpLGEmJih0Kz0iIGstc3RhdGUtc2VsZWN0ZWQiKSx0Kz0nIiBhcmlhLXNlbGVjdGVkPSInKyhhPyJ0cnVlIjoiZmFsc2UiKSsnIiBkYXRhLW9mZnNldC1pbmRleD0iJytlLmluZGV4KyciPicsdCs9cj90aGlzLl9yZW5kZXJDb2x1bW5zKGkpOnRoaXMudGVtcGxhdGVzLnRlbXBsYXRlKGkpLG4mJmUubmV3R3JvdXA/dCs9cj8nPGRpdiBjbGFzcz0iay1jZWxsIGstZ3JvdXAtY2VsbCI+PHNwYW4+Jyt0aGlzLnRlbXBsYXRlcy5ncm91cFRlbXBsYXRlKGUuZ3JvdXApKyI8L3NwYW4+PC9kaXY+IjonPGRpdiBjbGFzcz0iay1ncm91cCI+Jyt0aGlzLnRlbXBsYXRlcy5ncm91cFRlbXBsYXRlKGUuZ3JvdXApKyI8L2Rpdj4iOnMmJnImJih0Kz0iPGRpdiBjbGFzcz0nay1jZWxsIGstc3BhY2VyLWNlbGwnPjwvZGl2PiIpLHQrIjwvbGk+In0sX3JlbmRlckNvbHVtbnM6ZnVuY3Rpb24oZSl7dmFyIHQsaSxuLGEscz0iIjtmb3IodD0wO3Q8dGhpcy5vcHRpb25zLmNvbHVtbnMubGVuZ3RoO3QrKylpPXRoaXMub3B0aW9ucy5jb2x1bW5zW3RdLndpZHRoLG49cGFyc2VJbnQoaSwxMCksYT0iIixpJiYhaXNOYU4obikmJihhKz0ic3R5bGU9J3dpZHRoOiIsYSs9bixhKz1mLnRlc3QoaSk/IiUiOiJweCIsYSs9IjsnIikscys9IjxzcGFuIGNsYXNzPSdrLWNlbGwnICIrYSsiPiIscys9dGhpcy50ZW1wbGF0ZXNbImNvbHVtbiIrdF0oZSkscys9Ijwvc3Bhbj4iO3JldHVybiBzfSxfcmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGUsdCxpLG4sYT0iIixzPTAscj0wLGw9W10sbz10aGlzLmRhdGFTb3VyY2UudmlldygpLHU9dGhpcy52YWx1ZSgpLGM9dGhpcy5pc0dyb3VwZWQoKTtpZihjKWZvcihzPTA7czxvLmxlbmd0aDtzKyspZm9yKHQ9b1tzXSxpPSEwLG49MDtuPHQuaXRlbXMubGVuZ3RoO24rKyllPXtzZWxlY3RlZDp0aGlzLl9zZWxlY3RlZCh0Lml0ZW1zW25dLHUpLGl0ZW06dC5pdGVtc1tuXSxncm91cDp0LnZhbHVlLG5ld0dyb3VwOmksaXNMYXN0R3JvdXBlZEl0ZW06bj09PXQuaXRlbXMubGVuZ3RoLTEsaW5kZXg6cn0sbFtyXT1lLHIrPTEsYSs9dGhpcy5fcmVuZGVySXRlbShlKSxpPSExO2Vsc2UgZm9yKHM9MDtzPG8ubGVuZ3RoO3MrKyllPXtzZWxlY3RlZDp0aGlzLl9zZWxlY3RlZChvW3NdLHUpLGl0ZW06b1tzXSxpbmRleDpzfSxsW3NdPWUsYSs9dGhpcy5fcmVuZGVySXRlbShlKTt0aGlzLl92aWV3PWwsdGhpcy5lbGVtZW50WzBdLmlubmVySFRNTD1hLGMmJmwubGVuZ3RoJiZ0aGlzLl9yZW5kZXJIZWFkZXIoKX0sX3NlbGVjdGVkOmZ1bmN0aW9uKGUsdCl7dmFyIGk9IXRoaXMuaXNGaWx0ZXJlZCgpfHwibXVsdGlwbGUiPT09dGhpcy5vcHRpb25zLnNlbGVjdGFibGU7cmV0dXJuIGkmJnRoaXMuX2RhdGFJdGVtUG9zaXRpb24oZSx0KSE9PS0xfSxzZXREU0ZpbHRlcjpmdW5jdGlvbihlKXt0aGlzLl9sYXN0RFNGaWx0ZXI9cSh7fSxlKX0saXNGaWx0ZXJlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYXN0RFNGaWx0ZXJ8fHRoaXMuc2V0RFNGaWx0ZXIodGhpcy5kYXRhU291cmNlLmZpbHRlcigpKSwhYy5kYXRhLlF1ZXJ5LmNvbXBhcmVGaWx0ZXJzKHRoaXMuZGF0YVNvdXJjZS5maWx0ZXIoKSx0aGlzLl9sYXN0RFNGaWx0ZXIpfSxyZWZyZXNoOmZ1bmN0aW9uKGUpe3ZhciB0LGk9dGhpcyxuPWUmJmUuYWN0aW9uLGE9aS5vcHRpb25zLnNraXBVcGRhdGVPbkJpbmQscj0iaXRlbWNoYW5nZSI9PT1uO2kudHJpZ2dlcigiZGF0YUJpbmRpbmciKSxpLl9hbmd1bGFySXRlbXMoImNsZWFudXAiKSxpLl9maXhlZEhlYWRlcigpLGkuX3JlbmRlcigpLGkuYm91bmQoITApLHJ8fCJyZW1vdmUiPT09bj8odD1zKGkuX2RhdGFJdGVtcyxlLml0ZW1zKSx0LmNoYW5nZWQubGVuZ3RoJiYocj9pLnRyaWdnZXIoInNlbGVjdGVkSXRlbUNoYW5nZSIse2l0ZW1zOnQuY2hhbmdlZH0pOmkudmFsdWUoaS5fZ2V0VmFsdWVzKHQudW5jaGFuZ2VkKSkpKTppLmlzRmlsdGVyZWQoKXx8aS5fc2tpcFVwZGF0ZXx8aS5fZW1wdHlTZWFyY2g/KGkuZm9jdXMoMCksaS5fc2tpcFVwZGF0ZSYmKGkuX3NraXBVcGRhdGU9ITEsaS5fc2VsZWN0ZWRJbmRpY2VzPWkuX3ZhbHVlSW5kaWNlcyhpLl92YWx1ZXMsaS5fc2VsZWN0ZWRJbmRpY2VzKSkpOmF8fG4mJiJhZGQiIT09bnx8aS52YWx1ZShpLl92YWx1ZXMpLGkuX3ZhbHVlRGVmZXJyZWQmJmkuX3ZhbHVlRGVmZXJyZWQucmVzb2x2ZSgpLGkuX2FuZ3VsYXJJdGVtcygiY29tcGlsZSIpLGkudHJpZ2dlcigiZGF0YUJvdW5kIil9LGJvdW5kOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09dD90aGlzLl9ib3VuZDoodGhpcy5fYm91bmQ9ZSx0KX0saXNHcm91cGVkOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuZGF0YVNvdXJjZS5ncm91cCgpfHxbXSkubGVuZ3RofX0pLGQucGx1Z2luKHUpfSh3aW5kb3cua2VuZG8ualF1ZXJ5KSx3aW5kb3cua2VuZG99LCJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lOmZ1bmN0aW9uKGUsdCxpKXsoaXx8dCkoKX0pOw0KLy8jIHNvdXJjZU1hcHBpbmdVUkw9a2VuZG8ubGlzdC5taW4uanMubWFwDQoK","CacheKey":"EnBLboC9JKJCtt0p6-4rMvmr38s"}