DIR : /home/kozerus/public_html/jkwii/js/jsdoit/preload/b64_lib_preloadjs_NEXT_min_js.txt /home/kozerus/public_html/jkwii/js/jsdoit/preload LyohCiogQGxpY2Vuc2UgUHJlbG9hZEpTCiogVmlzaXQgaHR0cDovL2NyZWF0ZWpzLmNvbS8gZm9yIGRvY3VtZW50YXRpb24sIHVwZGF0ZXMgYW5kIGV4YW1wbGVzLgoqCiogQ29weXJpZ2h0IChjKSAyMDExLTIwMTMgZ3NraW5uZXIuY29tLCBpbmMuCioKKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1JVCBsaWNlbnNlLgoqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UuaHRtbAoqCiogVGhpcyBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCiovCnRoaXMuY3JlYXRlanM9dGhpcy5jcmVhdGVqc3x8e30sZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIGE9Y3JlYXRlanMuUHJlbG9hZEpTPWNyZWF0ZWpzLlByZWxvYWRKU3x8e307YS52ZXJzaW9uPSJORVhUIixhLmJ1aWxkRGF0ZT0iRnJpLCAwMiBKYW4gMjAxNSAxNjoyOTo1OSBHTVQifSgpLHRoaXMuY3JlYXRlanM9dGhpcy5jcmVhdGVqc3x8e30sY3JlYXRlanMuZXh0ZW5kPWZ1bmN0aW9uKGEsYil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGMoKXt0aGlzLmNvbnN0cnVjdG9yPWF9cmV0dXJuIGMucHJvdG90eXBlPWIucHJvdG90eXBlLGEucHJvdG90eXBlPW5ldyBjfSx0aGlzLmNyZWF0ZWpzPXRoaXMuY3JlYXRlanN8fHt9LGNyZWF0ZWpzLnByb21vdGU9ZnVuY3Rpb24oYSxiKXsidXNlIHN0cmljdCI7dmFyIGM9YS5wcm90b3R5cGUsZD1PYmplY3QuZ2V0UHJvdG90eXBlT2YmJk9iamVjdC5nZXRQcm90b3R5cGVPZihjKXx8Yy5fX3Byb3RvX187aWYoZCl7Y1soYis9Il8iKSsiY29uc3RydWN0b3IiXT1kLmNvbnN0cnVjdG9yO2Zvcih2YXIgZSBpbiBkKWMuaGFzT3duUHJvcGVydHkoZSkmJiJmdW5jdGlvbiI9PXR5cGVvZiBkW2VdJiYoY1tiK2VdPWRbZV0pfXJldHVybiBhfSx0aGlzLmNyZWF0ZWpzPXRoaXMuY3JlYXRlanN8fHt9LGNyZWF0ZWpzLmluZGV4T2Y9ZnVuY3Rpb24oYSxiKXsidXNlIHN0cmljdCI7Zm9yKHZhciBjPTAsZD1hLmxlbmd0aDtkPmM7YysrKWlmKGI9PT1hW2NdKXJldHVybiBjO3JldHVybi0xfSx0aGlzLmNyZWF0ZWpzPXRoaXMuY3JlYXRlanN8fHt9LGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2NyZWF0ZWpzLnByb3h5PWZ1bmN0aW9uKGEsYil7dmFyIGM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBhLmFwcGx5KGIsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApLmNvbmNhdChjKSl9fX0oKSx0aGlzLmNyZWF0ZWpzPXRoaXMuY3JlYXRlanN8fHt9LGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGEoKXt0aHJvdyJCcm93c2VyRGV0ZWN0IGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQifXZhciBiPWEuYWdlbnQ9d2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7YS5pc1dpbmRvd1Bob25lPWIuaW5kZXhPZigiSUVNb2JpbGUiKT4tMXx8Yi5pbmRleE9mKCJXaW5kb3dzIFBob25lIik+LTEsYS5pc0ZpcmVmb3g9Yi5pbmRleE9mKCJGaXJlZm94Iik+LTEsYS5pc09wZXJhPW51bGwhPXdpbmRvdy5vcGVyYSxhLmlzQ2hyb21lPWIuaW5kZXhPZigiQ2hyb21lIik+LTEsYS5pc0lPUz0oYi5pbmRleE9mKCJpUG9kIik+LTF8fGIuaW5kZXhPZigiaVBob25lIik+LTF8fGIuaW5kZXhPZigiaVBhZCIpPi0xKSYmIWEuaXNXaW5kb3dQaG9uZSxhLmlzQW5kcm9pZD1iLmluZGV4T2YoIkFuZHJvaWQiKT4tMSYmIWEuaXNXaW5kb3dQaG9uZSxhLmlzQmxhY2tiZXJyeT1iLmluZGV4T2YoIkJsYWNrYmVycnkiKT4tMSxjcmVhdGVqcy5Ccm93c2VyRGV0ZWN0PWF9KCksdGhpcy5jcmVhdGVqcz10aGlzLmNyZWF0ZWpzfHx7fSxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBhKGEsYixjKXt0aGlzLnR5cGU9YSx0aGlzLnRhcmdldD1udWxsLHRoaXMuY3VycmVudFRhcmdldD1udWxsLHRoaXMuZXZlbnRQaGFzZT0wLHRoaXMuYnViYmxlcz0hIWIsdGhpcy5jYW5jZWxhYmxlPSEhYyx0aGlzLnRpbWVTdGFtcD0obmV3IERhdGUpLmdldFRpbWUoKSx0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITEsdGhpcy5wcm9wYWdhdGlvblN0b3BwZWQ9ITEsdGhpcy5pbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9ITEsdGhpcy5yZW1vdmVkPSExfXZhciBiPWEucHJvdG90eXBlO2IucHJldmVudERlZmF1bHQ9ZnVuY3Rpb24oKXt0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9dGhpcy5jYW5jZWxhYmxlJiYhMH0sYi5zdG9wUHJvcGFnYXRpb249ZnVuY3Rpb24oKXt0aGlzLnByb3BhZ2F0aW9uU3RvcHBlZD0hMH0sYi5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb249ZnVuY3Rpb24oKXt0aGlzLmltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD10aGlzLnByb3BhZ2F0aW9uU3RvcHBlZD0hMH0sYi5yZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLnJlbW92ZWQ9ITB9LGIuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGEodGhpcy50eXBlLHRoaXMuYnViYmxlcyx0aGlzLmNhbmNlbGFibGUpfSxiLnNldD1mdW5jdGlvbihhKXtmb3IodmFyIGIgaW4gYSl0aGlzW2JdPWFbYl07cmV0dXJuIHRoaXN9LGIudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iW0V2ZW50ICh0eXBlPSIrdGhpcy50eXBlKyIpXSJ9LGNyZWF0ZWpzLkV2ZW50PWF9KCksdGhpcy5jcmVhdGVqcz10aGlzLmNyZWF0ZWpzfHx7fSxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBhKGEsYixjKXt0aGlzLkV2ZW50X2NvbnN0cnVjdG9yKCJlcnJvciIpLHRoaXMudGl0bGU9YSx0aGlzLm1lc3NhZ2U9Yix0aGlzLmRhdGE9Y312YXIgYj1jcmVhdGVqcy5leHRlbmQoYSxjcmVhdGVqcy5FdmVudCk7Yi5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgY3JlYXRlanMuRXJyb3JFdmVudCh0aGlzLnRpdGxlLHRoaXMubWVzc2FnZSx0aGlzLmRhdGEpfSxjcmVhdGVqcy5FcnJvckV2ZW50PWNyZWF0ZWpzLnByb21vdGUoYSwiRXZlbnQiKX0oKSx0aGlzLmNyZWF0ZWpzPXRoaXMuY3JlYXRlanN8fHt9LGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGEoKXt0aGlzLl9saXN0ZW5lcnM9bnVsbCx0aGlzLl9jYXB0dXJlTGlzdGVuZXJzPW51bGx9dmFyIGI9YS5wcm90b3R5cGU7YS5pbml0aWFsaXplPWZ1bmN0aW9uKGEpe2EuYWRkRXZlbnRMaXN0ZW5lcj1iLmFkZEV2ZW50TGlzdGVuZXIsYS5vbj1iLm9uLGEucmVtb3ZlRXZlbnRMaXN0ZW5lcj1hLm9mZj1iLnJlbW92ZUV2ZW50TGlzdGVuZXIsYS5yZW1vdmVBbGxFdmVudExpc3RlbmVycz1iLnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzLGEuaGFzRXZlbnRMaXN0ZW5lcj1iLmhhc0V2ZW50TGlzdGVuZXIsYS5kaXNwYXRjaEV2ZW50PWIuZGlzcGF0Y2hFdmVudCxhLl9kaXNwYXRjaEV2ZW50PWIuX2Rpc3BhdGNoRXZlbnQsYS53aWxsVHJpZ2dlcj1iLndpbGxUcmlnZ2VyfSxiLmFkZEV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO2Q9Yz90aGlzLl9jYXB0dXJlTGlzdGVuZXJzPXRoaXMuX2NhcHR1cmVMaXN0ZW5lcnN8fHt9OnRoaXMuX2xpc3RlbmVycz10aGlzLl9saXN0ZW5lcnN8fHt9O3ZhciBlPWRbYV07cmV0dXJuIGUmJnRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGIsYyksZT1kW2FdLGU/ZS5wdXNoKGIpOmRbYV09W2JdLGJ9LGIub249ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3JldHVybiBiLmhhbmRsZUV2ZW50JiYoYz1jfHxiLGI9Yi5oYW5kbGVFdmVudCksYz1jfHx0aGlzLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihhLGZ1bmN0aW9uKGEpe2IuY2FsbChjLGEsZSksZCYmYS5yZW1vdmUoKX0sZil9LGIucmVtb3ZlRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9Yz90aGlzLl9jYXB0dXJlTGlzdGVuZXJzOnRoaXMuX2xpc3RlbmVycztpZihkKXt2YXIgZT1kW2FdO2lmKGUpZm9yKHZhciBmPTAsZz1lLmxlbmd0aDtnPmY7ZisrKWlmKGVbZl09PWIpezE9PWc/ZGVsZXRlIGRbYV06ZS5zcGxpY2UoZiwxKTticmVha319fSxiLm9mZj1iLnJlbW92ZUV2ZW50TGlzdGVuZXIsYi5yZW1vdmVBbGxFdmVudExpc3RlbmVycz1mdW5jdGlvbihhKXthPyh0aGlzLl9saXN0ZW5lcnMmJmRlbGV0ZSB0aGlzLl9saXN0ZW5lcnNbYV0sdGhpcy5fY2FwdHVyZUxpc3RlbmVycyYmZGVsZXRlIHRoaXMuX2NhcHR1cmVMaXN0ZW5lcnNbYV0pOnRoaXMuX2xpc3RlbmVycz10aGlzLl9jYXB0dXJlTGlzdGVuZXJzPW51bGx9LGIuZGlzcGF0Y2hFdmVudD1mdW5jdGlvbihhKXtpZigic3RyaW5nIj09dHlwZW9mIGEpe3ZhciBiPXRoaXMuX2xpc3RlbmVycztpZighYnx8IWJbYV0pcmV0dXJuITE7YT1uZXcgY3JlYXRlanMuRXZlbnQoYSl9ZWxzZSBhLnRhcmdldCYmYS5jbG9uZSYmKGE9YS5jbG9uZSgpKTt0cnl7YS50YXJnZXQ9dGhpc31jYXRjaChjKXt9aWYoYS5idWJibGVzJiZ0aGlzLnBhcmVudCl7Zm9yKHZhciBkPXRoaXMsZT1bZF07ZC5wYXJlbnQ7KWUucHVzaChkPWQucGFyZW50KTt2YXIgZixnPWUubGVuZ3RoO2ZvcihmPWctMTtmPj0wJiYhYS5wcm9wYWdhdGlvblN0b3BwZWQ7Zi0tKWVbZl0uX2Rpc3BhdGNoRXZlbnQoYSwxKygwPT1mKSk7Zm9yKGY9MTtnPmYmJiFhLnByb3BhZ2F0aW9uU3RvcHBlZDtmKyspZVtmXS5fZGlzcGF0Y2hFdmVudChhLDMpfWVsc2UgdGhpcy5fZGlzcGF0Y2hFdmVudChhLDIpO3JldHVybiBhLmRlZmF1bHRQcmV2ZW50ZWR9LGIuaGFzRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbihhKXt2YXIgYj10aGlzLl9saXN0ZW5lcnMsYz10aGlzLl9jYXB0dXJlTGlzdGVuZXJzO3JldHVybiEhKGImJmJbYV18fGMmJmNbYV0pfSxiLndpbGxUcmlnZ2VyPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10aGlzO2I7KXtpZihiLmhhc0V2ZW50TGlzdGVuZXIoYSkpcmV0dXJuITA7Yj1iLnBhcmVudH1yZXR1cm4hMX0sYi50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJbRXZlbnREaXNwYXRjaGVyXSJ9LGIuX2Rpc3BhdGNoRXZlbnQ9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPTE9PWI/dGhpcy5fY2FwdHVyZUxpc3RlbmVyczp0aGlzLl9saXN0ZW5lcnM7aWYoYSYmZCl7dmFyIGU9ZFthLnR5cGVdO2lmKCFlfHwhKGM9ZS5sZW5ndGgpKXJldHVybjt0cnl7YS5jdXJyZW50VGFyZ2V0PXRoaXN9Y2F0Y2goZil7fXRyeXthLmV2ZW50UGhhc2U9Yn1jYXRjaChmKXt9YS5yZW1vdmVkPSExLGU9ZS5zbGljZSgpO2Zvcih2YXIgZz0wO2M+ZyYmIWEuaW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkO2crKyl7dmFyIGg9ZVtnXTtoLmhhbmRsZUV2ZW50P2guaGFuZGxlRXZlbnQoYSk6aChhKSxhLnJlbW92ZWQmJih0aGlzLm9mZihhLnR5cGUsaCwxPT1iKSxhLnJlbW92ZWQ9ITEpfX19LGNyZWF0ZWpzLkV2ZW50RGlzcGF0Y2hlcj1hfSgpLHRoaXMuY3JlYXRlanM9dGhpcy5jcmVhdGVqc3x8e30sZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYShhLGIpe3RoaXMuRXZlbnRfY29uc3RydWN0b3IoInByb2dyZXNzIiksdGhpcy5sb2FkZWQ9YSx0aGlzLnRvdGFsPW51bGw9PWI/MTpiLHRoaXMucHJvZ3Jlc3M9MD09Yj8wOnRoaXMubG9hZGVkL3RoaXMudG90YWx9dmFyIGI9Y3JlYXRlanMuZXh0ZW5kKGEsY3JlYXRlanMuRXZlbnQpO2IuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGNyZWF0ZWpzLlByb2dyZXNzRXZlbnQodGhpcy5sb2FkZWQsdGhpcy50b3RhbCl9LGNyZWF0ZWpzLlByb2dyZXNzRXZlbnQ9Y3JlYXRlanMucHJvbW90ZShhLCJFdmVudCIpfSh3aW5kb3cpLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShiLGQpe2Z1bmN0aW9uIGYoYSl7aWYoZlthXSE9PXEpcmV0dXJuIGZbYV07dmFyIGI7aWYoImJ1Zy1zdHJpbmctY2hhci1pbmRleCI9PWEpYj0iYSIhPSJhIlswXTtlbHNlIGlmKCJqc29uIj09YSliPWYoImpzb24tc3RyaW5naWZ5IikmJmYoImpzb24tcGFyc2UiKTtlbHNle3ZhciBjLGU9J3siYSI6WzEsdHJ1ZSxmYWxzZSxudWxsLCJcXHUwMDAwXFxiXFxuXFxmXFxyXFx0Il19JztpZigianNvbi1zdHJpbmdpZnkiPT1hKXt2YXIgaT1kLnN0cmluZ2lmeSxrPSJmdW5jdGlvbiI9PXR5cGVvZiBpJiZ0O2lmKGspeyhjPWZ1bmN0aW9uKCl7cmV0dXJuIDF9KS50b0pTT049Yzt0cnl7az0iMCI9PT1pKDApJiYiMCI9PT1pKG5ldyBnKSYmJyIiJz09aShuZXcgaCkmJmkocyk9PT1xJiZpKHEpPT09cSYmaSgpPT09cSYmIjEiPT09aShjKSYmIlsxXSI9PWkoW2NdKSYmIltudWxsXSI9PWkoW3FdKSYmIm51bGwiPT1pKG51bGwpJiYiW251bGwsbnVsbCxudWxsXSI9PWkoW3EscyxudWxsXSkmJmkoe2E6W2MsITAsITEsbnVsbCwiXHgwMFxiXG5cZlxyCSJdfSk9PWUmJiIxIj09PWkobnVsbCxjKSYmIltcbiAxLFxuIDJcbl0iPT1pKFsxLDJdLG51bGwsMSkmJiciLTI3MTgyMS0wNC0yMFQwMDowMDowMC4wMDBaIic9PWkobmV3IGooLTg2NGUxMykpJiYnIisyNzU3NjAtMDktMTNUMDA6MDA6MDAuMDAwWiInPT1pKG5ldyBqKDg2NGUxMykpJiYnIi0wMDAwMDEtMDEtMDFUMDA6MDA6MDAuMDAwWiInPT1pKG5ldyBqKC02MjE5ODc1NTJlNSkpJiYnIjE5NjktMTItMzFUMjM6NTk6NTkuOTk5WiInPT1pKG5ldyBqKC0xKSl9Y2F0Y2gobCl7az0hMX19Yj1rfWlmKCJqc29uLXBhcnNlIj09YSl7dmFyIG09ZC5wYXJzZTtpZigiZnVuY3Rpb24iPT10eXBlb2YgbSl0cnl7aWYoMD09PW0oIjAiKSYmIW0oITEpKXtjPW0oZSk7dmFyIG49NT09Yy5hLmxlbmd0aCYmMT09PWMuYVswXTtpZihuKXt0cnl7bj0hbSgnIgkiJyl9Y2F0Y2gobCl7fWlmKG4pdHJ5e249MSE9PW0oIjAxIil9Y2F0Y2gobCl7fWlmKG4pdHJ5e249MSE9PW0oIjEuIil9Y2F0Y2gobCl7fX19fWNhdGNoKGwpe249ITF9Yj1ufX1yZXR1cm4gZlthXT0hIWJ9Ynx8KGI9ZS5PYmplY3QoKSksZHx8KGQ9ZS5PYmplY3QoKSk7dmFyIGc9Yi5OdW1iZXJ8fGUuTnVtYmVyLGg9Yi5TdHJpbmd8fGUuU3RyaW5nLGk9Yi5PYmplY3R8fGUuT2JqZWN0LGo9Yi5EYXRlfHxlLkRhdGUsaz1iLlN5bnRheEVycm9yfHxlLlN5bnRheEVycm9yLGw9Yi5UeXBlRXJyb3J8fGUuVHlwZUVycm9yLG09Yi5NYXRofHxlLk1hdGgsbj1iLkpTT058fGUuSlNPTjsib2JqZWN0Ij09dHlwZW9mIG4mJm4mJihkLnN0cmluZ2lmeT1uLnN0cmluZ2lmeSxkLnBhcnNlPW4ucGFyc2UpO3ZhciBvLHAscSxyPWkucHJvdG90eXBlLHM9ci50b1N0cmluZyx0PW5ldyBqKC0weGM3ODJiNWI4MDBjZWMpO3RyeXt0PS0xMDkyNTI9PXQuZ2V0VVRDRnVsbFllYXIoKSYmMD09PXQuZ2V0VVRDTW9udGgoKSYmMT09PXQuZ2V0VVRDRGF0ZSgpJiYxMD09dC5nZXRVVENIb3VycygpJiYzNz09dC5nZXRVVENNaW51dGVzKCkmJjY9PXQuZ2V0VVRDU2Vjb25kcygpJiY3MDg9PXQuZ2V0VVRDTWlsbGlzZWNvbmRzKCl9Y2F0Y2godSl7fWlmKCFmKCJqc29uIikpe3ZhciB2PSJbb2JqZWN0IEZ1bmN0aW9uXSIsdz0iW29iamVjdCBEYXRlXSIseD0iW29iamVjdCBOdW1iZXJdIix5PSJbb2JqZWN0IFN0cmluZ10iLHo9IltvYmplY3QgQXJyYXldIixBPSJbb2JqZWN0IEJvb2xlYW5dIixCPWYoImJ1Zy1zdHJpbmctY2hhci1pbmRleCIpO2lmKCF0KXZhciBDPW0uZmxvb3IsRD1bMCwzMSw1OSw5MCwxMjAsMTUxLDE4MSwyMTIsMjQzLDI3MywzMDQsMzM0XSxFPWZ1bmN0aW9uKGEsYil7cmV0dXJuIERbYl0rMzY1KihhLTE5NzApK0MoKGEtMTk2OSsoYj0rKGI+MSkpKS80KS1DKChhLTE5MDErYikvMTAwKStDKChhLTE2MDErYikvNDAwKX07aWYoKG89ci5oYXNPd25Qcm9wZXJ0eSl8fChvPWZ1bmN0aW9uKGEpe3ZhciBiLGM9e307cmV0dXJuKGMuX19wcm90b19fPW51bGwsYy5fX3Byb3RvX189e3RvU3RyaW5nOjF9LGMpLnRvU3RyaW5nIT1zP289ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5fX3Byb3RvX18sYz1hIGluKHRoaXMuX19wcm90b19fPW51bGwsdGhpcyk7cmV0dXJuIHRoaXMuX19wcm90b19fPWIsY306KGI9Yy5jb25zdHJ1Y3RvcixvPWZ1bmN0aW9uKGEpe3ZhciBjPSh0aGlzLmNvbnN0cnVjdG9yfHxiKS5wcm90b3R5cGU7cmV0dXJuIGEgaW4gdGhpcyYmIShhIGluIGMmJnRoaXNbYV09PT1jW2FdKX0pLGM9bnVsbCxvLmNhbGwodGhpcyxhKX0pLHA9ZnVuY3Rpb24oYSxiKXt2YXIgZCxlLGYsZz0wOyhkPWZ1bmN0aW9uKCl7dGhpcy52YWx1ZU9mPTB9KS5wcm90b3R5cGUudmFsdWVPZj0wLGU9bmV3IGQ7Zm9yKGYgaW4gZSlvLmNhbGwoZSxmKSYmZysrO3JldHVybiBkPWU9bnVsbCxnP3A9Mj09Zz9mdW5jdGlvbihhLGIpe3ZhciBjLGQ9e30sZT1zLmNhbGwoYSk9PXY7Zm9yKGMgaW4gYSllJiYicHJvdG90eXBlIj09Y3x8by5jYWxsKGQsYyl8fCEoZFtjXT0xKXx8IW8uY2FsbChhLGMpfHxiKGMpfTpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZT1zLmNhbGwoYSk9PXY7Zm9yKGMgaW4gYSllJiYicHJvdG90eXBlIj09Y3x8IW8uY2FsbChhLGMpfHwoZD0iY29uc3RydWN0b3IiPT09Yyl8fGIoYyk7KGR8fG8uY2FsbChhLGM9ImNvbnN0cnVjdG9yIikpJiZiKGMpfTooZT1bInZhbHVlT2YiLCJ0b1N0cmluZyIsInRvTG9jYWxlU3RyaW5nIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJpc1Byb3RvdHlwZU9mIiwiaGFzT3duUHJvcGVydHkiLCJjb25zdHJ1Y3RvciJdLHA9ZnVuY3Rpb24oYSxiKXt2YXIgZCxmLGc9cy5jYWxsKGEpPT12LGg9IWcmJiJmdW5jdGlvbiIhPXR5cGVvZiBhLmNvbnN0cnVjdG9yJiZjW3R5cGVvZiBhLmhhc093blByb3BlcnR5XSYmYS5oYXNPd25Qcm9wZXJ0eXx8bztmb3IoZCBpbiBhKWcmJiJwcm90b3R5cGUiPT1kfHwhaC5jYWxsKGEsZCl8fGIoZCk7Zm9yKGY9ZS5sZW5ndGg7ZD1lWy0tZl07aC5jYWxsKGEsZCkmJmIoZCkpO30pLHAoYSxiKX0sIWYoImpzb24tc3RyaW5naWZ5Iikpe3ZhciBGPXs5MjoiXFxcXCIsMzQ6J1xcIicsODoiXFxiIiwxMjoiXFxmIiwxMDoiXFxuIiwxMzoiXFxyIiw5OiJcXHQifSxHPSIwMDAwMDAiLEg9ZnVuY3Rpb24oYSxiKXtyZXR1cm4oRysoYnx8MCkpLnNsaWNlKC1hKX0sST0iXFx1MDAiLEo9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPSciJyxjPTAsZD1hLmxlbmd0aCxlPSFCfHxkPjEwLGY9ZSYmKEI/YS5zcGxpdCgiIik6YSk7ZD5jO2MrKyl7dmFyIGc9YS5jaGFyQ29kZUF0KGMpO3N3aXRjaChnKXtjYXNlIDg6Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMjpjYXNlIDEzOmNhc2UgMzQ6Y2FzZSA5MjpiKz1GW2ddO2JyZWFrO2RlZmF1bHQ6aWYoMzI+Zyl7Yis9SStIKDIsZy50b1N0cmluZygxNikpO2JyZWFrfWIrPWU/ZltjXTphLmNoYXJBdChjKX19cmV0dXJuIGIrJyInfSxLPWZ1bmN0aW9uKGEsYixjLGQsZSxmLGcpe3ZhciBoLGksaixrLG0sbixyLHQsdSx2LEIsRCxGLEcsSSxMO3RyeXtoPWJbYV19Y2F0Y2goTSl7fWlmKCJvYmplY3QiPT10eXBlb2YgaCYmaClpZihpPXMuY2FsbChoKSxpIT13fHxvLmNhbGwoaCwidG9KU09OIikpImZ1bmN0aW9uIj09dHlwZW9mIGgudG9KU09OJiYoaSE9eCYmaSE9eSYmaSE9enx8by5jYWxsKGgsInRvSlNPTiIpKSYmKGg9aC50b0pTT04oYSkpO2Vsc2UgaWYoaD4tMS8wJiYxLzA+aCl7aWYoRSl7Zm9yKG09QyhoLzg2NGU1KSxqPUMobS8zNjUuMjQyNSkrMTk3MC0xO0UoaisxLDApPD1tO2orKyk7Zm9yKGs9QygobS1FKGosMCkpLzMwLjQyKTtFKGosaysxKTw9bTtrKyspO209MSttLUUoaixrKSxuPShoJTg2NGU1Kzg2NGU1KSU4NjRlNSxyPUMobi8zNmU1KSUyNCx0PUMobi82ZTQpJTYwLHU9QyhuLzFlMyklNjAsdj1uJTFlM31lbHNlIGo9aC5nZXRVVENGdWxsWWVhcigpLGs9aC5nZXRVVENNb250aCgpLG09aC5nZXRVVENEYXRlKCkscj1oLmdldFVUQ0hvdXJzKCksdD1oLmdldFVUQ01pbnV0ZXMoKSx1PWguZ2V0VVRDU2Vjb25kcygpLHY9aC5nZXRVVENNaWxsaXNlY29uZHMoKTtoPSgwPj1qfHxqPj0xZTQ/KDA+aj8iLSI6IisiKStIKDYsMD5qPy1qOmopOkgoNCxqKSkrIi0iK0goMixrKzEpKyItIitIKDIsbSkrIlQiK0goMixyKSsiOiIrSCgyLHQpKyI6IitIKDIsdSkrIi4iK0goMyx2KSsiWiJ9ZWxzZSBoPW51bGw7aWYoYyYmKGg9Yy5jYWxsKGIsYSxoKSksbnVsbD09PWgpcmV0dXJuIm51bGwiO2lmKGk9cy5jYWxsKGgpLGk9PUEpcmV0dXJuIiIraDtpZihpPT14KXJldHVybiBoPi0xLzAmJjEvMD5oPyIiK2g6Im51bGwiO2lmKGk9PXkpcmV0dXJuIEooIiIraCk7aWYoIm9iamVjdCI9PXR5cGVvZiBoKXtmb3IoRz1nLmxlbmd0aDtHLS07KWlmKGdbR109PT1oKXRocm93IGwoKTtpZihnLnB1c2goaCksQj1bXSxJPWYsZis9ZSxpPT16KXtmb3IoRj0wLEc9aC5sZW5ndGg7Rz5GO0YrKylEPUsoRixoLGMsZCxlLGYsZyksQi5wdXNoKEQ9PT1xPyJudWxsIjpEKTtMPUIubGVuZ3RoP2U/IltcbiIrZitCLmpvaW4oIixcbiIrZikrIlxuIitJKyJdIjoiWyIrQi5qb2luKCIsIikrIl0iOiJbXSJ9ZWxzZSBwKGR8fGgsZnVuY3Rpb24oYSl7dmFyIGI9SyhhLGgsYyxkLGUsZixnKTtiIT09cSYmQi5wdXNoKEooYSkrIjoiKyhlPyIgIjoiIikrYil9KSxMPUIubGVuZ3RoP2U/IntcbiIrZitCLmpvaW4oIixcbiIrZikrIlxuIitJKyJ9IjoieyIrQi5qb2luKCIsIikrIn0iOiJ7fSI7cmV0dXJuIGcucG9wKCksTH19O2Quc3RyaW5naWZ5PWZ1bmN0aW9uKGEsYixkKXt2YXIgZSxmLGcsaDtpZihjW3R5cGVvZiBiXSYmYilpZigoaD1zLmNhbGwoYikpPT12KWY9YjtlbHNlIGlmKGg9PXope2c9e307Zm9yKHZhciBpLGo9MCxrPWIubGVuZ3RoO2s+ajtpPWJbaisrXSxoPXMuY2FsbChpKSwoaD09eXx8aD09eCkmJihnW2ldPTEpKTt9aWYoZClpZigoaD1zLmNhbGwoZCkpPT14KXtpZigoZC09ZCUxKT4wKWZvcihlPSIiLGQ+MTAmJihkPTEwKTtlLmxlbmd0aDxkO2UrPSIgIik7fWVsc2UgaD09eSYmKGU9ZC5sZW5ndGg8PTEwP2Q6ZC5zbGljZSgwLDEwKSk7cmV0dXJuIEsoIiIsKGk9e30saVsiIl09YSxpKSxmLGcsZSwiIixbXSl9fWlmKCFmKCJqc29uLXBhcnNlIikpe3ZhciBMLE0sTj1oLmZyb21DaGFyQ29kZSxPPXs5MjoiXFwiLDM0OiciJyw0NzoiLyIsOTg6IlxiIiwxMTY6IgkiLDExMDoiXG4iLDEwMjoiXGYiLDExNDoiXHIifSxQPWZ1bmN0aW9uKCl7dGhyb3cgTD1NPW51bGwsaygpfSxRPWZ1bmN0aW9uKCl7Zm9yKHZhciBhLGIsYyxkLGUsZj1NLGc9Zi5sZW5ndGg7Zz5MOylzd2l0Y2goZT1mLmNoYXJDb2RlQXQoTCkpe2Nhc2UgOTpjYXNlIDEwOmNhc2UgMTM6Y2FzZSAzMjpMKys7YnJlYWs7Y2FzZSAxMjM6Y2FzZSAxMjU6Y2FzZSA5MTpjYXNlIDkzOmNhc2UgNTg6Y2FzZSA0NDpyZXR1cm4gYT1CP2YuY2hhckF0KEwpOmZbTF0sTCsrLGE7Y2FzZSAzNDpmb3IoYT0iQCIsTCsrO2c+TDspaWYoZT1mLmNoYXJDb2RlQXQoTCksMzI+ZSlQKCk7ZWxzZSBpZig5Mj09ZSlzd2l0Y2goZT1mLmNoYXJDb2RlQXQoKytMKSl7Y2FzZSA5MjpjYXNlIDM0OmNhc2UgNDc6Y2FzZSA5ODpjYXNlIDExNjpjYXNlIDExMDpjYXNlIDEwMjpjYXNlIDExNDphKz1PW2VdLEwrKzticmVhaztjYXNlIDExNzpmb3IoYj0rK0wsYz1MKzQ7Yz5MO0wrKyllPWYuY2hhckNvZGVBdChMKSxlPj00OCYmNTc+PWV8fGU+PTk3JiYxMDI+PWV8fGU+PTY1JiY3MD49ZXx8UCgpO2ErPU4oIjB4IitmLnNsaWNlKGIsTCkpO2JyZWFrO2RlZmF1bHQ6UCgpfWVsc2V7aWYoMzQ9PWUpYnJlYWs7Zm9yKGU9Zi5jaGFyQ29kZUF0KEwpLGI9TDtlPj0zMiYmOTIhPWUmJjM0IT1lOyllPWYuY2hhckNvZGVBdCgrK0wpO2ErPWYuc2xpY2UoYixMKX1pZigzND09Zi5jaGFyQ29kZUF0KEwpKXJldHVybiBMKyssYTtQKCk7ZGVmYXVsdDppZihiPUwsNDU9PWUmJihkPSEwLGU9Zi5jaGFyQ29kZUF0KCsrTCkpLGU+PTQ4JiY1Nz49ZSl7Zm9yKDQ4PT1lJiYoZT1mLmNoYXJDb2RlQXQoTCsxKSxlPj00OCYmNTc+PWUpJiZQKCksZD0hMTtnPkwmJihlPWYuY2hhckNvZGVBdChMKSxlPj00OCYmNTc+PWUpO0wrKyk7aWYoNDY9PWYuY2hhckNvZGVBdChMKSl7Zm9yKGM9KytMO2c+YyYmKGU9Zi5jaGFyQ29kZUF0KGMpLGU+PTQ4JiY1Nz49ZSk7YysrKTtjPT1MJiZQKCksTD1jfWlmKGU9Zi5jaGFyQ29kZUF0KEwpLDEwMT09ZXx8Njk9PWUpe2ZvcihlPWYuY2hhckNvZGVBdCgrK0wpLCg0Mz09ZXx8NDU9PWUpJiZMKyssYz1MO2c+YyYmKGU9Zi5jaGFyQ29kZUF0KGMpLGU+PTQ4JiY1Nz49ZSk7YysrKTtjPT1MJiZQKCksTD1jfXJldHVybitmLnNsaWNlKGIsTCl9aWYoZCYmUCgpLCJ0cnVlIj09Zi5zbGljZShMLEwrNCkpcmV0dXJuIEwrPTQsITA7aWYoImZhbHNlIj09Zi5zbGljZShMLEwrNSkpcmV0dXJuIEwrPTUsITE7aWYoIm51bGwiPT1mLnNsaWNlKEwsTCs0KSlyZXR1cm4gTCs9NCxudWxsO1AoKX1yZXR1cm4iJCJ9LFI9ZnVuY3Rpb24oYSl7dmFyIGIsYztpZigiJCI9PWEmJlAoKSwic3RyaW5nIj09dHlwZW9mIGEpe2lmKCJAIj09KEI/YS5jaGFyQXQoMCk6YVswXSkpcmV0dXJuIGEuc2xpY2UoMSk7aWYoIlsiPT1hKXtmb3IoYj1bXTthPVEoKSwiXSIhPWE7Y3x8KGM9ITApKWMmJigiLCI9PWE/KGE9USgpLCJdIj09YSYmUCgpKTpQKCkpLCIsIj09YSYmUCgpLGIucHVzaChSKGEpKTtyZXR1cm4gYn1pZigieyI9PWEpe2ZvcihiPXt9O2E9USgpLCJ9IiE9YTtjfHwoYz0hMCkpYyYmKCIsIj09YT8oYT1RKCksIn0iPT1hJiZQKCkpOlAoKSksKCIsIj09YXx8InN0cmluZyIhPXR5cGVvZiBhfHwiQCIhPShCP2EuY2hhckF0KDApOmFbMF0pfHwiOiIhPVEoKSkmJlAoKSxiW2Euc2xpY2UoMSldPVIoUSgpKTtyZXR1cm4gYn1QKCl9cmV0dXJuIGF9LFM9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPVQoYSxiLGMpO2Q9PT1xP2RlbGV0ZSBhW2JdOmFbYl09ZH0sVD1mdW5jdGlvbihhLGIsYyl7dmFyIGQsZT1hW2JdO2lmKCJvYmplY3QiPT10eXBlb2YgZSYmZSlpZihzLmNhbGwoZSk9PXopZm9yKGQ9ZS5sZW5ndGg7ZC0tOylTKGUsZCxjKTtlbHNlIHAoZSxmdW5jdGlvbihhKXtTKGUsYSxjKX0pO3JldHVybiBjLmNhbGwoYSxiLGUpfTtkLnBhcnNlPWZ1bmN0aW9uKGEsYil7dmFyIGMsZDtyZXR1cm4gTD0wLE09IiIrYSxjPVIoUSgpKSwiJCIhPVEoKSYmUCgpLEw9TT1udWxsLGImJnMuY2FsbChiKT09dj9UKChkPXt9LGRbIiJdPWMsZCksIiIsYik6Y319fXJldHVybiBkLnJ1bkluQ29udGV4dD1hLGR9dmFyIGI9ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZCxjPXsiZnVuY3Rpb24iOiEwLG9iamVjdDohMH0sZD1jW3R5cGVvZiBleHBvcnRzXSYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMsZT1jW3R5cGVvZiB3aW5kb3ddJiZ3aW5kb3d8fHRoaXMsZj1kJiZjW3R5cGVvZiBtb2R1bGVdJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5cGUmJiJvYmplY3QiPT10eXBlb2YgZ2xvYmFsJiZnbG9iYWw7aWYoIWZ8fGYuZ2xvYmFsIT09ZiYmZi53aW5kb3chPT1mJiZmLnNlbGYhPT1mfHwoZT1mKSxkJiYhYilhKGUsZCk7ZWxzZXt2YXIgZz1lLkpTT04saD1lLkpTT04zLGk9ITEsaj1hKGUsZS5KU09OMz17bm9Db25mbGljdDpmdW5jdGlvbigpe3JldHVybiBpfHwoaT0hMCxlLkpTT049ZyxlLkpTT04zPWgsZz1oPW51bGwpLGp9fSk7ZS5KU09OPXtwYXJzZTpqLnBhcnNlLHN0cmluZ2lmeTpqLnN0cmluZ2lmeX19YiYmZGVmaW5lKGZ1bmN0aW9uKCl7cmV0dXJuIGp9KX0uY2FsbCh0aGlzKSxmdW5jdGlvbigpe3ZhciBhPXt9O2EucGFyc2VYTUw9ZnVuY3Rpb24oYSxiKXt2YXIgYz1udWxsO3RyeXtpZih3aW5kb3cuRE9NUGFyc2VyKXt2YXIgZD1uZXcgRE9NUGFyc2VyO2M9ZC5wYXJzZUZyb21TdHJpbmcoYSxiKX1lbHNlIGM9bmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxET00iKSxjLmFzeW5jPSExLGMubG9hZFhNTChhKX1jYXRjaChlKXt9cmV0dXJuIGN9LGEucGFyc2VKU09OPWZ1bmN0aW9uKGEpe2lmKG51bGw9PWEpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBKU09OLnBhcnNlKGEpfWNhdGNoKGIpe3Rocm93IGJ9fSxjcmVhdGVqcy5EYXRhVXRpbHM9YX0oKSx0aGlzLmNyZWF0ZWpzPXRoaXMuY3JlYXRlanN8fHt9LGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGEoKXt0aGlzLnNyYz1udWxsLHRoaXMudHlwZT1udWxsLHRoaXMuaWQ9bnVsbCx0aGlzLm1haW50YWluT3JkZXI9ITEsdGhpcy5jYWxsYmFjaz1udWxsLHRoaXMuZGF0YT1udWxsLHRoaXMubWV0aG9kPWNyZWF0ZWpzLkxvYWRJdGVtLkdFVCx0aGlzLnZhbHVlcz1udWxsLHRoaXMuaGVhZGVycz1udWxsLHRoaXMud2l0aENyZWRlbnRpYWxzPSExLHRoaXMubWltZVR5cGU9bnVsbCx0aGlzLmNyb3NzT3JpZ2luPW51bGwsdGhpcy5sb2FkVGltZW91dD04ZTN9dmFyIGI9YS5wcm90b3R5cGU9e30sYz1hO2MuY3JlYXRlPWZ1bmN0aW9uKGIpe2lmKCJzdHJpbmciPT10eXBlb2YgYil7dmFyIGQ9bmV3IGE7cmV0dXJuIGQuc3JjPWIsZH1pZihiIGluc3RhbmNlb2YgYylyZXR1cm4gYjtpZihiIGluc3RhbmNlb2YgT2JqZWN0KXJldHVybiBiO3Rocm93IG5ldyBFcnJvcigiVHlwZSBub3QgcmVjb2duaXplZC4iKX0sYi5zZXQ9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiIGluIGEpdGhpc1tiXT1hW2JdO3JldHVybiB0aGlzfSxjcmVhdGVqcy5Mb2FkSXRlbT1jfSgpLGZ1bmN0aW9uKCl7dmFyIGE9e307YS5BQlNPTFVURV9QQVRUPS9eKD86XHcrOik/XC97Mn0vaSxhLlJFTEFUSVZFX1BBVFQ9L15bLi9dKj9cLy9pLGEuRVhURU5TSU9OX1BBVFQ9L1wvP1teL10rXC4oXHd7MSw1fSkkL2ksYS5wYXJzZVVSST1mdW5jdGlvbihiKXt2YXIgYz17YWJzb2x1dGU6ITEscmVsYXRpdmU6ITF9O2lmKG51bGw9PWIpcmV0dXJuIGM7dmFyIGQ9Yi5pbmRleE9mKCI/Iik7ZD4tMSYmKGI9Yi5zdWJzdHIoMCxkKSk7dmFyIGU7cmV0dXJuIGEuQUJTT0xVVEVfUEFUVC50ZXN0KGIpP2MuYWJzb2x1dGU9ITA6YS5SRUxBVElWRV9QQVRULnRlc3QoYikmJihjLnJlbGF0aXZlPSEwKSwoZT1iLm1hdGNoKGEuRVhURU5TSU9OX1BBVFQpKSYmKGMuZXh0ZW5zaW9uPWVbMV0udG9Mb3dlckNhc2UoKSksY30sYS5mb3JtYXRRdWVyeVN0cmluZz1mdW5jdGlvbihhLGIpe2lmKG51bGw9PWEpdGhyb3cgbmV3IEVycm9yKCJZb3UgbXVzdCBzcGVjaWZ5IGRhdGEuIik7dmFyIGM9W107Zm9yKHZhciBkIGluIGEpYy5wdXNoKGQrIj0iK2VzY2FwZShhW2RdKSk7cmV0dXJuIGImJihjPWMuY29uY2F0KGIpKSxjLmpvaW4oIiYiKX0sYS5idWlsZFBhdGg9ZnVuY3Rpb24oYSxiKXtpZihudWxsPT1iKXJldHVybiBhO3ZhciBjPVtdLGQ9YS5pbmRleE9mKCI/Iik7aWYoLTEhPWQpe3ZhciBlPWEuc2xpY2UoZCsxKTtjPWMuY29uY2F0KGUuc3BsaXQoIiYiKSl9cmV0dXJuLTEhPWQ/YS5zbGljZSgwLGQpKyI/Iit0aGlzLl9mb3JtYXRRdWVyeVN0cmluZyhiLGMpOmErIj8iK3RoaXMuX2Zvcm1hdFF1ZXJ5U3RyaW5nKGIsYyl9LGEuaXNDcm9zc0RvbWFpbj1mdW5jdGlvbihhKXt2YXIgYj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Yi5ocmVmPWEuc3JjO3ZhciBjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtjLmhyZWY9bG9jYXRpb24uaHJlZjt2YXIgZD0iIiE9Yi5ob3N0bmFtZSYmKGIucG9ydCE9Yy5wb3J0fHxiLnByb3RvY29sIT1jLnByb3RvY29sfHxiLmhvc3RuYW1lIT1jLmhvc3RuYW1lKTtyZXR1cm4gZH0sYS5pc0xvY2FsPWZ1bmN0aW9uKGEpe3ZhciBiPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtyZXR1cm4gYi5ocmVmPWEuc3JjLCIiPT1iLmhvc3RuYW1lJiYiZmlsZToiPT1iLnByb3RvY29sfSxhLmlzQmluYXJ5PWZ1bmN0aW9uKGEpe3N3aXRjaChhKXtjYXNlIGNyZWF0ZWpzLkFic3RyYWN0TG9hZGVyLklNQUdFOmNhc2UgY3JlYXRlanMuQWJzdHJhY3RMb2FkZXIuQklOQVJZOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxhLmlzSW1hZ2VUYWc9ZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50fSxhLmlzQXVkaW9UYWc9ZnVuY3Rpb24oYSl7cmV0dXJuIHdpbmRvdy5IVE1MQXVkaW9FbGVtZW50P2EgaW5zdGFuY2VvZiBIVE1MQXVkaW9FbGVtZW50OiExfSxhLmlzVmlkZW9UYWc9ZnVuY3Rpb24oYSl7cmV0dXJuIHdpbmRvdy5IVE1MVmlkZW9FbGVtZW50P2EgaW5zdGFuY2VvZiBIVE1MVmlkZW9FbGVtZW50OnZvaWQgMH0sYS5pc1RleHQ9ZnVuY3Rpb24oYSl7c3dpdGNoKGEpe2Nhc2UgY3JlYXRlanMuQWJzdHJhY3RMb2FkZXIuVEVYVDpjYXNlIGNyZWF0ZWpzLkFic3RyYWN0TG9hZGVyLkpTT046Y2FzZSBjcmVhdGVqcy5BYnN0cmFjdExvYWRlci5NQU5JRkVTVDpjYXNlIGNyZWF0ZWpzLkFic3RyYWN0TG9hZGVyLlhNTDpjYXNlIGNyZWF0ZWpzLkFic3RyYWN0TG9hZGVyLkNTUzpjYXNlIGNyZWF0ZWpzLkFic3RyYWN0TG9hZGVyLlNWRzpjYXNlIGNyZWF0ZWpzLkFic3RyYWN0TG9hZGVyLkpBVkFTQ1JJUFQ6Y2FzZSBjcmVhdGVqcy5BYnN0cmFjdExvYWRlci5TUFJJVEVTSEVFVDpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0sYS5nZXRUeXBlQnlFeHRlbnNpb249ZnVuY3Rpb24oYSl7aWYobnVsbD09YSlyZXR1cm4gY3JlYXRlanMuQWJzdHJhY3RMb2FkZXIuVEVYVDtzd2l0Y2goYS50b0xvd2VyQ2FzZSgpKXtjYXNlImpwZWciOmNhc2UianBnIjpjYXNlImdpZiI6Y2FzZSJwbmciOmNhc2Uid2VicCI6Y2FzZSJibXAiOnJldHVybiBjcmVhdGVqcy5BYnN0cmFjdExvYWRlci5JTUFHRTtjYXNlIm9nZyI6Y2FzZSJtcDMiOmNhc2Uid2VibSI6cmV0dXJuIGNyZWF0ZWpzLkFic3RyYWN0TG9hZGVyLlNPVU5EO2Nhc2UibXA0IjpjYXNlIndlYm0iOmNhc2UidHMiOnJldHVybiBjcmVhdGVqcy5BYnN0cmFjdExvYWRlci5WSURFTztjYXNlImpzb24iOnJldHVybiBjcmVhdGVqcy5BYnN0cmFjdExvYWRlci5KU09OO2Nhc2UieG1sIjpyZXR1cm4gY3JlYXRlanMuQWJzdHJhY3RMb2FkZXIuWE1MO2Nhc2UiY3NzIjpyZXR1cm4gY3JlYXRlanMuQWJzdHJhY3RMb2FkZXIuQ1NTO2Nhc2UianMiOnJldHVybiBjcmVhdGVqcy5BYnN0cmFjdExvYWRlci5KQVZBU0NSSVBUO2Nhc2Uic3ZnIjpyZXR1cm4gY3JlYXRlanMuQWJzdHJhY3RMb2FkZXIuU1ZHO2RlZmF1bHQ6cmV0dXJuIGNyZWF0ZWpzLkFic3RyYWN0TG9hZGVyLlRFWFR9fSxjcmVhdGVqcy5SZXF1ZXN0VXRpbHM9YX0oKSx0aGlzLmNyZWF0ZWpzPXRoaXMuY3JlYXRlanN8fHt9LGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGEoYSxiLGMpe3RoaXMuRXZlbnREaXNwYXRjaGVyX2NvbnN0cnVjdG9yKCksdGhpcy5sb2FkZWQ9ITEsdGhpcy5jYW5jZWxlZD0hMSx0aGlzLnByb2dyZXNzPTAsdGhpcy50eXBlPWMsdGhpcy5yZXN1bHRGb3JtYXR0ZXI9bnVsbCx0aGlzLl9pdGVtPWE/Y3JlYXRlanMuTG9hZEl0ZW0uY3JlYXRlKGEpOm51bGwsdGhpcy5fcHJlZmVyWEhSPWIsdGhpcy5fcmVzdWx0PW51bGwsdGhpcy5fcmF3UmVzdWx0PW51bGwsdGhpcy5fbG9hZGVkSXRlbXM9bnVsbCx0aGlzLl90YWdTcmNBdHRyaWJ1dGU9bnVsbCx0aGlzLl90YWc9bnVsbH12YXIgYj1jcmVhdGVqcy5leHRlbmQoYSxjcmVhdGVqcy5FdmVudERpc3BhdGNoZXIpLGM9YTtjLlBPU1Q9IlBPU1QiLGMuR0VUPSJHRVQiLGMuQklOQVJZPSJiaW5hcnkiLGMuQ1NTPSJjc3MiLGMuSU1BR0U9ImltYWdlIixjLkpBVkFTQ1JJUFQ9ImphdmFzY3JpcHQiLGMuSlNPTj0ianNvbiIsYy5KU09OUD0ianNvbnAiLGMuTUFOSUZFU1Q9Im1hbmlmZXN0IixjLlNPVU5EPSJzb3VuZCIsYy5WSURFTz0idmlkZW8iLGMuU1BSSVRFU0hFRVQ9InNwcml0ZXNoZWV0IixjLlNWRz0ic3ZnIixjLlRFWFQ9InRleHQiLGMuWE1MPSJ4bWwiLGIuZ2V0SXRlbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pdGVtfSxiLmdldFJlc3VsdD1mdW5jdGlvbihhKXtyZXR1cm4gYT90aGlzLl9yYXdSZXN1bHQ6dGhpcy5fcmVzdWx0fSxiLmdldFRhZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90YWd9LGIuc2V0VGFnPWZ1bmN0aW9uKGEpe3RoaXMuX3RhZz1hfSxiLmxvYWQ9ZnVuY3Rpb24oKXt0aGlzLl9jcmVhdGVSZXF1ZXN0KCksdGhpcy5fcmVxdWVzdC5vbigiY29tcGxldGUiLHRoaXMsdGhpcyksdGhpcy5fcmVxdWVzdC5vbigicHJvZ3Jlc3MiLHRoaXMsdGhpcyksdGhpcy5fcmVxdWVzdC5vbigibG9hZFN0YXJ0Iix0aGlzLHRoaXMpLHRoaXMuX3JlcXVlc3Qub24oImFib3J0Iix0aGlzLHRoaXMpLHRoaXMuX3JlcXVlc3Qub24oInRpbWVvdXQiLHRoaXMsdGhpcyksdGhpcy5fcmVxdWVzdC5vbigiZXJyb3IiLHRoaXMsdGhpcyk7dmFyIGE9bmV3IGNyZWF0ZWpzLkV2ZW50KCJpbml0aWFsaXplIik7YS5sb2FkZXI9dGhpcy5fcmVxdWVzdCx0aGlzLmRpc3BhdGNoRXZlbnQoYSksdGhpcy5fcmVxdWVzdC5sb2FkKCl9LGIuY2FuY2VsPWZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxlZD0hMCx0aGlzLmRlc3Ryb3koKX0sYi5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fcmVxdWVzdCYmKHRoaXMuX3JlcXVlc3QucmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKSx0aGlzLl9yZXF1ZXN0LmRlc3Ryb3koKSksdGhpcy5fcmVxdWVzdD1udWxsLHRoaXMuX2l0ZW09bnVsbCx0aGlzLl9yYXdSZXN1bHQ9bnVsbCx0aGlzLl9yZXN1bHQ9bnVsbCx0aGlzLl9sb2FkSXRlbXM9bnVsbCx0aGlzLnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCl9LGIuZ2V0TG9hZGVkSXRlbXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG9hZGVkSXRlbXN9LGIuX2NyZWF0ZVJlcXVlc3Q9ZnVuY3Rpb24oKXt0aGlzLl9yZXF1ZXN0PXRoaXMuX3ByZWZlclhIUj9uZXcgY3JlYXRlanMuWEhSUmVxdWVzdCh0aGlzLl9pdGVtKTpuZXcgY3JlYXRlanMuVGFnUmVxdWVzdCh0aGlzLl9pdGVtLHRoaXMuX3RhZ3x8dGhpcy5fY3JlYXRlVGFnKCksdGhpcy5fdGFnU3JjQXR0cmlidXRlKX0sYi5fY3JlYXRlVGFnPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGIuX3NlbmRMb2FkU3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLl9pc0NhbmNlbGVkKCl8fHRoaXMuZGlzcGF0Y2hFdmVudCgibG9hZHN0YXJ0Iil9LGIuX3NlbmRQcm9ncmVzcz1mdW5jdGlvbihhKXtpZighdGhpcy5faXNDYW5jZWxlZCgpKXt2YXIgYj1udWxsOyJudW1iZXIiPT10eXBlb2YgYT8odGhpcy5wcm9ncmVzcz1hLGI9bmV3IGNyZWF0ZWpzLlByb2dyZXNzRXZlbnQodGhpcy5wcm9ncmVzcykpOihiPWEsdGhpcy5wcm9ncmVzcz1hLmxvYWRlZC9hLnRvdGFsLGIucHJvZ3Jlc3M9dGhpcy5wcm9ncmVzcywoaXNOYU4odGhpcy5wcm9ncmVzcyl8fDEvMD09dGhpcy5wcm9ncmVzcykmJih0aGlzLnByb2dyZXNzPTApKSx0aGlzLmhhc0V2ZW50TGlzdGVuZXIoInByb2dyZXNzIikmJnRoaXMuZGlzcGF0Y2hFdmVudChiKX19LGIuX3NlbmRDb21wbGV0ZT1mdW5jdGlvbigpe2lmKCF0aGlzLl9pc0NhbmNlbGVkKCkpe3RoaXMubG9hZGVkPSEwO3ZhciBhPW5ldyBjcmVhdGVqcy5FdmVudCgiY29tcGxldGUiKTthLnJhd1Jlc3VsdD10aGlzLl9yYXdSZXN1bHQsbnVsbCE9dGhpcy5fcmVzdWx0JiYoYS5yZXN1bHQ9dGhpcy5fcmVzdWx0KSx0aGlzLmRpc3BhdGNoRXZlbnQoYSl9fSxiLl9zZW5kRXJyb3I9ZnVuY3Rpb24oYSl7IXRoaXMuX2lzQ2FuY2VsZWQoKSYmdGhpcy5oYXNFdmVudExpc3RlbmVyKCJlcnJvciIpJiYobnVsbD09YSYmKGE9bmV3IGNyZWF0ZWpzLkVycm9yRXZlbnQoIlBSRUxPQURfRVJST1JfRU1QVFkiKSksdGhpcy5kaXNwYXRjaEV2ZW50KGEpKX0sYi5faXNDYW5jZWxlZD1mdW5jdGlvbigpe3JldHVybiBudWxsPT13aW5kb3cuY3JlYXRlanN8fHRoaXMuY2FuY2VsZWQ/ITA6ITF9LGIucmVzdWx0Rm9ybWF0dGVyPW51bGwsYi5oYW5kbGVFdmVudD1mdW5jdGlvbihhKXtzd2l0Y2goYS50eXBlKXtjYXNlImNvbXBsZXRlIjp0aGlzLl9yYXdSZXN1bHQ9YS50YXJnZXQuX3Jlc3BvbnNlO3ZhciBiPXRoaXMucmVzdWx0Rm9ybWF0dGVyJiZ0aGlzLnJlc3VsdEZvcm1hdHRlcih0aGlzKSxjPXRoaXM7YiBpbnN0YW5jZW9mIEZ1bmN0aW9uP2IoZnVuY3Rpb24oYSl7Yy5fcmVzdWx0PWEsYy5fc2VuZENvbXBsZXRlKCl9KToodGhpcy5fcmVzdWx0PWJ8fHRoaXMuX3Jhd1Jlc3VsdCx0aGlzLl9zZW5kQ29tcGxldGUoKSk7YnJlYWs7Y2FzZSJwcm9ncmVzcyI6dGhpcy5fc2VuZFByb2dyZXNzKGEpO2JyZWFrO2Nhc2UiZXJyb3IiOnRoaXMuX3NlbmRFcnJvcihhKTticmVhaztjYXNlImxvYWRzdGFydCI6dGhpcy5fc2VuZExvYWRTdGFydCgpO2JyZWFrO2Nhc2UiYWJvcnQiOmNhc2UidGltZW91dCI6dGhpcy5faXNDYW5jZWxlZCgpfHx0aGlzLmRpc3BhdGNoRXZlbnQoYS50eXBlKX19LGIuYnVpbGRQYXRoPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGNyZWF0ZWpzLlJlcXVlc3RVdGlscy5idWlsZFBhdGgoYSxiKX0sYi50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJbUHJlbG9hZEpTIEFic3RyYWN0TG9hZGVyXSJ9LGNyZWF0ZWpzLkFic3RyYWN0TG9hZGVyPWNyZWF0ZWpzLnByb21vdGUoYSwiRXZlbnREaXNwYXRjaGVyIil9KCksdGhpcy5jcmVhdGVqcz10aGlzLmNyZWF0ZWpzfHx7fSxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBhKGEsYixjKXt0aGlzLkFic3RyYWN0TG9hZGVyX2NvbnN0cnVjdG9yKGEsYixjKSx0aGlzLnJlc3VsdEZvcm1hdHRlcj10aGlzLl9mb3JtYXRSZXN1bHQsdGhpcy5fdGFnU3JjQXR0cmlidXRlPSJzcmMifXZhciBiPWNyZWF0ZWpzLmV4dGVuZChhLGNyZWF0ZWpzLkFic3RyYWN0TG9hZGVyKTtiLmxvYWQ9ZnVuY3Rpb24oKXt0aGlzLl90YWd8fCh0aGlzLl90YWc9dGhpcy5fY3JlYXRlVGFnKHRoaXMuX2l0ZW0uc3JjKSksdGhpcy5fdGFnLnByZWxvYWQ9ImF1dG8iLHRoaXMuX3RhZy5sb2FkKCksdGhpcy5BYnN0cmFjdExvYWRlcl9sb2FkKCl9LGIuX2NyZWF0ZVRhZz1mdW5jdGlvbigpe30sYi5fY3JlYXRlUmVxdWVzdD1mdW5jdGlvbigpe3RoaXMuX3JlcXVlc3Q9dGhpcy5fcHJlZmVyWEhSP25ldyBjcmVhdGVqcy5YSFJSZXF1ZXN0KHRoaXMuX2l0ZW0pOm5ldyBjcmVhdGVqcy5NZWRpYVRhZ1JlcXVlc3QodGhpcy5faXRlbSx0aGlzLl90YWd8fHRoaXMuX2NyZWF0ZVRhZygpLHRoaXMuX3RhZ1NyY0F0dHJpYnV0ZSl9LGIuX2Zvcm1hdFJlc3VsdD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fdGFnLnJlbW92ZUV2ZW50TGlzdGVuZXImJnRoaXMuX3RhZy5yZW1vdmVFdmVudExpc3RlbmVyKCJjYW5wbGF5dGhyb3VnaCIsdGhpcy5fbG9hZGVkSGFuZGxlciksdGhpcy5fdGFnLm9uc3RhbGxlZD1udWxsLHRoaXMuX3ByZWZlclhIUiYmKGEuZ2V0VGFnKCkuc3JjPWEuZ2V0UmVzdWx0KCEwKSksYS5nZXRUYWcoKX0sY3JlYXRlanMuQWJzdHJhY3RNZWRpYUxvYWRlcj1jcmVhdGVqcy5wcm9tb3RlKGEsIkFic3RyYWN0TG9hZGVyIil9KCksdGhpcy5jcmVhdGVqcz10aGlzLmNyZWF0ZWpzfHx7fSxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgYT1mdW5jdGlvbihhKXt0aGlzLl9pdGVtPWF9LGI9Y3JlYXRlanMuZXh0ZW5kKGEsY3JlYXRlanMuRXZlbnREaXNwYXRjaGVyKTtiLmxvYWQ9ZnVuY3Rpb24oKXt9LGIuZGVzdHJveT1mdW5jdGlvbigpe30sYi5jYW5jZWw9ZnVuY3Rpb24oKXt9LGNyZWF0ZWpzLkFic3RyYWN0UmVxdWVzdD1jcmVhdGVqcy5wcm9tb3RlKGEsIkV2ZW50RGlzcGF0Y2hlciIpfSgpLHRoaXMuY3JlYXRlanM9dGhpcy5jcmVhdGVqc3x8e30sZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYShhLGIsYyl7dGhpcy5BYnN0cmFjdFJlcXVlc3RfY29uc3RydWN0b3IoYSksdGhpcy5fdGFnPWIsdGhpcy5fdGFnU3JjQXR0cmlidXRlPWMsdGhpcy5fbG9hZGVkSGFuZGxlcj1jcmVhdGVqcy5wcm94eSh0aGlzLl9oYW5kbGVUYWdDb21wbGV0ZSx0aGlzKSx0aGlzLl9hZGRlZFRvRE9NPSExLHRoaXMuX3N0YXJ0VGFnVmlzaWJpbGl0eT1udWxsfXZhciBiPWNyZWF0ZWpzLmV4dGVuZChhLGNyZWF0ZWpzLkFic3RyYWN0UmVxdWVzdCk7Yi5sb2FkPWZ1bmN0aW9uKCl7bnVsbD09dGhpcy5fdGFnLnBhcmVudE5vZGUmJih3aW5kb3cuZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLl90YWcpLHRoaXMuX2FkZGVkVG9ET009ITApLHRoaXMuX3RhZy5vbmxvYWQ9Y3JlYXRlanMucHJveHkodGhpcy5faGFuZGxlVGFnQ29tcGxldGUsdGhpcyksdGhpcy5fdGFnLm9ucmVhZHlzdGF0ZWNoYW5nZT1jcmVhdGVqcy5wcm94eSh0aGlzLl9oYW5kbGVSZWFkeVN0YXRlQ2hhbmdlLHRoaXMpO3ZhciBhPW5ldyBjcmVhdGVqcy5FdmVudCgiaW5pdGlhbGl6ZSIpO2EubG9hZGVyPXRoaXMuX3RhZyx0aGlzLmRpc3BhdGNoRXZlbnQoYSksdGhpcy5faGlkZVRhZygpLHRoaXMuX3RhZ1t0aGlzLl90YWdTcmNBdHRyaWJ1dGVdPXRoaXMuX2l0ZW0uc3JjfSxiLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9jbGVhbigpLHRoaXMuX3RhZz1udWxsLHRoaXMuQWJzdHJhY3RSZXF1ZXN0X2Rlc3Ryb3koKX0sYi5faGFuZGxlUmVhZHlTdGF0ZUNoYW5nZT1mdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLl9sb2FkVGltZW91dCk7dmFyIGE9dGhpcy5fdGFnOygibG9hZGVkIj09YS5yZWFkeVN0YXRlfHwiY29tcGxldGUiPT1hLnJlYWR5U3RhdGUpJiZ0aGlzLl9oYW5kbGVUYWdDb21wbGV0ZSgpfSxiLl9oYW5kbGVUYWdDb21wbGV0ZT1mdW5jdGlvbigpe3RoaXMuX3Jhd1Jlc3VsdD10aGlzLl90YWcsdGhpcy5fcmVzdWx0PXRoaXMucmVzdWx0Rm9ybWF0dGVyJiZ0aGlzLnJlc3VsdEZvcm1hdHRlcih0aGlzKXx8dGhpcy5fcmF3UmVzdWx0LHRoaXMuX2NsZWFuKCksdGhpcy5fc2hvd1RhZygpLHRoaXMuZGlzcGF0Y2hFdmVudCgiY29tcGxldGUiKX0sYi5fY2xlYW49ZnVuY3Rpb24oKXt0aGlzLl90YWcub25sb2FkPW51bGwsdGhpcy5fdGFnLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLHRoaXMuX2FkZGVkVG9ET00mJm51bGwhPXRoaXMuX3RhZy5wYXJlbnROb2RlJiZ0aGlzLl90YWcucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl90YWcpfSxiLl9oaWRlVGFnPWZ1bmN0aW9uKCl7dGhpcy5fc3RhcnRUYWdWaXNpYmlsaXR5PXRoaXMuX3RhZy5zdHlsZS52aXNpYmlsaXR5LHRoaXMuX3RhZy5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4ifSxiLl9zaG93VGFnPWZ1bmN0aW9uKCl7dGhpcy5fdGFnLnN0eWxlLnZpc2liaWxpdHk9dGhpcy5fc3RhcnRUYWdWaXNpYmlsaXR5fSxiLl9oYW5kbGVTdGFsbGVkPWZ1bmN0aW9uKCl7fSxjcmVhdGVqcy5UYWdSZXF1ZXN0PWNyZWF0ZWpzLnByb21vdGUoYSwiQWJzdHJhY3RSZXF1ZXN0Iil9KCksdGhpcy5jcmVhdGVqcz10aGlzLmNyZWF0ZWpzfHx7fSxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBhKGEsYixjKXt0aGlzLkFic3RyYWN0UmVxdWVzdF9jb25zdHJ1Y3RvcihhKSx0aGlzLl90YWc9Yix0aGlzLl90YWdTcmNBdHRyaWJ1dGU9Yyx0aGlzLl9sb2FkZWRIYW5kbGVyPWNyZWF0ZWpzLnByb3h5KHRoaXMuX2hhbmRsZVRhZ0NvbXBsZXRlLHRoaXMpfXZhciBiPWNyZWF0ZWpzLmV4dGVuZChhLGNyZWF0ZWpzLlRhZ1JlcXVlc3QpO2IubG9hZD1mdW5jdGlvbigpe3RoaXMuX3RhZy5vbnN0YWxsZWQ9Y3JlYXRlanMucHJveHkodGhpcy5faGFuZGxlU3RhbGxlZCx0aGlzKSx0aGlzLl90YWcub25wcm9ncmVzcz1jcmVhdGVqcy5wcm94eSh0aGlzLl9oYW5kbGVQcm9ncmVzcyx0aGlzKSx0aGlzLl90YWcuYWRkRXZlbnRMaXN0ZW5lciYmdGhpcy5fdGFnLmFkZEV2ZW50TGlzdGVuZXIoImNhbnBsYXl0aHJvdWdoIix0aGlzLl9sb2FkZWRIYW5kbGVyLCExKSx0aGlzLlRhZ1JlcXVlc3RfbG9hZCgpfSxiLl9oYW5kbGVSZWFkeVN0YXRlQ2hhbmdlPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHRoaXMuX2xvYWRUaW1lb3V0KTt2YXIgYT10aGlzLl90YWc7KCJsb2FkZWQiPT1hLnJlYWR5U3RhdGV8fCJjb21wbGV0ZSI9PWEucmVhZHlTdGF0ZSkmJnRoaXMuX2hhbmRsZVRhZ0NvbXBsZXRlKCl9LGIuX2hhbmRsZVN0YWxsZWQ9ZnVuY3Rpb24oKXt9LGIuX2hhbmRsZVByb2dyZXNzPWZ1bmN0aW9uKGEpe2lmKGEmJiEoYS5sb2FkZWQ+MCYmMD09YS50b3RhbCkpe3ZhciBiPW5ldyBjcmVhdGVqcy5Qcm9ncmVzc0V2ZW50KGEubG9hZGVkLGEudG90YWwpO3RoaXMuZGlzcGF0Y2hFdmVudChiKX19LGIuX2NsZWFuPWZ1bmN0aW9uKCl7dGhpcy5fdGFnLnJlbW92ZUV2ZW50TGlzdGVuZXImJnRoaXMuX3RhZy5yZW1vdmVFdmVudExpc3RlbmVyKCJjYW5wbGF5dGhyb3VnaCIsdGhpcy5fbG9hZGVkSGFuZGxlciksdGhpcy5fdGFnLm9uc3RhbGxlZD1udWxsLHRoaXMuX3RhZy5vbnByb2dyZXNzPW51bGwsdGhpcy5UYWdSZXF1ZXN0X19jbGVhbigpfSxjcmVhdGVqcy5NZWRpYVRhZ1JlcXVlc3Q9Y3JlYXRlanMucHJvbW90ZShhLCJUYWdSZXF1ZXN0Iil9KCksdGhpcy5jcmVhdGVqcz10aGlzLmNyZWF0ZWpzfHx7fSxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBhKGEpe3RoaXMuQWJzdHJhY3RSZXF1ZXN0X2NvbnN0cnVjdG9yKGEpLHRoaXMuX3JlcXVlc3Q9bnVsbCx0aGlzLl9sb2FkVGltZW91dD1udWxsLHRoaXMuX3hockxldmVsPTEsdGhpcy5fcmVzcG9uc2U9bnVsbCx0aGlzLl9yYXdSZXNwb25zZT1udWxsLHRoaXMuX2NhbmNlbGVkPSExLHRoaXMuX2hhbmRsZUxvYWRTdGFydFByb3h5PWNyZWF0ZWpzLnByb3h5KHRoaXMuX2hhbmRsZUxvYWRTdGFydCx0aGlzKSx0aGlzLl9oYW5kbGVQcm9ncmVzc1Byb3h5PWNyZWF0ZWpzLnByb3h5KHRoaXMuX2hhbmRsZVByb2dyZXNzLHRoaXMpLHRoaXMuX2hhbmRsZUFib3J0UHJveHk9Y3JlYXRlanMucHJveHkodGhpcy5faGFuZGxlQWJvcnQsdGhpcyksdGhpcy5faGFuZGxlRXJyb3JQcm94eT1jcmVhdGVqcy5wcm94eSh0aGlzLl9oYW5kbGVFcnJvcix0aGlzKSx0aGlzLl9oYW5kbGVUaW1lb3V0UHJveHk9Y3JlYXRlanMucHJveHkodGhpcy5faGFuZGxlVGltZW91dCx0aGlzKSx0aGlzLl9oYW5kbGVMb2FkUHJveHk9Y3JlYXRlanMucHJveHkodGhpcy5faGFuZGxlTG9hZCx0aGlzKSx0aGlzLl9oYW5kbGVSZWFkeVN0YXRlQ2hhbmdlUHJveHk9Y3JlYXRlanMucHJveHkodGhpcy5faGFuZGxlUmVhZHlTdGF0ZUNoYW5nZSx0aGlzKSwhdGhpcy5fY3JlYXRlWEhSKGEpfXZhciBiPWNyZWF0ZWpzLmV4dGVuZChhLGNyZWF0ZWpzLkFic3RyYWN0UmVxdWVzdCk7YS5BQ1RJVkVYX1ZFUlNJT05TPVsiTXN4bWwyLlhNTEhUVFAuNi4wIiwiTXN4bWwyLlhNTEhUVFAuNS4wIiwiTXN4bWwyLlhNTEhUVFAuNC4wIiwiTVNYTUwyLlhNTEhUVFAuMy4wIiwiTVNYTUwyLlhNTEhUVFAiLCJNaWNyb3NvZnQuWE1MSFRUUCJdLGIuZ2V0UmVzdWx0PWZ1bmN0aW9uKGEpe3JldHVybiBhJiZ0aGlzLl9yYXdSZXNwb25zZT90aGlzLl9yYXdSZXNwb25zZTp0aGlzLl9yZXNwb25zZX0sYi5jYW5jZWw9ZnVuY3Rpb24oKXt0aGlzLmNhbmNlbGVkPSEwLHRoaXMuX2NsZWFuKCksdGhpcy5fcmVxdWVzdC5hYm9ydCgpfSxiLmxvYWQ9ZnVuY3Rpb24oKXtpZihudWxsPT10aGlzLl9yZXF1ZXN0KXJldHVybiB2b2lkIHRoaXMuX2hhbmRsZUVycm9yKCk7dGhpcy5fcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCJsb2Fkc3RhcnQiLHRoaXMuX2hhbmRsZUxvYWRTdGFydFByb3h5LCExKSx0aGlzLl9yZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIix0aGlzLl9oYW5kbGVQcm9ncmVzc1Byb3h5LCExKSx0aGlzLl9yZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoImFib3J0Iix0aGlzLl9oYW5kbGVBYm9ydFByb3h5LCExKSx0aGlzLl9yZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIix0aGlzLl9oYW5kbGVFcnJvclByb3h5LCExKSx0aGlzLl9yZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoInRpbWVvdXQiLHRoaXMuX2hhbmRsZVRpbWVvdXRQcm94eSwhMSksdGhpcy5fcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCJsb2FkIix0aGlzLl9oYW5kbGVMb2FkUHJveHksITEpLHRoaXMuX3JlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigicmVhZHlzdGF0ZWNoYW5nZSIsdGhpcy5faGFuZGxlUmVhZHlTdGF0ZUNoYW5nZVByb3h5LCExKSwxPT10aGlzLl94aHJMZXZlbCYmKHRoaXMuX2xvYWRUaW1lb3V0PXNldFRpbWVvdXQoY3JlYXRlanMucHJveHkodGhpcy5faGFuZGxlVGltZW91dCx0aGlzKSx0aGlzLl9pdGVtLmxvYWRUaW1lb3V0KSk7dHJ5e3RoaXMuX2l0ZW0udmFsdWVzJiZ0aGlzLl9pdGVtLm1ldGhvZCE9Y3JlYXRlanMuQWJzdHJhY3RMb2FkZXIuR0VUP3RoaXMuX2l0ZW0ubWV0aG9kPT1jcmVhdGVqcy5BYnN0cmFjdExvYWRlci5QT1NUJiZ0aGlzLl9yZXF1ZXN0LnNlbmQoY3JlYXRlanMuUmVxdWVzdFV0aWxzLmZvcm1hdFF1ZXJ5U3RyaW5nKHRoaXMuX2l0ZW0udmFsdWVzKSk6dGhpcy5fcmVxdWVzdC5zZW5kKCl9Y2F0Y2goYSl7dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBjcmVhdGVqcy5FcnJvckV2ZW50KCJYSFJfU0VORCIsbnVsbCxhKSl9fSxiLnNldFJlc3BvbnNlVHlwZT1mdW5jdGlvbihhKXt0aGlzLl9yZXF1ZXN0LnJlc3BvbnNlVHlwZT1hfSxiLmdldEFsbFJlc3BvbnNlSGVhZGVycz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXF1ZXN0LmdldEFsbFJlc3BvbnNlSGVhZGVycyBpbnN0YW5jZW9mIEZ1bmN0aW9uP3RoaXMuX3JlcXVlc3QuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCk6bnVsbH0sYi5nZXRSZXNwb25zZUhlYWRlcj1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fcmVxdWVzdC5nZXRSZXNwb25zZUhlYWRlciBpbnN0YW5jZW9mIEZ1bmN0aW9uP3RoaXMuX3JlcXVlc3QuZ2V0UmVzcG9uc2VIZWFkZXIoYSk6bnVsbH0sYi5faGFuZGxlUHJvZ3Jlc3M9ZnVuY3Rpb24oYSl7aWYoYSYmIShhLmxvYWRlZD4wJiYwPT1hLnRvdGFsKSl7dmFyIGI9bmV3IGNyZWF0ZWpzLlByb2dyZXNzRXZlbnQoYS5sb2FkZWQsYS50b3RhbCk7dGhpcy5kaXNwYXRjaEV2ZW50KGIpfX0sYi5faGFuZGxlTG9hZFN0YXJ0PWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHRoaXMuX2xvYWRUaW1lb3V0KSx0aGlzLmRpc3BhdGNoRXZlbnQoImxvYWRzdGFydCIpfSxiLl9oYW5kbGVBYm9ydD1mdW5jdGlvbihhKXt0aGlzLl9jbGVhbigpLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgY3JlYXRlanMuRXJyb3JFdmVudCgiWEhSX0FCT1JURUQiLG51bGwsYSkpfSxiLl9oYW5kbGVFcnJvcj1mdW5jdGlvbihhKXt0aGlzLl9jbGVhbigpLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgY3JlYXRlanMuRXJyb3JFdmVudChhLm1lc3NhZ2UpKX0sYi5faGFuZGxlUmVhZHlTdGF0ZUNoYW5nZT1mdW5jdGlvbigpezQ9PXRoaXMuX3JlcXVlc3QucmVhZHlTdGF0ZSYmdGhpcy5faGFuZGxlTG9hZCgpfSxiLl9oYW5kbGVMb2FkPWZ1bmN0aW9uKCl7aWYoIXRoaXMubG9hZGVkKXt0aGlzLmxvYWRlZD0hMDt2YXIgYT10aGlzLl9jaGVja0Vycm9yKCk7aWYoYSlyZXR1cm4gdm9pZCB0aGlzLl9oYW5kbGVFcnJvcihhKTt0aGlzLl9yZXNwb25zZT10aGlzLl9nZXRSZXNwb25zZSgpLHRoaXMuX2NsZWFuKCksdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBjcmVhdGVqcy5FdmVudCgiY29tcGxldGUiKSl9fSxiLl9oYW5kbGVUaW1lb3V0PWZ1bmN0aW9uKGEpe3RoaXMuX2NsZWFuKCksdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBjcmVhdGVqcy5FcnJvckV2ZW50KCJQUkVMT0FEX1RJTUVPVVQiLG51bGwsYSkpfSxiLl9jaGVja0Vycm9yPWZ1bmN0aW9uKCl7dmFyIGE9cGFyc2VJbnQodGhpcy5fcmVxdWVzdC5zdGF0dXMpO3N3aXRjaChhKXtjYXNlIDQwNDpjYXNlIDA6cmV0dXJuIG5ldyBFcnJvcihhKX1yZXR1cm4gbnVsbH0sYi5fZ2V0UmVzcG9uc2U9ZnVuY3Rpb24oKXtpZihudWxsIT10aGlzLl9yZXNwb25zZSlyZXR1cm4gdGhpcy5fcmVzcG9uc2U7aWYobnVsbCE9dGhpcy5fcmVxdWVzdC5yZXNwb25zZSlyZXR1cm4gdGhpcy5fcmVxdWVzdC5yZXNwb25zZTt0cnl7aWYobnVsbCE9dGhpcy5fcmVxdWVzdC5yZXNwb25zZVRleHQpcmV0dXJuIHRoaXMuX3JlcXVlc3QucmVzcG9uc2VUZXh0fWNhdGNoKGEpe310cnl7aWYobnVsbCE9dGhpcy5fcmVxdWVzdC5yZXNwb25zZVhNTClyZXR1cm4gdGhpcy5fcmVxdWVzdC5yZXNwb25zZVhNTH1jYXRjaChhKXt9cmV0dXJuIG51bGx9LGIuX2NyZWF0ZVhIUj1mdW5jdGlvbihhKXt2YXIgYj1jcmVhdGVqcy5SZXF1ZXN0VXRpbHMuaXNDcm9zc0RvbWFpbihhKSxjPXt9LGQ9bnVsbDtpZih3aW5kb3cuWE1MSHR0cFJlcXVlc3QpZD1uZXcgWE1MSHR0cFJlcXVlc3QsYiYmdm9pZCAwPT09ZC53aXRoQ3JlZGVudGlhbHMmJndpbmRvdy5YRG9tYWluUmVxdWVzdCYmKGQ9bmV3IFhEb21haW5SZXF1ZXN0KTtlbHNle2Zvcih2YXIgZT0wLGY9cy5BQ1RJVkVYX1ZFUlNJT05TLmxlbmd0aDtmPmU7ZSsrKXt7cy5BQ1RJVkVYX1ZFUlNJT05TW2VdfXRyeXtkPW5ldyBBY3RpdmVYT2JqZWN0KGF4VmVyc2lvbnMpO2JyZWFrfWNhdGNoKGcpe319aWYobnVsbD09ZClyZXR1cm4hMX1udWxsPT1hLm1pbWVUeXBlJiZjcmVhdGVqcy5SZXF1ZXN0VXRpbHMuaXNUZXh0KGEudHlwZSkmJihhLm1pbWVUeXBlPSJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiksYS5taW1lVHlwZSYmZC5vdmVycmlkZU1pbWVUeXBlJiZkLm92ZXJyaWRlTWltZVR5cGUoYS5taW1lVHlwZSksdGhpcy5feGhyTGV2ZWw9InN0cmluZyI9PXR5cGVvZiBkLnJlc3BvbnNlVHlwZT8yOjE7dmFyIGg9bnVsbDtpZihoPWEubWV0aG9kPT1jcmVhdGVqcy5BYnN0cmFjdExvYWRlci5HRVQ/Y3JlYXRlanMuUmVxdWVzdFV0aWxzLmJ1aWxkUGF0aChhLnNyYyxhLnZhbHVlcyk6YS5zcmMsZC5vcGVuKGEubWV0aG9kfHxjcmVhdGVqcy5BYnN0cmFjdExvYWRlci5HRVQsaCwhMCksYiYmZCBpbnN0YW5jZW9mIFhNTEh0dHBSZXF1ZXN0JiYxPT10aGlzLl94aHJMZXZlbCYmKGMuT3JpZ2luPWxvY2F0aW9uLm9yaWdpbiksYS52YWx1ZXMmJmEubWV0aG9kPT1jcmVhdGVqcy5BYnN0cmFjdExvYWRlci5QT1NUJiYoY1siQ29udGVudC1UeXBlIl09ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpLGJ8fGNbIlgtUmVxdWVzdGVkLVdpdGgiXXx8KGNbIlgtUmVxdWVzdGVkLVdpdGgiXT0iWE1MSHR0cFJlcXVlc3QiKSxhLmhlYWRlcnMpZm9yKHZhciBpIGluIGEuaGVhZGVycyljW2ldPWEuaGVhZGVyc1tpXTtmb3IoaSBpbiBjKWQuc2V0UmVxdWVzdEhlYWRlcihpLGNbaV0pO3JldHVybiBkIGluc3RhbmNlb2YgWE1MSHR0cFJlcXVlc3QmJnZvaWQgMCE9PWEud2l0aENyZWRlbnRpYWxzJiYoZC53aXRoQ3JlZGVudGlhbHM9YS53aXRoQ3JlZGVudGlhbHMpLHRoaXMuX3JlcXVlc3Q9ZCwhMH0sYi5fY2xlYW49ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy5fbG9hZFRpbWVvdXQpLHRoaXMuX3JlcXVlc3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZHN0YXJ0Iix0aGlzLl9oYW5kbGVMb2FkU3RhcnRQcm94eSksdGhpcy5fcmVxdWVzdC5yZW1vdmVFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsdGhpcy5faGFuZGxlUHJvZ3Jlc3NQcm94eSksdGhpcy5fcmVxdWVzdC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsdGhpcy5faGFuZGxlQWJvcnRQcm94eSksdGhpcy5fcmVxdWVzdC5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsdGhpcy5faGFuZGxlRXJyb3JQcm94eSksdGhpcy5fcmVxdWVzdC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0aW1lb3V0Iix0aGlzLl9oYW5kbGVUaW1lb3V0UHJveHkpLHRoaXMuX3JlcXVlc3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsdGhpcy5faGFuZGxlTG9hZFByb3h5KSx0aGlzLl9yZXF1ZXN0LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlYWR5c3RhdGVjaGFuZ2UiLHRoaXMuX2hhbmRsZVJlYWR5U3RhdGVDaGFuZ2VQcm94eSl9LGIudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iW1ByZWxvYWRKUyBYSFJSZXF1ZXN0XSJ9LGNyZWF0ZWpzLlhIUlJlcXVlc3Q9Y3JlYXRlanMucHJvbW90ZShhLCJBYnN0cmFjdFJlcXVlc3QiKX0oKSx0aGlzLmNyZWF0ZWpzPXRoaXMuY3JlYXRlanN8fHt9LGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGEoYSxiLGMpe3RoaXMuQWJzdHJhY3RMb2FkZXJfY29uc3RydWN0b3IoKSx0aGlzLmluaXQoYSxiLGMpfXZhciBiPWNyZWF0ZWpzLmV4dGVuZChhLGNyZWF0ZWpzLkFic3RyYWN0TG9hZGVyKSxjPWE7Yi5pbml0PWZ1bmN0aW9uKGEsYixjKXt0aGlzLnVzZVhIUj0hMCx0aGlzLnByZWZlclhIUj0hMCx0aGlzLl9wcmVmZXJYSFI9ITAsdGhpcy5zZXRQcmVmZXJYSFIoYSksdGhpcy5zdG9wT25FcnJvcj0hMSx0aGlzLm1haW50YWluU2NyaXB0T3JkZXI9ITAsdGhpcy5uZXh0PW51bGwsdGhpcy5fcGF1c2VkPSExLHRoaXMuX2Jhc2VQYXRoPWIsdGhpcy5fY3Jvc3NPcmlnaW49Yyx0aGlzLl90eXBlQ2FsbGJhY2tzPXt9LHRoaXMuX2V4dGVuc2lvbkNhbGxiYWNrcz17fSx0aGlzLl9sb2FkU3RhcnRXYXNEaXNwYXRjaGVkPSExLHRoaXMuX21heENvbm5lY3Rpb25zPTEsdGhpcy5fY3VycmVudGx5TG9hZGluZ1NjcmlwdD1udWxsLHRoaXMuX2N1cnJlbnRMb2Fkcz1bXSx0aGlzLl9sb2FkUXVldWU9W10sdGhpcy5fbG9hZFF1ZXVlQmFja3VwPVtdLHRoaXMuX2xvYWRJdGVtc0J5SWQ9e30sdGhpcy5fbG9hZEl0ZW1zQnlTcmM9e30sdGhpcy5fbG9hZGVkUmVzdWx0cz17fSx0aGlzLl9sb2FkZWRSYXdSZXN1bHRzPXt9LHRoaXMuX251bUl0ZW1zPTAsdGhpcy5fbnVtSXRlbXNMb2FkZWQ9MCx0aGlzLl9zY3JpcHRPcmRlcj1bXSx0aGlzLl9sb2FkZWRTY3JpcHRzPVtdLHRoaXMuX2xhc3RQcm9ncmVzcz0wLzAsdGhpcy5fYXZhaWxhYmxlTG9hZGVycz1bY3JlYXRlanMuSW1hZ2VMb2FkZXIsY3JlYXRlanMuSmF2YVNjcmlwdExvYWRlcixjcmVhdGVqcy5DU1NMb2FkZXIsY3JlYXRlanMuSlNPTkxvYWRlcixjcmVhdGVqcy5KU09OUExvYWRlcixjcmVhdGVqcy5Tb3VuZExvYWRlcixjcmVhdGVqcy5NYW5pZmVzdExvYWRlcixjcmVhdGVqcy5TcHJpdGVTaGVldExvYWRlcixjcmVhdGVqcy5YTUxMb2FkZXIsY3JlYXRlanMuU1ZHTG9hZGVyLGNyZWF0ZWpzLkJpbmFyeUxvYWRlcixjcmVhdGVqcy5WaWRlb0xvYWRlcixjcmVhdGVqcy5UZXh0TG9hZGVyXSx0aGlzLl9kZWZhdWx0TG9hZGVyTGVuZ3RoPXRoaXMuX2F2YWlsYWJsZUxvYWRlcnMubGVuZ3RofSxjLmxvYWRUaW1lb3V0PThlMyxjLkxPQURfVElNRU9VVD0wLGMuQklOQVJZPWNyZWF0ZWpzLkFic3RyYWN0TG9hZGVyLkJJTkFSWSxjLkNTUz1jcmVhdGVqcy5BYnN0cmFjdExvYWRlci5DU1MsYy5JTUFHRT1jcmVhdGVqcy5BYnN0cmFjdExvYWRlci5JTUFHRSxjLkpBVkFTQ1JJUFQ9Y3JlYXRlanMuQWJzdHJhY3RMb2FkZXIuSkFWQVNDUklQVCxjLkpTT049Y3JlYXRlanMuQWJzdHJhY3RMb2FkZXIuSlNPTixjLkpTT05QPWNyZWF0ZWpzLkFic3RyYWN0TG9hZGVyLkpTT05QLGMuTUFOSUZFU1Q9Y3JlYXRlanMuQWJzdHJhY3RMb2FkZXIuTUFOSUZFU1QsYy5TT1VORD1jcmVhdGVqcy5BYnN0cmFjdExvYWRlci5TT1VORCxjLlZJREVPPWNyZWF0ZWpzLkFic3RyYWN0TG9hZGVyLlZJREVPLGMuU1ZHPWNyZWF0ZWpzLkFic3RyYWN0TG9hZGVyLlNWRyxjLlRFWFQ9Y3JlYXRlanMuQWJzdHJhY3RMb2FkZXIuVEVYVCxjLlhNTD1jcmVhdGVqcy5BYnN0cmFjdExvYWRlci5YTUwsYy5QT1NUPWNyZWF0ZWpzLkFic3RyYWN0TG9hZGVyLlBPU1QsYy5HRVQ9Y3JlYXRlanMuQWJzdHJhY3RMb2FkZXIuR0VULGIucmVnaXN0ZXJMb2FkZXI9ZnVuY3Rpb24oYSl7aWYoIWF8fCFhLmNhbkxvYWRJdGVtKXRocm93IG5ldyBFcnJvcigibG9hZGVyIGlzIG9mIGFuIGluY29ycmVjdCB0eXBlLiIpO2lmKC0xIT10aGlzLl9hdmFpbGFibGVMb2FkZXJzLmluZGV4T2YoYSkpdGhyb3cgbmV3IEVycm9yKCJsb2FkZXIgYWxyZWFkeSBleGlzdHMuIik7dGhpcy5fYXZhaWxhYmxlTG9hZGVycy51bnNoaWZ0KGEpfSxiLnVucmVnaXN0ZXJMb2FkZXI9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5fYXZhaWxhYmxlTG9hZGVycy5pbmRleE9mKGEpOy0xIT1iJiZiPHRoaXMuX2RlZmF1bHRMb2FkZXJMZW5ndGgtMSYmdGhpcy5fYXZhaWxhYmxlTG9hZGVycy5zcGxpY2UoYiwxKX0sYi5zZXRVc2VYSFI9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuc2V0UHJlZmVyWEhSKGEpfSxiLnNldFByZWZlclhIUj1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wcmVmZXJYSFI9MCE9YSYmbnVsbCE9d2luZG93LlhNTEh0dHBSZXF1ZXN0LHRoaXMucHJlZmVyWEhSfSxiLnJlbW92ZUFsbD1mdW5jdGlvbigpe3RoaXMucmVtb3ZlKCl9LGIucmVtb3ZlPWZ1bmN0aW9uKGEpe3ZhciBiPW51bGw7aWYoIWF8fGEgaW5zdGFuY2VvZiBBcnJheSl7aWYoYSliPWE7ZWxzZSBpZihhcmd1bWVudHMubGVuZ3RoPjApcmV0dXJufWVsc2UgYj1bYV07dmFyIGM9ITE7aWYoYil7Zm9yKDtiLmxlbmd0aDspe3ZhciBkPWIucG9wKCksZT10aGlzLmdldFJlc3VsdChkKTtmb3IoZj10aGlzLl9sb2FkUXVldWUubGVuZ3RoLTE7Zj49MDtmLS0paWYoZz10aGlzLl9sb2FkUXVldWVbZl0uZ2V0SXRlbSgpLGcuaWQ9PWR8fGcuc3JjPT1kKXt0aGlzLl9sb2FkUXVldWUuc3BsaWNlKGYsMSlbMF0uY2FuY2VsKCk7YnJlYWt9Zm9yKGY9dGhpcy5fbG9hZFF1ZXVlQmFja3VwLmxlbmd0aC0xO2Y+PTA7Zi0tKWlmKGc9dGhpcy5fbG9hZFF1ZXVlQmFja3VwW2ZdLmdldEl0ZW0oKSxnLmlkPT1kfHxnLnNyYz09ZCl7dGhpcy5fbG9hZFF1ZXVlQmFja3VwLnNwbGljZShmLDEpWzBdLmNhbmNlbCgpOwpicmVha31pZihlKXRoaXMuX2Rpc3Bvc2VJdGVtKHRoaXMuZ2V0SXRlbShkKSk7ZWxzZSBmb3IodmFyIGY9dGhpcy5fY3VycmVudExvYWRzLmxlbmd0aC0xO2Y+PTA7Zi0tKXt2YXIgZz10aGlzLl9jdXJyZW50TG9hZHNbZl0uZ2V0SXRlbSgpO2lmKGcuaWQ9PWR8fGcuc3JjPT1kKXt0aGlzLl9jdXJyZW50TG9hZHMuc3BsaWNlKGYsMSlbMF0uY2FuY2VsKCksYz0hMDticmVha319fWMmJnRoaXMuX2xvYWROZXh0KCl9ZWxzZXt0aGlzLmNsb3NlKCk7Zm9yKHZhciBoIGluIHRoaXMuX2xvYWRJdGVtc0J5SWQpdGhpcy5fZGlzcG9zZUl0ZW0odGhpcy5fbG9hZEl0ZW1zQnlJZFtoXSk7dGhpcy5pbml0KHRoaXMucHJlZmVyWEhSLHRoaXMuX2Jhc2VQYXRoKX19LGIucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLmNsb3NlKCk7Zm9yKHZhciBhIGluIHRoaXMuX2xvYWRJdGVtc0J5SWQpdGhpcy5fZGlzcG9zZUl0ZW0odGhpcy5fbG9hZEl0ZW1zQnlJZFthXSk7Zm9yKHZhciBiPVtdLGM9MCxkPXRoaXMuX2xvYWRRdWV1ZUJhY2t1cC5sZW5ndGg7ZD5jO2MrKyliLnB1c2godGhpcy5fbG9hZFF1ZXVlQmFja3VwW2NdLmdldEl0ZW0oKSk7dGhpcy5sb2FkTWFuaWZlc3QoYiwhMSl9LGIuaW5zdGFsbFBsdWdpbj1mdW5jdGlvbihhKXtpZihudWxsIT1hJiZudWxsIT1hLmdldFByZWxvYWRIYW5kbGVycyl7dmFyIGI9YS5nZXRQcmVsb2FkSGFuZGxlcnMoKTtpZihiLnNjb3BlPWEsbnVsbCE9Yi50eXBlcylmb3IodmFyIGM9MCxkPWIudHlwZXMubGVuZ3RoO2Q+YztjKyspdGhpcy5fdHlwZUNhbGxiYWNrc1tiLnR5cGVzW2NdXT1iO2lmKG51bGwhPWIuZXh0ZW5zaW9ucylmb3IoYz0wLGQ9Yi5leHRlbnNpb25zLmxlbmd0aDtkPmM7YysrKXRoaXMuX2V4dGVuc2lvbkNhbGxiYWNrc1tiLmV4dGVuc2lvbnNbY11dPWJ9fSxiLnNldE1heENvbm5lY3Rpb25zPWZ1bmN0aW9uKGEpe3RoaXMuX21heENvbm5lY3Rpb25zPWEsIXRoaXMuX3BhdXNlZCYmdGhpcy5fbG9hZFF1ZXVlLmxlbmd0aD4wJiZ0aGlzLl9sb2FkTmV4dCgpfSxiLmxvYWRGaWxlPWZ1bmN0aW9uKGEsYixjKXtpZihudWxsPT1hKXt2YXIgZD1uZXcgY3JlYXRlanMuRXJyb3JFdmVudCgiUFJFTE9BRF9OT19GSUxFIik7cmV0dXJuIHZvaWQgdGhpcy5fc2VuZEVycm9yKGQpfXRoaXMuX2FkZEl0ZW0oYSxudWxsLGMpLHRoaXMuc2V0UGF1c2VkKGIhPT0hMT8hMTohMCl9LGIubG9hZE1hbmlmZXN0PWZ1bmN0aW9uKGEsYixkKXt2YXIgZT1udWxsLGY9bnVsbDtpZihhIGluc3RhbmNlb2YgQXJyYXkpe2lmKDA9PWEubGVuZ3RoKXt2YXIgZz1uZXcgY3JlYXRlanMuRXJyb3JFdmVudCgiUFJFTE9BRF9NQU5JRkVTVF9FTVBUWSIpO3JldHVybiB2b2lkIHRoaXMuX3NlbmRFcnJvcihnKX1lPWF9ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIGEpZT1be3NyYzphLHR5cGU6Yy5NQU5JRkVTVH1dO2Vsc2V7aWYoIm9iamVjdCIhPXR5cGVvZiBhKXt2YXIgZz1uZXcgY3JlYXRlanMuRXJyb3JFdmVudCgiUFJFTE9BRF9NQU5JRkVTVF9OVUxMIik7cmV0dXJuIHZvaWQgdGhpcy5fc2VuZEVycm9yKGcpfWlmKHZvaWQgMCE9PWEuc3JjKXtpZihudWxsPT1hLnR5cGUpYS50eXBlPWMuTUFOSUZFU1Q7ZWxzZSBpZihhLnR5cGUhPWMuTUFOSUZFU1Qpe3ZhciBnPW5ldyBjcmVhdGVqcy5FcnJvckV2ZW50KCJQUkVMT0FEX01BTklGRVNUX1RZUEUiKTt0aGlzLl9zZW5kRXJyb3IoZyl9ZT1bYV19ZWxzZSB2b2lkIDAhPT1hLm1hbmlmZXN0JiYoZT1hLm1hbmlmZXN0LGY9YS5wYXRoKX1mb3IodmFyIGg9MCxpPWUubGVuZ3RoO2k+aDtoKyspdGhpcy5fYWRkSXRlbShlW2hdLGYsZCk7dGhpcy5zZXRQYXVzZWQoYiE9PSExPyExOiEwKX0sYi5sb2FkPWZ1bmN0aW9uKCl7dGhpcy5zZXRQYXVzZWQoITEpfSxiLmdldEl0ZW09ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2xvYWRJdGVtc0J5SWRbYV18fHRoaXMuX2xvYWRJdGVtc0J5U3JjW2FdfSxiLmdldFJlc3VsdD1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuX2xvYWRJdGVtc0J5SWRbYV18fHRoaXMuX2xvYWRJdGVtc0J5U3JjW2FdO2lmKG51bGw9PWMpcmV0dXJuIG51bGw7dmFyIGQ9Yy5pZDtyZXR1cm4gYiYmdGhpcy5fbG9hZGVkUmF3UmVzdWx0c1tkXT90aGlzLl9sb2FkZWRSYXdSZXN1bHRzW2RdOnRoaXMuX2xvYWRlZFJlc3VsdHNbZF19LGIuZ2V0SXRlbXM9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MCxkPXRoaXMuX2xvYWRRdWV1ZUJhY2t1cC5sZW5ndGg7ZD5jO2MrKyl7dmFyIGU9dGhpcy5fbG9hZFF1ZXVlQmFja3VwW2NdLGY9ZS5nZXRJdGVtKCk7KGEhPT0hMHx8ZS5sb2FkZWQpJiZiLnB1c2goe2l0ZW06ZixyZXN1bHQ6dGhpcy5nZXRSZXN1bHQoZi5pZCkscmF3UmVzdWx0OnRoaXMuZ2V0UmVzdWx0KGYuaWQsITApfSl9cmV0dXJuIGJ9LGIuc2V0UGF1c2VkPWZ1bmN0aW9uKGEpe3RoaXMuX3BhdXNlZD1hLHRoaXMuX3BhdXNlZHx8dGhpcy5fbG9hZE5leHQoKX0sYi5jbG9zZT1mdW5jdGlvbigpe2Zvcig7dGhpcy5fY3VycmVudExvYWRzLmxlbmd0aDspdGhpcy5fY3VycmVudExvYWRzLnBvcCgpLmNhbmNlbCgpO3RoaXMuX3NjcmlwdE9yZGVyLmxlbmd0aD0wLHRoaXMuX2xvYWRlZFNjcmlwdHMubGVuZ3RoPTAsdGhpcy5sb2FkU3RhcnRXYXNEaXNwYXRjaGVkPSExLHRoaXMuX2l0ZW1Db3VudD0wLHRoaXMuX2xhc3RQcm9ncmVzcz0wLzB9LGIuX2FkZEl0ZW09ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuX2NyZWF0ZUxvYWRJdGVtKGEsYixjKTtpZihudWxsIT1kKXt2YXIgZT10aGlzLl9jcmVhdGVMb2FkZXIoZCk7bnVsbCE9ZSYmKGQuX2xvYWRlcj1lLHRoaXMuX2xvYWRRdWV1ZS5wdXNoKGUpLHRoaXMuX2xvYWRRdWV1ZUJhY2t1cC5wdXNoKGUpLHRoaXMuX251bUl0ZW1zKyssdGhpcy5fdXBkYXRlUHJvZ3Jlc3MoKSwodGhpcy5tYWludGFpblNjcmlwdE9yZGVyJiZkLnR5cGU9PWNyZWF0ZWpzLkxvYWRRdWV1ZS5KQVZBU0NSSVBUfHxkLm1haW50YWluT3JkZXI9PT0hMCkmJih0aGlzLl9zY3JpcHRPcmRlci5wdXNoKGQpLHRoaXMuX2xvYWRlZFNjcmlwdHMucHVzaChudWxsKSkpfX0sYi5fY3JlYXRlTG9hZEl0ZW09ZnVuY3Rpb24oYSxiLGQpe3ZhciBlPWNyZWF0ZWpzLkxvYWRJdGVtLmNyZWF0ZShhKTtpZihudWxsPT1lKXJldHVybiBudWxsO3ZhciBmPWNyZWF0ZWpzLlJlcXVlc3RVdGlscy5wYXJzZVVSSShlLnNyYyk7Zi5leHRlbnNpb24mJihlLmV4dD1mLmV4dGVuc2lvbiksbnVsbD09ZS50eXBlJiYoZS50eXBlPWNyZWF0ZWpzLlJlcXVlc3RVdGlscy5nZXRUeXBlQnlFeHRlbnNpb24oZS5leHQpKTt2YXIgZz0iIixoPWR8fHRoaXMuX2Jhc2VQYXRoLGk9ZS5zcmM7aWYoIWYuYWJzb2x1dGUmJiFmLnJlbGF0aXZlKWlmKGIpe2c9Yjt2YXIgaj1jcmVhdGVqcy5SZXF1ZXN0VXRpbHMucGFyc2VVUkkoYik7aT1iK2ksbnVsbD09aHx8ai5hYnNvbHV0ZXx8ai5yZWxhdGl2ZXx8KGc9aCtnKX1lbHNlIG51bGwhPWgmJihnPWgpO2Uuc3JjPWcrZS5zcmMsZS5wYXRoPWcsKHZvaWQgMD09PWUuaWR8fG51bGw9PT1lLmlkfHwiIj09PWUuaWQpJiYoZS5pZD1pKTt2YXIgaz10aGlzLl90eXBlQ2FsbGJhY2tzW2UudHlwZV18fHRoaXMuX2V4dGVuc2lvbkNhbGxiYWNrc1tlLmV4dF07aWYoayl7dmFyIGw9ay5jYWxsYmFjay5jYWxsKGsuc2NvcGUsZSx0aGlzKTtpZihsPT09ITEpcmV0dXJuIG51bGw7bD09PSEwfHxudWxsIT1sJiYoZS5fbG9hZGVyPWwpLGY9Y3JlYXRlanMuUmVxdWVzdFV0aWxzLnBhcnNlVVJJKGUuc3JjKSxudWxsIT1mLmV4dGVuc2lvbiYmKGUuZXh0PWYuZXh0ZW5zaW9uKX1yZXR1cm4gdGhpcy5fbG9hZEl0ZW1zQnlJZFtlLmlkXT1lLHRoaXMuX2xvYWRJdGVtc0J5U3JjW2Uuc3JjXT1lLG51bGw9PWUubG9hZFRpbWVvdXQmJihlLmxvYWRUaW1lb3V0PWMubG9hZFRpbWVvdXQpLG51bGw9PWUuY3Jvc3NPcmlnaW4mJihlLmNyb3NzT3JpZ2luPXRoaXMuX2Nyb3NzT3JpZ2luKSxlfSxiLl9jcmVhdGVMb2FkZXI9ZnVuY3Rpb24oYSl7aWYobnVsbCE9YS5fbG9hZGVyKXJldHVybiBhLl9sb2FkZXI7Zm9yKHZhciBiPXRoaXMucHJlZmVyWEhSLGM9MDtjPHRoaXMuX2F2YWlsYWJsZUxvYWRlcnMubGVuZ3RoO2MrKyl7dmFyIGQ9dGhpcy5fYXZhaWxhYmxlTG9hZGVyc1tjXTtpZihkJiZkLmNhbkxvYWRJdGVtKGEpKXJldHVybiBuZXcgZChhLGIpfXJldHVybiBudWxsfSxiLl9sb2FkTmV4dD1mdW5jdGlvbigpe2lmKCF0aGlzLl9wYXVzZWQpe3RoaXMuX2xvYWRTdGFydFdhc0Rpc3BhdGNoZWR8fCh0aGlzLl9zZW5kTG9hZFN0YXJ0KCksdGhpcy5fbG9hZFN0YXJ0V2FzRGlzcGF0Y2hlZD0hMCksdGhpcy5fbnVtSXRlbXM9PXRoaXMuX251bUl0ZW1zTG9hZGVkPyh0aGlzLmxvYWRlZD0hMCx0aGlzLl9zZW5kQ29tcGxldGUoKSx0aGlzLm5leHQmJnRoaXMubmV4dC5sb2FkJiZ0aGlzLm5leHQubG9hZCgpKTp0aGlzLmxvYWRlZD0hMTtmb3IodmFyIGE9MDthPHRoaXMuX2xvYWRRdWV1ZS5sZW5ndGgmJiEodGhpcy5fY3VycmVudExvYWRzLmxlbmd0aD49dGhpcy5fbWF4Q29ubmVjdGlvbnMpO2ErKyl7dmFyIGI9dGhpcy5fbG9hZFF1ZXVlW2FdO3RoaXMuX2NhblN0YXJ0TG9hZChiKSYmKHRoaXMuX2xvYWRRdWV1ZS5zcGxpY2UoYSwxKSxhLS0sdGhpcy5fbG9hZEl0ZW0oYikpfX19LGIuX2xvYWRJdGVtPWZ1bmN0aW9uKGEpe2Eub24oImZpbGVsb2FkIix0aGlzLl9oYW5kbGVGaWxlTG9hZCx0aGlzKSxhLm9uKCJwcm9ncmVzcyIsdGhpcy5faGFuZGxlUHJvZ3Jlc3MsdGhpcyksYS5vbigiY29tcGxldGUiLHRoaXMuX2hhbmRsZUZpbGVDb21wbGV0ZSx0aGlzKSxhLm9uKCJlcnJvciIsdGhpcy5faGFuZGxlRXJyb3IsdGhpcyksYS5vbigiZmlsZWVycm9yIix0aGlzLl9oYW5kbGVGaWxlRXJyb3IsdGhpcyksdGhpcy5fY3VycmVudExvYWRzLnB1c2goYSksdGhpcy5fc2VuZEZpbGVTdGFydChhLmdldEl0ZW0oKSksYS5sb2FkKCl9LGIuX2hhbmRsZUZpbGVMb2FkPWZ1bmN0aW9uKGEpe2EudGFyZ2V0PW51bGwsdGhpcy5kaXNwYXRjaEV2ZW50KGEpfSxiLl9oYW5kbGVGaWxlRXJyb3I9ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IGNyZWF0ZWpzLkVycm9yRXZlbnQoIkZJTEVfTE9BRF9FUlJPUiIsbnVsbCxhLml0ZW0pO3RoaXMuX3NlbmRFcnJvcihiKX0sYi5faGFuZGxlRXJyb3I9ZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQ7dGhpcy5fbnVtSXRlbXNMb2FkZWQrKyx0aGlzLl9maW5pc2hPcmRlcmVkSXRlbShiLCEwKSx0aGlzLl91cGRhdGVQcm9ncmVzcygpO3ZhciBjPW5ldyBjcmVhdGVqcy5FcnJvckV2ZW50KCJGSUxFX0xPQURfRVJST1IiLG51bGwsYi5nZXRJdGVtKCkpO3RoaXMuX3NlbmRFcnJvcihjKSx0aGlzLnN0b3BPbkVycm9yfHwodGhpcy5fcmVtb3ZlTG9hZEl0ZW0oYiksdGhpcy5fbG9hZE5leHQoKSl9LGIuX2hhbmRsZUZpbGVDb21wbGV0ZT1mdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldCxjPWIuZ2V0SXRlbSgpLGQ9Yi5nZXRSZXN1bHQoKTt0aGlzLl9sb2FkZWRSZXN1bHRzW2MuaWRdPWQ7dmFyIGU9Yi5nZXRSZXN1bHQoITApO251bGwhPWUmJmUhPT1kJiYodGhpcy5fbG9hZGVkUmF3UmVzdWx0c1tjLmlkXT1lKSx0aGlzLl9zYXZlTG9hZGVkSXRlbXMoYiksdGhpcy5fcmVtb3ZlTG9hZEl0ZW0oYiksdGhpcy5fZmluaXNoT3JkZXJlZEl0ZW0oYil8fHRoaXMuX3Byb2Nlc3NGaW5pc2hlZExvYWQoYyxiKX0sYi5fc2F2ZUxvYWRlZEl0ZW1zPWZ1bmN0aW9uKGEpe3ZhciBiPWEuZ2V0TG9hZGVkSXRlbXMoKTtpZihudWxsIT09Yilmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl7dmFyIGQ9YltjXS5pdGVtO3RoaXMuX2xvYWRJdGVtc0J5U3JjW2Quc3JjXT1kLHRoaXMuX2xvYWRJdGVtc0J5SWRbZC5pZF09ZCx0aGlzLl9sb2FkZWRSZXN1bHRzW2QuaWRdPWJbY10ucmVzdWx0LHRoaXMuX2xvYWRlZFJhd1Jlc3VsdHNbZC5pZF09YltjXS5yYXdSZXN1bHR9fSxiLl9maW5pc2hPcmRlcmVkSXRlbT1mdW5jdGlvbihhLGIpe3ZhciBjPWEuZ2V0SXRlbSgpO2lmKHRoaXMubWFpbnRhaW5TY3JpcHRPcmRlciYmYy50eXBlPT1jcmVhdGVqcy5Mb2FkUXVldWUuSkFWQVNDUklQVHx8Yy5tYWludGFpbk9yZGVyKXthIGluc3RhbmNlb2YgY3JlYXRlanMuSmF2YVNjcmlwdExvYWRlciYmKHRoaXMuX2N1cnJlbnRseUxvYWRpbmdTY3JpcHQ9ITEpO3ZhciBkPWNyZWF0ZWpzLmluZGV4T2YodGhpcy5fc2NyaXB0T3JkZXIsYyk7cmV0dXJuLTE9PWQ/ITE6KHRoaXMuX2xvYWRlZFNjcmlwdHNbZF09Yj09PSEwPyEwOmMsdGhpcy5fY2hlY2tTY3JpcHRMb2FkT3JkZXIoKSwhMCl9cmV0dXJuITF9LGIuX2NoZWNrU2NyaXB0TG9hZE9yZGVyPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMuX2xvYWRlZFNjcmlwdHMubGVuZ3RoLGI9MDthPmI7YisrKXt2YXIgYz10aGlzLl9sb2FkZWRTY3JpcHRzW2JdO2lmKG51bGw9PT1jKWJyZWFrO2lmKGMhPT0hMCl7dmFyIGQ9dGhpcy5fbG9hZGVkUmVzdWx0c1tjLmlkXTtjLnR5cGU9PWNyZWF0ZWpzLkxvYWRRdWV1ZS5KQVZBU0NSSVBUJiYoZG9jdW1lbnQuYm9keXx8ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXSkuYXBwZW5kQ2hpbGQoZCk7dmFyIGU9Yy5fbG9hZGVyO3RoaXMuX3Byb2Nlc3NGaW5pc2hlZExvYWQoYyxlKSx0aGlzLl9sb2FkZWRTY3JpcHRzW2JdPSEwfX19LGIuX3Byb2Nlc3NGaW5pc2hlZExvYWQ9ZnVuY3Rpb24oYSxiKXt0aGlzLl9udW1JdGVtc0xvYWRlZCsrLHRoaXMuX3VwZGF0ZVByb2dyZXNzKCksdGhpcy5fc2VuZEZpbGVDb21wbGV0ZShhLGIpLHRoaXMuX2xvYWROZXh0KCl9LGIuX2NhblN0YXJ0TG9hZD1mdW5jdGlvbihhKXtpZighdGhpcy5tYWludGFpblNjcmlwdE9yZGVyfHxhLnByZWZlclhIUilyZXR1cm4hMDt2YXIgYj1hLmdldEl0ZW0oKTtpZihiLnR5cGUhPWNyZWF0ZWpzLkxvYWRRdWV1ZS5KQVZBU0NSSVBUKXJldHVybiEwO2lmKHRoaXMuX2N1cnJlbnRseUxvYWRpbmdTY3JpcHQpcmV0dXJuITE7Zm9yKHZhciBjPXRoaXMuX3NjcmlwdE9yZGVyLmluZGV4T2YoYiksZD0wO2M+ZDspe3ZhciBlPXRoaXMuX2xvYWRlZFNjcmlwdHNbZF07aWYobnVsbD09ZSlyZXR1cm4hMTtkKyt9cmV0dXJuIHRoaXMuX2N1cnJlbnRseUxvYWRpbmdTY3JpcHQ9ITAsITB9LGIuX3JlbW92ZUxvYWRJdGVtPWZ1bmN0aW9uKGEpe3ZhciBiPWEuZ2V0SXRlbSgpO2RlbGV0ZSBiLl9sb2FkZXI7Zm9yKHZhciBjPXRoaXMuX2N1cnJlbnRMb2Fkcy5sZW5ndGgsZD0wO2M+ZDtkKyspaWYodGhpcy5fY3VycmVudExvYWRzW2RdPT1hKXt0aGlzLl9jdXJyZW50TG9hZHMuc3BsaWNlKGQsMSk7YnJlYWt9fSxiLl9oYW5kbGVQcm9ncmVzcz1mdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldDt0aGlzLl9zZW5kRmlsZVByb2dyZXNzKGIuZ2V0SXRlbSgpLGIucHJvZ3Jlc3MpLHRoaXMuX3VwZGF0ZVByb2dyZXNzKCl9LGIuX3VwZGF0ZVByb2dyZXNzPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fbnVtSXRlbXNMb2FkZWQvdGhpcy5fbnVtSXRlbXMsYj10aGlzLl9udW1JdGVtcy10aGlzLl9udW1JdGVtc0xvYWRlZDtpZihiPjApe2Zvcih2YXIgYz0wLGQ9MCxlPXRoaXMuX2N1cnJlbnRMb2Fkcy5sZW5ndGg7ZT5kO2QrKyljKz10aGlzLl9jdXJyZW50TG9hZHNbZF0ucHJvZ3Jlc3M7YSs9Yy9iKihiL3RoaXMuX251bUl0ZW1zKX10aGlzLl9sYXN0UHJvZ3Jlc3MhPWEmJih0aGlzLl9zZW5kUHJvZ3Jlc3MoYSksdGhpcy5fbGFzdFByb2dyZXNzPWEpfSxiLl9kaXNwb3NlSXRlbT1mdW5jdGlvbihhKXtkZWxldGUgdGhpcy5fbG9hZGVkUmVzdWx0c1thLmlkXSxkZWxldGUgdGhpcy5fbG9hZGVkUmF3UmVzdWx0c1thLmlkXSxkZWxldGUgdGhpcy5fbG9hZEl0ZW1zQnlJZFthLmlkXSxkZWxldGUgdGhpcy5fbG9hZEl0ZW1zQnlTcmNbYS5zcmNdfSxiLl9zZW5kRmlsZVByb2dyZXNzPWZ1bmN0aW9uKGEsYil7aWYodGhpcy5faXNDYW5jZWxlZCgpKXJldHVybiB2b2lkIHRoaXMuX2NsZWFuVXAoKTtpZih0aGlzLmhhc0V2ZW50TGlzdGVuZXIoImZpbGVwcm9ncmVzcyIpKXt2YXIgYz1uZXcgY3JlYXRlanMuRXZlbnQoImZpbGVwcm9ncmVzcyIpO2MucHJvZ3Jlc3M9YixjLmxvYWRlZD1iLGMudG90YWw9MSxjLml0ZW09YSx0aGlzLmRpc3BhdGNoRXZlbnQoYyl9fSxiLl9zZW5kRmlsZUNvbXBsZXRlPWZ1bmN0aW9uKGEsYil7aWYoIXRoaXMuX2lzQ2FuY2VsZWQoKSl7dmFyIGM9bmV3IGNyZWF0ZWpzLkV2ZW50KCJmaWxlbG9hZCIpO2MubG9hZGVyPWIsYy5pdGVtPWEsYy5yZXN1bHQ9dGhpcy5fbG9hZGVkUmVzdWx0c1thLmlkXSxjLnJhd1Jlc3VsdD10aGlzLl9sb2FkZWRSYXdSZXN1bHRzW2EuaWRdLGEuY29tcGxldGVIYW5kbGVyJiZhLmNvbXBsZXRlSGFuZGxlcihjKSx0aGlzLmhhc0V2ZW50TGlzdGVuZXIoImZpbGVsb2FkIikmJnRoaXMuZGlzcGF0Y2hFdmVudChjKX19LGIuX3NlbmRGaWxlU3RhcnQ9ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IGNyZWF0ZWpzLkV2ZW50KCJmaWxlc3RhcnQiKTtiLml0ZW09YSx0aGlzLmhhc0V2ZW50TGlzdGVuZXIoImZpbGVzdGFydCIpJiZ0aGlzLmRpc3BhdGNoRXZlbnQoYil9LGIudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iW1ByZWxvYWRKUyBMb2FkUXVldWVdIn0sY3JlYXRlanMuTG9hZFF1ZXVlPWNyZWF0ZWpzLnByb21vdGUoYSwiQWJzdHJhY3RMb2FkZXIiKX0oKSx0aGlzLmNyZWF0ZWpzPXRoaXMuY3JlYXRlanN8fHt9LGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGEoYSl7dGhpcy5BYnN0cmFjdExvYWRlcl9jb25zdHJ1Y3RvcihhLCEwLGNyZWF0ZWpzLkFic3RyYWN0TG9hZGVyLlRFWFQpfXZhciBiPShjcmVhdGVqcy5leHRlbmQoYSxjcmVhdGVqcy5BYnN0cmFjdExvYWRlciksYSk7Yi5jYW5Mb2FkSXRlbT1mdW5jdGlvbihhKXtyZXR1cm4gYS50eXBlPT1jcmVhdGVqcy5BYnN0cmFjdExvYWRlci5URVhUfSxjcmVhdGVqcy5UZXh0TG9hZGVyPWNyZWF0ZWpzLnByb21vdGUoYSwiQWJzdHJhY3RMb2FkZXIiKX0oKSx0aGlzLmNyZWF0ZWpzPXRoaXMuY3JlYXRlanN8fHt9LGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGEoYSl7dGhpcy5BYnN0cmFjdExvYWRlcl9jb25zdHJ1Y3RvcihhLCEwLGNyZWF0ZWpzLkFic3RyYWN0TG9hZGVyLkJJTkFSWSksdGhpcy5vbigiaW5pdGlhbGl6ZSIsdGhpcy5fdXBkYXRlWEhSLHRoaXMpfXZhciBiPWNyZWF0ZWpzLmV4dGVuZChhLGNyZWF0ZWpzLkFic3RyYWN0TG9hZGVyKSxjPWE7Yy5jYW5Mb2FkSXRlbT1mdW5jdGlvbihhKXtyZXR1cm4gYS50eXBlPT1jcmVhdGVqcy5BYnN0cmFjdExvYWRlci5CSU5BUll9LGIuX3VwZGF0ZVhIUj1mdW5jdGlvbihhKXthLmxvYWRlci5zZXRSZXNwb25zZVR5cGUoImFycmF5YnVmZmVyIil9LGNyZWF0ZWpzLkJpbmFyeUxvYWRlcj1jcmVhdGVqcy5wcm9tb3RlKGEsIkFic3RyYWN0TG9hZGVyIil9KCksdGhpcy5jcmVhdGVqcz10aGlzLmNyZWF0ZWpzfHx7fSxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBhKGEsYil7dGhpcy5BYnN0cmFjdExvYWRlcl9jb25zdHJ1Y3RvcihhLGIsY3JlYXRlanMuQWJzdHJhY3RMb2FkZXIuQ1NTKSx0aGlzLnJlc3VsdEZvcm1hdHRlcj10aGlzLl9mb3JtYXRSZXN1bHQsdGhpcy5fdGFnU3JjQXR0cmlidXRlPSJocmVmIix0aGlzLl90YWc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChiPyJzdHlsZSI6ImxpbmsiKSx0aGlzLl90YWcucmVsPSJzdHlsZXNoZWV0Iix0aGlzLl90YWcudHlwZT0idGV4dC9jc3MifXZhciBiPWNyZWF0ZWpzLmV4dGVuZChhLGNyZWF0ZWpzLkFic3RyYWN0TG9hZGVyKSxjPWE7Yy5jYW5Mb2FkSXRlbT1mdW5jdGlvbihhKXtyZXR1cm4gYS50eXBlPT1jcmVhdGVqcy5BYnN0cmFjdExvYWRlci5DU1N9LGIuX2Zvcm1hdFJlc3VsdD1mdW5jdGlvbihhKXtpZih0aGlzLl9wcmVmZXJYSFIpe3ZhciBiPWEuZ2V0VGFnKCksYz1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdO2lmKGMuYXBwZW5kQ2hpbGQoYiksYi5zdHlsZVNoZWV0KWIuc3R5bGVTaGVldC5jc3NUZXh0PWEuZ2V0UmVzdWx0KCEwKTtlbHNle3ZhciBkPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGEuZ2V0UmVzdWx0KCEwKSk7Yi5hcHBlbmRDaGlsZChkKX19ZWxzZSBiPXRoaXMuX3RhZztyZXR1cm4gYn0sY3JlYXRlanMuQ1NTTG9hZGVyPWNyZWF0ZWpzLnByb21vdGUoYSwiQWJzdHJhY3RMb2FkZXIiKX0oKSx0aGlzLmNyZWF0ZWpzPXRoaXMuY3JlYXRlanN8fHt9LGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGEoYSxiKXt0aGlzLkFic3RyYWN0TG9hZGVyX2NvbnN0cnVjdG9yKGEsYixjcmVhdGVqcy5BYnN0cmFjdExvYWRlci5JTUFHRSksdGhpcy5yZXN1bHRGb3JtYXR0ZXI9dGhpcy5fZm9ybWF0UmVzdWx0LHRoaXMuX3RhZ1NyY0F0dHJpYnV0ZT0ic3JjIixjcmVhdGVqcy5SZXF1ZXN0VXRpbHMuaXNJbWFnZVRhZyhhKT90aGlzLl90YWc9YTpjcmVhdGVqcy5SZXF1ZXN0VXRpbHMuaXNJbWFnZVRhZyhhLnNyYyk/dGhpcy5fdGFnPWEuc3JjOmNyZWF0ZWpzLlJlcXVlc3RVdGlscy5pc0ltYWdlVGFnKGEudGFnKSYmKHRoaXMuX3RhZz1hLnRhZyksbnVsbCE9dGhpcy5fdGFnP3RoaXMuX3ByZWZlclhIUj0hMTp0aGlzLl90YWc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIiksdGhpcy5vbigiaW5pdGlhbGl6ZSIsdGhpcy5fdXBkYXRlWEhSLHRoaXMpfXZhciBiPWNyZWF0ZWpzLmV4dGVuZChhLGNyZWF0ZWpzLkFic3RyYWN0TG9hZGVyKSxjPWE7Yy5jYW5Mb2FkSXRlbT1mdW5jdGlvbihhKXtyZXR1cm4gYS50eXBlPT1jcmVhdGVqcy5BYnN0cmFjdExvYWRlci5JTUFHRX0sYi5sb2FkPWZ1bmN0aW9uKCl7aWYoIiIhPXRoaXMuX3RhZy5zcmMmJnRoaXMuX3RhZy5jb21wbGV0ZSlyZXR1cm4gdm9pZCB0aGlzLl9zZW5kQ29tcGxldGUoKTt2YXIgYT10aGlzLl9pdGVtLmNyb3NzT3JpZ2luOzE9PWEmJihhPSJBbm9ueW1vdXMiKSxudWxsPT1hfHxjcmVhdGVqcy5SZXF1ZXN0VXRpbHMuaXNMb2NhbCh0aGlzLl9pdGVtLnNyYyl8fCh0aGlzLl90YWcuY3Jvc3NPcmlnaW49YSksdGhpcy5BYnN0cmFjdExvYWRlcl9sb2FkKCl9LGIuX3VwZGF0ZVhIUj1mdW5jdGlvbihhKXthLmxvYWRlci5taW1lVHlwZT0idGV4dC9wbGFpbjsgY2hhcnNldD14LXVzZXItZGVmaW5lZC1iaW5hcnkiLGEubG9hZGVyLnNldFJlc3BvbnNlVHlwZSYmYS5sb2FkZXIuc2V0UmVzcG9uc2VUeXBlKCJibG9iIil9LGIuX2Zvcm1hdFJlc3VsdD1mdW5jdGlvbihhKXt2YXIgYj10aGlzO3JldHVybiBmdW5jdGlvbihjKXt2YXIgZD1iLl90YWcsZT13aW5kb3cuVVJMfHx3aW5kb3cud2Via2l0VVJMO2lmKGIuX3ByZWZlclhIUilpZihlKXt2YXIgZj1lLmNyZWF0ZU9iamVjdFVSTChhLmdldFJlc3VsdCghMCkpO2Quc3JjPWYsZC5vbmxvYWQ9ZnVuY3Rpb24oKXtlLnJldm9rZU9iamVjdFVSTChiLnNyYyl9fWVsc2UgZC5zcmM9YS5nZXRJdGVtKCkuc3JjO2Vsc2U7ZC5jb21wbGV0ZT9jKGQpOmQub25sb2FkPWZ1bmN0aW9uKCl7Yyh0aGlzKX19fSxjcmVhdGVqcy5JbWFnZUxvYWRlcj1jcmVhdGVqcy5wcm9tb3RlKGEsIkFic3RyYWN0TG9hZGVyIil9KCksdGhpcy5jcmVhdGVqcz10aGlzLmNyZWF0ZWpzfHx7fSxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBhKGEsYil7dGhpcy5BYnN0cmFjdExvYWRlcl9jb25zdHJ1Y3RvcihhLGIsY3JlYXRlanMuQWJzdHJhY3RMb2FkZXIuSkFWQVNDUklQVCksdGhpcy5yZXN1bHRGb3JtYXR0ZXI9dGhpcy5fZm9ybWF0UmVzdWx0LHRoaXMuX3RhZ1NyY0F0dHJpYnV0ZT0ic3JjIix0aGlzLnNldFRhZyhkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSl9dmFyIGI9Y3JlYXRlanMuZXh0ZW5kKGEsY3JlYXRlanMuQWJzdHJhY3RMb2FkZXIpLGM9YTtjLmNhbkxvYWRJdGVtPWZ1bmN0aW9uKGEpe3JldHVybiBhLnR5cGU9PWNyZWF0ZWpzLkFic3RyYWN0TG9hZGVyLkpBVkFTQ1JJUFR9LGIuX2Zvcm1hdFJlc3VsdD1mdW5jdGlvbihhKXt2YXIgYj1hLmdldFRhZygpO3JldHVybiB0aGlzLl9wcmVmZXJYSFImJihiLnRleHQ9YS5nZXRSZXN1bHQoITApKSxifSxjcmVhdGVqcy5KYXZhU2NyaXB0TG9hZGVyPWNyZWF0ZWpzLnByb21vdGUoYSwiQWJzdHJhY3RMb2FkZXIiKX0oKSx0aGlzLmNyZWF0ZWpzPXRoaXMuY3JlYXRlanN8fHt9LGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGEoYSl7dGhpcy5BYnN0cmFjdExvYWRlcl9jb25zdHJ1Y3RvcihhLCEwLGNyZWF0ZWpzLkFic3RyYWN0TG9hZGVyLkpTT04pLHRoaXMucmVzdWx0Rm9ybWF0dGVyPXRoaXMuX2Zvcm1hdFJlc3VsdH12YXIgYj1jcmVhdGVqcy5leHRlbmQoYSxjcmVhdGVqcy5BYnN0cmFjdExvYWRlciksYz1hO2MuY2FuTG9hZEl0ZW09ZnVuY3Rpb24oYSl7cmV0dXJuIGEudHlwZT09Y3JlYXRlanMuQWJzdHJhY3RMb2FkZXIuSlNPTiYmIWEuX2xvYWRBc0pTT05QfSxiLl9mb3JtYXRSZXN1bHQ9ZnVuY3Rpb24oYSl7dmFyIGI9bnVsbDt0cnl7Yj1jcmVhdGVqcy5EYXRhVXRpbHMucGFyc2VKU09OKGEuZ2V0UmVzdWx0KCEwKSl9Y2F0Y2goYyl7dmFyIGQ9bmV3IGNyZWF0ZWpzLkVycm9yRXZlbnQoIkpTT05fRk9STUFUIixudWxsLGMpO3JldHVybiB0aGlzLl9zZW5kRXJyb3IoZCksY31yZXR1cm4gYn0sY3JlYXRlanMuSlNPTkxvYWRlcj1jcmVhdGVqcy5wcm9tb3RlKGEsIkFic3RyYWN0TG9hZGVyIil9KCksdGhpcy5jcmVhdGVqcz10aGlzLmNyZWF0ZWpzfHx7fSxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBhKGEpe3RoaXMuQWJzdHJhY3RMb2FkZXJfY29uc3RydWN0b3IoYSwhMSxjcmVhdGVqcy5BYnN0cmFjdExvYWRlci5KU09OUCksdGhpcy5zZXRUYWcoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0IikpLHRoaXMuZ2V0VGFnKCkudHlwZT0idGV4dC9qYXZhc2NyaXB0In12YXIgYj1jcmVhdGVqcy5leHRlbmQoYSxjcmVhdGVqcy5BYnN0cmFjdExvYWRlciksYz1hO2MuY2FuTG9hZEl0ZW09ZnVuY3Rpb24oYSl7cmV0dXJuIGEudHlwZT09Y3JlYXRlanMuQWJzdHJhY3RMb2FkZXIuSlNPTlB8fGEuX2xvYWRBc0pTT05QfSxiLmNhbmNlbD1mdW5jdGlvbigpe3RoaXMuQWJzdHJhY3RMb2FkZXJfY2FuY2VsKCksdGhpcy5fZGlzcG9zZSgpfSxiLmxvYWQ9ZnVuY3Rpb24oKXtpZihudWxsPT10aGlzLl9pdGVtLmNhbGxiYWNrKXRocm93IG5ldyBFcnJvcigiY2FsbGJhY2sgaXMgcmVxdWlyZWQgZm9yIGxvYWRpbmcgSlNPTlAgcmVxdWVzdHMuIik7aWYobnVsbCE9d2luZG93W3RoaXMuX2l0ZW0uY2FsbGJhY2tdKXRocm93IG5ldyBFcnJvcigiSlNPTlAgY2FsbGJhY2sgJyIrdGhpcy5faXRlbS5jYWxsYmFjaysiJyBhbHJlYWR5IGV4aXN0cyBvbiB3aW5kb3cuIFlvdSBuZWVkIHRvIHNwZWNpZnkgYSBkaWZmZXJlbnQgY2FsbGJhY2sgb3IgcmUtbmFtZSB0aGUgY3VycmVudCBvbmUuIik7d2luZG93W3RoaXMuX2l0ZW0uY2FsbGJhY2tdPWNyZWF0ZWpzLnByb3h5KHRoaXMuX2hhbmRsZUxvYWQsdGhpcyksd2luZG93LmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5fdGFnKSx0aGlzLl90YWcuc3JjPXRoaXMuX2l0ZW0uc3JjfSxiLl9oYW5kbGVMb2FkPWZ1bmN0aW9uKGEpe3RoaXMuX3Jlc3VsdD10aGlzLl9yYXdSZXN1bHQ9YSx0aGlzLl9zZW5kQ29tcGxldGUoKSx0aGlzLl9kaXNwb3NlKCl9LGIuX2Rpc3Bvc2U9ZnVuY3Rpb24oKXt3aW5kb3cuZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0aGlzLl90YWcpLGRlbGV0ZSB3aW5kb3dbdGhpcy5faXRlbS5jYWxsYmFja119LGNyZWF0ZWpzLkpTT05QTG9hZGVyPWNyZWF0ZWpzLnByb21vdGUoYSwiQWJzdHJhY3RMb2FkZXIiKX0oKSx0aGlzLmNyZWF0ZWpzPXRoaXMuY3JlYXRlanN8fHt9LGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGEoYSl7dGhpcy5BYnN0cmFjdExvYWRlcl9jb25zdHJ1Y3RvcihhLG51bGwsY3JlYXRlanMuQWJzdHJhY3RMb2FkZXIuTUFOSUZFU1QpLHRoaXMuX21hbmlmZXN0UXVldWU9bnVsbH12YXIgYj1jcmVhdGVqcy5leHRlbmQoYSxjcmVhdGVqcy5BYnN0cmFjdExvYWRlciksYz1hO2MuTUFOSUZFU1RfUFJPR1JFU1M9LjI1LGMuY2FuTG9hZEl0ZW09ZnVuY3Rpb24oYSl7cmV0dXJuIGEudHlwZT09Y3JlYXRlanMuQWJzdHJhY3RMb2FkZXIuTUFOSUZFU1R9LGIubG9hZD1mdW5jdGlvbigpe3RoaXMuQWJzdHJhY3RMb2FkZXJfbG9hZCgpfSxiLl9jcmVhdGVSZXF1ZXN0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5faXRlbS5jYWxsYmFjazt0aGlzLl9yZXF1ZXN0PW51bGwhPWE/bmV3IGNyZWF0ZWpzLkpTT05QTG9hZGVyKHRoaXMuX2l0ZW0pOm5ldyBjcmVhdGVqcy5KU09OTG9hZGVyKHRoaXMuX2l0ZW0pfSxiLmhhbmRsZUV2ZW50PWZ1bmN0aW9uKGEpe3N3aXRjaChhLnR5cGUpe2Nhc2UiY29tcGxldGUiOnJldHVybiB0aGlzLl9yYXdSZXN1bHQ9YS50YXJnZXQuZ2V0UmVzdWx0KCEwKSx0aGlzLl9yZXN1bHQ9YS50YXJnZXQuZ2V0UmVzdWx0KCksdGhpcy5fc2VuZFByb2dyZXNzKGMuTUFOSUZFU1RfUFJPR1JFU1MpLHZvaWQgdGhpcy5fbG9hZE1hbmlmZXN0KHRoaXMuX3Jlc3VsdCk7Y2FzZSJwcm9ncmVzcyI6cmV0dXJuIGEubG9hZGVkKj1jLk1BTklGRVNUX1BST0dSRVNTLHRoaXMucHJvZ3Jlc3M9YS5sb2FkZWQvYS50b3RhbCwoaXNOYU4odGhpcy5wcm9ncmVzcyl8fDEvMD09dGhpcy5wcm9ncmVzcykmJih0aGlzLnByb2dyZXNzPTApLHZvaWQgdGhpcy5fc2VuZFByb2dyZXNzKGEpfXRoaXMuQWJzdHJhY3RMb2FkZXJfaGFuZGxlRXZlbnQoYSl9LGIuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuQWJzdHJhY3RMb2FkZXJfZGVzdHJveSgpLHRoaXMuX21hbmlmZXN0UXVldWUuY2xvc2UoKX0sYi5fbG9hZE1hbmlmZXN0PWZ1bmN0aW9uKGEpe2lmKGEmJmEubWFuaWZlc3Qpe3ZhciBiPXRoaXMuX21hbmlmZXN0UXVldWU9bmV3IGNyZWF0ZWpzLkxvYWRRdWV1ZTtiLm9uKCJmaWxlbG9hZCIsdGhpcy5faGFuZGxlTWFuaWZlc3RGaWxlTG9hZCx0aGlzKSxiLm9uKCJwcm9ncmVzcyIsdGhpcy5faGFuZGxlTWFuaWZlc3RQcm9ncmVzcyx0aGlzKSxiLm9uKCJjb21wbGV0ZSIsdGhpcy5faGFuZGxlTWFuaWZlc3RDb21wbGV0ZSx0aGlzLCEwKSxiLm9uKCJlcnJvciIsdGhpcy5faGFuZGxlTWFuaWZlc3RFcnJvcix0aGlzLCEwKSxiLmxvYWRNYW5pZmVzdChhKX1lbHNlIHRoaXMuX3NlbmRDb21wbGV0ZSgpfSxiLl9oYW5kbGVNYW5pZmVzdEZpbGVMb2FkPWZ1bmN0aW9uKGEpe2EudGFyZ2V0PW51bGwsdGhpcy5kaXNwYXRjaEV2ZW50KGEpfSxiLl9oYW5kbGVNYW5pZmVzdENvbXBsZXRlPWZ1bmN0aW9uKCl7dGhpcy5fbG9hZGVkSXRlbXM9dGhpcy5fbWFuaWZlc3RRdWV1ZS5nZXRJdGVtcyghMCksdGhpcy5fc2VuZENvbXBsZXRlKCl9LGIuX2hhbmRsZU1hbmlmZXN0UHJvZ3Jlc3M9ZnVuY3Rpb24oYSl7dGhpcy5wcm9ncmVzcz1hLnByb2dyZXNzKigxLWMuTUFOSUZFU1RfUFJPR1JFU1MpK2MuTUFOSUZFU1RfUFJPR1JFU1MsdGhpcy5fc2VuZFByb2dyZXNzKHRoaXMucHJvZ3Jlc3MpfSxiLl9oYW5kbGVNYW5pZmVzdEVycm9yPWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBjcmVhdGVqcy5FdmVudCgiZmlsZWVycm9yIik7Yi5pdGVtPWEuZGF0YSx0aGlzLmRpc3BhdGNoRXZlbnQoYil9LGNyZWF0ZWpzLk1hbmlmZXN0TG9hZGVyPWNyZWF0ZWpzLnByb21vdGUoYSwiQWJzdHJhY3RMb2FkZXIiKX0oKSx0aGlzLmNyZWF0ZWpzPXRoaXMuY3JlYXRlanN8fHt9LGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGEoYSxiKXt0aGlzLkFic3RyYWN0TWVkaWFMb2FkZXJfY29uc3RydWN0b3IoYSxiLGNyZWF0ZWpzLkFic3RyYWN0TG9hZGVyLlNPVU5EKSxjcmVhdGVqcy5SZXF1ZXN0VXRpbHMuaXNBdWRpb1RhZyhhKT90aGlzLl90YWc9YTpjcmVhdGVqcy5SZXF1ZXN0VXRpbHMuaXNBdWRpb1RhZyhhLnNyYyk/dGhpcy5fdGFnPWE6Y3JlYXRlanMuUmVxdWVzdFV0aWxzLmlzQXVkaW9UYWcoYS50YWcpJiYodGhpcy5fdGFnPWNyZWF0ZWpzLlJlcXVlc3RVdGlscy5pc0F1ZGlvVGFnKGEpP2E6YS5zcmMpLG51bGwhPXRoaXMuX3RhZyYmKHRoaXMuX3ByZWZlclhIUj0hMSl9dmFyIGI9Y3JlYXRlanMuZXh0ZW5kKGEsY3JlYXRlanMuQWJzdHJhY3RNZWRpYUxvYWRlciksYz1hO2MuY2FuTG9hZEl0ZW09ZnVuY3Rpb24oYSl7cmV0dXJuIGEudHlwZT09Y3JlYXRlanMuQWJzdHJhY3RMb2FkZXIuU09VTkR9LGIuX2NyZWF0ZVRhZz1mdW5jdGlvbihhKXt2YXIgYj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhdWRpbyIpO3JldHVybiBiLmF1dG9wbGF5PSExLGIucHJlbG9hZD0ibm9uZSIsYi5zcmM9YSxifSxjcmVhdGVqcy5Tb3VuZExvYWRlcj1jcmVhdGVqcy5wcm9tb3RlKGEsIkFic3RyYWN0TWVkaWFMb2FkZXIiKX0oKSx0aGlzLmNyZWF0ZWpzPXRoaXMuY3JlYXRlanN8fHt9LGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGEoYSxiKXt0aGlzLkFic3RyYWN0TWVkaWFMb2FkZXJfY29uc3RydWN0b3IoYSxiLGNyZWF0ZWpzLkFic3RyYWN0TG9hZGVyLlZJREVPKSxjcmVhdGVqcy5SZXF1ZXN0VXRpbHMuaXNWaWRlb1RhZyhhKXx8Y3JlYXRlanMuUmVxdWVzdFV0aWxzLmlzVmlkZW9UYWcoYS5zcmMpPyh0aGlzLnNldFRhZyhjcmVhdGVqcy5SZXF1ZXN0VXRpbHMuaXNWaWRlb1RhZyhhKT9hOmEuc3JjKSx0aGlzLl9wcmVmZXJYSFI9ITEpOnRoaXMuc2V0VGFnKHRoaXMuX2NyZWF0ZVRhZygpKX12YXIgYj1jcmVhdGVqcy5leHRlbmQoYSxjcmVhdGVqcy5BYnN0cmFjdE1lZGlhTG9hZGVyKSxjPWE7Yi5fY3JlYXRlVGFnPWZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInZpZGVvIil9LGMuY2FuTG9hZEl0ZW09ZnVuY3Rpb24oYSl7cmV0dXJuIGEudHlwZT09Y3JlYXRlanMuQWJzdHJhY3RMb2FkZXIuVklERU99LGNyZWF0ZWpzLlZpZGVvTG9hZGVyPWNyZWF0ZWpzLnByb21vdGUoYSwiQWJzdHJhY3RNZWRpYUxvYWRlciIpfSgpLHRoaXMuY3JlYXRlanM9dGhpcy5jcmVhdGVqc3x8e30sZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYShhKXt0aGlzLkFic3RyYWN0TG9hZGVyX2NvbnN0cnVjdG9yKGEsbnVsbCxjcmVhdGVqcy5BYnN0cmFjdExvYWRlci5TUFJJVEVTSEVFVCksdGhpcy5fbWFuaWZlc3RRdWV1ZT1udWxsfXZhciBiPWNyZWF0ZWpzLmV4dGVuZChhLGNyZWF0ZWpzLkFic3RyYWN0TG9hZGVyKSxjPWE7Yy5TUFJJVEVTSEVFVF9QUk9HUkVTUz0uMjUsYy5jYW5Mb2FkSXRlbT1mdW5jdGlvbihhKXtyZXR1cm4gYS50eXBlPT1jcmVhdGVqcy5BYnN0cmFjdExvYWRlci5TUFJJVEVTSEVFVH0sYi5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5BYnN0cmFjdExvYWRlcl9kZXN0cm95LHRoaXMuX21hbmlmZXN0UXVldWUuY2xvc2UoKX0sYi5fY3JlYXRlUmVxdWVzdD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuX2l0ZW0uY2FsbGJhY2s7dGhpcy5fcmVxdWVzdD1udWxsIT1hJiZhIGluc3RhbmNlb2YgRnVuY3Rpb24/bmV3IGNyZWF0ZWpzLkpTT05QTG9hZGVyKHRoaXMuX2l0ZW0pOm5ldyBjcmVhdGVqcy5KU09OTG9hZGVyKHRoaXMuX2l0ZW0pfSxiLmhhbmRsZUV2ZW50PWZ1bmN0aW9uKGEpe3N3aXRjaChhLnR5cGUpe2Nhc2UiY29tcGxldGUiOnJldHVybiB0aGlzLl9yYXdSZXN1bHQ9YS50YXJnZXQuZ2V0UmVzdWx0KCEwKSx0aGlzLl9yZXN1bHQ9YS50YXJnZXQuZ2V0UmVzdWx0KCksdGhpcy5fc2VuZFByb2dyZXNzKGMuU1BSSVRFU0hFRVRfUFJPR1JFU1MpLHZvaWQgdGhpcy5fbG9hZE1hbmlmZXN0KHRoaXMuX3Jlc3VsdCk7Y2FzZSJwcm9ncmVzcyI6cmV0dXJuIGEubG9hZGVkKj1jLlNQUklURVNIRUVUX1BST0dSRVNTLHRoaXMucHJvZ3Jlc3M9YS5sb2FkZWQvYS50b3RhbCwoaXNOYU4odGhpcy5wcm9ncmVzcyl8fDEvMD09dGhpcy5wcm9ncmVzcykmJih0aGlzLnByb2dyZXNzPTApLHZvaWQgdGhpcy5fc2VuZFByb2dyZXNzKGEpfXRoaXMuQWJzdHJhY3RMb2FkZXJfaGFuZGxlRXZlbnQoYSl9LGIuX2xvYWRNYW5pZmVzdD1mdW5jdGlvbihhKXtpZihhJiZhLmltYWdlcyl7dmFyIGI9dGhpcy5fbWFuaWZlc3RRdWV1ZT1uZXcgY3JlYXRlanMuTG9hZFF1ZXVlO2Iub24oImNvbXBsZXRlIix0aGlzLl9oYW5kbGVNYW5pZmVzdENvbXBsZXRlLHRoaXMsITApLGIub24oImZpbGVsb2FkIix0aGlzLl9oYW5kbGVNYW5pZmVzdEZpbGVMb2FkLHRoaXMpLGIub24oInByb2dyZXNzIix0aGlzLl9oYW5kbGVNYW5pZmVzdFByb2dyZXNzLHRoaXMpLGIub24oImVycm9yIix0aGlzLl9oYW5kbGVNYW5pZmVzdEVycm9yLHRoaXMsITApLGIubG9hZE1hbmlmZXN0KGEuaW1hZ2VzKX19LGIuX2hhbmRsZU1hbmlmZXN0RmlsZUxvYWQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS5yZXN1bHQ7aWYobnVsbCE9Yil7dmFyIGM9dGhpcy5nZXRSZXN1bHQoKS5pbWFnZXMsZD1jLmluZGV4T2YoYS5pdGVtLnNyYyk7Y1tkXT1ifX0sYi5faGFuZGxlTWFuaWZlc3RDb21wbGV0ZT1mdW5jdGlvbigpe3RoaXMuX3Jlc3VsdD1uZXcgY3JlYXRlanMuU3ByaXRlU2hlZXQodGhpcy5fcmVzdWx0KSx0aGlzLl9sb2FkZWRJdGVtcz10aGlzLl9tYW5pZmVzdFF1ZXVlLmdldEl0ZW1zKCEwKSx0aGlzLl9zZW5kQ29tcGxldGUoKX0sYi5faGFuZGxlTWFuaWZlc3RQcm9ncmVzcz1mdW5jdGlvbihhKXt0aGlzLnByb2dyZXNzPWEucHJvZ3Jlc3MqKDEtYy5TUFJJVEVTSEVFVF9QUk9HUkVTUykrYy5TUFJJVEVTSEVFVF9QUk9HUkVTUyx0aGlzLl9zZW5kUHJvZ3Jlc3ModGhpcy5wcm9ncmVzcyl9LGIuX2hhbmRsZU1hbmlmZXN0RXJyb3I9ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IGNyZWF0ZWpzLkV2ZW50KCJmaWxlZXJyb3IiKTtiLml0ZW09YS5kYXRhLHRoaXMuZGlzcGF0Y2hFdmVudChiKX0sY3JlYXRlanMuU3ByaXRlU2hlZXRMb2FkZXI9Y3JlYXRlanMucHJvbW90ZShhLCJBYnN0cmFjdExvYWRlciIpfSgpLHRoaXMuY3JlYXRlanM9dGhpcy5jcmVhdGVqc3x8e30sZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYShhLGIpe3RoaXMuQWJzdHJhY3RMb2FkZXJfY29uc3RydWN0b3IoYSxiLGNyZWF0ZWpzLkFic3RyYWN0TG9hZGVyLlNWRyksdGhpcy5yZXN1bHRGb3JtYXR0ZXI9dGhpcy5fZm9ybWF0UmVzdWx0LHRoaXMuX3RhZ1NyY0F0dHJpYnV0ZT0iZGF0YSIsYj90aGlzLnNldFRhZyhkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdmciKSk6KHRoaXMuc2V0VGFnKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9iamVjdCIpKSx0aGlzLmdldFRhZygpLnR5cGU9ImltYWdlL3N2Zyt4bWwiKSx0aGlzLmdldFRhZygpLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiJ9dmFyIGI9Y3JlYXRlanMuZXh0ZW5kKGEsY3JlYXRlanMuQWJzdHJhY3RMb2FkZXIpLGM9YTtjLmNhbkxvYWRJdGVtPWZ1bmN0aW9uKGEpe3JldHVybiBhLnR5cGU9PWNyZWF0ZWpzLkFic3RyYWN0TG9hZGVyLlNWR30sYi5fZm9ybWF0UmVzdWx0PWZ1bmN0aW9uKGEpe3ZhciBiPWNyZWF0ZWpzLkRhdGFVdGlscy5wYXJzZVhNTChhLmdldFJlc3VsdCghMCksInRleHQveG1sIiksYz1hLmdldFRhZygpO3JldHVybiF0aGlzLl9wcmVmZXJYSFImJmRvY3VtZW50LmJvZHkuY29udGFpbnMoYykmJmRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYyksbnVsbCE9Yi5kb2N1bWVudEVsZW1lbnQ/KGMuYXBwZW5kQ2hpbGQoYi5kb2N1bWVudEVsZW1lbnQpLGMuc3R5bGUudmlzaWJpbGl0eT0idmlzaWJsZSIsYyk6Yn0sY3JlYXRlanMuU1ZHTG9hZGVyPWNyZWF0ZWpzLnByb21vdGUoYSwiQWJzdHJhY3RMb2FkZXIiKX0oKSx0aGlzLmNyZWF0ZWpzPXRoaXMuY3JlYXRlanN8fHt9LGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGEoYSl7dGhpcy5BYnN0cmFjdExvYWRlcl9jb25zdHJ1Y3RvcihhLCEwLGNyZWF0ZWpzLkFic3RyYWN0TG9hZGVyLlhNTCksdGhpcy5yZXN1bHRGb3JtYXR0ZXI9dGhpcy5fZm9ybWF0UmVzdWx0fXZhciBiPWNyZWF0ZWpzLmV4dGVuZChhLGNyZWF0ZWpzLkFic3RyYWN0TG9hZGVyKSxjPWE7Yy5jYW5Mb2FkSXRlbT1mdW5jdGlvbihhKXtyZXR1cm4gYS50eXBlPT1jcmVhdGVqcy5BYnN0cmFjdExvYWRlci5YTUx9LGIuX2Zvcm1hdFJlc3VsdD1mdW5jdGlvbihhKXtyZXR1cm4gY3JlYXRlanMuRGF0YVV0aWxzLnBhcnNlWE1MKGEuZ2V0UmVzdWx0KCEwKSwidGV4dC94bWwiKX0sY3JlYXRlanMuWE1MTG9hZGVyPWNyZWF0ZWpzLnByb21vdGUoYSwiQWJzdHJhY3RMb2FkZXIiKX0oKTs=//