declare const content = "LyoqCiogcGxvdGx5LmpzIChiYXNpYyAtIG1pbmlmaWVkKSB2MS41OC40CiogQ29weXJpZ2h0IDIwMTItMjAyMCwgUGxvdGx5LCBJbmMuCiogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UKKi8KIWZ1bmN0aW9uKGUpe2lmKCJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmInVuZGVmaW5lZCIhPXR5cGVvZiBtb2R1bGUpbW9kdWxlLmV4cG9ydHM9ZSgpO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZClkZWZpbmUoW10sZSk7ZWxzZXsoInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp0aGlzKS5QbG90bHk9ZSgpfX0oKGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGUodCxyLG4pe2Z1bmN0aW9uIGEobyxsKXtpZighcltvXSl7aWYoIXRbb10pe3ZhciBzPSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFsJiZzKXJldHVybiBzKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGM9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrbysiJyIpO3Rocm93IGMuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsY312YXIgdT1yW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwodS5leHBvcnRzLChmdW5jdGlvbihlKXtyZXR1cm4gYSh0W29dWzFdW2VdfHxlKX0pLHUsdS5leHBvcnRzLGUsdCxyLG4pfXJldHVybiByW29dLmV4cG9ydHN9Zm9yKHZhciBpPSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLG89MDtvPG4ubGVuZ3RoO28rKylhKG5bb10pO3JldHVybiBhfSh7MTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi9zcmMvbGliIiksYT17IlgsWCBkaXYiOiJkaXJlY3Rpb246bHRyO2ZvbnQtZmFtaWx5OidPcGVuIFNhbnMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjttYXJnaW46MDtwYWRkaW5nOjA7IiwiWCBpbnB1dCxYIGJ1dHRvbiI6ImZvbnQtZmFtaWx5OidPcGVuIFNhbnMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjsiLCJYIGlucHV0OmZvY3VzLFggYnV0dG9uOmZvY3VzIjoib3V0bGluZTpub25lOyIsIlggYSI6InRleHQtZGVjb3JhdGlvbjpub25lOyIsIlggYTpob3ZlciI6InRleHQtZGVjb3JhdGlvbjpub25lOyIsIlggLmNyaXNwIjoic2hhcGUtcmVuZGVyaW5nOmNyaXNwRWRnZXM7IiwiWCAudXNlci1zZWxlY3Qtbm9uZSI6Ii13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7LW8tdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lOyIsIlggc3ZnIjoib3ZlcmZsb3c6aGlkZGVuOyIsIlggc3ZnIGEiOiJmaWxsOiM0NDdhZGI7IiwiWCBzdmcgYTpob3ZlciI6ImZpbGw6IzNjNmRjNTsiLCJYIC5tYWluLXN2ZyI6InBvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtwb2ludGVyLWV2ZW50czpub25lOyIsIlggLm1haW4tc3ZnIC5kcmFnbGF5ZXIiOiJwb2ludGVyLWV2ZW50czphbGw7IiwiWCAuY3Vyc29yLWRlZmF1bHQiOiJjdXJzb3I6ZGVmYXVsdDsiLCJYIC5jdXJzb3ItcG9pbnRlciI6ImN1cnNvcjpwb2ludGVyOyIsIlggLmN1cnNvci1jcm9zc2hhaXIiOiJjdXJzb3I6Y3Jvc3NoYWlyOyIsIlggLmN1cnNvci1tb3ZlIjoiY3Vyc29yOm1vdmU7IiwiWCAuY3Vyc29yLWNvbC1yZXNpemUiOiJjdXJzb3I6Y29sLXJlc2l6ZTsiLCJYIC5jdXJzb3Itcm93LXJlc2l6ZSI6ImN1cnNvcjpyb3ctcmVzaXplOyIsIlggLmN1cnNvci1ucy1yZXNpemUiOiJjdXJzb3I6bnMtcmVzaXplOyIsIlggLmN1cnNvci1ldy1yZXNpemUiOiJjdXJzb3I6ZXctcmVzaXplOyIsIlggLmN1cnNvci1zdy1yZXNpemUiOiJjdXJzb3I6c3ctcmVzaXplOyIsIlggLmN1cnNvci1zLXJlc2l6ZSI6ImN1cnNvcjpzLXJlc2l6ZTsiLCJYIC5jdXJzb3Itc2UtcmVzaXplIjoiY3Vyc29yOnNlLXJlc2l6ZTsiLCJYIC5jdXJzb3Itdy1yZXNpemUiOiJjdXJzb3I6dy1yZXNpemU7IiwiWCAuY3Vyc29yLWUtcmVzaXplIjoiY3Vyc29yOmUtcmVzaXplOyIsIlggLmN1cnNvci1udy1yZXNpemUiOiJjdXJzb3I6bnctcmVzaXplOyIsIlggLmN1cnNvci1uLXJlc2l6ZSI6ImN1cnNvcjpuLXJlc2l6ZTsiLCJYIC5jdXJzb3ItbmUtcmVzaXplIjoiY3Vyc29yOm5lLXJlc2l6ZTsiLCJYIC5jdXJzb3ItZ3JhYiI6ImN1cnNvcjotd2Via2l0LWdyYWI7Y3Vyc29yOmdyYWI7IiwiWCAubW9kZWJhciI6InBvc2l0aW9uOmFic29sdXRlO3RvcDoycHg7cmlnaHQ6MnB4OyIsIlggLmVhc2UtYmciOiItd2Via2l0LXRyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAwLjNzIGVhc2UgMHM7LW1vei10cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgMC4zcyBlYXNlIDBzOy1tcy10cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgMC4zcyBlYXNlIDBzOy1vLXRyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAwLjNzIGVhc2UgMHM7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIDAuM3MgZWFzZSAwczsiLCJYIC5tb2RlYmFyLS1ob3Zlcj46bm90KC53YXRlcm1hcmspIjoib3BhY2l0eTowOy13ZWJraXQtdHJhbnNpdGlvbjpvcGFjaXR5IDAuM3MgZWFzZSAwczstbW96LXRyYW5zaXRpb246b3BhY2l0eSAwLjNzIGVhc2UgMHM7LW1zLXRyYW5zaXRpb246b3BhY2l0eSAwLjNzIGVhc2UgMHM7LW8tdHJhbnNpdGlvbjpvcGFjaXR5IDAuM3MgZWFzZSAwczt0cmFuc2l0aW9uOm9wYWNpdHkgMC4zcyBlYXNlIDBzOyIsIlg6aG92ZXIgLm1vZGViYXItLWhvdmVyIC5tb2RlYmFyLWdyb3VwIjoib3BhY2l0eToxOyIsIlggLm1vZGViYXItZ3JvdXAiOiJmbG9hdDpsZWZ0O2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nLWxlZnQ6OHB4O3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aGl0ZS1zcGFjZTpub3dyYXA7IiwiWCAubW9kZWJhci1idG4iOiJwb3NpdGlvbjpyZWxhdGl2ZTtmb250LXNpemU6MTZweDtwYWRkaW5nOjNweCA0cHg7aGVpZ2h0OjIycHg7Y3Vyc29yOnBvaW50ZXI7bGluZS1oZWlnaHQ6bm9ybWFsO2JveC1zaXppbmc6Ym9yZGVyLWJveDsiLCJYIC5tb2RlYmFyLWJ0biBzdmciOiJwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6MnB4OyIsIlggLm1vZGViYXIudmVydGljYWwiOiJkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtd3JhcDp3cmFwO2FsaWduLWNvbnRlbnQ6ZmxleC1lbmQ7bWF4LWhlaWdodDoxMDAlOyIsIlggLm1vZGViYXIudmVydGljYWwgc3ZnIjoidG9wOi0xcHg7IiwiWCAubW9kZWJhci52ZXJ0aWNhbCAubW9kZWJhci1ncm91cCI6ImRpc3BsYXk6YmxvY2s7ZmxvYXQ6bm9uZTtwYWRkaW5nLWxlZnQ6MHB4O3BhZGRpbmctYm90dG9tOjhweDsiLCJYIC5tb2RlYmFyLnZlcnRpY2FsIC5tb2RlYmFyLWdyb3VwIC5tb2RlYmFyLWJ0biI6ImRpc3BsYXk6YmxvY2s7dGV4dC1hbGlnbjpjZW50ZXI7IiwiWCBbZGF0YS10aXRsZV06YmVmb3JlLFggW2RhdGEtdGl0bGVdOmFmdGVyIjoicG9zaXRpb246YWJzb2x1dGU7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7LW1vei10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTstby10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApO2Rpc3BsYXk6bm9uZTtvcGFjaXR5OjA7ei1pbmRleDoxMDAxO3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjExMCU7cmlnaHQ6NTAlOyIsIlggW2RhdGEtdGl0bGVdOmhvdmVyOmJlZm9yZSxYIFtkYXRhLXRpdGxlXTpob3ZlcjphZnRlciI6ImRpc3BsYXk6YmxvY2s7b3BhY2l0eToxOyIsIlggW2RhdGEtdGl0bGVdOmJlZm9yZSI6ImNvbnRlbnQ6Jyc7cG9zaXRpb246YWJzb2x1dGU7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXI6NnB4IHNvbGlkIHRyYW5zcGFyZW50O3otaW5kZXg6MTAwMjttYXJnaW4tdG9wOi0xMnB4O2JvcmRlci1ib3R0b20tY29sb3I6IzY5NzM4YTttYXJnaW4tcmlnaHQ6LTZweDsiLCJYIFtkYXRhLXRpdGxlXTphZnRlciI6ImNvbnRlbnQ6YXR0cihkYXRhLXRpdGxlKTtiYWNrZ3JvdW5kOiM2OTczOGE7Y29sb3I6d2hpdGU7cGFkZGluZzo4cHggMTBweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxMnB4O3doaXRlLXNwYWNlOm5vd3JhcDttYXJnaW4tcmlnaHQ6LTE4cHg7Ym9yZGVyLXJhZGl1czoycHg7IiwiWCAudmVydGljYWwgW2RhdGEtdGl0bGVdOmJlZm9yZSxYIC52ZXJ0aWNhbCBbZGF0YS10aXRsZV06YWZ0ZXIiOiJ0b3A6MCU7cmlnaHQ6MjAwJTsiLCJYIC52ZXJ0aWNhbCBbZGF0YS10aXRsZV06YmVmb3JlIjoiYm9yZGVyOjZweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItbGVmdC1jb2xvcjojNjk3MzhhO21hcmdpbi10b3A6OHB4O21hcmdpbi1yaWdodDotMzBweDsiLCJYIC5zZWxlY3Qtb3V0bGluZSI6ImZpbGw6bm9uZTtzdHJva2Utd2lkdGg6MTtzaGFwZS1yZW5kZXJpbmc6Y3Jpc3BFZGdlczsiLCJYIC5zZWxlY3Qtb3V0bGluZS0xIjoic3Ryb2tlOndoaXRlOyIsIlggLnNlbGVjdC1vdXRsaW5lLTIiOiJzdHJva2U6YmxhY2s7c3Ryb2tlLWRhc2hhcnJheToycHggMnB4OyIsWToiZm9udC1mYW1pbHk6J09wZW4gU2FucycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmO3Bvc2l0aW9uOmZpeGVkO3RvcDo1MHB4O3JpZ2h0OjIwcHg7ei1pbmRleDoxMDAwMDtmb250LXNpemU6MTBwdDttYXgtd2lkdGg6MTgwcHg7IiwiWSBwIjoibWFyZ2luOjA7IiwiWSAubm90aWZpZXItbm90ZSI6Im1pbi13aWR0aDoxODBweDttYXgtd2lkdGg6MjUwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZmZmO3otaW5kZXg6MzAwMDttYXJnaW46MDtiYWNrZ3JvdW5kLWNvbG9yOiM4Yzk3YWY7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE0MCwxNTEsMTc1LDAuOSk7Y29sb3I6I2ZmZjtwYWRkaW5nOjEwcHg7b3ZlcmZsb3ctd3JhcDpicmVhay13b3JkO3dvcmQtd3JhcDpicmVhay13b3JkOy1tcy1oeXBoZW5zOmF1dG87LXdlYmtpdC1oeXBoZW5zOmF1dG87aHlwaGVuczphdXRvOyIsIlkgLm5vdGlmaWVyLWNsb3NlIjoiY29sb3I6I2ZmZjtvcGFjaXR5OjAuODtmbG9hdDpyaWdodDtwYWRkaW5nOjAgNXB4O2JhY2tncm91bmQ6bm9uZTtib3JkZXI6bm9uZTtmb250LXNpemU6MjBweDtmb250LXdlaWdodDpib2xkO2xpbmUtaGVpZ2h0OjIwcHg7IiwiWSAubm90aWZpZXItY2xvc2U6aG92ZXIiOiJjb2xvcjojNDQ0O3RleHQtZGVjb3JhdGlvbjpub25lO2N1cnNvcjpwb2ludGVyOyJ9O2Zvcih2YXIgaSBpbiBhKXt2YXIgbz1pLnJlcGxhY2UoL14sLywiICwiKS5yZXBsYWNlKC9YL2csIi5qcy1wbG90bHktcGxvdCAucGxvdGx5IikucmVwbGFjZSgvWS9nLCIucGxvdGx5LW5vdGlmaWVyIik7bi5hZGRTdHlsZVJ1bGUobyxhW2ldKX19LHsiLi4vc3JjL2xpYiI6MjAyfV0sMjpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9ZSgiLi4vc3JjL3RyYWNlcy9iYXIiKX0seyIuLi9zcmMvdHJhY2VzL2JhciI6MzA4fV0sMzpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9ZSgiLi4vc3JjL2NvcmUiKX0seyIuLi9zcmMvY29yZSI6MTgzfV0sNDpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuL2NvcmUiKTtuLnJlZ2lzdGVyKFtlKCIuL2JhciIpLGUoIi4vcGllIildKSx0LmV4cG9ydHM9bn0seyIuL2JhciI6MiwiLi9jb3JlIjozLCIuL3BpZSI6NX1dLDU6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPWUoIi4uL3NyYy90cmFjZXMvcGllIil9LHsiLi4vc3JjL3RyYWNlcy9waWUiOjMyM31dLDY6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG4sYT0ib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3Q/UmVmbGVjdDpudWxsLGk9YSYmImZ1bmN0aW9uIj09dHlwZW9mIGEuYXBwbHk/YS5hcHBseTpmdW5jdGlvbihlLHQscil7cmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKGUsdCxyKX07bj1hJiYiZnVuY3Rpb24iPT10eXBlb2YgYS5vd25LZXlzP2Eub3duS2V5czpPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP2Z1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKS5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKSl9OmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKX07dmFyIG89TnVtYmVyLmlzTmFOfHxmdW5jdGlvbihlKXtyZXR1cm4gZSE9ZX07ZnVuY3Rpb24gbCgpe2wuaW5pdC5jYWxsKHRoaXMpfXQuZXhwb3J0cz1sLHQuZXhwb3J0cy5vbmNlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihyLG4pe2Z1bmN0aW9uIGEoKXt2b2lkIDAhPT1pJiZlLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsaSkscihbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpfXZhciBpOyJlcnJvciIhPT10JiYoaT1mdW5jdGlvbihyKXtlLnJlbW92ZUxpc3RlbmVyKHQsYSksbihyKX0sZS5vbmNlKCJlcnJvciIsaSkpLGUub25jZSh0LGEpfSkpfSxsLkV2ZW50RW1pdHRlcj1sLGwucHJvdG90eXBlLl9ldmVudHM9dm9pZCAwLGwucHJvdG90eXBlLl9ldmVudHNDb3VudD0wLGwucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnM9dm9pZCAwO3ZhciBzPTEwO2Z1bmN0aW9uIGMoZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJsaXN0ZW5lciIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIGUpfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIHZvaWQgMD09PWUuX21heExpc3RlbmVycz9sLmRlZmF1bHRNYXhMaXN0ZW5lcnM6ZS5fbWF4TGlzdGVuZXJzfWZ1bmN0aW9uIGYoZSx0LHIsbil7dmFyIGEsaSxvLGw7aWYoYyhyKSx2b2lkIDA9PT0oaT1lLl9ldmVudHMpPyhpPWUuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLGUuX2V2ZW50c0NvdW50PTApOih2b2lkIDAhPT1pLm5ld0xpc3RlbmVyJiYoZS5lbWl0KCJuZXdMaXN0ZW5lciIsdCxyLmxpc3RlbmVyP3IubGlzdGVuZXI6ciksaT1lLl9ldmVudHMpLG89aVt0XSksdm9pZCAwPT09bylvPWlbdF09ciwrK2UuX2V2ZW50c0NvdW50O2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIG8/bz1pW3RdPW4/W3Isb106W28scl06bj9vLnVuc2hpZnQocik6by5wdXNoKHIpLChhPXUoZSkpPjAmJm8ubGVuZ3RoPmEmJiFvLndhcm5lZCl7by53YXJuZWQ9ITA7dmFyIHM9bmV3IEVycm9yKCJQb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuICIrby5sZW5ndGgrIiAiK1N0cmluZyh0KSsiIGxpc3RlbmVycyBhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gaW5jcmVhc2UgbGltaXQiKTtzLm5hbWU9Ik1heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZyIscy5lbWl0dGVyPWUscy50eXBlPXQscy5jb3VudD1vLmxlbmd0aCxsPXMsY29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4obCl9cmV0dXJuIGV9ZnVuY3Rpb24gZCgpe2lmKCF0aGlzLmZpcmVkKXJldHVybiB0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsdGhpcy53cmFwRm4pLHRoaXMuZmlyZWQ9ITAsMD09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0KTp0aGlzLmxpc3RlbmVyLmFwcGx5KHRoaXMudGFyZ2V0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gcChlLHQscil7dmFyIG49e2ZpcmVkOiExLHdyYXBGbjp2b2lkIDAsdGFyZ2V0OmUsdHlwZTp0LGxpc3RlbmVyOnJ9LGE9ZC5iaW5kKG4pO3JldHVybiBhLmxpc3RlbmVyPXIsbi53cmFwRm49YSxhfWZ1bmN0aW9uIGgoZSx0LHIpe3ZhciBuPWUuX2V2ZW50cztpZih2b2lkIDA9PT1uKXJldHVybltdO3ZhciBhPW5bdF07cmV0dXJuIHZvaWQgMD09PWE/W106ImZ1bmN0aW9uIj09dHlwZW9mIGE/cj9bYS5saXN0ZW5lcnx8YV06W2FdOnI/ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PW5ldyBBcnJheShlLmxlbmd0aCkscj0wO3I8dC5sZW5ndGg7KytyKXRbcl09ZVtyXS5saXN0ZW5lcnx8ZVtyXTtyZXR1cm4gdH0oYSk6dihhLGEubGVuZ3RoKX1mdW5jdGlvbiBnKGUpe3ZhciB0PXRoaXMuX2V2ZW50cztpZih2b2lkIDAhPT10KXt2YXIgcj10W2VdO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiByKXJldHVybiAxO2lmKHZvaWQgMCE9PXIpcmV0dXJuIHIubGVuZ3RofXJldHVybiAwfWZ1bmN0aW9uIHYoZSx0KXtmb3IodmFyIHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09ZVtuXTtyZXR1cm4gcn1PYmplY3QuZGVmaW5lUHJvcGVydHkobCwiZGVmYXVsdE1heExpc3RlbmVycyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHN9LHNldDpmdW5jdGlvbihlKXtpZigibnVtYmVyIiE9dHlwZW9mIGV8fGU8MHx8byhlKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mICJkZWZhdWx0TWF4TGlzdGVuZXJzIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnK2UrIi4iKTtzPWV9fSksbC5pbml0PWZ1bmN0aW9uKCl7dm9pZCAwIT09dGhpcy5fZXZlbnRzJiZ0aGlzLl9ldmVudHMhPT1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykuX2V2ZW50c3x8KHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApLHRoaXMuX21heExpc3RlbmVycz10aGlzLl9tYXhMaXN0ZW5lcnN8fHZvaWQgMH0sbC5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZXx8ZTwwfHxvKGUpKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgIm4iIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcrZSsiLiIpO3JldHVybiB0aGlzLl9tYXhMaXN0ZW5lcnM9ZSx0aGlzfSxsLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdSh0aGlzKX0sbC5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10scj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspdC5wdXNoKGFyZ3VtZW50c1tyXSk7dmFyIG49ImVycm9yIj09PWUsYT10aGlzLl9ldmVudHM7aWYodm9pZCAwIT09YSluPW4mJnZvaWQgMD09PWEuZXJyb3I7ZWxzZSBpZighbilyZXR1cm4hMTtpZihuKXt2YXIgbztpZih0Lmxlbmd0aD4wJiYobz10WzBdKSxvIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgbzt2YXIgbD1uZXcgRXJyb3IoIlVuaGFuZGxlZCBlcnJvci4iKyhvPyIgKCIrby5tZXNzYWdlKyIpIjoiIikpO3Rocm93IGwuY29udGV4dD1vLGx9dmFyIHM9YVtlXTtpZih2b2lkIDA9PT1zKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBzKWkocyx0aGlzLHQpO2Vsc2V7dmFyIGM9cy5sZW5ndGgsdT12KHMsYyk7Zm9yKHI9MDtyPGM7KytyKWkodVtyXSx0aGlzLHQpfXJldHVybiEwfSxsLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1mdW5jdGlvbihlLHQpe3JldHVybiBmKHRoaXMsZSx0LCExKX0sbC5wcm90b3R5cGUub249bC5wcm90b3R5cGUuYWRkTGlzdGVuZXIsbC5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGYodGhpcyxlLHQsITApfSxsLnByb3RvdHlwZS5vbmNlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGModCksdGhpcy5vbihlLHAodGhpcyxlLHQpKSx0aGlzfSxsLnByb3RvdHlwZS5wcmVwZW5kT25jZUxpc3RlbmVyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGModCksdGhpcy5wcmVwZW5kTGlzdGVuZXIoZSxwKHRoaXMsZSx0KSksdGhpc30sbC5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGEsaSxvO2lmKGModCksdm9pZCAwPT09KG49dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZih2b2lkIDA9PT0ocj1uW2VdKSlyZXR1cm4gdGhpcztpZihyPT09dHx8ci5saXN0ZW5lcj09PXQpMD09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKTooZGVsZXRlIG5bZV0sbi5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KCJyZW1vdmVMaXN0ZW5lciIsZSxyLmxpc3RlbmVyfHx0KSk7ZWxzZSBpZigiZnVuY3Rpb24iIT10eXBlb2Ygcil7Zm9yKGE9LTEsaT1yLmxlbmd0aC0xO2k+PTA7aS0tKWlmKHJbaV09PT10fHxyW2ldLmxpc3RlbmVyPT09dCl7bz1yW2ldLmxpc3RlbmVyLGE9aTticmVha31pZihhPDApcmV0dXJuIHRoaXM7MD09PWE/ci5zaGlmdCgpOmZ1bmN0aW9uKGUsdCl7Zm9yKDt0KzE8ZS5sZW5ndGg7dCsrKWVbdF09ZVt0KzFdO2UucG9wKCl9KHIsYSksMT09PXIubGVuZ3RoJiYobltlXT1yWzBdKSx2b2lkIDAhPT1uLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoInJlbW92ZUxpc3RlbmVyIixlLG98fHQpfXJldHVybiB0aGlzfSxsLnByb3RvdHlwZS5vZmY9bC5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIsbC5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKGUpe3ZhciB0LHIsbjtpZih2b2lkIDA9PT0ocj10aGlzLl9ldmVudHMpKXJldHVybiB0aGlzO2lmKHZvaWQgMD09PXIucmVtb3ZlTGlzdGVuZXIpcmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoPyh0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wKTp2b2lkIDAhPT1yW2VdJiYoMD09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKTpkZWxldGUgcltlXSksdGhpcztpZigwPT09YXJndW1lbnRzLmxlbmd0aCl7dmFyIGEsaT1PYmplY3Qua2V5cyhyKTtmb3Iobj0wO248aS5sZW5ndGg7KytuKSJyZW1vdmVMaXN0ZW5lciIhPT0oYT1pW25dKSYmdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoYSk7cmV0dXJuIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCJyZW1vdmVMaXN0ZW5lciIpLHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTAsdGhpc31pZigiZnVuY3Rpb24iPT10eXBlb2YodD1yW2VdKSl0aGlzLnJlbW92ZUxpc3RlbmVyKGUsdCk7ZWxzZSBpZih2b2lkIDAhPT10KWZvcihuPXQubGVuZ3RoLTE7bj49MDtuLS0pdGhpcy5yZW1vdmVMaXN0ZW5lcihlLHRbbl0pO3JldHVybiB0aGlzfSxsLnByb3RvdHlwZS5saXN0ZW5lcnM9ZnVuY3Rpb24oZSl7cmV0dXJuIGgodGhpcyxlLCEwKX0sbC5wcm90b3R5cGUucmF3TGlzdGVuZXJzPWZ1bmN0aW9uKGUpe3JldHVybiBoKHRoaXMsZSwhMSl9LGwubGlzdGVuZXJDb3VudD1mdW5jdGlvbihlLHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlLmxpc3RlbmVyQ291bnQ/ZS5saXN0ZW5lckNvdW50KHQpOmcuY2FsbChlLHQpfSxsLnByb3RvdHlwZS5saXN0ZW5lckNvdW50PWcsbC5wcm90b3R5cGUuZXZlbnROYW1lcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ldmVudHNDb3VudD4wP24odGhpcy5fZXZlbnRzKTpbXX19LHt9XSw3OltmdW5jdGlvbihlLHQscil7IWZ1bmN0aW9uKG4sYSl7Im9iamVjdCI9PXR5cGVvZiByJiYidW5kZWZpbmVkIiE9dHlwZW9mIHQ/YShyLGUoImQzLXRpbWUiKSk6YSgobj1ufHxzZWxmKS5kMz1uLmQzfHx7fSxuLmQzKX0odGhpcywoZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZigwPD1lLnkmJmUueTwxMDApe3ZhciB0PW5ldyBEYXRlKC0xLGUubSxlLmQsZS5ILGUuTSxlLlMsZS5MKTtyZXR1cm4gdC5zZXRGdWxsWWVhcihlLnkpLHR9cmV0dXJuIG5ldyBEYXRlKGUueSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCl9ZnVuY3Rpb24gbihlKXtpZigwPD1lLnkmJmUueTwxMDApe3ZhciB0PW5ldyBEYXRlKERhdGUuVVRDKC0xLGUubSxlLmQsZS5ILGUuTSxlLlMsZS5MKSk7cmV0dXJuIHQuc2V0VVRDRnVsbFllYXIoZS55KSx0fXJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyhlLnksZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpKX1mdW5jdGlvbiBhKGUsdCxyKXtyZXR1cm57eTplLG06dCxkOnIsSDowLE06MCxTOjAsTDowfX1mdW5jdGlvbiBpKGUpe3ZhciBpPWUuZGF0ZVRpbWUsbz1lLmRhdGUscz1lLnRpbWUsYz1lLnBlcmlvZHMsdT1lLmRheXMsZj1lLnNob3J0RGF5cyxkPWUubW9udGhzLHllPWUuc2hvcnRNb250aHMseGU9cChjKSxiZT1oKGMpLF9lPXAodSksd2U9aCh1KSxUZT1wKGYpLGtlPWgoZiksTWU9cChkKSxBZT1oKGQpLExlPXAoeWUpLFNlPWgoeWUpLENlPXthOmZ1bmN0aW9uKGUpe3JldHVybiBmW2UuZ2V0RGF5KCldfSxBOmZ1bmN0aW9uKGUpe3JldHVybiB1W2UuZ2V0RGF5KCldfSxiOmZ1bmN0aW9uKGUpe3JldHVybiB5ZVtlLmdldE1vbnRoKCldfSxCOmZ1bmN0aW9uKGUpe3JldHVybiBkW2UuZ2V0TW9udGgoKV19LGM6bnVsbCxkOkUsZTpFLGY6aixIOkksSTpGLGo6TixMOkgsbTpCLE06VixwOmZ1bmN0aW9uKGUpe3JldHVybiBjWysoZS5nZXRIb3VycygpPj0xMildfSxxOmZ1bmN0aW9uKGUpe3JldHVybiAxK35+KGUuZ2V0TW9udGgoKS8zKX0sUTp2ZSxzOm1lLFM6VSx1OnEsVTpHLFY6Wix3OlksVzpYLHg6bnVsbCxYOm51bGwseTpXLFk6USxaOkosIiUiOmdlfSxPZT17YTpmdW5jdGlvbihlKXtyZXR1cm4gZltlLmdldFVUQ0RheSgpXX0sQTpmdW5jdGlvbihlKXtyZXR1cm4gdVtlLmdldFVUQ0RheSgpXX0sYjpmdW5jdGlvbihlKXtyZXR1cm4geWVbZS5nZXRVVENNb250aCgpXX0sQjpmdW5jdGlvbihlKXtyZXR1cm4gZFtlLmdldFVUQ01vbnRoKCldfSxjOm51bGwsZDokLGU6JCxmOm5lLEg6SyxJOmVlLGo6dGUsTDpyZSxtOmFlLE06aWUscDpmdW5jdGlvbihlKXtyZXR1cm4gY1srKGUuZ2V0VVRDSG91cnMoKT49MTIpXX0scTpmdW5jdGlvbihlKXtyZXR1cm4gMSt+fihlLmdldFVUQ01vbnRoKCkvMyl9LFE6dmUsczptZSxTOm9lLHU6bGUsVTpzZSxWOmNlLHc6dWUsVzpmZSx4Om51bGwsWDpudWxsLHk6ZGUsWTpwZSxaOmhlLCIlIjpnZX0sRGU9e2E6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPVRlLmV4ZWModC5zbGljZShyKSk7cmV0dXJuIG4/KGUudz1rZVtuWzBdLnRvTG93ZXJDYXNlKCldLHIrblswXS5sZW5ndGgpOi0xfSxBOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1fZS5leGVjKHQuc2xpY2UocikpO3JldHVybiBuPyhlLnc9d2VbblswXS50b0xvd2VyQ2FzZSgpXSxyK25bMF0ubGVuZ3RoKTotMX0sYjpmdW5jdGlvbihlLHQscil7dmFyIG49TGUuZXhlYyh0LnNsaWNlKHIpKTtyZXR1cm4gbj8oZS5tPVNlW25bMF0udG9Mb3dlckNhc2UoKV0scituWzBdLmxlbmd0aCk6LTF9LEI6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPU1lLmV4ZWModC5zbGljZShyKSk7cmV0dXJuIG4/KGUubT1BZVtuWzBdLnRvTG93ZXJDYXNlKCldLHIrblswXS5sZW5ndGgpOi0xfSxjOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gUmUoZSxpLHQscil9LGQ6TSxlOk0sZjpELEg6TCxJOkwsajpBLEw6TyxtOmssTTpTLHA6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXhlLmV4ZWModC5zbGljZShyKSk7cmV0dXJuIG4/KGUucD1iZVtuWzBdLnRvTG93ZXJDYXNlKCldLHIrblswXS5sZW5ndGgpOi0xfSxxOlQsUTp6LHM6UixTOkMsdTp2LFU6bSxWOnksdzpnLFc6eCx4OmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gUmUoZSxvLHQscil9LFg6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBSZShlLHMsdCxyKX0seTpfLFk6YixaOncsIiUiOlB9O2Z1bmN0aW9uIFBlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuLGEsaSxvPVtdLHM9LTEsYz0wLHU9ZS5sZW5ndGg7Zm9yKHIgaW5zdGFuY2VvZiBEYXRlfHwocj1uZXcgRGF0ZSgrcikpOysrczx1OykzNz09PWUuY2hhckNvZGVBdChzKSYmKG8ucHVzaChlLnNsaWNlKGMscykpLG51bGwhPShhPWxbbj1lLmNoYXJBdCgrK3MpXSk/bj1lLmNoYXJBdCgrK3MpOmE9ImUiPT09bj8iICI6IjAiLChpPXRbbl0pJiYobj1pKHIsYSkpLG8ucHVzaChuKSxjPXMrMSk7cmV0dXJuIG8ucHVzaChlLnNsaWNlKGMscykpLG8uam9pbigiIil9fWZ1bmN0aW9uIHplKGUsaSl7cmV0dXJuIGZ1bmN0aW9uKG8pe3ZhciBsLHMsYz1hKDE5MDAsdm9pZCAwLDEpO2lmKFJlKGMsZSxvKz0iIiwwKSE9by5sZW5ndGgpcmV0dXJuIG51bGw7aWYoIlEiaW4gYylyZXR1cm4gbmV3IERhdGUoYy5RKTtpZigicyJpbiBjKXJldHVybiBuZXcgRGF0ZSgxZTMqYy5zKygiTCJpbiBjP2MuTDowKSk7aWYoaSYmISgiWiJpbiBjKSYmKGMuWj0wKSwicCJpbiBjJiYoYy5IPWMuSCUxMisxMipjLnApLHZvaWQgMD09PWMubSYmKGMubT0icSJpbiBjP2MucTowKSwiViJpbiBjKXtpZihjLlY8MXx8Yy5WPjUzKXJldHVybiBudWxsOyJ3ImluIGN8fChjLnc9MSksIloiaW4gYz8ocz0obD1uKGEoYy55LDAsMSkpKS5nZXRVVENEYXkoKSxsPXM+NHx8MD09PXM/dC51dGNNb25kYXkuY2VpbChsKTp0LnV0Y01vbmRheShsKSxsPXQudXRjRGF5Lm9mZnNldChsLDcqKGMuVi0xKSksYy55PWwuZ2V0VVRDRnVsbFllYXIoKSxjLm09bC5nZXRVVENNb250aCgpLGMuZD1sLmdldFVUQ0RhdGUoKSsoYy53KzYpJTcpOihzPShsPXIoYShjLnksMCwxKSkpLmdldERheSgpLGw9cz40fHwwPT09cz90LnRpbWVNb25kYXkuY2VpbChsKTp0LnRpbWVNb25kYXkobCksbD10LnRpbWVEYXkub2Zmc2V0KGwsNyooYy5WLTEpKSxjLnk9bC5nZXRGdWxsWWVhcigpLGMubT1sLmdldE1vbnRoKCksYy5kPWwuZ2V0RGF0ZSgpKyhjLncrNiklNyl9ZWxzZSgiVyJpbiBjfHwiVSJpbiBjKSYmKCJ3ImluIGN8fChjLnc9InUiaW4gYz9jLnUlNzoiVyJpbiBjPzE6MCkscz0iWiJpbiBjP24oYShjLnksMCwxKSkuZ2V0VVRDRGF5KCk6cihhKGMueSwwLDEpKS5nZXREYXkoKSxjLm09MCxjLmQ9IlciaW4gYz8oYy53KzYpJTcrNypjLlctKHMrNSklNzpjLncrNypjLlUtKHMrNiklNyk7cmV0dXJuIloiaW4gYz8oYy5IKz1jLlovMTAwfDAsYy5NKz1jLlolMTAwLG4oYykpOnIoYyl9fWZ1bmN0aW9uIFJlKGUsdCxyLG4pe2Zvcih2YXIgYSxpLG89MCxzPXQubGVuZ3RoLGM9ci5sZW5ndGg7bzxzOyl7aWYobj49YylyZXR1cm4tMTtpZigzNz09PShhPXQuY2hhckNvZGVBdChvKyspKSl7aWYoYT10LmNoYXJBdChvKyspLCEoaT1EZVthIGluIGw/dC5jaGFyQXQobysrKTphXSl8fChuPWkoZSxyLG4pKTwwKXJldHVybi0xfWVsc2UgaWYoYSE9ci5jaGFyQ29kZUF0KG4rKykpcmV0dXJuLTF9cmV0dXJuIG59cmV0dXJuIENlLng9UGUobyxDZSksQ2UuWD1QZShzLENlKSxDZS5jPVBlKGksQ2UpLE9lLng9UGUobyxPZSksT2UuWD1QZShzLE9lKSxPZS5jPVBlKGksT2UpLHtmb3JtYXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9UGUoZSs9IiIsQ2UpO3JldHVybiB0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGV9LHR9LHBhcnNlOmZ1bmN0aW9uKGUpe3ZhciB0PXplKGUrPSIiLCExKTtyZXR1cm4gdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBlfSx0fSx1dGNGb3JtYXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9UGUoZSs9IiIsT2UpO3JldHVybiB0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGV9LHR9LHV0Y1BhcnNlOmZ1bmN0aW9uKGUpe3ZhciB0PXplKGUrPSIiLCEwKTtyZXR1cm4gdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBlfSx0fX19dmFyIG8sbD17Ii0iOiIiLF86IiAiLDA6IjAifSxzPS9eXHMqXGQrLyxjPS9eJS8sdT0vW1xcXiQqKz98W1xdKCkue31dL2c7ZnVuY3Rpb24gZihlLHQscil7dmFyIG49ZTwwPyItIjoiIixhPShuPy1lOmUpKyIiLGk9YS5sZW5ndGg7cmV0dXJuIG4rKGk8cj9uZXcgQXJyYXkoci1pKzEpLmpvaW4odCkrYTphKX1mdW5jdGlvbiBkKGUpe3JldHVybiBlLnJlcGxhY2UodSwiXFwkJiIpfWZ1bmN0aW9uIHAoZSl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK2UubWFwKGQpLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBoKGUpe2Zvcih2YXIgdD17fSxyPS0xLG49ZS5sZW5ndGg7KytyPG47KXRbZVtyXS50b0xvd2VyQ2FzZSgpXT1yO3JldHVybiB0fWZ1bmN0aW9uIGcoZSx0LHIpe3ZhciBuPXMuZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUudz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB2KGUsdCxyKXt2YXIgbj1zLmV4ZWModC5zbGljZShyLHIrMSkpO3JldHVybiBuPyhlLnU9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbShlLHQscil7dmFyIG49cy5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5VPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHkoZSx0LHIpe3ZhciBuPXMuZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuVj0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB4KGUsdCxyKXt2YXIgbj1zLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlc9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gYihlLHQscil7dmFyIG49cy5leGVjKHQuc2xpY2UocixyKzQpKTtyZXR1cm4gbj8oZS55PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIF8oZSx0LHIpe3ZhciBuPXMuZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUueT0rblswXSsoK25bMF0+Njg/MTkwMDoyZTMpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHcoZSx0LHIpe3ZhciBuPS9eKFopfChbKy1dXGRcZCkoPzo6PyhcZFxkKSk/Ly5leGVjKHQuc2xpY2UocixyKzYpKTtyZXR1cm4gbj8oZS5aPW5bMV0/MDotKG5bMl0rKG5bM118fCIwMCIpKSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBUKGUsdCxyKXt2YXIgbj1zLmV4ZWModC5zbGljZShyLHIrMSkpO3JldHVybiBuPyhlLnE9MypuWzBdLTMscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gayhlLHQscil7dmFyIG49cy5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5tPW5bMF0tMSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBNKGUsdCxyKXt2YXIgbj1zLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLmQ9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQShlLHQscil7dmFyIG49cy5leGVjKHQuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8oZS5tPTAsZS5kPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEwoZSx0LHIpe3ZhciBuPXMuZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuSD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBTKGUsdCxyKXt2YXIgbj1zLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLk09K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQyhlLHQscil7dmFyIG49cy5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5TPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE8oZSx0LHIpe3ZhciBuPXMuZXhlYyh0LnNsaWNlKHIsciszKSk7cmV0dXJuIG4/KGUuTD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBEKGUsdCxyKXt2YXIgbj1zLmV4ZWModC5zbGljZShyLHIrNikpO3JldHVybiBuPyhlLkw9TWF0aC5mbG9vcihuWzBdLzFlMykscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUChlLHQscil7dmFyIG49Yy5leGVjKHQuc2xpY2UocixyKzEpKTtyZXR1cm4gbj9yK25bMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIHooZSx0LHIpe3ZhciBuPXMuZXhlYyh0LnNsaWNlKHIpKTtyZXR1cm4gbj8oZS5RPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFIoZSx0LHIpe3ZhciBuPXMuZXhlYyh0LnNsaWNlKHIpKTtyZXR1cm4gbj8oZS5zPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEUoZSx0KXtyZXR1cm4gZihlLmdldERhdGUoKSx0LDIpfWZ1bmN0aW9uIEkoZSx0KXtyZXR1cm4gZihlLmdldEhvdXJzKCksdCwyKX1mdW5jdGlvbiBGKGUsdCl7cmV0dXJuIGYoZS5nZXRIb3VycygpJTEyfHwxMix0LDIpfWZ1bmN0aW9uIE4oZSxyKXtyZXR1cm4gZigxK3QudGltZURheS5jb3VudCh0LnRpbWVZZWFyKGUpLGUpLHIsMyl9ZnVuY3Rpb24gSChlLHQpe3JldHVybiBmKGUuZ2V0TWlsbGlzZWNvbmRzKCksdCwzKX1mdW5jdGlvbiBqKGUsdCl7cmV0dXJuIEgoZSx0KSsiMDAwIn1mdW5jdGlvbiBCKGUsdCl7cmV0dXJuIGYoZS5nZXRNb250aCgpKzEsdCwyKX1mdW5jdGlvbiBWKGUsdCl7cmV0dXJuIGYoZS5nZXRNaW51dGVzKCksdCwyKX1mdW5jdGlvbiBVKGUsdCl7cmV0dXJuIGYoZS5nZXRTZWNvbmRzKCksdCwyKX1mdW5jdGlvbiBxKGUpe3ZhciB0PWUuZ2V0RGF5KCk7cmV0dXJuIDA9PT10Pzc6dH1mdW5jdGlvbiBHKGUscil7cmV0dXJuIGYodC50aW1lU3VuZGF5LmNvdW50KHQudGltZVllYXIoZSktMSxlKSxyLDIpfWZ1bmN0aW9uIFooZSxyKXt2YXIgbj1lLmdldERheSgpO3JldHVybiBlPW4+PTR8fDA9PT1uP3QudGltZVRodXJzZGF5KGUpOnQudGltZVRodXJzZGF5LmNlaWwoZSksZih0LnRpbWVUaHVyc2RheS5jb3VudCh0LnRpbWVZZWFyKGUpLGUpKyg0PT09dC50aW1lWWVhcihlKS5nZXREYXkoKSksciwyKX1mdW5jdGlvbiBZKGUpe3JldHVybiBlLmdldERheSgpfWZ1bmN0aW9uIFgoZSxyKXtyZXR1cm4gZih0LnRpbWVNb25kYXkuY291bnQodC50aW1lWWVhcihlKS0xLGUpLHIsMil9ZnVuY3Rpb24gVyhlLHQpe3JldHVybiBmKGUuZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBRKGUsdCl7cmV0dXJuIGYoZS5nZXRGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIEooZSl7dmFyIHQ9ZS5nZXRUaW1lem9uZU9mZnNldCgpO3JldHVybih0PjA/Ii0iOih0Kj0tMSwiKyIpKStmKHQvNjB8MCwiMCIsMikrZih0JTYwLCIwIiwyKX1mdW5jdGlvbiAkKGUsdCl7cmV0dXJuIGYoZS5nZXRVVENEYXRlKCksdCwyKX1mdW5jdGlvbiBLKGUsdCl7cmV0dXJuIGYoZS5nZXRVVENIb3VycygpLHQsMil9ZnVuY3Rpb24gZWUoZSx0KXtyZXR1cm4gZihlLmdldFVUQ0hvdXJzKCklMTJ8fDEyLHQsMil9ZnVuY3Rpb24gdGUoZSxyKXtyZXR1cm4gZigxK3QudXRjRGF5LmNvdW50KHQudXRjWWVhcihlKSxlKSxyLDMpfWZ1bmN0aW9uIHJlKGUsdCl7cmV0dXJuIGYoZS5nZXRVVENNaWxsaXNlY29uZHMoKSx0LDMpfWZ1bmN0aW9uIG5lKGUsdCl7cmV0dXJuIHJlKGUsdCkrIjAwMCJ9ZnVuY3Rpb24gYWUoZSx0KXtyZXR1cm4gZihlLmdldFVUQ01vbnRoKCkrMSx0LDIpfWZ1bmN0aW9uIGllKGUsdCl7cmV0dXJuIGYoZS5nZXRVVENNaW51dGVzKCksdCwyKX1mdW5jdGlvbiBvZShlLHQpe3JldHVybiBmKGUuZ2V0VVRDU2Vjb25kcygpLHQsMil9ZnVuY3Rpb24gbGUoZSl7dmFyIHQ9ZS5nZXRVVENEYXkoKTtyZXR1cm4gMD09PXQ/Nzp0fWZ1bmN0aW9uIHNlKGUscil7cmV0dXJuIGYodC51dGNTdW5kYXkuY291bnQodC51dGNZZWFyKGUpLTEsZSksciwyKX1mdW5jdGlvbiBjZShlLHIpe3ZhciBuPWUuZ2V0VVRDRGF5KCk7cmV0dXJuIGU9bj49NHx8MD09PW4/dC51dGNUaHVyc2RheShlKTp0LnV0Y1RodXJzZGF5LmNlaWwoZSksZih0LnV0Y1RodXJzZGF5LmNvdW50KHQudXRjWWVhcihlKSxlKSsoND09PXQudXRjWWVhcihlKS5nZXRVVENEYXkoKSksciwyKX1mdW5jdGlvbiB1ZShlKXtyZXR1cm4gZS5nZXRVVENEYXkoKX1mdW5jdGlvbiBmZShlLHIpe3JldHVybiBmKHQudXRjTW9uZGF5LmNvdW50KHQudXRjWWVhcihlKS0xLGUpLHIsMil9ZnVuY3Rpb24gZGUoZSx0KXtyZXR1cm4gZihlLmdldFVUQ0Z1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gcGUoZSx0KXtyZXR1cm4gZihlLmdldFVUQ0Z1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gaGUoKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIGdlKCl7cmV0dXJuIiUifWZ1bmN0aW9uIHZlKGUpe3JldHVybitlfWZ1bmN0aW9uIG1lKGUpe3JldHVybiBNYXRoLmZsb29yKCtlLzFlMyl9ZnVuY3Rpb24geWUodCl7cmV0dXJuIG89aSh0KSxlLnRpbWVGb3JtYXQ9by5mb3JtYXQsZS50aW1lUGFyc2U9by5wYXJzZSxlLnV0Y0Zvcm1hdD1vLnV0Y0Zvcm1hdCxlLnV0Y1BhcnNlPW8udXRjUGFyc2Usb315ZSh7ZGF0ZVRpbWU6IiV4LCAlWCIsZGF0ZToiJS1tLyUtZC8lWSIsdGltZToiJS1JOiVNOiVTICVwIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pO3ZhciB4ZT1EYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZz9mdW5jdGlvbihlKXtyZXR1cm4gZS50b0lTT1N0cmluZygpfTplLnV0Y0Zvcm1hdCgiJVktJW0tJWRUJUg6JU06JVMuJUxaIik7dmFyIGJlPStuZXcgRGF0ZSgiMjAwMC0wMS0wMVQwMDowMDowMC4wMDBaIik/ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IERhdGUoZSk7cmV0dXJuIGlzTmFOKHQpP251bGw6dH06ZS51dGNQYXJzZSgiJVktJW0tJWRUJUg6JU06JVMuJUxaIik7ZS5pc29Gb3JtYXQ9eGUsZS5pc29QYXJzZT1iZSxlLnRpbWVGb3JtYXREZWZhdWx0TG9jYWxlPXllLGUudGltZUZvcm1hdExvY2FsZT1pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pKX0seyJkMy10aW1lIjo4fV0sODpbZnVuY3Rpb24oZSx0LHIpeyFmdW5jdGlvbihlLG4peyJvYmplY3QiPT10eXBlb2YgciYmInVuZGVmaW5lZCIhPXR5cGVvZiB0P24ocik6bigoZT1lfHxzZWxmKS5kMz1lLmQzfHx7fSl9KHRoaXMsKGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD1uZXcgRGF0ZSxyPW5ldyBEYXRlO2Z1bmN0aW9uIG4oZSxhLGksbyl7ZnVuY3Rpb24gbCh0KXtyZXR1cm4gZSh0PTA9PT1hcmd1bWVudHMubGVuZ3RoP25ldyBEYXRlOm5ldyBEYXRlKCt0KSksdH1yZXR1cm4gbC5mbG9vcj1mdW5jdGlvbih0KXtyZXR1cm4gZSh0PW5ldyBEYXRlKCt0KSksdH0sbC5jZWlsPWZ1bmN0aW9uKHQpe3JldHVybiBlKHQ9bmV3IERhdGUodC0xKSksYSh0LDEpLGUodCksdH0sbC5yb3VuZD1mdW5jdGlvbihlKXt2YXIgdD1sKGUpLHI9bC5jZWlsKGUpO3JldHVybiBlLXQ8ci1lP3Q6cn0sbC5vZmZzZXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYShlPW5ldyBEYXRlKCtlKSxudWxsPT10PzE6TWF0aC5mbG9vcih0KSksZX0sbC5yYW5nZT1mdW5jdGlvbih0LHIsbil7dmFyIGksbz1bXTtpZih0PWwuY2VpbCh0KSxuPW51bGw9PW4/MTpNYXRoLmZsb29yKG4pLCEodDxyJiZuPjApKXJldHVybiBvO2Rve28ucHVzaChpPW5ldyBEYXRlKCt0KSksYSh0LG4pLGUodCl9d2hpbGUoaTx0JiZ0PHIpO3JldHVybiBvfSxsLmZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gbigoZnVuY3Rpb24ocil7aWYocj49cilmb3IoO2UociksIXQocik7KXIuc2V0VGltZShyLTEpfSksKGZ1bmN0aW9uKGUscil7aWYoZT49ZSlpZihyPDApZm9yKDsrK3I8PTA7KWZvcig7YShlLC0xKSwhdChlKTspO2Vsc2UgZm9yKDstLXI+PTA7KWZvcig7YShlLDEpLCF0KGUpOyk7fSkpfSxpJiYobC5jb3VudD1mdW5jdGlvbihuLGEpe3JldHVybiB0LnNldFRpbWUoK24pLHIuc2V0VGltZSgrYSksZSh0KSxlKHIpLE1hdGguZmxvb3IoaSh0LHIpKX0sbC5ldmVyeT1mdW5jdGlvbihlKXtyZXR1cm4gZT1NYXRoLmZsb29yKGUpLGlzRmluaXRlKGUpJiZlPjA/ZT4xP2wuZmlsdGVyKG8/ZnVuY3Rpb24odCl7cmV0dXJuIG8odCklZT09MH06ZnVuY3Rpb24odCl7cmV0dXJuIGwuY291bnQoMCx0KSVlPT0wfSk6bDpudWxsfSksbH12YXIgYT1uKChmdW5jdGlvbigpe30pLChmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KX0pLChmdW5jdGlvbihlLHQpe3JldHVybiB0LWV9KSk7YS5ldmVyeT1mdW5jdGlvbihlKXtyZXR1cm4gZT1NYXRoLmZsb29yKGUpLGlzRmluaXRlKGUpJiZlPjA/ZT4xP24oKGZ1bmN0aW9uKHQpe3Quc2V0VGltZShNYXRoLmZsb29yKHQvZSkqZSl9KSwoZnVuY3Rpb24odCxyKXt0LnNldFRpbWUoK3QrciplKX0pLChmdW5jdGlvbih0LHIpe3JldHVybihyLXQpL2V9KSk6YTpudWxsfTt2YXIgaT1hLnJhbmdlLG89bigoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKGUtZS5nZXRNaWxsaXNlY29uZHMoKSl9KSwoZnVuY3Rpb24oZSx0KXtlLnNldFRpbWUoK2UrMWUzKnQpfSksKGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvMWUzfSksKGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ1NlY29uZHMoKX0pKSxsPW8ucmFuZ2Uscz1uKChmdW5jdGlvbihlKXtlLnNldFRpbWUoZS1lLmdldE1pbGxpc2Vjb25kcygpLTFlMyplLmdldFNlY29uZHMoKSl9KSwoZnVuY3Rpb24oZSx0KXtlLnNldFRpbWUoK2UrNmU0KnQpfSksKGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvNmU0fSksKGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldE1pbnV0ZXMoKX0pKSxjPXMucmFuZ2UsdT1uKChmdW5jdGlvbihlKXtlLnNldFRpbWUoZS1lLmdldE1pbGxpc2Vjb25kcygpLTFlMyplLmdldFNlY29uZHMoKS02ZTQqZS5nZXRNaW51dGVzKCkpfSksKGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlKzM2ZTUqdCl9KSwoZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS8zNmU1fSksKGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEhvdXJzKCl9KSksZj11LnJhbmdlLGQ9bigoZnVuY3Rpb24oZSl7ZS5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbihlLHQpe2Uuc2V0RGF0ZShlLmdldERhdGUoKSt0KX0pLChmdW5jdGlvbihlLHQpe3JldHVybih0LWUtNmU0Kih0LmdldFRpbWV6b25lT2Zmc2V0KCktZS5nZXRUaW1lem9uZU9mZnNldCgpKSkvODY0ZTV9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0RGF0ZSgpLTF9KSkscD1kLnJhbmdlO2Z1bmN0aW9uIGgoZSl7cmV0dXJuIG4oKGZ1bmN0aW9uKHQpe3Quc2V0RGF0ZSh0LmdldERhdGUoKS0odC5nZXREYXkoKSs3LWUpJTcpLHQuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24oZSx0KXtlLnNldERhdGUoZS5nZXREYXRlKCkrNyp0KX0pLChmdW5jdGlvbihlLHQpe3JldHVybih0LWUtNmU0Kih0LmdldFRpbWV6b25lT2Zmc2V0KCktZS5nZXRUaW1lem9uZU9mZnNldCgpKSkvNjA0OGU1fSkpfXZhciBnPWgoMCksdj1oKDEpLG09aCgyKSx5PWgoMykseD1oKDQpLGI9aCg1KSxfPWgoNiksdz1nLnJhbmdlLFQ9di5yYW5nZSxrPW0ucmFuZ2UsTT15LnJhbmdlLEE9eC5yYW5nZSxMPWIucmFuZ2UsUz1fLnJhbmdlLEM9bigoZnVuY3Rpb24oZSl7ZS5zZXREYXRlKDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24oZSx0KXtlLnNldE1vbnRoKGUuZ2V0TW9udGgoKSt0KX0pLChmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldE1vbnRoKCktZS5nZXRNb250aCgpKzEyKih0LmdldEZ1bGxZZWFyKCktZS5nZXRGdWxsWWVhcigpKX0pLChmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRNb250aCgpfSkpLE89Qy5yYW5nZSxEPW4oKGZ1bmN0aW9uKGUpe2Uuc2V0TW9udGgoMCwxKSxlLnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKGUsdCl7ZS5zZXRGdWxsWWVhcihlLmdldEZ1bGxZZWFyKCkrdCl9KSwoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpLWUuZ2V0RnVsbFllYXIoKX0pLChmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRGdWxsWWVhcigpfSkpO0QuZXZlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGlzRmluaXRlKGU9TWF0aC5mbG9vcihlKSkmJmU+MD9uKChmdW5jdGlvbih0KXt0LnNldEZ1bGxZZWFyKE1hdGguZmxvb3IodC5nZXRGdWxsWWVhcigpL2UpKmUpLHQuc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQscil7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrciplKX0pKTpudWxsfTt2YXIgUD1ELnJhbmdlLHo9bigoZnVuY3Rpb24oZSl7ZS5zZXRVVENTZWNvbmRzKDAsMCl9KSwoZnVuY3Rpb24oZSx0KXtlLnNldFRpbWUoK2UrNmU0KnQpfSksKGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvNmU0fSksKGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ01pbnV0ZXMoKX0pKSxSPXoucmFuZ2UsRT1uKChmdW5jdGlvbihlKXtlLnNldFVUQ01pbnV0ZXMoMCwwLDApfSksKGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlKzM2ZTUqdCl9KSwoZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS8zNmU1fSksKGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0hvdXJzKCl9KSksST1FLnJhbmdlLEY9bigoZnVuY3Rpb24oZSl7ZS5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbihlLHQpe2Uuc2V0VVRDRGF0ZShlLmdldFVUQ0RhdGUoKSt0KX0pLChmdW5jdGlvbihlLHQpe3JldHVybih0LWUpLzg2NGU1fSksKGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0RhdGUoKS0xfSkpLE49Ri5yYW5nZTtmdW5jdGlvbiBIKGUpe3JldHVybiBuKChmdW5jdGlvbih0KXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCktKHQuZ2V0VVRDRGF5KCkrNy1lKSU3KSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKGUsdCl7ZS5zZXRVVENEYXRlKGUuZ2V0VVRDRGF0ZSgpKzcqdCl9KSwoZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS82MDQ4ZTV9KSl9dmFyIGo9SCgwKSxCPUgoMSksVj1IKDIpLFU9SCgzKSxxPUgoNCksRz1IKDUpLFo9SCg2KSxZPWoucmFuZ2UsWD1CLnJhbmdlLFc9Vi5yYW5nZSxRPVUucmFuZ2UsSj1xLnJhbmdlLCQ9Ry5yYW5nZSxLPVoucmFuZ2UsZWU9bigoZnVuY3Rpb24oZSl7ZS5zZXRVVENEYXRlKDEpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24oZSx0KXtlLnNldFVUQ01vbnRoKGUuZ2V0VVRDTW9udGgoKSt0KX0pLChmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldFVUQ01vbnRoKCktZS5nZXRVVENNb250aCgpKzEyKih0LmdldFVUQ0Z1bGxZZWFyKCktZS5nZXRVVENGdWxsWWVhcigpKX0pLChmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENNb250aCgpfSkpLHRlPWVlLnJhbmdlLHJlPW4oKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDTW9udGgoMCwxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKGUsdCl7ZS5zZXRVVENGdWxsWWVhcihlLmdldFVUQ0Z1bGxZZWFyKCkrdCl9KSwoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5nZXRVVENGdWxsWWVhcigpLWUuZ2V0VVRDRnVsbFllYXIoKX0pLChmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENGdWxsWWVhcigpfSkpO3JlLmV2ZXJ5PWZ1bmN0aW9uKGUpe3JldHVybiBpc0Zpbml0ZShlPU1hdGguZmxvb3IoZSkpJiZlPjA/bigoZnVuY3Rpb24odCl7dC5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKHQuZ2V0VVRDRnVsbFllYXIoKS9lKSplKSx0LnNldFVUQ01vbnRoKDAsMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LHIpe3Quc2V0VVRDRnVsbFllYXIodC5nZXRVVENGdWxsWWVhcigpK3IqZSl9KSk6bnVsbH07dmFyIG5lPXJlLnJhbmdlO2UudGltZURheT1kLGUudGltZURheXM9cCxlLnRpbWVGcmlkYXk9YixlLnRpbWVGcmlkYXlzPUwsZS50aW1lSG91cj11LGUudGltZUhvdXJzPWYsZS50aW1lSW50ZXJ2YWw9bixlLnRpbWVNaWxsaXNlY29uZD1hLGUudGltZU1pbGxpc2Vjb25kcz1pLGUudGltZU1pbnV0ZT1zLGUudGltZU1pbnV0ZXM9YyxlLnRpbWVNb25kYXk9dixlLnRpbWVNb25kYXlzPVQsZS50aW1lTW9udGg9QyxlLnRpbWVNb250aHM9TyxlLnRpbWVTYXR1cmRheT1fLGUudGltZVNhdHVyZGF5cz1TLGUudGltZVNlY29uZD1vLGUudGltZVNlY29uZHM9bCxlLnRpbWVTdW5kYXk9ZyxlLnRpbWVTdW5kYXlzPXcsZS50aW1lVGh1cnNkYXk9eCxlLnRpbWVUaHVyc2RheXM9QSxlLnRpbWVUdWVzZGF5PW0sZS50aW1lVHVlc2RheXM9ayxlLnRpbWVXZWRuZXNkYXk9eSxlLnRpbWVXZWRuZXNkYXlzPU0sZS50aW1lV2Vlaz1nLGUudGltZVdlZWtzPXcsZS50aW1lWWVhcj1ELGUudGltZVllYXJzPVAsZS51dGNEYXk9RixlLnV0Y0RheXM9TixlLnV0Y0ZyaWRheT1HLGUudXRjRnJpZGF5cz0kLGUudXRjSG91cj1FLGUudXRjSG91cnM9SSxlLnV0Y01pbGxpc2Vjb25kPWEsZS51dGNNaWxsaXNlY29uZHM9aSxlLnV0Y01pbnV0ZT16LGUudXRjTWludXRlcz1SLGUudXRjTW9uZGF5PUIsZS51dGNNb25kYXlzPVgsZS51dGNNb250aD1lZSxlLnV0Y01vbnRocz10ZSxlLnV0Y1NhdHVyZGF5PVosZS51dGNTYXR1cmRheXM9SyxlLnV0Y1NlY29uZD1vLGUudXRjU2Vjb25kcz1sLGUudXRjU3VuZGF5PWosZS51dGNTdW5kYXlzPVksZS51dGNUaHVyc2RheT1xLGUudXRjVGh1cnNkYXlzPUosZS51dGNUdWVzZGF5PVYsZS51dGNUdWVzZGF5cz1XLGUudXRjV2VkbmVzZGF5PVUsZS51dGNXZWRuZXNkYXlzPVEsZS51dGNXZWVrPWosZS51dGNXZWVrcz1ZLGUudXRjWWVhcj1yZSxlLnV0Y1llYXJzPW5lLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pKX0se31dLDk6W2Z1bmN0aW9uKGUsdCxyKXshZnVuY3Rpb24oKXt2YXIgZT17dmVyc2lvbjoiMy41LjE3In0scj1bXS5zbGljZSxuPWZ1bmN0aW9uKGUpe3JldHVybiByLmNhbGwoZSl9LGE9dGhpcy5kb2N1bWVudDtmdW5jdGlvbiBpKGUpe3JldHVybiBlJiYoZS5vd25lckRvY3VtZW50fHxlLmRvY3VtZW50fHxlKS5kb2N1bWVudEVsZW1lbnR9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZSYmKGUub3duZXJEb2N1bWVudCYmZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHxlLmRvY3VtZW50JiZlfHxlLmRlZmF1bHRWaWV3KX1pZihhKXRyeXtuKGEuZG9jdW1lbnRFbGVtZW50LmNoaWxkTm9kZXMpWzBdLm5vZGVUeXBlfWNhdGNoKGUpe249ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUubGVuZ3RoLHI9bmV3IEFycmF5KHQpO3QtLTspclt0XT1lW3RdO3JldHVybiByfX1pZihEYXRlLm5vd3x8KERhdGUubm93PWZ1bmN0aW9uKCl7cmV0dXJuK25ldyBEYXRlfSksYSl0cnl7YS5jcmVhdGVFbGVtZW50KCJESVYiKS5zdHlsZS5zZXRQcm9wZXJ0eSgib3BhY2l0eSIsMCwiIil9Y2F0Y2goZSl7dmFyIGw9dGhpcy5FbGVtZW50LnByb3RvdHlwZSxzPWwuc2V0QXR0cmlidXRlLGM9bC5zZXRBdHRyaWJ1dGVOUyx1PXRoaXMuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wcm90b3R5cGUsZj11LnNldFByb3BlcnR5O2wuc2V0QXR0cmlidXRlPWZ1bmN0aW9uKGUsdCl7cy5jYWxsKHRoaXMsZSx0KyIiKX0sbC5zZXRBdHRyaWJ1dGVOUz1mdW5jdGlvbihlLHQscil7Yy5jYWxsKHRoaXMsZSx0LHIrIiIpfSx1LnNldFByb3BlcnR5PWZ1bmN0aW9uKGUsdCxyKXtmLmNhbGwodGhpcyxlLHQrIiIscil9fWZ1bmN0aW9uIGQoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59ZnVuY3Rpb24gcChlKXtyZXR1cm4gbnVsbD09PWU/TmFOOitlfWZ1bmN0aW9uIGgoZSl7cmV0dXJuIWlzTmFOKGUpfWZ1bmN0aW9uIGcoZSl7cmV0dXJue2xlZnQ6ZnVuY3Rpb24odCxyLG4sYSl7Zm9yKGFyZ3VtZW50cy5sZW5ndGg8MyYmKG49MCksYXJndW1lbnRzLmxlbmd0aDw0JiYoYT10Lmxlbmd0aCk7bjxhOyl7dmFyIGk9bithPj4+MTtlKHRbaV0scik8MD9uPWkrMTphPWl9cmV0dXJuIG59LHJpZ2h0OmZ1bmN0aW9uKHQscixuLGEpe2Zvcihhcmd1bWVudHMubGVuZ3RoPDMmJihuPTApLGFyZ3VtZW50cy5sZW5ndGg8NCYmKGE9dC5sZW5ndGgpO248YTspe3ZhciBpPW4rYT4+PjE7ZSh0W2ldLHIpPjA/YT1pOm49aSsxfXJldHVybiBufX19ZS5hc2NlbmRpbmc9ZCxlLmRlc2NlbmRpbmc9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59LGUubWluPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbixhPS0xLGk9ZS5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpe2Zvcig7KythPGk7KWlmKG51bGwhPShuPWVbYV0pJiZuPj1uKXtyPW47YnJlYWt9Zm9yKDsrK2E8aTspbnVsbCE9KG49ZVthXSkmJnI+biYmKHI9bil9ZWxzZXtmb3IoOysrYTxpOylpZihudWxsIT0obj10LmNhbGwoZSxlW2FdLGEpKSYmbj49bil7cj1uO2JyZWFrfWZvcig7KythPGk7KW51bGwhPShuPXQuY2FsbChlLGVbYV0sYSkpJiZyPm4mJihyPW4pfXJldHVybiByfSxlLm1heD1mdW5jdGlvbihlLHQpe3ZhciByLG4sYT0tMSxpPWUubGVuZ3RoO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKXtmb3IoOysrYTxpOylpZihudWxsIT0obj1lW2FdKSYmbj49bil7cj1uO2JyZWFrfWZvcig7KythPGk7KW51bGwhPShuPWVbYV0pJiZuPnImJihyPW4pfWVsc2V7Zm9yKDsrK2E8aTspaWYobnVsbCE9KG49dC5jYWxsKGUsZVthXSxhKSkmJm4+PW4pe3I9bjticmVha31mb3IoOysrYTxpOyludWxsIT0obj10LmNhbGwoZSxlW2FdLGEpKSYmbj5yJiYocj1uKX1yZXR1cm4gcn0sZS5leHRlbnQ9ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGEsaT0tMSxvPWUubGVuZ3RoO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKXtmb3IoOysraTxvOylpZihudWxsIT0obj1lW2ldKSYmbj49bil7cj1hPW47YnJlYWt9Zm9yKDsrK2k8bzspbnVsbCE9KG49ZVtpXSkmJihyPm4mJihyPW4pLGE8biYmKGE9bikpfWVsc2V7Zm9yKDsrK2k8bzspaWYobnVsbCE9KG49dC5jYWxsKGUsZVtpXSxpKSkmJm4+PW4pe3I9YT1uO2JyZWFrfWZvcig7KytpPG87KW51bGwhPShuPXQuY2FsbChlLGVbaV0saSkpJiYocj5uJiYocj1uKSxhPG4mJihhPW4pKX1yZXR1cm5bcixhXX0sZS5zdW09ZnVuY3Rpb24oZSx0KXt2YXIgcixuPTAsYT1lLmxlbmd0aCxpPS0xO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKWZvcig7KytpPGE7KWgocj0rZVtpXSkmJihuKz1yKTtlbHNlIGZvcig7KytpPGE7KWgocj0rdC5jYWxsKGUsZVtpXSxpKSkmJihuKz1yKTtyZXR1cm4gbn0sZS5tZWFuPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbj0wLGE9ZS5sZW5ndGgsaT0tMSxvPWE7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKDsrK2k8YTspaChyPXAoZVtpXSkpP24rPXI6LS1vO2Vsc2UgZm9yKDsrK2k8YTspaChyPXAodC5jYWxsKGUsZVtpXSxpKSkpP24rPXI6LS1vO2lmKG8pcmV0dXJuIG4vb30sZS5xdWFudGlsZT1mdW5jdGlvbihlLHQpe3ZhciByPShlLmxlbmd0aC0xKSp0KzEsbj1NYXRoLmZsb29yKHIpLGE9K2Vbbi0xXSxpPXItbjtyZXR1cm4gaT9hK2kqKGVbbl0tYSk6YX0sZS5tZWRpYW49ZnVuY3Rpb24odCxyKXt2YXIgbixhPVtdLGk9dC5sZW5ndGgsbz0tMTtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysrbzxpOyloKG49cCh0W29dKSkmJmEucHVzaChuKTtlbHNlIGZvcig7KytvPGk7KWgobj1wKHIuY2FsbCh0LHRbb10sbykpKSYmYS5wdXNoKG4pO2lmKGEubGVuZ3RoKXJldHVybiBlLnF1YW50aWxlKGEuc29ydChkKSwuNSl9LGUudmFyaWFuY2U9ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGE9ZS5sZW5ndGgsaT0wLG89MCxsPS0xLHM9MDtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysrbDxhOyloKHI9cChlW2xdKSkmJihvKz0obj1yLWkpKihyLShpKz1uLysrcykpKTtlbHNlIGZvcig7KytsPGE7KWgocj1wKHQuY2FsbChlLGVbbF0sbCkpKSYmKG8rPShuPXItaSkqKHItKGkrPW4vKytzKSkpO2lmKHM+MSlyZXR1cm4gby8ocy0xKX0sZS5kZXZpYXRpb249ZnVuY3Rpb24oKXt2YXIgdD1lLnZhcmlhbmNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gdD9NYXRoLnNxcnQodCk6dH07dmFyIHY9ZyhkKTtmdW5jdGlvbiBtKGUpe3JldHVybiBlLmxlbmd0aH1lLmJpc2VjdExlZnQ9di5sZWZ0LGUuYmlzZWN0PWUuYmlzZWN0UmlnaHQ9di5yaWdodCxlLmJpc2VjdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBnKDE9PT1lLmxlbmd0aD9mdW5jdGlvbih0LHIpe3JldHVybiBkKGUodCkscil9OmUpfSxlLnNodWZmbGU9ZnVuY3Rpb24oZSx0LHIpeyhpPWFyZ3VtZW50cy5sZW5ndGgpPDMmJihyPWUubGVuZ3RoLGk8MiYmKHQ9MCkpO2Zvcih2YXIgbixhLGk9ci10O2k7KWE9TWF0aC5yYW5kb20oKSppLS18MCxuPWVbaSt0XSxlW2krdF09ZVthK3RdLGVbYSt0XT1uO3JldHVybiBlfSxlLnBlcm11dGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkocik7ci0tOyluW3JdPWVbdFtyXV07cmV0dXJuIG59LGUucGFpcnM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAscj1lLmxlbmd0aC0xLG49ZVswXSxhPW5ldyBBcnJheShyPDA/MDpyKTt0PHI7KWFbdF09W24sbj1lWysrdF1dO3JldHVybiBhfSxlLnRyYW5zcG9zZT1mdW5jdGlvbih0KXtpZighKGk9dC5sZW5ndGgpKXJldHVybltdO2Zvcih2YXIgcj0tMSxuPWUubWluKHQsbSksYT1uZXcgQXJyYXkobik7KytyPG47KWZvcih2YXIgaSxvPS0xLGw9YVtyXT1uZXcgQXJyYXkoaSk7KytvPGk7KWxbb109dFtvXVtyXTtyZXR1cm4gYX0sZS56aXA9ZnVuY3Rpb24oKXtyZXR1cm4gZS50cmFuc3Bvc2UoYXJndW1lbnRzKX0sZS5rZXlzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO2Zvcih2YXIgciBpbiBlKXQucHVzaChyKTtyZXR1cm4gdH0sZS52YWx1ZXM9ZnVuY3Rpb24oZSl7dmFyIHQ9W107Zm9yKHZhciByIGluIGUpdC5wdXNoKGVbcl0pO3JldHVybiB0fSxlLmVudHJpZXM9ZnVuY3Rpb24oZSl7dmFyIHQ9W107Zm9yKHZhciByIGluIGUpdC5wdXNoKHtrZXk6cix2YWx1ZTplW3JdfSk7cmV0dXJuIHR9LGUubWVyZ2U9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHIsbixhPWUubGVuZ3RoLGk9LTEsbz0wOysraTxhOylvKz1lW2ldLmxlbmd0aDtmb3Iocj1uZXcgQXJyYXkobyk7LS1hPj0wOylmb3IodD0obj1lW2FdKS5sZW5ndGg7LS10Pj0wOylyWy0tb109blt0XTtyZXR1cm4gcn07dmFyIHk9TWF0aC5hYnM7ZnVuY3Rpb24geChlKXtmb3IodmFyIHQ9MTtlKnQlMTspdCo9MTA7cmV0dXJuIHR9ZnVuY3Rpb24gYihlLHQpe2Zvcih2YXIgciBpbiB0KU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSxyLHt2YWx1ZTp0W3JdLGVudW1lcmFibGU6ITF9KX1mdW5jdGlvbiBfKCl7dGhpcy5fPU9iamVjdC5jcmVhdGUobnVsbCl9ZS5yYW5nZT1mdW5jdGlvbihlLHQscil7aWYoYXJndW1lbnRzLmxlbmd0aDwzJiYocj0xLGFyZ3VtZW50cy5sZW5ndGg8MiYmKHQ9ZSxlPTApKSwodC1lKS9yPT0xLzApdGhyb3cgbmV3IEVycm9yKCJpbmZpbml0ZSByYW5nZSIpO3ZhciBuLGE9W10saT14KHkocikpLG89LTE7aWYoZSo9aSx0Kj1pLChyKj1pKTwwKWZvcig7KG49ZStyKisrbyk+dDspYS5wdXNoKG4vaSk7ZWxzZSBmb3IoOyhuPWUrciorK28pPHQ7KWEucHVzaChuL2kpO3JldHVybiBhfSxlLm1hcD1mdW5jdGlvbihlLHQpe3ZhciByPW5ldyBfO2lmKGUgaW5zdGFuY2VvZiBfKWUuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtyLnNldChlLHQpfSkpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShlKSl7dmFyIG4sYT0tMSxpPWUubGVuZ3RoO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKWZvcig7KythPGk7KXIuc2V0KGEsZVthXSk7ZWxzZSBmb3IoOysrYTxpOylyLnNldCh0LmNhbGwoZSxuPWVbYV0sYSksbil9ZWxzZSBmb3IodmFyIG8gaW4gZSlyLnNldChvLGVbb10pO3JldHVybiByfTtmdW5jdGlvbiB3KGUpe3JldHVybiJfX3Byb3RvX18iPT0oZSs9IiIpfHwiXDAiPT09ZVswXT8iXDAiK2U6ZX1mdW5jdGlvbiBUKGUpe3JldHVybiJcMCI9PT0oZSs9IiIpWzBdP2Uuc2xpY2UoMSk6ZX1mdW5jdGlvbiBrKGUpe3JldHVybiB3KGUpaW4gdGhpcy5ffWZ1bmN0aW9uIE0oZSl7cmV0dXJuKGU9dyhlKSlpbiB0aGlzLl8mJmRlbGV0ZSB0aGlzLl9bZV19ZnVuY3Rpb24gQSgpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzLl8pZS5wdXNoKFQodCkpO3JldHVybiBlfWZ1bmN0aW9uIEwoKXt2YXIgZT0wO2Zvcih2YXIgdCBpbiB0aGlzLl8pKytlO3JldHVybiBlfWZ1bmN0aW9uIFMoKXtmb3IodmFyIGUgaW4gdGhpcy5fKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIEMoKXt0aGlzLl89T2JqZWN0LmNyZWF0ZShudWxsKX1mdW5jdGlvbiBPKGUpe3JldHVybiBlfWZ1bmN0aW9uIEQoZSx0LHIpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXIuYXBwbHkodCxhcmd1bWVudHMpO3JldHVybiBuPT09dD9lOm59fWZ1bmN0aW9uIFAoZSx0KXtpZih0IGluIGUpcmV0dXJuIHQ7dD10LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3Quc2xpY2UoMSk7Zm9yKHZhciByPTAsbj16Lmxlbmd0aDtyPG47KytyKXt2YXIgYT16W3JdK3Q7aWYoYSBpbiBlKXJldHVybiBhfX1iKF8se2hhczprLGdldDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fW3coZSldfSxzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fW3coZSldPXR9LHJlbW92ZTpNLGtleXM6QSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgZT1bXTtmb3IodmFyIHQgaW4gdGhpcy5fKWUucHVzaCh0aGlzLl9bdF0pO3JldHVybiBlfSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMuXyllLnB1c2goe2tleTpUKHQpLHZhbHVlOnRoaXMuX1t0XX0pO3JldHVybiBlfSxzaXplOkwsZW1wdHk6Uyxmb3JFYWNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiB0aGlzLl8pZS5jYWxsKHRoaXMsVCh0KSx0aGlzLl9bdF0pfX0pLGUubmVzdD1mdW5jdGlvbigpe3ZhciB0LHIsbj17fSxhPVtdLGk9W107ZnVuY3Rpb24gbyhlLGksbCl7aWYobD49YS5sZW5ndGgpcmV0dXJuIHI/ci5jYWxsKG4saSk6dD9pLnNvcnQodCk6aTtmb3IodmFyIHMsYyx1LGYsZD0tMSxwPWkubGVuZ3RoLGg9YVtsKytdLGc9bmV3IF87KytkPHA7KShmPWcuZ2V0KHM9aChjPWlbZF0pKSk/Zi5wdXNoKGMpOmcuc2V0KHMsW2NdKTtyZXR1cm4gZT8oYz1lKCksdT1mdW5jdGlvbih0LHIpe2Muc2V0KHQsbyhlLHIsbCkpfSk6KGM9e30sdT1mdW5jdGlvbih0LHIpe2NbdF09byhlLHIsbCl9KSxnLmZvckVhY2godSksY31yZXR1cm4gbi5tYXA9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbyh0LGUsMCl9LG4uZW50cmllcz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24gZSh0LHIpe2lmKHI+PWEubGVuZ3RoKXJldHVybiB0O3ZhciBuPVtdLG89aVtyKytdO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQsYSl7bi5wdXNoKHtrZXk6dCx2YWx1ZXM6ZShhLHIpfSl9KSksbz9uLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG8oZS5rZXksdC5rZXkpfSkpOm59KG8oZS5tYXAsdCwwKSwwKX0sbi5rZXk9ZnVuY3Rpb24oZSl7cmV0dXJuIGEucHVzaChlKSxufSxuLnNvcnRLZXlzPWZ1bmN0aW9uKGUpe3JldHVybiBpW2EubGVuZ3RoLTFdPWUsbn0sbi5zb3J0VmFsdWVzPWZ1bmN0aW9uKGUpe3JldHVybiB0PWUsbn0sbi5yb2xsdXA9ZnVuY3Rpb24oZSl7cmV0dXJuIHI9ZSxufSxufSxlLnNldD1mdW5jdGlvbihlKXt2YXIgdD1uZXcgQztpZihlKWZvcih2YXIgcj0wLG49ZS5sZW5ndGg7cjxuOysrcil0LmFkZChlW3JdKTtyZXR1cm4gdH0sYihDLHtoYXM6ayxhZGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX1t3KGUrPSIiKV09ITAsZX0scmVtb3ZlOk0sdmFsdWVzOkEsc2l6ZTpMLGVtcHR5OlMsZm9yRWFjaDpmdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gdGhpcy5fKWUuY2FsbCh0aGlzLFQodCkpfX0pLGUuYmVoYXZpb3I9e30sZS5yZWJpbmQ9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIsbj0xLGE9YXJndW1lbnRzLmxlbmd0aDsrK248YTspZVtyPWFyZ3VtZW50c1tuXV09RChlLHQsdFtyXSk7cmV0dXJuIGV9O3ZhciB6PVsid2Via2l0IiwibXMiLCJtb3oiLCJNb3oiLCJvIiwiTyJdO2Z1bmN0aW9uIFIoKXt9ZnVuY3Rpb24gRSgpe31mdW5jdGlvbiBJKGUpe3ZhciB0PVtdLHI9bmV3IF87ZnVuY3Rpb24gbigpe2Zvcih2YXIgcixuPXQsYT0tMSxpPW4ubGVuZ3RoOysrYTxpOykocj1uW2FdLm9uKSYmci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGV9cmV0dXJuIG4ub249ZnVuY3Rpb24obixhKXt2YXIgaSxvPXIuZ2V0KG4pO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/byYmby5vbjoobyYmKG8ub249bnVsbCx0PXQuc2xpY2UoMCxpPXQuaW5kZXhPZihvKSkuY29uY2F0KHQuc2xpY2UoaSsxKSksci5yZW1vdmUobikpLGEmJnQucHVzaChyLnNldChuLHtvbjphfSkpLGUpfSxufWZ1bmN0aW9uIEYoKXtlLmV2ZW50LnByZXZlbnREZWZhdWx0KCl9ZnVuY3Rpb24gTigpe2Zvcih2YXIgdCxyPWUuZXZlbnQ7dD1yLnNvdXJjZUV2ZW50OylyPXQ7cmV0dXJuIHJ9ZnVuY3Rpb24gSCh0KXtmb3IodmFyIHI9bmV3IEUsbj0wLGE9YXJndW1lbnRzLmxlbmd0aDsrK248YTspclthcmd1bWVudHNbbl1dPUkocik7cmV0dXJuIHIub2Y9ZnVuY3Rpb24obixhKXtyZXR1cm4gZnVuY3Rpb24oaSl7dHJ5e3ZhciBvPWkuc291cmNlRXZlbnQ9ZS5ldmVudDtpLnRhcmdldD10LGUuZXZlbnQ9aSxyW2kudHlwZV0uYXBwbHkobixhKX1maW5hbGx5e2UuZXZlbnQ9b319fSxyfWUuZGlzcGF0Y2g9ZnVuY3Rpb24oKXtmb3IodmFyIGU9bmV3IEUsdD0tMSxyPWFyZ3VtZW50cy5sZW5ndGg7Kyt0PHI7KWVbYXJndW1lbnRzW3RdXT1JKGUpO3JldHVybiBlfSxFLnByb3RvdHlwZS5vbj1mdW5jdGlvbihlLHQpe3ZhciByPWUuaW5kZXhPZigiLiIpLG49IiI7aWYocj49MCYmKG49ZS5zbGljZShyKzEpLGU9ZS5zbGljZSgwLHIpKSxlKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/dGhpc1tlXS5vbihuKTp0aGlzW2VdLm9uKG4sdCk7aWYoMj09PWFyZ3VtZW50cy5sZW5ndGgpe2lmKG51bGw9PXQpZm9yKGUgaW4gdGhpcyl0aGlzLmhhc093blByb3BlcnR5KGUpJiZ0aGlzW2VdLm9uKG4sbnVsbCk7cmV0dXJuIHRoaXN9fSxlLmV2ZW50PW51bGwsZS5yZXF1b3RlPWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoaiwiXFwkJiIpfTt2YXIgaj0vW1xcXF5cJFwqXCtcP1x8XFtcXVwoXClcLlx7XH1dL2csQj17fS5fX3Byb3RvX18/ZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXX07ZnVuY3Rpb24gVihlKXtyZXR1cm4gQihlLFopLGV9dmFyIFU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5xdWVyeVNlbGVjdG9yKGUpfSxxPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQucXVlcnlTZWxlY3RvckFsbChlKX0sRz1mdW5jdGlvbihlLHQpe3ZhciByPWUubWF0Y2hlc3x8ZVtQKGUsIm1hdGNoZXNTZWxlY3RvciIpXTtyZXR1cm4oRz1mdW5jdGlvbihlLHQpe3JldHVybiByLmNhbGwoZSx0KX0pKGUsdCl9OyJmdW5jdGlvbiI9PXR5cGVvZiBTaXp6bGUmJihVPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIFNpenpsZShlLHQpWzBdfHxudWxsfSxxPVNpenpsZSxHPVNpenpsZS5tYXRjaGVzU2VsZWN0b3IpLGUuc2VsZWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGUuc2VsZWN0KGEuZG9jdW1lbnRFbGVtZW50KX07dmFyIFo9ZS5zZWxlY3Rpb24ucHJvdG90eXBlPVtdO2Z1bmN0aW9uIFkoZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpmdW5jdGlvbigpe3JldHVybiBVKGUsdGhpcyl9fWZ1bmN0aW9uIFgoZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpmdW5jdGlvbigpe3JldHVybiBxKGUsdGhpcyl9fVouc2VsZWN0PWZ1bmN0aW9uKGUpe3ZhciB0LHIsbixhLGk9W107ZT1ZKGUpO2Zvcih2YXIgbz0tMSxsPXRoaXMubGVuZ3RoOysrbzxsOyl7aS5wdXNoKHQ9W10pLHQucGFyZW50Tm9kZT0obj10aGlzW29dKS5wYXJlbnROb2RlO2Zvcih2YXIgcz0tMSxjPW4ubGVuZ3RoOysrczxjOykoYT1uW3NdKT8odC5wdXNoKHI9ZS5jYWxsKGEsYS5fX2RhdGFfXyxzLG8pKSxyJiYiX19kYXRhX18iaW4gYSYmKHIuX19kYXRhX189YS5fX2RhdGFfXykpOnQucHVzaChudWxsKX1yZXR1cm4gVihpKX0sWi5zZWxlY3RBbGw9ZnVuY3Rpb24oZSl7dmFyIHQscixhPVtdO2U9WChlKTtmb3IodmFyIGk9LTEsbz10aGlzLmxlbmd0aDsrK2k8bzspZm9yKHZhciBsPXRoaXNbaV0scz0tMSxjPWwubGVuZ3RoOysrczxjOykocj1sW3NdKSYmKGEucHVzaCh0PW4oZS5jYWxsKHIsci5fX2RhdGFfXyxzLGkpKSksdC5wYXJlbnROb2RlPXIpO3JldHVybiBWKGEpfTt2YXIgVz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsUT17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6Vyx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9O2Z1bmN0aW9uIEoodCxyKXtyZXR1cm4gdD1lLm5zLnF1YWxpZnkodCksbnVsbD09cj90LmxvY2FsP2Z1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfTpmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfToiZnVuY3Rpb24iPT10eXBlb2Ygcj90LmxvY2FsP2Z1bmN0aW9uKCl7dmFyIGU9ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09ZT90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsZSl9OmZ1bmN0aW9uKCl7dmFyIGU9ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09ZT90aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KTp0aGlzLnNldEF0dHJpYnV0ZSh0LGUpfTp0LmxvY2FsP2Z1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwscil9OmZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUodCxyKX19ZnVuY3Rpb24gJChlKXtyZXR1cm4gZS50cmltKCkucmVwbGFjZSgvXHMrL2csIiAiKX1mdW5jdGlvbiBLKHQpe3JldHVybiBuZXcgUmVnRXhwKCIoPzpefFxccyspIitlLnJlcXVvdGUodCkrIig/Olxccyt8JCkiLCJnIil9ZnVuY3Rpb24gZWUoZSl7cmV0dXJuKGUrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiB0ZShlLHQpe3ZhciByPShlPWVlKGUpLm1hcChyZSkpLmxlbmd0aDtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbigpe2Zvcih2YXIgbj0tMSxhPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpOysrbjxyOyllW25dKHRoaXMsYSl9OmZ1bmN0aW9uKCl7Zm9yKHZhciBuPS0xOysrbjxyOyllW25dKHRoaXMsdCl9fWZ1bmN0aW9uIHJlKGUpe3ZhciB0PUsoZSk7cmV0dXJuIGZ1bmN0aW9uKHIsbil7aWYoYT1yLmNsYXNzTGlzdClyZXR1cm4gbj9hLmFkZChlKTphLnJlbW92ZShlKTt2YXIgYT1yLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiI7bj8odC5sYXN0SW5kZXg9MCx0LnRlc3QoYSl8fHIuc2V0QXR0cmlidXRlKCJjbGFzcyIsJChhKyIgIitlKSkpOnIuc2V0QXR0cmlidXRlKCJjbGFzcyIsJChhLnJlcGxhY2UodCwiICIpKSl9fWZ1bmN0aW9uIG5lKGUsdCxyKXtyZXR1cm4gbnVsbD09dD9mdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9OiJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSxuLHIpfTpmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSx0LHIpfX1mdW5jdGlvbiBhZShlLHQpe3JldHVybiBudWxsPT10P2Z1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbZV19OiJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09cj9kZWxldGUgdGhpc1tlXTp0aGlzW2VdPXJ9OmZ1bmN0aW9uKCl7dGhpc1tlXT10fX1mdW5jdGlvbiBpZSh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD90Oih0PWUubnMucXVhbGlmeSh0KSkubG9jYWw/ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh0LnNwYWNlLHQubG9jYWwpfTpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3duZXJEb2N1bWVudCxyPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiByPT09VyYmZS5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09Vz9lLmNyZWF0ZUVsZW1lbnQodCk6ZS5jcmVhdGVFbGVtZW50TlMocix0KX19ZnVuY3Rpb24gb2UoKXt2YXIgZT10aGlzLnBhcmVudE5vZGU7ZSYmZS5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBsZShlKXtyZXR1cm57X19kYXRhX186ZX19ZnVuY3Rpb24gc2UoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEcodGhpcyxlKX19ZnVuY3Rpb24gY2UoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGh8fChlPWQpLGZ1bmN0aW9uKHQscil7cmV0dXJuIHQmJnI/ZSh0Ll9fZGF0YV9fLHIuX19kYXRhX18pOiF0LSFyfX1mdW5jdGlvbiB1ZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGg7cjxuO3IrKylmb3IodmFyIGEsaT1lW3JdLG89MCxsPWkubGVuZ3RoO288bDtvKyspKGE9aVtvXSkmJnQoYSxvLHIpO3JldHVybiBlfWZ1bmN0aW9uIGZlKGUpe3JldHVybiBCKGUsZGUpLGV9ZS5ucz17cHJlZml4OlEscXVhbGlmeTpmdW5jdGlvbihlKXt2YXIgdD1lLmluZGV4T2YoIjoiKSxyPWU7cmV0dXJuIHQ+PTAmJiJ4bWxucyIhPT0ocj1lLnNsaWNlKDAsdCkpJiYoZT1lLnNsaWNlKHQrMSkpLFEuaGFzT3duUHJvcGVydHkocik/e3NwYWNlOlFbcl0sbG9jYWw6ZX06ZX19LFouYXR0cj1mdW5jdGlvbih0LHIpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7aWYoInN0cmluZyI9PXR5cGVvZiB0KXt2YXIgbj10aGlzLm5vZGUoKTtyZXR1cm4odD1lLm5zLnF1YWxpZnkodCkpLmxvY2FsP24uZ2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTpuLmdldEF0dHJpYnV0ZSh0KX1mb3IociBpbiB0KXRoaXMuZWFjaChKKHIsdFtyXSkpO3JldHVybiB0aGlzfXJldHVybiB0aGlzLmVhY2goSih0LHIpKX0sWi5jbGFzc2VkPWZ1bmN0aW9uKGUsdCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtpZigic3RyaW5nIj09dHlwZW9mIGUpe3ZhciByPXRoaXMubm9kZSgpLG49KGU9ZWUoZSkpLmxlbmd0aCxhPS0xO2lmKHQ9ci5jbGFzc0xpc3Qpe2Zvcig7KythPG47KWlmKCF0LmNvbnRhaW5zKGVbYV0pKXJldHVybiExfWVsc2UgZm9yKHQ9ci5nZXRBdHRyaWJ1dGUoImNsYXNzIik7KythPG47KWlmKCFLKGVbYV0pLnRlc3QodCkpcmV0dXJuITE7cmV0dXJuITB9Zm9yKHQgaW4gZSl0aGlzLmVhY2godGUodCxlW3RdKSk7cmV0dXJuIHRoaXN9cmV0dXJuIHRoaXMuZWFjaCh0ZShlLHQpKX0sWi5zdHlsZT1mdW5jdGlvbihlLHQscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aDtpZihuPDMpe2lmKCJzdHJpbmciIT10eXBlb2YgZSl7Zm9yKHIgaW4gbjwyJiYodD0iIiksZSl0aGlzLmVhY2gobmUocixlW3JdLHQpKTtyZXR1cm4gdGhpc31pZihuPDIpe3ZhciBhPXRoaXMubm9kZSgpO3JldHVybiBvKGEpLmdldENvbXB1dGVkU3R5bGUoYSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKGUpfXI9IiJ9cmV0dXJuIHRoaXMuZWFjaChuZShlLHQscikpfSxaLnByb3BlcnR5PWZ1bmN0aW9uKGUsdCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHRoaXMubm9kZSgpW2VdO2Zvcih0IGluIGUpdGhpcy5lYWNoKGFlKHQsZVt0XSkpO3JldHVybiB0aGlzfXJldHVybiB0aGlzLmVhY2goYWUoZSx0KSl9LFoudGV4dD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goImZ1bmN0aW9uIj09dHlwZW9mIGU/ZnVuY3Rpb24oKXt2YXIgdD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PXQ/IiI6dH06bnVsbD09ZT9mdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9IiJ9OmZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1lfSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9LFouaHRtbD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goImZ1bmN0aW9uIj09dHlwZW9mIGU/ZnVuY3Rpb24oKXt2YXIgdD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD1udWxsPT10PyIiOnR9Om51bGw9PWU/ZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD0iIn06ZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD1lfSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfSxaLmFwcGVuZD1mdW5jdGlvbihlKXtyZXR1cm4gZT1pZShlKSx0aGlzLnNlbGVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZChlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KSl9LFouaW5zZXJ0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9aWUoZSksdD1ZKHQpLHRoaXMuc2VsZWN0KChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KSl9LFoucmVtb3ZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChvZSl9LFouZGF0YT1mdW5jdGlvbihlLHQpe3ZhciByLG4sYT0tMSxpPXRoaXMubGVuZ3RoO2lmKCFhcmd1bWVudHMubGVuZ3RoKXtmb3IoZT1uZXcgQXJyYXkoaT0ocj10aGlzWzBdKS5sZW5ndGgpOysrYTxpOykobj1yW2FdKSYmKGVbYV09bi5fX2RhdGFfXyk7cmV0dXJuIGV9ZnVuY3Rpb24gbyhlLHIpe3ZhciBuLGEsaSxvPWUubGVuZ3RoLHU9ci5sZW5ndGgsZj1NYXRoLm1pbihvLHUpLGQ9bmV3IEFycmF5KHUpLHA9bmV3IEFycmF5KHUpLGg9bmV3IEFycmF5KG8pO2lmKHQpe3ZhciBnLHY9bmV3IF8sbT1uZXcgQXJyYXkobyk7Zm9yKG49LTE7KytuPG87KShhPWVbbl0pJiYodi5oYXMoZz10LmNhbGwoYSxhLl9fZGF0YV9fLG4pKT9oW25dPWE6di5zZXQoZyxhKSxtW25dPWcpO2ZvcihuPS0xOysrbjx1OykoYT12LmdldChnPXQuY2FsbChyLGk9cltuXSxuKSkpPyEwIT09YSYmKGRbbl09YSxhLl9fZGF0YV9fPWkpOnBbbl09bGUoaSksdi5zZXQoZywhMCk7Zm9yKG49LTE7KytuPG87KW4gaW4gbSYmITAhPT12LmdldChtW25dKSYmKGhbbl09ZVtuXSl9ZWxzZXtmb3Iobj0tMTsrK248ZjspYT1lW25dLGk9cltuXSxhPyhhLl9fZGF0YV9fPWksZFtuXT1hKTpwW25dPWxlKGkpO2Zvcig7bjx1OysrbilwW25dPWxlKHJbbl0pO2Zvcig7bjxvOysrbiloW25dPWVbbl19cC51cGRhdGU9ZCxwLnBhcmVudE5vZGU9ZC5wYXJlbnROb2RlPWgucGFyZW50Tm9kZT1lLnBhcmVudE5vZGUsbC5wdXNoKHApLHMucHVzaChkKSxjLnB1c2goaCl9dmFyIGw9ZmUoW10pLHM9VihbXSksYz1WKFtdKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZSlmb3IoOysrYTxpOylvKHI9dGhpc1thXSxlLmNhbGwocixyLnBhcmVudE5vZGUuX19kYXRhX18sYSkpO2Vsc2UgZm9yKDsrK2E8aTspbyhyPXRoaXNbYV0sZSk7cmV0dXJuIHMuZW50ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbH0scy5leGl0PWZ1bmN0aW9uKCl7cmV0dXJuIGN9LHN9LFouZGF0dW09ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLGUpOnRoaXMucHJvcGVydHkoIl9fZGF0YV9fIil9LFouZmlsdGVyPWZ1bmN0aW9uKGUpe3ZhciB0LHIsbixhPVtdOyJmdW5jdGlvbiIhPXR5cGVvZiBlJiYoZT1zZShlKSk7Zm9yKHZhciBpPTAsbz10aGlzLmxlbmd0aDtpPG87aSsrKXthLnB1c2godD1bXSksdC5wYXJlbnROb2RlPShyPXRoaXNbaV0pLnBhcmVudE5vZGU7Zm9yKHZhciBsPTAscz1yLmxlbmd0aDtsPHM7bCsrKShuPXJbbF0pJiZlLmNhbGwobixuLl9fZGF0YV9fLGwsaSkmJnQucHVzaChuKX1yZXR1cm4gVihhKX0sWi5vcmRlcj1mdW5jdGlvbigpe2Zvcih2YXIgZT0tMSx0PXRoaXMubGVuZ3RoOysrZTx0Oylmb3IodmFyIHIsbj10aGlzW2VdLGE9bi5sZW5ndGgtMSxpPW5bYV07LS1hPj0wOykocj1uW2FdKSYmKGkmJmkhPT1yLm5leHRTaWJsaW5nJiZpLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHIsaSksaT1yKTtyZXR1cm4gdGhpc30sWi5zb3J0PWZ1bmN0aW9uKGUpe2U9Y2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO2Zvcih2YXIgdD0tMSxyPXRoaXMubGVuZ3RoOysrdDxyOyl0aGlzW3RdLnNvcnQoZSk7cmV0dXJuIHRoaXMub3JkZXIoKX0sWi5lYWNoPWZ1bmN0aW9uKGUpe3JldHVybiB1ZSh0aGlzLChmdW5jdGlvbih0LHIsbil7ZS5jYWxsKHQsdC5fX2RhdGFfXyxyLG4pfSkpfSxaLmNhbGw9ZnVuY3Rpb24oZSl7dmFyIHQ9bihhcmd1bWVudHMpO3JldHVybiBlLmFwcGx5KHRbMF09dGhpcyx0KSx0aGlzfSxaLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMubm9kZSgpfSxaLm5vZGU9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MCx0PXRoaXMubGVuZ3RoO2U8dDtlKyspZm9yKHZhciByPXRoaXNbZV0sbj0wLGE9ci5sZW5ndGg7bjxhO24rKyl7dmFyIGk9cltuXTtpZihpKXJldHVybiBpfXJldHVybiBudWxsfSxaLnNpemU9ZnVuY3Rpb24oKXt2YXIgZT0wO3JldHVybiB1ZSh0aGlzLChmdW5jdGlvbigpeysrZX0pKSxlfTt2YXIgZGU9W107ZnVuY3Rpb24gcGUoZSl7dmFyIHQscjtyZXR1cm4gZnVuY3Rpb24obixhLGkpe3ZhciBvLGw9ZVtpXS51cGRhdGUscz1sLmxlbmd0aDtmb3IoaSE9ciYmKHI9aSx0PTApLGE+PXQmJih0PWErMSk7IShvPWxbdF0pJiYrK3Q8czspO3JldHVybiBvfX1mdW5jdGlvbiBoZSh0LHIsYSl7dmFyIGk9Il9fb24iK3Qsbz10LmluZGV4T2YoIi4iKSxsPXZlO28+MCYmKHQ9dC5zbGljZSgwLG8pKTt2YXIgcz1nZS5nZXQodCk7ZnVuY3Rpb24gYygpe3ZhciBlPXRoaXNbaV07ZSYmKHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LGUsZS4kKSxkZWxldGUgdGhpc1tpXSl9cmV0dXJuIHMmJih0PXMsbD1tZSksbz9yP2Z1bmN0aW9uKCl7dmFyIGU9bChyLG4oYXJndW1lbnRzKSk7Yy5jYWxsKHRoaXMpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcih0LHRoaXNbaV09ZSxlLiQ9YSksZS5fPXJ9OmM6cj9SOmZ1bmN0aW9uKCl7dmFyIHIsbj1uZXcgUmVnRXhwKCJeX19vbihbXi5dKykiK2UucmVxdW90ZSh0KSsiJCIpO2Zvcih2YXIgYSBpbiB0aGlzKWlmKHI9YS5tYXRjaChuKSl7dmFyIGk9dGhpc1thXTt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoclsxXSxpLGkuJCksZGVsZXRlIHRoaXNbYV19fX1lLnNlbGVjdGlvbi5lbnRlcj1mZSxlLnNlbGVjdGlvbi5lbnRlci5wcm90b3R5cGU9ZGUsZGUuYXBwZW5kPVouYXBwZW5kLGRlLmVtcHR5PVouZW1wdHksZGUubm9kZT1aLm5vZGUsZGUuY2FsbD1aLmNhbGwsZGUuc2l6ZT1aLnNpemUsZGUuc2VsZWN0PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyLG4sYSxpLG89W10sbD0tMSxzPXRoaXMubGVuZ3RoOysrbDxzOyl7bj0oYT10aGlzW2xdKS51cGRhdGUsby5wdXNoKHQ9W10pLHQucGFyZW50Tm9kZT1hLnBhcmVudE5vZGU7Zm9yKHZhciBjPS0xLHU9YS5sZW5ndGg7KytjPHU7KShpPWFbY10pPyh0LnB1c2gobltjXT1yPWUuY2FsbChhLnBhcmVudE5vZGUsaS5fX2RhdGFfXyxjLGwpKSxyLl9fZGF0YV9fPWkuX19kYXRhX18pOnQucHVzaChudWxsKX1yZXR1cm4gVihvKX0sZGUuaW5zZXJ0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MiYmKHQ9cGUodGhpcykpLFouaW5zZXJ0LmNhbGwodGhpcyxlLHQpfSxlLnNlbGVjdD1mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/KHQ9W1UoZSxhKV0pLnBhcmVudE5vZGU9YS5kb2N1bWVudEVsZW1lbnQ6KHQ9W2VdKS5wYXJlbnROb2RlPWkoZSksVihbdF0pfSxlLnNlbGVjdEFsbD1mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/KHQ9bihxKGUsYSkpKS5wYXJlbnROb2RlPWEuZG9jdW1lbnRFbGVtZW50Oih0PW4oZSkpLnBhcmVudE5vZGU9bnVsbCxWKFt0XSl9LFoub249ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg7aWYobjwzKXtpZigic3RyaW5nIiE9dHlwZW9mIGUpe2ZvcihyIGluIG48MiYmKHQ9ITEpLGUpdGhpcy5lYWNoKGhlKHIsZVtyXSx0KSk7cmV0dXJuIHRoaXN9aWYobjwyKXJldHVybihuPXRoaXMubm9kZSgpWyJfX29uIitlXSkmJm4uXztyPSExfXJldHVybiB0aGlzLmVhY2goaGUoZSx0LHIpKX07dmFyIGdlPWUubWFwKHttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0pO2Z1bmN0aW9uIHZlKHQscil7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBhPWUuZXZlbnQ7ZS5ldmVudD1uLHJbMF09dGhpcy5fX2RhdGFfXzt0cnl7dC5hcHBseSh0aGlzLHIpfWZpbmFsbHl7ZS5ldmVudD1hfX19ZnVuY3Rpb24gbWUoZSx0KXt2YXIgcj12ZShlLHQpO3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLnJlbGF0ZWRUYXJnZXQ7dCYmKHQ9PT10aGlzfHw4JnQuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykpfHxyLmNhbGwodGhpcyxlKX19YSYmZ2UuZm9yRWFjaCgoZnVuY3Rpb24oZSl7Im9uIitlIGluIGEmJmdlLnJlbW92ZShlKX0pKTt2YXIgeWUseGU9MDtmdW5jdGlvbiBiZSh0KXt2YXIgcj0iLmRyYWdzdXBwcmVzcy0iKyArK3hlLG49ImNsaWNrIityLGE9ZS5zZWxlY3Qobyh0KSkub24oInRvdWNobW92ZSIrcixGKS5vbigiZHJhZ3N0YXJ0IityLEYpLm9uKCJzZWxlY3RzdGFydCIrcixGKTtpZihudWxsPT15ZSYmKHllPSEoIm9uc2VsZWN0c3RhcnQiaW4gdCkmJlAodC5zdHlsZSwidXNlclNlbGVjdCIpKSx5ZSl7dmFyIGw9aSh0KS5zdHlsZSxzPWxbeWVdO2xbeWVdPSJub25lIn1yZXR1cm4gZnVuY3Rpb24oZSl7aWYoYS5vbihyLG51bGwpLHllJiYobFt5ZV09cyksZSl7dmFyIHQ9ZnVuY3Rpb24oKXthLm9uKG4sbnVsbCl9O2Eub24obiwoZnVuY3Rpb24oKXtGKCksdCgpfSksITApLHNldFRpbWVvdXQodCwwKX19fWUubW91c2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHdlKGUsTigpKX07dmFyIF9lPXRoaXMubmF2aWdhdG9yJiYvV2ViS2l0Ly50ZXN0KHRoaXMubmF2aWdhdG9yLnVzZXJBZ2VudCk/LTE6MDtmdW5jdGlvbiB3ZSh0LHIpe3IuY2hhbmdlZFRvdWNoZXMmJihyPXIuY2hhbmdlZFRvdWNoZXNbMF0pO3ZhciBuPXQub3duZXJTVkdFbGVtZW50fHx0O2lmKG4uY3JlYXRlU1ZHUG9pbnQpe3ZhciBhPW4uY3JlYXRlU1ZHUG9pbnQoKTtpZihfZTwwKXt2YXIgaT1vKHQpO2lmKGkuc2Nyb2xsWHx8aS5zY3JvbGxZKXt2YXIgbD0obj1lLnNlbGVjdCgiYm9keSIpLmFwcGVuZCgic3ZnIikuc3R5bGUoe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOjAsbGVmdDowLG1hcmdpbjowLHBhZGRpbmc6MCxib3JkZXI6Im5vbmUifSwiaW1wb3J0YW50IikpWzBdWzBdLmdldFNjcmVlbkNUTSgpO19lPSEobC5mfHxsLmUpLG4ucmVtb3ZlKCl9fXJldHVybiBfZT8oYS54PXIucGFnZVgsYS55PXIucGFnZVkpOihhLng9ci5jbGllbnRYLGEueT1yLmNsaWVudFkpLFsoYT1hLm1hdHJpeFRyYW5zZm9ybSh0LmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSkpLngsYS55XX12YXIgcz10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybltyLmNsaWVudFgtcy5sZWZ0LXQuY2xpZW50TGVmdCxyLmNsaWVudFktcy50b3AtdC5jbGllbnRUb3BdfWZ1bmN0aW9uIFRlKCl7cmV0dXJuIGUuZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uaWRlbnRpZmllcn1lLnRvdWNoPWZ1bmN0aW9uKGUsdCxyKXtpZihhcmd1bWVudHMubGVuZ3RoPDMmJihyPXQsdD1OKCkuY2hhbmdlZFRvdWNoZXMpLHQpZm9yKHZhciBuLGE9MCxpPXQubGVuZ3RoO2E8aTsrK2EpaWYoKG49dFthXSkuaWRlbnRpZmllcj09PXIpcmV0dXJuIHdlKGUsbil9LGUuYmVoYXZpb3IuZHJhZz1mdW5jdGlvbigpe3ZhciB0PUgoaSwiZHJhZyIsImRyYWdzdGFydCIsImRyYWdlbmQiKSxyPW51bGwsbj1sKFIsZS5tb3VzZSxvLCJtb3VzZW1vdmUiLCJtb3VzZXVwIiksYT1sKFRlLGUudG91Y2gsTywidG91Y2htb3ZlIiwidG91Y2hlbmQiKTtmdW5jdGlvbiBpKCl7dGhpcy5vbigibW91c2Vkb3duLmRyYWciLG4pLm9uKCJ0b3VjaHN0YXJ0LmRyYWciLGEpfWZ1bmN0aW9uIGwobixhLGksbyxsKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcyxjPXRoaXMsdT1lLmV2ZW50LnRhcmdldC5jb3JyZXNwb25kaW5nRWxlbWVudHx8ZS5ldmVudC50YXJnZXQsZj1jLnBhcmVudE5vZGUsZD10Lm9mKGMsYXJndW1lbnRzKSxwPTAsaD1uKCksZz0iLmRyYWciKyhudWxsPT1oPyIiOiItIitoKSx2PWUuc2VsZWN0KGkodSkpLm9uKG8rZyx4KS5vbihsK2csYiksbT1iZSh1KSx5PWEoZixoKTtmdW5jdGlvbiB4KCl7dmFyIGUsdCxyPWEoZixoKTtyJiYoZT1yWzBdLXlbMF0sdD1yWzFdLXlbMV0scHw9ZXx0LHk9cixkKHt0eXBlOiJkcmFnIix4OnJbMF0rc1swXSx5OnJbMV0rc1sxXSxkeDplLGR5OnR9KSl9ZnVuY3Rpb24gYigpe2EoZixoKSYmKHYub24obytnLG51bGwpLm9uKGwrZyxudWxsKSxtKHApLGQoe3R5cGU6ImRyYWdlbmQifSkpfXM9cj9bKHM9ci5hcHBseShjLGFyZ3VtZW50cykpLngteVswXSxzLnkteVsxXV06WzAsMF0sZCh7dHlwZToiZHJhZ3N0YXJ0In0pfX1yZXR1cm4gaS5vcmlnaW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ZSxpKTpyfSxlLnJlYmluZChpLHQsIm9uIil9LGUudG91Y2hlcz1mdW5jdGlvbihlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDImJih0PU4oKS50b3VjaGVzKSx0P24odCkubWFwKChmdW5jdGlvbih0KXt2YXIgcj13ZShlLHQpO3JldHVybiByLmlkZW50aWZpZXI9dC5pZGVudGlmaWVyLHJ9KSk6W119O3ZhciBrZT0xZS02LE1lPTFlLTEyLEFlPU1hdGguUEksTGU9MipBZSxTZT1MZS1rZSxDZT1BZS8yLE9lPUFlLzE4MCxEZT0xODAvQWU7ZnVuY3Rpb24gUGUoZSl7cmV0dXJuIGU+MD8xOmU8MD8tMTowfWZ1bmN0aW9uIHplKGUsdCxyKXtyZXR1cm4odFswXS1lWzBdKSooclsxXS1lWzFdKS0odFsxXS1lWzFdKSooclswXS1lWzBdKX1mdW5jdGlvbiBSZShlKXtyZXR1cm4gZT4xPzA6ZTwtMT9BZTpNYXRoLmFjb3MoZSl9ZnVuY3Rpb24gRWUoZSl7cmV0dXJuIGU+MT9DZTplPC0xPy1DZTpNYXRoLmFzaW4oZSl9ZnVuY3Rpb24gSWUoZSl7cmV0dXJuKChlPU1hdGguZXhwKGUpKSsxL2UpLzJ9ZnVuY3Rpb24gRmUoZSl7cmV0dXJuKGU9TWF0aC5zaW4oZS8yKSkqZX12YXIgTmU9TWF0aC5TUVJUMjtlLmludGVycG9sYXRlWm9vbT1mdW5jdGlvbihlLHQpe3ZhciByLG4sYT1lWzBdLGk9ZVsxXSxvPWVbMl0sbD10WzBdLHM9dFsxXSxjPXRbMl0sdT1sLWEsZj1zLWksZD11KnUrZipmO2lmKGQ8TWUpbj1NYXRoLmxvZyhjL28pL05lLHI9ZnVuY3Rpb24oZSl7cmV0dXJuW2ErZSp1LGkrZSpmLG8qTWF0aC5leHAoTmUqZSpuKV19O2Vsc2V7dmFyIHA9TWF0aC5zcXJ0KGQpLGg9KGMqYy1vKm8rNCpkKS8oMipvKjIqcCksZz0oYypjLW8qby00KmQpLygyKmMqMipwKSx2PU1hdGgubG9nKE1hdGguc3FydChoKmgrMSktaCksbT1NYXRoLmxvZyhNYXRoLnNxcnQoZypnKzEpLWcpO249KG0tdikvTmUscj1mdW5jdGlvbihlKXt2YXIgdCxyPWUqbixsPUllKHYpLHM9by8oMipwKSoobCoodD1OZSpyK3YsKCh0PU1hdGguZXhwKDIqdCkpLTEpLyh0KzEpKS1mdW5jdGlvbihlKXtyZXR1cm4oKGU9TWF0aC5leHAoZSkpLTEvZSkvMn0odikpO3JldHVyblthK3MqdSxpK3MqZixvKmwvSWUoTmUqcit2KV19fXJldHVybiByLmR1cmF0aW9uPTFlMypuLHJ9LGUuYmVoYXZpb3Iuem9vbT1mdW5jdGlvbigpe3ZhciB0LHIsbixpLGwscyxjLHUsZixkPXt4OjAseTowLGs6MX0scD1bOTYwLDUwMF0saD1CZSxnPTI1MCx2PTAsbT0ibW91c2Vkb3duLnpvb20iLHk9Im1vdXNlbW92ZS56b29tIix4PSJtb3VzZXVwLnpvb20iLGI9InRvdWNoc3RhcnQuem9vbSIsXz1IKHcsInpvb21zdGFydCIsInpvb20iLCJ6b29tZW5kIik7ZnVuY3Rpb24gdyhlKXtlLm9uKG0sRCkub24oamUrIi56b29tIix6KS5vbigiZGJsY2xpY2suem9vbSIsUikub24oYixQKX1mdW5jdGlvbiBUKGUpe3JldHVyblsoZVswXS1kLngpL2QuaywoZVsxXS1kLnkpL2Qua119ZnVuY3Rpb24gayhlKXtkLms9TWF0aC5tYXgoaFswXSxNYXRoLm1pbihoWzFdLGUpKX1mdW5jdGlvbiBNKGUsdCl7dD1mdW5jdGlvbihlKXtyZXR1cm5bZVswXSpkLmsrZC54LGVbMV0qZC5rK2QueV19KHQpLGQueCs9ZVswXS10WzBdLGQueSs9ZVsxXS10WzFdfWZ1bmN0aW9uIEEodCxuLGEsaSl7dC5fX2NoYXJ0X189e3g6ZC54LHk6ZC55LGs6ZC5rfSxrKE1hdGgucG93KDIsaSkpLE0ocj1uLGEpLHQ9ZS5zZWxlY3QodCksZz4wJiYodD10LnRyYW5zaXRpb24oKS5kdXJhdGlvbihnKSksdC5jYWxsKHcuZXZlbnQpfWZ1bmN0aW9uIEwoKXtjJiZjLmRvbWFpbihzLnJhbmdlKCkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4oZS1kLngpL2Qua30pKS5tYXAocy5pbnZlcnQpKSxmJiZmLmRvbWFpbih1LnJhbmdlKCkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4oZS1kLnkpL2Qua30pKS5tYXAodS5pbnZlcnQpKX1mdW5jdGlvbiBTKGUpe3YrK3x8ZSh7dHlwZToiem9vbXN0YXJ0In0pfWZ1bmN0aW9uIEMoZSl7TCgpLGUoe3R5cGU6Inpvb20iLHNjYWxlOmQuayx0cmFuc2xhdGU6W2QueCxkLnldfSl9ZnVuY3Rpb24gTyhlKXstLXZ8fChlKHt0eXBlOiJ6b29tZW5kIn0pLHI9bnVsbCl9ZnVuY3Rpb24gRCgpe3ZhciB0PXRoaXMscj1fLm9mKHQsYXJndW1lbnRzKSxuPTAsYT1lLnNlbGVjdChvKHQpKS5vbih5LHMpLm9uKHgsYyksaT1UKGUubW91c2UodCkpLGw9YmUodCk7ZnVuY3Rpb24gcygpe249MSxNKGUubW91c2UodCksaSksQyhyKX1mdW5jdGlvbiBjKCl7YS5vbih5LG51bGwpLm9uKHgsbnVsbCksbChuKSxPKHIpfW1sLmNhbGwodCksUyhyKX1mdW5jdGlvbiBQKCl7dmFyIHQscj10aGlzLG49Xy5vZihyLGFyZ3VtZW50cyksYT17fSxpPTAsbz0iLnpvb20tIitlLmV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmlkZW50aWZpZXIscz0idG91Y2htb3ZlIitvLGM9InRvdWNoZW5kIitvLHU9W10sZj1lLnNlbGVjdChyKSxwPWJlKHIpO2Z1bmN0aW9uIGgoKXt2YXIgbj1lLnRvdWNoZXMocik7cmV0dXJuIHQ9ZC5rLG4uZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5pZGVudGlmaWVyIGluIGEmJihhW2UuaWRlbnRpZmllcl09VChlKSl9KSksbn1mdW5jdGlvbiBnKCl7dmFyIHQ9ZS5ldmVudC50YXJnZXQ7ZS5zZWxlY3QodCkub24ocyx2KS5vbihjLHkpLHUucHVzaCh0KTtmb3IodmFyIG49ZS5ldmVudC5jaGFuZ2VkVG91Y2hlcyxvPTAsZj1uLmxlbmd0aDtvPGY7KytvKWFbbltvXS5pZGVudGlmaWVyXT1udWxsO3ZhciBwPWgoKSxnPURhdGUubm93KCk7aWYoMT09PXAubGVuZ3RoKXtpZihnLWw8NTAwKXt2YXIgbT1wWzBdO0EocixtLGFbbS5pZGVudGlmaWVyXSxNYXRoLmZsb29yKE1hdGgubG9nKGQuaykvTWF0aC5MTjIpKzEpLEYoKX1sPWd9ZWxzZSBpZihwLmxlbmd0aD4xKXttPXBbMF07dmFyIHg9cFsxXSxiPW1bMF0teFswXSxfPW1bMV0teFsxXTtpPWIqYitfKl99fWZ1bmN0aW9uIHYoKXt2YXIgbyxzLGMsdSxmPWUudG91Y2hlcyhyKTttbC5jYWxsKHIpO2Zvcih2YXIgZD0wLHA9Zi5sZW5ndGg7ZDxwOysrZCx1PW51bGwpaWYoYz1mW2RdLHU9YVtjLmlkZW50aWZpZXJdKXtpZihzKWJyZWFrO289YyxzPXV9aWYodSl7dmFyIGg9KGg9Y1swXS1vWzBdKSpoKyhoPWNbMV0tb1sxXSkqaCxnPWkmJk1hdGguc3FydChoL2kpO289WyhvWzBdK2NbMF0pLzIsKG9bMV0rY1sxXSkvMl0scz1bKHNbMF0rdVswXSkvMiwoc1sxXSt1WzFdKS8yXSxrKGcqdCl9bD1udWxsLE0obyxzKSxDKG4pfWZ1bmN0aW9uIHkoKXtpZihlLmV2ZW50LnRvdWNoZXMubGVuZ3RoKXtmb3IodmFyIHQ9ZS5ldmVudC5jaGFuZ2VkVG91Y2hlcyxyPTAsaT10Lmxlbmd0aDtyPGk7KytyKWRlbGV0ZSBhW3Rbcl0uaWRlbnRpZmllcl07Zm9yKHZhciBsIGluIGEpcmV0dXJuIHZvaWQgaCgpfWUuc2VsZWN0QWxsKHUpLm9uKG8sbnVsbCksZi5vbihtLEQpLm9uKGIsUCkscCgpLE8obil9ZygpLFMobiksZi5vbihtLG51bGwpLm9uKGIsZyl9ZnVuY3Rpb24geigpe3ZhciBhPV8ub2YodGhpcyxhcmd1bWVudHMpO2k/Y2xlYXJUaW1lb3V0KGkpOihtbC5jYWxsKHRoaXMpLHQ9VChyPW58fGUubW91c2UodGhpcykpLFMoYSkpLGk9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtpPW51bGwsTyhhKX0pLDUwKSxGKCksayhNYXRoLnBvdygyLC4wMDIqSGUoKSkqZC5rKSxNKHIsdCksQyhhKX1mdW5jdGlvbiBSKCl7dmFyIHQ9ZS5tb3VzZSh0aGlzKSxyPU1hdGgubG9nKGQuaykvTWF0aC5MTjI7QSh0aGlzLHQsVCh0KSxlLmV2ZW50LnNoaWZ0S2V5P01hdGguY2VpbChyKS0xOk1hdGguZmxvb3IocikrMSl9cmV0dXJuIGplfHwoamU9Im9ud2hlZWwiaW4gYT8oSGU9ZnVuY3Rpb24oKXtyZXR1cm4tZS5ldmVudC5kZWx0YVkqKGUuZXZlbnQuZGVsdGFNb2RlPzEyMDoxKX0sIndoZWVsIik6Im9ubW91c2V3aGVlbCJpbiBhPyhIZT1mdW5jdGlvbigpe3JldHVybiBlLmV2ZW50LndoZWVsRGVsdGF9LCJtb3VzZXdoZWVsIik6KEhlPWZ1bmN0aW9uKCl7cmV0dXJuLWUuZXZlbnQuZGV0YWlsfSwiTW96TW91c2VQaXhlbFNjcm9sbCIpKSx3LmV2ZW50PWZ1bmN0aW9uKHQpe3QuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1fLm9mKHRoaXMsYXJndW1lbnRzKSxuPWQ7Ymw/ZS5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmVhY2goInN0YXJ0Lnpvb20iLChmdW5jdGlvbigpe2Q9dGhpcy5fX2NoYXJ0X198fHt4OjAseTowLGs6MX0sUyh0KX0pKS50d2Vlbigiem9vbTp6b29tIiwoZnVuY3Rpb24oKXt2YXIgYT1wWzBdLGk9cFsxXSxvPXI/clswXTphLzIsbD1yP3JbMV06aS8yLHM9ZS5pbnRlcnBvbGF0ZVpvb20oWyhvLWQueCkvZC5rLChsLWQueSkvZC5rLGEvZC5rXSxbKG8tbi54KS9uLmssKGwtbi55KS9uLmssYS9uLmtdKTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHI9cyhlKSxuPWEvclsyXTt0aGlzLl9fY2hhcnRfXz1kPXt4Om8tclswXSpuLHk6bC1yWzFdKm4sazpufSxDKHQpfX0pKS5lYWNoKCJpbnRlcnJ1cHQuem9vbSIsKGZ1bmN0aW9uKCl7Tyh0KX0pKS5lYWNoKCJlbmQuem9vbSIsKGZ1bmN0aW9uKCl7Tyh0KX0pKToodGhpcy5fX2NoYXJ0X189ZCxTKHQpLEModCksTyh0KSl9KSl9LHcudHJhbnNsYXRlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPXt4OitlWzBdLHk6K2VbMV0sazpkLmt9LEwoKSx3KTpbZC54LGQueV19LHcuc2NhbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9e3g6ZC54LHk6ZC55LGs6bnVsbH0saygrZSksTCgpLHcpOmQua30sdy5zY2FsZUV4dGVudD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD1udWxsPT1lP0JlOlsrZVswXSwrZVsxXV0sdyk6aH0sdy5jZW50ZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ZSYmWytlWzBdLCtlWzFdXSx3KTpufSx3LnNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9ZSYmWytlWzBdLCtlWzFdXSx3KTpwfSx3LmR1cmF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPStlLHcpOmd9LHcueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1lLHM9ZS5jb3B5KCksZD17eDowLHk6MCxrOjF9LHcpOmN9LHcueT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1lLHU9ZS5jb3B5KCksZD17eDowLHk6MCxrOjF9LHcpOmZ9LGUucmViaW5kKHcsXywib24iKX07dmFyIEhlLGplLEJlPVswLDEvMF07ZnVuY3Rpb24gVmUoKXt9ZnVuY3Rpb24gVWUoZSx0LHIpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgVWU/KHRoaXMuaD0rZSx0aGlzLnM9K3Qsdm9pZCh0aGlzLmw9K3IpKTphcmd1bWVudHMubGVuZ3RoPDI/ZSBpbnN0YW5jZW9mIFVlP25ldyBVZShlLmgsZS5zLGUubCk6c3QoIiIrZSxjdCxVZSk6bmV3IFVlKGUsdCxyKX1lLmNvbG9yPVZlLFZlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpKyIifSxlLmhzbD1VZTt2YXIgcWU9VWUucHJvdG90eXBlPW5ldyBWZTtmdW5jdGlvbiBHZShlLHQscil7dmFyIG4sYTtmdW5jdGlvbiBpKGUpe3JldHVybiBNYXRoLnJvdW5kKDI1NSpmdW5jdGlvbihlKXtyZXR1cm4gZT4zNjA/ZS09MzYwOmU8MCYmKGUrPTM2MCksZTw2MD9uKyhhLW4pKmUvNjA6ZTwxODA/YTplPDI0MD9uKyhhLW4pKigyNDAtZSkvNjA6bn0oZSkpfXJldHVybiBlPWlzTmFOKGUpPzA6KGUlPTM2MCk8MD9lKzM2MDplLHQ9aXNOYU4odCl8fHQ8MD8wOnQ+MT8xOnQsbj0yKihyPXI8MD8wOnI+MT8xOnIpLShhPXI8PS41P3IqKDErdCk6cit0LXIqdCksbmV3IG50KGkoZSsxMjApLGkoZSksaShlLTEyMCkpfWZ1bmN0aW9uIFplKHQscixuKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFplPyh0aGlzLmg9K3QsdGhpcy5jPStyLHZvaWQodGhpcy5sPStuKSk6YXJndW1lbnRzLmxlbmd0aDwyP3QgaW5zdGFuY2VvZiBaZT9uZXcgWmUodC5oLHQuYyx0LmwpOktlKHQgaW5zdGFuY2VvZiBXZT90Lmw6KHQ9dXQoKHQ9ZS5yZ2IodCkpLnIsdC5nLHQuYikpLmwsdC5hLHQuYik6bmV3IFplKHQscixuKX1xZS5icmlnaHRlcj1mdW5jdGlvbihlKXtyZXR1cm4gZT1NYXRoLnBvdyguNyxhcmd1bWVudHMubGVuZ3RoP2U6MSksbmV3IFVlKHRoaXMuaCx0aGlzLnMsdGhpcy5sL2UpfSxxZS5kYXJrZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9TWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD9lOjEpLG5ldyBVZSh0aGlzLmgsdGhpcy5zLGUqdGhpcy5sKX0scWUucmdiPWZ1bmN0aW9uKCl7cmV0dXJuIEdlKHRoaXMuaCx0aGlzLnMsdGhpcy5sKX0sZS5oY2w9WmU7dmFyIFllPVplLnByb3RvdHlwZT1uZXcgVmU7ZnVuY3Rpb24gWGUoZSx0LHIpe3JldHVybiBpc05hTihlKSYmKGU9MCksaXNOYU4odCkmJih0PTApLG5ldyBXZShyLE1hdGguY29zKGUqPU9lKSp0LE1hdGguc2luKGUpKnQpfWZ1bmN0aW9uIFdlKGUsdCxyKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFdlPyh0aGlzLmw9K2UsdGhpcy5hPSt0LHZvaWQodGhpcy5iPStyKSk6YXJndW1lbnRzLmxlbmd0aDwyP2UgaW5zdGFuY2VvZiBXZT9uZXcgV2UoZS5sLGUuYSxlLmIpOmUgaW5zdGFuY2VvZiBaZT9YZShlLmgsZS5jLGUubCk6dXQoKGU9bnQoZSkpLnIsZS5nLGUuYik6bmV3IFdlKGUsdCxyKX1ZZS5icmlnaHRlcj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFplKHRoaXMuaCx0aGlzLmMsTWF0aC5taW4oMTAwLHRoaXMubCtRZSooYXJndW1lbnRzLmxlbmd0aD9lOjEpKSl9LFllLmRhcmtlcj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFplKHRoaXMuaCx0aGlzLmMsTWF0aC5tYXgoMCx0aGlzLmwtUWUqKGFyZ3VtZW50cy5sZW5ndGg/ZToxKSkpfSxZZS5yZ2I9ZnVuY3Rpb24oKXtyZXR1cm4gWGUodGhpcy5oLHRoaXMuYyx0aGlzLmwpLnJnYigpfSxlLmxhYj1XZTt2YXIgUWU9MTgsSmU9V2UucHJvdG90eXBlPW5ldyBWZTtmdW5jdGlvbiAkZShlLHQscil7dmFyIG49KGUrMTYpLzExNixhPW4rdC81MDAsaT1uLXIvMjAwO3JldHVybiBuZXcgbnQocnQoMy4yNDA0NTQyKihhPS45NTA0NypldChhKSktMS41MzcxMzg1KihuPTEqZXQobikpLS40OTg1MzE0KihpPTEuMDg4ODMqZXQoaSkpKSxydCgtLjk2OTI2NiphKzEuODc2MDEwOCpuKy4wNDE1NTYqaSkscnQoLjA1NTY0MzQqYS0uMjA0MDI1OSpuKzEuMDU3MjI1MippKSl9ZnVuY3Rpb24gS2UoZSx0LHIpe3JldHVybiBlPjA/bmV3IFplKE1hdGguYXRhbjIocix0KSpEZSxNYXRoLnNxcnQodCp0K3IqciksZSk6bmV3IFplKE5hTixOYU4sZSl9ZnVuY3Rpb24gZXQoZSl7cmV0dXJuIGU+LjIwNjg5MzAzND9lKmUqZTooZS00LzI5KS83Ljc4NzAzN31mdW5jdGlvbiB0dChlKXtyZXR1cm4gZT4uMDA4ODU2P01hdGgucG93KGUsMS8zKTo3Ljc4NzAzNyplKzQvMjl9ZnVuY3Rpb24gcnQoZSl7cmV0dXJuIE1hdGgucm91bmQoMjU1KihlPD0uMDAzMDQ/MTIuOTIqZToxLjA1NSpNYXRoLnBvdyhlLDEvMi40KS0uMDU1KSl9ZnVuY3Rpb24gbnQoZSx0LHIpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgbnQ/KHRoaXMucj1+fmUsdGhpcy5nPX5+dCx2b2lkKHRoaXMuYj1+fnIpKTphcmd1bWVudHMubGVuZ3RoPDI/ZSBpbnN0YW5jZW9mIG50P25ldyBudChlLnIsZS5nLGUuYik6c3QoIiIrZSxudCxHZSk6bmV3IG50KGUsdCxyKX1mdW5jdGlvbiBhdChlKXtyZXR1cm4gbmV3IG50KGU+PjE2LGU+PjgmMjU1LDI1NSZlKX1mdW5jdGlvbiBpdChlKXtyZXR1cm4gYXQoZSkrIiJ9SmUuYnJpZ2h0ZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBXZShNYXRoLm1pbigxMDAsdGhpcy5sK1FlKihhcmd1bWVudHMubGVuZ3RoP2U6MSkpLHRoaXMuYSx0aGlzLmIpfSxKZS5kYXJrZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBXZShNYXRoLm1heCgwLHRoaXMubC1RZSooYXJndW1lbnRzLmxlbmd0aD9lOjEpKSx0aGlzLmEsdGhpcy5iKX0sSmUucmdiPWZ1bmN0aW9uKCl7cmV0dXJuICRlKHRoaXMubCx0aGlzLmEsdGhpcy5iKX0sZS5yZ2I9bnQ7dmFyIG90PW50LnByb3RvdHlwZT1uZXcgVmU7ZnVuY3Rpb24gbHQoZSl7cmV0dXJuIGU8MTY/IjAiK01hdGgubWF4KDAsZSkudG9TdHJpbmcoMTYpOk1hdGgubWluKDI1NSxlKS50b1N0cmluZygxNil9ZnVuY3Rpb24gc3QoZSx0LHIpe3ZhciBuLGEsaSxvPTAsbD0wLHM9MDtpZihuPS8oW2Etel0rKVwoKC4qKVwpLy5leGVjKGU9ZS50b0xvd2VyQ2FzZSgpKSlzd2l0Y2goYT1uWzJdLnNwbGl0KCIsIiksblsxXSl7Y2FzZSJoc2wiOnJldHVybiByKHBhcnNlRmxvYXQoYVswXSkscGFyc2VGbG9hdChhWzFdKS8xMDAscGFyc2VGbG9hdChhWzJdKS8xMDApO2Nhc2UicmdiIjpyZXR1cm4gdChkdChhWzBdKSxkdChhWzFdKSxkdChhWzJdKSl9cmV0dXJuKGk9cHQuZ2V0KGUpKT90KGkucixpLmcsaS5iKToobnVsbD09ZXx8IiMiIT09ZS5jaGFyQXQoMCl8fGlzTmFOKGk9cGFyc2VJbnQoZS5zbGljZSgxKSwxNikpfHwoND09PWUubGVuZ3RoPyhvPSgzODQwJmkpPj40LG98PW8+PjQsbD0yNDAmaSxsfD1sPj40LHM9MTUmaSxzfD1zPDw0KTo3PT09ZS5sZW5ndGgmJihvPSgxNjcxMTY4MCZpKT4+MTYsbD0oNjUyODAmaSk+Pjgscz0yNTUmaSkpLHQobyxsLHMpKX1mdW5jdGlvbiBjdChlLHQscil7dmFyIG4sYSxpPU1hdGgubWluKGUvPTI1NSx0Lz0yNTUsci89MjU1KSxvPU1hdGgubWF4KGUsdCxyKSxsPW8taSxzPShvK2kpLzI7cmV0dXJuIGw/KGE9czwuNT9sLyhvK2kpOmwvKDItby1pKSxuPWU9PW8/KHQtcikvbCsodDxyPzY6MCk6dD09bz8oci1lKS9sKzI6KGUtdCkvbCs0LG4qPTYwKToobj1OYU4sYT1zPjAmJnM8MT8wOm4pLG5ldyBVZShuLGEscyl9ZnVuY3Rpb24gdXQoZSx0LHIpe3ZhciBuPXR0KCguNDEyNDU2NCooZT1mdChlKSkrLjM1NzU3NjEqKHQ9ZnQodCkpKy4xODA0Mzc1KihyPWZ0KHIpKSkvLjk1MDQ3KSxhPXR0KCguMjEyNjcyOSplKy43MTUxNTIyKnQrLjA3MjE3NSpyKS8xKTtyZXR1cm4gV2UoMTE2KmEtMTYsNTAwKihuLWEpLDIwMCooYS10dCgoLjAxOTMzMzkqZSsuMTE5MTkyKnQrLjk1MDMwNDEqcikvMS4wODg4MykpKX1mdW5jdGlvbiBmdChlKXtyZXR1cm4oZS89MjU1KTw9LjA0MDQ1P2UvMTIuOTI6TWF0aC5wb3coKGUrLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiBkdChlKXt2YXIgdD1wYXJzZUZsb2F0KGUpO3JldHVybiIlIj09PWUuY2hhckF0KGUubGVuZ3RoLTEpP01hdGgucm91bmQoMi41NSp0KTp0fW90LmJyaWdodGVyPWZ1bmN0aW9uKGUpe2U9TWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD9lOjEpO3ZhciB0PXRoaXMucixyPXRoaXMuZyxuPXRoaXMuYixhPTMwO3JldHVybiB0fHxyfHxuPyh0JiZ0PGEmJih0PWEpLHImJnI8YSYmKHI9YSksbiYmbjxhJiYobj1hKSxuZXcgbnQoTWF0aC5taW4oMjU1LHQvZSksTWF0aC5taW4oMjU1LHIvZSksTWF0aC5taW4oMjU1LG4vZSkpKTpuZXcgbnQoYSxhLGEpfSxvdC5kYXJrZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBudCgoZT1NYXRoLnBvdyguNyxhcmd1bWVudHMubGVuZ3RoP2U6MSkpKnRoaXMucixlKnRoaXMuZyxlKnRoaXMuYil9LG90LmhzbD1mdW5jdGlvbigpe3JldHVybiBjdCh0aGlzLnIsdGhpcy5nLHRoaXMuYil9LG90LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIiMiK2x0KHRoaXMucikrbHQodGhpcy5nKStsdCh0aGlzLmIpfTt2YXIgcHQ9ZS5tYXAoe2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH0pO2Z1bmN0aW9uIGh0KGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6ZnVuY3Rpb24oKXtyZXR1cm4gZX19ZnVuY3Rpb24gZ3QoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXtyZXR1cm4gMj09PWFyZ3VtZW50cy5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiByJiYobj1yLHI9bnVsbCksdnQodCxyLGUsbil9fWZ1bmN0aW9uIHZ0KHQscixhLGkpe3ZhciBvPXt9LGw9ZS5kaXNwYXRjaCgiYmVmb3Jlc2VuZCIsInByb2dyZXNzIiwibG9hZCIsImVycm9yIikscz17fSxjPW5ldyBYTUxIdHRwUmVxdWVzdCx1PW51bGw7ZnVuY3Rpb24gZigpe3ZhciBlLHQ9Yy5zdGF0dXM7aWYoIXQmJmZ1bmN0aW9uKGUpe3ZhciB0PWUucmVzcG9uc2VUeXBlO3JldHVybiB0JiYidGV4dCIhPT10P2UucmVzcG9uc2U6ZS5yZXNwb25zZVRleHR9KGMpfHx0Pj0yMDAmJnQ8MzAwfHwzMDQ9PT10KXt0cnl7ZT1hLmNhbGwobyxjKX1jYXRjaChlKXtyZXR1cm4gdm9pZCBsLmVycm9yLmNhbGwobyxlKX1sLmxvYWQuY2FsbChvLGUpfWVsc2UgbC5lcnJvci5jYWxsKG8sYyl9cmV0dXJuIHRoaXMuWERvbWFpblJlcXVlc3QmJiEoIndpdGhDcmVkZW50aWFscyJpbiBjKSYmL14oaHR0cChzKT86KT9cL1wvLy50ZXN0KHQpJiYoYz1uZXcgWERvbWFpblJlcXVlc3QpLCJvbmxvYWQiaW4gYz9jLm9ubG9hZD1jLm9uZXJyb3I9ZjpjLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2MucmVhZHlTdGF0ZT4zJiZmKCl9LGMub25wcm9ncmVzcz1mdW5jdGlvbih0KXt2YXIgcj1lLmV2ZW50O2UuZXZlbnQ9dDt0cnl7bC5wcm9ncmVzcy5jYWxsKG8sYyl9ZmluYWxseXtlLmV2ZW50PXJ9fSxvLmhlYWRlcj1mdW5jdGlvbihlLHQpe3JldHVybiBlPShlKyIiKS50b0xvd2VyQ2FzZSgpLGFyZ3VtZW50cy5sZW5ndGg8Mj9zW2VdOihudWxsPT10P2RlbGV0ZSBzW2VdOnNbZV09dCsiIixvKX0sby5taW1lVHlwZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT1lP251bGw6ZSsiIixvKTpyfSxvLnJlc3BvbnNlVHlwZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1lLG8pOnV9LG8ucmVzcG9uc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGE9ZSxvfSxbImdldCIsInBvc3QiXS5mb3JFYWNoKChmdW5jdGlvbihlKXtvW2VdPWZ1bmN0aW9uKCl7cmV0dXJuIG8uc2VuZC5hcHBseShvLFtlXS5jb25jYXQobihhcmd1bWVudHMpKSl9fSkpLG8uc2VuZD1mdW5jdGlvbihlLG4sYSl7aWYoMj09PWFyZ3VtZW50cy5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBuJiYoYT1uLG49bnVsbCksYy5vcGVuKGUsdCwhMCksbnVsbD09cnx8ImFjY2VwdCJpbiBzfHwocy5hY2NlcHQ9cisiLCovKiIpLGMuc2V0UmVxdWVzdEhlYWRlcilmb3IodmFyIGkgaW4gcyljLnNldFJlcXVlc3RIZWFkZXIoaSxzW2ldKTtyZXR1cm4gbnVsbCE9ciYmYy5vdmVycmlkZU1pbWVUeXBlJiZjLm92ZXJyaWRlTWltZVR5cGUociksbnVsbCE9dSYmKGMucmVzcG9uc2VUeXBlPXUpLG51bGwhPWEmJm8ub24oImVycm9yIixhKS5vbigibG9hZCIsKGZ1bmN0aW9uKGUpe2EobnVsbCxlKX0pKSxsLmJlZm9yZXNlbmQuY2FsbChvLGMpLGMuc2VuZChudWxsPT1uP251bGw6biksb30sby5hYm9ydD1mdW5jdGlvbigpe3JldHVybiBjLmFib3J0KCksb30sZS5yZWJpbmQobyxsLCJvbiIpLG51bGw9PWk/bzpvLmdldChmdW5jdGlvbihlKXtyZXR1cm4gMT09PWUubGVuZ3RoP2Z1bmN0aW9uKHQscil7ZShudWxsPT10P3I6bnVsbCl9OmV9KGkpKX1wdC5mb3JFYWNoKChmdW5jdGlvbihlLHQpe3B0LnNldChlLGF0KHQpKX0pKSxlLmZ1bmN0b3I9aHQsZS54aHI9Z3QoTyksZS5kc3Y9ZnVuY3Rpb24oZSx0KXt2YXIgcj1uZXcgUmVnRXhwKCdbIicrZSsiXG5dIiksbj1lLmNoYXJDb2RlQXQoMCk7ZnVuY3Rpb24gYShlLHIsbil7YXJndW1lbnRzLmxlbmd0aDwzJiYobj1yLHI9bnVsbCk7dmFyIGE9dnQoZSx0LG51bGw9PXI/aTpvKHIpLG4pO3JldHVybiBhLnJvdz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9hLnJlc3BvbnNlKG51bGw9PShyPWUpP2k6byhlKSk6cn0sYX1mdW5jdGlvbiBpKGUpe3JldHVybiBhLnBhcnNlKGUucmVzcG9uc2VUZXh0KX1mdW5jdGlvbiBvKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gYS5wYXJzZSh0LnJlc3BvbnNlVGV4dCxlKX19ZnVuY3Rpb24gbCh0KXtyZXR1cm4gdC5tYXAocykuam9pbihlKX1mdW5jdGlvbiBzKGUpe3JldHVybiByLnRlc3QoZSk/JyInK2UucmVwbGFjZSgvXCIvZywnIiInKSsnIic6ZX1yZXR1cm4gYS5wYXJzZT1mdW5jdGlvbihlLHQpe3ZhciByO3JldHVybiBhLnBhcnNlUm93cyhlLChmdW5jdGlvbihlLG4pe2lmKHIpcmV0dXJuIHIoZSxuLTEpO3ZhciBhPW5ldyBGdW5jdGlvbigiZCIsInJldHVybiB7IitlLm1hcCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSkrIjogZFsiK3QrIl0ifSkpLmpvaW4oIiwiKSsifSIpO3I9dD9mdW5jdGlvbihlLHIpe3JldHVybiB0KGEoZSkscil9OmF9KSl9LGEucGFyc2VSb3dzPWZ1bmN0aW9uKGUsdCl7dmFyIHIsYSxpPXt9LG89e30sbD1bXSxzPWUubGVuZ3RoLGM9MCx1PTA7ZnVuY3Rpb24gZigpe2lmKGM+PXMpcmV0dXJuIG87aWYoYSlyZXR1cm4gYT0hMSxpO3ZhciB0PWM7aWYoMzQ9PT1lLmNoYXJDb2RlQXQodCkpe2Zvcih2YXIgcj10O3IrKzxzOylpZigzND09PWUuY2hhckNvZGVBdChyKSl7aWYoMzQhPT1lLmNoYXJDb2RlQXQocisxKSlicmVhazsrK3J9cmV0dXJuIGM9cisyLDEzPT09KGw9ZS5jaGFyQ29kZUF0KHIrMSkpPyhhPSEwLDEwPT09ZS5jaGFyQ29kZUF0KHIrMikmJisrYyk6MTA9PT1sJiYoYT0hMCksZS5zbGljZSh0KzEscikucmVwbGFjZSgvIiIvZywnIicpfWZvcig7YzxzOyl7dmFyIGwsdT0xO2lmKDEwPT09KGw9ZS5jaGFyQ29kZUF0KGMrKykpKWE9ITA7ZWxzZSBpZigxMz09PWwpYT0hMCwxMD09PWUuY2hhckNvZGVBdChjKSYmKCsrYywrK3UpO2Vsc2UgaWYobCE9PW4pY29udGludWU7cmV0dXJuIGUuc2xpY2UodCxjLXUpfXJldHVybiBlLnNsaWNlKHQpfWZvcig7KHI9ZigpKSE9PW87KXtmb3IodmFyIGQ9W107ciE9PWkmJnIhPT1vOylkLnB1c2gocikscj1mKCk7dCYmbnVsbD09KGQ9dChkLHUrKykpfHxsLnB1c2goZCl9cmV0dXJuIGx9LGEuZm9ybWF0PWZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodFswXSkpcmV0dXJuIGEuZm9ybWF0Um93cyh0KTt2YXIgcj1uZXcgQyxuPVtdO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiBlKXIuaGFzKHQpfHxuLnB1c2goci5hZGQodCkpfSkpLFtuLm1hcChzKS5qb2luKGUpXS5jb25jYXQodC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBuLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHModFtlXSl9KSkuam9pbihlKX0pKSkuam9pbigiXG4iKX0sYS5mb3JtYXRSb3dzPWZ1bmN0aW9uKGUpe3JldHVybiBlLm1hcChsKS5qb2luKCJcbiIpfSxhfSxlLmNzdj1lLmRzdigiLCIsInRleHQvY3N2IiksZS50c3Y9ZS5kc3YoIlx0IiwidGV4dC90YWItc2VwYXJhdGVkLXZhbHVlcyIpO3ZhciBtdCx5dCx4dCxidCxfdD10aGlzW1AodGhpcywicmVxdWVzdEFuaW1hdGlvbkZyYW1lIildfHxmdW5jdGlvbihlKXtzZXRUaW1lb3V0KGUsMTcpfTtmdW5jdGlvbiB3dChlLHQscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aDtuPDImJih0PTApLG48MyYmKHI9RGF0ZS5ub3coKSk7dmFyIGE9cit0LGk9e2M6ZSx0OmEsbjpudWxsfTtyZXR1cm4geXQ/eXQubj1pOm10PWkseXQ9aSx4dHx8KGJ0PWNsZWFyVGltZW91dChidCkseHQ9MSxfdChUdCkpLGl9ZnVuY3Rpb24gVHQoKXt2YXIgZT1rdCgpLHQ9TXQoKS1lO3Q+MjQ/KGlzRmluaXRlKHQpJiYoY2xlYXJUaW1lb3V0KGJ0KSxidD1zZXRUaW1lb3V0KFR0LHQpKSx4dD0wKTooeHQ9MSxfdChUdCkpfWZ1bmN0aW9uIGt0KCl7Zm9yKHZhciBlPURhdGUubm93KCksdD1tdDt0OyllPj10LnQmJnQuYyhlLXQudCkmJih0LmM9bnVsbCksdD10Lm47cmV0dXJuIGV9ZnVuY3Rpb24gTXQoKXtmb3IodmFyIGUsdD1tdCxyPTEvMDt0Oyl0LmM/KHQudDxyJiYocj10LnQpLHQ9KGU9dCkubik6dD1lP2Uubj10Lm46bXQ9dC5uO3JldHVybiB5dD1lLHJ9ZnVuY3Rpb24gQXQoZSx0KXtyZXR1cm4gdC0oZT9NYXRoLmNlaWwoTWF0aC5sb2coZSkvTWF0aC5MTjEwKToxKX1lLnRpbWVyPWZ1bmN0aW9uKCl7d3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxlLnRpbWVyLmZsdXNoPWZ1bmN0aW9uKCl7a3QoKSxNdCgpfSxlLnJvdW5kPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/TWF0aC5yb3VuZChlKih0PU1hdGgucG93KDEwLHQpKSkvdDpNYXRoLnJvdW5kKGUpfTt2YXIgTHQ9WyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCJceGI1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl0ubWFwKChmdW5jdGlvbihlLHQpe3ZhciByPU1hdGgucG93KDEwLDMqeSg4LXQpKTtyZXR1cm57c2NhbGU6dD44P2Z1bmN0aW9uKGUpe3JldHVybiBlL3J9OmZ1bmN0aW9uKGUpe3JldHVybiBlKnJ9LHN5bWJvbDplfX0pKTtmdW5jdGlvbiBTdCh0KXt2YXIgcj10LmRlY2ltYWwsbj10LnRob3VzYW5kcyxhPXQuZ3JvdXBpbmcsaT10LmN1cnJlbmN5LG89YSYmbj9mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmxlbmd0aCxpPVtdLG89MCxsPWFbMF0scz0wO3I+MCYmbD4wJiYocytsKzE+dCYmKGw9TWF0aC5tYXgoMSx0LXMpKSxpLnB1c2goZS5zdWJzdHJpbmcoci09bCxyK2wpKSwhKChzKz1sKzEpPnQpKTspbD1hW289KG8rMSklYS5sZW5ndGhdO3JldHVybiBpLnJldmVyc2UoKS5qb2luKG4pfTpPO3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj1DdC5leGVjKHQpLGE9blsxXXx8IiAiLGw9blsyXXx8Ij4iLHM9blszXXx8Ii0iLGM9bls0XXx8IiIsdT1uWzVdLGY9K25bNl0sZD1uWzddLHA9bls4XSxoPW5bOV0sZz0xLHY9IiIsbT0iIix5PSExLHg9ITA7c3dpdGNoKHAmJihwPStwLnN1YnN0cmluZygxKSksKHV8fCIwIj09PWEmJiI9Ij09PWwpJiYodT1hPSIwIixsPSI9IiksaCl7Y2FzZSJuIjpkPSEwLGg9ImciO2JyZWFrO2Nhc2UiJSI6Zz0xMDAsbT0iJSIsaD0iZiI7YnJlYWs7Y2FzZSJwIjpnPTEwMCxtPSIlIixoPSJyIjticmVhaztjYXNlImIiOmNhc2UibyI6Y2FzZSJ4IjpjYXNlIlgiOiIjIj09PWMmJih2PSIwIitoLnRvTG93ZXJDYXNlKCkpO2Nhc2UiYyI6eD0hMTtjYXNlImQiOnk9ITAscD0wO2JyZWFrO2Nhc2UicyI6Zz0tMSxoPSJyIn0iJCI9PT1jJiYodj1pWzBdLG09aVsxXSksInIiIT1ofHxwfHwoaD0iZyIpLG51bGwhPXAmJigiZyI9PWg/cD1NYXRoLm1heCgxLE1hdGgubWluKDIxLHApKToiZSIhPWgmJiJmIiE9aHx8KHA9TWF0aC5tYXgoMCxNYXRoLm1pbigyMCxwKSkpKSxoPU90LmdldChoKXx8RHQ7dmFyIGI9dSYmZDtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49bTtpZih5JiZ0JTEpcmV0dXJuIiI7dmFyIGk9dDwwfHwwPT09dCYmMS90PDA/KHQ9LXQsIi0iKToiLSI9PT1zPyIiOnM7aWYoZzwwKXt2YXIgYz1lLmZvcm1hdFByZWZpeCh0LHApO3Q9Yy5zY2FsZSh0KSxuPWMuc3ltYm9sK219ZWxzZSB0Kj1nO3ZhciBfLHcsVD0odD1oKHQscCkpLmxhc3RJbmRleE9mKCIuIik7aWYoVDwwKXt2YXIgaz14P3QubGFzdEluZGV4T2YoImUiKTotMTtrPDA/KF89dCx3PSIiKTooXz10LnN1YnN0cmluZygwLGspLHc9dC5zdWJzdHJpbmcoaykpfWVsc2UgXz10LnN1YnN0cmluZygwLFQpLHc9cit0LnN1YnN0cmluZyhUKzEpOyF1JiZkJiYoXz1vKF8sMS8wKSk7dmFyIE09di5sZW5ndGgrXy5sZW5ndGgrdy5sZW5ndGgrKGI/MDppLmxlbmd0aCksQT1NPGY/bmV3IEFycmF5KE09Zi1NKzEpLmpvaW4oYSk6IiI7cmV0dXJuIGImJihfPW8oQStfLEEubGVuZ3RoP2Ytdy5sZW5ndGg6MS8wKSksaSs9dix0PV8rdywoIjwiPT09bD9pK3QrQToiPiI9PT1sP0EraSt0OiJeIj09PWw/QS5zdWJzdHJpbmcoMCxNPj49MSkraSt0K0Euc3Vic3RyaW5nKE0pOmkrKGI/dDpBK3QpKStufX19ZS5mb3JtYXRQcmVmaXg9ZnVuY3Rpb24odCxyKXt2YXIgbj0wO3JldHVybih0PSt0KSYmKHQ8MCYmKHQqPS0xKSxyJiYodD1lLnJvdW5kKHQsQXQodCxyKSkpLG49MStNYXRoLmZsb29yKDFlLTEyK01hdGgubG9nKHQpL01hdGguTE4xMCksbj1NYXRoLm1heCgtMjQsTWF0aC5taW4oMjQsMypNYXRoLmZsb29yKChuLTEpLzMpKSkpLEx0Wzgrbi8zXX07dmFyIEN0PS8oPzooW157XSk/KFs8Pj1eXSkpPyhbK1wtIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLi0/XGQrKT8oW2EteiVdKT8vaSxPdD1lLm1hcCh7YjpmdW5jdGlvbihlKXtyZXR1cm4gZS50b1N0cmluZygyKX0sYzpmdW5jdGlvbihlKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShlKX0sbzpmdW5jdGlvbihlKXtyZXR1cm4gZS50b1N0cmluZyg4KX0seDpmdW5jdGlvbihlKXtyZXR1cm4gZS50b1N0cmluZygxNil9LFg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9LGc6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS50b1ByZWNpc2lvbih0KX0sZTpmdW5jdGlvbihlLHQpe3JldHVybiBlLnRvRXhwb25lbnRpYWwodCl9LGY6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS50b0ZpeGVkKHQpfSxyOmZ1bmN0aW9uKHQscil7cmV0dXJuKHQ9ZS5yb3VuZCh0LEF0KHQscikpKS50b0ZpeGVkKE1hdGgubWF4KDAsTWF0aC5taW4oMjAsQXQodCooMSsxZS0xNSkscikpKSl9fSk7ZnVuY3Rpb24gRHQoZSl7cmV0dXJuIGUrIiJ9dmFyIFB0PWUudGltZT17fSx6dD1EYXRlO2Z1bmN0aW9uIFJ0KCl7dGhpcy5fPW5ldyBEYXRlKGFyZ3VtZW50cy5sZW5ndGg+MT9EYXRlLlVUQy5hcHBseSh0aGlzLGFyZ3VtZW50cyk6YXJndW1lbnRzWzBdKX1SdC5wcm90b3R5cGU9e2dldERhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ0RhdGUoKX0sZ2V0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENEYXkoKX0sZ2V0RnVsbFllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ0Z1bGxZZWFyKCl9LGdldEhvdXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENIb3VycygpfSxnZXRNaWxsaXNlY29uZHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ01pbGxpc2Vjb25kcygpfSxnZXRNaW51dGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENNaW51dGVzKCl9LGdldE1vbnRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENNb250aCgpfSxnZXRTZWNvbmRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENTZWNvbmRzKCl9LGdldFRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFRpbWUoKX0sZ2V0VGltZXpvbmVPZmZzZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMH0sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8udmFsdWVPZigpfSxzZXREYXRlOmZ1bmN0aW9uKCl7RXQuc2V0VVRDRGF0ZS5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0RGF5OmZ1bmN0aW9uKCl7RXQuc2V0VVRDRGF5LmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRGdWxsWWVhcjpmdW5jdGlvbigpe0V0LnNldFVUQ0Z1bGxZZWFyLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRIb3VyczpmdW5jdGlvbigpe0V0LnNldFVUQ0hvdXJzLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRNaWxsaXNlY29uZHM6ZnVuY3Rpb24oKXtFdC5zZXRVVENNaWxsaXNlY29uZHMuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldE1pbnV0ZXM6ZnVuY3Rpb24oKXtFdC5zZXRVVENNaW51dGVzLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRNb250aDpmdW5jdGlvbigpe0V0LnNldFVUQ01vbnRoLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRTZWNvbmRzOmZ1bmN0aW9uKCl7RXQuc2V0VVRDU2Vjb25kcy5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0VGltZTpmdW5jdGlvbigpe0V0LnNldFRpbWUuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9fTt2YXIgRXQ9RGF0ZS5wcm90b3R5cGU7ZnVuY3Rpb24gSXQoZSx0LHIpe2Z1bmN0aW9uIG4odCl7dmFyIHI9ZSh0KSxuPWkociwxKTtyZXR1cm4gdC1yPG4tdD9yOm59ZnVuY3Rpb24gYShyKXtyZXR1cm4gdChyPWUobmV3IHp0KHItMSkpLDEpLHJ9ZnVuY3Rpb24gaShlLHIpe3JldHVybiB0KGU9bmV3IHp0KCtlKSxyKSxlfWZ1bmN0aW9uIG8oZSxuLGkpe3ZhciBvPWEoZSksbD1bXTtpZihpPjEpZm9yKDtvPG47KXIobyklaXx8bC5wdXNoKG5ldyBEYXRlKCtvKSksdChvLDEpO2Vsc2UgZm9yKDtvPG47KWwucHVzaChuZXcgRGF0ZSgrbykpLHQobywxKTtyZXR1cm4gbH1lLmZsb29yPWUsZS5yb3VuZD1uLGUuY2VpbD1hLGUub2Zmc2V0PWksZS5yYW5nZT1vO3ZhciBsPWUudXRjPUZ0KGUpO3JldHVybiBsLmZsb29yPWwsbC5yb3VuZD1GdChuKSxsLmNlaWw9RnQoYSksbC5vZmZzZXQ9RnQoaSksbC5yYW5nZT1mdW5jdGlvbihlLHQscil7dHJ5e3p0PVJ0O3ZhciBuPW5ldyBSdDtyZXR1cm4gbi5fPWUsbyhuLHQscil9ZmluYWxseXt6dD1EYXRlfX0sZX1mdW5jdGlvbiBGdChlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt0cnl7enQ9UnQ7dmFyIG49bmV3IFJ0O3JldHVybiBuLl89dCxlKG4scikuX31maW5hbGx5e3p0PURhdGV9fX1mdW5jdGlvbiBOdCh0KXt2YXIgcj10LmRhdGVUaW1lLG49dC5kYXRlLGE9dC50aW1lLGk9dC5wZXJpb2RzLG89dC5kYXlzLGw9dC5zaG9ydERheXMscz10Lm1vbnRocyxjPXQuc2hvcnRNb250aHM7ZnVuY3Rpb24gdShlKXt2YXIgdD1lLmxlbmd0aDtmdW5jdGlvbiByKHIpe2Zvcih2YXIgbixhLGksbz1bXSxsPS0xLHM9MDsrK2w8dDspMzc9PT1lLmNoYXJDb2RlQXQobCkmJihvLnB1c2goZS5zbGljZShzLGwpKSxudWxsIT0oYT1IdFtuPWUuY2hhckF0KCsrbCldKSYmKG49ZS5jaGFyQXQoKytsKSksKGk9X1tuXSkmJihuPWkocixudWxsPT1hPyJlIj09PW4/IiAiOiIwIjphKSksby5wdXNoKG4pLHM9bCsxKTtyZXR1cm4gby5wdXNoKGUuc2xpY2UocyxsKSksby5qb2luKCIiKX1yZXR1cm4gci5wYXJzZT1mdW5jdGlvbih0KXt2YXIgcj17eToxOTAwLG06MCxkOjEsSDowLE06MCxTOjAsTDowLFo6bnVsbH07aWYoZihyLGUsdCwwKSE9dC5sZW5ndGgpcmV0dXJuIG51bGw7InAiaW4gciYmKHIuSD1yLkglMTIrMTIqci5wKTt2YXIgbj1udWxsIT1yLlomJnp0IT09UnQsYT1uZXcobj9SdDp6dCk7cmV0dXJuImoiaW4gcj9hLnNldEZ1bGxZZWFyKHIueSwwLHIuaik6IlciaW4gcnx8IlUiaW4gcj8oInciaW4gcnx8KHIudz0iVyJpbiByPzE6MCksYS5zZXRGdWxsWWVhcihyLnksMCwxKSxhLnNldEZ1bGxZZWFyKHIueSwwLCJXImluIHI/KHIudys2KSU3Kzcqci5XLShhLmdldERheSgpKzUpJTc6ci53Kzcqci5VLShhLmdldERheSgpKzYpJTcpKTphLnNldEZ1bGxZZWFyKHIueSxyLm0sci5kKSxhLnNldEhvdXJzKHIuSCsoci5aLzEwMHwwKSxyLk0rci5aJTEwMCxyLlMsci5MKSxuP2EuXzphfSxyLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGV9LHJ9ZnVuY3Rpb24gZihlLHQscixuKXtmb3IodmFyIGEsaSxvLGw9MCxzPXQubGVuZ3RoLGM9ci5sZW5ndGg7bDxzOyl7aWYobj49YylyZXR1cm4tMTtpZigzNz09PShhPXQuY2hhckNvZGVBdChsKyspKSl7aWYobz10LmNoYXJBdChsKyspLCEoaT13W28gaW4gSHQ/dC5jaGFyQXQobCsrKTpvXSl8fChuPWkoZSxyLG4pKTwwKXJldHVybi0xfWVsc2UgaWYoYSE9ci5jaGFyQ29kZUF0KG4rKykpcmV0dXJuLTF9cmV0dXJuIG59dS51dGM9ZnVuY3Rpb24oZSl7dmFyIHQ9dShlKTtmdW5jdGlvbiByKGUpe3RyeXt2YXIgcj1uZXcoenQ9UnQpO3JldHVybiByLl89ZSx0KHIpfWZpbmFsbHl7enQ9RGF0ZX19cmV0dXJuIHIucGFyc2U9ZnVuY3Rpb24oZSl7dHJ5e3p0PVJ0O3ZhciByPXQucGFyc2UoZSk7cmV0dXJuIHImJnIuX31maW5hbGx5e3p0PURhdGV9fSxyLnRvU3RyaW5nPXQudG9TdHJpbmcscn0sdS5tdWx0aT11LnV0Yy5tdWx0aT1vcjt2YXIgZD1lLm1hcCgpLHA9VXQobyksaD1xdChvKSxnPVV0KGwpLHY9cXQobCksbT1VdChzKSx5PXF0KHMpLHg9VXQoYyksYj1xdChjKTtpLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7ZC5zZXQoZS50b0xvd2VyQ2FzZSgpLHQpfSkpO3ZhciBfPXthOmZ1bmN0aW9uKGUpe3JldHVybiBsW2UuZ2V0RGF5KCldfSxBOmZ1bmN0aW9uKGUpe3JldHVybiBvW2UuZ2V0RGF5KCldfSxiOmZ1bmN0aW9uKGUpe3JldHVybiBjW2UuZ2V0TW9udGgoKV19LEI6ZnVuY3Rpb24oZSl7cmV0dXJuIHNbZS5nZXRNb250aCgpXX0sYzp1KHIpLGQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gVnQoZS5nZXREYXRlKCksdCwyKX0sZTpmdW5jdGlvbihlLHQpe3JldHVybiBWdChlLmdldERhdGUoKSx0LDIpfSxIOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIFZ0KGUuZ2V0SG91cnMoKSx0LDIpfSxJOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIFZ0KGUuZ2V0SG91cnMoKSUxMnx8MTIsdCwyKX0sajpmdW5jdGlvbihlLHQpe3JldHVybiBWdCgxK1B0LmRheU9mWWVhcihlKSx0LDMpfSxMOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIFZ0KGUuZ2V0TWlsbGlzZWNvbmRzKCksdCwzKX0sbTpmdW5jdGlvbihlLHQpe3JldHVybiBWdChlLmdldE1vbnRoKCkrMSx0LDIpfSxNOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIFZ0KGUuZ2V0TWludXRlcygpLHQsMil9LHA6ZnVuY3Rpb24oZSl7cmV0dXJuIGlbKyhlLmdldEhvdXJzKCk+PTEyKV19LFM6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gVnQoZS5nZXRTZWNvbmRzKCksdCwyKX0sVTpmdW5jdGlvbihlLHQpe3JldHVybiBWdChQdC5zdW5kYXlPZlllYXIoZSksdCwyKX0sdzpmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXREYXkoKX0sVzpmdW5jdGlvbihlLHQpe3JldHVybiBWdChQdC5tb25kYXlPZlllYXIoZSksdCwyKX0seDp1KG4pLFg6dShhKSx5OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIFZ0KGUuZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX0sWTpmdW5jdGlvbihlLHQpe3JldHVybiBWdChlLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9LFo6YXIsIiUiOmZ1bmN0aW9uKCl7cmV0dXJuIiUifX0sdz17YTpmdW5jdGlvbihlLHQscil7Zy5sYXN0SW5kZXg9MDt2YXIgbj1nLmV4ZWModC5zbGljZShyKSk7cmV0dXJuIG4/KGUudz12LmdldChuWzBdLnRvTG93ZXJDYXNlKCkpLHIrblswXS5sZW5ndGgpOi0xfSxBOmZ1bmN0aW9uKGUsdCxyKXtwLmxhc3RJbmRleD0wO3ZhciBuPXAuZXhlYyh0LnNsaWNlKHIpKTtyZXR1cm4gbj8oZS53PWguZ2V0KG5bMF0udG9Mb3dlckNhc2UoKSkscituWzBdLmxlbmd0aCk6LTF9LGI6ZnVuY3Rpb24oZSx0LHIpe3gubGFzdEluZGV4PTA7dmFyIG49eC5leGVjKHQuc2xpY2UocikpO3JldHVybiBuPyhlLm09Yi5nZXQoblswXS50b0xvd2VyQ2FzZSgpKSxyK25bMF0ubGVuZ3RoKTotMX0sQjpmdW5jdGlvbihlLHQscil7bS5sYXN0SW5kZXg9MDt2YXIgbj1tLmV4ZWModC5zbGljZShyKSk7cmV0dXJuIG4/KGUubT15LmdldChuWzBdLnRvTG93ZXJDYXNlKCkpLHIrblswXS5sZW5ndGgpOi0xfSxjOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZihlLF8uYy50b1N0cmluZygpLHQscil9LGQ6JHQsZTokdCxIOmVyLEk6ZXIsajpLdCxMOm5yLG06SnQsTTp0cixwOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1kLmdldCh0LnNsaWNlKHIscis9MikudG9Mb3dlckNhc2UoKSk7cmV0dXJuIG51bGw9PW4/LTE6KGUucD1uLHIpfSxTOnJyLFU6WnQsdzpHdCxXOll0LHg6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBmKGUsXy54LnRvU3RyaW5nKCksdCxyKX0sWDpmdW5jdGlvbihlLHQscil7cmV0dXJuIGYoZSxfLlgudG9TdHJpbmcoKSx0LHIpfSx5Old0LFk6WHQsWjpRdCwiJSI6aXJ9O3JldHVybiB1fVB0LnllYXI9SXQoKGZ1bmN0aW9uKGUpe3JldHVybihlPVB0LmRheShlKSkuc2V0TW9udGgoMCwxKSxlfSksKGZ1bmN0aW9uKGUsdCl7ZS5zZXRGdWxsWWVhcihlLmdldEZ1bGxZZWFyKCkrdCl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0RnVsbFllYXIoKX0pKSxQdC55ZWFycz1QdC55ZWFyLnJhbmdlLFB0LnllYXJzLnV0Yz1QdC55ZWFyLnV0Yy5yYW5nZSxQdC5kYXk9SXQoKGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyB6dCgyZTMsMCk7cmV0dXJuIHQuc2V0RnVsbFllYXIoZS5nZXRGdWxsWWVhcigpLGUuZ2V0TW9udGgoKSxlLmdldERhdGUoKSksdH0pLChmdW5jdGlvbihlLHQpe2Uuc2V0RGF0ZShlLmdldERhdGUoKSt0KX0pLChmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXREYXRlKCktMX0pKSxQdC5kYXlzPVB0LmRheS5yYW5nZSxQdC5kYXlzLnV0Yz1QdC5kYXkudXRjLnJhbmdlLFB0LmRheU9mWWVhcj1mdW5jdGlvbihlKXt2YXIgdD1QdC55ZWFyKGUpO3JldHVybiBNYXRoLmZsb29yKChlLXQtNmU0KihlLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSkvODY0ZTUpfSxbInN1bmRheSIsIm1vbmRheSIsInR1ZXNkYXkiLCJ3ZWRuZXNkYXkiLCJ0aHVyc2RheSIsImZyaWRheSIsInNhdHVyZGF5Il0uZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXt0PTctdDt2YXIgcj1QdFtlXT1JdCgoZnVuY3Rpb24oZSl7cmV0dXJuKGU9UHQuZGF5KGUpKS5zZXREYXRlKGUuZ2V0RGF0ZSgpLShlLmdldERheSgpK3QpJTcpLGV9KSwoZnVuY3Rpb24oZSx0KXtlLnNldERhdGUoZS5nZXREYXRlKCkrNypNYXRoLmZsb29yKHQpKX0pLChmdW5jdGlvbihlKXt2YXIgcj1QdC55ZWFyKGUpLmdldERheSgpO3JldHVybiBNYXRoLmZsb29yKChQdC5kYXlPZlllYXIoZSkrKHIrdCklNykvNyktKHIhPT10KX0pKTtQdFtlKyJzIl09ci5yYW5nZSxQdFtlKyJzIl0udXRjPXIudXRjLnJhbmdlLFB0W2UrIk9mWWVhciJdPWZ1bmN0aW9uKGUpe3ZhciByPVB0LnllYXIoZSkuZ2V0RGF5KCk7cmV0dXJuIE1hdGguZmxvb3IoKFB0LmRheU9mWWVhcihlKSsocit0KSU3KS83KX19KSksUHQud2Vlaz1QdC5zdW5kYXksUHQud2Vla3M9UHQuc3VuZGF5LnJhbmdlLFB0LndlZWtzLnV0Yz1QdC5zdW5kYXkudXRjLnJhbmdlLFB0LndlZWtPZlllYXI9UHQuc3VuZGF5T2ZZZWFyO3ZhciBIdD17Ii0iOiIiLF86IiAiLDA6IjAifSxqdD0vXlxzKlxkKy8sQnQ9L14lLztmdW5jdGlvbiBWdChlLHQscil7dmFyIG49ZTwwPyItIjoiIixhPShuPy1lOmUpKyIiLGk9YS5sZW5ndGg7cmV0dXJuIG4rKGk8cj9uZXcgQXJyYXkoci1pKzEpLmpvaW4odCkrYTphKX1mdW5jdGlvbiBVdCh0KXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIrdC5tYXAoZS5yZXF1b3RlKS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gcXQoZSl7Zm9yKHZhciB0PW5ldyBfLHI9LTEsbj1lLmxlbmd0aDsrK3I8bjspdC5zZXQoZVtyXS50b0xvd2VyQ2FzZSgpLHIpO3JldHVybiB0fWZ1bmN0aW9uIEd0KGUsdCxyKXtqdC5sYXN0SW5kZXg9MDt2YXIgbj1qdC5leGVjKHQuc2xpY2UocixyKzEpKTtyZXR1cm4gbj8oZS53PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFp0KGUsdCxyKXtqdC5sYXN0SW5kZXg9MDt2YXIgbj1qdC5leGVjKHQuc2xpY2UocikpO3JldHVybiBuPyhlLlU9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWXQoZSx0LHIpe2p0Lmxhc3RJbmRleD0wO3ZhciBuPWp0LmV4ZWModC5zbGljZShyKSk7cmV0dXJuIG4/KGUuVz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBYdChlLHQscil7anQubGFzdEluZGV4PTA7dmFyIG49anQuZXhlYyh0LnNsaWNlKHIscis0KSk7cmV0dXJuIG4/KGUueT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBXdChlLHQscil7anQubGFzdEluZGV4PTA7dmFyIG4sYT1qdC5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gYT8oZS55PShuPSthWzBdKSsobj42OD8xOTAwOjJlMykscithWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUXQoZSx0LHIpe3JldHVybi9eWystXVxkezR9JC8udGVzdCh0PXQuc2xpY2UocixyKzUpKT8oZS5aPS10LHIrNSk6LTF9ZnVuY3Rpb24gSnQoZSx0LHIpe2p0Lmxhc3RJbmRleD0wO3ZhciBuPWp0LmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLm09blswXS0xLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uICR0KGUsdCxyKXtqdC5sYXN0SW5kZXg9MDt2YXIgbj1qdC5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5kPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEt0KGUsdCxyKXtqdC5sYXN0SW5kZXg9MDt2YXIgbj1qdC5leGVjKHQuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8oZS5qPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGVyKGUsdCxyKXtqdC5sYXN0SW5kZXg9MDt2YXIgbj1qdC5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5IPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHRyKGUsdCxyKXtqdC5sYXN0SW5kZXg9MDt2YXIgbj1qdC5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5NPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHJyKGUsdCxyKXtqdC5sYXN0SW5kZXg9MDt2YXIgbj1qdC5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5TPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG5yKGUsdCxyKXtqdC5sYXN0SW5kZXg9MDt2YXIgbj1qdC5leGVjKHQuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8oZS5MPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGFyKGUpe3ZhciB0PWUuZ2V0VGltZXpvbmVPZmZzZXQoKSxyPXQ+MD8iLSI6IisiLG49eSh0KS82MHwwLGE9eSh0KSU2MDtyZXR1cm4gcitWdChuLCIwIiwyKStWdChhLCIwIiwyKX1mdW5jdGlvbiBpcihlLHQscil7QnQubGFzdEluZGV4PTA7dmFyIG49QnQuZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/cituWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBvcihlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscj0tMTsrK3I8dDspZVtyXVswXT10aGlzKGVbcl1bMF0pO3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIHI9MCxuPWVbcl07IW5bMV0odCk7KW49ZVsrK3JdO3JldHVybiBuWzBdKHQpfX1lLmxvY2FsZT1mdW5jdGlvbihlKXtyZXR1cm57bnVtYmVyRm9ybWF0OlN0KGUpLHRpbWVGb3JtYXQ6TnQoZSl9fTt2YXIgbHI9ZS5sb2NhbGUoe2RlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdLGRhdGVUaW1lOiIlYSAlYiAlZSAlWCAlWSIsZGF0ZToiJW0vJWQvJVkiLHRpbWU6IiVIOiVNOiVTIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pO2Z1bmN0aW9uIHNyKCl7fWUuZm9ybWF0PWxyLm51bWJlckZvcm1hdCxlLmdlbz17fSxzci5wcm90b3R5cGU9e3M6MCx0OjAsYWRkOmZ1bmN0aW9uKGUpe3VyKGUsdGhpcy50LGNyKSx1cihjci5zLHRoaXMucyx0aGlzKSx0aGlzLnM/dGhpcy50Kz1jci50OnRoaXMucz1jci50fSxyZXNldDpmdW5jdGlvbigpe3RoaXMucz10aGlzLnQ9MH0sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN9fTt2YXIgY3I9bmV3IHNyO2Z1bmN0aW9uIHVyKGUsdCxyKXt2YXIgbj1yLnM9ZSt0LGE9bi1lLGk9bi1hO3IudD1lLWkrKHQtYSl9ZnVuY3Rpb24gZnIoZSx0KXtlJiZwci5oYXNPd25Qcm9wZXJ0eShlLnR5cGUpJiZwcltlLnR5cGVdKGUsdCl9ZS5nZW8uc3RyZWFtPWZ1bmN0aW9uKGUsdCl7ZSYmZHIuaGFzT3duUHJvcGVydHkoZS50eXBlKT9kcltlLnR5cGVdKGUsdCk6ZnIoZSx0KX07dmFyIGRyPXtGZWF0dXJlOmZ1bmN0aW9uKGUsdCl7ZnIoZS5nZW9tZXRyeSx0KX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5mZWF0dXJlcyxuPS0xLGE9ci5sZW5ndGg7KytuPGE7KWZyKHJbbl0uZ2VvbWV0cnksdCl9fSxwcj17U3BoZXJlOmZ1bmN0aW9uKGUsdCl7dC5zcGhlcmUoKX0sUG9pbnQ6ZnVuY3Rpb24oZSx0KXtlPWUuY29vcmRpbmF0ZXMsdC5wb2ludChlWzBdLGVbMV0sZVsyXSl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5jb29yZGluYXRlcyxuPS0xLGE9ci5sZW5ndGg7KytuPGE7KWU9cltuXSx0LnBvaW50KGVbMF0sZVsxXSxlWzJdKX0sTGluZVN0cmluZzpmdW5jdGlvbihlLHQpe2hyKGUuY29vcmRpbmF0ZXMsdCwwKX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuY29vcmRpbmF0ZXMsbj0tMSxhPXIubGVuZ3RoOysrbjxhOylocihyW25dLHQsMCl9LFBvbHlnb246ZnVuY3Rpb24oZSx0KXtncihlLmNvb3JkaW5hdGVzLHQpfSxNdWx0aVBvbHlnb246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5jb29yZGluYXRlcyxuPS0xLGE9ci5sZW5ndGg7KytuPGE7KWdyKHJbbl0sdCl9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmdlb21ldHJpZXMsbj0tMSxhPXIubGVuZ3RoOysrbjxhOylmcihyW25dLHQpfX07ZnVuY3Rpb24gaHIoZSx0LHIpe3ZhciBuLGE9LTEsaT1lLmxlbmd0aC1yO2Zvcih0LmxpbmVTdGFydCgpOysrYTxpOyluPWVbYV0sdC5wb2ludChuWzBdLG5bMV0sblsyXSk7dC5saW5lRW5kKCl9ZnVuY3Rpb24gZ3IoZSx0KXt2YXIgcj0tMSxuPWUubGVuZ3RoO2Zvcih0LnBvbHlnb25TdGFydCgpOysrcjxuOylocihlW3JdLHQsMSk7dC5wb2x5Z29uRW5kKCl9ZS5nZW8uYXJlYT1mdW5jdGlvbih0KXtyZXR1cm4gdnI9MCxlLmdlby5zdHJlYW0odCxDciksdnJ9O3ZhciB2cixtcix5cix4cixicixfcix3cixUcixrcixNcixBcixMcixTcj1uZXcgc3IsQ3I9e3NwaGVyZTpmdW5jdGlvbigpe3ZyKz00KkFlfSxwb2ludDpSLGxpbmVTdGFydDpSLGxpbmVFbmQ6Uixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtTci5yZXNldCgpLENyLmxpbmVTdGFydD1Pcn0scG9seWdvbkVuZDpmdW5jdGlvbigpe3ZhciBlPTIqU3I7dnIrPWU8MD80KkFlK2U6ZSxDci5saW5lU3RhcnQ9Q3IubGluZUVuZD1Dci5wb2ludD1SfX07ZnVuY3Rpb24gT3IoKXt2YXIgZSx0LHIsbixhO2Z1bmN0aW9uIGkoZSx0KXt0PXQqT2UvMitBZS80O3ZhciBpPShlKj1PZSktcixvPWk+PTA/MTotMSxsPW8qaSxzPU1hdGguY29zKHQpLGM9TWF0aC5zaW4odCksdT1hKmMsZj1uKnMrdSpNYXRoLmNvcyhsKSxkPXUqbypNYXRoLnNpbihsKTtTci5hZGQoTWF0aC5hdGFuMihkLGYpKSxyPWUsbj1zLGE9Y31Dci5wb2ludD1mdW5jdGlvbihvLGwpe0NyLnBvaW50PWkscj0oZT1vKSpPZSxuPU1hdGguY29zKGw9KHQ9bCkqT2UvMitBZS80KSxhPU1hdGguc2luKGwpfSxDci5saW5lRW5kPWZ1bmN0aW9uKCl7aShlLHQpfX1mdW5jdGlvbiBEcihlKXt2YXIgdD1lWzBdLHI9ZVsxXSxuPU1hdGguY29zKHIpO3JldHVybltuKk1hdGguY29zKHQpLG4qTWF0aC5zaW4odCksTWF0aC5zaW4ocildfWZ1bmN0aW9uIFByKGUsdCl7cmV0dXJuIGVbMF0qdFswXStlWzFdKnRbMV0rZVsyXSp0WzJdfWZ1bmN0aW9uIHpyKGUsdCl7cmV0dXJuW2VbMV0qdFsyXS1lWzJdKnRbMV0sZVsyXSp0WzBdLWVbMF0qdFsyXSxlWzBdKnRbMV0tZVsxXSp0WzBdXX1mdW5jdGlvbiBScihlLHQpe2VbMF0rPXRbMF0sZVsxXSs9dFsxXSxlWzJdKz10WzJdfWZ1bmN0aW9uIEVyKGUsdCl7cmV0dXJuW2VbMF0qdCxlWzFdKnQsZVsyXSp0XX1mdW5jdGlvbiBJcihlKXt2YXIgdD1NYXRoLnNxcnQoZVswXSplWzBdK2VbMV0qZVsxXStlWzJdKmVbMl0pO2VbMF0vPXQsZVsxXS89dCxlWzJdLz10fWZ1bmN0aW9uIEZyKGUpe3JldHVybltNYXRoLmF0YW4yKGVbMV0sZVswXSksRWUoZVsyXSldfWZ1bmN0aW9uIE5yKGUsdCl7cmV0dXJuIHkoZVswXS10WzBdKTxrZSYmeShlWzFdLXRbMV0pPGtlfWUuZ2VvLmJvdW5kcz1mdW5jdGlvbigpe3ZhciB0LHIsbixhLGksbyxsLHMsYyx1LGYsZD17cG9pbnQ6cCxsaW5lU3RhcnQ6ZyxsaW5lRW5kOnYscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7ZC5wb2ludD1tLGQubGluZVN0YXJ0PXgsZC5saW5lRW5kPWIsYz0wLENyLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7Q3IucG9seWdvbkVuZCgpLGQucG9pbnQ9cCxkLmxpbmVTdGFydD1nLGQubGluZUVuZD12LFNyPDA/KHQ9LShuPTE4MCkscj0tKGE9OTApKTpjPmtlP2E9OTA6Yzwta2UmJihyPS05MCksZlswXT10LGZbMV09bn19O2Z1bmN0aW9uIHAoZSxpKXt1LnB1c2goZj1bdD1lLG49ZV0pLGk8ciYmKHI9aSksaT5hJiYoYT1pKX1mdW5jdGlvbiBoKGUsbyl7dmFyIGw9RHIoW2UqT2UsbypPZV0pO2lmKHMpe3ZhciBjPXpyKHMsbCksdT16cihbY1sxXSwtY1swXSwwXSxjKTtJcih1KSx1PUZyKHUpO3ZhciBmPWUtaSxkPWY+MD8xOi0xLGg9dVswXSpEZSpkLGc9eShmKT4xODA7aWYoZ14oZCppPGgmJmg8ZCplKSkodj11WzFdKkRlKT5hJiYoYT12KTtlbHNlIGlmKGdeKGQqaTwoaD0oaCszNjApJTM2MC0xODApJiZoPGQqZSkpe3ZhciB2Oyh2PS11WzFdKkRlKTxyJiYocj12KX1lbHNlIG88ciYmKHI9byksbz5hJiYoYT1vKTtnP2U8aT9fKHQsZSk+Xyh0LG4pJiYobj1lKTpfKGUsbik+Xyh0LG4pJiYodD1lKTpuPj10PyhlPHQmJih0PWUpLGU+biYmKG49ZSkpOmU+aT9fKHQsZSk+Xyh0LG4pJiYobj1lKTpfKGUsbik+Xyh0LG4pJiYodD1lKX1lbHNlIHAoZSxvKTtzPWwsaT1lfWZ1bmN0aW9uIGcoKXtkLnBvaW50PWh9ZnVuY3Rpb24gdigpe2ZbMF09dCxmWzFdPW4sZC5wb2ludD1wLHM9bnVsbH1mdW5jdGlvbiBtKGUsdCl7aWYocyl7dmFyIHI9ZS1pO2MrPXkocik+MTgwP3IrKHI+MD8zNjA6LTM2MCk6cn1lbHNlIG89ZSxsPXQ7Q3IucG9pbnQoZSx0KSxoKGUsdCl9ZnVuY3Rpb24geCgpe0NyLmxpbmVTdGFydCgpfWZ1bmN0aW9uIGIoKXttKG8sbCksQ3IubGluZUVuZCgpLHkoYyk+a2UmJih0PS0obj0xODApKSxmWzBdPXQsZlsxXT1uLHM9bnVsbH1mdW5jdGlvbiBfKGUsdCl7cmV0dXJuKHQtPWUpPDA/dCszNjA6dH1mdW5jdGlvbiB3KGUsdCl7cmV0dXJuIGVbMF0tdFswXX1mdW5jdGlvbiBUKGUsdCl7cmV0dXJuIHRbMF08PXRbMV0/dFswXTw9ZSYmZTw9dFsxXTplPHRbMF18fHRbMV08ZX1yZXR1cm4gZnVuY3Rpb24oaSl7aWYoYT1uPS0odD1yPTEvMCksdT1bXSxlLmdlby5zdHJlYW0oaSxkKSxjPXUubGVuZ3RoKXt1LnNvcnQodyk7Zm9yKHZhciBvPTEsbD1bZz11WzBdXTtvPGM7KytvKVQoKHA9dVtvXSlbMF0sZyl8fFQocFsxXSxnKT8oXyhnWzBdLHBbMV0pPl8oZ1swXSxnWzFdKSYmKGdbMV09cFsxXSksXyhwWzBdLGdbMV0pPl8oZ1swXSxnWzFdKSYmKGdbMF09cFswXSkpOmwucHVzaChnPXApO2Zvcih2YXIgcyxjLHAsaD0tMS8wLGc9KG89MCxsW2M9bC5sZW5ndGgtMV0pO288PWM7Zz1wLCsrbylwPWxbb10sKHM9XyhnWzFdLHBbMF0pKT5oJiYoaD1zLHQ9cFswXSxuPWdbMV0pfXJldHVybiB1PWY9bnVsbCx0PT09MS8wfHxyPT09MS8wP1tbTmFOLE5hTl0sW05hTixOYU5dXTpbW3Qscl0sW24sYV1dfX0oKSxlLmdlby5jZW50cm9pZD1mdW5jdGlvbih0KXttcj15cj14cj1icj1fcj13cj1Ucj1rcj1Ncj1Bcj1Mcj0wLGUuZ2VvLnN0cmVhbSh0LEhyKTt2YXIgcj1NcixuPUFyLGE9THIsaT1yKnIrbipuK2EqYTtyZXR1cm4gaTxNZSYmKHI9d3Isbj1UcixhPWtyLHlyPGtlJiYocj14cixuPWJyLGE9X3IpLChpPXIqcituKm4rYSphKTxNZSk/W05hTixOYU5dOltNYXRoLmF0YW4yKG4scikqRGUsRWUoYS9NYXRoLnNxcnQoaSkpKkRlXX07dmFyIEhyPXtzcGhlcmU6Uixwb2ludDpqcixsaW5lU3RhcnQ6VnIsbGluZUVuZDpVcixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtIci5saW5lU3RhcnQ9cXJ9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtIci5saW5lU3RhcnQ9VnJ9fTtmdW5jdGlvbiBqcihlLHQpe2UqPU9lO3ZhciByPU1hdGguY29zKHQqPU9lKTtCcihyKk1hdGguY29zKGUpLHIqTWF0aC5zaW4oZSksTWF0aC5zaW4odCkpfWZ1bmN0aW9uIEJyKGUsdCxyKXsrK21yLHhyKz0oZS14cikvbXIsYnIrPSh0LWJyKS9tcixfcis9KHItX3IpL21yfWZ1bmN0aW9uIFZyKCl7dmFyIGUsdCxyO2Z1bmN0aW9uIG4obixhKXtuKj1PZTt2YXIgaT1NYXRoLmNvcyhhKj1PZSksbz1pKk1hdGguY29zKG4pLGw9aSpNYXRoLnNpbihuKSxzPU1hdGguc2luKGEpLGM9TWF0aC5hdGFuMihNYXRoLnNxcnQoKGM9dCpzLXIqbCkqYysoYz1yKm8tZSpzKSpjKyhjPWUqbC10Km8pKmMpLGUqbyt0KmwrcipzKTt5cis9Yyx3cis9YyooZSsoZT1vKSksVHIrPWMqKHQrKHQ9bCkpLGtyKz1jKihyKyhyPXMpKSxCcihlLHQscil9SHIucG9pbnQ9ZnVuY3Rpb24oYSxpKXthKj1PZTt2YXIgbz1NYXRoLmNvcyhpKj1PZSk7ZT1vKk1hdGguY29zKGEpLHQ9bypNYXRoLnNpbihhKSxyPU1hdGguc2luKGkpLEhyLnBvaW50PW4sQnIoZSx0LHIpfX1mdW5jdGlvbiBVcigpe0hyLnBvaW50PWpyfWZ1bmN0aW9uIHFyKCl7dmFyIGUsdCxyLG4sYTtmdW5jdGlvbiBpKGUsdCl7ZSo9T2U7dmFyIGk9TWF0aC5jb3ModCo9T2UpLG89aSpNYXRoLmNvcyhlKSxsPWkqTWF0aC5zaW4oZSkscz1NYXRoLnNpbih0KSxjPW4qcy1hKmwsdT1hKm8tcipzLGY9cipsLW4qbyxkPU1hdGguc3FydChjKmMrdSp1K2YqZikscD1yKm8rbipsK2EqcyxoPWQmJi1SZShwKS9kLGc9TWF0aC5hdGFuMihkLHApO01yKz1oKmMsQXIrPWgqdSxMcis9aCpmLHlyKz1nLHdyKz1nKihyKyhyPW8pKSxUcis9Zyoobisobj1sKSksa3IrPWcqKGErKGE9cykpLEJyKHIsbixhKX1Ici5wb2ludD1mdW5jdGlvbihvLGwpe2U9byx0PWwsSHIucG9pbnQ9aSxvKj1PZTt2YXIgcz1NYXRoLmNvcyhsKj1PZSk7cj1zKk1hdGguY29zKG8pLG49cypNYXRoLnNpbihvKSxhPU1hdGguc2luKGwpLEJyKHIsbixhKX0sSHIubGluZUVuZD1mdW5jdGlvbigpe2koZSx0KSxIci5saW5lRW5kPVVyLEhyLnBvaW50PWpyfX1mdW5jdGlvbiBHcihlLHQpe2Z1bmN0aW9uIHIocixuKXtyZXR1cm4gcj1lKHIsbiksdChyWzBdLHJbMV0pfXJldHVybiBlLmludmVydCYmdC5pbnZlcnQmJihyLmludmVydD1mdW5jdGlvbihyLG4pe3JldHVybihyPXQuaW52ZXJ0KHIsbikpJiZlLmludmVydChyWzBdLHJbMV0pfSkscn1mdW5jdGlvbiBacigpe3JldHVybiEwfWZ1bmN0aW9uIFlyKGUsdCxyLG4sYSl7dmFyIGk9W10sbz1bXTtpZihlLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKCEoKHQ9ZS5sZW5ndGgtMSk8PTApKXt2YXIgdCxyPWVbMF0sbj1lW3RdO2lmKE5yKHIsbikpe2EubGluZVN0YXJ0KCk7Zm9yKHZhciBsPTA7bDx0OysrbClhLnBvaW50KChyPWVbbF0pWzBdLHJbMV0pO2EubGluZUVuZCgpfWVsc2V7dmFyIHM9bmV3IFdyKHIsZSxudWxsLCEwKSxjPW5ldyBXcihyLG51bGwscywhMSk7cy5vPWMsaS5wdXNoKHMpLG8ucHVzaChjKSxzPW5ldyBXcihuLGUsbnVsbCwhMSksYz1uZXcgV3IobixudWxsLHMsITApLHMubz1jLGkucHVzaChzKSxvLnB1c2goYyl9fX0pKSxvLnNvcnQodCksWHIoaSksWHIobyksaS5sZW5ndGgpe2Zvcih2YXIgbD0wLHM9cixjPW8ubGVuZ3RoO2w8YzsrK2wpb1tsXS5lPXM9IXM7Zm9yKHZhciB1LGYsZD1pWzBdOzspe2Zvcih2YXIgcD1kLGg9ITA7cC52OylpZigocD1wLm4pPT09ZClyZXR1cm47dT1wLnosYS5saW5lU3RhcnQoKTtkb3tpZihwLnY9cC5vLnY9ITAscC5lKXtpZihoKWZvcihsPTAsYz11Lmxlbmd0aDtsPGM7KytsKWEucG9pbnQoKGY9dVtsXSlbMF0sZlsxXSk7ZWxzZSBuKHAueCxwLm4ueCwxLGEpO3A9cC5ufWVsc2V7aWYoaClmb3IobD0odT1wLnAueikubGVuZ3RoLTE7bD49MDstLWwpYS5wb2ludCgoZj11W2xdKVswXSxmWzFdKTtlbHNlIG4ocC54LHAucC54LC0xLGEpO3A9cC5wfXU9KHA9cC5vKS56LGg9IWh9d2hpbGUoIXAudik7YS5saW5lRW5kKCl9fX1mdW5jdGlvbiBYcihlKXtpZih0PWUubGVuZ3RoKXtmb3IodmFyIHQscixuPTAsYT1lWzBdOysrbjx0OylhLm49cj1lW25dLHIucD1hLGE9cjthLm49cj1lWzBdLHIucD1hfX1mdW5jdGlvbiBXcihlLHQscixuKXt0aGlzLng9ZSx0aGlzLno9dCx0aGlzLm89cix0aGlzLmU9bix0aGlzLnY9ITEsdGhpcy5uPXRoaXMucD1udWxsfWZ1bmN0aW9uIFFyKHQscixuLGEpe3JldHVybiBmdW5jdGlvbihpLG8pe3ZhciBsLHM9cihvKSxjPWkuaW52ZXJ0KGFbMF0sYVsxXSksdT17cG9pbnQ6ZixsaW5lU3RhcnQ6cCxsaW5lRW5kOmgscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dS5wb2ludD1iLHUubGluZVN0YXJ0PV8sdS5saW5lRW5kPXcsbD1bXSxnPVtdfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dS5wb2ludD1mLHUubGluZVN0YXJ0PXAsdS5saW5lRW5kPWgsbD1lLm1lcmdlKGwpO3ZhciB0PWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZVswXSxuPWVbMV0sYT1bTWF0aC5zaW4ociksLU1hdGguY29zKHIpLDBdLGk9MCxvPTA7U3IucmVzZXQoKTtmb3IodmFyIGw9MCxzPXQubGVuZ3RoO2w8czsrK2wpe3ZhciBjPXRbbF0sdT1jLmxlbmd0aDtpZih1KWZvcih2YXIgZj1jWzBdLGQ9ZlswXSxwPWZbMV0vMitBZS80LGg9TWF0aC5zaW4ocCksZz1NYXRoLmNvcyhwKSx2PTE7Oyl7dj09PXUmJih2PTApO3ZhciBtPShlPWNbdl0pWzBdLHk9ZVsxXS8yK0FlLzQseD1NYXRoLnNpbih5KSxiPU1hdGguY29zKHkpLF89bS1kLHc9Xz49MD8xOi0xLFQ9dypfLGs9VD5BZSxNPWgqeDtpZihTci5hZGQoTWF0aC5hdGFuMihNKncqTWF0aC5zaW4oVCksZypiK00qTWF0aC5jb3MoVCkpKSxpKz1rP18rdypMZTpfLGteZD49cl5tPj1yKXt2YXIgQT16cihEcihmKSxEcihlKSk7SXIoQSk7dmFyIEw9enIoYSxBKTtJcihMKTt2YXIgUz0oa15fPj0wPy0xOjEpKkVlKExbMl0pOyhuPlN8fG49PT1TJiYoQVswXXx8QVsxXSkpJiYobys9a15fPj0wPzE6LTEpfWlmKCF2KyspYnJlYWs7ZD1tLGg9eCxnPWIsZj1lfX1yZXR1cm4oaTwta2V8fGk8a2UmJlNyPC1rZSleMSZvfShjLGcpO2wubGVuZ3RoPyh4fHwoby5wb2x5Z29uU3RhcnQoKSx4PSEwKSxZcihsLEtyLHQsbixvKSk6dCYmKHh8fChvLnBvbHlnb25TdGFydCgpLHg9ITApLG8ubGluZVN0YXJ0KCksbihudWxsLG51bGwsMSxvKSxvLmxpbmVFbmQoKSkseCYmKG8ucG9seWdvbkVuZCgpLHg9ITEpLGw9Zz1udWxsfSxzcGhlcmU6ZnVuY3Rpb24oKXtvLnBvbHlnb25TdGFydCgpLG8ubGluZVN0YXJ0KCksbihudWxsLG51bGwsMSxvKSxvLmxpbmVFbmQoKSxvLnBvbHlnb25FbmQoKX19O2Z1bmN0aW9uIGYoZSxyKXt2YXIgbj1pKGUscik7dChlPW5bMF0scj1uWzFdKSYmby5wb2ludChlLHIpfWZ1bmN0aW9uIGQoZSx0KXt2YXIgcj1pKGUsdCk7cy5wb2ludChyWzBdLHJbMV0pfWZ1bmN0aW9uIHAoKXt1LnBvaW50PWQscy5saW5lU3RhcnQoKX1mdW5jdGlvbiBoKCl7dS5wb2ludD1mLHMubGluZUVuZCgpfXZhciBnLHYsbT0kcigpLHk9cihtKSx4PSExO2Z1bmN0aW9uIGIoZSx0KXt2LnB1c2goW2UsdF0pO3ZhciByPWkoZSx0KTt5LnBvaW50KHJbMF0sclsxXSl9ZnVuY3Rpb24gXygpe3kubGluZVN0YXJ0KCksdj1bXX1mdW5jdGlvbiB3KCl7Yih2WzBdWzBdLHZbMF1bMV0pLHkubGluZUVuZCgpO3ZhciBlLHQ9eS5jbGVhbigpLHI9bS5idWZmZXIoKSxuPXIubGVuZ3RoO2lmKHYucG9wKCksZy5wdXNoKHYpLHY9bnVsbCxuKWlmKDEmdCl7dmFyIGEsaT0tMTtpZigobj0oZT1yWzBdKS5sZW5ndGgtMSk+MCl7Zm9yKHh8fChvLnBvbHlnb25TdGFydCgpLHg9ITApLG8ubGluZVN0YXJ0KCk7KytpPG47KW8ucG9pbnQoKGE9ZVtpXSlbMF0sYVsxXSk7by5saW5lRW5kKCl9fWVsc2Ugbj4xJiYyJnQmJnIucHVzaChyLnBvcCgpLmNvbmNhdChyLnNoaWZ0KCkpKSxsLnB1c2goci5maWx0ZXIoSnIpKX1yZXR1cm4gdX19ZnVuY3Rpb24gSnIoZSl7cmV0dXJuIGUubGVuZ3RoPjF9ZnVuY3Rpb24gJHIoKXt2YXIgZSx0PVtdO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0LnB1c2goZT1bXSl9LHBvaW50OmZ1bmN0aW9uKHQscil7ZS5wdXNoKFt0LHJdKX0sbGluZUVuZDpSLGJ1ZmZlcjpmdW5jdGlvbigpe3ZhciByPXQ7cmV0dXJuIHQ9W10sZT1udWxsLHJ9LHJlam9pbjpmdW5jdGlvbigpe3QubGVuZ3RoPjEmJnQucHVzaCh0LnBvcCgpLmNvbmNhdCh0LnNoaWZ0KCkpKX19fWZ1bmN0aW9uIEtyKGUsdCl7cmV0dXJuKChlPWUueClbMF08MD9lWzFdLUNlLWtlOkNlLWVbMV0pLSgodD10LngpWzBdPDA/dFsxXS1DZS1rZTpDZS10WzFdKX12YXIgZW49UXIoWnIsKGZ1bmN0aW9uKGUpe3ZhciB0LHI9TmFOLG49TmFOLGE9TmFOO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtlLmxpbmVTdGFydCgpLHQ9MX0scG9pbnQ6ZnVuY3Rpb24oaSxvKXt2YXIgbD1pPjA/QWU6LUFlLHM9eShpLXIpO3kocy1BZSk8a2U/KGUucG9pbnQocixuPShuK28pLzI+MD9DZTotQ2UpLGUucG9pbnQoYSxuKSxlLmxpbmVFbmQoKSxlLmxpbmVTdGFydCgpLGUucG9pbnQobCxuKSxlLnBvaW50KGksbiksdD0wKTphIT09bCYmcz49QWUmJih5KHItYSk8a2UmJihyLT1hKmtlKSx5KGktbCk8a2UmJihpLT1sKmtlKSxuPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhLGksbz1NYXRoLnNpbihlLXIpO3JldHVybiB5KG8pPmtlP01hdGguYXRhbigoTWF0aC5zaW4odCkqKGk9TWF0aC5jb3MobikpKk1hdGguc2luKHIpLU1hdGguc2luKG4pKihhPU1hdGguY29zKHQpKSpNYXRoLnNpbihlKSkvKGEqaSpvKSk6KHQrbikvMn0ocixuLGksbyksZS5wb2ludChhLG4pLGUubGluZUVuZCgpLGUubGluZVN0YXJ0KCksZS5wb2ludChsLG4pLHQ9MCksZS5wb2ludChyPWksbj1vKSxhPWx9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtlLmxpbmVFbmQoKSxyPW49TmFOfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiAyLXR9fX0pLChmdW5jdGlvbihlLHQscixuKXt2YXIgYTtpZihudWxsPT1lKWE9cipDZSxuLnBvaW50KC1BZSxhKSxuLnBvaW50KDAsYSksbi5wb2ludChBZSxhKSxuLnBvaW50KEFlLDApLG4ucG9pbnQoQWUsLWEpLG4ucG9pbnQoMCwtYSksbi5wb2ludCgtQWUsLWEpLG4ucG9pbnQoLUFlLDApLG4ucG9pbnQoLUFlLGEpO2Vsc2UgaWYoeShlWzBdLXRbMF0pPmtlKXt2YXIgaT1lWzBdPHRbMF0/QWU6LUFlO2E9cippLzIsbi5wb2ludCgtaSxhKSxuLnBvaW50KDAsYSksbi5wb2ludChpLGEpfWVsc2Ugbi5wb2ludCh0WzBdLHRbMV0pfSksWy1BZSwtQWUvMl0pO2Z1bmN0aW9uIHRuKGUpe3ZhciB0PU1hdGguY29zKGUpLHI9dD4wLG49eSh0KT5rZTtyZXR1cm4gUXIoYSwoZnVuY3Rpb24oZSl7dmFyIHQsbCxzLGMsdTtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7Yz1zPSExLHU9MX0scG9pbnQ6ZnVuY3Rpb24oZixkKXt2YXIgcCxoPVtmLGRdLGc9YShmLGQpLHY9cj9nPzA6byhmLGQpOmc/byhmKyhmPDA/QWU6LUFlKSxkKTowO2lmKCF0JiYoYz1zPWcpJiZlLmxpbmVTdGFydCgpLGchPT1zJiYocD1pKHQsaCksKE5yKHQscCl8fE5yKGgscCkpJiYoaFswXSs9a2UsaFsxXSs9a2UsZz1hKGhbMF0saFsxXSkpKSxnIT09cyl1PTAsZz8oZS5saW5lU3RhcnQoKSxwPWkoaCx0KSxlLnBvaW50KHBbMF0scFsxXSkpOihwPWkodCxoKSxlLnBvaW50KHBbMF0scFsxXSksZS5saW5lRW5kKCkpLHQ9cDtlbHNlIGlmKG4mJnQmJnJeZyl7dmFyIG07diZsfHwhKG09aShoLHQsITApKXx8KHU9MCxyPyhlLmxpbmVTdGFydCgpLGUucG9pbnQobVswXVswXSxtWzBdWzFdKSxlLnBvaW50KG1bMV1bMF0sbVsxXVsxXSksZS5saW5lRW5kKCkpOihlLnBvaW50KG1bMV1bMF0sbVsxXVsxXSksZS5saW5lRW5kKCksZS5saW5lU3RhcnQoKSxlLnBvaW50KG1bMF1bMF0sbVswXVsxXSkpKX0hZ3x8dCYmTnIodCxoKXx8ZS5wb2ludChoWzBdLGhbMV0pLHQ9aCxzPWcsbD12fSxsaW5lRW5kOmZ1bmN0aW9uKCl7cyYmZS5saW5lRW5kKCksdD1udWxsfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiB1fChjJiZzKTw8MX19fSksTm4oZSw2Kk9lKSxyP1swLC1lXTpbLUFlLGUtQWVdKTtmdW5jdGlvbiBhKGUscil7cmV0dXJuIE1hdGguY29zKGUpKk1hdGguY29zKHIpPnR9ZnVuY3Rpb24gaShlLHIsbil7dmFyIGE9WzEsMCwwXSxpPXpyKERyKGUpLERyKHIpKSxvPVByKGksaSksbD1pWzBdLHM9by1sKmw7aWYoIXMpcmV0dXJuIW4mJmU7dmFyIGM9dCpvL3MsdT0tdCpsL3MsZj16cihhLGkpLGQ9RXIoYSxjKTtScihkLEVyKGksdSkpO3ZhciBwPWYsaD1QcihkLHApLGc9UHIocCxwKSx2PWgqaC1nKihQcihkLGQpLTEpO2lmKCEodjwwKSl7dmFyIG09TWF0aC5zcXJ0KHYpLHg9RXIocCwoLWgtbSkvZyk7aWYoUnIoeCxkKSx4PUZyKHgpLCFuKXJldHVybiB4O3ZhciBiLF89ZVswXSx3PXJbMF0sVD1lWzFdLGs9clsxXTt3PF8mJihiPV8sXz13LHc9Yik7dmFyIE09dy1fLEE9eShNLUFlKTxrZTtpZighQSYmazxUJiYoYj1ULFQ9ayxrPWIpLEF8fE08a2U/QT9UK2s+MF54WzFdPCh5KHhbMF0tXyk8a2U/VDprKTpUPD14WzFdJiZ4WzFdPD1rOk0+QWVeKF88PXhbMF0mJnhbMF08PXcpKXt2YXIgTD1FcihwLCgtaCttKS9nKTtyZXR1cm4gUnIoTCxkKSxbeCxGcihMKV19fX1mdW5jdGlvbiBvKHQsbil7dmFyIGE9cj9lOkFlLWUsaT0wO3JldHVybiB0PC1hP2l8PTE6dD5hJiYoaXw9MiksbjwtYT9pfD00Om4+YSYmKGl8PTgpLGl9fWZ1bmN0aW9uIHJuKGUsdCxyLG4pe3JldHVybiBmdW5jdGlvbihhKXt2YXIgaSxvPWEuYSxsPWEuYixzPW8ueCxjPW8ueSx1PTAsZj0xLGQ9bC54LXMscD1sLnktYztpZihpPWUtcyxkfHwhKGk+MCkpe2lmKGkvPWQsZDwwKXtpZihpPHUpcmV0dXJuO2k8ZiYmKGY9aSl9ZWxzZSBpZihkPjApe2lmKGk+ZilyZXR1cm47aT51JiYodT1pKX1pZihpPXItcyxkfHwhKGk8MCkpe2lmKGkvPWQsZDwwKXtpZihpPmYpcmV0dXJuO2k+dSYmKHU9aSl9ZWxzZSBpZihkPjApe2lmKGk8dSlyZXR1cm47aTxmJiYoZj1pKX1pZihpPXQtYyxwfHwhKGk+MCkpe2lmKGkvPXAscDwwKXtpZihpPHUpcmV0dXJuO2k8ZiYmKGY9aSl9ZWxzZSBpZihwPjApe2lmKGk+ZilyZXR1cm47aT51JiYodT1pKX1pZihpPW4tYyxwfHwhKGk8MCkpe2lmKGkvPXAscDwwKXtpZihpPmYpcmV0dXJuO2k+dSYmKHU9aSl9ZWxzZSBpZihwPjApe2lmKGk8dSlyZXR1cm47aTxmJiYoZj1pKX1yZXR1cm4gdT4wJiYoYS5hPXt4OnMrdSpkLHk6Yyt1KnB9KSxmPDEmJihhLmI9e3g6cytmKmQseTpjK2YqcH0pLGF9fX19fX1mdW5jdGlvbiBubih0LHIsbixhKXtyZXR1cm4gZnVuY3Rpb24ocyl7dmFyIGMsdSxmLGQscCxoLGcsdixtLHkseCxiPXMsXz0kcigpLHc9cm4odCxyLG4sYSksVD17cG9pbnQ6QSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtULnBvaW50PUwsdSYmdS5wdXNoKGY9W10pO3k9ITAsbT0hMSxnPXY9TmFOfSxsaW5lRW5kOmZ1bmN0aW9uKCl7YyYmKEwoZCxwKSxoJiZtJiZfLnJlam9pbigpLGMucHVzaChfLmJ1ZmZlcigpKSk7VC5wb2ludD1BLG0mJnMubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtzPV8sYz1bXSx1PVtdLHg9ITB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtzPWIsYz1lLm1lcmdlKGMpO3ZhciByPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLHI9dS5sZW5ndGgsbj1lWzFdLGE9MDthPHI7KythKWZvcih2YXIgaSxvPTEsbD11W2FdLHM9bC5sZW5ndGgsYz1sWzBdO288czsrK28paT1sW29dLGNbMV08PW4/aVsxXT5uJiZ6ZShjLGksZSk+MCYmKyt0OmlbMV08PW4mJnplKGMsaSxlKTwwJiYtLXQsYz1pO3JldHVybiAwIT09dH0oW3QsYV0pLG49eCYmcixpPWMubGVuZ3RoOyhufHxpKSYmKHMucG9seWdvblN0YXJ0KCksbiYmKHMubGluZVN0YXJ0KCksayhudWxsLG51bGwsMSxzKSxzLmxpbmVFbmQoKSksaSYmWXIoYyxvLHIsayxzKSxzLnBvbHlnb25FbmQoKSksYz11PWY9bnVsbH19O2Z1bmN0aW9uIGsoZSxvLHMsYyl7dmFyIHU9MCxmPTA7aWYobnVsbD09ZXx8KHU9aShlLHMpKSE9PShmPWkobyxzKSl8fGwoZSxvKTwwXnM+MClkb3tjLnBvaW50KDA9PT11fHwzPT09dT90Om4sdT4xP2E6cil9d2hpbGUoKHU9KHUrcys0KSU0KSE9PWYpO2Vsc2UgYy5wb2ludChvWzBdLG9bMV0pfWZ1bmN0aW9uIE0oZSxpKXtyZXR1cm4gdDw9ZSYmZTw9biYmcjw9aSYmaTw9YX1mdW5jdGlvbiBBKGUsdCl7TShlLHQpJiZzLnBvaW50KGUsdCl9ZnVuY3Rpb24gTChlLHQpe3ZhciByPU0oZT1NYXRoLm1heCgtMWU5LE1hdGgubWluKDFlOSxlKSksdD1NYXRoLm1heCgtMWU5LE1hdGgubWluKDFlOSx0KSkpO2lmKHUmJmYucHVzaChbZSx0XSkseSlkPWUscD10LGg9cix5PSExLHImJihzLmxpbmVTdGFydCgpLHMucG9pbnQoZSx0KSk7ZWxzZSBpZihyJiZtKXMucG9pbnQoZSx0KTtlbHNle3ZhciBuPXthOnt4OmcseTp2fSxiOnt4OmUseTp0fX07dyhuKT8obXx8KHMubGluZVN0YXJ0KCkscy5wb2ludChuLmEueCxuLmEueSkpLHMucG9pbnQobi5iLngsbi5iLnkpLHJ8fHMubGluZUVuZCgpLHg9ITEpOnImJihzLmxpbmVTdGFydCgpLHMucG9pbnQoZSx0KSx4PSExKX1nPWUsdj10LG09cn1yZXR1cm4gVH07ZnVuY3Rpb24gaShlLGEpe3JldHVybiB5KGVbMF0tdCk8a2U/YT4wPzA6Mzp5KGVbMF0tbik8a2U/YT4wPzI6MTp5KGVbMV0tcik8a2U/YT4wPzE6MDphPjA/MzoyfWZ1bmN0aW9uIG8oZSx0KXtyZXR1cm4gbChlLngsdC54KX1mdW5jdGlvbiBsKGUsdCl7dmFyIHI9aShlLDEpLG49aSh0LDEpO3JldHVybiByIT09bj9yLW46MD09PXI/dFsxXS1lWzFdOjE9PT1yP2VbMF0tdFswXToyPT09cj9lWzFdLXRbMV06dFswXS1lWzBdfX1mdW5jdGlvbiBhbihlKXt2YXIgdD0wLHI9QWUvMyxuPU9uKGUpLGE9bih0LHIpO3JldHVybiBhLnBhcmFsbGVscz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKHQ9ZVswXSpBZS8xODAscj1lWzFdKkFlLzE4MCk6W3QvQWUqMTgwLHIvQWUqMTgwXX0sYX1mdW5jdGlvbiBvbihlLHQpe3ZhciByPU1hdGguc2luKGUpLG49KHIrTWF0aC5zaW4odCkpLzIsYT0xK3IqKDIqbi1yKSxpPU1hdGguc3FydChhKS9uO2Z1bmN0aW9uIG8oZSx0KXt2YXIgcj1NYXRoLnNxcnQoYS0yKm4qTWF0aC5zaW4odCkpL247cmV0dXJuW3IqTWF0aC5zaW4oZSo9biksaS1yKk1hdGguY29zKGUpXX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj1pLXQ7cmV0dXJuW01hdGguYXRhbjIoZSxyKS9uLEVlKChhLShlKmUrcipyKSpuKm4pLygyKm4pKV19LG99ZS5nZW8uY2xpcEV4dGVudD1mdW5jdGlvbigpe3ZhciBlLHQscixuLGEsaSxvPXtzdHJlYW06ZnVuY3Rpb24oZSl7cmV0dXJuIGEmJihhLnZhbGlkPSExKSwoYT1pKGUpKS52YWxpZD0hMCxhfSxleHRlbnQ6ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bm4oZT0rbFswXVswXSx0PStsWzBdWzFdLHI9K2xbMV1bMF0sbj0rbFsxXVsxXSksYSYmKGEudmFsaWQ9ITEsYT1udWxsKSxvKTpbW2UsdF0sW3Isbl1dfX07cmV0dXJuIG8uZXh0ZW50KFtbMCwwXSxbOTYwLDUwMF1dKX0sKGUuZ2VvLmNvbmljRXF1YWxBcmVhPWZ1bmN0aW9uKCl7cmV0dXJuIGFuKG9uKX0pLnJhdz1vbixlLmdlby5hbGJlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW8uY29uaWNFcXVhbEFyZWEoKS5yb3RhdGUoWzk2LDBdKS5jZW50ZXIoWy0uNiwzOC43XSkucGFyYWxsZWxzKFsyOS41LDQ1LjVdKS5zY2FsZSgxMDcwKX0sZS5nZW8uYWxiZXJzVXNhPWZ1bmN0aW9uKCl7dmFyIHQscixuLGEsaT1lLmdlby5hbGJlcnMoKSxvPWUuZ2VvLmNvbmljRXF1YWxBcmVhKCkucm90YXRlKFsxNTQsMF0pLmNlbnRlcihbLTIsNTguNV0pLnBhcmFsbGVscyhbNTUsNjVdKSxsPWUuZ2VvLmNvbmljRXF1YWxBcmVhKCkucm90YXRlKFsxNTcsMF0pLmNlbnRlcihbLTMsMTkuOV0pLnBhcmFsbGVscyhbOCwxOF0pLHM9e3BvaW50OmZ1bmN0aW9uKGUscil7dD1bZSxyXX19O2Z1bmN0aW9uIGMoZSl7dmFyIGk9ZVswXSxvPWVbMV07cmV0dXJuIHQ9bnVsbCxyKGksbyksdHx8KG4oaSxvKSx0KXx8YShpLG8pLHR9cmV0dXJuIGMuaW52ZXJ0PWZ1bmN0aW9uKGUpe3ZhciB0PWkuc2NhbGUoKSxyPWkudHJhbnNsYXRlKCksbj0oZVswXS1yWzBdKS90LGE9KGVbMV0tclsxXSkvdDtyZXR1cm4oYT49LjEyJiZhPC4yMzQmJm4+PS0uNDI1JiZuPC0uMjE0P286YT49LjE2NiYmYTwuMjM0JiZuPj0tLjIxNCYmbjwtLjExNT9sOmkpLmludmVydChlKX0sYy5zdHJlYW09ZnVuY3Rpb24oZSl7dmFyIHQ9aS5zdHJlYW0oZSkscj1vLnN0cmVhbShlKSxuPWwuc3RyZWFtKGUpO3JldHVybntwb2ludDpmdW5jdGlvbihlLGEpe3QucG9pbnQoZSxhKSxyLnBvaW50KGUsYSksbi5wb2ludChlLGEpfSxzcGhlcmU6ZnVuY3Rpb24oKXt0LnNwaGVyZSgpLHIuc3BoZXJlKCksbi5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dC5saW5lU3RhcnQoKSxyLmxpbmVTdGFydCgpLG4ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0LmxpbmVFbmQoKSxyLmxpbmVFbmQoKSxuLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dC5wb2x5Z29uU3RhcnQoKSxyLnBvbHlnb25TdGFydCgpLG4ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0LnBvbHlnb25FbmQoKSxyLnBvbHlnb25FbmQoKSxuLnBvbHlnb25FbmQoKX19fSxjLnByZWNpc2lvbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaS5wcmVjaXNpb24oZSksby5wcmVjaXNpb24oZSksbC5wcmVjaXNpb24oZSksYyk6aS5wcmVjaXNpb24oKX0sYy5zY2FsZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaS5zY2FsZShlKSxvLnNjYWxlKC4zNSplKSxsLnNjYWxlKGUpLGMudHJhbnNsYXRlKGkudHJhbnNsYXRlKCkpKTppLnNjYWxlKCl9LGMudHJhbnNsYXRlPWZ1bmN0aW9uKGUpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBpLnRyYW5zbGF0ZSgpO3ZhciB0PWkuc2NhbGUoKSx1PStlWzBdLGY9K2VbMV07cmV0dXJuIHI9aS50cmFuc2xhdGUoZSkuY2xpcEV4dGVudChbW3UtLjQ1NSp0LGYtLjIzOCp0XSxbdSsuNDU1KnQsZisuMjM4KnRdXSkuc3RyZWFtKHMpLnBvaW50LG49by50cmFuc2xhdGUoW3UtLjMwNyp0LGYrLjIwMSp0XSkuY2xpcEV4dGVudChbW3UtLjQyNSp0K2tlLGYrLjEyKnQra2VdLFt1LS4yMTQqdC1rZSxmKy4yMzQqdC1rZV1dKS5zdHJlYW0ocykucG9pbnQsYT1sLnRyYW5zbGF0ZShbdS0uMjA1KnQsZisuMjEyKnRdKS5jbGlwRXh0ZW50KFtbdS0uMjE0KnQra2UsZisuMTY2KnQra2VdLFt1LS4xMTUqdC1rZSxmKy4yMzQqdC1rZV1dKS5zdHJlYW0ocykucG9pbnQsY30sYy5zY2FsZSgxMDcwKX07dmFyIGxuLHNuLGNuLHVuLGZuLGRuLHBuPXtwb2ludDpSLGxpbmVTdGFydDpSLGxpbmVFbmQ6Uixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtzbj0wLHBuLmxpbmVTdGFydD1obn0scG9seWdvbkVuZDpmdW5jdGlvbigpe3BuLmxpbmVTdGFydD1wbi5saW5lRW5kPXBuLnBvaW50PVIsbG4rPXkoc24vMil9fTtmdW5jdGlvbiBobigpe3ZhciBlLHQscixuO2Z1bmN0aW9uIGEoZSx0KXtzbis9biplLXIqdCxyPWUsbj10fXBuLnBvaW50PWZ1bmN0aW9uKGksbyl7cG4ucG9pbnQ9YSxlPXI9aSx0PW49b30scG4ubGluZUVuZD1mdW5jdGlvbigpe2EoZSx0KX19dmFyIGduPXtwb2ludDpmdW5jdGlvbihlLHQpe2U8Y24mJihjbj1lKTtlPmZuJiYoZm49ZSk7dDx1biYmKHVuPXQpO3Q+ZG4mJihkbj10KX0sbGluZVN0YXJ0OlIsbGluZUVuZDpSLHBvbHlnb25TdGFydDpSLHBvbHlnb25FbmQ6Un07ZnVuY3Rpb24gdm4oKXt2YXIgZT1tbig0LjUpLHQ9W10scj17cG9pbnQ6bixsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtyLnBvaW50PWF9LGxpbmVFbmQ6byxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtyLmxpbmVFbmQ9bH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3IubGluZUVuZD1vLHIucG9pbnQ9bn0scG9pbnRSYWRpdXM6ZnVuY3Rpb24odCl7cmV0dXJuIGU9bW4odCkscn0scmVzdWx0OmZ1bmN0aW9uKCl7aWYodC5sZW5ndGgpe3ZhciBlPXQuam9pbigiIik7cmV0dXJuIHQ9W10sZX19fTtmdW5jdGlvbiBuKHIsbil7dC5wdXNoKCJNIixyLCIsIixuLGUpfWZ1bmN0aW9uIGEoZSxuKXt0LnB1c2goIk0iLGUsIiwiLG4pLHIucG9pbnQ9aX1mdW5jdGlvbiBpKGUscil7dC5wdXNoKCJMIixlLCIsIixyKX1mdW5jdGlvbiBvKCl7ci5wb2ludD1ufWZ1bmN0aW9uIGwoKXt0LnB1c2goIloiKX1yZXR1cm4gcn1mdW5jdGlvbiBtbihlKXtyZXR1cm4ibTAsIitlKyJhIitlKyIsIitlKyIgMCAxLDEgMCwiKy0yKmUrImEiK2UrIiwiK2UrIiAwIDEsMSAwLCIrMiplKyJ6In12YXIgeW4seG49e3BvaW50OmJuLGxpbmVTdGFydDpfbixsaW5lRW5kOnduLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3huLmxpbmVTdGFydD1Ubn0scG9seWdvbkVuZDpmdW5jdGlvbigpe3huLnBvaW50PWJuLHhuLmxpbmVTdGFydD1fbix4bi5saW5lRW5kPXdufX07ZnVuY3Rpb24gYm4oZSx0KXt4cis9ZSxicis9dCwrK19yfWZ1bmN0aW9uIF9uKCl7dmFyIGUsdDtmdW5jdGlvbiByKHIsbil7dmFyIGE9ci1lLGk9bi10LG89TWF0aC5zcXJ0KGEqYStpKmkpO3dyKz1vKihlK3IpLzIsVHIrPW8qKHQrbikvMixrcis9byxibihlPXIsdD1uKX14bi5wb2ludD1mdW5jdGlvbihuLGEpe3huLnBvaW50PXIsYm4oZT1uLHQ9YSl9fWZ1bmN0aW9uIHduKCl7eG4ucG9pbnQ9Ym59ZnVuY3Rpb24gVG4oKXt2YXIgZSx0LHIsbjtmdW5jdGlvbiBhKGUsdCl7dmFyIGE9ZS1yLGk9dC1uLG89TWF0aC5zcXJ0KGEqYStpKmkpO3dyKz1vKihyK2UpLzIsVHIrPW8qKG4rdCkvMixrcis9byxNcis9KG89biplLXIqdCkqKHIrZSksQXIrPW8qKG4rdCksTHIrPTMqbyxibihyPWUsbj10KX14bi5wb2ludD1mdW5jdGlvbihpLG8pe3huLnBvaW50PWEsYm4oZT1yPWksdD1uPW8pfSx4bi5saW5lRW5kPWZ1bmN0aW9uKCl7YShlLHQpfX1mdW5jdGlvbiBrbihlKXt2YXIgdD00LjUscj17cG9pbnQ6bixsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtyLnBvaW50PWF9LGxpbmVFbmQ6byxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtyLmxpbmVFbmQ9bH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3IubGluZUVuZD1vLHIucG9pbnQ9bn0scG9pbnRSYWRpdXM6ZnVuY3Rpb24oZSl7cmV0dXJuIHQ9ZSxyfSxyZXN1bHQ6Un07ZnVuY3Rpb24gbihyLG4pe2UubW92ZVRvKHIrdCxuKSxlLmFyYyhyLG4sdCwwLExlKX1mdW5jdGlvbiBhKHQsbil7ZS5tb3ZlVG8odCxuKSxyLnBvaW50PWl9ZnVuY3Rpb24gaSh0LHIpe2UubGluZVRvKHQscil9ZnVuY3Rpb24gbygpe3IucG9pbnQ9bn1mdW5jdGlvbiBsKCl7ZS5jbG9zZVBhdGgoKX1yZXR1cm4gcn1mdW5jdGlvbiBNbihlKXt2YXIgdD0uNSxyPU1hdGguY29zKDMwKk9lKSxuPTE2O2Z1bmN0aW9uIGEoZSl7cmV0dXJuKG4/bzppKShlKX1mdW5jdGlvbiBpKHQpe3JldHVybiBTbih0LChmdW5jdGlvbihyLG4pe3I9ZShyLG4pLHQucG9pbnQoclswXSxyWzFdKX0pKX1mdW5jdGlvbiBvKHQpe3ZhciByLGEsaSxvLHMsYyx1LGYsZCxwLGgsZyx2PXtwb2ludDptLGxpbmVTdGFydDp5LGxpbmVFbmQ6Yixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0LnBvbHlnb25TdGFydCgpLHYubGluZVN0YXJ0PV99LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0LnBvbHlnb25FbmQoKSx2LmxpbmVTdGFydD15fX07ZnVuY3Rpb24gbShyLG4pe3I9ZShyLG4pLHQucG9pbnQoclswXSxyWzFdKX1mdW5jdGlvbiB5KCl7Zj1OYU4sdi5wb2ludD14LHQubGluZVN0YXJ0KCl9ZnVuY3Rpb24geChyLGEpe3ZhciBpPURyKFtyLGFdKSxvPWUocixhKTtsKGYsZCx1LHAsaCxnLGY9b1swXSxkPW9bMV0sdT1yLHA9aVswXSxoPWlbMV0sZz1pWzJdLG4sdCksdC5wb2ludChmLGQpfWZ1bmN0aW9uIGIoKXt2LnBvaW50PW0sdC5saW5lRW5kKCl9ZnVuY3Rpb24gXygpe3koKSx2LnBvaW50PXcsdi5saW5lRW5kPVR9ZnVuY3Rpb24gdyhlLHQpe3gocj1lLHQpLGE9ZixpPWQsbz1wLHM9aCxjPWcsdi5wb2ludD14fWZ1bmN0aW9uIFQoKXtsKGYsZCx1LHAsaCxnLGEsaSxyLG8scyxjLG4sdCksdi5saW5lRW5kPWIsYigpfXJldHVybiB2fWZ1bmN0aW9uIGwobixhLGksbyxzLGMsdSxmLGQscCxoLGcsdixtKXt2YXIgeD11LW4sYj1mLWEsXz14KngrYipiO2lmKF8+NCp0JiZ2LS0pe3ZhciB3PW8rcCxUPXMraCxrPWMrZyxNPU1hdGguc3FydCh3KncrVCpUK2sqayksQT1NYXRoLmFzaW4oay89TSksTD15KHkoayktMSk8a2V8fHkoaS1kKTxrZT8oaStkKS8yOk1hdGguYXRhbjIoVCx3KSxTPWUoTCxBKSxDPVNbMF0sTz1TWzFdLEQ9Qy1uLFA9Ty1hLHo9YipELXgqUDsoeip6L18+dHx8eSgoeCpEK2IqUCkvXy0uNSk+LjN8fG8qcCtzKmgrYypnPHIpJiYobChuLGEsaSxvLHMsYyxDLE8sTCx3Lz1NLFQvPU0sayx2LG0pLG0ucG9pbnQoQyxPKSxsKEMsTyxMLHcsVCxrLHUsZixkLHAsaCxnLHYsbSkpfX1yZXR1cm4gYS5wcmVjaXNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49KHQ9ZSplKT4wJiYxNixhKTpNYXRoLnNxcnQodCl9LGF9ZnVuY3Rpb24gQW4oZSl7dmFyIHQ9TW4oKGZ1bmN0aW9uKHQscil7cmV0dXJuIGUoW3QqRGUscipEZV0pfSkpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gRG4odChlKSl9fWZ1bmN0aW9uIExuKGUpe3RoaXMuc3RyZWFtPWV9ZnVuY3Rpb24gU24oZSx0KXtyZXR1cm57cG9pbnQ6dCxzcGhlcmU6ZnVuY3Rpb24oKXtlLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtlLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7ZS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2UucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtlLnBvbHlnb25FbmQoKX19fWZ1bmN0aW9uIENuKGUpe3JldHVybiBPbigoZnVuY3Rpb24oKXtyZXR1cm4gZX0pKSgpfWZ1bmN0aW9uIE9uKHQpe3ZhciByLG4sYSxpLG8sbCxzPU1uKChmdW5jdGlvbihlLHQpe3JldHVyblsoZT1yKGUsdCkpWzBdKmMraSxvLWVbMV0qY119KSksYz0xNTAsdT00ODAsZj0yNTAsZD0wLHA9MCxoPTAsZz0wLHY9MCxtPWVuLHk9Tyx4PW51bGwsYj1udWxsO2Z1bmN0aW9uIF8oZSl7cmV0dXJuWyhlPWEoZVswXSpPZSxlWzFdKk9lKSlbMF0qYytpLG8tZVsxXSpjXX1mdW5jdGlvbiB3KGUpe3JldHVybihlPWEuaW52ZXJ0KChlWzBdLWkpL2MsKG8tZVsxXSkvYykpJiZbZVswXSpEZSxlWzFdKkRlXX1mdW5jdGlvbiBUKCl7YT1HcihuPVJuKGgsZyx2KSxyKTt2YXIgZT1yKGQscCk7cmV0dXJuIGk9dS1lWzBdKmMsbz1mK2VbMV0qYyxrKCl9ZnVuY3Rpb24gaygpe3JldHVybiBsJiYobC52YWxpZD0hMSxsPW51bGwpLF99cmV0dXJuIF8uc3RyZWFtPWZ1bmN0aW9uKGUpe3JldHVybiBsJiYobC52YWxpZD0hMSksKGw9RG4obShuLHMoeShlKSkpKSkudmFsaWQ9ITAsbH0sXy5jbGlwQW5nbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09bnVsbD09ZT8oeD1lLGVuKTp0bigoeD0rZSkqT2UpLGsoKSk6eH0sXy5jbGlwRXh0ZW50PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPWUseT1lP25uKGVbMF1bMF0sZVswXVsxXSxlWzFdWzBdLGVbMV1bMV0pOk8saygpKTpifSxfLnNjYWxlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPStlLFQoKSk6Y30sXy50cmFuc2xhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9K2VbMF0sZj0rZVsxXSxUKCkpOlt1LGZdfSxfLmNlbnRlcj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD1lWzBdJTM2MCpPZSxwPWVbMV0lMzYwKk9lLFQoKSk6W2QqRGUscCpEZV19LF8ucm90YXRlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPWVbMF0lMzYwKk9lLGc9ZVsxXSUzNjAqT2Usdj1lLmxlbmd0aD4yP2VbMl0lMzYwKk9lOjAsVCgpKTpbaCpEZSxnKkRlLHYqRGVdfSxlLnJlYmluZChfLHMsInByZWNpc2lvbiIpLGZ1bmN0aW9uKCl7cmV0dXJuIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksXy5pbnZlcnQ9ci5pbnZlcnQmJncsVCgpfX1mdW5jdGlvbiBEbihlKXtyZXR1cm4gU24oZSwoZnVuY3Rpb24odCxyKXtlLnBvaW50KHQqT2UscipPZSl9KSl9ZnVuY3Rpb24gUG4oZSx0KXtyZXR1cm5bZSx0XX1mdW5jdGlvbiB6bihlLHQpe3JldHVybltlPkFlP2UtTGU6ZTwtQWU/ZStMZTplLHRdfWZ1bmN0aW9uIFJuKGUsdCxyKXtyZXR1cm4gZT90fHxyP0dyKEluKGUpLEZuKHQscikpOkluKGUpOnR8fHI/Rm4odCxyKTp6bn1mdW5jdGlvbiBFbihlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXtyZXR1cm5bKHQrPWUpPkFlP3QtTGU6dDwtQWU/dCtMZTp0LHJdfX1mdW5jdGlvbiBJbihlKXt2YXIgdD1FbihlKTtyZXR1cm4gdC5pbnZlcnQ9RW4oLWUpLHR9ZnVuY3Rpb24gRm4oZSx0KXt2YXIgcj1NYXRoLmNvcyhlKSxuPU1hdGguc2luKGUpLGE9TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KTtmdW5jdGlvbiBvKGUsdCl7dmFyIG89TWF0aC5jb3ModCksbD1NYXRoLmNvcyhlKSpvLHM9TWF0aC5zaW4oZSkqbyxjPU1hdGguc2luKHQpLHU9YypyK2wqbjtyZXR1cm5bTWF0aC5hdGFuMihzKmEtdSppLGwqci1jKm4pLEVlKHUqYStzKmkpXX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24oZSx0KXt2YXIgbz1NYXRoLmNvcyh0KSxsPU1hdGguY29zKGUpKm8scz1NYXRoLnNpbihlKSpvLGM9TWF0aC5zaW4odCksdT1jKmEtcyppO3JldHVybltNYXRoLmF0YW4yKHMqYStjKmksbCpyK3UqbiksRWUodSpyLWwqbildfSxvfWZ1bmN0aW9uIE5uKGUsdCl7dmFyIHI9TWF0aC5jb3MoZSksbj1NYXRoLnNpbihlKTtyZXR1cm4gZnVuY3Rpb24oYSxpLG8sbCl7dmFyIHM9byp0O251bGwhPWE/KGE9SG4ocixhKSxpPUhuKHIsaSksKG8+MD9hPGk6YT5pKSYmKGErPW8qTGUpKTooYT1lK28qTGUsaT1lLS41KnMpO2Zvcih2YXIgYyx1PWE7bz4wP3U+aTp1PGk7dS09cylsLnBvaW50KChjPUZyKFtyLC1uKk1hdGguY29zKHUpLC1uKk1hdGguc2luKHUpXSkpWzBdLGNbMV0pfX1mdW5jdGlvbiBIbihlLHQpe3ZhciByPURyKHQpO3JbMF0tPWUsSXIocik7dmFyIG49UmUoLXJbMV0pO3JldHVybigoLXJbMl08MD8tbjpuKSsyKk1hdGguUEkta2UpJSgyKk1hdGguUEkpfWZ1bmN0aW9uIGpuKHQscixuKXt2YXIgYT1lLnJhbmdlKHQsci1rZSxuKS5jb25jYXQocik7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBhLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuW2UsdF19KSl9fWZ1bmN0aW9uIEJuKHQscixuKXt2YXIgYT1lLnJhbmdlKHQsci1rZSxuKS5jb25jYXQocik7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBhLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuW3QsZV19KSl9fWZ1bmN0aW9uIFZuKGUpe3JldHVybiBlLnNvdXJjZX1mdW5jdGlvbiBVbihlKXtyZXR1cm4gZS50YXJnZXR9ZS5nZW8ucGF0aD1mdW5jdGlvbigpe3ZhciB0LHIsbixhLGksbz00LjU7ZnVuY3Rpb24gbCh0KXtyZXR1cm4gdCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBvJiZhLnBvaW50UmFkaXVzKCtvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksaSYmaS52YWxpZHx8KGk9bihhKSksZS5nZW8uc3RyZWFtKHQsaSkpLGEucmVzdWx0KCl9ZnVuY3Rpb24gcygpe3JldHVybiBpPW51bGwsbH1yZXR1cm4gbC5hcmVhPWZ1bmN0aW9uKHQpe3JldHVybiBsbj0wLGUuZ2VvLnN0cmVhbSh0LG4ocG4pKSxsbn0sbC5jZW50cm9pZD1mdW5jdGlvbih0KXtyZXR1cm4geHI9YnI9X3I9d3I9VHI9a3I9TXI9QXI9THI9MCxlLmdlby5zdHJlYW0odCxuKHhuKSksTHI/W01yL0xyLEFyL0xyXTprcj9bd3Iva3IsVHIva3JdOl9yP1t4ci9fcixici9fcl06W05hTixOYU5dfSxsLmJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gZm49ZG49LShjbj11bj0xLzApLGUuZ2VvLnN0cmVhbSh0LG4oZ24pKSxbW2NuLHVuXSxbZm4sZG5dXX0sbC5wcm9qZWN0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSh0PWUpP2Uuc3RyZWFtfHxBbihlKTpPLHMoKSk6dH0sbC5jb250ZXh0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW51bGw9PShyPWUpP25ldyB2bjpuZXcga24oZSksImZ1bmN0aW9uIiE9dHlwZW9mIG8mJmEucG9pbnRSYWRpdXMobykscygpKTpyfSxsLnBvaW50UmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6KGEucG9pbnRSYWRpdXMoK2UpLCtlKSxsKTpvfSxsLnByb2plY3Rpb24oZS5nZW8uYWxiZXJzVXNhKCkpLmNvbnRleHQobnVsbCl9LGUuZ2VvLnRyYW5zZm9ybT1mdW5jdGlvbihlKXtyZXR1cm57c3RyZWFtOmZ1bmN0aW9uKHQpe3ZhciByPW5ldyBMbih0KTtmb3IodmFyIG4gaW4gZSlyW25dPWVbbl07cmV0dXJuIHJ9fX0sTG4ucHJvdG90eXBlPXtwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuc3RyZWFtLnBvaW50KGUsdCl9LHNwaGVyZTpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uRW5kKCl9fSxlLmdlby5wcm9qZWN0aW9uPUNuLGUuZ2VvLnByb2plY3Rpb25NdXRhdG9yPU9uLChlLmdlby5lcXVpcmVjdGFuZ3VsYXI9ZnVuY3Rpb24oKXtyZXR1cm4gQ24oUG4pfSkucmF3PVBuLmludmVydD1QbixlLmdlby5yb3RhdGlvbj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQpe3JldHVybih0PWUodFswXSpPZSx0WzFdKk9lKSlbMF0qPURlLHRbMV0qPURlLHR9cmV0dXJuIGU9Um4oZVswXSUzNjAqT2UsZVsxXSpPZSxlLmxlbmd0aD4yP2VbMl0qT2U6MCksdC5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuKHQ9ZS5pbnZlcnQodFswXSpPZSx0WzFdKk9lKSlbMF0qPURlLHRbMV0qPURlLHR9LHR9LHpuLmludmVydD1QbixlLmdlby5jaXJjbGU9ZnVuY3Rpb24oKXt2YXIgZSx0LHI9WzAsMF0sbj02O2Z1bmN0aW9uIGEoKXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2Ygcj9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpyLG49Um4oLWVbMF0qT2UsLWVbMV0qT2UsMCkuaW52ZXJ0LGE9W107cmV0dXJuIHQobnVsbCxudWxsLDEse3BvaW50OmZ1bmN0aW9uKGUsdCl7YS5wdXNoKGU9bihlLHQpKSxlWzBdKj1EZSxlWzFdKj1EZX19KSx7dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W2FdfX1yZXR1cm4gYS5vcmlnaW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ZSxhKTpyfSxhLmFuZ2xlPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PU5uKChlPStyKSpPZSxuKk9lKSxhKTplfSxhLnByZWNpc2lvbj1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1ObihlKk9lLChuPStyKSpPZSksYSk6bn0sYS5hbmdsZSg5MCl9LGUuZ2VvLmRpc3RhbmNlPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbj0odFswXS1lWzBdKSpPZSxhPWVbMV0qT2UsaT10WzFdKk9lLG89TWF0aC5zaW4obiksbD1NYXRoLmNvcyhuKSxzPU1hdGguc2luKGEpLGM9TWF0aC5jb3MoYSksdT1NYXRoLnNpbihpKSxmPU1hdGguY29zKGkpO3JldHVybiBNYXRoLmF0YW4yKE1hdGguc3FydCgocj1mKm8pKnIrKHI9Yyp1LXMqZipsKSpyKSxzKnUrYypmKmwpfSxlLmdlby5ncmF0aWN1bGU9ZnVuY3Rpb24oKXt2YXIgdCxyLG4sYSxpLG8sbCxzLGMsdSxmLGQscD0xMCxoPXAsZz05MCx2PTM2MCxtPTIuNTtmdW5jdGlvbiB4KCl7cmV0dXJue3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6YigpfX1mdW5jdGlvbiBiKCl7cmV0dXJuIGUucmFuZ2UoTWF0aC5jZWlsKGEvZykqZyxuLGcpLm1hcChmKS5jb25jYXQoZS5yYW5nZShNYXRoLmNlaWwocy92KSp2LGwsdikubWFwKGQpKS5jb25jYXQoZS5yYW5nZShNYXRoLmNlaWwoci9wKSpwLHQscCkuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4geShlJWcpPmtlfSkpLm1hcChjKSkuY29uY2F0KGUucmFuZ2UoTWF0aC5jZWlsKG8vaCkqaCxpLGgpLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIHkoZSV2KT5rZX0pKS5tYXAodSkpfXJldHVybiB4LmxpbmVzPWZ1bmN0aW9uKCl7cmV0dXJuIGIoKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybnt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczplfX0pKX0seC5vdXRsaW5lPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltmKGEpLmNvbmNhdChkKGwpLnNsaWNlKDEpLGYobikucmV2ZXJzZSgpLnNsaWNlKDEpLGQocykucmV2ZXJzZSgpLnNsaWNlKDEpKV19fSx4LmV4dGVudD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD94Lm1ham9yRXh0ZW50KGUpLm1pbm9yRXh0ZW50KGUpOngubWlub3JFeHRlbnQoKX0seC5tYWpvckV4dGVudD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rZVswXVswXSxuPStlWzFdWzBdLHM9K2VbMF1bMV0sbD0rZVsxXVsxXSxhPm4mJihlPWEsYT1uLG49ZSkscz5sJiYoZT1zLHM9bCxsPWUpLHgucHJlY2lzaW9uKG0pKTpbW2Esc10sW24sbF1dfSx4Lm1pbm9yRXh0ZW50PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPStlWzBdWzBdLHQ9K2VbMV1bMF0sbz0rZVswXVsxXSxpPStlWzFdWzFdLHI+dCYmKGU9cixyPXQsdD1lKSxvPmkmJihlPW8sbz1pLGk9ZSkseC5wcmVjaXNpb24obSkpOltbcixvXSxbdCxpXV19LHguc3RlcD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD94Lm1ham9yU3RlcChlKS5taW5vclN0ZXAoZSk6eC5taW5vclN0ZXAoKX0seC5tYWpvclN0ZXA9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9K2VbMF0sdj0rZVsxXSx4KTpbZyx2XX0seC5taW5vclN0ZXA9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9K2VbMF0saD0rZVsxXSx4KTpbcCxoXX0seC5wcmVjaXNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09K2UsYz1qbihvLGksOTApLHU9Qm4ocix0LG0pLGY9am4ocyxsLDkwKSxkPUJuKGEsbixtKSx4KTptfSx4Lm1ham9yRXh0ZW50KFtbLTE4MCwtOTAra2VdLFsxODAsOTAta2VdXSkubWlub3JFeHRlbnQoW1stMTgwLC04MC1rZV0sWzE4MCw4MCtrZV1dKX0sZS5nZW8uZ3JlYXRBcmM9ZnVuY3Rpb24oKXt2YXIgdCxyLG49Vm4sYT1VbjtmdW5jdGlvbiBpKCl7cmV0dXJue3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOlt0fHxuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxyfHxhLmFwcGx5KHRoaXMsYXJndW1lbnRzKV19fXJldHVybiBpLmRpc3RhbmNlPWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvLmRpc3RhbmNlKHR8fG4uYXBwbHkodGhpcyxhcmd1bWVudHMpLHJ8fGEuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0saS5zb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ZSx0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP251bGw6ZSxpKTpufSxpLnRhcmdldD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1lLHI9ImZ1bmN0aW9uIj09dHlwZW9mIGU/bnVsbDplLGkpOmF9LGkucHJlY2lzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/aTowfSxpfSxlLmdlby5pbnRlcnBvbGF0ZT1mdW5jdGlvbihlLHQpe3JldHVybiByPWVbMF0qT2Usbj1lWzFdKk9lLGE9dFswXSpPZSxpPXRbMV0qT2Usbz1NYXRoLmNvcyhuKSxsPU1hdGguc2luKG4pLHM9TWF0aC5jb3MoaSksYz1NYXRoLnNpbihpKSx1PW8qTWF0aC5jb3MociksZj1vKk1hdGguc2luKHIpLGQ9cypNYXRoLmNvcyhhKSxwPXMqTWF0aC5zaW4oYSksaD0yKk1hdGguYXNpbihNYXRoLnNxcnQoRmUoaS1uKStvKnMqRmUoYS1yKSkpLGc9MS9NYXRoLnNpbihoKSwodj1oP2Z1bmN0aW9uKGUpe3ZhciB0PU1hdGguc2luKGUqPWgpKmcscj1NYXRoLnNpbihoLWUpKmcsbj1yKnUrdCpkLGE9cipmK3QqcCxpPXIqbCt0KmM7cmV0dXJuW01hdGguYXRhbjIoYSxuKSpEZSxNYXRoLmF0YW4yKGksTWF0aC5zcXJ0KG4qbithKmEpKSpEZV19OmZ1bmN0aW9uKCl7cmV0dXJuW3IqRGUsbipEZV19KS5kaXN0YW5jZT1oLHY7dmFyIHIsbixhLGksbyxsLHMsYyx1LGYsZCxwLGgsZyx2fSxlLmdlby5sZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIHluPTAsZS5nZW8uc3RyZWFtKHQscW4pLHlufTt2YXIgcW49e3NwaGVyZTpSLHBvaW50OlIsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dmFyIGUsdCxyO2Z1bmN0aW9uIG4obixhKXt2YXIgaT1NYXRoLnNpbihhKj1PZSksbz1NYXRoLmNvcyhhKSxsPXkoKG4qPU9lKS1lKSxzPU1hdGguY29zKGwpO3luKz1NYXRoLmF0YW4yKE1hdGguc3FydCgobD1vKk1hdGguc2luKGwpKSpsKyhsPXIqaS10Km8qcykqbCksdCppK3IqbypzKSxlPW4sdD1pLHI9b31xbi5wb2ludD1mdW5jdGlvbihhLGkpe2U9YSpPZSx0PU1hdGguc2luKGkqPU9lKSxyPU1hdGguY29zKGkpLHFuLnBvaW50PW59LHFuLmxpbmVFbmQ9ZnVuY3Rpb24oKXtxbi5wb2ludD1xbi5saW5lRW5kPVJ9fSxsaW5lRW5kOlIscG9seWdvblN0YXJ0OlIscG9seWdvbkVuZDpSfTtmdW5jdGlvbiBHbihlLHQpe2Z1bmN0aW9uIHIodCxyKXt2YXIgbj1NYXRoLmNvcyh0KSxhPU1hdGguY29zKHIpLGk9ZShuKmEpO3JldHVybltpKmEqTWF0aC5zaW4odCksaSpNYXRoLnNpbihyKV19cmV0dXJuIHIuaW52ZXJ0PWZ1bmN0aW9uKGUscil7dmFyIG49TWF0aC5zcXJ0KGUqZStyKnIpLGE9dChuKSxpPU1hdGguc2luKGEpLG89TWF0aC5jb3MoYSk7cmV0dXJuW01hdGguYXRhbjIoZSppLG4qbyksTWF0aC5hc2luKG4mJnIqaS9uKV19LHJ9dmFyIFpuPUduKChmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5zcXJ0KDIvKDErZSkpfSksKGZ1bmN0aW9uKGUpe3JldHVybiAyKk1hdGguYXNpbihlLzIpfSkpOyhlLmdlby5hemltdXRoYWxFcXVhbEFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gQ24oWm4pfSkucmF3PVpuO3ZhciBZbj1HbigoZnVuY3Rpb24oZSl7dmFyIHQ9TWF0aC5hY29zKGUpO3JldHVybiB0JiZ0L01hdGguc2luKHQpfSksTyk7ZnVuY3Rpb24gWG4oZSx0KXt2YXIgcj1NYXRoLmNvcyhlKSxuPWZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnRhbihBZS80K2UvMil9LGE9ZT09PXQ/TWF0aC5zaW4oZSk6TWF0aC5sb2coci9NYXRoLmNvcyh0KSkvTWF0aC5sb2cobih0KS9uKGUpKSxpPXIqTWF0aC5wb3cobihlKSxhKS9hO2lmKCFhKXJldHVybiBKbjtmdW5jdGlvbiBvKGUsdCl7aT4wP3Q8LUNlK2tlJiYodD0tQ2Ura2UpOnQ+Q2Uta2UmJih0PUNlLWtlKTt2YXIgcj1pL01hdGgucG93KG4odCksYSk7cmV0dXJuW3IqTWF0aC5zaW4oYSplKSxpLXIqTWF0aC5jb3MoYSplKV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKGUsdCl7dmFyIHI9aS10LG49UGUoYSkqTWF0aC5zcXJ0KGUqZStyKnIpO3JldHVybltNYXRoLmF0YW4yKGUscikvYSwyKk1hdGguYXRhbihNYXRoLnBvdyhpL24sMS9hKSktQ2VdfSxvfWZ1bmN0aW9uIFduKGUsdCl7dmFyIHI9TWF0aC5jb3MoZSksbj1lPT09dD9NYXRoLnNpbihlKTooci1NYXRoLmNvcyh0KSkvKHQtZSksYT1yL24rZTtpZih5KG4pPGtlKXJldHVybiBQbjtmdW5jdGlvbiBpKGUsdCl7dmFyIHI9YS10O3JldHVybltyKk1hdGguc2luKG4qZSksYS1yKk1hdGguY29zKG4qZSldfXJldHVybiBpLmludmVydD1mdW5jdGlvbihlLHQpe3ZhciByPWEtdDtyZXR1cm5bTWF0aC5hdGFuMihlLHIpL24sYS1QZShuKSpNYXRoLnNxcnQoZSplK3IqcildfSxpfShlLmdlby5hemltdXRoYWxFcXVpZGlzdGFudD1mdW5jdGlvbigpe3JldHVybiBDbihZbil9KS5yYXc9WW4sKGUuZ2VvLmNvbmljQ29uZm9ybWFsPWZ1bmN0aW9uKCl7cmV0dXJuIGFuKFhuKX0pLnJhdz1YbiwoZS5nZW8uY29uaWNFcXVpZGlzdGFudD1mdW5jdGlvbigpe3JldHVybiBhbihXbil9KS5yYXc9V247dmFyIFFuPUduKChmdW5jdGlvbihlKXtyZXR1cm4gMS9lfSksTWF0aC5hdGFuKTtmdW5jdGlvbiBKbihlLHQpe3JldHVybltlLE1hdGgubG9nKE1hdGgudGFuKEFlLzQrdC8yKSldfWZ1bmN0aW9uICRuKGUpe3ZhciB0LHI9Q24oZSksbj1yLnNjYWxlLGE9ci50cmFuc2xhdGUsaT1yLmNsaXBFeHRlbnQ7cmV0dXJuIHIuc2NhbGU9ZnVuY3Rpb24oKXt2YXIgZT1uLmFwcGx5KHIsYXJndW1lbnRzKTtyZXR1cm4gZT09PXI/dD9yLmNsaXBFeHRlbnQobnVsbCk6cjplfSxyLnRyYW5zbGF0ZT1mdW5jdGlvbigpe3ZhciBlPWEuYXBwbHkocixhcmd1bWVudHMpO3JldHVybiBlPT09cj90P3IuY2xpcEV4dGVudChudWxsKTpyOmV9LHIuY2xpcEV4dGVudD1mdW5jdGlvbihlKXt2YXIgbz1pLmFwcGx5KHIsYXJndW1lbnRzKTtpZihvPT09cil7aWYodD1udWxsPT1lKXt2YXIgbD1BZSpuKCkscz1hKCk7aShbW3NbMF0tbCxzWzFdLWxdLFtzWzBdK2wsc1sxXStsXV0pfX1lbHNlIHQmJihvPW51bGwpO3JldHVybiBvfSxyLmNsaXBFeHRlbnQobnVsbCl9KGUuZ2VvLmdub21vbmljPWZ1bmN0aW9uKCl7cmV0dXJuIENuKFFuKX0pLnJhdz1RbixKbi5pbnZlcnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm5bZSwyKk1hdGguYXRhbihNYXRoLmV4cCh0KSktQ2VdfSwoZS5nZW8ubWVyY2F0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gJG4oSm4pfSkucmF3PUpuO3ZhciBLbj1HbigoZnVuY3Rpb24oKXtyZXR1cm4gMX0pLE1hdGguYXNpbik7KGUuZ2VvLm9ydGhvZ3JhcGhpYz1mdW5jdGlvbigpe3JldHVybiBDbihLbil9KS5yYXc9S247dmFyIGVhPUduKChmdW5jdGlvbihlKXtyZXR1cm4gMS8oMStlKX0pLChmdW5jdGlvbihlKXtyZXR1cm4gMipNYXRoLmF0YW4oZSl9KSk7ZnVuY3Rpb24gdGEoZSx0KXtyZXR1cm5bTWF0aC5sb2coTWF0aC50YW4oQWUvNCt0LzIpKSwtZV19ZnVuY3Rpb24gcmEoZSl7cmV0dXJuIGVbMF19ZnVuY3Rpb24gbmEoZSl7cmV0dXJuIGVbMV19ZnVuY3Rpb24gYWEoZSl7Zm9yKHZhciB0PWUubGVuZ3RoLHI9WzAsMV0sbj0yLGE9MjthPHQ7YSsrKXtmb3IoO24+MSYmemUoZVtyW24tMl1dLGVbcltuLTFdXSxlW2FdKTw9MDspLS1uO3JbbisrXT1hfXJldHVybiByLnNsaWNlKDAsbil9ZnVuY3Rpb24gaWEoZSx0KXtyZXR1cm4gZVswXS10WzBdfHxlWzFdLXRbMV19KGUuZ2VvLnN0ZXJlb2dyYXBoaWM9ZnVuY3Rpb24oKXtyZXR1cm4gQ24oZWEpfSkucmF3PWVhLHRhLmludmVydD1mdW5jdGlvbihlLHQpe3JldHVyblstdCwyKk1hdGguYXRhbihNYXRoLmV4cChlKSktQ2VdfSwoZS5nZW8udHJhbnN2ZXJzZU1lcmNhdG9yPWZ1bmN0aW9uKCl7dmFyIGU9JG4odGEpLHQ9ZS5jZW50ZXIscj1lLnJvdGF0ZTtyZXR1cm4gZS5jZW50ZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGU/dChbLWVbMV0sZVswXV0pOlsoZT10KCkpWzFdLC1lWzBdXX0sZS5yb3RhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGU/cihbZVswXSxlWzFdLGUubGVuZ3RoPjI/ZVsyXSs5MDo5MF0pOlsoZT1yKCkpWzBdLGVbMV0sZVsyXS05MF19LHIoWzAsMCw5MF0pfSkucmF3PXRhLGUuZ2VvbT17fSxlLmdlb20uaHVsbD1mdW5jdGlvbihlKXt2YXIgdD1yYSxyPW5hO2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIG4oZSk7ZnVuY3Rpb24gbihlKXtpZihlLmxlbmd0aDwzKXJldHVybltdO3ZhciBuLGE9aHQodCksaT1odChyKSxvPWUubGVuZ3RoLGw9W10scz1bXTtmb3Iobj0wO248bztuKyspbC5wdXNoKFsrYS5jYWxsKHRoaXMsZVtuXSxuKSwraS5jYWxsKHRoaXMsZVtuXSxuKSxuXSk7Zm9yKGwuc29ydChpYSksbj0wO248bztuKyspcy5wdXNoKFtsW25dWzBdLC1sW25dWzFdXSk7dmFyIGM9YWEobCksdT1hYShzKSxmPXVbMF09PT1jWzBdLGQ9dVt1Lmxlbmd0aC0xXT09PWNbYy5sZW5ndGgtMV0scD1bXTtmb3Iobj1jLmxlbmd0aC0xO24+PTA7LS1uKXAucHVzaChlW2xbY1tuXV1bMl1dKTtmb3Iobj0rZjtuPHUubGVuZ3RoLWQ7KytuKXAucHVzaChlW2xbdVtuXV1bMl1dKTtyZXR1cm4gcH1yZXR1cm4gbi54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsbik6dH0sbi55PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWUsbik6cn0sbn0sZS5nZW9tLnBvbHlnb249ZnVuY3Rpb24oZSl7cmV0dXJuIEIoZSxvYSksZX07dmFyIG9hPWUuZ2VvbS5wb2x5Z29uLnByb3RvdHlwZT1bXTtmdW5jdGlvbiBsYShlLHQscil7cmV0dXJuKHJbMF0tdFswXSkqKGVbMV0tdFsxXSk8KHJbMV0tdFsxXSkqKGVbMF0tdFswXSl9ZnVuY3Rpb24gc2EoZSx0LHIsbil7dmFyIGE9ZVswXSxpPXJbMF0sbz10WzBdLWEsbD1uWzBdLWkscz1lWzFdLGM9clsxXSx1PXRbMV0tcyxmPW5bMV0tYyxkPShsKihzLWMpLWYqKGEtaSkpLyhmKm8tbCp1KTtyZXR1cm5bYStkKm8scytkKnVdfWZ1bmN0aW9uIGNhKGUpe3ZhciB0PWVbMF0scj1lW2UubGVuZ3RoLTFdO3JldHVybiEodFswXS1yWzBdfHx0WzFdLXJbMV0pfW9hLmFyZWE9ZnVuY3Rpb24oKXtmb3IodmFyIGUsdD0tMSxyPXRoaXMubGVuZ3RoLG49dGhpc1tyLTFdLGE9MDsrK3Q8cjspZT1uLG49dGhpc1t0XSxhKz1lWzFdKm5bMF0tZVswXSpuWzFdO3JldHVybi41KmF9LG9hLmNlbnRyb2lkPWZ1bmN0aW9uKGUpe3ZhciB0LHIsbj0tMSxhPXRoaXMubGVuZ3RoLGk9MCxvPTAsbD10aGlzW2EtMV07Zm9yKGFyZ3VtZW50cy5sZW5ndGh8fChlPS0xLyg2KnRoaXMuYXJlYSgpKSk7KytuPGE7KXQ9bCxsPXRoaXNbbl0scj10WzBdKmxbMV0tbFswXSp0WzFdLGkrPSh0WzBdK2xbMF0pKnIsbys9KHRbMV0rbFsxXSkqcjtyZXR1cm5baSplLG8qZV19LG9hLmNsaXA9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHIsbixhLGksbyxsPWNhKGUpLHM9LTEsYz10aGlzLmxlbmd0aC1jYSh0aGlzKSx1PXRoaXNbYy0xXTsrK3M8Yzspe2Zvcih0PWUuc2xpY2UoKSxlLmxlbmd0aD0wLGE9dGhpc1tzXSxpPXRbKG49dC5sZW5ndGgtbCktMV0scj0tMTsrK3I8bjspbGEobz10W3JdLHUsYSk/KGxhKGksdSxhKXx8ZS5wdXNoKHNhKGksbyx1LGEpKSxlLnB1c2gobykpOmxhKGksdSxhKSYmZS5wdXNoKHNhKGksbyx1LGEpKSxpPW87bCYmZS5wdXNoKGVbMF0pLHU9YX1yZXR1cm4gZX07dmFyIHVhLGZhLGRhLHBhLGhhLGdhPVtdLHZhPVtdO2Z1bmN0aW9uIG1hKCl7SWEodGhpcyksdGhpcy5lZGdlPXRoaXMuc2l0ZT10aGlzLmNpcmNsZT1udWxsfWZ1bmN0aW9uIHlhKGUpe3ZhciB0PWdhLnBvcCgpfHxuZXcgbWE7cmV0dXJuIHQuc2l0ZT1lLHR9ZnVuY3Rpb24geGEoZSl7U2EoZSksZGEucmVtb3ZlKGUpLGdhLnB1c2goZSksSWEoZSl9ZnVuY3Rpb24gYmEoZSl7dmFyIHQ9ZS5jaXJjbGUscj10Lngsbj10LmN5LGE9e3g6cix5Om59LGk9ZS5QLG89ZS5OLGw9W2VdO3hhKGUpO2Zvcih2YXIgcz1pO3MuY2lyY2xlJiZ5KHItcy5jaXJjbGUueCk8a2UmJnkobi1zLmNpcmNsZS5jeSk8a2U7KWk9cy5QLGwudW5zaGlmdChzKSx4YShzKSxzPWk7bC51bnNoaWZ0KHMpLFNhKHMpO2Zvcih2YXIgYz1vO2MuY2lyY2xlJiZ5KHItYy5jaXJjbGUueCk8a2UmJnkobi1jLmNpcmNsZS5jeSk8a2U7KW89Yy5OLGwucHVzaChjKSx4YShjKSxjPW87bC5wdXNoKGMpLFNhKGMpO3ZhciB1LGY9bC5sZW5ndGg7Zm9yKHU9MTt1PGY7Kyt1KWM9bFt1XSxzPWxbdS0xXSx6YShjLmVkZ2Uscy5zaXRlLGMuc2l0ZSxhKTtzPWxbMF0sKGM9bFtmLTFdKS5lZGdlPURhKHMuc2l0ZSxjLnNpdGUsbnVsbCxhKSxMYShzKSxMYShjKX1mdW5jdGlvbiBfYShlKXtmb3IodmFyIHQscixuLGEsaT1lLngsbz1lLnksbD1kYS5fO2w7KWlmKChuPXdhKGwsbyktaSk+a2UpbD1sLkw7ZWxzZXtpZighKChhPWktVGEobCxvKSk+a2UpKXtuPi1rZT8odD1sLlAscj1sKTphPi1rZT8odD1sLHI9bC5OKTp0PXI9bDticmVha31pZighbC5SKXt0PWw7YnJlYWt9bD1sLlJ9dmFyIHM9eWEoZSk7aWYoZGEuaW5zZXJ0KHQscyksdHx8cil7aWYodD09PXIpcmV0dXJuIFNhKHQpLHI9eWEodC5zaXRlKSxkYS5pbnNlcnQocyxyKSxzLmVkZ2U9ci5lZGdlPURhKHQuc2l0ZSxzLnNpdGUpLExhKHQpLHZvaWQgTGEocik7aWYocil7U2EodCksU2Eocik7dmFyIGM9dC5zaXRlLHU9Yy54LGY9Yy55LGQ9ZS54LXUscD1lLnktZixoPXIuc2l0ZSxnPWgueC11LHY9aC55LWYsbT0yKihkKnYtcCpnKSx5PWQqZCtwKnAseD1nKmcrdip2LGI9e3g6KHYqeS1wKngpL20rdSx5OihkKngtZyp5KS9tK2Z9O3phKHIuZWRnZSxjLGgsYikscy5lZGdlPURhKGMsZSxudWxsLGIpLHIuZWRnZT1EYShlLGgsbnVsbCxiKSxMYSh0KSxMYShyKX1lbHNlIHMuZWRnZT1EYSh0LnNpdGUscy5zaXRlKX19ZnVuY3Rpb24gd2EoZSx0KXt2YXIgcj1lLnNpdGUsbj1yLngsYT1yLnksaT1hLXQ7aWYoIWkpcmV0dXJuIG47dmFyIG89ZS5QO2lmKCFvKXJldHVybi0xLzA7dmFyIGw9KHI9by5zaXRlKS54LHM9ci55LGM9cy10O2lmKCFjKXJldHVybiBsO3ZhciB1PWwtbixmPTEvaS0xL2MsZD11L2M7cmV0dXJuIGY/KC1kK01hdGguc3FydChkKmQtMipmKih1KnUvKC0yKmMpLXMrYy8yK2EtaS8yKSkpL2YrbjoobitsKS8yfWZ1bmN0aW9uIFRhKGUsdCl7dmFyIHI9ZS5OO2lmKHIpcmV0dXJuIHdhKHIsdCk7dmFyIG49ZS5zaXRlO3JldHVybiBuLnk9PT10P24ueDoxLzB9ZnVuY3Rpb24ga2EoZSl7dGhpcy5zaXRlPWUsdGhpcy5lZGdlcz1bXX1mdW5jdGlvbiBNYShlLHQpe3JldHVybiB0LmFuZ2xlLWUuYW5nbGV9ZnVuY3Rpb24gQWEoKXtJYSh0aGlzKSx0aGlzLng9dGhpcy55PXRoaXMuYXJjPXRoaXMuc2l0ZT10aGlzLmN5PW51bGx9ZnVuY3Rpb24gTGEoZSl7dmFyIHQ9ZS5QLHI9ZS5OO2lmKHQmJnIpe3ZhciBuPXQuc2l0ZSxhPWUuc2l0ZSxpPXIuc2l0ZTtpZihuIT09aSl7dmFyIG89YS54LGw9YS55LHM9bi54LW8sYz1uLnktbCx1PWkueC1vLGY9Mioocyoodj1pLnktbCktYyp1KTtpZighKGY+PS1NZSkpe3ZhciBkPXMqcytjKmMscD11KnUrdip2LGg9KHYqZC1jKnApL2YsZz0ocypwLXUqZCkvZix2PWcrbCxtPXZhLnBvcCgpfHxuZXcgQWE7bS5hcmM9ZSxtLnNpdGU9YSxtLng9aCtvLG0ueT12K01hdGguc3FydChoKmgrZypnKSxtLmN5PXYsZS5jaXJjbGU9bTtmb3IodmFyIHk9bnVsbCx4PWhhLl87eDspaWYobS55PHgueXx8bS55PT09eC55JiZtLng8PXgueCl7aWYoIXguTCl7eT14LlA7YnJlYWt9eD14Lkx9ZWxzZXtpZigheC5SKXt5PXg7YnJlYWt9eD14LlJ9aGEuaW5zZXJ0KHksbSkseXx8KHBhPW0pfX19fWZ1bmN0aW9uIFNhKGUpe3ZhciB0PWUuY2lyY2xlO3QmJih0LlB8fChwYT10Lk4pLGhhLnJlbW92ZSh0KSx2YS5wdXNoKHQpLElhKHQpLGUuY2lyY2xlPW51bGwpfWZ1bmN0aW9uIENhKGUsdCl7dmFyIHI9ZS5iO2lmKHIpcmV0dXJuITA7dmFyIG4sYSxpPWUuYSxvPXRbMF1bMF0sbD10WzFdWzBdLHM9dFswXVsxXSxjPXRbMV1bMV0sdT1lLmwsZj1lLnIsZD11LngscD11LnksaD1mLngsZz1mLnksdj0oZCtoKS8yLG09KHArZykvMjtpZihnPT09cCl7aWYodjxvfHx2Pj1sKXJldHVybjtpZihkPmgpe2lmKGkpe2lmKGkueT49YylyZXR1cm59ZWxzZSBpPXt4OnYseTpzfTtyPXt4OnYseTpjfX1lbHNle2lmKGkpe2lmKGkueTxzKXJldHVybn1lbHNlIGk9e3g6dix5OmN9O3I9e3g6dix5OnN9fX1lbHNlIGlmKGE9bS0obj0oZC1oKS8oZy1wKSkqdixuPC0xfHxuPjEpaWYoZD5oKXtpZihpKXtpZihpLnk+PWMpcmV0dXJufWVsc2UgaT17eDoocy1hKS9uLHk6c307cj17eDooYy1hKS9uLHk6Y319ZWxzZXtpZihpKXtpZihpLnk8cylyZXR1cm59ZWxzZSBpPXt4OihjLWEpL24seTpjfTtyPXt4OihzLWEpL24seTpzfX1lbHNlIGlmKHA8Zyl7aWYoaSl7aWYoaS54Pj1sKXJldHVybn1lbHNlIGk9e3g6byx5Om4qbythfTtyPXt4OmwseTpuKmwrYX19ZWxzZXtpZihpKXtpZihpLng8bylyZXR1cm59ZWxzZSBpPXt4OmwseTpuKmwrYX07cj17eDpvLHk6bipvK2F9fXJldHVybiBlLmE9aSxlLmI9ciwhMH1mdW5jdGlvbiBPYShlLHQpe3RoaXMubD1lLHRoaXMucj10LHRoaXMuYT10aGlzLmI9bnVsbH1mdW5jdGlvbiBEYShlLHQscixuKXt2YXIgYT1uZXcgT2EoZSx0KTtyZXR1cm4gdWEucHVzaChhKSxyJiZ6YShhLGUsdCxyKSxuJiZ6YShhLHQsZSxuKSxmYVtlLmldLmVkZ2VzLnB1c2gobmV3IFJhKGEsZSx0KSksZmFbdC5pXS5lZGdlcy5wdXNoKG5ldyBSYShhLHQsZSkpLGF9ZnVuY3Rpb24gUGEoZSx0LHIpe3ZhciBuPW5ldyBPYShlLG51bGwpO3JldHVybiBuLmE9dCxuLmI9cix1YS5wdXNoKG4pLG59ZnVuY3Rpb24gemEoZSx0LHIsbil7ZS5hfHxlLmI/ZS5sPT09cj9lLmI9bjplLmE9bjooZS5hPW4sZS5sPXQsZS5yPXIpfWZ1bmN0aW9uIFJhKGUsdCxyKXt2YXIgbj1lLmEsYT1lLmI7dGhpcy5lZGdlPWUsdGhpcy5zaXRlPXQsdGhpcy5hbmdsZT1yP01hdGguYXRhbjIoci55LXQueSxyLngtdC54KTplLmw9PT10P01hdGguYXRhbjIoYS54LW4ueCxuLnktYS55KTpNYXRoLmF0YW4yKG4ueC1hLngsYS55LW4ueSl9ZnVuY3Rpb24gRWEoKXt0aGlzLl89bnVsbH1mdW5jdGlvbiBJYShlKXtlLlU9ZS5DPWUuTD1lLlI9ZS5QPWUuTj1udWxsfWZ1bmN0aW9uIEZhKGUsdCl7dmFyIHI9dCxuPXQuUixhPXIuVTthP2EuTD09PXI/YS5MPW46YS5SPW46ZS5fPW4sbi5VPWEsci5VPW4sci5SPW4uTCxyLlImJihyLlIuVT1yKSxuLkw9cn1mdW5jdGlvbiBOYShlLHQpe3ZhciByPXQsbj10LkwsYT1yLlU7YT9hLkw9PT1yP2EuTD1uOmEuUj1uOmUuXz1uLG4uVT1hLHIuVT1uLHIuTD1uLlIsci5MJiYoci5MLlU9ciksbi5SPXJ9ZnVuY3Rpb24gSGEoZSl7Zm9yKDtlLkw7KWU9ZS5MO3JldHVybiBlfWZ1bmN0aW9uIGphKGUsdCl7dmFyIHIsbixhLGk9ZS5zb3J0KEJhKS5wb3AoKTtmb3IodWE9W10sZmE9bmV3IEFycmF5KGUubGVuZ3RoKSxkYT1uZXcgRWEsaGE9bmV3IEVhOzspaWYoYT1wYSxpJiYoIWF8fGkueTxhLnl8fGkueT09PWEueSYmaS54PGEueCkpaS54PT09ciYmaS55PT09bnx8KGZhW2kuaV09bmV3IGthKGkpLF9hKGkpLHI9aS54LG49aS55KSxpPWUucG9wKCk7ZWxzZXtpZighYSlicmVhaztiYShhLmFyYyl9dCYmKGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPXVhLG49cm4oZVswXVswXSxlWzBdWzFdLGVbMV1bMF0sZVsxXVsxXSksYT1yLmxlbmd0aDthLS07KSghQ2EodD1yW2FdLGUpfHwhbih0KXx8eSh0LmEueC10LmIueCk8a2UmJnkodC5hLnktdC5iLnkpPGtlKSYmKHQuYT10LmI9bnVsbCxyLnNwbGljZShhLDEpKX0odCksZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHIsbixhLGksbyxsLHMsYyx1LGY9ZVswXVswXSxkPWVbMV1bMF0scD1lWzBdWzFdLGg9ZVsxXVsxXSxnPWZhLHY9Zy5sZW5ndGg7di0tOylpZigoaT1nW3ZdKSYmaS5wcmVwYXJlKCkpZm9yKHM9KGw9aS5lZGdlcykubGVuZ3RoLG89MDtvPHM7KW49KHU9bFtvXS5lbmQoKSkueCxhPXUueSx0PShjPWxbKytvJXNdLnN0YXJ0KCkpLngscj1jLnksKHkobi10KT5rZXx8eShhLXIpPmtlKSYmKGwuc3BsaWNlKG8sMCxuZXcgUmEoUGEoaS5zaXRlLHUseShuLWYpPGtlJiZoLWE+a2U/e3g6Zix5OnkodC1mKTxrZT9yOmh9OnkoYS1oKTxrZSYmZC1uPmtlP3t4Onkoci1oKTxrZT90OmQseTpofTp5KG4tZCk8a2UmJmEtcD5rZT97eDpkLHk6eSh0LWQpPGtlP3I6cH06eShhLXApPGtlJiZuLWY+a2U/e3g6eShyLXApPGtlP3Q6Zix5OnB9Om51bGwpLGkuc2l0ZSxudWxsKSksKytzKX0odCkpO3ZhciBvPXtjZWxsczpmYSxlZGdlczp1YX07cmV0dXJuIGRhPWhhPXVhPWZhPW51bGwsb31mdW5jdGlvbiBCYShlLHQpe3JldHVybiB0LnktZS55fHx0LngtZS54fWthLnByb3RvdHlwZS5wcmVwYXJlPWZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQ9dGhpcy5lZGdlcyxyPXQubGVuZ3RoO3ItLTspKGU9dFtyXS5lZGdlKS5iJiZlLmF8fHQuc3BsaWNlKHIsMSk7cmV0dXJuIHQuc29ydChNYSksdC5sZW5ndGh9LFJhLnByb3RvdHlwZT17c3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGdlLmw9PT10aGlzLnNpdGU/dGhpcy5lZGdlLmE6dGhpcy5lZGdlLmJ9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2UubD09PXRoaXMuc2l0ZT90aGlzLmVkZ2UuYjp0aGlzLmVkZ2UuYX19LEVhLnByb3RvdHlwZT17aW5zZXJ0OmZ1bmN0aW9uKGUsdCl7dmFyIHIsbixhO2lmKGUpe2lmKHQuUD1lLHQuTj1lLk4sZS5OJiYoZS5OLlA9dCksZS5OPXQsZS5SKXtmb3IoZT1lLlI7ZS5MOyllPWUuTDtlLkw9dH1lbHNlIGUuUj10O3I9ZX1lbHNlIHRoaXMuXz8oZT1IYSh0aGlzLl8pLHQuUD1udWxsLHQuTj1lLGUuUD1lLkw9dCxyPWUpOih0LlA9dC5OPW51bGwsdGhpcy5fPXQscj1udWxsKTtmb3IodC5MPXQuUj1udWxsLHQuVT1yLHQuQz0hMCxlPXQ7ciYmci5DOylyPT09KG49ci5VKS5MPyhhPW4uUikmJmEuQz8oci5DPWEuQz0hMSxuLkM9ITAsZT1uKTooZT09PXIuUiYmKEZhKHRoaXMscikscj0oZT1yKS5VKSxyLkM9ITEsbi5DPSEwLE5hKHRoaXMsbikpOihhPW4uTCkmJmEuQz8oci5DPWEuQz0hMSxuLkM9ITAsZT1uKTooZT09PXIuTCYmKE5hKHRoaXMscikscj0oZT1yKS5VKSxyLkM9ITEsbi5DPSEwLEZhKHRoaXMsbikpLHI9ZS5VO3RoaXMuXy5DPSExfSxyZW1vdmU6ZnVuY3Rpb24oZSl7ZS5OJiYoZS5OLlA9ZS5QKSxlLlAmJihlLlAuTj1lLk4pLGUuTj1lLlA9bnVsbDt2YXIgdCxyLG4sYT1lLlUsaT1lLkwsbz1lLlI7aWYocj1pP28/SGEobyk6aTpvLGE/YS5MPT09ZT9hLkw9cjphLlI9cjp0aGlzLl89cixpJiZvPyhuPXIuQyxyLkM9ZS5DLHIuTD1pLGkuVT1yLHIhPT1vPyhhPXIuVSxyLlU9ZS5VLGU9ci5SLGEuTD1lLHIuUj1vLG8uVT1yKTooci5VPWEsYT1yLGU9ci5SKSk6KG49ZS5DLGU9ciksZSYmKGUuVT1hKSwhbilpZihlJiZlLkMpZS5DPSExO2Vsc2V7ZG97aWYoZT09PXRoaXMuXylicmVhaztpZihlPT09YS5MKXtpZigodD1hLlIpLkMmJih0LkM9ITEsYS5DPSEwLEZhKHRoaXMsYSksdD1hLlIpLHQuTCYmdC5MLkN8fHQuUiYmdC5SLkMpe3QuUiYmdC5SLkN8fCh0LkwuQz0hMSx0LkM9ITAsTmEodGhpcyx0KSx0PWEuUiksdC5DPWEuQyxhLkM9dC5SLkM9ITEsRmEodGhpcyxhKSxlPXRoaXMuXzticmVha319ZWxzZSBpZigodD1hLkwpLkMmJih0LkM9ITEsYS5DPSEwLE5hKHRoaXMsYSksdD1hLkwpLHQuTCYmdC5MLkN8fHQuUiYmdC5SLkMpe3QuTCYmdC5MLkN8fCh0LlIuQz0hMSx0LkM9ITAsRmEodGhpcyx0KSx0PWEuTCksdC5DPWEuQyxhLkM9dC5MLkM9ITEsTmEodGhpcyxhKSxlPXRoaXMuXzticmVha310LkM9ITAsZT1hLGE9YS5VfXdoaWxlKCFlLkMpO2UmJihlLkM9ITEpfX19LGUuZ2VvbS52b3Jvbm9pPWZ1bmN0aW9uKGUpe3ZhciB0PXJhLHI9bmEsbj10LGE9cixpPVZhO2lmKGUpcmV0dXJuIG8oZSk7ZnVuY3Rpb24gbyhlKXt2YXIgdD1uZXcgQXJyYXkoZS5sZW5ndGgpLHI9aVswXVswXSxuPWlbMF1bMV0sYT1pWzFdWzBdLG89aVsxXVsxXTtyZXR1cm4gamEobChlKSxpKS5jZWxscy5mb3JFYWNoKChmdW5jdGlvbihpLGwpe3ZhciBzPWkuZWRnZXMsYz1pLnNpdGU7KHRbbF09cy5sZW5ndGg/cy5tYXAoKGZ1bmN0aW9uKGUpe3ZhciB0PWUuc3RhcnQoKTtyZXR1cm5bdC54LHQueV19KSk6Yy54Pj1yJiZjLng8PWEmJmMueT49biYmYy55PD1vP1tbcixvXSxbYSxvXSxbYSxuXSxbcixuXV06W10pLnBvaW50PWVbbF19KSksdH1mdW5jdGlvbiBsKGUpe3JldHVybiBlLm1hcCgoZnVuY3Rpb24oZSx0KXtyZXR1cm57eDpNYXRoLnJvdW5kKG4oZSx0KS9rZSkqa2UseTpNYXRoLnJvdW5kKGEoZSx0KS9rZSkqa2UsaTp0fX0pKX1yZXR1cm4gby5saW5rcz1mdW5jdGlvbihlKXtyZXR1cm4gamEobChlKSkuZWRnZXMuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS5sJiZlLnJ9KSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm57c291cmNlOmVbdC5sLmldLHRhcmdldDplW3Quci5pXX19KSl9LG8udHJpYW5nbGVzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiBqYShsKGUpKS5jZWxscy5mb3JFYWNoKChmdW5jdGlvbihyLG4pe2Zvcih2YXIgYSxpLG8sbCxzPXIuc2l0ZSxjPXIuZWRnZXMuc29ydChNYSksdT0tMSxmPWMubGVuZ3RoLGQ9Y1tmLTFdLmVkZ2UscD1kLmw9PT1zP2QucjpkLmw7Kyt1PGY7KWQsYT1wLHA9KGQ9Y1t1XS5lZGdlKS5sPT09cz9kLnI6ZC5sLG48YS5pJiZuPHAuaSYmKG89YSxsPXAsKChpPXMpLngtbC54KSooby55LWkueSktKGkueC1vLngpKihsLnktaS55KTwwKSYmdC5wdXNoKFtlW25dLGVbYS5pXSxlW3AuaV1dKX0pKSx0fSxvLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49aHQodD1lKSxvKTp0fSxvLnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9aHQocj1lKSxvKTpyfSxvLmNsaXBFeHRlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bnVsbD09ZT9WYTplLG8pOmk9PT1WYT9udWxsOml9LG8uc2l6ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9vLmNsaXBFeHRlbnQoZSYmW1swLDBdLGVdKTppPT09VmE/bnVsbDppJiZpWzFdfSxvfTt2YXIgVmE9W1stMWU2LC0xZTZdLFsxZTYsMWU2XV07ZnVuY3Rpb24gVWEoZSl7cmV0dXJuIGUueH1mdW5jdGlvbiBxYShlKXtyZXR1cm4gZS55fWZ1bmN0aW9uIEdhKGUsdCxyLG4sYSxpKXtpZighZSh0LHIsbixhLGkpKXt2YXIgbz0uNSoocithKSxsPS41KihuK2kpLHM9dC5ub2RlcztzWzBdJiZHYShlLHNbMF0scixuLG8sbCksc1sxXSYmR2EoZSxzWzFdLG8sbixhLGwpLHNbMl0mJkdhKGUsc1syXSxyLGwsbyxpKSxzWzNdJiZHYShlLHNbM10sbyxsLGEsaSl9fWZ1bmN0aW9uIFphKGUsdCxyLG4sYSxpLG8pe3ZhciBsLHM9MS8wO3JldHVybiBmdW5jdGlvbiBlKGMsdSxmLGQscCl7aWYoISh1Pml8fGY+b3x8ZDxufHxwPGEpKXtpZihoPWMucG9pbnQpe3ZhciBoLGc9dC1jLngsdj1yLWMueSxtPWcqZyt2KnY7aWYobTxzKXt2YXIgeT1NYXRoLnNxcnQocz1tKTtuPXQteSxhPXIteSxpPXQreSxvPXIreSxsPWh9fWZvcih2YXIgeD1jLm5vZGVzLGI9LjUqKHUrZCksXz0uNSooZitwKSx3PShyPj1fKTw8MXx0Pj1iLFQ9dys0O3c8VDsrK3cpaWYoYz14WzMmd10pc3dpdGNoKDMmdyl7Y2FzZSAwOmUoYyx1LGYsYixfKTticmVhaztjYXNlIDE6ZShjLGIsZixkLF8pO2JyZWFrO2Nhc2UgMjplKGMsdSxfLGIscCk7YnJlYWs7Y2FzZSAzOmUoYyxiLF8sZCxwKX19fShlLG4sYSxpLG8pLGx9ZnVuY3Rpb24gWWEodCxyKXt0PWUucmdiKHQpLHI9ZS5yZ2Iocik7dmFyIG49dC5yLGE9dC5nLGk9dC5iLG89ci5yLW4sbD1yLmctYSxzPXIuYi1pO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4iIyIrbHQoTWF0aC5yb3VuZChuK28qZSkpK2x0KE1hdGgucm91bmQoYStsKmUpKStsdChNYXRoLnJvdW5kKGkrcyplKSl9fWZ1bmN0aW9uIFhhKGUsdCl7dmFyIHIsbj17fSxhPXt9O2ZvcihyIGluIGUpciBpbiB0P25bcl09S2EoZVtyXSx0W3JdKTphW3JdPWVbcl07Zm9yKHIgaW4gdClyIGluIGV8fChhW3JdPXRbcl0pO3JldHVybiBmdW5jdGlvbihlKXtmb3IociBpbiBuKWFbcl09bltyXShlKTtyZXR1cm4gYX19ZnVuY3Rpb24gV2EoZSx0KXtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKHIpe3JldHVybiBlKigxLXIpK3Qqcn19ZnVuY3Rpb24gUWEoZSx0KXt2YXIgcixuLGEsaT1KYS5sYXN0SW5kZXg9JGEubGFzdEluZGV4PTAsbz0tMSxsPVtdLHM9W107Zm9yKGUrPSIiLHQrPSIiOyhyPUphLmV4ZWMoZSkpJiYobj0kYS5leGVjKHQpKTspKGE9bi5pbmRleCk+aSYmKGE9dC5zbGljZShpLGEpLGxbb10/bFtvXSs9YTpsWysrb109YSksKHI9clswXSk9PT0obj1uWzBdKT9sW29dP2xbb10rPW46bFsrK29dPW46KGxbKytvXT1udWxsLHMucHVzaCh7aTpvLHg6V2EocixuKX0pKSxpPSRhLmxhc3RJbmRleDtyZXR1cm4gaTx0Lmxlbmd0aCYmKGE9dC5zbGljZShpKSxsW29dP2xbb10rPWE6bFsrK29dPWEpLGwubGVuZ3RoPDI/c1swXT8odD1zWzBdLngsZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSkrIiJ9KTpmdW5jdGlvbigpe3JldHVybiB0fToodD1zLmxlbmd0aCxmdW5jdGlvbihlKXtmb3IodmFyIHIsbj0wO248dDsrK24pbFsocj1zW25dKS5pXT1yLngoZSk7cmV0dXJuIGwuam9pbigiIil9KX1lLmdlb20uZGVsYXVuYXk9ZnVuY3Rpb24odCl7cmV0dXJuIGUuZ2VvbS52b3Jvbm9pKCkudHJpYW5nbGVzKHQpfSxlLmdlb20ucXVhZHRyZWU9ZnVuY3Rpb24oZSx0LHIsbixhKXt2YXIgaSxvPXJhLGw9bmE7aWYoaT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiBvPVVhLGw9cWEsMz09PWkmJihhPXIsbj10LHI9dD0wKSxzKGUpO2Z1bmN0aW9uIHMoZSl7dmFyIHMsYyx1LGYsZCxwLGgsZyx2LG09aHQobykseD1odChsKTtpZihudWxsIT10KXA9dCxoPXIsZz1uLHY9YTtlbHNlIGlmKGc9dj0tKHA9aD0xLzApLGM9W10sdT1bXSxkPWUubGVuZ3RoLGkpZm9yKGY9MDtmPGQ7KytmKShzPWVbZl0pLng8cCYmKHA9cy54KSxzLnk8aCYmKGg9cy55KSxzLng+ZyYmKGc9cy54KSxzLnk+diYmKHY9cy55KSxjLnB1c2gocy54KSx1LnB1c2gocy55KTtlbHNlIGZvcihmPTA7ZjxkOysrZil7dmFyIGI9K20ocz1lW2ZdLGYpLF89K3gocyxmKTtiPHAmJihwPWIpLF88aCYmKGg9XyksYj5nJiYoZz1iKSxfPnYmJih2PV8pLGMucHVzaChiKSx1LnB1c2goXyl9dmFyIHc9Zy1wLFQ9di1oO2Z1bmN0aW9uIGsoZSx0LHIsbixhLGksbyxsKXtpZighaXNOYU4ocikmJiFpc05hTihuKSlpZihlLmxlYWYpe3ZhciBzPWUueCxjPWUueTtpZihudWxsIT1zKWlmKHkocy1yKSt5KGMtbik8LjAxKU0oZSx0LHIsbixhLGksbyxsKTtlbHNle3ZhciB1PWUucG9pbnQ7ZS54PWUueT1lLnBvaW50PW51bGwsTShlLHUscyxjLGEsaSxvLGwpLE0oZSx0LHIsbixhLGksbyxsKX1lbHNlIGUueD1yLGUueT1uLGUucG9pbnQ9dH1lbHNlIE0oZSx0LHIsbixhLGksbyxsKX1mdW5jdGlvbiBNKGUsdCxyLG4sYSxpLG8sbCl7dmFyIHM9LjUqKGErbyksYz0uNSooaStsKSx1PXI+PXMsZj1uPj1jLGQ9Zjw8MXx1O2UubGVhZj0hMSx1P2E9czpvPXMsZj9pPWM6bD1jLGsoZT1lLm5vZGVzW2RdfHwoZS5ub2Rlc1tkXT17bGVhZjohMCxub2RlczpbXSxwb2ludDpudWxsLHg6bnVsbCx5Om51bGx9KSx0LHIsbixhLGksbyxsKX13PlQ/dj1oK3c6Zz1wK1Q7dmFyIEE9e2xlYWY6ITAsbm9kZXM6W10scG9pbnQ6bnVsbCx4Om51bGwseTpudWxsLGFkZDpmdW5jdGlvbihlKXtrKEEsZSwrbShlLCsrZiksK3goZSxmKSxwLGgsZyx2KX0sdmlzaXQ6ZnVuY3Rpb24oZSl7R2EoZSxBLHAsaCxnLHYpfSxmaW5kOmZ1bmN0aW9uKGUpe3JldHVybiBaYShBLGVbMF0sZVsxXSxwLGgsZyx2KX19O2lmKGY9LTEsbnVsbD09dCl7Zm9yKDsrK2Y8ZDspayhBLGVbZl0sY1tmXSx1W2ZdLHAsaCxnLHYpOy0tZn1lbHNlIGUuZm9yRWFjaChBLmFkZCk7cmV0dXJuIGM9dT1lPXM9bnVsbCxBfXJldHVybiBzLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ZSxzKTpvfSxzLnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9ZSxzKTpsfSxzLmV4dGVudD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09ZT90PXI9bj1hPW51bGw6KHQ9K2VbMF1bMF0scj0rZVswXVsxXSxuPStlWzFdWzBdLGE9K2VbMV1bMV0pLHMpOm51bGw9PXQ/bnVsbDpbW3Qscl0sW24sYV1dfSxzLnNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PWU/dD1yPW49YT1udWxsOih0PXI9MCxuPStlWzBdLGE9K2VbMV0pLHMpOm51bGw9PXQ/bnVsbDpbbi10LGEtcl19LHN9LGUuaW50ZXJwb2xhdGVSZ2I9WWEsZS5pbnRlcnBvbGF0ZU9iamVjdD1YYSxlLmludGVycG9sYXRlTnVtYmVyPVdhLGUuaW50ZXJwb2xhdGVTdHJpbmc9UWE7dmFyIEphPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZywkYT1uZXcgUmVnRXhwKEphLnNvdXJjZSwiZyIpO2Z1bmN0aW9uIEthKHQscil7Zm9yKHZhciBuLGE9ZS5pbnRlcnBvbGF0b3JzLmxlbmd0aDstLWE+PTAmJiEobj1lLmludGVycG9sYXRvcnNbYV0odCxyKSk7KTtyZXR1cm4gbn1mdW5jdGlvbiBlaShlLHQpe3ZhciByLG49W10sYT1bXSxpPWUubGVuZ3RoLG89dC5sZW5ndGgsbD1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCk7Zm9yKHI9MDtyPGw7KytyKW4ucHVzaChLYShlW3JdLHRbcl0pKTtmb3IoO3I8aTsrK3IpYVtyXT1lW3JdO2Zvcig7cjxvOysrcilhW3JdPXRbcl07cmV0dXJuIGZ1bmN0aW9uKGUpe2ZvcihyPTA7cjxsOysrcilhW3JdPW5bcl0oZSk7cmV0dXJuIGF9fWUuaW50ZXJwb2xhdGU9S2EsZS5pbnRlcnBvbGF0b3JzPVtmdW5jdGlvbihlLHQpe3ZhciByPXR5cGVvZiB0O3JldHVybigic3RyaW5nIj09PXI/cHQuaGFzKHQudG9Mb3dlckNhc2UoKSl8fC9eKCN8cmdiXCh8aHNsXCgpL2kudGVzdCh0KT9ZYTpRYTp0IGluc3RhbmNlb2YgVmU/WWE6QXJyYXkuaXNBcnJheSh0KT9laToib2JqZWN0Ij09PXImJmlzTmFOKHQpP1hhOldhKShlLHQpfV0sZS5pbnRlcnBvbGF0ZUFycmF5PWVpO3ZhciB0aT1mdW5jdGlvbigpe3JldHVybiBPfSxyaT1lLm1hcCh7bGluZWFyOnRpLHBvbHk6ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdyh0LGUpfX0scXVhZDpmdW5jdGlvbigpe3JldHVybiBsaX0sY3ViaWM6ZnVuY3Rpb24oKXtyZXR1cm4gc2l9LHNpbjpmdW5jdGlvbigpe3JldHVybiB1aX0sZXhwOmZ1bmN0aW9uKCl7cmV0dXJuIGZpfSxjaXJjbGU6ZnVuY3Rpb24oKXtyZXR1cm4gZGl9LGVsYXN0aWM6ZnVuY3Rpb24oZSx0KXt2YXIgcjthcmd1bWVudHMubGVuZ3RoPDImJih0PS40NSk7YXJndW1lbnRzLmxlbmd0aD9yPXQvTGUqTWF0aC5hc2luKDEvZSk6KGU9MSxyPXQvNCk7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiAxK2UqTWF0aC5wb3coMiwtMTAqbikqTWF0aC5zaW4oKG4tcikqTGUvdCl9fSxiYWNrOmZ1bmN0aW9uKGUpe2V8fChlPTEuNzAxNTgpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdCp0KigoZSsxKSp0LWUpfX0sYm91bmNlOmZ1bmN0aW9uKCl7cmV0dXJuIHBpfX0pLG5pPWUubWFwKHtpbjpPLG91dDppaSwiaW4tb3V0IjpvaSwib3V0LWluIjpmdW5jdGlvbihlKXtyZXR1cm4gb2koaWkoZSkpfX0pO2Z1bmN0aW9uIGFpKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdDw9MD8wOnQ+PTE/MTplKHQpfX1mdW5jdGlvbiBpaShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIDEtZSgxLXQpfX1mdW5jdGlvbiBvaShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuLjUqKHQ8LjU/ZSgyKnQpOjItZSgyLTIqdCkpfX1mdW5jdGlvbiBsaShlKXtyZXR1cm4gZSplfWZ1bmN0aW9uIHNpKGUpe3JldHVybiBlKmUqZX1mdW5jdGlvbiBjaShlKXtpZihlPD0wKXJldHVybiAwO2lmKGU+PTEpcmV0dXJuIDE7dmFyIHQ9ZSplLHI9dCplO3JldHVybiA0KihlPC41P3I6MyooZS10KStyLS43NSl9ZnVuY3Rpb24gdWkoZSl7cmV0dXJuIDEtTWF0aC5jb3MoZSpDZSl9ZnVuY3Rpb24gZmkoZSl7cmV0dXJuIE1hdGgucG93KDIsMTAqKGUtMSkpfWZ1bmN0aW9uIGRpKGUpe3JldHVybiAxLU1hdGguc3FydCgxLWUqZSl9ZnVuY3Rpb24gcGkoZSl7cmV0dXJuIGU8MS8yLjc1PzcuNTYyNSplKmU6ZTwyLzIuNzU/Ny41NjI1KihlLT0xLjUvMi43NSkqZSsuNzU6ZTwyLjUvMi43NT83LjU2MjUqKGUtPTIuMjUvMi43NSkqZSsuOTM3NTo3LjU2MjUqKGUtPTIuNjI1LzIuNzUpKmUrLjk4NDM3NX1mdW5jdGlvbiBoaShlLHQpe3JldHVybiB0LT1lLGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLnJvdW5kKGUrdCpyKX19ZnVuY3Rpb24gZ2koZSl7dmFyIHQscixuLGE9W2UuYSxlLmJdLGk9W2UuYyxlLmRdLG89bWkoYSksbD12aShhLGkpLHM9bWkoKCh0PWkpWzBdKz0obj0tbCkqKHI9YSlbMF0sdFsxXSs9bipyWzFdLHQpKXx8MDthWzBdKmlbMV08aVswXSphWzFdJiYoYVswXSo9LTEsYVsxXSo9LTEsbyo9LTEsbCo9LTEpLHRoaXMucm90YXRlPShvP01hdGguYXRhbjIoYVsxXSxhWzBdKTpNYXRoLmF0YW4yKC1pWzBdLGlbMV0pKSpEZSx0aGlzLnRyYW5zbGF0ZT1bZS5lLGUuZl0sdGhpcy5zY2FsZT1bbyxzXSx0aGlzLnNrZXc9cz9NYXRoLmF0YW4yKGwscykqRGU6MH1mdW5jdGlvbiB2aShlLHQpe3JldHVybiBlWzBdKnRbMF0rZVsxXSp0WzFdfWZ1bmN0aW9uIG1pKGUpe3ZhciB0PU1hdGguc3FydCh2aShlLGUpKTtyZXR1cm4gdCYmKGVbMF0vPXQsZVsxXS89dCksdH1lLmVhc2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pbmRleE9mKCItIiksbj10Pj0wP2Uuc2xpY2UoMCx0KTplLGE9dD49MD9lLnNsaWNlKHQrMSk6ImluIjtyZXR1cm4gbj1yaS5nZXQobil8fHRpLGFpKChhPW5pLmdldChhKXx8Tykobi5hcHBseShudWxsLHIuY2FsbChhcmd1bWVudHMsMSkpKSl9LGUuaW50ZXJwb2xhdGVIY2w9ZnVuY3Rpb24odCxyKXt0PWUuaGNsKHQpLHI9ZS5oY2wocik7dmFyIG49dC5oLGE9dC5jLGk9dC5sLG89ci5oLW4sbD1yLmMtYSxzPXIubC1pO2lzTmFOKGwpJiYobD0wLGE9aXNOYU4oYSk/ci5jOmEpO2lzTmFOKG8pPyhvPTAsbj1pc05hTihuKT9yLmg6bik6bz4xODA/by09MzYwOm88LTE4MCYmKG8rPTM2MCk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBYZShuK28qZSxhK2wqZSxpK3MqZSkrIiJ9fSxlLmludGVycG9sYXRlSHNsPWZ1bmN0aW9uKHQscil7dD1lLmhzbCh0KSxyPWUuaHNsKHIpO3ZhciBuPXQuaCxhPXQucyxpPXQubCxvPXIuaC1uLGw9ci5zLWEscz1yLmwtaTtpc05hTihsKSYmKGw9MCxhPWlzTmFOKGEpP3IuczphKTtpc05hTihvKT8obz0wLG49aXNOYU4obik/ci5oOm4pOm8+MTgwP28tPTM2MDpvPC0xODAmJihvKz0zNjApO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gR2UobitvKmUsYStsKmUsaStzKmUpKyIifX0sZS5pbnRlcnBvbGF0ZUxhYj1mdW5jdGlvbih0LHIpe3Q9ZS5sYWIodCkscj1lLmxhYihyKTt2YXIgbj10LmwsYT10LmEsaT10LmIsbz1yLmwtbixsPXIuYS1hLHM9ci5iLWk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiAkZShuK28qZSxhK2wqZSxpK3MqZSkrIiJ9fSxlLmludGVycG9sYXRlUm91bmQ9aGksZS50cmFuc2Zvcm09ZnVuY3Rpb24odCl7dmFyIHI9YS5jcmVhdGVFbGVtZW50TlMoZS5ucy5wcmVmaXguc3ZnLCJnIik7cmV0dXJuKGUudHJhbnNmb3JtPWZ1bmN0aW9uKGUpe2lmKG51bGwhPWUpe3Iuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLGUpO3ZhciB0PXIudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKX1yZXR1cm4gbmV3IGdpKHQ/dC5tYXRyaXg6eWkpfSkodCl9LGdpLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJ0cmFuc2xhdGUoIit0aGlzLnRyYW5zbGF0ZSsiKXJvdGF0ZSgiK3RoaXMucm90YXRlKyIpc2tld1goIit0aGlzLnNrZXcrIilzY2FsZSgiK3RoaXMuc2NhbGUrIikifTt2YXIgeWk9e2E6MSxiOjAsYzowLGQ6MSxlOjAsZjowfTtmdW5jdGlvbiB4aShlKXtyZXR1cm4gZS5sZW5ndGg/ZS5wb3AoKSsiLCI6IiJ9ZnVuY3Rpb24gYmkodCxyKXt2YXIgbj1bXSxhPVtdO3JldHVybiB0PWUudHJhbnNmb3JtKHQpLHI9ZS50cmFuc2Zvcm0ociksZnVuY3Rpb24oZSx0LHIsbil7aWYoZVswXSE9PXRbMF18fGVbMV0hPT10WzFdKXt2YXIgYT1yLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsIiwiLG51bGwsIikiKTtuLnB1c2goe2k6YS00LHg6V2EoZVswXSx0WzBdKX0se2k6YS0yLHg6V2EoZVsxXSx0WzFdKX0pfWVsc2UodFswXXx8dFsxXSkmJnIucHVzaCgidHJhbnNsYXRlKCIrdCsiKSIpfSh0LnRyYW5zbGF0ZSxyLnRyYW5zbGF0ZSxuLGEpLGZ1bmN0aW9uKGUsdCxyLG4pe2UhPT10PyhlLXQ+MTgwP3QrPTM2MDp0LWU+MTgwJiYoZSs9MzYwKSxuLnB1c2goe2k6ci5wdXNoKHhpKHIpKyJyb3RhdGUoIixudWxsLCIpIiktMix4OldhKGUsdCl9KSk6dCYmci5wdXNoKHhpKHIpKyJyb3RhdGUoIit0KyIpIil9KHQucm90YXRlLHIucm90YXRlLG4sYSksZnVuY3Rpb24oZSx0LHIsbil7ZSE9PXQ/bi5wdXNoKHtpOnIucHVzaCh4aShyKSsic2tld1goIixudWxsLCIpIiktMix4OldhKGUsdCl9KTp0JiZyLnB1c2goeGkocikrInNrZXdYKCIrdCsiKSIpfSh0LnNrZXcsci5za2V3LG4sYSksZnVuY3Rpb24oZSx0LHIsbil7aWYoZVswXSE9PXRbMF18fGVbMV0hPT10WzFdKXt2YXIgYT1yLnB1c2goeGkocikrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO24ucHVzaCh7aTphLTQseDpXYShlWzBdLHRbMF0pfSx7aTphLTIseDpXYShlWzFdLHRbMV0pfSl9ZWxzZSAxPT09dFswXSYmMT09PXRbMV18fHIucHVzaCh4aShyKSsic2NhbGUoIit0KyIpIil9KHQuc2NhbGUsci5zY2FsZSxuLGEpLHQ9cj1udWxsLGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPS0xLGk9YS5sZW5ndGg7KytyPGk7KW5bKHQ9YVtyXSkuaV09dC54KGUpO3JldHVybiBuLmpvaW4oIiIpfX1mdW5jdGlvbiBfaShlLHQpe3JldHVybiB0PSh0LT1lPStlKXx8MS90LGZ1bmN0aW9uKHIpe3JldHVybihyLWUpL3R9fWZ1bmN0aW9uIHdpKGUsdCl7cmV0dXJuIHQ9KHQtPWU9K2UpfHwxL3QsZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oMSwoci1lKS90KSl9fWZ1bmN0aW9uIFRpKGUpe2Zvcih2YXIgdD1lLnNvdXJjZSxyPWUudGFyZ2V0LG49ZnVuY3Rpb24oZSx0KXtpZihlPT09dClyZXR1cm4gZTt2YXIgcj1raShlKSxuPWtpKHQpLGE9ci5wb3AoKSxpPW4ucG9wKCksbz1udWxsO2Zvcig7YT09PWk7KW89YSxhPXIucG9wKCksaT1uLnBvcCgpO3JldHVybiBvfSh0LHIpLGE9W3RdO3QhPT1uOyl0PXQucGFyZW50LGEucHVzaCh0KTtmb3IodmFyIGk9YS5sZW5ndGg7ciE9PW47KWEuc3BsaWNlKGksMCxyKSxyPXIucGFyZW50O3JldHVybiBhfWZ1bmN0aW9uIGtpKGUpe2Zvcih2YXIgdD1bXSxyPWUucGFyZW50O251bGwhPXI7KXQucHVzaChlKSxlPXIscj1yLnBhcmVudDtyZXR1cm4gdC5wdXNoKGUpLHR9ZnVuY3Rpb24gTWkoZSl7ZS5maXhlZHw9Mn1mdW5jdGlvbiBBaShlKXtlLmZpeGVkJj0tN31mdW5jdGlvbiBMaShlKXtlLmZpeGVkfD00LGUucHg9ZS54LGUucHk9ZS55fWZ1bmN0aW9uIFNpKGUpe2UuZml4ZWQmPS01fWUuaW50ZXJwb2xhdGVUcmFuc2Zvcm09YmksZS5sYXlvdXQ9e30sZS5sYXlvdXQuYnVuZGxlPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPS0xLG49ZS5sZW5ndGg7KytyPG47KXQucHVzaChUaShlW3JdKSk7cmV0dXJuIHR9fSxlLmxheW91dC5jaG9yZD1mdW5jdGlvbigpe3ZhciB0LHIsbixhLGksbyxsLHM9e30sYz0wO2Z1bmN0aW9uIHUoKXt2YXIgcyx1LGQscCxoLGc9e30sdj1bXSxtPWUucmFuZ2UoYSkseT1bXTtmb3IodD1bXSxyPVtdLHM9MCxwPS0xOysrcDxhOyl7Zm9yKHU9MCxoPS0xOysraDxhOyl1Kz1uW3BdW2hdO3YucHVzaCh1KSx5LnB1c2goZS5yYW5nZShhKSkscys9dX1mb3IoaSYmbS5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiBpKHZbZV0sdlt0XSl9KSksbyYmeS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe2Uuc29ydCgoZnVuY3Rpb24oZSxyKXtyZXR1cm4gbyhuW3RdW2VdLG5bdF1bcl0pfSkpfSkpLHM9KExlLWMqYSkvcyx1PTAscD0tMTsrK3A8YTspe2ZvcihkPXUsaD0tMTsrK2g8YTspe3ZhciB4PW1bcF0sYj15W3hdW2hdLF89blt4XVtiXSx3PXUsVD11Kz1fKnM7Z1t4KyItIitiXT17aW5kZXg6eCxzdWJpbmRleDpiLHN0YXJ0QW5nbGU6dyxlbmRBbmdsZTpULHZhbHVlOl99fXJbeF09e2luZGV4Ongsc3RhcnRBbmdsZTpkLGVuZEFuZ2xlOnUsdmFsdWU6dlt4XX0sdSs9Y31mb3IocD0tMTsrK3A8YTspZm9yKGg9cC0xOysraDxhOyl7dmFyIGs9Z1twKyItIitoXSxNPWdbaCsiLSIrcF07KGsudmFsdWV8fE0udmFsdWUpJiZ0LnB1c2goay52YWx1ZTxNLnZhbHVlP3tzb3VyY2U6TSx0YXJnZXQ6a306e3NvdXJjZTprLHRhcmdldDpNfSl9bCYmZigpfWZ1bmN0aW9uIGYoKXt0LnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGwoKGUuc291cmNlLnZhbHVlK2UudGFyZ2V0LnZhbHVlKS8yLCh0LnNvdXJjZS52YWx1ZSt0LnRhcmdldC52YWx1ZSkvMil9KSl9cmV0dXJuIHMubWF0cml4PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPShuPWUpJiZuLmxlbmd0aCx0PXI9bnVsbCxzKTpufSxzLnBhZGRpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ZSx0PXI9bnVsbCxzKTpjfSxzLnNvcnRHcm91cHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ZSx0PXI9bnVsbCxzKTppfSxzLnNvcnRTdWJncm91cHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ZSx0PW51bGwscyk6b30scy5zb3J0Q2hvcmRzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPWUsdCYmZigpLHMpOmx9LHMuY2hvcmRzPWZ1bmN0aW9uKCl7cmV0dXJuIHR8fHUoKSx0fSxzLmdyb3Vwcz1mdW5jdGlvbigpe3JldHVybiByfHx1KCkscn0sc30sZS5sYXlvdXQuZm9yY2U9ZnVuY3Rpb24oKXt2YXIgdCxyLG4sYSxpLG8sbD17fSxzPWUuZGlzcGF0Y2goInN0YXJ0IiwidGljayIsImVuZCIpLGM9WzEsMV0sdT0uOSxmPUNpLGQ9T2kscD0tMzAsaD1EaSxnPS4xLHY9LjY0LG09W10seT1bXTtmdW5jdGlvbiB4KGUpe3JldHVybiBmdW5jdGlvbih0LHIsbixhKXtpZih0LnBvaW50IT09ZSl7dmFyIGk9dC5jeC1lLngsbz10LmN5LWUueSxsPWEtcixzPWkqaStvKm87aWYobCpsL3Y8cyl7aWYoczxoKXt2YXIgYz10LmNoYXJnZS9zO2UucHgtPWkqYyxlLnB5LT1vKmN9cmV0dXJuITB9aWYodC5wb2ludCYmcyYmczxoKXtjPXQucG9pbnRDaGFyZ2UvcztlLnB4LT1pKmMsZS5weS09bypjfX1yZXR1cm4hdC5jaGFyZ2V9fWZ1bmN0aW9uIGIodCl7dC5weD1lLmV2ZW50LngsdC5weT1lLmV2ZW50LnksbC5yZXN1bWUoKX1yZXR1cm4gbC50aWNrPWZ1bmN0aW9uKCl7aWYoKG4qPS45OSk8LjAwNSlyZXR1cm4gdD1udWxsLHMuZW5kKHt0eXBlOiJlbmQiLGFscGhhOm49MH0pLCEwO3ZhciByLGwsZixkLGgsdixiLF8sdyxUPW0ubGVuZ3RoLGs9eS5sZW5ndGg7Zm9yKGw9MDtsPGs7KytsKWQ9KGY9eVtsXSkuc291cmNlLCh2PShfPShoPWYudGFyZ2V0KS54LWQueCkqXysodz1oLnktZC55KSp3KSYmKF8qPXY9bippW2xdKigodj1NYXRoLnNxcnQodikpLWFbbF0pL3Ysdyo9dixoLngtPV8qKGI9ZC53ZWlnaHQraC53ZWlnaHQ/ZC53ZWlnaHQvKGQud2VpZ2h0K2gud2VpZ2h0KTouNSksaC55LT13KmIsZC54Kz1fKihiPTEtYiksZC55Kz13KmIpO2lmKChiPW4qZykmJihfPWNbMF0vMix3PWNbMV0vMixsPS0xLGIpKWZvcig7KytsPFQ7KShmPW1bbF0pLngrPShfLWYueCkqYixmLnkrPSh3LWYueSkqYjtpZihwKWZvcighZnVuY3Rpb24gZSh0LHIsbil7dmFyIGE9MCxpPTA7aWYodC5jaGFyZ2U9MCwhdC5sZWFmKWZvcih2YXIgbyxsPXQubm9kZXMscz1sLmxlbmd0aCxjPS0xOysrYzxzOyludWxsIT0obz1sW2NdKSYmKGUobyxyLG4pLHQuY2hhcmdlKz1vLmNoYXJnZSxhKz1vLmNoYXJnZSpvLmN4LGkrPW8uY2hhcmdlKm8uY3kpO2lmKHQucG9pbnQpe3QubGVhZnx8KHQucG9pbnQueCs9TWF0aC5yYW5kb20oKS0uNSx0LnBvaW50LnkrPU1hdGgucmFuZG9tKCktLjUpO3ZhciB1PXIqblt0LnBvaW50LmluZGV4XTt0LmNoYXJnZSs9dC5wb2ludENoYXJnZT11LGErPXUqdC5wb2ludC54LGkrPXUqdC5wb2ludC55fXQuY3g9YS90LmNoYXJnZSx0LmN5PWkvdC5jaGFyZ2V9KHI9ZS5nZW9tLnF1YWR0cmVlKG0pLG4sbyksbD0tMTsrK2w8VDspKGY9bVtsXSkuZml4ZWR8fHIudmlzaXQoeChmKSk7Zm9yKGw9LTE7KytsPFQ7KShmPW1bbF0pLmZpeGVkPyhmLng9Zi5weCxmLnk9Zi5weSk6KGYueC09KGYucHgtKGYucHg9Zi54KSkqdSxmLnktPShmLnB5LShmLnB5PWYueSkpKnUpO3MudGljayh7dHlwZToidGljayIsYWxwaGE6bn0pfSxsLm5vZGVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPWUsbCk6bX0sbC5saW5rcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT1lLGwpOnl9LGwuc2l6ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1lLGwpOmN9LGwubGlua0Rpc3RhbmNlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6K2UsbCk6Zn0sbC5kaXN0YW5jZT1sLmxpbmtEaXN0YW5jZSxsLmxpbmtTdHJlbmd0aD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOitlLGwpOmR9LGwuZnJpY3Rpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9K2UsbCk6dX0sbC5jaGFyZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTorZSxsKTpwfSxsLmNoYXJnZURpc3RhbmNlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPWUqZSxsKTpNYXRoLnNxcnQoaCl9LGwuZ3Jhdml0eT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0rZSxsKTpnfSxsLnRoZXRhPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PWUqZSxsKTpNYXRoLnNxcnQodil9LGwuYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K2Usbj9lPjA/bj1lOih0LmM9bnVsbCx0LnQ9TmFOLHQ9bnVsbCxzLmVuZCh7dHlwZToiZW5kIixhbHBoYTpuPTB9KSk6ZT4wJiYocy5zdGFydCh7dHlwZToic3RhcnQiLGFscGhhOm49ZX0pLHQ9d3QobC50aWNrKSksbCk6bn0sbC5zdGFydD1mdW5jdGlvbigpe3ZhciBlLHQscixuPW0ubGVuZ3RoLHM9eS5sZW5ndGgsdT1jWzBdLGg9Y1sxXTtmb3IoZT0wO2U8bjsrK2UpKHI9bVtlXSkuaW5kZXg9ZSxyLndlaWdodD0wO2ZvcihlPTA7ZTxzOysrZSkibnVtYmVyIj09dHlwZW9mKHI9eVtlXSkuc291cmNlJiYoci5zb3VyY2U9bVtyLnNvdXJjZV0pLCJudW1iZXIiPT10eXBlb2Ygci50YXJnZXQmJihyLnRhcmdldD1tW3IudGFyZ2V0XSksKytyLnNvdXJjZS53ZWlnaHQsKytyLnRhcmdldC53ZWlnaHQ7Zm9yKGU9MDtlPG47KytlKXI9bVtlXSxpc05hTihyLngpJiYoci54PWcoIngiLHUpKSxpc05hTihyLnkpJiYoci55PWcoInkiLGgpKSxpc05hTihyLnB4KSYmKHIucHg9ci54KSxpc05hTihyLnB5KSYmKHIucHk9ci55KTtpZihhPVtdLCJmdW5jdGlvbiI9PXR5cGVvZiBmKWZvcihlPTA7ZTxzOysrZSlhW2VdPStmLmNhbGwodGhpcyx5W2VdLGUpO2Vsc2UgZm9yKGU9MDtlPHM7KytlKWFbZV09ZjtpZihpPVtdLCJmdW5jdGlvbiI9PXR5cGVvZiBkKWZvcihlPTA7ZTxzOysrZSlpW2VdPStkLmNhbGwodGhpcyx5W2VdLGUpO2Vsc2UgZm9yKGU9MDtlPHM7KytlKWlbZV09ZDtpZihvPVtdLCJmdW5jdGlvbiI9PXR5cGVvZiBwKWZvcihlPTA7ZTxuOysrZSlvW2VdPStwLmNhbGwodGhpcyxtW2VdLGUpO2Vsc2UgZm9yKGU9MDtlPG47KytlKW9bZV09cDtmdW5jdGlvbiBnKHIsYSl7aWYoIXQpe2Zvcih0PW5ldyBBcnJheShuKSxjPTA7YzxuOysrYyl0W2NdPVtdO2ZvcihjPTA7YzxzOysrYyl7dmFyIGk9eVtjXTt0W2kuc291cmNlLmluZGV4XS5wdXNoKGkudGFyZ2V0KSx0W2kudGFyZ2V0LmluZGV4XS5wdXNoKGkuc291cmNlKX19Zm9yKHZhciBvLGw9dFtlXSxjPS0xLHU9bC5sZW5ndGg7KytjPHU7KWlmKCFpc05hTihvPWxbY11bcl0pKXJldHVybiBvO3JldHVybiBNYXRoLnJhbmRvbSgpKmF9cmV0dXJuIGwucmVzdW1lKCl9LGwucmVzdW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGwuYWxwaGEoLjEpfSxsLnN0b3A9ZnVuY3Rpb24oKXtyZXR1cm4gbC5hbHBoYSgwKX0sbC5kcmFnPWZ1bmN0aW9uKCl7aWYocnx8KHI9ZS5iZWhhdmlvci5kcmFnKCkub3JpZ2luKE8pLm9uKCJkcmFnc3RhcnQuZm9yY2UiLE1pKS5vbigiZHJhZy5mb3JjZSIsYikub24oImRyYWdlbmQuZm9yY2UiLEFpKSksIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHI7dGhpcy5vbigibW91c2VvdmVyLmZvcmNlIixMaSkub24oIm1vdXNlb3V0LmZvcmNlIixTaSkuY2FsbChyKX0sZS5yZWJpbmQobCxzLCJvbiIpfTt2YXIgQ2k9MjAsT2k9MSxEaT0xLzA7ZnVuY3Rpb24gUGkodCxyKXtyZXR1cm4gZS5yZWJpbmQodCxyLCJzb3J0IiwiY2hpbGRyZW4iLCJ2YWx1ZSIpLHQubm9kZXM9dCx0LmxpbmtzPU5pLHR9ZnVuY3Rpb24gemkoZSx0KXtmb3IodmFyIHI9W2VdO251bGwhPShlPXIucG9wKCkpOylpZih0KGUpLChhPWUuY2hpbGRyZW4pJiYobj1hLmxlbmd0aCkpZm9yKHZhciBuLGE7LS1uPj0wOylyLnB1c2goYVtuXSl9ZnVuY3Rpb24gUmkoZSx0KXtmb3IodmFyIHI9W2VdLG49W107bnVsbCE9KGU9ci5wb3AoKSk7KWlmKG4ucHVzaChlKSwoaT1lLmNoaWxkcmVuKSYmKGE9aS5sZW5ndGgpKWZvcih2YXIgYSxpLG89LTE7KytvPGE7KXIucHVzaChpW29dKTtmb3IoO251bGwhPShlPW4ucG9wKCkpOyl0KGUpfWZ1bmN0aW9uIEVpKGUpe3JldHVybiBlLmNoaWxkcmVufWZ1bmN0aW9uIElpKGUpe3JldHVybiBlLnZhbHVlfWZ1bmN0aW9uIEZpKGUsdCl7cmV0dXJuIHQudmFsdWUtZS52YWx1ZX1mdW5jdGlvbiBOaSh0KXtyZXR1cm4gZS5tZXJnZSh0Lm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuKGUuY2hpbGRyZW58fFtdKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybntzb3VyY2U6ZSx0YXJnZXQ6dH19KSl9KSkpfWUubGF5b3V0LmhpZXJhcmNoeT1mdW5jdGlvbigpe3ZhciBlPUZpLHQ9RWkscj1JaTtmdW5jdGlvbiBuKGEpe3ZhciBpLG89W2FdLGw9W107Zm9yKGEuZGVwdGg9MDtudWxsIT0oaT1vLnBvcCgpKTspaWYobC5wdXNoKGkpLChjPXQuY2FsbChuLGksaS5kZXB0aCkpJiYocz1jLmxlbmd0aCkpe2Zvcih2YXIgcyxjLHU7LS1zPj0wOylvLnB1c2godT1jW3NdKSx1LnBhcmVudD1pLHUuZGVwdGg9aS5kZXB0aCsxO3ImJihpLnZhbHVlPTApLGkuY2hpbGRyZW49Y31lbHNlIHImJihpLnZhbHVlPStyLmNhbGwobixpLGkuZGVwdGgpfHwwKSxkZWxldGUgaS5jaGlsZHJlbjtyZXR1cm4gUmkoYSwoZnVuY3Rpb24odCl7dmFyIG4sYTtlJiYobj10LmNoaWxkcmVuKSYmbi5zb3J0KGUpLHImJihhPXQucGFyZW50KSYmKGEudmFsdWUrPXQudmFsdWUpfSkpLGx9cmV0dXJuIG4uc29ydD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG4pOmV9LG4uY2hpbGRyZW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxuKTp0fSxuLnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWUsbik6cn0sbi5yZXZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiByJiYoemkoZSwoZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbiYmKGUudmFsdWU9MCl9KSksUmkoZSwoZnVuY3Rpb24oZSl7dmFyIHQ7ZS5jaGlsZHJlbnx8KGUudmFsdWU9K3IuY2FsbChuLGUsZS5kZXB0aCl8fDApLCh0PWUucGFyZW50KSYmKHQudmFsdWUrPWUudmFsdWUpfSkpKSxlfSxufSxlLmxheW91dC5wYXJ0aXRpb249ZnVuY3Rpb24oKXt2YXIgdD1lLmxheW91dC5oaWVyYXJjaHkoKSxyPVsxLDFdO2Z1bmN0aW9uIG4oZSxuKXt2YXIgYT10LmNhbGwodGhpcyxlLG4pO3JldHVybiBmdW5jdGlvbiBlKHQscixuLGEpe3ZhciBpPXQuY2hpbGRyZW47aWYodC54PXIsdC55PXQuZGVwdGgqYSx0LmR4PW4sdC5keT1hLGkmJihvPWkubGVuZ3RoKSl7dmFyIG8sbCxzLGM9LTE7Zm9yKG49dC52YWx1ZT9uL3QudmFsdWU6MDsrK2M8bzspZShsPWlbY10scixzPWwudmFsdWUqbixhKSxyKz1zfX0oYVswXSwwLHJbMF0sclsxXS9mdW5jdGlvbiBlKHQpe3ZhciByPXQuY2hpbGRyZW4sbj0wO2lmKHImJihhPXIubGVuZ3RoKSlmb3IodmFyIGEsaT0tMTsrK2k8YTspbj1NYXRoLm1heChuLGUocltpXSkpO3JldHVybiAxK259KGFbMF0pKSxhfXJldHVybiBuLnNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ZSxuKTpyfSxQaShuLHQpfSxlLmxheW91dC5waWU9ZnVuY3Rpb24oKXt2YXIgdD1OdW1iZXIscj1IaSxuPTAsYT1MZSxpPTA7ZnVuY3Rpb24gbyhsKXt2YXIgcyxjPWwubGVuZ3RoLHU9bC5tYXAoKGZ1bmN0aW9uKGUscil7cmV0dXJuK3QuY2FsbChvLGUscil9KSksZj0rKCJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOm4pLGQ9KCJmdW5jdGlvbiI9PXR5cGVvZiBhP2EuYXBwbHkodGhpcyxhcmd1bWVudHMpOmEpLWYscD1NYXRoLm1pbihNYXRoLmFicyhkKS9jLCsoImZ1bmN0aW9uIj09dHlwZW9mIGk/aS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6aSkpLGg9cCooZDwwPy0xOjEpLGc9ZS5zdW0odSksdj1nPyhkLWMqaCkvZzowLG09ZS5yYW5nZShjKSx5PVtdO3JldHVybiBudWxsIT1yJiZtLnNvcnQocj09PUhpP2Z1bmN0aW9uKGUsdCl7cmV0dXJuIHVbdF0tdVtlXX06ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcihsW2VdLGxbdF0pfSksbS5mb3JFYWNoKChmdW5jdGlvbihlKXt5W2VdPXtkYXRhOmxbZV0sdmFsdWU6cz11W2VdLHN0YXJ0QW5nbGU6ZixlbmRBbmdsZTpmKz1zKnYraCxwYWRBbmdsZTpwfX0pKSx5fXJldHVybiBvLnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsbyk6dH0sby5zb3J0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWUsbyk6cn0sby5zdGFydEFuZ2xlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWUsbyk6bn0sby5lbmRBbmdsZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1lLG8pOmF9LG8ucGFkQW5nbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ZSxvKTppfSxvfTt2YXIgSGk9e307ZnVuY3Rpb24gamkoZSl7cmV0dXJuIGUueH1mdW5jdGlvbiBCaShlKXtyZXR1cm4gZS55fWZ1bmN0aW9uIFZpKGUsdCxyKXtlLnkwPXQsZS55PXJ9ZS5sYXlvdXQuc3RhY2s9ZnVuY3Rpb24oKXt2YXIgdD1PLHI9R2ksbj1aaSxhPVZpLGk9amksbz1CaTtmdW5jdGlvbiBsKHMsYyl7aWYoIShwPXMubGVuZ3RoKSlyZXR1cm4gczt2YXIgdT1zLm1hcCgoZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5jYWxsKGwsZSxyKX0pKSxmPXUubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXAoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuW2kuY2FsbChsLGUsdCksby5jYWxsKGwsZSx0KV19KSl9KSksZD1yLmNhbGwobCxmLGMpO3U9ZS5wZXJtdXRlKHUsZCksZj1lLnBlcm11dGUoZixkKTt2YXIgcCxoLGcsdixtPW4uY2FsbChsLGYsYykseT11WzBdLmxlbmd0aDtmb3IoZz0wO2c8eTsrK2cpZm9yKGEuY2FsbChsLHVbMF1bZ10sdj1tW2ddLGZbMF1bZ11bMV0pLGg9MTtoPHA7KytoKWEuY2FsbChsLHVbaF1bZ10sdis9ZltoLTFdW2ddWzFdLGZbaF1bZ11bMV0pO3JldHVybiBzfXJldHVybiBsLnZhbHVlcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLGwpOnR9LGwub3JkZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpVaS5nZXQoZSl8fEdpLGwpOnJ9LGwub2Zmc2V0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6cWkuZ2V0KGUpfHxaaSxsKTpufSxsLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ZSxsKTppfSxsLnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ZSxsKTpvfSxsLm91dD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1lLGwpOmF9LGx9O3ZhciBVaT1lLm1hcCh7Imluc2lkZS1vdXQiOmZ1bmN0aW9uKHQpe3ZhciByLG4sYT10Lmxlbmd0aCxpPXQubWFwKFlpKSxvPXQubWFwKFhpKSxsPWUucmFuZ2UoYSkuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gaVtlXS1pW3RdfSkpLHM9MCxjPTAsdT1bXSxmPVtdO2ZvcihyPTA7cjxhOysrciluPWxbcl0sczxjPyhzKz1vW25dLHUucHVzaChuKSk6KGMrPW9bbl0sZi5wdXNoKG4pKTtyZXR1cm4gZi5yZXZlcnNlKCkuY29uY2F0KHUpfSxyZXZlcnNlOmZ1bmN0aW9uKHQpe3JldHVybiBlLnJhbmdlKHQubGVuZ3RoKS5yZXZlcnNlKCl9LGRlZmF1bHQ6R2l9KSxxaT1lLm1hcCh7c2lsaG91ZXR0ZTpmdW5jdGlvbihlKXt2YXIgdCxyLG4sYT1lLmxlbmd0aCxpPWVbMF0ubGVuZ3RoLG89W10sbD0wLHM9W107Zm9yKHI9MDtyPGk7KytyKXtmb3IodD0wLG49MDt0PGE7dCsrKW4rPWVbdF1bcl1bMV07bj5sJiYobD1uKSxvLnB1c2gobil9Zm9yKHI9MDtyPGk7KytyKXNbcl09KGwtb1tyXSkvMjtyZXR1cm4gc30sd2lnZ2xlOmZ1bmN0aW9uKGUpe3ZhciB0LHIsbixhLGksbyxsLHMsYyx1PWUubGVuZ3RoLGY9ZVswXSxkPWYubGVuZ3RoLHA9W107Zm9yKHBbMF09cz1jPTAscj0xO3I8ZDsrK3Ipe2Zvcih0PTAsYT0wO3Q8dTsrK3QpYSs9ZVt0XVtyXVsxXTtmb3IodD0wLGk9MCxsPWZbcl1bMF0tZltyLTFdWzBdO3Q8dTsrK3Qpe2ZvcihuPTAsbz0oZVt0XVtyXVsxXS1lW3RdW3ItMV1bMV0pLygyKmwpO248dDsrK24pbys9KGVbbl1bcl1bMV0tZVtuXVtyLTFdWzFdKS9sO2krPW8qZVt0XVtyXVsxXX1wW3JdPXMtPWE/aS9hKmw6MCxzPGMmJihjPXMpfWZvcihyPTA7cjxkOysrcilwW3JdLT1jO3JldHVybiBwfSxleHBhbmQ6ZnVuY3Rpb24oZSl7dmFyIHQscixuLGE9ZS5sZW5ndGgsaT1lWzBdLmxlbmd0aCxvPTEvYSxsPVtdO2ZvcihyPTA7cjxpOysrcil7Zm9yKHQ9MCxuPTA7dDxhO3QrKyluKz1lW3RdW3JdWzFdO2lmKG4pZm9yKHQ9MDt0PGE7dCsrKWVbdF1bcl1bMV0vPW47ZWxzZSBmb3IodD0wO3Q8YTt0KyspZVt0XVtyXVsxXT1vfWZvcihyPTA7cjxpOysrcilsW3JdPTA7cmV0dXJuIGx9LHplcm86Wml9KTtmdW5jdGlvbiBHaSh0KXtyZXR1cm4gZS5yYW5nZSh0Lmxlbmd0aCl9ZnVuY3Rpb24gWmkoZSl7Zm9yKHZhciB0PS0xLHI9ZVswXS5sZW5ndGgsbj1bXTsrK3Q8cjspblt0XT0wO3JldHVybiBufWZ1bmN0aW9uIFlpKGUpe2Zvcih2YXIgdCxyPTEsbj0wLGE9ZVswXVsxXSxpPWUubGVuZ3RoO3I8aTsrK3IpKHQ9ZVtyXVsxXSk+YSYmKG49cixhPXQpO3JldHVybiBufWZ1bmN0aW9uIFhpKGUpe3JldHVybiBlLnJlZHVjZShXaSwwKX1mdW5jdGlvbiBXaShlLHQpe3JldHVybiBlK3RbMV19ZnVuY3Rpb24gUWkoZSx0KXtyZXR1cm4gSmkoZSxNYXRoLmNlaWwoTWF0aC5sb2codC5sZW5ndGgpL01hdGguTE4yKzEpKX1mdW5jdGlvbiBKaShlLHQpe2Zvcih2YXIgcj0tMSxuPStlWzBdLGE9KGVbMV0tbikvdCxpPVtdOysrcjw9dDspaVtyXT1hKnIrbjtyZXR1cm4gaX1mdW5jdGlvbiAkaSh0KXtyZXR1cm5bZS5taW4odCksZS5tYXgodCldfWZ1bmN0aW9uIEtpKGUsdCl7cmV0dXJuIGUudmFsdWUtdC52YWx1ZX1mdW5jdGlvbiBlbyhlLHQpe3ZhciByPWUuX3BhY2tfbmV4dDtlLl9wYWNrX25leHQ9dCx0Ll9wYWNrX3ByZXY9ZSx0Ll9wYWNrX25leHQ9cixyLl9wYWNrX3ByZXY9dH1mdW5jdGlvbiB0byhlLHQpe2UuX3BhY2tfbmV4dD10LHQuX3BhY2tfcHJldj1lfWZ1bmN0aW9uIHJvKGUsdCl7dmFyIHI9dC54LWUueCxuPXQueS1lLnksYT1lLnIrdC5yO3JldHVybi45OTkqYSphPnIqcituKm59ZnVuY3Rpb24gbm8oZSl7aWYoKHQ9ZS5jaGlsZHJlbikmJihzPXQubGVuZ3RoKSl7dmFyIHQscixuLGEsaSxvLGwscyxjPTEvMCx1PS0xLzAsZj0xLzAsZD0tMS8wO2lmKHQuZm9yRWFjaChhbyksKHI9dFswXSkueD0tci5yLHIueT0wLHgocikscz4xJiYoKG49dFsxXSkueD1uLnIsbi55PTAseChuKSxzPjIpKWZvcihvbyhyLG4sYT10WzJdKSx4KGEpLGVvKHIsYSksci5fcGFja19wcmV2PWEsZW8oYSxuKSxuPXIuX3BhY2tfbmV4dCxpPTM7aTxzO2krKyl7b28ocixuLGE9dFtpXSk7dmFyIHA9MCxoPTEsZz0xO2ZvcihvPW4uX3BhY2tfbmV4dDtvIT09bjtvPW8uX3BhY2tfbmV4dCxoKyspaWYocm8obyxhKSl7cD0xO2JyZWFrfWlmKDE9PXApZm9yKGw9ci5fcGFja19wcmV2O2whPT1vLl9wYWNrX3ByZXYmJiFybyhsLGEpO2w9bC5fcGFja19wcmV2LGcrKyk7cD8oaDxnfHxoPT1nJiZuLnI8ci5yP3RvKHIsbj1vKTp0byhyPWwsbiksaS0tKTooZW8ocixhKSxuPWEseChhKSl9dmFyIHY9KGMrdSkvMixtPShmK2QpLzIseT0wO2ZvcihpPTA7aTxzO2krKykoYT10W2ldKS54LT12LGEueS09bSx5PU1hdGgubWF4KHksYS5yK01hdGguc3FydChhLngqYS54K2EueSphLnkpKTtlLnI9eSx0LmZvckVhY2goaW8pfWZ1bmN0aW9uIHgoZSl7Yz1NYXRoLm1pbihlLngtZS5yLGMpLHU9TWF0aC5tYXgoZS54K2Uucix1KSxmPU1hdGgubWluKGUueS1lLnIsZiksZD1NYXRoLm1heChlLnkrZS5yLGQpfX1mdW5jdGlvbiBhbyhlKXtlLl9wYWNrX25leHQ9ZS5fcGFja19wcmV2PWV9ZnVuY3Rpb24gaW8oZSl7ZGVsZXRlIGUuX3BhY2tfbmV4dCxkZWxldGUgZS5fcGFja19wcmV2fWZ1bmN0aW9uIG9vKGUsdCxyKXt2YXIgbj1lLnIrci5yLGE9dC54LWUueCxpPXQueS1lLnk7aWYobiYmKGF8fGkpKXt2YXIgbz10LnIrci5yLGw9YSphK2kqaSxzPS41Kygobio9biktKG8qPW8pKS8oMipsKSxjPU1hdGguc3FydChNYXRoLm1heCgwLDIqbyoobitsKS0obi09bCkqbi1vKm8pKS8oMipsKTtyLng9ZS54K3MqYStjKmksci55PWUueStzKmktYyphfWVsc2Ugci54PWUueCtuLHIueT1lLnl9ZnVuY3Rpb24gbG8oZSx0KXtyZXR1cm4gZS5wYXJlbnQ9PXQucGFyZW50PzE6Mn1mdW5jdGlvbiBzbyhlKXt2YXIgdD1lLmNoaWxkcmVuO3JldHVybiB0Lmxlbmd0aD90WzBdOmUudH1mdW5jdGlvbiBjbyhlKXt2YXIgdCxyPWUuY2hpbGRyZW47cmV0dXJuKHQ9ci5sZW5ndGgpP3JbdC0xXTplLnR9ZnVuY3Rpb24gdW8oZSx0LHIpe3ZhciBuPXIvKHQuaS1lLmkpO3QuYy09bix0LnMrPXIsZS5jKz1uLHQueis9cix0Lm0rPXJ9ZnVuY3Rpb24gZm8oZSx0LHIpe3JldHVybiBlLmEucGFyZW50PT09dC5wYXJlbnQ/ZS5hOnJ9ZnVuY3Rpb24gcG8oZSl7cmV0dXJue3g6ZS54LHk6ZS55LGR4OmUuZHgsZHk6ZS5keX19ZnVuY3Rpb24gaG8oZSx0KXt2YXIgcj1lLngrdFszXSxuPWUueSt0WzBdLGE9ZS5keC10WzFdLXRbM10saT1lLmR5LXRbMF0tdFsyXTtyZXR1cm4gYTwwJiYocis9YS8yLGE9MCksaTwwJiYobis9aS8yLGk9MCkse3g6cix5Om4sZHg6YSxkeTppfX1mdW5jdGlvbiBnbyhlKXt2YXIgdD1lWzBdLHI9ZVtlLmxlbmd0aC0xXTtyZXR1cm4gdDxyP1t0LHJdOltyLHRdfWZ1bmN0aW9uIHZvKGUpe3JldHVybiBlLnJhbmdlRXh0ZW50P2UucmFuZ2VFeHRlbnQoKTpnbyhlLnJhbmdlKCkpfWZ1bmN0aW9uIG1vKGUsdCxyLG4pe3ZhciBhPXIoZVswXSxlWzFdKSxpPW4odFswXSx0WzFdKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGkoYShlKSl9fWZ1bmN0aW9uIHlvKGUsdCl7dmFyIHIsbj0wLGE9ZS5sZW5ndGgtMSxpPWVbbl0sbz1lW2FdO3JldHVybiBvPGkmJihyPW4sbj1hLGE9cixyPWksaT1vLG89ciksZVtuXT10LmZsb29yKGkpLGVbYV09dC5jZWlsKG8pLGV9ZnVuY3Rpb24geG8oZSl7cmV0dXJuIGU/e2Zsb29yOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmZsb29yKHQvZSkqZX0sY2VpbDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5jZWlsKHQvZSkqZX19OmJvfWUubGF5b3V0Lmhpc3RvZ3JhbT1mdW5jdGlvbigpe3ZhciB0PSEwLHI9TnVtYmVyLG49JGksYT1RaTtmdW5jdGlvbiBpKGksbyl7Zm9yKHZhciBsLHMsYz1bXSx1PWkubWFwKHIsdGhpcyksZj1uLmNhbGwodGhpcyx1LG8pLGQ9YS5jYWxsKHRoaXMsZix1LG8pLHA9KG89LTEsdS5sZW5ndGgpLGg9ZC5sZW5ndGgtMSxnPXQ/MToxL3A7KytvPGg7KShsPWNbb109W10pLmR4PWRbbysxXS0obC54PWRbb10pLGwueT0wO2lmKGg+MClmb3Iobz0tMTsrK288cDspKHM9dVtvXSk+PWZbMF0mJnM8PWZbMV0mJigobD1jW2UuYmlzZWN0KGQscywxLGgpLTFdKS55Kz1nLGwucHVzaChpW29dKSk7cmV0dXJuIGN9cmV0dXJuIGkudmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ZSxpKTpyfSxpLnJhbmdlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWh0KGUpLGkpOm59LGkuYmlucz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0ibnVtYmVyIj09dHlwZW9mIGU/ZnVuY3Rpb24odCl7cmV0dXJuIEppKHQsZSl9Omh0KGUpLGkpOmF9LGkuZnJlcXVlbmN5PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSEhZSxpKTp0fSxpfSxlLmxheW91dC5wYWNrPWZ1bmN0aW9uKCl7dmFyIHQscj1lLmxheW91dC5oaWVyYXJjaHkoKS5zb3J0KEtpKSxuPTAsYT1bMSwxXTtmdW5jdGlvbiBpKGUsaSl7dmFyIG89ci5jYWxsKHRoaXMsZSxpKSxsPW9bMF0scz1hWzBdLGM9YVsxXSx1PW51bGw9PXQ/TWF0aC5zcXJ0OiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdH07aWYobC54PWwueT0wLFJpKGwsKGZ1bmN0aW9uKGUpe2Uucj0rdShlLnZhbHVlKX0pKSxSaShsLG5vKSxuKXt2YXIgZj1uKih0PzE6TWF0aC5tYXgoMipsLnIvcywyKmwuci9jKSkvMjtSaShsLChmdW5jdGlvbihlKXtlLnIrPWZ9KSksUmkobCxubyksUmkobCwoZnVuY3Rpb24oZSl7ZS5yLT1mfSkpfXJldHVybiBmdW5jdGlvbiBlKHQscixuLGEpe3ZhciBpPXQuY2hpbGRyZW47aWYodC54PXIrPWEqdC54LHQueT1uKz1hKnQueSx0LnIqPWEsaSlmb3IodmFyIG89LTEsbD1pLmxlbmd0aDsrK288bDspZShpW29dLHIsbixhKX0obCxzLzIsYy8yLHQ/MToxL01hdGgubWF4KDIqbC5yL3MsMipsLnIvYykpLG99cmV0dXJuIGkuc2l6ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1lLGkpOmF9LGkucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW51bGw9PWV8fCJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6K2UsaSk6dH0saS5wYWRkaW5nPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStlLGkpOm59LFBpKGkscil9LGUubGF5b3V0LnRyZWU9ZnVuY3Rpb24oKXt2YXIgdD1lLmxheW91dC5oaWVyYXJjaHkoKS5zb3J0KG51bGwpLnZhbHVlKG51bGwpLHI9bG8sbj1bMSwxXSxhPW51bGw7ZnVuY3Rpb24gaShlLGkpe3ZhciBjPXQuY2FsbCh0aGlzLGUsaSksdT1jWzBdLGY9ZnVuY3Rpb24oZSl7dmFyIHQscj17QTpudWxsLGNoaWxkcmVuOltlXX0sbj1bcl07Zm9yKDtudWxsIT0odD1uLnBvcCgpKTspZm9yKHZhciBhLGk9dC5jaGlsZHJlbixvPTAsbD1pLmxlbmd0aDtvPGw7KytvKW4ucHVzaCgoaVtvXT1hPXtfOmlbb10scGFyZW50OnQsY2hpbGRyZW46KGE9aVtvXS5jaGlsZHJlbikmJmEuc2xpY2UoKXx8W10sQTpudWxsLGE6bnVsbCx6OjAsbTowLGM6MCxzOjAsdDpudWxsLGk6b30pLmE9YSk7cmV0dXJuIHIuY2hpbGRyZW5bMF19KHUpO2lmKFJpKGYsbyksZi5wYXJlbnQubT0tZi56LHppKGYsbCksYSl6aSh1LHMpO2Vsc2V7dmFyIGQ9dSxwPXUsaD11O3ppKHUsKGZ1bmN0aW9uKGUpe2UueDxkLngmJihkPWUpLGUueD5wLngmJihwPWUpLGUuZGVwdGg+aC5kZXB0aCYmKGg9ZSl9KSk7dmFyIGc9cihkLHApLzItZC54LHY9blswXS8ocC54K3IocCxkKS8yK2cpLG09blsxXS8oaC5kZXB0aHx8MSk7emkodSwoZnVuY3Rpb24oZSl7ZS54PShlLngrZykqdixlLnk9ZS5kZXB0aCptfSkpfXJldHVybiBjfWZ1bmN0aW9uIG8oZSl7dmFyIHQ9ZS5jaGlsZHJlbixuPWUucGFyZW50LmNoaWxkcmVuLGE9ZS5pP25bZS5pLTFdOm51bGw7aWYodC5sZW5ndGgpeyFmdW5jdGlvbihlKXt2YXIgdCxyPTAsbj0wLGE9ZS5jaGlsZHJlbixpPWEubGVuZ3RoO2Zvcig7LS1pPj0wOykodD1hW2ldKS56Kz1yLHQubSs9cixyKz10LnMrKG4rPXQuYyl9KGUpO3ZhciBpPSh0WzBdLnordFt0Lmxlbmd0aC0xXS56KS8yO2E/KGUuej1hLnorcihlLl8sYS5fKSxlLm09ZS56LWkpOmUuej1pfWVsc2UgYSYmKGUuej1hLnorcihlLl8sYS5fKSk7ZS5wYXJlbnQuQT1mdW5jdGlvbihlLHQsbil7aWYodCl7Zm9yKHZhciBhLGk9ZSxvPWUsbD10LHM9aS5wYXJlbnQuY2hpbGRyZW5bMF0sYz1pLm0sdT1vLm0sZj1sLm0sZD1zLm07bD1jbyhsKSxpPXNvKGkpLGwmJmk7KXM9c28ocyksKG89Y28obykpLmE9ZSwoYT1sLnorZi1pLnotYytyKGwuXyxpLl8pKT4wJiYodW8oZm8obCxlLG4pLGUsYSksYys9YSx1Kz1hKSxmKz1sLm0sYys9aS5tLGQrPXMubSx1Kz1vLm07bCYmIWNvKG8pJiYoby50PWwsby5tKz1mLXUpLGkmJiFzbyhzKSYmKHMudD1pLHMubSs9Yy1kLG49ZSl9cmV0dXJuIG59KGUsYSxlLnBhcmVudC5BfHxuWzBdKX1mdW5jdGlvbiBsKGUpe2UuXy54PWUueitlLnBhcmVudC5tLGUubSs9ZS5wYXJlbnQubX1mdW5jdGlvbiBzKGUpe2UueCo9blswXSxlLnk9ZS5kZXB0aCpuWzFdfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ZSxpKTpyfSxpLnNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9bnVsbD09KG49ZSk/czpudWxsLGkpOmE/bnVsbDpufSxpLm5vZGVTaXplPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW51bGw9PShuPWUpP251bGw6cyxpKTphP246bnVsbH0sUGkoaSx0KX0sZS5sYXlvdXQuY2x1c3Rlcj1mdW5jdGlvbigpe3ZhciB0PWUubGF5b3V0LmhpZXJhcmNoeSgpLnNvcnQobnVsbCkudmFsdWUobnVsbCkscj1sbyxuPVsxLDFdLGE9ITE7ZnVuY3Rpb24gaShpLG8pe3ZhciBsLHM9dC5jYWxsKHRoaXMsaSxvKSxjPXNbMF0sdT0wO1JpKGMsKGZ1bmN0aW9uKHQpe3ZhciBuPXQuY2hpbGRyZW47biYmbi5sZW5ndGg/KHQueD1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrdC54fSksMCkvZS5sZW5ndGh9KG4pLHQueT1mdW5jdGlvbih0KXtyZXR1cm4gMStlLm1heCh0LChmdW5jdGlvbihlKXtyZXR1cm4gZS55fSkpfShuKSk6KHQueD1sP3UrPXIodCxsKTowLHQueT0wLGw9dCl9KSk7dmFyIGY9ZnVuY3Rpb24gZSh0KXt2YXIgcj10LmNoaWxkcmVuO3JldHVybiByJiZyLmxlbmd0aD9lKHJbMF0pOnR9KGMpLGQ9ZnVuY3Rpb24gZSh0KXt2YXIgcixuPXQuY2hpbGRyZW47cmV0dXJuIG4mJihyPW4ubGVuZ3RoKT9lKG5bci0xXSk6dH0oYykscD1mLngtcihmLGQpLzIsaD1kLngrcihkLGYpLzI7cmV0dXJuIFJpKGMsYT9mdW5jdGlvbihlKXtlLng9KGUueC1jLngpKm5bMF0sZS55PShjLnktZS55KSpuWzFdfTpmdW5jdGlvbihlKXtlLng9KGUueC1wKS8oaC1wKSpuWzBdLGUueT0oMS0oYy55P2UueS9jLnk6MSkpKm5bMV19KSxzfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ZSxpKTpyfSxpLnNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9bnVsbD09KG49ZSksaSk6YT9udWxsOm59LGkubm9kZVNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9bnVsbCE9KG49ZSksaSk6YT9uOm51bGx9LFBpKGksdCl9LGUubGF5b3V0LnRyZWVtYXA9ZnVuY3Rpb24oKXt2YXIgdCxyPWUubGF5b3V0LmhpZXJhcmNoeSgpLG49TWF0aC5yb3VuZCxhPVsxLDFdLGk9bnVsbCxvPXBvLGw9ITEscz0ic3F1YXJpZnkiLGM9LjUqKDErTWF0aC5zcXJ0KDUpKTtmdW5jdGlvbiB1KGUsdCl7Zm9yKHZhciByLG4sYT0tMSxpPWUubGVuZ3RoOysrYTxpOyluPShyPWVbYV0pLnZhbHVlKih0PDA/MDp0KSxyLmFyZWE9aXNOYU4obil8fG48PTA/MDpufWZ1bmN0aW9uIGYoZSl7dmFyIHQ9ZS5jaGlsZHJlbjtpZih0JiZ0Lmxlbmd0aCl7dmFyIHIsbixhLGk9byhlKSxsPVtdLGM9dC5zbGljZSgpLGQ9MS8wLGc9InNsaWNlIj09PXM/aS5keDoiZGljZSI9PT1zP2kuZHk6InNsaWNlLWRpY2UiPT09cz8xJmUuZGVwdGg/aS5keTppLmR4Ok1hdGgubWluKGkuZHgsaS5keSk7Zm9yKHUoYyxpLmR4KmkuZHkvZS52YWx1ZSksbC5hcmVhPTA7KGE9Yy5sZW5ndGgpPjA7KWwucHVzaChyPWNbYS0xXSksbC5hcmVhKz1yLmFyZWEsInNxdWFyaWZ5IiE9PXN8fChuPXAobCxnKSk8PWQ/KGMucG9wKCksZD1uKToobC5hcmVhLT1sLnBvcCgpLmFyZWEsaChsLGcsaSwhMSksZz1NYXRoLm1pbihpLmR4LGkuZHkpLGwubGVuZ3RoPWwuYXJlYT0wLGQ9MS8wKTtsLmxlbmd0aCYmKGgobCxnLGksITApLGwubGVuZ3RoPWwuYXJlYT0wKSx0LmZvckVhY2goZil9fWZ1bmN0aW9uIGQoZSl7dmFyIHQ9ZS5jaGlsZHJlbjtpZih0JiZ0Lmxlbmd0aCl7dmFyIHIsbj1vKGUpLGE9dC5zbGljZSgpLGk9W107Zm9yKHUoYSxuLmR4Km4uZHkvZS52YWx1ZSksaS5hcmVhPTA7cj1hLnBvcCgpOylpLnB1c2gociksaS5hcmVhKz1yLmFyZWEsbnVsbCE9ci56JiYoaChpLHIuej9uLmR4Om4uZHksbiwhYS5sZW5ndGgpLGkubGVuZ3RoPWkuYXJlYT0wKTt0LmZvckVhY2goZCl9fWZ1bmN0aW9uIHAoZSx0KXtmb3IodmFyIHIsbj1lLmFyZWEsYT0wLGk9MS8wLG89LTEsbD1lLmxlbmd0aDsrK288bDspKHI9ZVtvXS5hcmVhKSYmKHI8aSYmKGk9cikscj5hJiYoYT1yKSk7cmV0dXJuIHQqPXQsKG4qPW4pP01hdGgubWF4KHQqYSpjL24sbi8odCppKmMpKToxLzB9ZnVuY3Rpb24gaChlLHQscixhKXt2YXIgaSxvPS0xLGw9ZS5sZW5ndGgscz1yLngsYz1yLnksdT10P24oZS5hcmVhL3QpOjA7aWYodD09ci5keCl7Zm9yKChhfHx1PnIuZHkpJiYodT1yLmR5KTsrK288bDspKGk9ZVtvXSkueD1zLGkueT1jLGkuZHk9dSxzKz1pLmR4PU1hdGgubWluKHIueCtyLmR4LXMsdT9uKGkuYXJlYS91KTowKTtpLno9ITAsaS5keCs9ci54K3IuZHgtcyxyLnkrPXUsci5keS09dX1lbHNle2ZvcigoYXx8dT5yLmR4KSYmKHU9ci5keCk7KytvPGw7KShpPWVbb10pLng9cyxpLnk9YyxpLmR4PXUsYys9aS5keT1NYXRoLm1pbihyLnkrci5keS1jLHU/bihpLmFyZWEvdSk6MCk7aS56PSExLGkuZHkrPXIueStyLmR5LWMsci54Kz11LHIuZHgtPXV9fWZ1bmN0aW9uIGcoZSl7dmFyIG49dHx8cihlKSxpPW5bMF07cmV0dXJuIGkueD1pLnk9MCxpLnZhbHVlPyhpLmR4PWFbMF0saS5keT1hWzFdKTppLmR4PWkuZHk9MCx0JiZyLnJldmFsdWUoaSksdShbaV0saS5keCppLmR5L2kudmFsdWUpLCh0P2Q6ZikoaSksbCYmKHQ9biksbn1yZXR1cm4gZy5zaXplPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPWUsZyk6YX0sZy5wYWRkaW5nPWZ1bmN0aW9uKGUpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBpO2Z1bmN0aW9uIHQodCl7dmFyIHI9ZS5jYWxsKGcsdCx0LmRlcHRoKTtyZXR1cm4gbnVsbD09cj9wbyh0KTpobyh0LCJudW1iZXIiPT10eXBlb2Ygcj9bcixyLHIscl06cil9ZnVuY3Rpb24gcih0KXtyZXR1cm4gaG8odCxlKX12YXIgbjtyZXR1cm4gbz1udWxsPT0oaT1lKT9wbzoiZnVuY3Rpb24iPT0obj10eXBlb2YgZSk/dDoibnVtYmVyIj09PW4/KGU9W2UsZSxlLGVdLHIpOnIsZ30sZy5yb3VuZD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1lP01hdGgucm91bmQ6TnVtYmVyLGcpOm4hPU51bWJlcn0sZy5zdGlja3k9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9ZSx0PW51bGwsZyk6bH0sZy5yYXRpbz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1lLGcpOmN9LGcubW9kZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1lKyIiLGcpOnN9LFBpKGcscil9LGUucmFuZG9tPXtub3JtYWw6ZnVuY3Rpb24oZSx0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoO3JldHVybiByPDImJih0PTEpLHI8MSYmKGU9MCksZnVuY3Rpb24oKXt2YXIgcixuLGE7ZG97YT0ocj0yKk1hdGgucmFuZG9tKCktMSkqcisobj0yKk1hdGgucmFuZG9tKCktMSkqbn13aGlsZSghYXx8YT4xKTtyZXR1cm4gZSt0KnIqTWF0aC5zcXJ0KC0yKk1hdGgubG9nKGEpL2EpfX0sbG9nTm9ybWFsOmZ1bmN0aW9uKCl7dmFyIHQ9ZS5yYW5kb20ubm9ybWFsLmFwcGx5KGUsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAodCgpKX19LGJhdGVzOmZ1bmN0aW9uKHQpe3ZhciByPWUucmFuZG9tLmlyd2luSGFsbCh0KTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcigpL3R9fSxpcndpbkhhbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAscj0wO3I8ZTtyKyspdCs9TWF0aC5yYW5kb20oKTtyZXR1cm4gdH19fSxlLnNjYWxlPXt9O3ZhciBibz17Zmxvb3I6TyxjZWlsOk99O2Z1bmN0aW9uIF9vKHQscixuLGEpe3ZhciBpPVtdLG89W10sbD0wLHM9TWF0aC5taW4odC5sZW5ndGgsci5sZW5ndGgpLTE7Zm9yKHRbc108dFswXSYmKHQ9dC5zbGljZSgpLnJldmVyc2UoKSxyPXIuc2xpY2UoKS5yZXZlcnNlKCkpOysrbDw9czspaS5wdXNoKG4odFtsLTFdLHRbbF0pKSxvLnB1c2goYShyW2wtMV0scltsXSkpO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1lLmJpc2VjdCh0LHIsMSxzKS0xO3JldHVybiBvW25dKGlbbl0ocikpfX1mdW5jdGlvbiB3byh0LHIpe3JldHVybiBlLnJlYmluZCh0LHIsInJhbmdlIiwicmFuZ2VSb3VuZCIsImludGVycG9sYXRlIiwiY2xhbXAiKX1mdW5jdGlvbiBUbyhlLHQpe3JldHVybiB5byhlLHhvKGtvKGUsdClbMl0pKSx5byhlLHhvKGtvKGUsdClbMl0pKSxlfWZ1bmN0aW9uIGtvKGUsdCl7bnVsbD09dCYmKHQ9MTApO3ZhciByPWdvKGUpLG49clsxXS1yWzBdLGE9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhuL3QpL01hdGguTE4xMCkpLGk9dC9uKmE7cmV0dXJuIGk8PS4xNT9hKj0xMDppPD0uMzU/YSo9NTppPD0uNzUmJihhKj0yKSxyWzBdPU1hdGguY2VpbChyWzBdL2EpKmEsclsxXT1NYXRoLmZsb29yKHJbMV0vYSkqYSsuNSphLHJbMl09YSxyfWZ1bmN0aW9uIE1vKHQscil7cmV0dXJuIGUucmFuZ2UuYXBwbHkoZSxrbyh0LHIpKX1mdW5jdGlvbiBBbyh0LHIsbil7dmFyIGE9a28odCxyKTtpZihuKXt2YXIgaT1DdC5leGVjKG4pO2lmKGkuc2hpZnQoKSwicyI9PT1pWzhdKXt2YXIgbz1lLmZvcm1hdFByZWZpeChNYXRoLm1heCh5KGFbMF0pLHkoYVsxXSkpKTtyZXR1cm4gaVs3XXx8KGlbN109Ii4iK1NvKG8uc2NhbGUoYVsyXSkpKSxpWzhdPSJmIixuPWUuZm9ybWF0KGkuam9pbigiIikpLGZ1bmN0aW9uKGUpe3JldHVybiBuKG8uc2NhbGUoZSkpK28uc3ltYm9sfX1pWzddfHwoaVs3XT0iLiIrZnVuY3Rpb24oZSx0KXt2YXIgcj1Tbyh0WzJdKTtyZXR1cm4gZSBpbiBMbz9NYXRoLmFicyhyLVNvKE1hdGgubWF4KHkodFswXSkseSh0WzFdKSkpKSsgKygiZSIhPT1lKTpyLTIqKCIlIj09PWUpfShpWzhdLGEpKSxuPWkuam9pbigiIil9ZWxzZSBuPSIsLiIrU28oYVsyXSkrImYiO3JldHVybiBlLmZvcm1hdChuKX1lLnNjYWxlLmxpbmVhcj1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBlKHQscixuLGEpe3ZhciBpLG87ZnVuY3Rpb24gbCgpe3ZhciBlPU1hdGgubWluKHQubGVuZ3RoLHIubGVuZ3RoKT4yP19vOm1vLGw9YT93aTpfaTtyZXR1cm4gaT1lKHQscixsLG4pLG89ZShyLHQsbCxLYSksc31mdW5jdGlvbiBzKGUpe3JldHVybiBpKGUpfXJldHVybiBzLmludmVydD1mdW5jdGlvbihlKXtyZXR1cm4gbyhlKX0scy5kb21haW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZS5tYXAoTnVtYmVyKSxsKCkpOnR9LHMucmFuZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ZSxsKCkpOnJ9LHMucmFuZ2VSb3VuZD1mdW5jdGlvbihlKXtyZXR1cm4gcy5yYW5nZShlKS5pbnRlcnBvbGF0ZShoaSl9LHMuY2xhbXA9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ZSxsKCkpOmF9LHMuaW50ZXJwb2xhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ZSxsKCkpOm59LHMudGlja3M9ZnVuY3Rpb24oZSl7cmV0dXJuIE1vKHQsZSl9LHMudGlja0Zvcm1hdD1mdW5jdGlvbihlLHIpe3JldHVybiBBbyh0LGUscil9LHMubmljZT1mdW5jdGlvbihlKXtyZXR1cm4gVG8odCxlKSxsKCl9LHMuY29weT1mdW5jdGlvbigpe3JldHVybiBlKHQscixuLGEpfSxsKCl9KFswLDFdLFswLDFdLEthLCExKX07dmFyIExvPXtzOjEsZzoxLHA6MSxyOjEsZToxfTtmdW5jdGlvbiBTbyhlKXtyZXR1cm4tTWF0aC5mbG9vcihNYXRoLmxvZyhlKS9NYXRoLkxOMTArLjAxKX1lLnNjYWxlLmxvZz1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiB0KHIsbixhLGkpe2Z1bmN0aW9uIG8oZSl7cmV0dXJuKGE/TWF0aC5sb2coZTwwPzA6ZSk6LU1hdGgubG9nKGU+MD8wOi1lKSkvTWF0aC5sb2cobil9ZnVuY3Rpb24gbChlKXtyZXR1cm4gYT9NYXRoLnBvdyhuLGUpOi1NYXRoLnBvdyhuLC1lKX1mdW5jdGlvbiBzKGUpe3JldHVybiByKG8oZSkpfXJldHVybiBzLmludmVydD1mdW5jdGlvbihlKXtyZXR1cm4gbChyLmludmVydChlKSl9LHMuZG9tYWluPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPWVbMF0+PTAsci5kb21haW4oKGk9ZS5tYXAoTnVtYmVyKSkubWFwKG8pKSxzKTppfSxzLmJhc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K2Usci5kb21haW4oaS5tYXAobykpLHMpOm59LHMubmljZT1mdW5jdGlvbigpe3ZhciBlPXlvKGkubWFwKG8pLGE/TWF0aDpPbyk7cmV0dXJuIHIuZG9tYWluKGUpLGk9ZS5tYXAobCksc30scy50aWNrcz1mdW5jdGlvbigpe3ZhciBlPWdvKGkpLHQ9W10scj1lWzBdLHM9ZVsxXSxjPU1hdGguZmxvb3IobyhyKSksdT1NYXRoLmNlaWwobyhzKSksZj1uJTE/MjpuO2lmKGlzRmluaXRlKHUtYykpe2lmKGEpe2Zvcig7Yzx1O2MrKylmb3IodmFyIGQ9MTtkPGY7ZCsrKXQucHVzaChsKGMpKmQpO3QucHVzaChsKGMpKX1lbHNlIGZvcih0LnB1c2gobChjKSk7YysrPHU7KWZvcihkPWYtMTtkPjA7ZC0tKXQucHVzaChsKGMpKmQpO2ZvcihjPTA7dFtjXTxyO2MrKyk7Zm9yKHU9dC5sZW5ndGg7dFt1LTFdPnM7dS0tKTt0PXQuc2xpY2UoYyx1KX1yZXR1cm4gdH0scy50aWNrRm9ybWF0PWZ1bmN0aW9uKHQscil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIENvO2FyZ3VtZW50cy5sZW5ndGg8Mj9yPUNvOiJmdW5jdGlvbiIhPXR5cGVvZiByJiYocj1lLmZvcm1hdChyKSk7dmFyIGE9TWF0aC5tYXgoMSxuKnQvcy50aWNrcygpLmxlbmd0aCk7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUvbChNYXRoLnJvdW5kKG8oZSkpKTtyZXR1cm4gdCpuPG4tLjUmJih0Kj1uKSx0PD1hP3IoZSk6IiJ9fSxzLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdChyLmNvcHkoKSxuLGEsaSl9LHdvKHMscil9KGUuc2NhbGUubGluZWFyKCkuZG9tYWluKFswLDFdKSwxMCwhMCxbMSwxMF0pfTt2YXIgQ289ZS5mb3JtYXQoIi4wZSIpLE9vPXtmbG9vcjpmdW5jdGlvbihlKXtyZXR1cm4tTWF0aC5jZWlsKC1lKX0sY2VpbDpmdW5jdGlvbihlKXtyZXR1cm4tTWF0aC5mbG9vcigtZSl9fTtmdW5jdGlvbiBEbyhlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQ8MD8tTWF0aC5wb3coLXQsZSk6TWF0aC5wb3codCxlKX19ZS5zY2FsZS5wb3c9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gZSh0LHIsbil7dmFyIGE9RG8ociksaT1EbygxL3IpO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIHQoYShlKSl9cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKGUpe3JldHVybiBpKHQuaW52ZXJ0KGUpKX0sby5kb21haW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQuZG9tYWluKChuPWUubWFwKE51bWJlcikpLm1hcChhKSksbyk6bn0sby50aWNrcz1mdW5jdGlvbihlKXtyZXR1cm4gTW8obixlKX0sby50aWNrRm9ybWF0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEFvKG4sZSx0KX0sby5uaWNlPWZ1bmN0aW9uKGUpe3JldHVybiBvLmRvbWFpbihUbyhuLGUpKX0sby5leHBvbmVudD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1EbyhyPWUpLGk9RG8oMS9yKSx0LmRvbWFpbihuLm1hcChhKSksbyk6cn0sby5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGUodC5jb3B5KCkscixuKX0sd28obyx0KX0oZS5zY2FsZS5saW5lYXIoKSwxLFswLDFdKX0sZS5zY2FsZS5zcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuc2NhbGUucG93KCkuZXhwb25lbnQoLjUpfSxlLnNjYWxlLm9yZGluYWw9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gdChyLG4pe3ZhciBhLGksbztmdW5jdGlvbiBsKGUpe3JldHVybiBpWygoYS5nZXQoZSl8fCgicmFuZ2UiPT09bi50P2Euc2V0KGUsci5wdXNoKGUpKTpOYU4pKS0xKSVpLmxlbmd0aF19ZnVuY3Rpb24gcyh0LG4pe3JldHVybiBlLnJhbmdlKHIubGVuZ3RoKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiB0K24qZX0pKX1yZXR1cm4gbC5kb21haW49ZnVuY3Rpb24oZSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHI7cj1bXSxhPW5ldyBfO2Zvcih2YXIgdCxpPS0xLG89ZS5sZW5ndGg7KytpPG87KWEuaGFzKHQ9ZVtpXSl8fGEuc2V0KHQsci5wdXNoKHQpKTtyZXR1cm4gbFtuLnRdLmFwcGx5KGwsbi5hKX0sbC5yYW5nZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1lLG89MCxuPXt0OiJyYW5nZSIsYTphcmd1bWVudHN9LGwpOml9LGwucmFuZ2VQb2ludHM9ZnVuY3Rpb24oZSx0KXthcmd1bWVudHMubGVuZ3RoPDImJih0PTApO3ZhciBhPWVbMF0sYz1lWzFdLHU9ci5sZW5ndGg8Mj8oYT0oYStjKS8yLDApOihjLWEpLyhyLmxlbmd0aC0xK3QpO3JldHVybiBpPXMoYSt1KnQvMix1KSxvPTAsbj17dDoicmFuZ2VQb2ludHMiLGE6YXJndW1lbnRzfSxsfSxsLnJhbmdlUm91bmRQb2ludHM9ZnVuY3Rpb24oZSx0KXthcmd1bWVudHMubGVuZ3RoPDImJih0PTApO3ZhciBhPWVbMF0sYz1lWzFdLHU9ci5sZW5ndGg8Mj8oYT1jPU1hdGgucm91bmQoKGErYykvMiksMCk6KGMtYSkvKHIubGVuZ3RoLTErdCl8MDtyZXR1cm4gaT1zKGErTWF0aC5yb3VuZCh1KnQvMisoYy1hLShyLmxlbmd0aC0xK3QpKnUpLzIpLHUpLG89MCxuPXt0OiJyYW5nZVJvdW5kUG9pbnRzIixhOmFyZ3VtZW50c30sbH0sbC5yYW5nZUJhbmRzPWZ1bmN0aW9uKGUsdCxhKXthcmd1bWVudHMubGVuZ3RoPDImJih0PTApLGFyZ3VtZW50cy5sZW5ndGg8MyYmKGE9dCk7dmFyIGM9ZVsxXTxlWzBdLHU9ZVtjLTBdLGY9ZVsxLWNdLGQ9KGYtdSkvKHIubGVuZ3RoLXQrMiphKTtyZXR1cm4gaT1zKHUrZCphLGQpLGMmJmkucmV2ZXJzZSgpLG89ZCooMS10KSxuPXt0OiJyYW5nZUJhbmRzIixhOmFyZ3VtZW50c30sbH0sbC5yYW5nZVJvdW5kQmFuZHM9ZnVuY3Rpb24oZSx0LGEpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKHQ9MCksYXJndW1lbnRzLmxlbmd0aDwzJiYoYT10KTt2YXIgYz1lWzFdPGVbMF0sdT1lW2MtMF0sZj1lWzEtY10sZD1NYXRoLmZsb29yKChmLXUpLyhyLmxlbmd0aC10KzIqYSkpO3JldHVybiBpPXModStNYXRoLnJvdW5kKChmLXUtKHIubGVuZ3RoLXQpKmQpLzIpLGQpLGMmJmkucmV2ZXJzZSgpLG89TWF0aC5yb3VuZChkKigxLXQpKSxuPXt0OiJyYW5nZVJvdW5kQmFuZHMiLGE6YXJndW1lbnRzfSxsfSxsLnJhbmdlQmFuZD1mdW5jdGlvbigpe3JldHVybiBvfSxsLnJhbmdlRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIGdvKG4uYVswXSl9LGwuY29weT1mdW5jdGlvbigpe3JldHVybiB0KHIsbil9LGwuZG9tYWluKHIpfShbXSx7dDoicmFuZ2UiLGE6W1tdXX0pfSxlLnNjYWxlLmNhdGVnb3J5MTA9ZnVuY3Rpb24oKXtyZXR1cm4gZS5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoUG8pfSxlLnNjYWxlLmNhdGVnb3J5MjA9ZnVuY3Rpb24oKXtyZXR1cm4gZS5zY2FsZS5vcmRpbmFsKCkucmFuZ2Uoem8pfSxlLnNjYWxlLmNhdGVnb3J5MjBiPWZ1bmN0aW9uKCl7cmV0dXJuIGUuc2NhbGUub3JkaW5hbCgpLnJhbmdlKFJvKX0sZS5zY2FsZS5jYXRlZ29yeTIwYz1mdW5jdGlvbigpe3JldHVybiBlLnNjYWxlLm9yZGluYWwoKS5yYW5nZShFbyl9O3ZhciBQbz1bMjA2MjI2MCwxNjc0NDIwNiwyOTI0NTg4LDE0MDM0NzI4LDk3MjU4ODUsOTE5NzEzMSwxNDkwNzMzMCw4MzU1NzExLDEyMzY5MTg2LDE1NTYxNzVdLm1hcChpdCksem89WzIwNjIyNjAsMTE0NTQ0NDAsMTY3NDQyMDYsMTY3NTk2NzIsMjkyNDU4OCwxMDAxODY5OCwxNDAzNDcyOCwxNjc1MDc0Miw5NzI1ODg1LDEyOTU1ODYxLDkxOTcxMzEsMTI4ODUxNDAsMTQ5MDczMzAsMTYyMzQxOTQsODM1NTcxMSwxMzA5MjgwNywxMjM2OTE4NiwxNDQwODU4OSwxNTU2MTc1LDEwNDEwNzI1XS5tYXAoaXQpLFJvPVszNzUwNzc3LDUzOTU2MTksNzA0MDcxOSwxMDI2NDI4Niw2NTE5MDk3LDkyMTY1OTQsMTE5MTUxMTUsMTM1NTY2MzYsOTIwMjk5MywxMjQyNjgwOSwxNTE4NjUxNCwxNTE5MDkzMiw4NjY2MTY5LDExMzU2NDkwLDE0MDQ5NjQzLDE1MTc3MzcyLDgwNzc2ODMsMTA4MzQzMjQsMTM1Mjg1MDksMTQ1ODk2NTRdLm1hcChpdCksRW89WzMyNDQ3MzMsNzA1NzExMCwxMDQwNjYyNSwxMzAzMjQzMSwxNTA5NTA1MywxNjYxNjc2NCwxNjYyNTI1OSwxNjYzNDAxOCwzMjUzMDc2LDc2NTI0NzAsMTA2MDcwMDMsMTMxMDE1MDQsNzY5NTI4MSwxMDM5NDMxMiwxMjM2OTM3MiwxNDM0Mjg5MSw2NTEzNTA3LDk4Njg5NTAsMTI0MzQ4NzcsMTQyNzcwODFdLm1hcChpdCk7ZnVuY3Rpb24gSW8oKXtyZXR1cm4gMH1lLnNjYWxlLnF1YW50aWxlPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIHQocixuKXt2YXIgYTtmdW5jdGlvbiBpKCl7dmFyIHQ9MCxpPW4ubGVuZ3RoO2ZvcihhPVtdOysrdDxpOylhW3QtMV09ZS5xdWFudGlsZShyLHQvaSk7cmV0dXJuIG99ZnVuY3Rpb24gbyh0KXtpZighaXNOYU4odD0rdCkpcmV0dXJuIG5bZS5iaXNlY3QoYSx0KV19cmV0dXJuIG8uZG9tYWluPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWUubWFwKHApLmZpbHRlcihoKS5zb3J0KGQpLGkoKSk6cn0sby5yYW5nZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1lLGkoKSk6bn0sby5xdWFudGlsZXM9ZnVuY3Rpb24oKXtyZXR1cm4gYX0sby5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuKGU9bi5pbmRleE9mKGUpKTwwP1tOYU4sTmFOXTpbZT4wP2FbZS0xXTpyWzBdLGU8YS5sZW5ndGg/YVtlXTpyW3IubGVuZ3RoLTFdXX0sby5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHQocixuKX0saSgpfShbXSxbXSl9LGUuc2NhbGUucXVhbnRpemU9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gZSh0LHIsbil7dmFyIGEsaTtmdW5jdGlvbiBvKGUpe3JldHVybiBuW01hdGgubWF4KDAsTWF0aC5taW4oaSxNYXRoLmZsb29yKGEqKGUtdCkpKSldfWZ1bmN0aW9uIGwoKXtyZXR1cm4gYT1uLmxlbmd0aC8oci10KSxpPW4ubGVuZ3RoLTEsb31yZXR1cm4gby5kb21haW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2VbMF0scj0rZVtlLmxlbmd0aC0xXSxsKCkpOlt0LHJdfSxvLnJhbmdlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWUsbCgpKTpufSxvLmludmVydEV4dGVudD1mdW5jdGlvbihlKXtyZXR1cm5bZT0oZT1uLmluZGV4T2YoZSkpPDA/TmFOOmUvYSt0LGUrMS9hXX0sby5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGUodCxyLG4pfSxsKCl9KDAsMSxbMCwxXSl9LGUuc2NhbGUudGhyZXNob2xkPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIHQocixuKXtmdW5jdGlvbiBhKHQpe2lmKHQ8PXQpcmV0dXJuIG5bZS5iaXNlY3Qocix0KV19cmV0dXJuIGEuZG9tYWluPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWUsYSk6cn0sYS5yYW5nZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1lLGEpOm59LGEuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKGUpe3JldHVybiBlPW4uaW5kZXhPZihlKSxbcltlLTFdLHJbZV1dfSxhLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdChyLG4pfSxhfShbLjVdLFswLDFdKX0sZS5zY2FsZS5pZGVudGl0eT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuK2V9cmV0dXJuIHIuaW52ZXJ0PXIsci5kb21haW49ci5yYW5nZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLm1hcChyKSxyKTp0fSxyLnRpY2tzPWZ1bmN0aW9uKGUpe3JldHVybiBNbyh0LGUpfSxyLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gQW8odCxlLHIpfSxyLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gZSh0KX0scn0oWzAsMV0pfSxlLnN2Zz17fSxlLnN2Zy5hcmM9ZnVuY3Rpb24oKXt2YXIgZT1Obyx0PUhvLHI9SW8sbj1GbyxhPWpvLGk9Qm8sbz1WbztmdW5jdGlvbiBsKCl7dmFyIGw9TWF0aC5tYXgoMCwrZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGM9TWF0aC5tYXgoMCwrdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpLHU9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyktQ2UsZj1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1DZSxkPU1hdGguYWJzKGYtdSkscD11PmY/MDoxO2lmKGM8bCYmKGg9YyxjPWwsbD1oKSxkPj1TZSlyZXR1cm4gcyhjLHApKyhsP3MobCwxLXApOiIiKSsiWiI7dmFyIGgsZyx2LG0seSx4LGIsXyx3LFQsayxNLEE9MCxMPTAsUz1bXTtpZigobT0oK28uYXBwbHkodGhpcyxhcmd1bWVudHMpfHwwKS8yKSYmKHY9bj09PUZvP01hdGguc3FydChsKmwrYypjKTorbi5hcHBseSh0aGlzLGFyZ3VtZW50cykscHx8KEwqPS0xKSxjJiYoTD1FZSh2L2MqTWF0aC5zaW4obSkpKSxsJiYoQT1FZSh2L2wqTWF0aC5zaW4obSkpKSksYyl7eT1jKk1hdGguY29zKHUrTCkseD1jKk1hdGguc2luKHUrTCksYj1jKk1hdGguY29zKGYtTCksXz1jKk1hdGguc2luKGYtTCk7dmFyIEM9TWF0aC5hYnMoZi11LTIqTCk8PUFlPzA6MTtpZihMJiZVbyh5LHgsYixfKT09PXBeQyl7dmFyIE89KHUrZikvMjt5PWMqTWF0aC5jb3MoTykseD1jKk1hdGguc2luKE8pLGI9Xz1udWxsfX1lbHNlIHk9eD0wO2lmKGwpe3c9bCpNYXRoLmNvcyhmLUEpLFQ9bCpNYXRoLnNpbihmLUEpLGs9bCpNYXRoLmNvcyh1K0EpLE09bCpNYXRoLnNpbih1K0EpO3ZhciBEPU1hdGguYWJzKHUtZisyKkEpPD1BZT8wOjE7aWYoQSYmVW8odyxULGssTSk9PT0xLXBeRCl7dmFyIFA9KHUrZikvMjt3PWwqTWF0aC5jb3MoUCksVD1sKk1hdGguc2luKFApLGs9TT1udWxsfX1lbHNlIHc9VD0wO2lmKGQ+a2UmJihoPU1hdGgubWluKE1hdGguYWJzKGMtbCkvMiwrci5hcHBseSh0aGlzLGFyZ3VtZW50cykpKT4uMDAxKXtnPWw8Y15wPzA6MTt2YXIgej1oLFI9aDtpZihkPEFlKXt2YXIgRT1udWxsPT1rP1t3LFRdOm51bGw9PWI/W3kseF06c2EoW3kseF0sW2ssTV0sW2IsX10sW3csVF0pLEk9eS1FWzBdLEY9eC1FWzFdLE49Yi1FWzBdLEg9Xy1FWzFdLGo9MS9NYXRoLnNpbihNYXRoLmFjb3MoKEkqTitGKkgpLyhNYXRoLnNxcnQoSSpJK0YqRikqTWF0aC5zcXJ0KE4qTitIKkgpKSkvMiksQj1NYXRoLnNxcnQoRVswXSpFWzBdK0VbMV0qRVsxXSk7Uj1NYXRoLm1pbihoLChsLUIpLyhqLTEpKSx6PU1hdGgubWluKGgsKGMtQikvKGorMSkpfWlmKG51bGwhPWIpe3ZhciBWPXFvKG51bGw9PWs/W3csVF06W2ssTV0sW3kseF0sYyx6LHApLFU9cW8oW2IsX10sW3csVF0sYyx6LHApO2g9PT16P1MucHVzaCgiTSIsVlswXSwiQSIseiwiLCIseiwiIDAgMCwiLGcsIiAiLFZbMV0sIkEiLGMsIiwiLGMsIiAwICIsMS1wXlVvKFZbMV1bMF0sVlsxXVsxXSxVWzFdWzBdLFVbMV1bMV0pLCIsIixwLCIgIixVWzFdLCJBIix6LCIsIix6LCIgMCAwLCIsZywiICIsVVswXSk6Uy5wdXNoKCJNIixWWzBdLCJBIix6LCIsIix6LCIgMCAxLCIsZywiICIsVVswXSl9ZWxzZSBTLnB1c2goIk0iLHksIiwiLHgpO2lmKG51bGwhPWspe3ZhciBxPXFvKFt5LHhdLFtrLE1dLGwsLVIscCksRz1xbyhbdyxUXSxudWxsPT1iP1t5LHhdOltiLF9dLGwsLVIscCk7aD09PVI/Uy5wdXNoKCJMIixHWzBdLCJBIixSLCIsIixSLCIgMCAwLCIsZywiICIsR1sxXSwiQSIsbCwiLCIsbCwiIDAgIixwXlVvKEdbMV1bMF0sR1sxXVsxXSxxWzFdWzBdLHFbMV1bMV0pLCIsIiwxLXAsIiAiLHFbMV0sIkEiLFIsIiwiLFIsIiAwIDAsIixnLCIgIixxWzBdKTpTLnB1c2goIkwiLEdbMF0sIkEiLFIsIiwiLFIsIiAwIDAsIixnLCIgIixxWzBdKX1lbHNlIFMucHVzaCgiTCIsdywiLCIsVCl9ZWxzZSBTLnB1c2goIk0iLHksIiwiLHgpLG51bGwhPWImJlMucHVzaCgiQSIsYywiLCIsYywiIDAgIixDLCIsIixwLCIgIixiLCIsIixfKSxTLnB1c2goIkwiLHcsIiwiLFQpLG51bGwhPWsmJlMucHVzaCgiQSIsbCwiLCIsbCwiIDAgIixELCIsIiwxLXAsIiAiLGssIiwiLE0pO3JldHVybiBTLnB1c2goIloiKSxTLmpvaW4oIiIpfWZ1bmN0aW9uIHMoZSx0KXtyZXR1cm4iTTAsIitlKyJBIitlKyIsIitlKyIgMCAxLCIrdCsiIDAsIistZSsiQSIrZSsiLCIrZSsiIDAgMSwiK3QrIiAwLCIrZX1yZXR1cm4gbC5pbm5lclJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1odCh0KSxsKTplfSxsLm91dGVyUmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWh0KGUpLGwpOnR9LGwuY29ybmVyUmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWh0KGUpLGwpOnJ9LGwucGFkUmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWU9PUZvP0ZvOmh0KGUpLGwpOm59LGwuc3RhcnRBbmdsZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1odChlKSxsKTphfSxsLmVuZEFuZ2xlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWh0KGUpLGwpOml9LGwucGFkQW5nbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89aHQoZSksbCk6b30sbC5jZW50cm9pZD1mdW5jdGlvbigpe3ZhciByPSgrZS5hcHBseSh0aGlzLGFyZ3VtZW50cykrICt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMixuPSgrYS5hcHBseSh0aGlzLGFyZ3VtZW50cykrICtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMi1DZTtyZXR1cm5bTWF0aC5jb3MobikqcixNYXRoLnNpbihuKSpyXX0sbH07dmFyIEZvPSJhdXRvIjtmdW5jdGlvbiBObyhlKXtyZXR1cm4gZS5pbm5lclJhZGl1c31mdW5jdGlvbiBIbyhlKXtyZXR1cm4gZS5vdXRlclJhZGl1c31mdW5jdGlvbiBqbyhlKXtyZXR1cm4gZS5zdGFydEFuZ2xlfWZ1bmN0aW9uIEJvKGUpe3JldHVybiBlLmVuZEFuZ2xlfWZ1bmN0aW9uIFZvKGUpe3JldHVybiBlJiZlLnBhZEFuZ2xlfWZ1bmN0aW9uIFVvKGUsdCxyLG4pe3JldHVybihlLXIpKnQtKHQtbikqZT4wPzA6MX1mdW5jdGlvbiBxbyhlLHQscixuLGEpe3ZhciBpPWVbMF0tdFswXSxvPWVbMV0tdFsxXSxsPShhP246LW4pL01hdGguc3FydChpKmkrbypvKSxzPWwqbyxjPS1sKmksdT1lWzBdK3MsZj1lWzFdK2MsZD10WzBdK3MscD10WzFdK2MsaD0odStkKS8yLGc9KGYrcCkvMix2PWQtdSxtPXAtZix5PXYqdittKm0seD1yLW4sYj11KnAtZCpmLF89KG08MD8tMToxKSpNYXRoLnNxcnQoTWF0aC5tYXgoMCx4KngqeS1iKmIpKSx3PShiKm0tdipfKS95LFQ9KC1iKnYtbSpfKS95LGs9KGIqbSt2Kl8pL3ksTT0oLWIqdittKl8pL3ksQT13LWgsTD1ULWcsUz1rLWgsQz1NLWc7cmV0dXJuIEEqQStMKkw+UypTK0MqQyYmKHc9ayxUPU0pLFtbdy1zLFQtY10sW3cqci94LFQqci94XV19ZnVuY3Rpb24gR28oZSl7dmFyIHQ9cmEscj1uYSxuPVpyLGE9WW8saT1hLmtleSxvPS43O2Z1bmN0aW9uIGwoaSl7dmFyIGwscz1bXSxjPVtdLHU9LTEsZj1pLmxlbmd0aCxkPWh0KHQpLHA9aHQocik7ZnVuY3Rpb24gaCgpe3MucHVzaCgiTSIsYShlKGMpLG8pKX1mb3IoOysrdTxmOyluLmNhbGwodGhpcyxsPWlbdV0sdSk/Yy5wdXNoKFsrZC5jYWxsKHRoaXMsbCx1KSwrcC5jYWxsKHRoaXMsbCx1KV0pOmMubGVuZ3RoJiYoaCgpLGM9W10pO3JldHVybiBjLmxlbmd0aCYmaCgpLHMubGVuZ3RoP3Muam9pbigiIik6bnVsbH1yZXR1cm4gbC54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsbCk6dH0sbC55PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWUsbCk6cn0sbC5kZWZpbmVkPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWUsbCk6bn0sbC5pbnRlcnBvbGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgZT9hPWU6KGE9Wm8uZ2V0KGUpfHxZbykua2V5LGwpOml9LGwudGVuc2lvbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1lLGwpOm99LGx9ZS5zdmcubGluZT1mdW5jdGlvbigpe3JldHVybiBHbyhPKX07dmFyIFpvPWUubWFwKHtsaW5lYXI6WW8sImxpbmVhci1jbG9zZWQiOlhvLHN0ZXA6ZnVuY3Rpb24oZSl7dmFyIHQ9MCxyPWUubGVuZ3RoLG49ZVswXSxhPVtuWzBdLCIsIixuWzFdXTtmb3IoOysrdDxyOylhLnB1c2goIkgiLChuWzBdKyhuPWVbdF0pWzBdKS8yLCJWIixuWzFdKTtyPjEmJmEucHVzaCgiSCIsblswXSk7cmV0dXJuIGEuam9pbigiIil9LCJzdGVwLWJlZm9yZSI6V28sInN0ZXAtYWZ0ZXIiOlFvLGJhc2lzOktvLCJiYXNpcy1vcGVuIjpmdW5jdGlvbihlKXtpZihlLmxlbmd0aDw0KXJldHVybiBZbyhlKTt2YXIgdCxyPVtdLG49LTEsYT1lLmxlbmd0aCxpPVswXSxvPVswXTtmb3IoOysrbjwzOyl0PWVbbl0saS5wdXNoKHRbMF0pLG8ucHVzaCh0WzFdKTtyLnB1c2goZWwobmwsaSkrIiwiK2VsKG5sLG8pKSwtLW47Zm9yKDsrK248YTspdD1lW25dLGkuc2hpZnQoKSxpLnB1c2godFswXSksby5zaGlmdCgpLG8ucHVzaCh0WzFdKSxhbChyLGksbyk7cmV0dXJuIHIuam9pbigiIil9LCJiYXNpcy1jbG9zZWQiOmZ1bmN0aW9uKGUpe3ZhciB0LHIsbj0tMSxhPWUubGVuZ3RoLGk9YSs0LG89W10sbD1bXTtmb3IoOysrbjw0OylyPWVbbiVhXSxvLnB1c2goclswXSksbC5wdXNoKHJbMV0pO3Q9W2VsKG5sLG8pLCIsIixlbChubCxsKV0sLS1uO2Zvcig7KytuPGk7KXI9ZVtuJWFdLG8uc2hpZnQoKSxvLnB1c2goclswXSksbC5zaGlmdCgpLGwucHVzaChyWzFdKSxhbCh0LG8sbCk7cmV0dXJuIHQuam9pbigiIil9LGJ1bmRsZTpmdW5jdGlvbihlLHQpe3ZhciByPWUubGVuZ3RoLTE7aWYocilmb3IodmFyIG4sYSxpPWVbMF1bMF0sbz1lWzBdWzFdLGw9ZVtyXVswXS1pLHM9ZVtyXVsxXS1vLGM9LTE7KytjPD1yOyluPWVbY10sYT1jL3IsblswXT10Km5bMF0rKDEtdCkqKGkrYSpsKSxuWzFdPXQqblsxXSsoMS10KSoobythKnMpO3JldHVybiBLbyhlKX0sY2FyZGluYWw6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5sZW5ndGg8Mz9ZbyhlKTplWzBdK0pvKGUsJG8oZSx0KSl9LCJjYXJkaW5hbC1vcGVuIjpmdW5jdGlvbihlLHQpe3JldHVybiBlLmxlbmd0aDw0P1lvKGUpOmVbMV0rSm8oZS5zbGljZSgxLC0xKSwkbyhlLHQpKX0sImNhcmRpbmFsLWNsb3NlZCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5sZW5ndGg8Mz9YbyhlKTplWzBdK0pvKChlLnB1c2goZVswXSksZSksJG8oW2VbZS5sZW5ndGgtMl1dLmNvbmNhdChlLFtlWzFdXSksdCkpfSxtb25vdG9uZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5sZW5ndGg8Mz9ZbyhlKTplWzBdK0pvKGUsZnVuY3Rpb24oZSl7dmFyIHQscixuLGEsaT1bXSxvPWZ1bmN0aW9uKGUpe3ZhciB0PTAscj1lLmxlbmd0aC0xLG49W10sYT1lWzBdLGk9ZVsxXSxvPW5bMF09aWwoYSxpKTtmb3IoOysrdDxyOyluW3RdPShvKyhvPWlsKGE9aSxpPWVbdCsxXSkpKS8yO3JldHVybiBuW3RdPW8sbn0oZSksbD0tMSxzPWUubGVuZ3RoLTE7Zm9yKDsrK2w8czspdD1pbChlW2xdLGVbbCsxXSkseSh0KTxrZT9vW2xdPW9bbCsxXT0wOihyPW9bbF0vdCxuPW9bbCsxXS90LChhPXIqcituKm4pPjkmJihhPTMqdC9NYXRoLnNxcnQoYSksb1tsXT1hKnIsb1tsKzFdPWEqbikpO2w9LTE7Zm9yKDsrK2w8PXM7KWE9KGVbTWF0aC5taW4ocyxsKzEpXVswXS1lW01hdGgubWF4KDAsbC0xKV1bMF0pLyg2KigxK29bbF0qb1tsXSkpLGkucHVzaChbYXx8MCxvW2xdKmF8fDBdKTtyZXR1cm4gaX0oZSkpfX0pO2Z1bmN0aW9uIFlvKGUpe3JldHVybiBlLmxlbmd0aD4xP2Uuam9pbigiTCIpOmUrIloifWZ1bmN0aW9uIFhvKGUpe3JldHVybiBlLmpvaW4oIkwiKSsiWiJ9ZnVuY3Rpb24gV28oZSl7Zm9yKHZhciB0PTAscj1lLmxlbmd0aCxuPWVbMF0sYT1bblswXSwiLCIsblsxXV07Kyt0PHI7KWEucHVzaCgiViIsKG49ZVt0XSlbMV0sIkgiLG5bMF0pO3JldHVybiBhLmpvaW4oIiIpfWZ1bmN0aW9uIFFvKGUpe2Zvcih2YXIgdD0wLHI9ZS5sZW5ndGgsbj1lWzBdLGE9W25bMF0sIiwiLG5bMV1dOysrdDxyOylhLnB1c2goIkgiLChuPWVbdF0pWzBdLCJWIixuWzFdKTtyZXR1cm4gYS5qb2luKCIiKX1mdW5jdGlvbiBKbyhlLHQpe2lmKHQubGVuZ3RoPDF8fGUubGVuZ3RoIT10Lmxlbmd0aCYmZS5sZW5ndGghPXQubGVuZ3RoKzIpcmV0dXJuIFlvKGUpO3ZhciByPWUubGVuZ3RoIT10Lmxlbmd0aCxuPSIiLGE9ZVswXSxpPWVbMV0sbz10WzBdLGw9byxzPTE7aWYociYmKG4rPSJRIisoaVswXS0yKm9bMF0vMykrIiwiKyhpWzFdLTIqb1sxXS8zKSsiLCIraVswXSsiLCIraVsxXSxhPWVbMV0scz0yKSx0Lmxlbmd0aD4xKXtsPXRbMV0saT1lW3NdLHMrKyxuKz0iQyIrKGFbMF0rb1swXSkrIiwiKyhhWzFdK29bMV0pKyIsIisoaVswXS1sWzBdKSsiLCIrKGlbMV0tbFsxXSkrIiwiK2lbMF0rIiwiK2lbMV07Zm9yKHZhciBjPTI7Yzx0Lmxlbmd0aDtjKysscysrKWk9ZVtzXSxsPXRbY10sbis9IlMiKyhpWzBdLWxbMF0pKyIsIisoaVsxXS1sWzFdKSsiLCIraVswXSsiLCIraVsxXX1pZihyKXt2YXIgdT1lW3NdO24rPSJRIisoaVswXSsyKmxbMF0vMykrIiwiKyhpWzFdKzIqbFsxXS8zKSsiLCIrdVswXSsiLCIrdVsxXX1yZXR1cm4gbn1mdW5jdGlvbiAkbyhlLHQpe2Zvcih2YXIgcixuPVtdLGE9KDEtdCkvMixpPWVbMF0sbz1lWzFdLGw9MSxzPWUubGVuZ3RoOysrbDxzOylyPWksaT1vLG89ZVtsXSxuLnB1c2goW2EqKG9bMF0tclswXSksYSoob1sxXS1yWzFdKV0pO3JldHVybiBufWZ1bmN0aW9uIEtvKGUpe2lmKGUubGVuZ3RoPDMpcmV0dXJuIFlvKGUpO3ZhciB0PTEscj1lLmxlbmd0aCxuPWVbMF0sYT1uWzBdLGk9blsxXSxvPVthLGEsYSwobj1lWzFdKVswXV0sbD1baSxpLGksblsxXV0scz1bYSwiLCIsaSwiTCIsZWwobmwsbyksIiwiLGVsKG5sLGwpXTtmb3IoZS5wdXNoKGVbci0xXSk7Kyt0PD1yOyluPWVbdF0sby5zaGlmdCgpLG8ucHVzaChuWzBdKSxsLnNoaWZ0KCksbC5wdXNoKG5bMV0pLGFsKHMsbyxsKTtyZXR1cm4gZS5wb3AoKSxzLnB1c2goIkwiLG4pLHMuam9pbigiIil9ZnVuY3Rpb24gZWwoZSx0KXtyZXR1cm4gZVswXSp0WzBdK2VbMV0qdFsxXStlWzJdKnRbMl0rZVszXSp0WzNdfVpvLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7dC5rZXk9ZSx0LmNsb3NlZD0vLWNsb3NlZCQvLnRlc3QoZSl9KSk7dmFyIHRsPVswLDIvMywxLzMsMF0scmw9WzAsMS8zLDIvMywwXSxubD1bMCwxLzYsMi8zLDEvNl07ZnVuY3Rpb24gYWwoZSx0LHIpe2UucHVzaCgiQyIsZWwodGwsdCksIiwiLGVsKHRsLHIpLCIsIixlbChybCx0KSwiLCIsZWwocmwsciksIiwiLGVsKG5sLHQpLCIsIixlbChubCxyKSl9ZnVuY3Rpb24gaWwoZSx0KXtyZXR1cm4odFsxXS1lWzFdKS8odFswXS1lWzBdKX1mdW5jdGlvbiBvbChlKXtmb3IodmFyIHQscixuLGE9LTEsaT1lLmxlbmd0aDsrK2E8aTspcj0odD1lW2FdKVswXSxuPXRbMV0tQ2UsdFswXT1yKk1hdGguY29zKG4pLHRbMV09cipNYXRoLnNpbihuKTtyZXR1cm4gZX1mdW5jdGlvbiBsbChlKXt2YXIgdD1yYSxyPXJhLG49MCxhPW5hLGk9WnIsbz1ZbyxsPW8ua2V5LHM9byxjPSJMIix1PS43O2Z1bmN0aW9uIGYobCl7dmFyIGYsZCxwLGg9W10sZz1bXSx2PVtdLG09LTEseT1sLmxlbmd0aCx4PWh0KHQpLGI9aHQobiksXz10PT09cj9mdW5jdGlvbigpe3JldHVybiBkfTpodChyKSx3PW49PT1hP2Z1bmN0aW9uKCl7cmV0dXJuIHB9Omh0KGEpO2Z1bmN0aW9uIFQoKXtoLnB1c2goIk0iLG8oZSh2KSx1KSxjLHMoZShnLnJldmVyc2UoKSksdSksIloiKX1mb3IoOysrbTx5OylpLmNhbGwodGhpcyxmPWxbbV0sbSk/KGcucHVzaChbZD0reC5jYWxsKHRoaXMsZixtKSxwPStiLmNhbGwodGhpcyxmLG0pXSksdi5wdXNoKFsrXy5jYWxsKHRoaXMsZixtKSwrdy5jYWxsKHRoaXMsZixtKV0pKTpnLmxlbmd0aCYmKFQoKSxnPVtdLHY9W10pO3JldHVybiBnLmxlbmd0aCYmVCgpLGgubGVuZ3RoP2guam9pbigiIik6bnVsbH1yZXR1cm4gZi54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXI9ZSxmKTpyfSxmLngwPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsZik6dH0sZi54MT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1lLGYpOnJ9LGYueT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1hPWUsZik6YX0sZi55MD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1lLGYpOm59LGYueTE9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ZSxmKTphfSxmLmRlZmluZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ZSxmKTppfSxmLmludGVycG9sYXRlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSJmdW5jdGlvbiI9PXR5cGVvZiBlP289ZToobz1aby5nZXQoZSl8fFlvKS5rZXkscz1vLnJldmVyc2V8fG8sYz1vLmNsb3NlZD8iTSI6IkwiLGYpOmx9LGYudGVuc2lvbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1lLGYpOnV9LGZ9ZnVuY3Rpb24gc2woZSl7cmV0dXJuIGUucmFkaXVzfWZ1bmN0aW9uIGNsKGUpe3JldHVybltlLngsZS55XX1mdW5jdGlvbiB1bChlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxyPXRbMF0sbj10WzFdLUNlO3JldHVybltyKk1hdGguY29zKG4pLHIqTWF0aC5zaW4obildfX1mdW5jdGlvbiBmbCgpe3JldHVybiA2NH1mdW5jdGlvbiBkbCgpe3JldHVybiJjaXJjbGUifWZ1bmN0aW9uIHBsKGUpe3ZhciB0PU1hdGguc3FydChlL0FlKTtyZXR1cm4iTTAsIit0KyJBIit0KyIsIit0KyIgMCAxLDEgMCwiKy10KyJBIit0KyIsIit0KyIgMCAxLDEgMCwiK3QrIloifWUuc3ZnLmxpbmUucmFkaWFsPWZ1bmN0aW9uKCl7dmFyIGU9R28ob2wpO3JldHVybiBlLnJhZGl1cz1lLngsZGVsZXRlIGUueCxlLmFuZ2xlPWUueSxkZWxldGUgZS55LGV9LFdvLnJldmVyc2U9UW8sUW8ucmV2ZXJzZT1XbyxlLnN2Zy5hcmVhPWZ1bmN0aW9uKCl7cmV0dXJuIGxsKE8pfSxlLnN2Zy5hcmVhLnJhZGlhbD1mdW5jdGlvbigpe3ZhciBlPWxsKG9sKTtyZXR1cm4gZS5yYWRpdXM9ZS54LGRlbGV0ZSBlLngsZS5pbm5lclJhZGl1cz1lLngwLGRlbGV0ZSBlLngwLGUub3V0ZXJSYWRpdXM9ZS54MSxkZWxldGUgZS54MSxlLmFuZ2xlPWUueSxkZWxldGUgZS55LGUuc3RhcnRBbmdsZT1lLnkwLGRlbGV0ZSBlLnkwLGUuZW5kQW5nbGU9ZS55MSxkZWxldGUgZS55MSxlfSxlLnN2Zy5jaG9yZD1mdW5jdGlvbigpe3ZhciBlPVZuLHQ9VW4scj1zbCxuPWpvLGE9Qm87ZnVuY3Rpb24gaShyLG4pe3ZhciBhLGksYz1vKHRoaXMsZSxyLG4pLHU9byh0aGlzLHQscixuKTtyZXR1cm4iTSIrYy5wMCtsKGMucixjLnAxLGMuYTEtYy5hMCkrKGk9dSwoKGE9YykuYTA9PWkuYTAmJmEuYTE9PWkuYTE/cyhjLnIsYy5wMSxjLnIsYy5wMCk6cyhjLnIsYy5wMSx1LnIsdS5wMCkrbCh1LnIsdS5wMSx1LmExLXUuYTApK3ModS5yLHUucDEsYy5yLGMucDApKSsiWiIpfWZ1bmN0aW9uIG8oZSx0LGksbyl7dmFyIGw9dC5jYWxsKGUsaSxvKSxzPXIuY2FsbChlLGwsbyksYz1uLmNhbGwoZSxsLG8pLUNlLHU9YS5jYWxsKGUsbCxvKS1DZTtyZXR1cm57cjpzLGEwOmMsYTE6dSxwMDpbcypNYXRoLmNvcyhjKSxzKk1hdGguc2luKGMpXSxwMTpbcypNYXRoLmNvcyh1KSxzKk1hdGguc2luKHUpXX19ZnVuY3Rpb24gbChlLHQscil7cmV0dXJuIkEiK2UrIiwiK2UrIiAwICIrICsocj5BZSkrIiwxICIrdH1mdW5jdGlvbiBzKGUsdCxyLG4pe3JldHVybiJRIDAsMCAiK259cmV0dXJuIGkucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWh0KGUpLGkpOnJ9LGkuc291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWh0KHQpLGkpOmV9LGkudGFyZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWh0KGUpLGkpOnR9LGkuc3RhcnRBbmdsZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1odChlKSxpKTpufSxpLmVuZEFuZ2xlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPWh0KGUpLGkpOmF9LGl9LGUuc3ZnLmRpYWdvbmFsPWZ1bmN0aW9uKCl7dmFyIGU9Vm4sdD1VbixyPWNsO2Z1bmN0aW9uIG4obixhKXt2YXIgaT1lLmNhbGwodGhpcyxuLGEpLG89dC5jYWxsKHRoaXMsbixhKSxsPShpLnkrby55KS8yLHM9W2kse3g6aS54LHk6bH0se3g6by54LHk6bH0sb107cmV0dXJuIk0iKyhzPXMubWFwKHIpKVswXSsiQyIrc1sxXSsiICIrc1syXSsiICIrc1szXX1yZXR1cm4gbi5zb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9aHQodCksbik6ZX0sbi50YXJnZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9aHQoZSksbik6dH0sbi5wcm9qZWN0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWUsbik6cn0sbn0sZS5zdmcuZGlhZ29uYWwucmFkaWFsPWZ1bmN0aW9uKCl7dmFyIHQ9ZS5zdmcuZGlhZ29uYWwoKSxyPWNsLG49dC5wcm9qZWN0aW9uO3JldHVybiB0LnByb2plY3Rpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bih1bChyPWUpKTpyfSx0fSxlLnN2Zy5zeW1ib2w9ZnVuY3Rpb24oKXt2YXIgZT1kbCx0PWZsO2Z1bmN0aW9uIHIocixuKXtyZXR1cm4oaGwuZ2V0KGUuY2FsbCh0aGlzLHIsbikpfHxwbCkodC5jYWxsKHRoaXMscixuKSl9cmV0dXJuIHIudHlwZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1odCh0KSxyKTplfSxyLnNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9aHQoZSkscik6dH0scn07dmFyIGhsPWUubWFwKHtjaXJjbGU6cGwsY3Jvc3M6ZnVuY3Rpb24oZSl7dmFyIHQ9TWF0aC5zcXJ0KGUvNSkvMjtyZXR1cm4iTSIrLTMqdCsiLCIrLXQrIkgiKy10KyJWIistMyp0KyJIIit0KyJWIistdCsiSCIrMyp0KyJWIit0KyJIIit0KyJWIiszKnQrIkgiKy10KyJWIit0KyJIIistMyp0KyJaIn0sZGlhbW9uZDpmdW5jdGlvbihlKXt2YXIgdD1NYXRoLnNxcnQoZS8oMip2bCkpLHI9dCp2bDtyZXR1cm4iTTAsIistdCsiTCIrcisiLDAgMCwiK3QrIiAiKy1yKyIsMFoifSxzcXVhcmU6ZnVuY3Rpb24oZSl7dmFyIHQ9TWF0aC5zcXJ0KGUpLzI7cmV0dXJuIk0iKy10KyIsIistdCsiTCIrdCsiLCIrLXQrIiAiK3QrIiwiK3QrIiAiKy10KyIsIit0KyJaIn0sInRyaWFuZ2xlLWRvd24iOmZ1bmN0aW9uKGUpe3ZhciB0PU1hdGguc3FydChlL2dsKSxyPXQqZ2wvMjtyZXR1cm4iTTAsIityKyJMIit0KyIsIistcisiICIrLXQrIiwiKy1yKyJaIn0sInRyaWFuZ2xlLXVwIjpmdW5jdGlvbihlKXt2YXIgdD1NYXRoLnNxcnQoZS9nbCkscj10KmdsLzI7cmV0dXJuIk0wLCIrLXIrIkwiK3QrIiwiK3IrIiAiKy10KyIsIityKyJaIn19KTtlLnN2Zy5zeW1ib2xUeXBlcz1obC5rZXlzKCk7dmFyIGdsPU1hdGguc3FydCgzKSx2bD1NYXRoLnRhbigzMCpPZSk7Wi50cmFuc2l0aW9uPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyLG49Ymx8fCsrVGwsYT1BbChlKSxpPVtdLG89X2x8fHt0aW1lOkRhdGUubm93KCksZWFzZTpjaSxkZWxheTowLGR1cmF0aW9uOjI1MH0sbD0tMSxzPXRoaXMubGVuZ3RoOysrbDxzOyl7aS5wdXNoKHQ9W10pO2Zvcih2YXIgYz10aGlzW2xdLHU9LTEsZj1jLmxlbmd0aDsrK3U8ZjspKHI9Y1t1XSkmJkxsKHIsdSxhLG4sbyksdC5wdXNoKHIpfXJldHVybiB4bChpLGEsbil9LFouaW50ZXJydXB0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2gobnVsbD09ZT9tbDp5bChBbChlKSkpfTt2YXIgbWw9eWwoQWwoKSk7ZnVuY3Rpb24geWwoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQscixuOyh0PXRoaXNbZV0pJiYobj10W3I9dC5hY3RpdmVdKSYmKG4udGltZXIuYz1udWxsLG4udGltZXIudD1OYU4sLS10LmNvdW50P2RlbGV0ZSB0W3JdOmRlbGV0ZSB0aGlzW2VdLHQuYWN0aXZlKz0uNSxuLmV2ZW50JiZuLmV2ZW50LmludGVycnVwdC5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyxuLmluZGV4KSl9fWZ1bmN0aW9uIHhsKGUsdCxyKXtyZXR1cm4gQihlLHdsKSxlLm5hbWVzcGFjZT10LGUuaWQ9cixlfXZhciBibCxfbCx3bD1bXSxUbD0wO2Z1bmN0aW9uIGtsKGUsdCxyLG4pe3ZhciBhPWUuaWQsaT1lLm5hbWVzcGFjZTtyZXR1cm4gdWUoZSwiZnVuY3Rpb24iPT10eXBlb2Ygcj9mdW5jdGlvbihlLG8sbCl7ZVtpXVthXS50d2Vlbi5zZXQodCxuKHIuY2FsbChlLGUuX19kYXRhX18sbyxsKSkpfToocj1uKHIpLGZ1bmN0aW9uKGUpe2VbaV1bYV0udHdlZW4uc2V0KHQscil9KSl9ZnVuY3Rpb24gTWwoZSl7cmV0dXJuIG51bGw9PWUmJihlPSIiKSxmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9ZX19ZnVuY3Rpb24gQWwoZSl7cmV0dXJuIG51bGw9PWU/Il9fdHJhbnNpdGlvbl9fIjoiX190cmFuc2l0aW9uXyIrZSsiX18ifWZ1bmN0aW9uIExsKGUsdCxyLG4sYSl7dmFyIGksbyxsLHMsYyx1PWVbcl18fChlW3JdPXthY3RpdmU6MCxjb3VudDowfSksZj11W25dO2Z1bmN0aW9uIGQocil7dmFyIGE9dS5hY3RpdmUsZD11W2FdO2Zvcih2YXIgaCBpbiBkJiYoZC50aW1lci5jPW51bGwsZC50aW1lci50PU5hTiwtLXUuY291bnQsZGVsZXRlIHVbYV0sZC5ldmVudCYmZC5ldmVudC5pbnRlcnJ1cHQuY2FsbChlLGUuX19kYXRhX18sZC5pbmRleCkpLHUpaWYoK2g8bil7dmFyIGc9dVtoXTtnLnRpbWVyLmM9bnVsbCxnLnRpbWVyLnQ9TmFOLC0tdS5jb3VudCxkZWxldGUgdVtoXX1vLmM9cCx3dCgoZnVuY3Rpb24oKXtyZXR1cm4gby5jJiZwKHJ8fDEpJiYoby5jPW51bGwsby50PU5hTiksMX0pLDAsaSksdS5hY3RpdmU9bixmLmV2ZW50JiZmLmV2ZW50LnN0YXJ0LmNhbGwoZSxlLl9fZGF0YV9fLHQpLGM9W10sZi50d2Vlbi5mb3JFYWNoKChmdW5jdGlvbihyLG4peyhuPW4uY2FsbChlLGUuX19kYXRhX18sdCkpJiZjLnB1c2gobil9KSkscz1mLmVhc2UsbD1mLmR1cmF0aW9ufWZ1bmN0aW9uIHAoYSl7Zm9yKHZhciBpPWEvbCxvPXMoaSksZD1jLmxlbmd0aDtkPjA7KWNbLS1kXS5jYWxsKGUsbyk7aWYoaT49MSlyZXR1cm4gZi5ldmVudCYmZi5ldmVudC5lbmQuY2FsbChlLGUuX19kYXRhX18sdCksLS11LmNvdW50P2RlbGV0ZSB1W25dOmRlbGV0ZSBlW3JdLDF9Znx8KGk9YS50aW1lLG89d3QoKGZ1bmN0aW9uKGUpe3ZhciB0PWYuZGVsYXk7aWYoby50PXQraSx0PD1lKXJldHVybiBkKGUtdCk7by5jPWR9KSwwLGkpLGY9dVtuXT17dHdlZW46bmV3IF8sdGltZTppLHRpbWVyOm8sZGVsYXk6YS5kZWxheSxkdXJhdGlvbjphLmR1cmF0aW9uLGVhc2U6YS5lYXNlLGluZGV4OnR9LGE9bnVsbCwrK3UuY291bnQpfXdsLmNhbGw9Wi5jYWxsLHdsLmVtcHR5PVouZW1wdHksd2wubm9kZT1aLm5vZGUsd2wuc2l6ZT1aLnNpemUsZS50cmFuc2l0aW9uPWZ1bmN0aW9uKHQscil7cmV0dXJuIHQmJnQudHJhbnNpdGlvbj9ibD90LnRyYW5zaXRpb24ocik6dDplLnNlbGVjdGlvbigpLnRyYW5zaXRpb24odCl9LGUudHJhbnNpdGlvbi5wcm90b3R5cGU9d2wsd2wuc2VsZWN0PWZ1bmN0aW9uKGUpe3ZhciB0LHIsbixhPXRoaXMuaWQsaT10aGlzLm5hbWVzcGFjZSxvPVtdO2U9WShlKTtmb3IodmFyIGw9LTEscz10aGlzLmxlbmd0aDsrK2w8czspe28ucHVzaCh0PVtdKTtmb3IodmFyIGM9dGhpc1tsXSx1PS0xLGY9Yy5sZW5ndGg7Kyt1PGY7KShuPWNbdV0pJiYocj1lLmNhbGwobixuLl9fZGF0YV9fLHUsbCkpPygiX19kYXRhX18iaW4gbiYmKHIuX19kYXRhX189bi5fX2RhdGFfXyksTGwocix1LGksYSxuW2ldW2FdKSx0LnB1c2gocikpOnQucHVzaChudWxsKX1yZXR1cm4geGwobyxpLGEpfSx3bC5zZWxlY3RBbGw9ZnVuY3Rpb24oZSl7dmFyIHQscixuLGEsaSxvPXRoaXMuaWQsbD10aGlzLm5hbWVzcGFjZSxzPVtdO2U9WChlKTtmb3IodmFyIGM9LTEsdT10aGlzLmxlbmd0aDsrK2M8dTspZm9yKHZhciBmPXRoaXNbY10sZD0tMSxwPWYubGVuZ3RoOysrZDxwOylpZihuPWZbZF0pe2k9bltsXVtvXSxyPWUuY2FsbChuLG4uX19kYXRhX18sZCxjKSxzLnB1c2godD1bXSk7Zm9yKHZhciBoPS0xLGc9ci5sZW5ndGg7KytoPGc7KShhPXJbaF0pJiZMbChhLGgsbCxvLGkpLHQucHVzaChhKX1yZXR1cm4geGwocyxsLG8pfSx3bC5maWx0ZXI9ZnVuY3Rpb24oZSl7dmFyIHQscixuPVtdOyJmdW5jdGlvbiIhPXR5cGVvZiBlJiYoZT1zZShlKSk7Zm9yKHZhciBhPTAsaT10aGlzLmxlbmd0aDthPGk7YSsrKXtuLnB1c2godD1bXSk7Zm9yKHZhciBvLGw9MCxzPShvPXRoaXNbYV0pLmxlbmd0aDtsPHM7bCsrKShyPW9bbF0pJiZlLmNhbGwocixyLl9fZGF0YV9fLGwsYSkmJnQucHVzaChyKX1yZXR1cm4geGwobix0aGlzLm5hbWVzcGFjZSx0aGlzLmlkKX0sd2wudHdlZW49ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmlkLG49dGhpcy5uYW1lc3BhY2U7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj90aGlzLm5vZGUoKVtuXVtyXS50d2Vlbi5nZXQoZSk6dWUodGhpcyxudWxsPT10P2Z1bmN0aW9uKHQpe3Rbbl1bcl0udHdlZW4ucmVtb3ZlKGUpfTpmdW5jdGlvbihhKXthW25dW3JdLnR3ZWVuLnNldChlLHQpfSl9LHdsLmF0dHI9ZnVuY3Rpb24odCxyKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2ZvcihyIGluIHQpdGhpcy5hdHRyKHIsdFtyXSk7cmV0dXJuIHRoaXN9dmFyIG49InRyYW5zZm9ybSI9PXQ/Ymk6S2EsYT1lLm5zLnF1YWxpZnkodCk7ZnVuY3Rpb24gaSgpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGEpfWZ1bmN0aW9uIG8oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGEuc3BhY2UsYS5sb2NhbCl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gbnVsbD09ZT9pOihlKz0iIixmdW5jdGlvbigpe3ZhciB0LHI9dGhpcy5nZXRBdHRyaWJ1dGUoYSk7cmV0dXJuIHIhPT1lJiYodD1uKHIsZSksZnVuY3Rpb24oZSl7dGhpcy5zZXRBdHRyaWJ1dGUoYSx0KGUpKX0pfSl9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gbnVsbD09ZT9vOihlKz0iIixmdW5jdGlvbigpe3ZhciB0LHI9dGhpcy5nZXRBdHRyaWJ1dGVOUyhhLnNwYWNlLGEubG9jYWwpO3JldHVybiByIT09ZSYmKHQ9bihyLGUpLGZ1bmN0aW9uKGUpe3RoaXMuc2V0QXR0cmlidXRlTlMoYS5zcGFjZSxhLmxvY2FsLHQoZSkpfSl9KX1yZXR1cm4ga2wodGhpcywiYXR0ci4iK3QscixhLmxvY2FsP3M6bCl9LHdsLmF0dHJUd2Vlbj1mdW5jdGlvbih0LHIpe3ZhciBuPWUubnMucXVhbGlmeSh0KTtyZXR1cm4gdGhpcy50d2VlbigiYXR0ci4iK3Qsbi5sb2NhbD9mdW5jdGlvbihlLHQpe3ZhciBhPXIuY2FsbCh0aGlzLGUsdCx0aGlzLmdldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCkpO3JldHVybiBhJiZmdW5jdGlvbihlKXt0aGlzLnNldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCxhKGUpKX19OmZ1bmN0aW9uKGUsdCl7dmFyIGE9ci5jYWxsKHRoaXMsZSx0LHRoaXMuZ2V0QXR0cmlidXRlKG4pKTtyZXR1cm4gYSYmZnVuY3Rpb24oZSl7dGhpcy5zZXRBdHRyaWJ1dGUobixhKGUpKX19KX0sd2wuc3R5bGU9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg7aWYobjwzKXtpZigic3RyaW5nIiE9dHlwZW9mIGUpe2ZvcihyIGluIG48MiYmKHQ9IiIpLGUpdGhpcy5zdHlsZShyLGVbcl0sdCk7cmV0dXJuIHRoaXN9cj0iIn1mdW5jdGlvbiBhKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKX1mdW5jdGlvbiBpKHQpe3JldHVybiBudWxsPT10P2E6KHQrPSIiLGZ1bmN0aW9uKCl7dmFyIG4sYT1vKHRoaXMpLmdldENvbXB1dGVkU3R5bGUodGhpcyxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKGUpO3JldHVybiBhIT09dCYmKG49S2EoYSx0KSxmdW5jdGlvbih0KXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUsbih0KSxyKX0pfSl9cmV0dXJuIGtsKHRoaXMsInN0eWxlLiIrZSx0LGkpfSx3bC5zdHlsZVR3ZWVuPWZ1bmN0aW9uKGUsdCxyKXtmdW5jdGlvbiBuKG4sYSl7dmFyIGk9dC5jYWxsKHRoaXMsbixhLG8odGhpcykuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLG51bGwpLmdldFByb3BlcnR5VmFsdWUoZSkpO3JldHVybiBpJiZmdW5jdGlvbih0KXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUsaSh0KSxyKX19cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MyYmKHI9IiIpLHRoaXMudHdlZW4oInN0eWxlLiIrZSxuKX0sd2wudGV4dD1mdW5jdGlvbihlKXtyZXR1cm4ga2wodGhpcywidGV4dCIsZSxNbCl9LHdsLnJlbW92ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMubmFtZXNwYWNlO3JldHVybiB0aGlzLmVhY2goImVuZC50cmFuc2l0aW9uIiwoZnVuY3Rpb24oKXt2YXIgdDt0aGlzW2VdLmNvdW50PDImJih0PXRoaXMucGFyZW50Tm9kZSkmJnQucmVtb3ZlQ2hpbGQodGhpcyl9KSl9LHdsLmVhc2U9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcy5pZCxuPXRoaXMubmFtZXNwYWNlO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDE/dGhpcy5ub2RlKClbbl1bcl0uZWFzZTooImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWUuZWFzZS5hcHBseShlLGFyZ3VtZW50cykpLHVlKHRoaXMsKGZ1bmN0aW9uKGUpe2Vbbl1bcl0uZWFzZT10fSkpKX0sd2wuZGVsYXk9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5pZCxyPXRoaXMubmFtZXNwYWNlO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDE/dGhpcy5ub2RlKClbcl1bdF0uZGVsYXk6dWUodGhpcywiZnVuY3Rpb24iPT10eXBlb2YgZT9mdW5jdGlvbihuLGEsaSl7bltyXVt0XS5kZWxheT0rZS5jYWxsKG4sbi5fX2RhdGFfXyxhLGkpfTooZT0rZSxmdW5jdGlvbihuKXtuW3JdW3RdLmRlbGF5PWV9KSl9LHdsLmR1cmF0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaWQscj10aGlzLm5hbWVzcGFjZTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwxP3RoaXMubm9kZSgpW3JdW3RdLmR1cmF0aW9uOnVlKHRoaXMsImZ1bmN0aW9uIj09dHlwZW9mIGU/ZnVuY3Rpb24obixhLGkpe25bcl1bdF0uZHVyYXRpb249TWF0aC5tYXgoMSxlLmNhbGwobixuLl9fZGF0YV9fLGEsaSkpfTooZT1NYXRoLm1heCgxLGUpLGZ1bmN0aW9uKG4pe25bcl1bdF0uZHVyYXRpb249ZX0pKX0sd2wuZWFjaD1mdW5jdGlvbih0LHIpe3ZhciBuPXRoaXMuaWQsYT10aGlzLm5hbWVzcGFjZTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBpPV9sLG89Ymw7dHJ5e2JsPW4sdWUodGhpcywoZnVuY3Rpb24oZSxyLGkpe19sPWVbYV1bbl0sdC5jYWxsKGUsZS5fX2RhdGFfXyxyLGkpfSkpfWZpbmFsbHl7X2w9aSxibD1vfX1lbHNlIHVlKHRoaXMsKGZ1bmN0aW9uKGkpe3ZhciBvPWlbYV1bbl07KG8uZXZlbnR8fChvLmV2ZW50PWUuZGlzcGF0Y2goInN0YXJ0IiwiZW5kIiwiaW50ZXJydXB0IikpKS5vbih0LHIpfSkpO3JldHVybiB0aGlzfSx3bC50cmFuc2l0aW9uPWZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQscixuPXRoaXMuaWQsYT0rK1RsLGk9dGhpcy5uYW1lc3BhY2Usbz1bXSxsPTAscz10aGlzLmxlbmd0aDtsPHM7bCsrKXtvLnB1c2goZT1bXSk7Zm9yKHZhciBjLHU9MCxmPShjPXRoaXNbbF0pLmxlbmd0aDt1PGY7dSsrKSh0PWNbdV0pJiZMbCh0LHUsaSxhLHt0aW1lOihyPXRbaV1bbl0pLnRpbWUsZWFzZTpyLmVhc2UsZGVsYXk6ci5kZWxheStyLmR1cmF0aW9uLGR1cmF0aW9uOnIuZHVyYXRpb259KSxlLnB1c2godCl9cmV0dXJuIHhsKG8saSxhKX0sZS5zdmcuYXhpcz1mdW5jdGlvbigpe3ZhciB0LHI9ZS5zY2FsZS5saW5lYXIoKSxhPVNsLGk9NixvPTYsbD0zLHM9WzEwXSxjPW51bGw7ZnVuY3Rpb24gdShuKXtuLmVhY2goKGZ1bmN0aW9uKCl7dmFyIG4sdT1lLnNlbGVjdCh0aGlzKSxmPXRoaXMuX19jaGFydF9ffHxyLGQ9dGhpcy5fX2NoYXJ0X189ci5jb3B5KCkscD1udWxsPT1jP2QudGlja3M/ZC50aWNrcy5hcHBseShkLHMpOmQuZG9tYWluKCk6YyxoPW51bGw9PXQ/ZC50aWNrRm9ybWF0P2QudGlja0Zvcm1hdC5hcHBseShkLHMpOk86dCxnPXUuc2VsZWN0QWxsKCIudGljayIpLmRhdGEocCxkKSx2PWcuZW50ZXIoKS5pbnNlcnQoImciLCIuZG9tYWluIikuYXR0cigiY2xhc3MiLCJ0aWNrIikuc3R5bGUoIm9wYWNpdHkiLGtlKSxtPWUudHJhbnNpdGlvbihnLmV4aXQoKSkuc3R5bGUoIm9wYWNpdHkiLGtlKS5yZW1vdmUoKSx5PWUudHJhbnNpdGlvbihnLm9yZGVyKCkpLnN0eWxlKCJvcGFjaXR5IiwxKSx4PU1hdGgubWF4KGksMCkrbCxiPXZvKGQpLF89dS5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFswXSksdz0oXy5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZG9tYWluIiksZS50cmFuc2l0aW9uKF8pKTt2LmFwcGVuZCgibGluZSIpLHYuYXBwZW5kKCJ0ZXh0Iik7dmFyIFQsayxNLEEsTD12LnNlbGVjdCgibGluZSIpLFM9eS5zZWxlY3QoImxpbmUiKSxDPWcuc2VsZWN0KCJ0ZXh0IikudGV4dChoKSxEPXYuc2VsZWN0KCJ0ZXh0IiksUD15LnNlbGVjdCgidGV4dCIpLHo9InRvcCI9PT1hfHwibGVmdCI9PT1hPy0xOjE7aWYoImJvdHRvbSI9PT1hfHwidG9wIj09PWE/KG49T2wsVD0ieCIsTT0ieSIsaz0ieDIiLEE9InkyIixDLmF0dHIoImR5Iix6PDA/IjBlbSI6Ii43MWVtIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIiksdy5hdHRyKCJkIiwiTSIrYlswXSsiLCIreipvKyJWMEgiK2JbMV0rIlYiK3oqbykpOihuPURsLFQ9InkiLE09IngiLGs9InkyIixBPSJ4MiIsQy5hdHRyKCJkeSIsIi4zMmVtIikuc3R5bGUoInRleHQtYW5jaG9yIix6PDA/ImVuZCI6InN0YXJ0Iiksdy5hdHRyKCJkIiwiTSIreipvKyIsIitiWzBdKyJIMFYiK2JbMV0rIkgiK3oqbykpLEwuYXR0cihBLHoqaSksRC5hdHRyKE0seip4KSxTLmF0dHIoaywwKS5hdHRyKEEseippKSxQLmF0dHIoVCwwKS5hdHRyKE0seip4KSxkLnJhbmdlQmFuZCl7dmFyIFI9ZCxFPVIucmFuZ2VCYW5kKCkvMjtmPWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIFIoZSkrRX19ZWxzZSBmLnJhbmdlQmFuZD9mPWQ6bS5jYWxsKG4sZCxmKTt2LmNhbGwobixmLGQpLHkuY2FsbChuLGQsZCl9KSl9cmV0dXJuIHUuc2NhbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ZSx1KTpyfSx1Lm9yaWVudD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1lIGluIENsP2UrIiI6U2wsdSk6YX0sdS50aWNrcz1mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPW4oYXJndW1lbnRzKSx1KTpzfSx1LnRpY2tWYWx1ZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ZSx1KTpjfSx1LnRpY2tGb3JtYXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSx1KTp0fSx1LnRpY2tTaXplPWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg7cmV0dXJuIHQ/KGk9K2Usbz0rYXJndW1lbnRzW3QtMV0sdSk6aX0sdS5pbm5lclRpY2tTaXplPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPStlLHUpOml9LHUub3V0ZXJUaWNrU2l6ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rZSx1KTpvfSx1LnRpY2tQYWRkaW5nPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPStlLHUpOmx9LHUudGlja1N1YmRpdmlkZT1mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoJiZ1fSx1fTt2YXIgU2w9ImJvdHRvbSIsQ2w9e3RvcDoxLHJpZ2h0OjEsYm90dG9tOjEsbGVmdDoxfTtmdW5jdGlvbiBPbChlLHQscil7ZS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbihlKXt2YXIgbj10KGUpO3JldHVybiJ0cmFuc2xhdGUoIisoaXNGaW5pdGUobik/bjpyKGUpKSsiLDApIn0pKX1mdW5jdGlvbiBEbChlLHQscil7ZS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbihlKXt2YXIgbj10KGUpO3JldHVybiJ0cmFuc2xhdGUoMCwiKyhpc0Zpbml0ZShuKT9uOnIoZSkpKyIpIn0pKX1lLnN2Zy5icnVzaD1mdW5jdGlvbigpe3ZhciB0LHIsbj1IKGQsImJydXNoc3RhcnQiLCJicnVzaCIsImJydXNoZW5kIiksYT1udWxsLGk9bnVsbCxsPVswLDBdLHM9WzAsMF0sYz0hMCx1PSEwLGY9emxbMF07ZnVuY3Rpb24gZCh0KXt0LmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9ZS5zZWxlY3QodGhpcykuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKS5vbigibW91c2Vkb3duLmJydXNoIix2KS5vbigidG91Y2hzdGFydC5icnVzaCIsdikscj10LnNlbGVjdEFsbCgiLmJhY2tncm91bmQiKS5kYXRhKFswXSk7ci5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwiYmFja2dyb3VuZCIpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIikuc3R5bGUoImN1cnNvciIsImNyb3NzaGFpciIpLHQuc2VsZWN0QWxsKCIuZXh0ZW50IikuZGF0YShbMF0pLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJleHRlbnQiKS5zdHlsZSgiY3Vyc29yIiwibW92ZSIpO3ZhciBuPXQuc2VsZWN0QWxsKCIucmVzaXplIikuZGF0YShmLE8pO24uZXhpdCgpLnJlbW92ZSgpLG4uZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKGUpe3JldHVybiJyZXNpemUgIitlfSkpLnN0eWxlKCJjdXJzb3IiLChmdW5jdGlvbihlKXtyZXR1cm4gUGxbZV19KSkuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsKGZ1bmN0aW9uKGUpe3JldHVybi9bZXddJC8udGVzdChlKT8tMzpudWxsfSkpLmF0dHIoInkiLChmdW5jdGlvbihlKXtyZXR1cm4vXltuc10vLnRlc3QoZSk/LTM6bnVsbH0pKS5hdHRyKCJ3aWR0aCIsNikuYXR0cigiaGVpZ2h0Iiw2KS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpLG4uc3R5bGUoImRpc3BsYXkiLGQuZW1wdHkoKT8ibm9uZSI6bnVsbCk7dmFyIG8sbD1lLnRyYW5zaXRpb24odCkscz1lLnRyYW5zaXRpb24ocik7YSYmKG89dm8oYSkscy5hdHRyKCJ4IixvWzBdKS5hdHRyKCJ3aWR0aCIsb1sxXS1vWzBdKSxoKGwpKSxpJiYobz12byhpKSxzLmF0dHIoInkiLG9bMF0pLmF0dHIoImhlaWdodCIsb1sxXS1vWzBdKSxnKGwpKSxwKGwpfSkpfWZ1bmN0aW9uIHAoZSl7ZS5zZWxlY3RBbGwoIi5yZXNpemUiKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbihlKXtyZXR1cm4idHJhbnNsYXRlKCIrbFsrL2UkLy50ZXN0KGUpXSsiLCIrc1srL15zLy50ZXN0KGUpXSsiKSJ9KSl9ZnVuY3Rpb24gaChlKXtlLnNlbGVjdCgiLmV4dGVudCIpLmF0dHIoIngiLGxbMF0pLGUuc2VsZWN0QWxsKCIuZXh0ZW50LC5uPnJlY3QsLnM+cmVjdCIpLmF0dHIoIndpZHRoIixsWzFdLWxbMF0pfWZ1bmN0aW9uIGcoZSl7ZS5zZWxlY3QoIi5leHRlbnQiKS5hdHRyKCJ5IixzWzBdKSxlLnNlbGVjdEFsbCgiLmV4dGVudCwuZT5yZWN0LC53PnJlY3QiKS5hdHRyKCJoZWlnaHQiLHNbMV0tc1swXSl9ZnVuY3Rpb24gdigpe3ZhciBmLHYsbT10aGlzLHk9ZS5zZWxlY3QoZS5ldmVudC50YXJnZXQpLHg9bi5vZihtLGFyZ3VtZW50cyksYj1lLnNlbGVjdChtKSxfPXkuZGF0dW0oKSx3PSEvXihufHMpJC8udGVzdChfKSYmYSxUPSEvXihlfHcpJC8udGVzdChfKSYmaSxrPXkuY2xhc3NlZCgiZXh0ZW50IiksTT1iZShtKSxBPWUubW91c2UobSksTD1lLnNlbGVjdChvKG0pKS5vbigia2V5ZG93bi5icnVzaCIsTykub24oImtleXVwLmJydXNoIixEKTtpZihlLmV2ZW50LmNoYW5nZWRUb3VjaGVzP0wub24oInRvdWNobW92ZS5icnVzaCIsUCkub24oInRvdWNoZW5kLmJydXNoIixSKTpMLm9uKCJtb3VzZW1vdmUuYnJ1c2giLFApLm9uKCJtb3VzZXVwLmJydXNoIixSKSxiLmludGVycnVwdCgpLnNlbGVjdEFsbCgiKiIpLmludGVycnVwdCgpLGspQVswXT1sWzBdLUFbMF0sQVsxXT1zWzBdLUFbMV07ZWxzZSBpZihfKXt2YXIgUz0rL3ckLy50ZXN0KF8pLEM9Ky9ebi8udGVzdChfKTt2PVtsWzEtU10tQVswXSxzWzEtQ10tQVsxXV0sQVswXT1sW1NdLEFbMV09c1tDXX1lbHNlIGUuZXZlbnQuYWx0S2V5JiYoZj1BLnNsaWNlKCkpO2Z1bmN0aW9uIE8oKXszMj09ZS5ldmVudC5rZXlDb2RlJiYoa3x8KGY9bnVsbCxBWzBdLT1sWzFdLEFbMV0tPXNbMV0saz0yKSxGKCkpfWZ1bmN0aW9uIEQoKXszMj09ZS5ldmVudC5rZXlDb2RlJiYyPT1rJiYoQVswXSs9bFsxXSxBWzFdKz1zWzFdLGs9MCxGKCkpfWZ1bmN0aW9uIFAoKXt2YXIgdD1lLm1vdXNlKG0pLHI9ITE7diYmKHRbMF0rPXZbMF0sdFsxXSs9dlsxXSksa3x8KGUuZXZlbnQuYWx0S2V5PyhmfHwoZj1bKGxbMF0rbFsxXSkvMiwoc1swXStzWzFdKS8yXSksQVswXT1sWysodFswXTxmWzBdKV0sQVsxXT1zWysodFsxXTxmWzFdKV0pOmY9bnVsbCksdyYmeih0LGEsMCkmJihoKGIpLHI9ITApLFQmJnoodCxpLDEpJiYoZyhiKSxyPSEwKSxyJiYocChiKSx4KHt0eXBlOiJicnVzaCIsbW9kZTprPyJtb3ZlIjoicmVzaXplIn0pKX1mdW5jdGlvbiB6KGUsbixhKXt2YXIgaSxvLGQ9dm8obikscD1kWzBdLGg9ZFsxXSxnPUFbYV0sdj1hP3M6bCxtPXZbMV0tdlswXTtpZihrJiYocC09ZyxoLT1tK2cpLGk9KGE/dTpjKT9NYXRoLm1heChwLE1hdGgubWluKGgsZVthXSkpOmVbYV0saz9vPShpKz1nKSttOihmJiYoZz1NYXRoLm1heChwLE1hdGgubWluKGgsMipmW2FdLWkpKSksZzxpPyhvPWksaT1nKTpvPWcpLHZbMF0hPWl8fHZbMV0hPW8pcmV0dXJuIGE/cj1udWxsOnQ9bnVsbCx2WzBdPWksdlsxXT1vLCEwfWZ1bmN0aW9uIFIoKXtQKCksYi5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKS5zZWxlY3RBbGwoIi5yZXNpemUiKS5zdHlsZSgiZGlzcGxheSIsZC5lbXB0eSgpPyJub25lIjpudWxsKSxlLnNlbGVjdCgiYm9keSIpLnN0eWxlKCJjdXJzb3IiLG51bGwpLEwub24oIm1vdXNlbW92ZS5icnVzaCIsbnVsbCkub24oIm1vdXNldXAuYnJ1c2giLG51bGwpLm9uKCJ0b3VjaG1vdmUuYnJ1c2giLG51bGwpLm9uKCJ0b3VjaGVuZC5icnVzaCIsbnVsbCkub24oImtleWRvd24uYnJ1c2giLG51bGwpLm9uKCJrZXl1cC5icnVzaCIsbnVsbCksTSgpLHgoe3R5cGU6ImJydXNoZW5kIn0pfWIuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLnNlbGVjdEFsbCgiLnJlc2l6ZSIpLnN0eWxlKCJkaXNwbGF5IixudWxsKSxlLnNlbGVjdCgiYm9keSIpLnN0eWxlKCJjdXJzb3IiLHkuc3R5bGUoImN1cnNvciIpKSx4KHt0eXBlOiJicnVzaHN0YXJ0In0pLFAoKX1yZXR1cm4gZC5ldmVudD1mdW5jdGlvbihhKXthLmVhY2goKGZ1bmN0aW9uKCl7dmFyIGE9bi5vZih0aGlzLGFyZ3VtZW50cyksaT17eDpsLHk6cyxpOnQsajpyfSxvPXRoaXMuX19jaGFydF9ffHxpO3RoaXMuX19jaGFydF9fPWksYmw/ZS5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmVhY2goInN0YXJ0LmJydXNoIiwoZnVuY3Rpb24oKXt0PW8uaSxyPW8uaixsPW8ueCxzPW8ueSxhKHt0eXBlOiJicnVzaHN0YXJ0In0pfSkpLnR3ZWVuKCJicnVzaDpicnVzaCIsKGZ1bmN0aW9uKCl7dmFyIGU9ZWkobCxpLngpLG49ZWkocyxpLnkpO3JldHVybiB0PXI9bnVsbCxmdW5jdGlvbih0KXtsPWkueD1lKHQpLHM9aS55PW4odCksYSh7dHlwZToiYnJ1c2giLG1vZGU6InJlc2l6ZSJ9KX19KSkuZWFjaCgiZW5kLmJydXNoIiwoZnVuY3Rpb24oKXt0PWkuaSxyPWkuaixhKHt0eXBlOiJicnVzaCIsbW9kZToicmVzaXplIn0pLGEoe3R5cGU6ImJydXNoZW5kIn0pfSkpOihhKHt0eXBlOiJicnVzaHN0YXJ0In0pLGEoe3R5cGU6ImJydXNoIixtb2RlOiJyZXNpemUifSksYSh7dHlwZToiYnJ1c2hlbmQifSkpfSkpfSxkLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9emxbIShhPWUpPDwxfCFpXSxkKTphfSxkLnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9emxbIWE8PDF8IShpPWUpXSxkKTppfSxkLmNsYW1wPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhJiZpPyhjPSEhZVswXSx1PSEhZVsxXSk6YT9jPSEhZTppJiYodT0hIWUpLGQpOmEmJmk/W2MsdV06YT9jOmk/dTpudWxsfSxkLmV4dGVudD1mdW5jdGlvbihlKXt2YXIgbixvLGMsdSxmO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhJiYobj1lWzBdLG89ZVsxXSxpJiYobj1uWzBdLG89b1swXSksdD1bbixvXSxhLmludmVydCYmKG49YShuKSxvPWEobykpLG88biYmKGY9bixuPW8sbz1mKSxuPT1sWzBdJiZvPT1sWzFdfHwobD1bbixvXSkpLGkmJihjPWVbMF0sdT1lWzFdLGEmJihjPWNbMV0sdT11WzFdKSxyPVtjLHVdLGkuaW52ZXJ0JiYoYz1pKGMpLHU9aSh1KSksdTxjJiYoZj1jLGM9dSx1PWYpLGM9PXNbMF0mJnU9PXNbMV18fChzPVtjLHVdKSksZCk6KGEmJih0PyhuPXRbMF0sbz10WzFdKToobj1sWzBdLG89bFsxXSxhLmludmVydCYmKG49YS5pbnZlcnQobiksbz1hLmludmVydChvKSksbzxuJiYoZj1uLG49byxvPWYpKSksaSYmKHI/KGM9clswXSx1PXJbMV0pOihjPXNbMF0sdT1zWzFdLGkuaW52ZXJ0JiYoYz1pLmludmVydChjKSx1PWkuaW52ZXJ0KHUpKSx1PGMmJihmPWMsYz11LHU9ZikpKSxhJiZpP1tbbixjXSxbbyx1XV06YT9bbixvXTppJiZbYyx1XSl9LGQuY2xlYXI9ZnVuY3Rpb24oKXtyZXR1cm4gZC5lbXB0eSgpfHwobD1bMCwwXSxzPVswLDBdLHQ9cj1udWxsKSxkfSxkLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuISFhJiZsWzBdPT1sWzFdfHwhIWkmJnNbMF09PXNbMV19LGUucmViaW5kKGQsbiwib24iKX07dmFyIFBsPXtuOiJucy1yZXNpemUiLGU6ImV3LXJlc2l6ZSIsczoibnMtcmVzaXplIix3OiJldy1yZXNpemUiLG53OiJud3NlLXJlc2l6ZSIsbmU6Im5lc3ctcmVzaXplIixzZToibndzZS1yZXNpemUiLHN3OiJuZXN3LXJlc2l6ZSJ9LHpsPVtbIm4iLCJlIiwicyIsInciLCJudyIsIm5lIiwic2UiLCJzdyJdLFsiZSIsInciXSxbIm4iLCJzIl0sW11dLFJsPVB0LmZvcm1hdD1sci50aW1lRm9ybWF0LEVsPVJsLnV0YyxJbD1FbCgiJVktJW0tJWRUJUg6JU06JVMuJUxaIik7ZnVuY3Rpb24gRmwoZSl7cmV0dXJuIGUudG9JU09TdHJpbmcoKX1mdW5jdGlvbiBObCh0LHIsbil7ZnVuY3Rpb24gYShlKXtyZXR1cm4gdChlKX1mdW5jdGlvbiBpKHQsbil7dmFyIGE9KHRbMV0tdFswXSkvbixpPWUuYmlzZWN0KGpsLGEpO3JldHVybiBpPT1qbC5sZW5ndGg/W3IueWVhcixrbyh0Lm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUvMzE1MzZlNn0pKSxuKVsyXV06aT9yW2EvamxbaS0xXTxqbFtpXS9hP2ktMTppXTpbVWwsa28odCxuKVsyXV19cmV0dXJuIGEuaW52ZXJ0PWZ1bmN0aW9uKGUpe3JldHVybiBIbCh0LmludmVydChlKSl9LGEuZG9tYWluPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0LmRvbWFpbihlKSxhKTp0LmRvbWFpbigpLm1hcChIbCl9LGEubmljZT1mdW5jdGlvbihlLHQpe3ZhciByPWEuZG9tYWluKCksbj1nbyhyKSxvPW51bGw9PWU/aShuLDEwKToibnVtYmVyIj09dHlwZW9mIGUmJmkobixlKTtmdW5jdGlvbiBsKHIpe3JldHVybiFpc05hTihyKSYmIWUucmFuZ2UocixIbCgrcisxKSx0KS5sZW5ndGh9cmV0dXJuIG8mJihlPW9bMF0sdD1vWzFdKSxhLmRvbWFpbih5byhyLHQ+MT97Zmxvb3I6ZnVuY3Rpb24odCl7Zm9yKDtsKHQ9ZS5mbG9vcih0KSk7KXQ9SGwodC0xKTtyZXR1cm4gdH0sY2VpbDpmdW5jdGlvbih0KXtmb3IoO2wodD1lLmNlaWwodCkpOyl0PUhsKCt0KzEpO3JldHVybiB0fX06ZSkpfSxhLnRpY2tzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9Z28oYS5kb21haW4oKSksbj1udWxsPT1lP2kociwxMCk6Im51bWJlciI9PXR5cGVvZiBlP2kocixlKTohZS5yYW5nZSYmW3tyYW5nZTplfSx0XTtyZXR1cm4gbiYmKGU9blswXSx0PW5bMV0pLGUucmFuZ2UoclswXSxIbCgrclsxXSsxKSx0PDE/MTp0KX0sYS50aWNrRm9ybWF0PWZ1bmN0aW9uKCl7cmV0dXJuIG59LGEuY29weT1mdW5jdGlvbigpe3JldHVybiBObCh0LmNvcHkoKSxyLG4pfSx3byhhLHQpfWZ1bmN0aW9uIEhsKGUpe3JldHVybiBuZXcgRGF0ZShlKX1SbC5pc289RGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcmJituZXcgRGF0ZSgiMjAwMC0wMS0wMVQwMDowMDowMC4wMDBaIik/Rmw6SWwsRmwucGFyc2U9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IERhdGUoZSk7cmV0dXJuIGlzTmFOKHQpP251bGw6dH0sRmwudG9TdHJpbmc9SWwudG9TdHJpbmcsUHQuc2Vjb25kPUl0KChmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHp0KDFlMypNYXRoLmZsb29yKGUvMWUzKSl9KSwoZnVuY3Rpb24oZSx0KXtlLnNldFRpbWUoZS5nZXRUaW1lKCkrMWUzKk1hdGguZmxvb3IodCkpfSksKGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFNlY29uZHMoKX0pKSxQdC5zZWNvbmRzPVB0LnNlY29uZC5yYW5nZSxQdC5zZWNvbmRzLnV0Yz1QdC5zZWNvbmQudXRjLnJhbmdlLFB0Lm1pbnV0ZT1JdCgoZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB6dCg2ZTQqTWF0aC5mbG9vcihlLzZlNCkpfSksKGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKGUuZ2V0VGltZSgpKzZlNCpNYXRoLmZsb29yKHQpKX0pLChmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRNaW51dGVzKCl9KSksUHQubWludXRlcz1QdC5taW51dGUucmFuZ2UsUHQubWludXRlcy51dGM9UHQubWludXRlLnV0Yy5yYW5nZSxQdC5ob3VyPUl0KChmdW5jdGlvbihlKXt2YXIgdD1lLmdldFRpbWV6b25lT2Zmc2V0KCkvNjA7cmV0dXJuIG5ldyB6dCgzNmU1KihNYXRoLmZsb29yKGUvMzZlNS10KSt0KSl9KSwoZnVuY3Rpb24oZSx0KXtlLnNldFRpbWUoZS5nZXRUaW1lKCkrMzZlNSpNYXRoLmZsb29yKHQpKX0pLChmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRIb3VycygpfSkpLFB0LmhvdXJzPVB0LmhvdXIucmFuZ2UsUHQuaG91cnMudXRjPVB0LmhvdXIudXRjLnJhbmdlLFB0Lm1vbnRoPUl0KChmdW5jdGlvbihlKXtyZXR1cm4oZT1QdC5kYXkoZSkpLnNldERhdGUoMSksZX0pLChmdW5jdGlvbihlLHQpe2Uuc2V0TW9udGgoZS5nZXRNb250aCgpK3QpfSksKGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldE1vbnRoKCl9KSksUHQubW9udGhzPVB0Lm1vbnRoLnJhbmdlLFB0Lm1vbnRocy51dGM9UHQubW9udGgudXRjLnJhbmdlO3ZhciBqbD1bMWUzLDVlMywxNWUzLDNlNCw2ZTQsM2U1LDllNSwxOGU1LDM2ZTUsMTA4ZTUsMjE2ZTUsNDMyZTUsODY0ZTUsMTcyOGU1LDYwNDhlNSwyNTkyZTYsNzc3NmU2LDMxNTM2ZTZdLEJsPVtbUHQuc2Vjb25kLDFdLFtQdC5zZWNvbmQsNV0sW1B0LnNlY29uZCwxNV0sW1B0LnNlY29uZCwzMF0sW1B0Lm1pbnV0ZSwxXSxbUHQubWludXRlLDVdLFtQdC5taW51dGUsMTVdLFtQdC5taW51dGUsMzBdLFtQdC5ob3VyLDFdLFtQdC5ob3VyLDNdLFtQdC5ob3VyLDZdLFtQdC5ob3VyLDEyXSxbUHQuZGF5LDFdLFtQdC5kYXksMl0sW1B0LndlZWssMV0sW1B0Lm1vbnRoLDFdLFtQdC5tb250aCwzXSxbUHQueWVhciwxXV0sVmw9UmwubXVsdGkoW1siLiVMIixmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRNaWxsaXNlY29uZHMoKX1dLFsiOiVTIixmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRTZWNvbmRzKCl9XSxbIiVJOiVNIixmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRNaW51dGVzKCl9XSxbIiVJICVwIixmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRIb3VycygpfV0sWyIlYSAlZCIsZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0RGF5KCkmJjEhPWUuZ2V0RGF0ZSgpfV0sWyIlYiAlZCIsZnVuY3Rpb24oZSl7cmV0dXJuIDEhPWUuZ2V0RGF0ZSgpfV0sWyIlQiIsZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0TW9udGgoKX1dLFsiJVkiLFpyXV0pLFVsPXtyYW5nZTpmdW5jdGlvbih0LHIsbil7cmV0dXJuIGUucmFuZ2UoTWF0aC5jZWlsKHQvbikqbiwrcixuKS5tYXAoSGwpfSxmbG9vcjpPLGNlaWw6T307QmwueWVhcj1QdC55ZWFyLFB0LnNjYWxlPWZ1bmN0aW9uKCl7cmV0dXJuIE5sKGUuc2NhbGUubGluZWFyKCksQmwsVmwpfTt2YXIgcWw9QmwubWFwKChmdW5jdGlvbihlKXtyZXR1cm5bZVswXS51dGMsZVsxXV19KSksR2w9RWwubXVsdGkoW1siLiVMIixmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENNaWxsaXNlY29uZHMoKX1dLFsiOiVTIixmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENTZWNvbmRzKCl9XSxbIiVJOiVNIixmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENNaW51dGVzKCl9XSxbIiVJICVwIixmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENIb3VycygpfV0sWyIlYSAlZCIsZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDRGF5KCkmJjEhPWUuZ2V0VVRDRGF0ZSgpfV0sWyIlYiAlZCIsZnVuY3Rpb24oZSl7cmV0dXJuIDEhPWUuZ2V0VVRDRGF0ZSgpfV0sWyIlQiIsZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDTW9udGgoKX1dLFsiJVkiLFpyXV0pO2Z1bmN0aW9uIFpsKGUpe3JldHVybiBKU09OLnBhcnNlKGUucmVzcG9uc2VUZXh0KX1mdW5jdGlvbiBZbChlKXt2YXIgdD1hLmNyZWF0ZVJhbmdlKCk7cmV0dXJuIHQuc2VsZWN0Tm9kZShhLmJvZHkpLHQuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGUucmVzcG9uc2VUZXh0KX1xbC55ZWFyPVB0LnllYXIudXRjLFB0LnNjYWxlLnV0Yz1mdW5jdGlvbigpe3JldHVybiBObChlLnNjYWxlLmxpbmVhcigpLHFsLEdsKX0sZS50ZXh0PWd0KChmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXNwb25zZVRleHR9KSksZS5qc29uPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZ0KGUsImFwcGxpY2F0aW9uL2pzb24iLFpsLHQpfSxlLmh0bWw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdnQoZSwidGV4dC9odG1sIixZbCx0KX0sZS54bWw9Z3QoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlc3BvbnNlWE1MfSkpLCJvYmplY3QiPT10eXBlb2YgdCYmdC5leHBvcnRzP3QuZXhwb3J0cz1lOnRoaXMuZDM9ZX0oKX0se31dLDEwOltmdW5jdGlvbihlLHQscil7KGZ1bmN0aW9uKG4sYSl7KGZ1bmN0aW9uKCl7Ci8qIQogKiBAb3ZlcnZpZXcgZXM2LXByb21pc2UgLSBhIHRpbnkgaW1wbGVtZW50YXRpb24gb2YgUHJvbWlzZXMvQSsuCiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChjKSAyMDE0IFllaHVkYSBLYXR6LCBUb20gRGFsZSwgU3RlZmFuIFBlbm5lciBhbmQgY29udHJpYnV0b3JzIChDb252ZXJzaW9uIHRvIEVTNiBBUEkgYnkgSmFrZSBBcmNoaWJhbGQpCiAqIEBsaWNlbnNlICAgTGljZW5zZWQgdW5kZXIgTUlUIGxpY2Vuc2UKICogICAgICAgICAgICBTZWUgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3N0ZWZhbnBlbm5lci9lczYtcHJvbWlzZS9tYXN0ZXIvTElDRU5TRQogKiBAdmVyc2lvbiAgIHY0LjIuOCsxZTY4ZGNlNgogKi8KIWZ1bmN0aW9uKGUsbil7Im9iamVjdCI9PXR5cGVvZiByJiYidW5kZWZpbmVkIiE9dHlwZW9mIHQ/dC5leHBvcnRzPW4oKTplLkVTNlByb21pc2U9bigpfSh0aGlzLChmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB0KGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlfXZhciByPUFycmF5LmlzQXJyYXk/QXJyYXkuaXNBcnJheTpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpfSxpPTAsbz12b2lkIDAsbD12b2lkIDAscz1mdW5jdGlvbihlLHQpe2dbaV09ZSxnW2krMV09dCwyPT09KGkrPTIpJiYobD9sKHYpOl8oKSl9O3ZhciBjPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp2b2lkIDAsdT1jfHx7fSxmPXUuTXV0YXRpb25PYnNlcnZlcnx8dS5XZWJLaXRNdXRhdGlvbk9ic2VydmVyLGQ9InVuZGVmaW5lZCI9PXR5cGVvZiBzZWxmJiYidW5kZWZpbmVkIiE9dHlwZW9mIG4mJiJbb2JqZWN0IHByb2Nlc3NdIj09PXt9LnRvU3RyaW5nLmNhbGwobikscD0idW5kZWZpbmVkIiE9dHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5JiYidW5kZWZpbmVkIiE9dHlwZW9mIGltcG9ydFNjcmlwdHMmJiJ1bmRlZmluZWQiIT10eXBlb2YgTWVzc2FnZUNoYW5uZWw7ZnVuY3Rpb24gaCgpe3ZhciBlPXNldFRpbWVvdXQ7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUodiwxKX19dmFyIGc9bmV3IEFycmF5KDFlMyk7ZnVuY3Rpb24gdigpe2Zvcih2YXIgZT0wO2U8aTtlKz0yKXsoMCxnW2VdKShnW2UrMV0pLGdbZV09dm9pZCAwLGdbZSsxXT12b2lkIDB9aT0wfXZhciBtLHkseCxiLF89dm9pZCAwO2Z1bmN0aW9uIHcoZSx0KXt2YXIgcj10aGlzLG49bmV3IHRoaXMuY29uc3RydWN0b3IoTSk7dm9pZCAwPT09bltrXSYmRShuKTt2YXIgYT1yLl9zdGF0ZTtpZihhKXt2YXIgaT1hcmd1bWVudHNbYS0xXTtzKChmdW5jdGlvbigpe3JldHVybiB6KGEsbixpLHIuX3Jlc3VsdCl9KSl9ZWxzZSBEKHIsbixlLHQpO3JldHVybiBufWZ1bmN0aW9uIFQoZSl7aWYoZSYmIm9iamVjdCI9PXR5cGVvZiBlJiZlLmNvbnN0cnVjdG9yPT09dGhpcylyZXR1cm4gZTt2YXIgdD1uZXcgdGhpcyhNKTtyZXR1cm4gTCh0LGUpLHR9ZD9fPWZ1bmN0aW9uKCl7cmV0dXJuIG4ubmV4dFRpY2sodil9OmY/KHk9MCx4PW5ldyBmKHYpLGI9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpLHgub2JzZXJ2ZShiLHtjaGFyYWN0ZXJEYXRhOiEwfSksXz1mdW5jdGlvbigpe2IuZGF0YT15PSsreSUyfSk6cD8oKG09bmV3IE1lc3NhZ2VDaGFubmVsKS5wb3J0MS5vbm1lc3NhZ2U9dixfPWZ1bmN0aW9uKCl7cmV0dXJuIG0ucG9ydDIucG9zdE1lc3NhZ2UoMCl9KTpfPXZvaWQgMD09PWMmJiJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKCl7dHJ5e3ZhciBlPUZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCkucmVxdWlyZSgidmVydHgiKTtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mKG89ZS5ydW5Pbkxvb3B8fGUucnVuT25Db250ZXh0KT9mdW5jdGlvbigpe28odil9OmgoKX1jYXRjaChlKXtyZXR1cm4gaCgpfX0oKTpoKCk7dmFyIGs9TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIpO2Z1bmN0aW9uIE0oKXt9ZnVuY3Rpb24gQShlLHIsbil7ci5jb25zdHJ1Y3Rvcj09PWUuY29uc3RydWN0b3ImJm49PT13JiZyLmNvbnN0cnVjdG9yLnJlc29sdmU9PT1UP2Z1bmN0aW9uKGUsdCl7MT09PXQuX3N0YXRlP0MoZSx0Ll9yZXN1bHQpOjI9PT10Ll9zdGF0ZT9PKGUsdC5fcmVzdWx0KTpEKHQsdm9pZCAwLChmdW5jdGlvbih0KXtyZXR1cm4gTChlLHQpfSksKGZ1bmN0aW9uKHQpe3JldHVybiBPKGUsdCl9KSl9KGUscik6dm9pZCAwPT09bj9DKGUscik6dChuKT9mdW5jdGlvbihlLHQscil7cygoZnVuY3Rpb24oZSl7dmFyIG49ITEsYT1mdW5jdGlvbihlLHQscixuKXt0cnl7ZS5jYWxsKHQscixuKX1jYXRjaChlKXtyZXR1cm4gZX19KHIsdCwoZnVuY3Rpb24ocil7bnx8KG49ITAsdCE9PXI/TChlLHIpOkMoZSxyKSl9KSwoZnVuY3Rpb24odCl7bnx8KG49ITAsTyhlLHQpKX0pLGUuX2xhYmVsKTshbiYmYSYmKG49ITAsTyhlLGEpKX0pLGUpfShlLHIsbik6QyhlLHIpfWZ1bmN0aW9uIEwoZSx0KXtpZihlPT09dClPKGUsbmV3IFR5cGVFcnJvcigiWW91IGNhbm5vdCByZXNvbHZlIGEgcHJvbWlzZSB3aXRoIGl0c2VsZiIpKTtlbHNlIGlmKGE9dHlwZW9mKG49dCksbnVsbD09PW58fCJvYmplY3QiIT09YSYmImZ1bmN0aW9uIiE9PWEpQyhlLHQpO2Vsc2V7dmFyIHI9dm9pZCAwO3RyeXtyPXQudGhlbn1jYXRjaCh0KXtyZXR1cm4gdm9pZCBPKGUsdCl9QShlLHQscil9dmFyIG4sYX1mdW5jdGlvbiBTKGUpe2UuX29uZXJyb3ImJmUuX29uZXJyb3IoZS5fcmVzdWx0KSxQKGUpfWZ1bmN0aW9uIEMoZSx0KXt2b2lkIDA9PT1lLl9zdGF0ZSYmKGUuX3Jlc3VsdD10LGUuX3N0YXRlPTEsMCE9PWUuX3N1YnNjcmliZXJzLmxlbmd0aCYmcyhQLGUpKX1mdW5jdGlvbiBPKGUsdCl7dm9pZCAwPT09ZS5fc3RhdGUmJihlLl9zdGF0ZT0yLGUuX3Jlc3VsdD10LHMoUyxlKSl9ZnVuY3Rpb24gRChlLHQscixuKXt2YXIgYT1lLl9zdWJzY3JpYmVycyxpPWEubGVuZ3RoO2UuX29uZXJyb3I9bnVsbCxhW2ldPXQsYVtpKzFdPXIsYVtpKzJdPW4sMD09PWkmJmUuX3N0YXRlJiZzKFAsZSl9ZnVuY3Rpb24gUChlKXt2YXIgdD1lLl9zdWJzY3JpYmVycyxyPWUuX3N0YXRlO2lmKDAhPT10Lmxlbmd0aCl7Zm9yKHZhciBuPXZvaWQgMCxhPXZvaWQgMCxpPWUuX3Jlc3VsdCxvPTA7bzx0Lmxlbmd0aDtvKz0zKW49dFtvXSxhPXRbbytyXSxuP3oocixuLGEsaSk6YShpKTtlLl9zdWJzY3JpYmVycy5sZW5ndGg9MH19ZnVuY3Rpb24geihlLHIsbixhKXt2YXIgaT10KG4pLG89dm9pZCAwLGw9dm9pZCAwLHM9ITA7aWYoaSl7dHJ5e289bihhKX1jYXRjaChlKXtzPSExLGw9ZX1pZihyPT09bylyZXR1cm4gdm9pZCBPKHIsbmV3IFR5cGVFcnJvcigiQSBwcm9taXNlcyBjYWxsYmFjayBjYW5ub3QgcmV0dXJuIHRoYXQgc2FtZSBwcm9taXNlLiIpKX1lbHNlIG89YTt2b2lkIDAhPT1yLl9zdGF0ZXx8KGkmJnM/TChyLG8pOiExPT09cz9PKHIsbCk6MT09PWU/QyhyLG8pOjI9PT1lJiZPKHIsbykpfXZhciBSPTA7ZnVuY3Rpb24gRShlKXtlW2tdPVIrKyxlLl9zdGF0ZT12b2lkIDAsZS5fcmVzdWx0PXZvaWQgMCxlLl9zdWJzY3JpYmVycz1bXX12YXIgST1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLl9pbnN0YW5jZUNvbnN0cnVjdG9yPWUsdGhpcy5wcm9taXNlPW5ldyBlKE0pLHRoaXMucHJvbWlzZVtrXXx8RSh0aGlzLnByb21pc2UpLHIodCk/KHRoaXMubGVuZ3RoPXQubGVuZ3RoLHRoaXMuX3JlbWFpbmluZz10Lmxlbmd0aCx0aGlzLl9yZXN1bHQ9bmV3IEFycmF5KHRoaXMubGVuZ3RoKSwwPT09dGhpcy5sZW5ndGg/Qyh0aGlzLnByb21pc2UsdGhpcy5fcmVzdWx0KToodGhpcy5sZW5ndGg9dGhpcy5sZW5ndGh8fDAsdGhpcy5fZW51bWVyYXRlKHQpLDA9PT10aGlzLl9yZW1haW5pbmcmJkModGhpcy5wcm9taXNlLHRoaXMuX3Jlc3VsdCkpKTpPKHRoaXMucHJvbWlzZSxuZXcgRXJyb3IoIkFycmF5IE1ldGhvZHMgbXVzdCBiZSBwcm92aWRlZCBhbiBBcnJheSIpKX1yZXR1cm4gZS5wcm90b3R5cGUuX2VudW1lcmF0ZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt2b2lkIDA9PT10aGlzLl9zdGF0ZSYmdDxlLmxlbmd0aDt0KyspdGhpcy5fZWFjaEVudHJ5KGVbdF0sdCl9LGUucHJvdG90eXBlLl9lYWNoRW50cnk9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9pbnN0YW5jZUNvbnN0cnVjdG9yLG49ci5yZXNvbHZlO2lmKG49PT1UKXt2YXIgYT12b2lkIDAsaT12b2lkIDAsbz0hMTt0cnl7YT1lLnRoZW59Y2F0Y2goZSl7bz0hMCxpPWV9aWYoYT09PXcmJnZvaWQgMCE9PWUuX3N0YXRlKXRoaXMuX3NldHRsZWRBdChlLl9zdGF0ZSx0LGUuX3Jlc3VsdCk7ZWxzZSBpZigiZnVuY3Rpb24iIT10eXBlb2YgYSl0aGlzLl9yZW1haW5pbmctLSx0aGlzLl9yZXN1bHRbdF09ZTtlbHNlIGlmKHI9PT1GKXt2YXIgbD1uZXcgcihNKTtvP08obCxpKTpBKGwsZSxhKSx0aGlzLl93aWxsU2V0dGxlQXQobCx0KX1lbHNlIHRoaXMuX3dpbGxTZXR0bGVBdChuZXcgcigoZnVuY3Rpb24odCl7cmV0dXJuIHQoZSl9KSksdCl9ZWxzZSB0aGlzLl93aWxsU2V0dGxlQXQobihlKSx0KX0sZS5wcm90b3R5cGUuX3NldHRsZWRBdD1mdW5jdGlvbihlLHQscil7dmFyIG49dGhpcy5wcm9taXNlO3ZvaWQgMD09PW4uX3N0YXRlJiYodGhpcy5fcmVtYWluaW5nLS0sMj09PWU/TyhuLHIpOnRoaXMuX3Jlc3VsdFt0XT1yKSwwPT09dGhpcy5fcmVtYWluaW5nJiZDKG4sdGhpcy5fcmVzdWx0KX0sZS5wcm90b3R5cGUuX3dpbGxTZXR0bGVBdD1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXM7RChlLHZvaWQgMCwoZnVuY3Rpb24oZSl7cmV0dXJuIHIuX3NldHRsZWRBdCgxLHQsZSl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIHIuX3NldHRsZWRBdCgyLHQsZSl9KSl9LGV9KCk7dmFyIEY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3RoaXNba109UisrLHRoaXMuX3Jlc3VsdD10aGlzLl9zdGF0ZT12b2lkIDAsdGhpcy5fc3Vic2NyaWJlcnM9W10sTSE9PXQmJigiZnVuY3Rpb24iIT10eXBlb2YgdCYmZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJZb3UgbXVzdCBwYXNzIGEgcmVzb2x2ZXIgZnVuY3Rpb24gYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBwcm9taXNlIGNvbnN0cnVjdG9yIil9KCksdGhpcyBpbnN0YW5jZW9mIGU/ZnVuY3Rpb24oZSx0KXt0cnl7dCgoZnVuY3Rpb24odCl7TChlLHQpfSksKGZ1bmN0aW9uKHQpe08oZSx0KX0pKX1jYXRjaCh0KXtPKGUsdCl9fSh0aGlzLHQpOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiRmFpbGVkIHRvIGNvbnN0cnVjdCAnUHJvbWlzZSc6IFBsZWFzZSB1c2UgdGhlICduZXcnIG9wZXJhdG9yLCB0aGlzIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uIil9KCkpfXJldHVybiBlLnByb3RvdHlwZS5jYXRjaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50aGVuKG51bGwsZSl9LGUucHJvdG90eXBlLmZpbmFsbHk9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5jb25zdHJ1Y3RvcjtyZXR1cm4gdChlKT90aGlzLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiByLnJlc29sdmUoZSgpKS50aGVuKChmdW5jdGlvbigpe3JldHVybiB0fSkpfSksKGZ1bmN0aW9uKHQpe3JldHVybiByLnJlc29sdmUoZSgpKS50aGVuKChmdW5jdGlvbigpe3Rocm93IHR9KSl9KSk6dGhpcy50aGVuKGUsZSl9LGV9KCk7cmV0dXJuIEYucHJvdG90eXBlLnRoZW49dyxGLmFsbD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IEkodGhpcyxlKS5wcm9taXNlfSxGLnJhY2U9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztyZXR1cm4gcihlKT9uZXcgdCgoZnVuY3Rpb24ocixuKXtmb3IodmFyIGE9ZS5sZW5ndGgsaT0wO2k8YTtpKyspdC5yZXNvbHZlKGVbaV0pLnRoZW4ocixuKX0pKTpuZXcgdCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdChuZXcgVHlwZUVycm9yKCJZb3UgbXVzdCBwYXNzIGFuIGFycmF5IHRvIHJhY2UuIikpfSkpfSxGLnJlc29sdmU9VCxGLnJlamVjdD1mdW5jdGlvbihlKXt2YXIgdD1uZXcgdGhpcyhNKTtyZXR1cm4gTyh0LGUpLHR9LEYuX3NldFNjaGVkdWxlcj1mdW5jdGlvbihlKXtsPWV9LEYuX3NldEFzYXA9ZnVuY3Rpb24oZSl7cz1lfSxGLl9hc2FwPXMsRi5wb2x5ZmlsbD1mdW5jdGlvbigpe3ZhciBlPXZvaWQgMDtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGEpZT1hO2Vsc2UgaWYoInVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmKWU9c2VsZjtlbHNlIHRyeXtlPUZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCl9Y2F0Y2goZSl7dGhyb3cgbmV3IEVycm9yKCJwb2x5ZmlsbCBmYWlsZWQgYmVjYXVzZSBnbG9iYWwgb2JqZWN0IGlzIHVuYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnQiKX12YXIgdD1lLlByb21pc2U7aWYodCl7dmFyIHI9bnVsbDt0cnl7cj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodC5yZXNvbHZlKCkpfWNhdGNoKGUpe31pZigiW29iamVjdCBQcm9taXNlXSI9PT1yJiYhdC5jYXN0KXJldHVybn1lLlByb21pc2U9Rn0sRi5Qcm9taXNlPUYsRn0pKX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsZSgiX3Byb2Nlc3MiKSwidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se19wcm9jZXNzOjU3fV0sMTE6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiaXMtc3RyaW5nLWJsYW5rIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXR5cGVvZiBlO2lmKCJzdHJpbmciPT09dCl7dmFyIHI9ZTtpZigwPT09KGU9K2UpJiZuKHIpKXJldHVybiExfWVsc2UgaWYoIm51bWJlciIhPT10KXJldHVybiExO3JldHVybiBlLWU8MX19LHsiaXMtc3RyaW5nLWJsYW5rIjo0Nn1dLDEyOltmdW5jdGlvbihlLHQscil7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dFswXSxuPXRbMV0sYT10WzJdLGk9dFszXSxvPXRbNF0sbD10WzVdLHM9dFs2XSxjPXRbN10sdT10WzhdLGY9dFs5XSxkPXRbMTBdLHA9dFsxMV0saD10WzEyXSxnPXRbMTNdLHY9dFsxNF0sbT10WzE1XTtyZXR1cm4gZVswXT1sKihkKm0tcCp2KS1mKihzKm0tYyp2KStnKihzKnAtYypkKSxlWzFdPS0obiooZCptLXAqdiktZiooYSptLWkqdikrZyooYSpwLWkqZCkpLGVbMl09bioocyptLWMqdiktbCooYSptLWkqdikrZyooYSpjLWkqcyksZVszXT0tKG4qKHMqcC1jKmQpLWwqKGEqcC1pKmQpK2YqKGEqYy1pKnMpKSxlWzRdPS0obyooZCptLXAqdiktdSoocyptLWMqdikraCoocypwLWMqZCkpLGVbNV09ciooZCptLXAqdiktdSooYSptLWkqdikraCooYSpwLWkqZCksZVs2XT0tKHIqKHMqbS1jKnYpLW8qKGEqbS1pKnYpK2gqKGEqYy1pKnMpKSxlWzddPXIqKHMqcC1jKmQpLW8qKGEqcC1pKmQpK3UqKGEqYy1pKnMpLGVbOF09byooZiptLXAqZyktdSoobCptLWMqZykraCoobCpwLWMqZiksZVs5XT0tKHIqKGYqbS1wKmcpLXUqKG4qbS1pKmcpK2gqKG4qcC1pKmYpKSxlWzEwXT1yKihsKm0tYypnKS1vKihuKm0taSpnKStoKihuKmMtaSpsKSxlWzExXT0tKHIqKGwqcC1jKmYpLW8qKG4qcC1pKmYpK3UqKG4qYy1pKmwpKSxlWzEyXT0tKG8qKGYqdi1kKmcpLXUqKGwqdi1zKmcpK2gqKGwqZC1zKmYpKSxlWzEzXT1yKihmKnYtZCpnKS11KihuKnYtYSpnKStoKihuKmQtYSpmKSxlWzE0XT0tKHIqKGwqdi1zKmcpLW8qKG4qdi1hKmcpK2gqKG4qcy1hKmwpKSxlWzE1XT1yKihsKmQtcypmKS1vKihuKmQtYSpmKSt1KihuKnMtYSpsKSxlfX0se31dLDEzOltmdW5jdGlvbihlLHQscil7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBGbG9hdDMyQXJyYXkoMTYpO3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0WzNdPWVbM10sdFs0XT1lWzRdLHRbNV09ZVs1XSx0WzZdPWVbNl0sdFs3XT1lWzddLHRbOF09ZVs4XSx0WzldPWVbOV0sdFsxMF09ZVsxMF0sdFsxMV09ZVsxMV0sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0sdH19LHt9XSwxNDpbZnVuY3Rpb24oZSx0LHIpe3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBlWzBdPXRbMF0sZVsxXT10WzFdLGVbMl09dFsyXSxlWzNdPXRbM10sZVs0XT10WzRdLGVbNV09dFs1XSxlWzZdPXRbNl0sZVs3XT10WzddLGVbOF09dFs4XSxlWzldPXRbOV0sZVsxMF09dFsxMF0sZVsxMV09dFsxMV0sZVsxMl09dFsxMl0sZVsxM109dFsxM10sZVsxNF09dFsxNF0sZVsxNV09dFsxNV0sZX19LHt9XSwxNTpbZnVuY3Rpb24oZSx0LHIpe3QuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciBlPW5ldyBGbG9hdDMyQXJyYXkoMTYpO3JldHVybiBlWzBdPTEsZVsxXT0wLGVbMl09MCxlWzNdPTAsZVs0XT0wLGVbNV09MSxlWzZdPTAsZVs3XT0wLGVbOF09MCxlWzldPTAsZVsxMF09MSxlWzExXT0wLGVbMTJdPTAsZVsxM109MCxlWzE0XT0wLGVbMTVdPTEsZX19LHt9XSwxNjpbZnVuY3Rpb24oZSx0LHIpe3QuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1lWzBdLHI9ZVsxXSxuPWVbMl0sYT1lWzNdLGk9ZVs0XSxvPWVbNV0sbD1lWzZdLHM9ZVs3XSxjPWVbOF0sdT1lWzldLGY9ZVsxMF0sZD1lWzExXSxwPWVbMTJdLGg9ZVsxM10sZz1lWzE0XSx2PWVbMTVdO3JldHVybih0Km8tcippKSooZip2LWQqZyktKHQqbC1uKmkpKih1KnYtZCpoKSsodCpzLWEqaSkqKHUqZy1mKmgpKyhyKmwtbipvKSooYyp2LWQqcCktKHIqcy1hKm8pKihjKmctZipwKSsobipzLWEqbCkqKGMqaC11KnApfX0se31dLDE3OltmdW5jdGlvbihlLHQscil7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dFswXSxuPXRbMV0sYT10WzJdLGk9dFszXSxvPXIrcixsPW4rbixzPWErYSxjPXIqbyx1PW4qbyxmPW4qbCxkPWEqbyxwPWEqbCxoPWEqcyxnPWkqbyx2PWkqbCxtPWkqcztyZXR1cm4gZVswXT0xLWYtaCxlWzFdPXUrbSxlWzJdPWQtdixlWzNdPTAsZVs0XT11LW0sZVs1XT0xLWMtaCxlWzZdPXArZyxlWzddPTAsZVs4XT1kK3YsZVs5XT1wLWcsZVsxMF09MS1jLWYsZVsxMV09MCxlWzEyXT0wLGVbMTNdPTAsZVsxNF09MCxlWzE1XT0xLGV9fSx7fV0sMTg6W2Z1bmN0aW9uKGUsdCxyKXt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGEsaSxvPXJbMF0sbD1yWzFdLHM9clsyXSxjPU1hdGguc3FydChvKm8rbCpsK3Mqcyk7aWYoTWF0aC5hYnMoYyk8MWUtNilyZXR1cm4gbnVsbDtyZXR1cm4gbyo9Yz0xL2MsbCo9YyxzKj1jLG49TWF0aC5zaW4odCksYT1NYXRoLmNvcyh0KSxpPTEtYSxlWzBdPW8qbyppK2EsZVsxXT1sKm8qaStzKm4sZVsyXT1zKm8qaS1sKm4sZVszXT0wLGVbNF09bypsKmktcypuLGVbNV09bCpsKmkrYSxlWzZdPXMqbCppK28qbixlWzddPTAsZVs4XT1vKnMqaStsKm4sZVs5XT1sKnMqaS1vKm4sZVsxMF09cypzKmkrYSxlWzExXT0wLGVbMTJdPTAsZVsxM109MCxlWzE0XT0wLGVbMTVdPTEsZX19LHt9XSwxOTpbZnVuY3Rpb24oZSx0LHIpe3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7dmFyIG49dFswXSxhPXRbMV0saT10WzJdLG89dFszXSxsPW4rbixzPWErYSxjPWkraSx1PW4qbCxmPW4qcyxkPW4qYyxwPWEqcyxoPWEqYyxnPWkqYyx2PW8qbCxtPW8qcyx5PW8qYztyZXR1cm4gZVswXT0xLShwK2cpLGVbMV09Zit5LGVbMl09ZC1tLGVbM109MCxlWzRdPWYteSxlWzVdPTEtKHUrZyksZVs2XT1oK3YsZVs3XT0wLGVbOF09ZCttLGVbOV09aC12LGVbMTBdPTEtKHUrcCksZVsxMV09MCxlWzEyXT1yWzBdLGVbMTNdPXJbMV0sZVsxNF09clsyXSxlWzE1XT0xLGV9fSx7fV0sMjA6W2Z1bmN0aW9uKGUsdCxyKXt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVswXT10WzBdLGVbMV09MCxlWzJdPTAsZVszXT0wLGVbNF09MCxlWzVdPXRbMV0sZVs2XT0wLGVbN109MCxlWzhdPTAsZVs5XT0wLGVbMTBdPXRbMl0sZVsxMV09MCxlWzEyXT0wLGVbMTNdPTAsZVsxNF09MCxlWzE1XT0xLGV9fSx7fV0sMjE6W2Z1bmN0aW9uKGUsdCxyKXt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVswXT0xLGVbMV09MCxlWzJdPTAsZVszXT0wLGVbNF09MCxlWzVdPTEsZVs2XT0wLGVbN109MCxlWzhdPTAsZVs5XT0wLGVbMTBdPTEsZVsxMV09MCxlWzEyXT10WzBdLGVbMTNdPXRbMV0sZVsxNF09dFsyXSxlWzE1XT0xLGV9fSx7fV0sMjI6W2Z1bmN0aW9uKGUsdCxyKXt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLnNpbih0KSxuPU1hdGguY29zKHQpO3JldHVybiBlWzBdPTEsZVsxXT0wLGVbMl09MCxlWzNdPTAsZVs0XT0wLGVbNV09bixlWzZdPXIsZVs3XT0wLGVbOF09MCxlWzldPS1yLGVbMTBdPW4sZVsxMV09MCxlWzEyXT0wLGVbMTNdPTAsZVsxNF09MCxlWzE1XT0xLGV9fSx7fV0sMjM6W2Z1bmN0aW9uKGUsdCxyKXt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLnNpbih0KSxuPU1hdGguY29zKHQpO3JldHVybiBlWzBdPW4sZVsxXT0wLGVbMl09LXIsZVszXT0wLGVbNF09MCxlWzVdPTEsZVs2XT0wLGVbN109MCxlWzhdPXIsZVs5XT0wLGVbMTBdPW4sZVsxMV09MCxlWzEyXT0wLGVbMTNdPTAsZVsxNF09MCxlWzE1XT0xLGV9fSx7fV0sMjQ6W2Z1bmN0aW9uKGUsdCxyKXt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLnNpbih0KSxuPU1hdGguY29zKHQpO3JldHVybiBlWzBdPW4sZVsxXT1yLGVbMl09MCxlWzNdPTAsZVs0XT0tcixlWzVdPW4sZVs2XT0wLGVbN109MCxlWzhdPTAsZVs5XT0wLGVbMTBdPTEsZVsxMV09MCxlWzEyXT0wLGVbMTNdPTAsZVsxNF09MCxlWzE1XT0xLGV9fSx7fV0sMjU6W2Z1bmN0aW9uKGUsdCxyKXt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsbixhLGksbyl7dmFyIGw9MS8oci10KSxzPTEvKGEtbiksYz0xLyhpLW8pO3JldHVybiBlWzBdPTIqaSpsLGVbMV09MCxlWzJdPTAsZVszXT0wLGVbNF09MCxlWzVdPTIqaSpzLGVbNl09MCxlWzddPTAsZVs4XT0ocit0KSpsLGVbOV09KGErbikqcyxlWzEwXT0obytpKSpjLGVbMTFdPS0xLGVbMTJdPTAsZVsxM109MCxlWzE0XT1vKmkqMipjLGVbMTVdPTAsZX19LHt9XSwyNjpbZnVuY3Rpb24oZSx0LHIpe3QuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gZVswXT0xLGVbMV09MCxlWzJdPTAsZVszXT0wLGVbNF09MCxlWzVdPTEsZVs2XT0wLGVbN109MCxlWzhdPTAsZVs5XT0wLGVbMTBdPTEsZVsxMV09MCxlWzEyXT0wLGVbMTNdPTAsZVsxNF09MCxlWzE1XT0xLGV9fSx7fV0sMjc6W2Z1bmN0aW9uKGUsdCxyKXt0LmV4cG9ydHM9e2NyZWF0ZTplKCIuL2NyZWF0ZSIpLGNsb25lOmUoIi4vY2xvbmUiKSxjb3B5OmUoIi4vY29weSIpLGlkZW50aXR5OmUoIi4vaWRlbnRpdHkiKSx0cmFuc3Bvc2U6ZSgiLi90cmFuc3Bvc2UiKSxpbnZlcnQ6ZSgiLi9pbnZlcnQiKSxhZGpvaW50OmUoIi4vYWRqb2ludCIpLGRldGVybWluYW50OmUoIi4vZGV0ZXJtaW5hbnQiKSxtdWx0aXBseTplKCIuL211bHRpcGx5IiksdHJhbnNsYXRlOmUoIi4vdHJhbnNsYXRlIiksc2NhbGU6ZSgiLi9zY2FsZSIpLHJvdGF0ZTplKCIuL3JvdGF0ZSIpLHJvdGF0ZVg6ZSgiLi9yb3RhdGVYIikscm90YXRlWTplKCIuL3JvdGF0ZVkiKSxyb3RhdGVaOmUoIi4vcm90YXRlWiIpLGZyb21Sb3RhdGlvbjplKCIuL2Zyb21Sb3RhdGlvbiIpLGZyb21Sb3RhdGlvblRyYW5zbGF0aW9uOmUoIi4vZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24iKSxmcm9tU2NhbGluZzplKCIuL2Zyb21TY2FsaW5nIiksZnJvbVRyYW5zbGF0aW9uOmUoIi4vZnJvbVRyYW5zbGF0aW9uIiksZnJvbVhSb3RhdGlvbjplKCIuL2Zyb21YUm90YXRpb24iKSxmcm9tWVJvdGF0aW9uOmUoIi4vZnJvbVlSb3RhdGlvbiIpLGZyb21aUm90YXRpb246ZSgiLi9mcm9tWlJvdGF0aW9uIiksZnJvbVF1YXQ6ZSgiLi9mcm9tUXVhdCIpLGZydXN0dW06ZSgiLi9mcnVzdHVtIikscGVyc3BlY3RpdmU6ZSgiLi9wZXJzcGVjdGl2ZSIpLHBlcnNwZWN0aXZlRnJvbUZpZWxkT2ZWaWV3OmUoIi4vcGVyc3BlY3RpdmVGcm9tRmllbGRPZlZpZXciKSxvcnRobzplKCIuL29ydGhvIiksbG9va0F0OmUoIi4vbG9va0F0Iiksc3RyOmUoIi4vc3RyIil9fSx7Ii4vYWRqb2ludCI6MTIsIi4vY2xvbmUiOjEzLCIuL2NvcHkiOjE0LCIuL2NyZWF0ZSI6MTUsIi4vZGV0ZXJtaW5hbnQiOjE2LCIuL2Zyb21RdWF0IjoxNywiLi9mcm9tUm90YXRpb24iOjE4LCIuL2Zyb21Sb3RhdGlvblRyYW5zbGF0aW9uIjoxOSwiLi9mcm9tU2NhbGluZyI6MjAsIi4vZnJvbVRyYW5zbGF0aW9uIjoyMSwiLi9mcm9tWFJvdGF0aW9uIjoyMiwiLi9mcm9tWVJvdGF0aW9uIjoyMywiLi9mcm9tWlJvdGF0aW9uIjoyNCwiLi9mcnVzdHVtIjoyNSwiLi9pZGVudGl0eSI6MjYsIi4vaW52ZXJ0IjoyOCwiLi9sb29rQXQiOjI5LCIuL211bHRpcGx5IjozMCwiLi9vcnRobyI6MzEsIi4vcGVyc3BlY3RpdmUiOjMyLCIuL3BlcnNwZWN0aXZlRnJvbUZpZWxkT2ZWaWV3IjozMywiLi9yb3RhdGUiOjM0LCIuL3JvdGF0ZVgiOjM1LCIuL3JvdGF0ZVkiOjM2LCIuL3JvdGF0ZVoiOjM3LCIuL3NjYWxlIjozOCwiLi9zdHIiOjM5LCIuL3RyYW5zbGF0ZSI6NDAsIi4vdHJhbnNwb3NlIjo0MX1dLDI4OltmdW5jdGlvbihlLHQscil7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dFswXSxuPXRbMV0sYT10WzJdLGk9dFszXSxvPXRbNF0sbD10WzVdLHM9dFs2XSxjPXRbN10sdT10WzhdLGY9dFs5XSxkPXRbMTBdLHA9dFsxMV0saD10WzEyXSxnPXRbMTNdLHY9dFsxNF0sbT10WzE1XSx5PXIqbC1uKm8seD1yKnMtYSpvLGI9cipjLWkqbyxfPW4qcy1hKmwsdz1uKmMtaSpsLFQ9YSpjLWkqcyxrPXUqZy1mKmgsTT11KnYtZCpoLEE9dSptLXAqaCxMPWYqdi1kKmcsUz1mKm0tcCpnLEM9ZCptLXAqdixPPXkqQy14KlMrYipMK18qQS13Kk0rVCprO2lmKCFPKXJldHVybiBudWxsO3JldHVybiBPPTEvTyxlWzBdPShsKkMtcypTK2MqTCkqTyxlWzFdPShhKlMtbipDLWkqTCkqTyxlWzJdPShnKlQtdip3K20qXykqTyxlWzNdPShkKnctZipULXAqXykqTyxlWzRdPShzKkEtbypDLWMqTSkqTyxlWzVdPShyKkMtYSpBK2kqTSkqTyxlWzZdPSh2KmItaCpULW0qeCkqTyxlWzddPSh1KlQtZCpiK3AqeCkqTyxlWzhdPShvKlMtbCpBK2MqaykqTyxlWzldPShuKkEtcipTLWkqaykqTyxlWzEwXT0oaCp3LWcqYittKnkpKk8sZVsxMV09KGYqYi11KnctcCp5KSpPLGVbMTJdPShsKk0tbypMLXMqaykqTyxlWzEzXT0ocipMLW4qTSthKmspKk8sZVsxNF09KGcqeC1oKl8tdip5KSpPLGVbMTVdPSh1Kl8tZip4K2QqeSkqTyxlfX0se31dLDI5OltmdW5jdGlvbihlLHQscil7dmFyIG49ZSgiLi9pZGVudGl0eSIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscixhKXt2YXIgaSxvLGwscyxjLHUsZixkLHAsaCxnPXRbMF0sdj10WzFdLG09dFsyXSx5PWFbMF0seD1hWzFdLGI9YVsyXSxfPXJbMF0sdz1yWzFdLFQ9clsyXTtpZihNYXRoLmFicyhnLV8pPDFlLTYmJk1hdGguYWJzKHYtdyk8MWUtNiYmTWF0aC5hYnMobS1UKTwxZS02KXJldHVybiBuKGUpO2Y9Zy1fLGQ9di13LHA9bS1ULGg9MS9NYXRoLnNxcnQoZipmK2QqZCtwKnApLGk9eCoocCo9aCktYiooZCo9aCksbz1iKihmKj1oKS15KnAsbD15KmQteCpmLChoPU1hdGguc3FydChpKmkrbypvK2wqbCkpPyhpKj1oPTEvaCxvKj1oLGwqPWgpOihpPTAsbz0wLGw9MCk7cz1kKmwtcCpvLGM9cCppLWYqbCx1PWYqby1kKmksKGg9TWF0aC5zcXJ0KHMqcytjKmMrdSp1KSk/KHMqPWg9MS9oLGMqPWgsdSo9aCk6KHM9MCxjPTAsdT0wKTtyZXR1cm4gZVswXT1pLGVbMV09cyxlWzJdPWYsZVszXT0wLGVbNF09byxlWzVdPWMsZVs2XT1kLGVbN109MCxlWzhdPWwsZVs5XT11LGVbMTBdPXAsZVsxMV09MCxlWzEyXT0tKGkqZytvKnYrbCptKSxlWzEzXT0tKHMqZytjKnYrdSptKSxlWzE0XT0tKGYqZytkKnYrcCptKSxlWzE1XT0xLGV9fSx7Ii4vaWRlbnRpdHkiOjI2fV0sMzA6W2Z1bmN0aW9uKGUsdCxyKXt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRbMF0sYT10WzFdLGk9dFsyXSxvPXRbM10sbD10WzRdLHM9dFs1XSxjPXRbNl0sdT10WzddLGY9dFs4XSxkPXRbOV0scD10WzEwXSxoPXRbMTFdLGc9dFsxMl0sdj10WzEzXSxtPXRbMTRdLHk9dFsxNV0seD1yWzBdLGI9clsxXSxfPXJbMl0sdz1yWzNdO3JldHVybiBlWzBdPXgqbitiKmwrXypmK3cqZyxlWzFdPXgqYStiKnMrXypkK3cqdixlWzJdPXgqaStiKmMrXypwK3cqbSxlWzNdPXgqbytiKnUrXypoK3cqeSx4PXJbNF0sYj1yWzVdLF89cls2XSx3PXJbN10sZVs0XT14Km4rYipsK18qZit3KmcsZVs1XT14KmErYipzK18qZCt3KnYsZVs2XT14KmkrYipjK18qcCt3Km0sZVs3XT14Km8rYip1K18qaCt3KnkseD1yWzhdLGI9cls5XSxfPXJbMTBdLHc9clsxMV0sZVs4XT14Km4rYipsK18qZit3KmcsZVs5XT14KmErYipzK18qZCt3KnYsZVsxMF09eCppK2IqYytfKnArdyptLGVbMTFdPXgqbytiKnUrXypoK3cqeSx4PXJbMTJdLGI9clsxM10sXz1yWzE0XSx3PXJbMTVdLGVbMTJdPXgqbitiKmwrXypmK3cqZyxlWzEzXT14KmErYipzK18qZCt3KnYsZVsxNF09eCppK2IqYytfKnArdyptLGVbMTVdPXgqbytiKnUrXypoK3cqeSxlfX0se31dLDMxOltmdW5jdGlvbihlLHQscil7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLG4sYSxpLG8pe3ZhciBsPTEvKHQtcikscz0xLyhuLWEpLGM9MS8oaS1vKTtyZXR1cm4gZVswXT0tMipsLGVbMV09MCxlWzJdPTAsZVszXT0wLGVbNF09MCxlWzVdPS0yKnMsZVs2XT0wLGVbN109MCxlWzhdPTAsZVs5XT0wLGVbMTBdPTIqYyxlWzExXT0wLGVbMTJdPSh0K3IpKmwsZVsxM109KGErbikqcyxlWzE0XT0obytpKSpjLGVbMTVdPTEsZX19LHt9XSwzMjpbZnVuY3Rpb24oZSx0LHIpe3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscixuLGEpe3ZhciBpPTEvTWF0aC50YW4odC8yKSxvPTEvKG4tYSk7cmV0dXJuIGVbMF09aS9yLGVbMV09MCxlWzJdPTAsZVszXT0wLGVbNF09MCxlWzVdPWksZVs2XT0wLGVbN109MCxlWzhdPTAsZVs5XT0wLGVbMTBdPShhK24pKm8sZVsxMV09LTEsZVsxMl09MCxlWzEzXT0wLGVbMTRdPTIqYSpuKm8sZVsxNV09MCxlfX0se31dLDMzOltmdW5jdGlvbihlLHQscil7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhPU1hdGgudGFuKHQudXBEZWdyZWVzKk1hdGguUEkvMTgwKSxpPU1hdGgudGFuKHQuZG93bkRlZ3JlZXMqTWF0aC5QSS8xODApLG89TWF0aC50YW4odC5sZWZ0RGVncmVlcypNYXRoLlBJLzE4MCksbD1NYXRoLnRhbih0LnJpZ2h0RGVncmVlcypNYXRoLlBJLzE4MCkscz0yLyhvK2wpLGM9Mi8oYStpKTtyZXR1cm4gZVswXT1zLGVbMV09MCxlWzJdPTAsZVszXT0wLGVbNF09MCxlWzVdPWMsZVs2XT0wLGVbN109MCxlWzhdPS0oby1sKSpzKi41LGVbOV09KGEtaSkqYyouNSxlWzEwXT1uLyhyLW4pLGVbMTFdPS0xLGVbMTJdPTAsZVsxM109MCxlWzE0XT1uKnIvKHItbiksZVsxNV09MCxlfX0se31dLDM0OltmdW5jdGlvbihlLHQscil7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhLGksbyxsLHMsYyx1LGYsZCxwLGgsZyx2LG0seSx4LGIsXyx3LFQsayxNLEEsTCxTPW5bMF0sQz1uWzFdLE89blsyXSxEPU1hdGguc3FydChTKlMrQypDK08qTyk7aWYoTWF0aC5hYnMoRCk8MWUtNilyZXR1cm4gbnVsbDtTKj1EPTEvRCxDKj1ELE8qPUQsYT1NYXRoLnNpbihyKSxpPU1hdGguY29zKHIpLG89MS1pLGw9dFswXSxzPXRbMV0sYz10WzJdLHU9dFszXSxmPXRbNF0sZD10WzVdLHA9dFs2XSxoPXRbN10sZz10WzhdLHY9dFs5XSxtPXRbMTBdLHk9dFsxMV0seD1TKlMqbytpLGI9QypTKm8rTyphLF89TypTKm8tQyphLHc9UypDKm8tTyphLFQ9QypDKm8raSxrPU8qQypvK1MqYSxNPVMqTypvK0MqYSxBPUMqTypvLVMqYSxMPU8qTypvK2ksZVswXT1sKngrZipiK2cqXyxlWzFdPXMqeCtkKmIrdipfLGVbMl09Yyp4K3AqYittKl8sZVszXT11KngraCpiK3kqXyxlWzRdPWwqdytmKlQrZyprLGVbNV09cyp3K2QqVCt2KmssZVs2XT1jKncrcCpUK20qayxlWzddPXUqdytoKlQreSprLGVbOF09bCpNK2YqQStnKkwsZVs5XT1zKk0rZCpBK3YqTCxlWzEwXT1jKk0rcCpBK20qTCxlWzExXT11Kk0raCpBK3kqTCx0IT09ZSYmKGVbMTJdPXRbMTJdLGVbMTNdPXRbMTNdLGVbMTRdPXRbMTRdLGVbMTVdPXRbMTVdKTtyZXR1cm4gZX19LHt9XSwzNTpbZnVuY3Rpb24oZSx0LHIpe3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7dmFyIG49TWF0aC5zaW4ociksYT1NYXRoLmNvcyhyKSxpPXRbNF0sbz10WzVdLGw9dFs2XSxzPXRbN10sYz10WzhdLHU9dFs5XSxmPXRbMTBdLGQ9dFsxMV07dCE9PWUmJihlWzBdPXRbMF0sZVsxXT10WzFdLGVbMl09dFsyXSxlWzNdPXRbM10sZVsxMl09dFsxMl0sZVsxM109dFsxM10sZVsxNF09dFsxNF0sZVsxNV09dFsxNV0pO3JldHVybiBlWzRdPWkqYStjKm4sZVs1XT1vKmErdSpuLGVbNl09bCphK2YqbixlWzddPXMqYStkKm4sZVs4XT1jKmEtaSpuLGVbOV09dSphLW8qbixlWzEwXT1mKmEtbCpuLGVbMTFdPWQqYS1zKm4sZX19LHt9XSwzNjpbZnVuY3Rpb24oZSx0LHIpe3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7dmFyIG49TWF0aC5zaW4ociksYT1NYXRoLmNvcyhyKSxpPXRbMF0sbz10WzFdLGw9dFsyXSxzPXRbM10sYz10WzhdLHU9dFs5XSxmPXRbMTBdLGQ9dFsxMV07dCE9PWUmJihlWzRdPXRbNF0sZVs1XT10WzVdLGVbNl09dFs2XSxlWzddPXRbN10sZVsxMl09dFsxMl0sZVsxM109dFsxM10sZVsxNF09dFsxNF0sZVsxNV09dFsxNV0pO3JldHVybiBlWzBdPWkqYS1jKm4sZVsxXT1vKmEtdSpuLGVbMl09bCphLWYqbixlWzNdPXMqYS1kKm4sZVs4XT1pKm4rYyphLGVbOV09bypuK3UqYSxlWzEwXT1sKm4rZiphLGVbMTFdPXMqbitkKmEsZX19LHt9XSwzNzpbZnVuY3Rpb24oZSx0LHIpe3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7dmFyIG49TWF0aC5zaW4ociksYT1NYXRoLmNvcyhyKSxpPXRbMF0sbz10WzFdLGw9dFsyXSxzPXRbM10sYz10WzRdLHU9dFs1XSxmPXRbNl0sZD10WzddO3QhPT1lJiYoZVs4XT10WzhdLGVbOV09dFs5XSxlWzEwXT10WzEwXSxlWzExXT10WzExXSxlWzEyXT10WzEyXSxlWzEzXT10WzEzXSxlWzE0XT10WzE0XSxlWzE1XT10WzE1XSk7cmV0dXJuIGVbMF09aSphK2MqbixlWzFdPW8qYSt1Km4sZVsyXT1sKmErZipuLGVbM109cyphK2QqbixlWzRdPWMqYS1pKm4sZVs1XT11KmEtbypuLGVbNl09ZiphLWwqbixlWzddPWQqYS1zKm4sZX19LHt9XSwzODpbZnVuY3Rpb24oZSx0LHIpe3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7dmFyIG49clswXSxhPXJbMV0saT1yWzJdO3JldHVybiBlWzBdPXRbMF0qbixlWzFdPXRbMV0qbixlWzJdPXRbMl0qbixlWzNdPXRbM10qbixlWzRdPXRbNF0qYSxlWzVdPXRbNV0qYSxlWzZdPXRbNl0qYSxlWzddPXRbN10qYSxlWzhdPXRbOF0qaSxlWzldPXRbOV0qaSxlWzEwXT10WzEwXSppLGVbMTFdPXRbMTFdKmksZVsxMl09dFsxMl0sZVsxM109dFsxM10sZVsxNF09dFsxNF0sZVsxNV09dFsxNV0sZX19LHt9XSwzOTpbZnVuY3Rpb24oZSx0LHIpe3QuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4ibWF0NCgiK2VbMF0rIiwgIitlWzFdKyIsICIrZVsyXSsiLCAiK2VbM10rIiwgIitlWzRdKyIsICIrZVs1XSsiLCAiK2VbNl0rIiwgIitlWzddKyIsICIrZVs4XSsiLCAiK2VbOV0rIiwgIitlWzEwXSsiLCAiK2VbMTFdKyIsICIrZVsxMl0rIiwgIitlWzEzXSsiLCAiK2VbMTRdKyIsICIrZVsxNV0rIikifX0se31dLDQwOltmdW5jdGlvbihlLHQscil7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLGksbyxsLHMsYyx1LGYsZCxwLGgsZz1yWzBdLHY9clsxXSxtPXJbMl07dD09PWU/KGVbMTJdPXRbMF0qZyt0WzRdKnYrdFs4XSptK3RbMTJdLGVbMTNdPXRbMV0qZyt0WzVdKnYrdFs5XSptK3RbMTNdLGVbMTRdPXRbMl0qZyt0WzZdKnYrdFsxMF0qbSt0WzE0XSxlWzE1XT10WzNdKmcrdFs3XSp2K3RbMTFdKm0rdFsxNV0pOihuPXRbMF0sYT10WzFdLGk9dFsyXSxvPXRbM10sbD10WzRdLHM9dFs1XSxjPXRbNl0sdT10WzddLGY9dFs4XSxkPXRbOV0scD10WzEwXSxoPXRbMTFdLGVbMF09bixlWzFdPWEsZVsyXT1pLGVbM109byxlWzRdPWwsZVs1XT1zLGVbNl09YyxlWzddPXUsZVs4XT1mLGVbOV09ZCxlWzEwXT1wLGVbMTFdPWgsZVsxMl09bipnK2wqditmKm0rdFsxMl0sZVsxM109YSpnK3MqditkKm0rdFsxM10sZVsxNF09aSpnK2MqditwKm0rdFsxNF0sZVsxNV09bypnK3UqditoKm0rdFsxNV0pO3JldHVybiBlfX0se31dLDQxOltmdW5jdGlvbihlLHQscil7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYoZT09PXQpe3ZhciByPXRbMV0sbj10WzJdLGE9dFszXSxpPXRbNl0sbz10WzddLGw9dFsxMV07ZVsxXT10WzRdLGVbMl09dFs4XSxlWzNdPXRbMTJdLGVbNF09cixlWzZdPXRbOV0sZVs3XT10WzEzXSxlWzhdPW4sZVs5XT1pLGVbMTFdPXRbMTRdLGVbMTJdPWEsZVsxM109byxlWzE0XT1sfWVsc2UgZVswXT10WzBdLGVbMV09dFs0XSxlWzJdPXRbOF0sZVszXT10WzEyXSxlWzRdPXRbMV0sZVs1XT10WzVdLGVbNl09dFs5XSxlWzddPXRbMTNdLGVbOF09dFsyXSxlWzldPXRbNl0sZVsxMF09dFsxMF0sZVsxMV09dFsxNF0sZVsxMl09dFszXSxlWzEzXT10WzddLGVbMTRdPXRbMTFdLGVbMTVdPXRbMTVdO3JldHVybiBlfX0se31dLDQyOltmdW5jdGlvbihlLHQscil7KGZ1bmN0aW9uKHIpeyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixhPWUoImlzLWJyb3dzZXIiKTtuPSJmdW5jdGlvbiI9PXR5cGVvZiByLm1hdGNoTWVkaWE/IXIubWF0Y2hNZWRpYSgiKGhvdmVyOiBub25lKSIpLm1hdGNoZXM6YSx0LmV4cG9ydHM9bn0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiaXMtYnJvd3NlciI6NDR9XSw0MzpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJpcy1icm93c2VyIik7dC5leHBvcnRzPW4mJmZ1bmN0aW9uKCl7dmFyIGU9ITE7dHJ5e3ZhciB0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldDpmdW5jdGlvbigpe2U9ITB9fSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLG51bGwsdCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRlc3QiLG51bGwsdCl9Y2F0Y2godCl7ZT0hMX1yZXR1cm4gZX0oKX0seyJpcy1icm93c2VyIjo0NH1dLDQ0OltmdW5jdGlvbihlLHQscil7dC5leHBvcnRzPSEwfSx7fV0sNDU6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPWksdC5leHBvcnRzLmlzTW9iaWxlPWksdC5leHBvcnRzLmRlZmF1bHQ9aTt2YXIgbj0vKGFuZHJvaWR8YmJcZCt8bWVlZ28pLittb2JpbGV8YXZhbnRnb3xiYWRhXC98YmxhY2tiZXJyeXxibGF6ZXJ8Y29tcGFsfGVsYWluZXxmZW5uZWN8aGlwdG9wfGllbW9iaWxlfGlwKGhvbmV8b2QpfGlyaXN8a2luZGxlfGxnZSB8bWFlbW98bWlkcHxtbXB8bW9iaWxlLitmaXJlZm94fG5ldGZyb250fG9wZXJhIG0ob2J8aW4paXxwYWxtKCBvcyk/fHBob25lfHAoaXhpfHJlKVwvfHBsdWNrZXJ8cG9ja2V0fHBzcHxzZXJpZXNbNDZdMHxzeW1iaWFufHRyZW98dXBcLihicm93c2VyfGxpbmspfHZvZGFmb25lfHdhcHx3aW5kb3dzIChjZXxwaG9uZSl8eGRhfHhpaW5vL2ksYT0vKGFuZHJvaWR8YmJcZCt8bWVlZ28pLittb2JpbGV8YXZhbnRnb3xiYWRhXC98YmxhY2tiZXJyeXxibGF6ZXJ8Y29tcGFsfGVsYWluZXxmZW5uZWN8aGlwdG9wfGllbW9iaWxlfGlwKGhvbmV8b2QpfGlyaXN8a2luZGxlfGxnZSB8bWFlbW98bWlkcHxtbXB8bW9iaWxlLitmaXJlZm94fG5ldGZyb250fG9wZXJhIG0ob2J8aW4paXxwYWxtKCBvcyk/fHBob25lfHAoaXhpfHJlKVwvfHBsdWNrZXJ8cG9ja2V0fHBzcHxzZXJpZXNbNDZdMHxzeW1iaWFufHRyZW98dXBcLihicm93c2VyfGxpbmspfHZvZGFmb25lfHdhcHx3aW5kb3dzIChjZXxwaG9uZSl8eGRhfHhpaW5vfGFuZHJvaWR8aXBhZHxwbGF5Ym9va3xzaWxrL2k7ZnVuY3Rpb24gaShlKXtlfHwoZT17fSk7dmFyIHQ9ZS51YTtpZih0fHwidW5kZWZpbmVkIj09dHlwZW9mIG5hdmlnYXRvcnx8KHQ9bmF2aWdhdG9yLnVzZXJBZ2VudCksdCYmdC5oZWFkZXJzJiYic3RyaW5nIj09dHlwZW9mIHQuaGVhZGVyc1sidXNlci1hZ2VudCJdJiYodD10LmhlYWRlcnNbInVzZXItYWdlbnQiXSksInN0cmluZyIhPXR5cGVvZiB0KXJldHVybiExO3ZhciByPWUudGFibGV0P2EudGVzdCh0KTpuLnRlc3QodCk7cmV0dXJuIXImJmUudGFibGV0JiZlLmZlYXR1cmVEZXRlY3QmJm5hdmlnYXRvciYmbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzPjEmJi0xIT09dC5pbmRleE9mKCJNYWNpbnRvc2giKSYmLTEhPT10LmluZGV4T2YoIlNhZmFyaSIpJiYocj0hMCkscn19LHt9XSw0NjpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9ZS5sZW5ndGgsbj0wO248cjtuKyspaWYoKCh0PWUuY2hhckNvZGVBdChuKSk8OXx8dD4xMykmJjMyIT09dCYmMTMzIT09dCYmMTYwIT09dCYmNTc2MCE9PXQmJjYxNTghPT10JiYodDw4MTkyfHx0PjgyMDUpJiY4MjMyIT09dCYmODIzMyE9PXQmJjgyMzkhPT10JiY4Mjg3IT09dCYmODI4OCE9PXQmJjEyMjg4IT09dCYmNjUyNzkhPT10KXJldHVybiExO3JldHVybiEwfX0se31dLDQ3OltmdW5jdGlvbihlLHQscil7dmFyIG49e2xlZnQ6MCx0b3A6MH07dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXt0PXR8fGUuY3VycmVudFRhcmdldHx8ZS5zcmNFbGVtZW50LEFycmF5LmlzQXJyYXkocil8fChyPVswLDBdKTt2YXIgYT1lLmNsaWVudFh8fDAsaT1lLmNsaWVudFl8fDAsbz0obD10LGw9PT13aW5kb3d8fGw9PT1kb2N1bWVudHx8bD09PWRvY3VtZW50LmJvZHk/bjpsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTt2YXIgbDtyZXR1cm4gclswXT1hLW8ubGVmdCxyWzFdPWktby50b3Ascn19LHt9XSw0ODpbZnVuY3Rpb24oZSx0LHIpe3QuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gZS5yZXBsYWNlKGEsKGZ1bmN0aW9uKGUscixhKXt2YXIgbz1yLnRvTG93ZXJDYXNlKCk7Zm9yKGE9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5tYXRjaChpKTtyZXR1cm4gdD90Lm1hcChOdW1iZXIpOltdfShhKSwibSI9PW8mJmEubGVuZ3RoPjImJih0LnB1c2goW3JdLmNvbmNhdChhLnNwbGljZSgwLDIpKSksbz0ibCIscj0ibSI9PXI/ImwiOiJMIik7Oyl7aWYoYS5sZW5ndGg9PW5bb10pcmV0dXJuIGEudW5zaGlmdChyKSx0LnB1c2goYSk7aWYoYS5sZW5ndGg8bltvXSl0aHJvdyBuZXcgRXJyb3IoIm1hbGZvcm1lZCBwYXRoIGRhdGEiKTt0LnB1c2goW3JdLmNvbmNhdChhLnNwbGljZSgwLG5bb10pKSl9fSkpLHR9O3ZhciBuPXthOjcsYzo2LGg6MSxsOjIsbToyLHE6NCxzOjQsdDoyLHY6MSx6OjB9LGE9LyhbYXN0dnpxbWhsY10pKFteYXN0dnpxbWhsY10qKS9naTt2YXIgaT0vLT9bMC05XSpcLj9bMC05XSsoPzplWy0rXT9cZCspPy9naX0se31dLDQ5OltmdW5jdGlvbihlLHQscil7Ci8qCiAqIEBjb3B5cmlnaHQgMjAxNiBTZWFuIENvbm5lbGx5IChAdm9pZHFrKSwgaHR0cDovL3N5bnRoZXRpLmNjCiAqIEBsaWNlbnNlIE1JVAogKiBAcHJlc2VydmUgUHJvamVjdCBIb21lOiBodHRwczovL2dpdGh1Yi5jb20vdm9pZHFrL3BvbHlib29sanMKICovCnZhciBuLGE9ZSgiLi9saWIvYnVpbGQtbG9nIiksaT1lKCIuL2xpYi9lcHNpbG9uIiksbz1lKCIuL2xpYi9pbnRlcnNlY3RlciIpLGw9ZSgiLi9saWIvc2VnbWVudC1jaGFpbmVyIikscz1lKCIuL2xpYi9zZWdtZW50LXNlbGVjdG9yIiksYz1lKCIuL2xpYi9nZW9qc29uIiksdT0hMSxmPWkoKTtmdW5jdGlvbiBkKGUsdCxyKXt2YXIgYT1uLnNlZ21lbnRzKGUpLGk9bi5zZWdtZW50cyh0KSxvPXIobi5jb21iaW5lKGEsaSkpO3JldHVybiBuLnBvbHlnb24obyl9bj17YnVpbGRMb2c6ZnVuY3Rpb24oZSl7cmV0dXJuITA9PT1lP3U9YSgpOiExPT09ZSYmKHU9ITEpLCExIT09dSYmdS5saXN0fSxlcHNpbG9uOmZ1bmN0aW9uKGUpe3JldHVybiBmLmVwc2lsb24oZSl9LHNlZ21lbnRzOmZ1bmN0aW9uKGUpe3ZhciB0PW8oITAsZix1KTtyZXR1cm4gZS5yZWdpb25zLmZvckVhY2godC5hZGRSZWdpb24pLHtzZWdtZW50czp0LmNhbGN1bGF0ZShlLmludmVydGVkKSxpbnZlcnRlZDplLmludmVydGVkfX0sY29tYmluZTpmdW5jdGlvbihlLHQpe3JldHVybntjb21iaW5lZDpvKCExLGYsdSkuY2FsY3VsYXRlKGUuc2VnbWVudHMsZS5pbnZlcnRlZCx0LnNlZ21lbnRzLHQuaW52ZXJ0ZWQpLGludmVydGVkMTplLmludmVydGVkLGludmVydGVkMjp0LmludmVydGVkfX0sc2VsZWN0VW5pb246ZnVuY3Rpb24oZSl7cmV0dXJue3NlZ21lbnRzOnMudW5pb24oZS5jb21iaW5lZCx1KSxpbnZlcnRlZDplLmludmVydGVkMXx8ZS5pbnZlcnRlZDJ9fSxzZWxlY3RJbnRlcnNlY3Q6ZnVuY3Rpb24oZSl7cmV0dXJue3NlZ21lbnRzOnMuaW50ZXJzZWN0KGUuY29tYmluZWQsdSksaW52ZXJ0ZWQ6ZS5pbnZlcnRlZDEmJmUuaW52ZXJ0ZWQyfX0sc2VsZWN0RGlmZmVyZW5jZTpmdW5jdGlvbihlKXtyZXR1cm57c2VnbWVudHM6cy5kaWZmZXJlbmNlKGUuY29tYmluZWQsdSksaW52ZXJ0ZWQ6ZS5pbnZlcnRlZDEmJiFlLmludmVydGVkMn19LHNlbGVjdERpZmZlcmVuY2VSZXY6ZnVuY3Rpb24oZSl7cmV0dXJue3NlZ21lbnRzOnMuZGlmZmVyZW5jZVJldihlLmNvbWJpbmVkLHUpLGludmVydGVkOiFlLmludmVydGVkMSYmZS5pbnZlcnRlZDJ9fSxzZWxlY3RYb3I6ZnVuY3Rpb24oZSl7cmV0dXJue3NlZ21lbnRzOnMueG9yKGUuY29tYmluZWQsdSksaW52ZXJ0ZWQ6ZS5pbnZlcnRlZDEhPT1lLmludmVydGVkMn19LHBvbHlnb246ZnVuY3Rpb24oZSl7cmV0dXJue3JlZ2lvbnM6bChlLnNlZ21lbnRzLGYsdSksaW52ZXJ0ZWQ6ZS5pbnZlcnRlZH19LHBvbHlnb25Gcm9tR2VvSlNPTjpmdW5jdGlvbihlKXtyZXR1cm4gYy50b1BvbHlnb24obixlKX0scG9seWdvblRvR2VvSlNPTjpmdW5jdGlvbihlKXtyZXR1cm4gYy5mcm9tUG9seWdvbihuLGYsZSl9LHVuaW9uOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGQoZSx0LG4uc2VsZWN0VW5pb24pfSxpbnRlcnNlY3Q6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZChlLHQsbi5zZWxlY3RJbnRlcnNlY3QpfSxkaWZmZXJlbmNlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGQoZSx0LG4uc2VsZWN0RGlmZmVyZW5jZSl9LGRpZmZlcmVuY2VSZXY6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZChlLHQsbi5zZWxlY3REaWZmZXJlbmNlUmV2KX0seG9yOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGQoZSx0LG4uc2VsZWN0WG9yKX19LCJvYmplY3QiPT10eXBlb2Ygd2luZG93JiYod2luZG93LlBvbHlCb29sPW4pLHQuZXhwb3J0cz1ufSx7Ii4vbGliL2J1aWxkLWxvZyI6NTAsIi4vbGliL2Vwc2lsb24iOjUxLCIuL2xpYi9nZW9qc29uIjo1MiwiLi9saWIvaW50ZXJzZWN0ZXIiOjUzLCIuL2xpYi9zZWdtZW50LWNoYWluZXIiOjU1LCIuL2xpYi9zZWdtZW50LXNlbGVjdG9yIjo1Nn1dLDUwOltmdW5jdGlvbihlLHQscil7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIGUsdD0wLHI9ITE7ZnVuY3Rpb24gbih0LHIpe3JldHVybiBlLmxpc3QucHVzaCh7dHlwZTp0LGRhdGE6cj9KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHIpKTp2b2lkIDB9KSxlfXJldHVybiBlPXtsaXN0OltdLHNlZ21lbnRJZDpmdW5jdGlvbigpe3JldHVybiB0Kyt9LGNoZWNrSW50ZXJzZWN0aW9uOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4oImNoZWNrIix7c2VnMTplLHNlZzI6dH0pfSxzZWdtZW50Q2hvcDpmdW5jdGlvbihlLHQpe3JldHVybiBuKCJkaXZfc2VnIix7c2VnOmUscHQ6dH0pLG4oImNob3AiLHtzZWc6ZSxwdDp0fSl9LHN0YXR1c1JlbW92ZTpmdW5jdGlvbihlKXtyZXR1cm4gbigicG9wX3NlZyIse3NlZzplfSl9LHNlZ21lbnRVcGRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIG4oInNlZ191cGRhdGUiLHtzZWc6ZX0pfSxzZWdtZW50TmV3OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4oIm5ld19zZWciLHtzZWc6ZSxwcmltYXJ5OnR9KX0sc2VnbWVudFJlbW92ZTpmdW5jdGlvbihlKXtyZXR1cm4gbigicmVtX3NlZyIse3NlZzplfSl9LHRlbXBTdGF0dXM6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBuKCJ0ZW1wX3N0YXR1cyIse3NlZzplLGFib3ZlOnQsYmVsb3c6cn0pfSxyZXdpbmQ6ZnVuY3Rpb24oZSl7cmV0dXJuIG4oInJld2luZCIse3NlZzplfSl9LHN0YXR1czpmdW5jdGlvbihlLHQscil7cmV0dXJuIG4oInN0YXR1cyIse3NlZzplLGFib3ZlOnQsYmVsb3c6cn0pfSx2ZXJ0OmZ1bmN0aW9uKHQpe3JldHVybiB0PT09cj9lOihyPXQsbigidmVydCIse3g6dH0pKX0sbG9nOmZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciIT10eXBlb2YgZSYmKGU9SlNPTi5zdHJpbmdpZnkoZSwhMSwiICAiKSksbigibG9nIix7dHh0OmV9KX0scmVzZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbigicmVzZXQiKX0sc2VsZWN0ZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIG4oInNlbGVjdGVkIix7c2VnczplfSl9LGNoYWluU3RhcnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIG4oImNoYWluX3N0YXJ0Iix7c2VnOmV9KX0sY2hhaW5SZW1vdmVIZWFkOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4oImNoYWluX3JlbV9oZWFkIix7aW5kZXg6ZSxwdDp0fSl9LGNoYWluUmVtb3ZlVGFpbDpmdW5jdGlvbihlLHQpe3JldHVybiBuKCJjaGFpbl9yZW1fdGFpbCIse2luZGV4OmUscHQ6dH0pfSxjaGFpbk5ldzpmdW5jdGlvbihlLHQpe3JldHVybiBuKCJjaGFpbl9uZXciLHtwdDE6ZSxwdDI6dH0pfSxjaGFpbk1hdGNoOmZ1bmN0aW9uKGUpe3JldHVybiBuKCJjaGFpbl9tYXRjaCIse2luZGV4OmV9KX0sY2hhaW5DbG9zZTpmdW5jdGlvbihlKXtyZXR1cm4gbigiY2hhaW5fY2xvc2UiLHtpbmRleDplfSl9LGNoYWluQWRkSGVhZDpmdW5jdGlvbihlLHQpe3JldHVybiBuKCJjaGFpbl9hZGRfaGVhZCIse2luZGV4OmUscHQ6dH0pfSxjaGFpbkFkZFRhaWw6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbigiY2hhaW5fYWRkX3RhaWwiLHtpbmRleDplLHB0OnR9KX0sY2hhaW5Db25uZWN0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4oImNoYWluX2NvbiIse2luZGV4MTplLGluZGV4Mjp0fSl9LGNoYWluUmV2ZXJzZTpmdW5jdGlvbihlKXtyZXR1cm4gbigiY2hhaW5fcmV2Iix7aW5kZXg6ZX0pfSxjaGFpbkpvaW46ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbigiY2hhaW5fam9pbiIse2luZGV4MTplLGluZGV4Mjp0fSl9LGRvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbigiZG9uZSIpfX19fSx7fV0sNTE6W2Z1bmN0aW9uKGUsdCxyKXt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7Im51bWJlciIhPXR5cGVvZiBlJiYoZT0xZS0xMCk7dmFyIHQ9e2Vwc2lsb246ZnVuY3Rpb24odCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiYoZT10KSxlfSxwb2ludEFib3ZlT3JPbkxpbmU6ZnVuY3Rpb24odCxyLG4pe3ZhciBhPXJbMF0saT1yWzFdLG89blswXSxsPW5bMV0scz10WzBdO3JldHVybihvLWEpKih0WzFdLWkpLShsLWkpKihzLWEpPj0tZX0scG9pbnRCZXR3ZWVuOmZ1bmN0aW9uKHQscixuKXt2YXIgYT10WzFdLXJbMV0saT1uWzBdLXJbMF0sbz10WzBdLXJbMF0sbD1uWzFdLXJbMV0scz1vKmkrYSpsO3JldHVybiEoczxlKSYmIShzLShpKmkrbCpsKT4tZSl9LHBvaW50c1NhbWVYOmZ1bmN0aW9uKHQscil7cmV0dXJuIE1hdGguYWJzKHRbMF0tclswXSk8ZX0scG9pbnRzU2FtZVk6ZnVuY3Rpb24odCxyKXtyZXR1cm4gTWF0aC5hYnModFsxXS1yWzFdKTxlfSxwb2ludHNTYW1lOmZ1bmN0aW9uKGUscil7cmV0dXJuIHQucG9pbnRzU2FtZVgoZSxyKSYmdC5wb2ludHNTYW1lWShlLHIpfSxwb2ludHNDb21wYXJlOmZ1bmN0aW9uKGUscil7cmV0dXJuIHQucG9pbnRzU2FtZVgoZSxyKT90LnBvaW50c1NhbWVZKGUscik/MDplWzFdPHJbMV0/LTE6MTplWzBdPHJbMF0/LTE6MX0scG9pbnRzQ29sbGluZWFyOmZ1bmN0aW9uKHQscixuKXt2YXIgYT10WzBdLXJbMF0saT10WzFdLXJbMV0sbz1yWzBdLW5bMF0sbD1yWzFdLW5bMV07cmV0dXJuIE1hdGguYWJzKGEqbC1vKmkpPGV9LGxpbmVzSW50ZXJzZWN0OmZ1bmN0aW9uKHQscixuLGEpe3ZhciBpPXJbMF0tdFswXSxvPXJbMV0tdFsxXSxsPWFbMF0tblswXSxzPWFbMV0tblsxXSxjPWkqcy1vKmw7aWYoTWF0aC5hYnMoYyk8ZSlyZXR1cm4hMTt2YXIgdT10WzBdLW5bMF0sZj10WzFdLW5bMV0sZD0obCpmLXMqdSkvYyxwPShpKmYtbyp1KS9jLGg9e2Fsb25nQTowLGFsb25nQjowLHB0Olt0WzBdK2QqaSx0WzFdK2Qqb119O3JldHVybiBoLmFsb25nQT1kPD0tZT8tMjpkPGU/LTE6ZC0xPD0tZT8wOmQtMTxlPzE6MixoLmFsb25nQj1wPD0tZT8tMjpwPGU/LTE6cC0xPD0tZT8wOnAtMTxlPzE6MixofSxwb2ludEluc2lkZVJlZ2lvbjpmdW5jdGlvbih0LHIpe2Zvcih2YXIgbj10WzBdLGE9dFsxXSxpPXJbci5sZW5ndGgtMV1bMF0sbz1yW3IubGVuZ3RoLTFdWzFdLGw9ITEscz0wO3M8ci5sZW5ndGg7cysrKXt2YXIgYz1yW3NdWzBdLHU9cltzXVsxXTt1LWE+ZSE9by1hPmUmJihpLWMpKihhLXUpLyhvLXUpK2Mtbj5lJiYobD0hbCksaT1jLG89dX1yZXR1cm4gbH19O3JldHVybiB0fX0se31dLDUyOltmdW5jdGlvbihlLHQscil7dmFyIG49e3RvUG9seWdvbjpmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIHIodCl7aWYodC5sZW5ndGg8PTApcmV0dXJuIGUuc2VnbWVudHMoe2ludmVydGVkOiExLHJlZ2lvbnM6W119KTtmdW5jdGlvbiByKHQpe3ZhciByPXQuc2xpY2UoMCx0Lmxlbmd0aC0xKTtyZXR1cm4gZS5zZWdtZW50cyh7aW52ZXJ0ZWQ6ITEscmVnaW9uczpbcl19KX1mb3IodmFyIG49cih0WzBdKSxhPTE7YTx0Lmxlbmd0aDthKyspbj1lLnNlbGVjdERpZmZlcmVuY2UoZS5jb21iaW5lKG4scih0W2FdKSkpO3JldHVybiBufWlmKCJQb2x5Z29uIj09PXQudHlwZSlyZXR1cm4gZS5wb2x5Z29uKHIodC5jb29yZGluYXRlcykpO2lmKCJNdWx0aVBvbHlnb24iPT09dC50eXBlKXtmb3IodmFyIG49ZS5zZWdtZW50cyh7aW52ZXJ0ZWQ6ITEscmVnaW9uczpbXX0pLGE9MDthPHQuY29vcmRpbmF0ZXMubGVuZ3RoO2ErKyluPWUuc2VsZWN0VW5pb24oZS5jb21iaW5lKG4scih0LmNvb3JkaW5hdGVzW2FdKSkpO3JldHVybiBlLnBvbHlnb24obil9dGhyb3cgbmV3IEVycm9yKCJQb2x5Qm9vbDogQ2Fubm90IGNvbnZlcnQgR2VvSlNPTiBvYmplY3QgdG8gUG9seUJvb2wgcG9seWdvbiIpfSxmcm9tUG9seWdvbjpmdW5jdGlvbihlLHQscil7ZnVuY3Rpb24gbihlLHIpe3JldHVybiB0LnBvaW50SW5zaWRlUmVnaW9uKFsuNSooZVswXVswXStlWzFdWzBdKSwuNSooZVswXVsxXStlWzFdWzFdKV0scil9ZnVuY3Rpb24gYShlKXtyZXR1cm57cmVnaW9uOmUsY2hpbGRyZW46W119fXI9ZS5wb2x5Z29uKGUuc2VnbWVudHMocikpO3ZhciBpPWEobnVsbCk7ZnVuY3Rpb24gbyhlLHQpe2Zvcih2YXIgcj0wO3I8ZS5jaGlsZHJlbi5sZW5ndGg7cisrKXtpZihuKHQsKGw9ZS5jaGlsZHJlbltyXSkucmVnaW9uKSlyZXR1cm4gdm9pZCBvKGwsdCl9dmFyIGk9YSh0KTtmb3Iocj0wO3I8ZS5jaGlsZHJlbi5sZW5ndGg7cisrKXt2YXIgbDtuKChsPWUuY2hpbGRyZW5bcl0pLnJlZ2lvbix0KSYmKGkuY2hpbGRyZW4ucHVzaChsKSxlLmNoaWxkcmVuLnNwbGljZShyLDEpLHItLSl9ZS5jaGlsZHJlbi5wdXNoKGkpfWZvcih2YXIgbD0wO2w8ci5yZWdpb25zLmxlbmd0aDtsKyspe3ZhciBzPXIucmVnaW9uc1tsXTtzLmxlbmd0aDwzfHxvKGkscyl9ZnVuY3Rpb24gYyhlLHQpe2Zvcih2YXIgcj0wLG49ZVtlLmxlbmd0aC0xXVswXSxhPWVbZS5sZW5ndGgtMV1bMV0saT1bXSxvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciBsPWVbb11bMF0scz1lW29dWzFdO2kucHVzaChbbCxzXSkscis9cypuLWwqYSxuPWwsYT1zfXJldHVybiByPDAhPT10JiZpLnJldmVyc2UoKSxpLnB1c2goW2lbMF1bMF0saVswXVsxXV0pLGl9dmFyIHU9W107ZnVuY3Rpb24gZihlKXt2YXIgdD1bYyhlLnJlZ2lvbiwhMSldO3UucHVzaCh0KTtmb3IodmFyIHI9MDtyPGUuY2hpbGRyZW4ubGVuZ3RoO3IrKyl0LnB1c2goZChlLmNoaWxkcmVuW3JdKSl9ZnVuY3Rpb24gZChlKXtmb3IodmFyIHQ9MDt0PGUuY2hpbGRyZW4ubGVuZ3RoO3QrKylmKGUuY2hpbGRyZW5bdF0pO3JldHVybiBjKGUucmVnaW9uLCEwKX1mb3IobD0wO2w8aS5jaGlsZHJlbi5sZW5ndGg7bCsrKWYoaS5jaGlsZHJlbltsXSk7cmV0dXJuIHUubGVuZ3RoPD0wP3t0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbXX06MT09dS5sZW5ndGg/e3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOnVbMF19Ont0eXBlOiJNdWx0aVBvbHlnb24iLGNvb3JkaW5hdGVzOnV9fX07dC5leHBvcnRzPW59LHt9XSw1MzpbZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWUoIi4vbGlua2VkLWxpc3QiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe2Z1bmN0aW9uIGEoZSx0LG4pe3JldHVybntpZDpyP3Iuc2VnbWVudElkKCk6LTEsc3RhcnQ6ZSxlbmQ6dCxteUZpbGw6e2Fib3ZlOm4ubXlGaWxsLmFib3ZlLGJlbG93Om4ubXlGaWxsLmJlbG93fSxvdGhlckZpbGw6bnVsbH19dmFyIGk9bi5jcmVhdGUoKTtmdW5jdGlvbiBvKGUscil7aS5pbnNlcnRCZWZvcmUoZSwoZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKGUscixuLGEsaSxvKXt2YXIgbD10LnBvaW50c0NvbXBhcmUocixpKTtyZXR1cm4gMCE9PWw/bDp0LnBvaW50c1NhbWUobixvKT8wOmUhPT1hP2U/MTotMTp0LnBvaW50QWJvdmVPck9uTGluZShuLGE/aTpvLGE/bzppKT8xOi0xfShlLmlzU3RhcnQsZS5wdCxyLG4uaXNTdGFydCxuLnB0LG4ub3RoZXIucHQpPDB9KSl9ZnVuY3Rpb24gbChlLHQpe3ZhciByPWZ1bmN0aW9uKGUsdCl7dmFyIHI9bi5ub2RlKHtpc1N0YXJ0OiEwLHB0OmUuc3RhcnQsc2VnOmUscHJpbWFyeTp0LG90aGVyOm51bGwsc3RhdHVzOm51bGx9KTtyZXR1cm4gbyhyLGUuZW5kKSxyfShlLHQpO3JldHVybiBmdW5jdGlvbihlLHQscil7dmFyIGE9bi5ub2RlKHtpc1N0YXJ0OiExLHB0OnQuZW5kLHNlZzp0LHByaW1hcnk6cixvdGhlcjplLHN0YXR1czpudWxsfSk7ZS5vdGhlcj1hLG8oYSxlLnB0KX0ocixlLHQpLHJ9ZnVuY3Rpb24gcyhlLHQpe3ZhciBuPWEodCxlLnNlZy5lbmQsZS5zZWcpO3JldHVybiBmdW5jdGlvbihlLHQpe3ImJnIuc2VnbWVudENob3AoZS5zZWcsdCksZS5vdGhlci5yZW1vdmUoKSxlLnNlZy5lbmQ9dCxlLm90aGVyLnB0PXQsbyhlLm90aGVyLGUucHQpfShlLHQpLGwobixlLnByaW1hcnkpfWZ1bmN0aW9uIGMoYSxvKXt2YXIgbD1uLmNyZWF0ZSgpO2Z1bmN0aW9uIGMoZSl7cmV0dXJuIGwuZmluZFRyYW5zaXRpb24oKGZ1bmN0aW9uKHIpe3ZhciBuLGEsaSxvLGwscztyZXR1cm4obj1lLGE9ci5ldixpPW4uc2VnLnN0YXJ0LG89bi5zZWcuZW5kLGw9YS5zZWcuc3RhcnQscz1hLnNlZy5lbmQsdC5wb2ludHNDb2xsaW5lYXIoaSxsLHMpP3QucG9pbnRzQ29sbGluZWFyKG8sbCxzKXx8dC5wb2ludEFib3ZlT3JPbkxpbmUobyxsLHMpPzE6LTE6dC5wb2ludEFib3ZlT3JPbkxpbmUoaSxsLHMpPzE6LTEpPjB9KSl9ZnVuY3Rpb24gdShlLG4pe3ZhciBhPWUuc2VnLGk9bi5zZWcsbz1hLnN0YXJ0LGw9YS5lbmQsYz1pLnN0YXJ0LHU9aS5lbmQ7ciYmci5jaGVja0ludGVyc2VjdGlvbihhLGkpO3ZhciBmPXQubGluZXNJbnRlcnNlY3QobyxsLGMsdSk7aWYoITE9PT1mKXtpZighdC5wb2ludHNDb2xsaW5lYXIobyxsLGMpKXJldHVybiExO2lmKHQucG9pbnRzU2FtZShvLHUpfHx0LnBvaW50c1NhbWUobCxjKSlyZXR1cm4hMTt2YXIgZD10LnBvaW50c1NhbWUobyxjKSxwPXQucG9pbnRzU2FtZShsLHUpO2lmKGQmJnApcmV0dXJuIG47dmFyIGg9IWQmJnQucG9pbnRCZXR3ZWVuKG8sYyx1KSxnPSFwJiZ0LnBvaW50QmV0d2VlbihsLGMsdSk7aWYoZClyZXR1cm4gZz9zKG4sbCk6cyhlLHUpLG47aCYmKHB8fChnP3MobixsKTpzKGUsdSkpLHMobixvKSl9ZWxzZSAwPT09Zi5hbG9uZ0EmJigtMT09PWYuYWxvbmdCP3MoZSxjKTowPT09Zi5hbG9uZ0I/cyhlLGYucHQpOjE9PT1mLmFsb25nQiYmcyhlLHUpKSwwPT09Zi5hbG9uZ0ImJigtMT09PWYuYWxvbmdBP3MobixvKTowPT09Zi5hbG9uZ0E/cyhuLGYucHQpOjE9PT1mLmFsb25nQSYmcyhuLGwpKTtyZXR1cm4hMX1mb3IodmFyIGY9W107IWkuaXNFbXB0eSgpOyl7dmFyIGQ9aS5nZXRIZWFkKCk7aWYociYmci52ZXJ0KGQucHRbMF0pLGQuaXNTdGFydCl7ciYmci5zZWdtZW50TmV3KGQuc2VnLGQucHJpbWFyeSk7dmFyIHA9YyhkKSxoPXAuYmVmb3JlP3AuYmVmb3JlLmV2Om51bGwsZz1wLmFmdGVyP3AuYWZ0ZXIuZXY6bnVsbDtmdW5jdGlvbiB2KCl7aWYoaCl7dmFyIGU9dShkLGgpO2lmKGUpcmV0dXJuIGV9cmV0dXJuISFnJiZ1KGQsZyl9ciYmci50ZW1wU3RhdHVzKGQuc2VnLCEhaCYmaC5zZWcsISFnJiZnLnNlZyk7dmFyIG0seT12KCk7aWYoeSl7dmFyIHg7aWYoZSkoeD1udWxsPT09ZC5zZWcubXlGaWxsLmJlbG93fHxkLnNlZy5teUZpbGwuYWJvdmUhPT1kLnNlZy5teUZpbGwuYmVsb3cpJiYoeS5zZWcubXlGaWxsLmFib3ZlPSF5LnNlZy5teUZpbGwuYWJvdmUpO2Vsc2UgeS5zZWcub3RoZXJGaWxsPWQuc2VnLm15RmlsbDtyJiZyLnNlZ21lbnRVcGRhdGUoeS5zZWcpLGQub3RoZXIucmVtb3ZlKCksZC5yZW1vdmUoKX1pZihpLmdldEhlYWQoKSE9PWQpe3ImJnIucmV3aW5kKGQuc2VnKTtjb250aW51ZX1pZihlKXg9bnVsbD09PWQuc2VnLm15RmlsbC5iZWxvd3x8ZC5zZWcubXlGaWxsLmFib3ZlIT09ZC5zZWcubXlGaWxsLmJlbG93LGQuc2VnLm15RmlsbC5iZWxvdz1nP2cuc2VnLm15RmlsbC5hYm92ZTphLGQuc2VnLm15RmlsbC5hYm92ZT14PyFkLnNlZy5teUZpbGwuYmVsb3c6ZC5zZWcubXlGaWxsLmJlbG93O2Vsc2UgaWYobnVsbD09PWQuc2VnLm90aGVyRmlsbCltPWc/ZC5wcmltYXJ5PT09Zy5wcmltYXJ5P2cuc2VnLm90aGVyRmlsbC5hYm92ZTpnLnNlZy5teUZpbGwuYWJvdmU6ZC5wcmltYXJ5P286YSxkLnNlZy5vdGhlckZpbGw9e2Fib3ZlOm0sYmVsb3c6bX07ciYmci5zdGF0dXMoZC5zZWcsISFoJiZoLnNlZywhIWcmJmcuc2VnKSxkLm90aGVyLnN0YXR1cz1wLmluc2VydChuLm5vZGUoe2V2OmR9KSl9ZWxzZXt2YXIgYj1kLnN0YXR1cztpZihudWxsPT09Yil0aHJvdyBuZXcgRXJyb3IoIlBvbHlCb29sOiBaZXJvLWxlbmd0aCBzZWdtZW50IGRldGVjdGVkOyB5b3VyIGVwc2lsb24gaXMgcHJvYmFibHkgdG9vIHNtYWxsIG9yIHRvbyBsYXJnZSIpO2lmKGwuZXhpc3RzKGIucHJldikmJmwuZXhpc3RzKGIubmV4dCkmJnUoYi5wcmV2LmV2LGIubmV4dC5ldiksciYmci5zdGF0dXNSZW1vdmUoYi5ldi5zZWcpLGIucmVtb3ZlKCksIWQucHJpbWFyeSl7dmFyIF89ZC5zZWcubXlGaWxsO2Quc2VnLm15RmlsbD1kLnNlZy5vdGhlckZpbGwsZC5zZWcub3RoZXJGaWxsPV99Zi5wdXNoKGQuc2VnKX1pLmdldEhlYWQoKS5yZW1vdmUoKX1yZXR1cm4gciYmci5kb25lKCksZn1yZXR1cm4gZT97YWRkUmVnaW9uOmZ1bmN0aW9uKGUpe2Zvcih2YXIgbixhLGksbz1lW2UubGVuZ3RoLTFdLHM9MDtzPGUubGVuZ3RoO3MrKyl7bj1vLG89ZVtzXTt2YXIgYz10LnBvaW50c0NvbXBhcmUobixvKTswIT09YyYmbCgoYT1jPDA/bjpvLGk9YzwwP286bix7aWQ6cj9yLnNlZ21lbnRJZCgpOi0xLHN0YXJ0OmEsZW5kOmksbXlGaWxsOnthYm92ZTpudWxsLGJlbG93Om51bGx9LG90aGVyRmlsbDpudWxsfSksITApfX0sY2FsY3VsYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBjKGUsITEpfX06e2NhbGN1bGF0ZTpmdW5jdGlvbihlLHQscixuKXtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihlKXtsKGEoZS5zdGFydCxlLmVuZCxlKSwhMCl9KSksci5mb3JFYWNoKChmdW5jdGlvbihlKXtsKGEoZS5zdGFydCxlLmVuZCxlKSwhMSl9KSksYyh0LG4pfX19fSx7Ii4vbGlua2VkLWxpc3QiOjU0fV0sNTQ6W2Z1bmN0aW9uKGUsdCxyKXt0LmV4cG9ydHM9e2NyZWF0ZTpmdW5jdGlvbigpe3ZhciBlPXtyb290Ontyb290OiEwLG5leHQ6bnVsbH0sZXhpc3RzOmZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT09dCYmdCE9PWUucm9vdH0saXNFbXB0eTpmdW5jdGlvbigpe3JldHVybiBudWxsPT09ZS5yb290Lm5leHR9LGdldEhlYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5yb290Lm5leHR9LGluc2VydEJlZm9yZTpmdW5jdGlvbih0LHIpe2Zvcih2YXIgbj1lLnJvb3QsYT1lLnJvb3QubmV4dDtudWxsIT09YTspe2lmKHIoYSkpcmV0dXJuIHQucHJldj1hLnByZXYsdC5uZXh0PWEsYS5wcmV2Lm5leHQ9dCx2b2lkKGEucHJldj10KTtuPWEsYT1hLm5leHR9bi5uZXh0PXQsdC5wcmV2PW4sdC5uZXh0PW51bGx9LGZpbmRUcmFuc2l0aW9uOmZ1bmN0aW9uKHQpe2Zvcih2YXIgcj1lLnJvb3Qsbj1lLnJvb3QubmV4dDtudWxsIT09biYmIXQobik7KXI9bixuPW4ubmV4dDtyZXR1cm57YmVmb3JlOnI9PT1lLnJvb3Q/bnVsbDpyLGFmdGVyOm4saW5zZXJ0OmZ1bmN0aW9uKGUpe3JldHVybiBlLnByZXY9cixlLm5leHQ9bixyLm5leHQ9ZSxudWxsIT09biYmKG4ucHJldj1lKSxlfX19fTtyZXR1cm4gZX0sbm9kZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5wcmV2PW51bGwsZS5uZXh0PW51bGwsZS5yZW1vdmU9ZnVuY3Rpb24oKXtlLnByZXYubmV4dD1lLm5leHQsZS5uZXh0JiYoZS5uZXh0LnByZXY9ZS5wcmV2KSxlLnByZXY9bnVsbCxlLm5leHQ9bnVsbH0sZX19fSx7fV0sNTU6W2Z1bmN0aW9uKGUsdCxyKXt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPVtdLGE9W107cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIGk9ZS5zdGFydCxvPWUuZW5kO2lmKHQucG9pbnRzU2FtZShpLG8pKWNvbnNvbGUud2FybigiUG9seUJvb2w6IFdhcm5pbmc6IFplcm8tbGVuZ3RoIHNlZ21lbnQgZGV0ZWN0ZWQ7IHlvdXIgZXBzaWxvbiBpcyBwcm9iYWJseSB0b28gc21hbGwgb3IgdG9vIGxhcmdlIik7ZWxzZXtyJiZyLmNoYWluU3RhcnQoZSk7Zm9yKHZhciBsPXtpbmRleDowLG1hdGNoZXNfaGVhZDohMSxtYXRjaGVzX3B0MTohMX0scz17aW5kZXg6MCxtYXRjaGVzX2hlYWQ6ITEsbWF0Y2hlc19wdDE6ITF9LGM9bCx1PTA7dTxuLmxlbmd0aDt1Kyspe3ZhciBmPSh2PW5bdV0pWzBdLGQ9KHZbMV0sdlt2Lmxlbmd0aC0xXSk7dlt2Lmxlbmd0aC0yXTtpZih0LnBvaW50c1NhbWUoZixpKSl7aWYoayh1LCEwLCEwKSlicmVha31lbHNlIGlmKHQucG9pbnRzU2FtZShmLG8pKXtpZihrKHUsITAsITEpKWJyZWFrfWVsc2UgaWYodC5wb2ludHNTYW1lKGQsaSkpe2lmKGsodSwhMSwhMCkpYnJlYWt9ZWxzZSBpZih0LnBvaW50c1NhbWUoZCxvKSYmayh1LCExLCExKSlicmVha31pZihjPT09bClyZXR1cm4gbi5wdXNoKFtpLG9dKSx2b2lkKHImJnIuY2hhaW5OZXcoaSxvKSk7aWYoYz09PXMpe3ImJnIuY2hhaW5NYXRjaChsLmluZGV4KTt2YXIgcD1sLmluZGV4LGg9bC5tYXRjaGVzX3B0MT9vOmksZz1sLm1hdGNoZXNfaGVhZCx2PW5bcF0sbT1nP3ZbMF06dlt2Lmxlbmd0aC0xXSx5PWc/dlsxXTp2W3YubGVuZ3RoLTJdLHg9Zz92W3YubGVuZ3RoLTFdOnZbMF0sYj1nP3Zbdi5sZW5ndGgtMl06dlsxXTtyZXR1cm4gdC5wb2ludHNDb2xsaW5lYXIoeSxtLGgpJiYoZz8ociYmci5jaGFpblJlbW92ZUhlYWQobC5pbmRleCxoKSx2LnNoaWZ0KCkpOihyJiZyLmNoYWluUmVtb3ZlVGFpbChsLmluZGV4LGgpLHYucG9wKCkpLG09eSksdC5wb2ludHNTYW1lKHgsaCk/KG4uc3BsaWNlKHAsMSksdC5wb2ludHNDb2xsaW5lYXIoYix4LG0pJiYoZz8ociYmci5jaGFpblJlbW92ZVRhaWwobC5pbmRleCxtKSx2LnBvcCgpKToociYmci5jaGFpblJlbW92ZUhlYWQobC5pbmRleCxtKSx2LnNoaWZ0KCkpKSxyJiZyLmNoYWluQ2xvc2UobC5pbmRleCksdm9pZCBhLnB1c2godikpOnZvaWQoZz8ociYmci5jaGFpbkFkZEhlYWQobC5pbmRleCxoKSx2LnVuc2hpZnQoaCkpOihyJiZyLmNoYWluQWRkVGFpbChsLmluZGV4LGgpLHYucHVzaChoKSkpfXZhciBfPWwuaW5kZXgsdz1zLmluZGV4O3ImJnIuY2hhaW5Db25uZWN0KF8sdyk7dmFyIFQ9bltfXS5sZW5ndGg8blt3XS5sZW5ndGg7bC5tYXRjaGVzX2hlYWQ/cy5tYXRjaGVzX2hlYWQ/VD8oTShfKSxBKF8sdykpOihNKHcpLEEodyxfKSk6QSh3LF8pOnMubWF0Y2hlc19oZWFkP0EoXyx3KTpUPyhNKF8pLEEodyxfKSk6KE0odyksQShfLHcpKX1mdW5jdGlvbiBrKGUsdCxyKXtyZXR1cm4gYy5pbmRleD1lLGMubWF0Y2hlc19oZWFkPXQsYy5tYXRjaGVzX3B0MT1yLGM9PT1sPyhjPXMsITEpOihjPW51bGwsITApfWZ1bmN0aW9uIE0oZSl7ciYmci5jaGFpblJldmVyc2UoZSksbltlXS5yZXZlcnNlKCl9ZnVuY3Rpb24gQShlLGEpe3ZhciBpPW5bZV0sbz1uW2FdLGw9aVtpLmxlbmd0aC0xXSxzPWlbaS5sZW5ndGgtMl0sYz1vWzBdLHU9b1sxXTt0LnBvaW50c0NvbGxpbmVhcihzLGwsYykmJihyJiZyLmNoYWluUmVtb3ZlVGFpbChlLGwpLGkucG9wKCksbD1zKSx0LnBvaW50c0NvbGxpbmVhcihsLGMsdSkmJihyJiZyLmNoYWluUmVtb3ZlSGVhZChhLGMpLG8uc2hpZnQoKSksciYmci5jaGFpbkpvaW4oZSxhKSxuW2VdPWkuY29uY2F0KG8pLG4uc3BsaWNlKGEsMSl9fSkpLGF9fSx7fV0sNTY6W2Z1bmN0aW9uKGUsdCxyKXtmdW5jdGlvbiBuKGUsdCxyKXt2YXIgbj1bXTtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgYT0oZS5teUZpbGwuYWJvdmU/ODowKSsoZS5teUZpbGwuYmVsb3c/NDowKSsoZS5vdGhlckZpbGwmJmUub3RoZXJGaWxsLmFib3ZlPzI6MCkrKGUub3RoZXJGaWxsJiZlLm90aGVyRmlsbC5iZWxvdz8xOjApOzAhPT10W2FdJiZuLnB1c2goe2lkOnI/ci5zZWdtZW50SWQoKTotMSxzdGFydDplLnN0YXJ0LGVuZDplLmVuZCxteUZpbGw6e2Fib3ZlOjE9PT10W2FdLGJlbG93OjI9PT10W2FdfSxvdGhlckZpbGw6bnVsbH0pfSkpLHImJnIuc2VsZWN0ZWQobiksbn12YXIgYT17dW5pb246ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbihlLFswLDIsMSwwLDIsMiwwLDAsMSwwLDEsMCwwLDAsMCwwXSx0KX0saW50ZXJzZWN0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4oZSxbMCwwLDAsMCwwLDIsMCwyLDAsMCwxLDEsMCwyLDEsMF0sdCl9LGRpZmZlcmVuY2U6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbihlLFswLDAsMCwwLDIsMCwyLDAsMSwxLDAsMCwwLDEsMiwwXSx0KX0sZGlmZmVyZW5jZVJldjpmdW5jdGlvbihlLHQpe3JldHVybiBuKGUsWzAsMiwxLDAsMCwwLDEsMSwwLDIsMCwyLDAsMCwwLDBdLHQpfSx4b3I6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbihlLFswLDIsMSwwLDIsMCwwLDEsMSwwLDAsMiwwLDEsMiwwXSx0KX19O3QuZXhwb3J0cz1hfSx7fV0sNTc6W2Z1bmN0aW9uKGUsdCxyKXt2YXIgbixhLGk9dC5leHBvcnRzPXt9O2Z1bmN0aW9uIG8oKXt0aHJvdyBuZXcgRXJyb3IoInNldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBsKCl7dGhyb3cgbmV3IEVycm9yKCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBzKGUpe2lmKG49PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KGUsMCk7aWYoKG49PT1vfHwhbikmJnNldFRpbWVvdXQpcmV0dXJuIG49c2V0VGltZW91dCxzZXRUaW1lb3V0KGUsMCk7dHJ5e3JldHVybiBuKGUsMCl9Y2F0Y2godCl7dHJ5e3JldHVybiBuLmNhbGwobnVsbCxlLDApfWNhdGNoKHQpe3JldHVybiBuLmNhbGwodGhpcyxlLDApfX19IWZ1bmN0aW9uKCl7dHJ5e249ImZ1bmN0aW9uIj09dHlwZW9mIHNldFRpbWVvdXQ/c2V0VGltZW91dDpvfWNhdGNoKGUpe249b310cnl7YT0iZnVuY3Rpb24iPT10eXBlb2YgY2xlYXJUaW1lb3V0P2NsZWFyVGltZW91dDpsfWNhdGNoKGUpe2E9bH19KCk7dmFyIGMsdT1bXSxmPSExLGQ9LTE7ZnVuY3Rpb24gcCgpe2YmJmMmJihmPSExLGMubGVuZ3RoP3U9Yy5jb25jYXQodSk6ZD0tMSx1Lmxlbmd0aCYmaCgpKX1mdW5jdGlvbiBoKCl7aWYoIWYpe3ZhciBlPXMocCk7Zj0hMDtmb3IodmFyIHQ9dS5sZW5ndGg7dDspe2ZvcihjPXUsdT1bXTsrK2Q8dDspYyYmY1tkXS5ydW4oKTtkPS0xLHQ9dS5sZW5ndGh9Yz1udWxsLGY9ITEsZnVuY3Rpb24oZSl7aWYoYT09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KGUpO2lmKChhPT09bHx8IWEpJiZjbGVhclRpbWVvdXQpcmV0dXJuIGE9Y2xlYXJUaW1lb3V0LGNsZWFyVGltZW91dChlKTt0cnl7YShlKX1jYXRjaCh0KXt0cnl7cmV0dXJuIGEuY2FsbChudWxsLGUpfWNhdGNoKHQpe3JldHVybiBhLmNhbGwodGhpcyxlKX19fShlKX19ZnVuY3Rpb24gZyhlLHQpe3RoaXMuZnVuPWUsdGhpcy5hcnJheT10fWZ1bmN0aW9uIHYoKXt9aS5uZXh0VGljaz1mdW5jdGlvbihlKXt2YXIgdD1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3RoPjEpZm9yKHZhciByPTE7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyl0W3ItMV09YXJndW1lbnRzW3JdO3UucHVzaChuZXcgZyhlLHQpKSwxIT09dS5sZW5ndGh8fGZ8fHMoaCl9LGcucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9LGkudGl0bGU9ImJyb3dzZXIiLGkuYnJvd3Nlcj0hMCxpLmVudj17fSxpLmFyZ3Y9W10saS52ZXJzaW9uPSIiLGkudmVyc2lvbnM9e30saS5vbj12LGkuYWRkTGlzdGVuZXI9dixpLm9uY2U9dixpLm9mZj12LGkucmVtb3ZlTGlzdGVuZXI9dixpLnJlbW92ZUFsbExpc3RlbmVycz12LGkuZW1pdD12LGkucHJlcGVuZExpc3RlbmVyPXYsaS5wcmVwZW5kT25jZUxpc3RlbmVyPXYsaS5saXN0ZW5lcnM9ZnVuY3Rpb24oZSl7cmV0dXJuW119LGkuYmluZGluZz1mdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkIil9LGkuY3dkPWZ1bmN0aW9uKCl7cmV0dXJuIi8ifSxpLmNoZGlyPWZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkIil9LGkudW1hc2s9ZnVuY3Rpb24oKXtyZXR1cm4gMH19LHt9XSw1ODpbZnVuY3Rpb24oZSx0LHIpeyFmdW5jdGlvbihlKXt2YXIgcj0vXlxzKy8sbj0vXHMrJC8sYT0wLGk9ZS5yb3VuZCxvPWUubWluLGw9ZS5tYXgscz1lLnJhbmRvbTtmdW5jdGlvbiBjKHQscyl7aWYocz1zfHx7fSwodD10fHwiIilpbnN0YW5jZW9mIGMpcmV0dXJuIHQ7aWYoISh0aGlzIGluc3RhbmNlb2YgYykpcmV0dXJuIG5ldyBjKHQscyk7dmFyIHU9ZnVuY3Rpb24odCl7dmFyIGE9e3I6MCxnOjAsYjowfSxpPTEscz1udWxsLGM9bnVsbCx1PW51bGwsZj0hMSxkPSExOyJzdHJpbmciPT10eXBlb2YgdCYmKHQ9ZnVuY3Rpb24oZSl7ZT1lLnJlcGxhY2UociwiIikucmVwbGFjZShuLCIiKS50b0xvd2VyQ2FzZSgpO3ZhciB0LGE9ITE7aWYoTFtlXSllPUxbZV0sYT0hMDtlbHNlIGlmKCJ0cmFuc3BhcmVudCI9PWUpcmV0dXJue3I6MCxnOjAsYjowLGE6MCxmb3JtYXQ6Im5hbWUifTtpZih0PWoucmdiLmV4ZWMoZSkpcmV0dXJue3I6dFsxXSxnOnRbMl0sYjp0WzNdfTtpZih0PWoucmdiYS5leGVjKGUpKXJldHVybntyOnRbMV0sZzp0WzJdLGI6dFszXSxhOnRbNF19O2lmKHQ9ai5oc2wuZXhlYyhlKSlyZXR1cm57aDp0WzFdLHM6dFsyXSxsOnRbM119O2lmKHQ9ai5oc2xhLmV4ZWMoZSkpcmV0dXJue2g6dFsxXSxzOnRbMl0sbDp0WzNdLGE6dFs0XX07aWYodD1qLmhzdi5leGVjKGUpKXJldHVybntoOnRbMV0sczp0WzJdLHY6dFszXX07aWYodD1qLmhzdmEuZXhlYyhlKSlyZXR1cm57aDp0WzFdLHM6dFsyXSx2OnRbM10sYTp0WzRdfTtpZih0PWouaGV4OC5leGVjKGUpKXJldHVybntyOlAodFsxXSksZzpQKHRbMl0pLGI6UCh0WzNdKSxhOkkodFs0XSksZm9ybWF0OmE/Im5hbWUiOiJoZXg4In07aWYodD1qLmhleDYuZXhlYyhlKSlyZXR1cm57cjpQKHRbMV0pLGc6UCh0WzJdKSxiOlAodFszXSksZm9ybWF0OmE/Im5hbWUiOiJoZXgifTtpZih0PWouaGV4NC5leGVjKGUpKXJldHVybntyOlAodFsxXSsiIit0WzFdKSxnOlAodFsyXSsiIit0WzJdKSxiOlAodFszXSsiIit0WzNdKSxhOkkodFs0XSsiIit0WzRdKSxmb3JtYXQ6YT8ibmFtZSI6ImhleDgifTtpZih0PWouaGV4My5leGVjKGUpKXJldHVybntyOlAodFsxXSsiIit0WzFdKSxnOlAodFsyXSsiIit0WzJdKSxiOlAodFszXSsiIit0WzNdKSxmb3JtYXQ6YT8ibmFtZSI6ImhleCJ9O3JldHVybiExfSh0KSk7Im9iamVjdCI9PXR5cGVvZiB0JiYoQih0LnIpJiZCKHQuZykmJkIodC5iKT8ocD10LnIsaD10LmcsZz10LmIsYT17cjoyNTUqTyhwLDI1NSksZzoyNTUqTyhoLDI1NSksYjoyNTUqTyhnLDI1NSl9LGY9ITAsZD0iJSI9PT1TdHJpbmcodC5yKS5zdWJzdHIoLTEpPyJwcmdiIjoicmdiIik6Qih0LmgpJiZCKHQucykmJkIodC52KT8ocz1SKHQucyksYz1SKHQudiksYT1mdW5jdGlvbih0LHIsbil7dD02Kk8odCwzNjApLHI9TyhyLDEwMCksbj1PKG4sMTAwKTt2YXIgYT1lLmZsb29yKHQpLGk9dC1hLG89biooMS1yKSxsPW4qKDEtaSpyKSxzPW4qKDEtKDEtaSkqciksYz1hJTY7cmV0dXJue3I6MjU1KltuLGwsbyxvLHMsbl1bY10sZzoyNTUqW3MsbixuLGwsbyxvXVtjXSxiOjI1NSpbbyxvLHMsbixuLGxdW2NdfX0odC5oLHMsYyksZj0hMCxkPSJoc3YiKTpCKHQuaCkmJkIodC5zKSYmQih0LmwpJiYocz1SKHQucyksdT1SKHQubCksYT1mdW5jdGlvbihlLHQscil7dmFyIG4sYSxpO2Z1bmN0aW9uIG8oZSx0LHIpe3JldHVybiByPDAmJihyKz0xKSxyPjEmJihyLT0xKSxyPDEvNj9lKzYqKHQtZSkqcjpyPC41P3Q6cjwyLzM/ZSsodC1lKSooMi8zLXIpKjY6ZX1pZihlPU8oZSwzNjApLHQ9Tyh0LDEwMCkscj1PKHIsMTAwKSwwPT09dCluPWE9aT1yO2Vsc2V7dmFyIGw9cjwuNT9yKigxK3QpOnIrdC1yKnQscz0yKnItbDtuPW8ocyxsLGUrMS8zKSxhPW8ocyxsLGUpLGk9byhzLGwsZS0xLzMpfXJldHVybntyOjI1NSpuLGc6MjU1KmEsYjoyNTUqaX19KHQuaCxzLHUpLGY9ITAsZD0iaHNsIiksdC5oYXNPd25Qcm9wZXJ0eSgiYSIpJiYoaT10LmEpKTt2YXIgcCxoLGc7cmV0dXJuIGk9QyhpKSx7b2s6Zixmb3JtYXQ6dC5mb3JtYXR8fGQscjpvKDI1NSxsKGEuciwwKSksZzpvKDI1NSxsKGEuZywwKSksYjpvKDI1NSxsKGEuYiwwKSksYTppfX0odCk7dGhpcy5fb3JpZ2luYWxJbnB1dD10LHRoaXMuX3I9dS5yLHRoaXMuX2c9dS5nLHRoaXMuX2I9dS5iLHRoaXMuX2E9dS5hLHRoaXMuX3JvdW5kQT1pKDEwMCp0aGlzLl9hKS8xMDAsdGhpcy5fZm9ybWF0PXMuZm9ybWF0fHx1LmZvcm1hdCx0aGlzLl9ncmFkaWVudFR5cGU9cy5ncmFkaWVudFR5cGUsdGhpcy5fcjwxJiYodGhpcy5fcj1pKHRoaXMuX3IpKSx0aGlzLl9nPDEmJih0aGlzLl9nPWkodGhpcy5fZykpLHRoaXMuX2I8MSYmKHRoaXMuX2I9aSh0aGlzLl9iKSksdGhpcy5fb2s9dS5vayx0aGlzLl90Y19pZD1hKyt9ZnVuY3Rpb24gdShlLHQscil7ZT1PKGUsMjU1KSx0PU8odCwyNTUpLHI9TyhyLDI1NSk7dmFyIG4sYSxpPWwoZSx0LHIpLHM9byhlLHQsciksYz0oaStzKS8yO2lmKGk9PXMpbj1hPTA7ZWxzZXt2YXIgdT1pLXM7c3dpdGNoKGE9Yz4uNT91LygyLWktcyk6dS8oaStzKSxpKXtjYXNlIGU6bj0odC1yKS91Kyh0PHI/NjowKTticmVhaztjYXNlIHQ6bj0oci1lKS91KzI7YnJlYWs7Y2FzZSByOm49KGUtdCkvdSs0fW4vPTZ9cmV0dXJue2g6bixzOmEsbDpjfX1mdW5jdGlvbiBmKGUsdCxyKXtlPU8oZSwyNTUpLHQ9Tyh0LDI1NSkscj1PKHIsMjU1KTt2YXIgbixhLGk9bChlLHQscikscz1vKGUsdCxyKSxjPWksdT1pLXM7aWYoYT0wPT09aT8wOnUvaSxpPT1zKW49MDtlbHNle3N3aXRjaChpKXtjYXNlIGU6bj0odC1yKS91Kyh0PHI/NjowKTticmVhaztjYXNlIHQ6bj0oci1lKS91KzI7YnJlYWs7Y2FzZSByOm49KGUtdCkvdSs0fW4vPTZ9cmV0dXJue2g6bixzOmEsdjpjfX1mdW5jdGlvbiBkKGUsdCxyLG4pe3ZhciBhPVt6KGkoZSkudG9TdHJpbmcoMTYpKSx6KGkodCkudG9TdHJpbmcoMTYpKSx6KGkocikudG9TdHJpbmcoMTYpKV07cmV0dXJuIG4mJmFbMF0uY2hhckF0KDApPT1hWzBdLmNoYXJBdCgxKSYmYVsxXS5jaGFyQXQoMCk9PWFbMV0uY2hhckF0KDEpJiZhWzJdLmNoYXJBdCgwKT09YVsyXS5jaGFyQXQoMSk/YVswXS5jaGFyQXQoMCkrYVsxXS5jaGFyQXQoMCkrYVsyXS5jaGFyQXQoMCk6YS5qb2luKCIiKX1mdW5jdGlvbiBwKGUsdCxyLG4pe3JldHVyblt6KEUobikpLHooaShlKS50b1N0cmluZygxNikpLHooaSh0KS50b1N0cmluZygxNikpLHooaShyKS50b1N0cmluZygxNikpXS5qb2luKCIiKX1mdW5jdGlvbiBoKGUsdCl7dD0wPT09dD8wOnR8fDEwO3ZhciByPWMoZSkudG9Ic2woKTtyZXR1cm4gci5zLT10LzEwMCxyLnM9RChyLnMpLGMocil9ZnVuY3Rpb24gZyhlLHQpe3Q9MD09PXQ/MDp0fHwxMDt2YXIgcj1jKGUpLnRvSHNsKCk7cmV0dXJuIHIucys9dC8xMDAsci5zPUQoci5zKSxjKHIpfWZ1bmN0aW9uIHYoZSl7cmV0dXJuIGMoZSkuZGVzYXR1cmF0ZSgxMDApfWZ1bmN0aW9uIG0oZSx0KXt0PTA9PT10PzA6dHx8MTA7dmFyIHI9YyhlKS50b0hzbCgpO3JldHVybiByLmwrPXQvMTAwLHIubD1EKHIubCksYyhyKX1mdW5jdGlvbiB5KGUsdCl7dD0wPT09dD8wOnR8fDEwO3ZhciByPWMoZSkudG9SZ2IoKTtyZXR1cm4gci5yPWwoMCxvKDI1NSxyLnItaSgtdC8xMDAqMjU1KSkpLHIuZz1sKDAsbygyNTUsci5nLWkoLXQvMTAwKjI1NSkpKSxyLmI9bCgwLG8oMjU1LHIuYi1pKC10LzEwMCoyNTUpKSksYyhyKX1mdW5jdGlvbiB4KGUsdCl7dD0wPT09dD8wOnR8fDEwO3ZhciByPWMoZSkudG9Ic2woKTtyZXR1cm4gci5sLT10LzEwMCxyLmw9RChyLmwpLGMocil9ZnVuY3Rpb24gYihlLHQpe3ZhciByPWMoZSkudG9Ic2woKSxuPShyLmgrdCklMzYwO3JldHVybiByLmg9bjwwPzM2MCtuOm4sYyhyKX1mdW5jdGlvbiBfKGUpe3ZhciB0PWMoZSkudG9Ic2woKTtyZXR1cm4gdC5oPSh0LmgrMTgwKSUzNjAsYyh0KX1mdW5jdGlvbiB3KGUpe3ZhciB0PWMoZSkudG9Ic2woKSxyPXQuaDtyZXR1cm5bYyhlKSxjKHtoOihyKzEyMCklMzYwLHM6dC5zLGw6dC5sfSksYyh7aDoocisyNDApJTM2MCxzOnQucyxsOnQubH0pXX1mdW5jdGlvbiBUKGUpe3ZhciB0PWMoZSkudG9Ic2woKSxyPXQuaDtyZXR1cm5bYyhlKSxjKHtoOihyKzkwKSUzNjAsczp0LnMsbDp0Lmx9KSxjKHtoOihyKzE4MCklMzYwLHM6dC5zLGw6dC5sfSksYyh7aDoocisyNzApJTM2MCxzOnQucyxsOnQubH0pXX1mdW5jdGlvbiBrKGUpe3ZhciB0PWMoZSkudG9Ic2woKSxyPXQuaDtyZXR1cm5bYyhlKSxjKHtoOihyKzcyKSUzNjAsczp0LnMsbDp0Lmx9KSxjKHtoOihyKzIxNiklMzYwLHM6dC5zLGw6dC5sfSldfWZ1bmN0aW9uIE0oZSx0LHIpe3Q9dHx8NixyPXJ8fDMwO3ZhciBuPWMoZSkudG9Ic2woKSxhPTM2MC9yLGk9W2MoZSldO2ZvcihuLmg9KG4uaC0oYSp0Pj4xKSs3MjApJTM2MDstLXQ7KW4uaD0obi5oK2EpJTM2MCxpLnB1c2goYyhuKSk7cmV0dXJuIGl9ZnVuY3Rpb24gQShlLHQpe3Q9dHx8Njtmb3IodmFyIHI9YyhlKS50b0hzdigpLG49ci5oLGE9ci5zLGk9ci52LG89W10sbD0xL3Q7dC0tOylvLnB1c2goYyh7aDpuLHM6YSx2Oml9KSksaT0oaStsKSUxO3JldHVybiBvfWMucHJvdG90eXBlPXtpc0Rhcms6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRCcmlnaHRuZXNzKCk8MTI4fSxpc0xpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNEYXJrKCl9LGlzVmFsaWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb2t9LGdldE9yaWdpbmFsSW5wdXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb3JpZ2luYWxJbnB1dH0sZ2V0Rm9ybWF0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Zvcm1hdH0sZ2V0QWxwaGE6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYX0sZ2V0QnJpZ2h0bmVzczpmdW5jdGlvbigpe3ZhciBlPXRoaXMudG9SZ2IoKTtyZXR1cm4oMjk5KmUucis1ODcqZS5nKzExNCplLmIpLzFlM30sZ2V0THVtaW5hbmNlOmZ1bmN0aW9uKCl7dmFyIHQscixuLGE9dGhpcy50b1JnYigpO3JldHVybiB0PWEuci8yNTUscj1hLmcvMjU1LG49YS5iLzI1NSwuMjEyNioodDw9LjAzOTI4P3QvMTIuOTI6ZS5wb3coKHQrLjA1NSkvMS4wNTUsMi40KSkrLjcxNTIqKHI8PS4wMzkyOD9yLzEyLjkyOmUucG93KChyKy4wNTUpLzEuMDU1LDIuNCkpKy4wNzIyKihuPD0uMDM5Mjg/bi8xMi45MjplLnBvdygobisuMDU1KS8xLjA1NSwyLjQpKX0sc2V0QWxwaGE6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2E9QyhlKSx0aGlzLl9yb3VuZEE9aSgxMDAqdGhpcy5fYSkvMTAwLHRoaXN9LHRvSHN2OmZ1bmN0aW9uKCl7dmFyIGU9Zih0aGlzLl9yLHRoaXMuX2csdGhpcy5fYik7cmV0dXJue2g6MzYwKmUuaCxzOmUucyx2OmUudixhOnRoaXMuX2F9fSx0b0hzdlN0cmluZzpmdW5jdGlvbigpe3ZhciBlPWYodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IpLHQ9aSgzNjAqZS5oKSxyPWkoMTAwKmUucyksbj1pKDEwMCplLnYpO3JldHVybiAxPT10aGlzLl9hPyJoc3YoIit0KyIsICIrcisiJSwgIituKyIlKSI6ImhzdmEoIit0KyIsICIrcisiJSwgIituKyIlLCAiK3RoaXMuX3JvdW5kQSsiKSJ9LHRvSHNsOmZ1bmN0aW9uKCl7dmFyIGU9dSh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYik7cmV0dXJue2g6MzYwKmUuaCxzOmUucyxsOmUubCxhOnRoaXMuX2F9fSx0b0hzbFN0cmluZzpmdW5jdGlvbigpe3ZhciBlPXUodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IpLHQ9aSgzNjAqZS5oKSxyPWkoMTAwKmUucyksbj1pKDEwMCplLmwpO3JldHVybiAxPT10aGlzLl9hPyJoc2woIit0KyIsICIrcisiJSwgIituKyIlKSI6ImhzbGEoIit0KyIsICIrcisiJSwgIituKyIlLCAiK3RoaXMuX3JvdW5kQSsiKSJ9LHRvSGV4OmZ1bmN0aW9uKGUpe3JldHVybiBkKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iLGUpfSx0b0hleFN0cmluZzpmdW5jdGlvbihlKXtyZXR1cm4iIyIrdGhpcy50b0hleChlKX0sdG9IZXg4OmZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihlLHQscixuLGEpe3ZhciBvPVt6KGkoZSkudG9TdHJpbmcoMTYpKSx6KGkodCkudG9TdHJpbmcoMTYpKSx6KGkocikudG9TdHJpbmcoMTYpKSx6KEUobikpXTtpZihhJiZvWzBdLmNoYXJBdCgwKT09b1swXS5jaGFyQXQoMSkmJm9bMV0uY2hhckF0KDApPT1vWzFdLmNoYXJBdCgxKSYmb1syXS5jaGFyQXQoMCk9PW9bMl0uY2hhckF0KDEpJiZvWzNdLmNoYXJBdCgwKT09b1szXS5jaGFyQXQoMSkpcmV0dXJuIG9bMF0uY2hhckF0KDApK29bMV0uY2hhckF0KDApK29bMl0uY2hhckF0KDApK29bM10uY2hhckF0KDApO3JldHVybiBvLmpvaW4oIiIpfSh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYix0aGlzLl9hLGUpfSx0b0hleDhTdHJpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuIiMiK3RoaXMudG9IZXg4KGUpfSx0b1JnYjpmdW5jdGlvbigpe3JldHVybntyOmkodGhpcy5fciksZzppKHRoaXMuX2cpLGI6aSh0aGlzLl9iKSxhOnRoaXMuX2F9fSx0b1JnYlN0cmluZzpmdW5jdGlvbigpe3JldHVybiAxPT10aGlzLl9hPyJyZ2IoIitpKHRoaXMuX3IpKyIsICIraSh0aGlzLl9nKSsiLCAiK2kodGhpcy5fYikrIikiOiJyZ2JhKCIraSh0aGlzLl9yKSsiLCAiK2kodGhpcy5fZykrIiwgIitpKHRoaXMuX2IpKyIsICIrdGhpcy5fcm91bmRBKyIpIn0sdG9QZXJjZW50YWdlUmdiOmZ1bmN0aW9uKCl7cmV0dXJue3I6aSgxMDAqTyh0aGlzLl9yLDI1NSkpKyIlIixnOmkoMTAwKk8odGhpcy5fZywyNTUpKSsiJSIsYjppKDEwMCpPKHRoaXMuX2IsMjU1KSkrIiUiLGE6dGhpcy5fYX19LHRvUGVyY2VudGFnZVJnYlN0cmluZzpmdW5jdGlvbigpe3JldHVybiAxPT10aGlzLl9hPyJyZ2IoIitpKDEwMCpPKHRoaXMuX3IsMjU1KSkrIiUsICIraSgxMDAqTyh0aGlzLl9nLDI1NSkpKyIlLCAiK2koMTAwKk8odGhpcy5fYiwyNTUpKSsiJSkiOiJyZ2JhKCIraSgxMDAqTyh0aGlzLl9yLDI1NSkpKyIlLCAiK2koMTAwKk8odGhpcy5fZywyNTUpKSsiJSwgIitpKDEwMCpPKHRoaXMuX2IsMjU1KSkrIiUsICIrdGhpcy5fcm91bmRBKyIpIn0sdG9OYW1lOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLl9hPyJ0cmFuc3BhcmVudCI6ISh0aGlzLl9hPDEpJiYoU1tkKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iLCEwKV18fCExKX0sdG9GaWx0ZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9IiMiK3AodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IsdGhpcy5fYSkscj10LG49dGhpcy5fZ3JhZGllbnRUeXBlPyJHcmFkaWVudFR5cGUgPSAxLCAiOiIiO2lmKGUpe3ZhciBhPWMoZSk7cj0iIyIrcChhLl9yLGEuX2csYS5fYixhLl9hKX1yZXR1cm4icHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KCIrbisic3RhcnRDb2xvcnN0cj0iK3QrIixlbmRDb2xvcnN0cj0iK3IrIikifSx0b1N0cmluZzpmdW5jdGlvbihlKXt2YXIgdD0hIWU7ZT1lfHx0aGlzLl9mb3JtYXQ7dmFyIHI9ITEsbj10aGlzLl9hPDEmJnRoaXMuX2E+PTA7cmV0dXJuIHR8fCFufHwiaGV4IiE9PWUmJiJoZXg2IiE9PWUmJiJoZXgzIiE9PWUmJiJoZXg0IiE9PWUmJiJoZXg4IiE9PWUmJiJuYW1lIiE9PWU/KCJyZ2IiPT09ZSYmKHI9dGhpcy50b1JnYlN0cmluZygpKSwicHJnYiI9PT1lJiYocj10aGlzLnRvUGVyY2VudGFnZVJnYlN0cmluZygpKSwiaGV4IiE9PWUmJiJoZXg2IiE9PWV8fChyPXRoaXMudG9IZXhTdHJpbmcoKSksImhleDMiPT09ZSYmKHI9dGhpcy50b0hleFN0cmluZyghMCkpLCJoZXg0Ij09PWUmJihyPXRoaXMudG9IZXg4U3RyaW5nKCEwKSksImhleDgiPT09ZSYmKHI9dGhpcy50b0hleDhTdHJpbmcoKSksIm5hbWUiPT09ZSYmKHI9dGhpcy50b05hbWUoKSksImhzbCI9PT1lJiYocj10aGlzLnRvSHNsU3RyaW5nKCkpLCJoc3YiPT09ZSYmKHI9dGhpcy50b0hzdlN0cmluZygpKSxyfHx0aGlzLnRvSGV4U3RyaW5nKCkpOiJuYW1lIj09PWUmJjA9PT10aGlzLl9hP3RoaXMudG9OYW1lKCk6dGhpcy50b1JnYlN0cmluZygpfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiBjKHRoaXMudG9TdHJpbmcoKSl9LF9hcHBseU1vZGlmaWNhdGlvbjpmdW5jdGlvbihlLHQpe3ZhciByPWUuYXBwbHkobnVsbCxbdGhpc10uY29uY2F0KFtdLnNsaWNlLmNhbGwodCkpKTtyZXR1cm4gdGhpcy5fcj1yLl9yLHRoaXMuX2c9ci5fZyx0aGlzLl9iPXIuX2IsdGhpcy5zZXRBbHBoYShyLl9hKSx0aGlzfSxsaWdodGVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKG0sYXJndW1lbnRzKX0sYnJpZ2h0ZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oeSxhcmd1bWVudHMpfSxkYXJrZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oeCxhcmd1bWVudHMpfSxkZXNhdHVyYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKGgsYXJndW1lbnRzKX0sc2F0dXJhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oZyxhcmd1bWVudHMpfSxncmV5c2NhbGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24odixhcmd1bWVudHMpfSxzcGluOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKGIsYXJndW1lbnRzKX0sX2FwcGx5Q29tYmluYXRpb246ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5hcHBseShudWxsLFt0aGlzXS5jb25jYXQoW10uc2xpY2UuY2FsbCh0KSkpfSxhbmFsb2dvdXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihNLGFyZ3VtZW50cyl9LGNvbXBsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihfLGFyZ3VtZW50cyl9LG1vbm9jaHJvbWF0aWM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihBLGFyZ3VtZW50cyl9LHNwbGl0Y29tcGxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKGssYXJndW1lbnRzKX0sdHJpYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbih3LGFyZ3VtZW50cyl9LHRldHJhZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKFQsYXJndW1lbnRzKX19LGMuZnJvbVJhdGlvPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCI9PXR5cGVvZiBlKXt2YXIgcj17fTtmb3IodmFyIG4gaW4gZSllLmhhc093blByb3BlcnR5KG4pJiYocltuXT0iYSI9PT1uP2Vbbl06UihlW25dKSk7ZT1yfXJldHVybiBjKGUsdCl9LGMuZXF1YWxzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuISghZXx8IXQpJiZjKGUpLnRvUmdiU3RyaW5nKCk9PWModCkudG9SZ2JTdHJpbmcoKX0sYy5yYW5kb209ZnVuY3Rpb24oKXtyZXR1cm4gYy5mcm9tUmF0aW8oe3I6cygpLGc6cygpLGI6cygpfSl9LGMubWl4PWZ1bmN0aW9uKGUsdCxyKXtyPTA9PT1yPzA6cnx8NTA7dmFyIG49YyhlKS50b1JnYigpLGE9Yyh0KS50b1JnYigpLGk9ci8xMDA7cmV0dXJuIGMoe3I6KGEuci1uLnIpKmkrbi5yLGc6KGEuZy1uLmcpKmkrbi5nLGI6KGEuYi1uLmIpKmkrbi5iLGE6KGEuYS1uLmEpKmkrbi5hfSl9LGMucmVhZGFiaWxpdHk9ZnVuY3Rpb24odCxyKXt2YXIgbj1jKHQpLGE9YyhyKTtyZXR1cm4oZS5tYXgobi5nZXRMdW1pbmFuY2UoKSxhLmdldEx1bWluYW5jZSgpKSsuMDUpLyhlLm1pbihuLmdldEx1bWluYW5jZSgpLGEuZ2V0THVtaW5hbmNlKCkpKy4wNSl9LGMuaXNSZWFkYWJsZT1mdW5jdGlvbihlLHQscil7dmFyIG4sYSxpPWMucmVhZGFiaWxpdHkoZSx0KTtzd2l0Y2goYT0hMSwobj1mdW5jdGlvbihlKXt2YXIgdCxyO3Q9KChlPWV8fHtsZXZlbDoiQUEiLHNpemU6InNtYWxsIn0pLmxldmVsfHwiQUEiKS50b1VwcGVyQ2FzZSgpLHI9KGUuc2l6ZXx8InNtYWxsIikudG9Mb3dlckNhc2UoKSwiQUEiIT09dCYmIkFBQSIhPT10JiYodD0iQUEiKTsic21hbGwiIT09ciYmImxhcmdlIiE9PXImJihyPSJzbWFsbCIpO3JldHVybntsZXZlbDp0LHNpemU6cn19KHIpKS5sZXZlbCtuLnNpemUpe2Nhc2UiQUFzbWFsbCI6Y2FzZSJBQUFsYXJnZSI6YT1pPj00LjU7YnJlYWs7Y2FzZSJBQWxhcmdlIjphPWk+PTM7YnJlYWs7Y2FzZSJBQUFzbWFsbCI6YT1pPj03fXJldHVybiBhfSxjLm1vc3RSZWFkYWJsZT1mdW5jdGlvbihlLHQscil7dmFyIG4sYSxpLG8sbD1udWxsLHM9MDthPShyPXJ8fHt9KS5pbmNsdWRlRmFsbGJhY2tDb2xvcnMsaT1yLmxldmVsLG89ci5zaXplO2Zvcih2YXIgdT0wO3U8dC5sZW5ndGg7dSsrKShuPWMucmVhZGFiaWxpdHkoZSx0W3VdKSk+cyYmKHM9bixsPWModFt1XSkpO3JldHVybiBjLmlzUmVhZGFibGUoZSxsLHtsZXZlbDppLHNpemU6b30pfHwhYT9sOihyLmluY2x1ZGVGYWxsYmFja0NvbG9ycz0hMSxjLm1vc3RSZWFkYWJsZShlLFsiI2ZmZiIsIiMwMDAiXSxyKSl9O3ZhciBMPWMubmFtZXM9e2FsaWNlYmx1ZToiZjBmOGZmIixhbnRpcXVld2hpdGU6ImZhZWJkNyIsYXF1YToiMGZmIixhcXVhbWFyaW5lOiI3ZmZmZDQiLGF6dXJlOiJmMGZmZmYiLGJlaWdlOiJmNWY1ZGMiLGJpc3F1ZToiZmZlNGM0IixibGFjazoiMDAwIixibGFuY2hlZGFsbW9uZDoiZmZlYmNkIixibHVlOiIwMGYiLGJsdWV2aW9sZXQ6IjhhMmJlMiIsYnJvd246ImE1MmEyYSIsYnVybHl3b29kOiJkZWI4ODciLGJ1cm50c2llbm5hOiJlYTdlNWQiLGNhZGV0Ymx1ZToiNWY5ZWEwIixjaGFydHJldXNlOiI3ZmZmMDAiLGNob2NvbGF0ZToiZDI2OTFlIixjb3JhbDoiZmY3ZjUwIixjb3JuZmxvd2VyYmx1ZToiNjQ5NWVkIixjb3Juc2lsazoiZmZmOGRjIixjcmltc29uOiJkYzE0M2MiLGN5YW46IjBmZiIsZGFya2JsdWU6IjAwMDA4YiIsZGFya2N5YW46IjAwOGI4YiIsZGFya2dvbGRlbnJvZDoiYjg4NjBiIixkYXJrZ3JheToiYTlhOWE5IixkYXJrZ3JlZW46IjAwNjQwMCIsZGFya2dyZXk6ImE5YTlhOSIsZGFya2toYWtpOiJiZGI3NmIiLGRhcmttYWdlbnRhOiI4YjAwOGIiLGRhcmtvbGl2ZWdyZWVuOiI1NTZiMmYiLGRhcmtvcmFuZ2U6ImZmOGMwMCIsZGFya29yY2hpZDoiOTkzMmNjIixkYXJrcmVkOiI4YjAwMDAiLGRhcmtzYWxtb246ImU5OTY3YSIsZGFya3NlYWdyZWVuOiI4ZmJjOGYiLGRhcmtzbGF0ZWJsdWU6IjQ4M2Q4YiIsZGFya3NsYXRlZ3JheToiMmY0ZjRmIixkYXJrc2xhdGVncmV5OiIyZjRmNGYiLGRhcmt0dXJxdW9pc2U6IjAwY2VkMSIsZGFya3Zpb2xldDoiOTQwMGQzIixkZWVwcGluazoiZmYxNDkzIixkZWVwc2t5Ymx1ZToiMDBiZmZmIixkaW1ncmF5OiI2OTY5NjkiLGRpbWdyZXk6IjY5Njk2OSIsZG9kZ2VyYmx1ZToiMWU5MGZmIixmaXJlYnJpY2s6ImIyMjIyMiIsZmxvcmFsd2hpdGU6ImZmZmFmMCIsZm9yZXN0Z3JlZW46IjIyOGIyMiIsZnVjaHNpYToiZjBmIixnYWluc2Jvcm86ImRjZGNkYyIsZ2hvc3R3aGl0ZToiZjhmOGZmIixnb2xkOiJmZmQ3MDAiLGdvbGRlbnJvZDoiZGFhNTIwIixncmF5OiI4MDgwODAiLGdyZWVuOiIwMDgwMDAiLGdyZWVueWVsbG93OiJhZGZmMmYiLGdyZXk6IjgwODA4MCIsaG9uZXlkZXc6ImYwZmZmMCIsaG90cGluazoiZmY2OWI0IixpbmRpYW5yZWQ6ImNkNWM1YyIsaW5kaWdvOiI0YjAwODIiLGl2b3J5OiJmZmZmZjAiLGtoYWtpOiJmMGU2OGMiLGxhdmVuZGVyOiJlNmU2ZmEiLGxhdmVuZGVyYmx1c2g6ImZmZjBmNSIsbGF3bmdyZWVuOiI3Y2ZjMDAiLGxlbW9uY2hpZmZvbjoiZmZmYWNkIixsaWdodGJsdWU6ImFkZDhlNiIsbGlnaHRjb3JhbDoiZjA4MDgwIixsaWdodGN5YW46ImUwZmZmZiIsbGlnaHRnb2xkZW5yb2R5ZWxsb3c6ImZhZmFkMiIsbGlnaHRncmF5OiJkM2QzZDMiLGxpZ2h0Z3JlZW46IjkwZWU5MCIsbGlnaHRncmV5OiJkM2QzZDMiLGxpZ2h0cGluazoiZmZiNmMxIixsaWdodHNhbG1vbjoiZmZhMDdhIixsaWdodHNlYWdyZWVuOiIyMGIyYWEiLGxpZ2h0c2t5Ymx1ZToiODdjZWZhIixsaWdodHNsYXRlZ3JheToiNzg5IixsaWdodHNsYXRlZ3JleToiNzg5IixsaWdodHN0ZWVsYmx1ZToiYjBjNGRlIixsaWdodHllbGxvdzoiZmZmZmUwIixsaW1lOiIwZjAiLGxpbWVncmVlbjoiMzJjZDMyIixsaW5lbjoiZmFmMGU2IixtYWdlbnRhOiJmMGYiLG1hcm9vbjoiODAwMDAwIixtZWRpdW1hcXVhbWFyaW5lOiI2NmNkYWEiLG1lZGl1bWJsdWU6IjAwMDBjZCIsbWVkaXVtb3JjaGlkOiJiYTU1ZDMiLG1lZGl1bXB1cnBsZToiOTM3MGRiIixtZWRpdW1zZWFncmVlbjoiM2NiMzcxIixtZWRpdW1zbGF0ZWJsdWU6IjdiNjhlZSIsbWVkaXVtc3ByaW5nZ3JlZW46IjAwZmE5YSIsbWVkaXVtdHVycXVvaXNlOiI0OGQxY2MiLG1lZGl1bXZpb2xldHJlZDoiYzcxNTg1IixtaWRuaWdodGJsdWU6IjE5MTk3MCIsbWludGNyZWFtOiJmNWZmZmEiLG1pc3R5cm9zZToiZmZlNGUxIixtb2NjYXNpbjoiZmZlNGI1IixuYXZham93aGl0ZToiZmZkZWFkIixuYXZ5OiIwMDAwODAiLG9sZGxhY2U6ImZkZjVlNiIsb2xpdmU6IjgwODAwMCIsb2xpdmVkcmFiOiI2YjhlMjMiLG9yYW5nZToiZmZhNTAwIixvcmFuZ2VyZWQ6ImZmNDUwMCIsb3JjaGlkOiJkYTcwZDYiLHBhbGVnb2xkZW5yb2Q6ImVlZThhYSIscGFsZWdyZWVuOiI5OGZiOTgiLHBhbGV0dXJxdW9pc2U6ImFmZWVlZSIscGFsZXZpb2xldHJlZDoiZGI3MDkzIixwYXBheWF3aGlwOiJmZmVmZDUiLHBlYWNocHVmZjoiZmZkYWI5IixwZXJ1OiJjZDg1M2YiLHBpbms6ImZmYzBjYiIscGx1bToiZGRhMGRkIixwb3dkZXJibHVlOiJiMGUwZTYiLHB1cnBsZToiODAwMDgwIixyZWJlY2NhcHVycGxlOiI2NjMzOTkiLHJlZDoiZjAwIixyb3N5YnJvd246ImJjOGY4ZiIscm95YWxibHVlOiI0MTY5ZTEiLHNhZGRsZWJyb3duOiI4YjQ1MTMiLHNhbG1vbjoiZmE4MDcyIixzYW5keWJyb3duOiJmNGE0NjAiLHNlYWdyZWVuOiIyZThiNTciLHNlYXNoZWxsOiJmZmY1ZWUiLHNpZW5uYToiYTA1MjJkIixzaWx2ZXI6ImMwYzBjMCIsc2t5Ymx1ZToiODdjZWViIixzbGF0ZWJsdWU6IjZhNWFjZCIsc2xhdGVncmF5OiI3MDgwOTAiLHNsYXRlZ3JleToiNzA4MDkwIixzbm93OiJmZmZhZmEiLHNwcmluZ2dyZWVuOiIwMGZmN2YiLHN0ZWVsYmx1ZToiNDY4MmI0Iix0YW46ImQyYjQ4YyIsdGVhbDoiMDA4MDgwIix0aGlzdGxlOiJkOGJmZDgiLHRvbWF0bzoiZmY2MzQ3Iix0dXJxdW9pc2U6IjQwZTBkMCIsdmlvbGV0OiJlZTgyZWUiLHdoZWF0OiJmNWRlYjMiLHdoaXRlOiJmZmYiLHdoaXRlc21va2U6ImY1ZjVmNSIseWVsbG93OiJmZjAiLHllbGxvd2dyZWVuOiI5YWNkMzIifSxTPWMuaGV4TmFtZXM9ZnVuY3Rpb24oZSl7dmFyIHQ9e307Zm9yKHZhciByIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShyKSYmKHRbZVtyXV09cik7cmV0dXJuIHR9KEwpO2Z1bmN0aW9uIEMoZSl7cmV0dXJuIGU9cGFyc2VGbG9hdChlKSwoaXNOYU4oZSl8fGU8MHx8ZT4xKSYmKGU9MSksZX1mdW5jdGlvbiBPKHQscil7KGZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZSYmLTEhPWUuaW5kZXhPZigiLiIpJiYxPT09cGFyc2VGbG9hdChlKX0pKHQpJiYodD0iMTAwJSIpO3ZhciBuPWZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZSYmLTEhPWUuaW5kZXhPZigiJSIpfSh0KTtyZXR1cm4gdD1vKHIsbCgwLHBhcnNlRmxvYXQodCkpKSxuJiYodD1wYXJzZUludCh0KnIsMTApLzEwMCksZS5hYnModC1yKTwxZS02PzE6dCVyL3BhcnNlRmxvYXQocil9ZnVuY3Rpb24gRChlKXtyZXR1cm4gbygxLGwoMCxlKSl9ZnVuY3Rpb24gUChlKXtyZXR1cm4gcGFyc2VJbnQoZSwxNil9ZnVuY3Rpb24geihlKXtyZXR1cm4gMT09ZS5sZW5ndGg/IjAiK2U6IiIrZX1mdW5jdGlvbiBSKGUpe3JldHVybiBlPD0xJiYoZT0xMDAqZSsiJSIpLGV9ZnVuY3Rpb24gRSh0KXtyZXR1cm4gZS5yb3VuZCgyNTUqcGFyc2VGbG9hdCh0KSkudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIEkoZSl7cmV0dXJuIFAoZSkvMjU1fXZhciBGLE4sSCxqPShOPSJbXFxzfFxcKF0rKCIrKEY9Iig/OlstXFwrXT9cXGQqXFwuXFxkKyU/KXwoPzpbLVxcK10/XFxkKyU/KSIpKyIpWyx8XFxzXSsoIitGKyIpWyx8XFxzXSsoIitGKyIpXFxzKlxcKT8iLEg9IltcXHN8XFwoXSsoIitGKyIpWyx8XFxzXSsoIitGKyIpWyx8XFxzXSsoIitGKyIpWyx8XFxzXSsoIitGKyIpXFxzKlxcKT8iLHtDU1NfVU5JVDpuZXcgUmVnRXhwKEYpLHJnYjpuZXcgUmVnRXhwKCJyZ2IiK04pLHJnYmE6bmV3IFJlZ0V4cCgicmdiYSIrSCksaHNsOm5ldyBSZWdFeHAoImhzbCIrTiksaHNsYTpuZXcgUmVnRXhwKCJoc2xhIitIKSxoc3Y6bmV3IFJlZ0V4cCgiaHN2IitOKSxoc3ZhOm5ldyBSZWdFeHAoImhzdmEiK0gpLGhleDM6L14jPyhbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KSQvLGhleDY6L14jPyhbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KSQvLGhleDQ6L14jPyhbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkkLyxoZXg4Oi9eIz8oWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pJC99KTtmdW5jdGlvbiBCKGUpe3JldHVybiEhai5DU1NfVU5JVC5leGVjKGUpfSJ1bmRlZmluZWQiIT10eXBlb2YgdCYmdC5leHBvcnRzP3QuZXhwb3J0cz1jOndpbmRvdy50aW55Y29sb3I9Y30oTWF0aCl9LHt9XSw1OTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9W3twYXRoOiIiLGJhY2tvZmY6MH0se3BhdGg6Ik0tMi40LC0zVjNMMC42LDBaIixiYWNrb2ZmOi42fSx7cGF0aDoiTS0zLjcsLTIuNVYyLjVMMS4zLDBaIixiYWNrb2ZmOjEuM30se3BhdGg6Ik0tNC40NSwtM0wtMS42NSwtMC4yVjAuMkwtNC40NSwzTDEuNTUsMFoiLGJhY2tvZmY6MS41NX0se3BhdGg6Ik0tMi4yLC0yLjJMLTAuMiwtMC4yVjAuMkwtMi4yLDIuMkwtMS40LDNMMS42LDBMLTEuNCwtM1oiLGJhY2tvZmY6MS42fSx7cGF0aDoiTS00LjQsLTIuMUwtMC42LC0wLjJWMC4yTC00LjQsMi4xTC00LDNMMiwwTC00LC0zWiIsYmFja29mZjoyfSx7cGF0aDoiTTIsMEEyLDIgMCAxLDEgMCwtMkEyLDIgMCAwLDEgMiwwWiIsYmFja29mZjowLG5vUm90YXRlOiEwfSx7cGF0aDoiTTIsMlYtMkgtMlYyWiIsYmFja29mZjowLG5vUm90YXRlOiEwfV19LHt9XSw2MDpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuL2Fycm93X3BhdGhzIiksYT1lKCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxpPWUoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiKSxvPWUoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheTtlKCIuLi8uLi9jb25zdGFudHMvYXhpc19wbGFjZWFibGVfb2JqZWN0cyIpO3QuZXhwb3J0cz1vKCJhbm5vdGF0aW9uIix7dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHRleHRhbmdsZTp7dmFsVHlwZToiYW5nbGUiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxmb250OmEoe2VkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyIsY29sb3JFZGl0VHlwZToiYXJyYXlkcmF3In0pLHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjoxLGRmbHQ6bnVsbCxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxoZWlnaHQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjEsZGZsdDpudWxsLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxLGVkaXRUeXBlOiJhcnJheWRyYXcifSxhbGlnbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoiY2VudGVyIixlZGl0VHlwZToiYXJyYXlkcmF3In0sdmFsaWduOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AiLCJtaWRkbGUiLCJib3R0b20iXSxkZmx0OiJtaWRkbGUiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDoicmdiYSgwLDAsMCwwKSIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDoicmdiYSgwLDAsMCwwKSIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGJvcmRlcnBhZDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sYm9yZGVyd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHNob3dhcnJvdzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxhcnJvd2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGFycm93aGVhZDp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsbWF4Om4ubGVuZ3RoLGRmbHQ6MSxlZGl0VHlwZToiYXJyYXlkcmF3In0sc3RhcnRhcnJvd2hlYWQ6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLG1heDpuLmxlbmd0aCxkZmx0OjEsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGFycm93c2lkZTp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsiZW5kIiwic3RhcnQiXSxleHRyYXM6WyJub25lIl0sZGZsdDoiZW5kIixlZGl0VHlwZToiYXJyYXlkcmF3In0sYXJyb3dzaXplOnt2YWxUeXBlOiJudW1iZXIiLG1pbjouMyxkZmx0OjEsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sc3RhcnRhcnJvd3NpemU6e3ZhbFR5cGU6Im51bWJlciIsbWluOi4zLGRmbHQ6MSxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxhcnJvd3dpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjouMSxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxzdGFuZG9mZjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sc3RhcnRzdGFuZG9mZjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sYXg6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sYXk6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sYXhyZWY6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGRmbHQ6InBpeGVsIix2YWx1ZXM6WyJwaXhlbCIsaS5pZFJlZ2V4LngudG9TdHJpbmcoKV0sZWRpdFR5cGU6ImNhbGMifSxheXJlZjp7dmFsVHlwZToiZW51bWVyYXRlZCIsZGZsdDoicGl4ZWwiLHZhbHVlczpbInBpeGVsIixpLmlkUmVnZXgueS50b1N0cmluZygpXSxlZGl0VHlwZToiY2FsYyJ9LHhyZWY6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBhcGVyIixpLmlkUmVnZXgueC50b1N0cmluZygpXSxlZGl0VHlwZToiY2FsYyJ9LHg6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdLGRmbHQ6ImF1dG8iLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHhzaGlmdDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seXJlZjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicGFwZXIiLGkuaWRSZWdleC55LnRvU3RyaW5nKCldLGVkaXRUeXBlOiJjYWxjIn0seTp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx5YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZGZsdDoiYXV0byIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seXNoaWZ0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxjbGlja3Rvc2hvdzp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMSwib25vZmYiLCJvbm91dCJdLGRmbHQ6ITEsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHhjbGljazp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiYXJyYXlkcmF3In0seWNsaWNrOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxob3ZlcnRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGhvdmVybGFiZWw6e2JnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToiYXJyYXlkcmF3In0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToiYXJyYXlkcmF3In0sZm9udDphKHtlZGl0VHlwZToiYXJyYXlkcmF3In0pLGVkaXRUeXBlOiJhcnJheWRyYXcifSxjYXB0dXJlZXZlbnRzOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToiYXJyYXlkcmF3In0sZWRpdFR5cGU6ImNhbGMiLF9kZXByZWNhdGVkOntyZWY6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifX19KX0seyIuLi8uLi9jb25zdGFudHMvYXhpc19wbGFjZWFibGVfb2JqZWN0cyI6MTc4LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjoyMzcsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiOjI1NCwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjoyNzYsIi4vYXJyb3dfcGF0aHMiOjU5fV0sNjE6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vbGliIiksYT1lKCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9ZSgiLi9kcmF3IikuZHJhdztmdW5jdGlvbiBvKGUpe3ZhciB0PWUuX2Z1bGxMYXlvdXQ7bi5maWx0ZXJWaXNpYmxlKHQuYW5ub3RhdGlvbnMpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPWEuZ2V0RnJvbUlkKGUsdC54cmVmKSxuPWEuZ2V0RnJvbUlkKGUsdC55cmVmKSxpPWEuZ2V0UmVmVHlwZSh0LnhyZWYpLG89YS5nZXRSZWZUeXBlKHQueXJlZik7dC5fZXh0cmVtZXM9e30sInJhbmdlIj09PWkmJmwodCxyKSwicmFuZ2UiPT09byYmbCh0LG4pfSkpfWZ1bmN0aW9uIGwoZSx0KXt2YXIgcixuPXQuX2lkLGk9bi5jaGFyQXQoMCksbz1lW2ldLGw9ZVsiYSIraV0scz1lW2krInJlZiJdLGM9ZVsiYSIraSsicmVmIl0sdT1lWyJfIitpKyJwYWRwbHVzIl0sZj1lWyJfIitpKyJwYWRtaW51cyJdLGQ9e3g6MSx5Oi0xfVtpXSplW2krInNoaWZ0Il0scD0zKmUuYXJyb3dzaXplKmUuYXJyb3d3aWR0aHx8MCxoPXArZCxnPXAtZCx2PTMqZS5zdGFydGFycm93c2l6ZSplLmFycm93d2lkdGh8fDAsbT12K2QseT12LWQ7aWYoYz09PXMpe3ZhciB4PWEuZmluZEV4dHJlbWVzKHQsW3QucjJjKG8pXSx7cHBhZHBsdXM6aCxwcGFkbWludXM6Z30pLGI9YS5maW5kRXh0cmVtZXModCxbdC5yMmMobCldLHtwcGFkcGx1czpNYXRoLm1heCh1LG0pLHBwYWRtaW51czpNYXRoLm1heChmLHkpfSk7cj17bWluOlt4Lm1pblswXSxiLm1pblswXV0sbWF4Olt4Lm1heFswXSxiLm1heFswXV19fWVsc2UgbT1sP20rbDptLHk9bD95LWw6eSxyPWEuZmluZEV4dHJlbWVzKHQsW3QucjJjKG8pXSx7cHBhZHBsdXM6TWF0aC5tYXgodSxoLG0pLHBwYWRtaW51czpNYXRoLm1heChmLGcseSl9KTtlLl9leHRyZW1lc1tuXT1yfXQuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1lLl9mdWxsTGF5b3V0O2lmKG4uZmlsdGVyVmlzaWJsZSh0LmFubm90YXRpb25zKS5sZW5ndGgmJmUuX2Z1bGxEYXRhLmxlbmd0aClyZXR1cm4gbi5zeW5jT3JBc3luYyhbaSxvXSxlKX19LHsiLi4vLi4vbGliIjoyMDIsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjoyNDgsIi4vZHJhdyI6NjZ9XSw2MjpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9saWIiKSxhPWUoIi4uLy4uL3JlZ2lzdHJ5IiksaT1lKCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikuYXJyYXlFZGl0b3I7ZnVuY3Rpb24gbyhlLHQpe3ZhciByLG4sYSxpLG8scyxjLHU9ZS5fZnVsbExheW91dC5hbm5vdGF0aW9ucyxmPVtdLGQ9W10scD1bXSxoPSh0fHxbXSkubGVuZ3RoO2ZvcihyPTA7cjx1Lmxlbmd0aDtyKyspaWYoaT0oYT11W3JdKS5jbGlja3Rvc2hvdyl7Zm9yKG49MDtuPGg7bisrKWlmKHM9KG89dFtuXSkueGF4aXMsYz1vLnlheGlzLHMuX2lkPT09YS54cmVmJiZjLl9pZD09PWEueXJlZiYmcy5kMnIoby54KT09PWwoYS5feGNsaWNrLHMpJiZjLmQycihvLnkpPT09bChhLl95Y2xpY2ssYykpeyhhLnZpc2libGU/Im9ub3V0Ij09PWk/ZDpwOmYpLnB1c2gocik7YnJlYWt9bj09PWgmJmEudmlzaWJsZSYmIm9ub3V0Ij09PWkmJmQucHVzaChyKX1yZXR1cm57b246ZixvZmY6ZCxleHBsaWNpdE9mZjpwfX1mdW5jdGlvbiBsKGUsdCl7cmV0dXJuImxvZyI9PT10LnR5cGU/dC5sMnIoZSk6dC5kMnIoZSl9dC5leHBvcnRzPXtoYXNDbGlja1RvU2hvdzpmdW5jdGlvbihlLHQpe3ZhciByPW8oZSx0KTtyZXR1cm4gci5vbi5sZW5ndGg+MHx8ci5leHBsaWNpdE9mZi5sZW5ndGg+MH0sb25DbGljazpmdW5jdGlvbihlLHQpe3ZhciByLGwscz1vKGUsdCksYz1zLm9uLHU9cy5vZmYuY29uY2F0KHMuZXhwbGljaXRPZmYpLGY9e30sZD1lLl9mdWxsTGF5b3V0LmFubm90YXRpb25zO2lmKCFjLmxlbmd0aCYmIXUubGVuZ3RoKXJldHVybjtmb3Iocj0wO3I8Yy5sZW5ndGg7cisrKShsPWkoZS5sYXlvdXQsImFubm90YXRpb25zIixkW2Nbcl1dKSkubW9kaWZ5SXRlbSgidmlzaWJsZSIsITApLG4uZXh0ZW5kRmxhdChmLGwuZ2V0VXBkYXRlT2JqKCkpO2ZvcihyPTA7cjx1Lmxlbmd0aDtyKyspKGw9aShlLmxheW91dCwiYW5ub3RhdGlvbnMiLGRbdVtyXV0pKS5tb2RpZnlJdGVtKCJ2aXNpYmxlIiwhMSksbi5leHRlbmRGbGF0KGYsbC5nZXRVcGRhdGVPYmooKSk7cmV0dXJuIGEuY2FsbCgidXBkYXRlIixlLHt9LGYpfX19LHsiLi4vLi4vbGliIjoyMDIsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjIzNywiLi4vLi4vcmVnaXN0cnkiOjI5MH1dLDYzOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2xpYiIpLGE9ZSgiLi4vY29sb3IiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsaSl7aSgib3BhY2l0eSIpO3ZhciBvPWkoImJnY29sb3IiKSxsPWkoImJvcmRlcmNvbG9yIikscz1hLm9wYWNpdHkobCk7aSgiYm9yZGVycGFkIik7dmFyIGM9aSgiYm9yZGVyd2lkdGgiKSx1PWkoInNob3dhcnJvdyIpO2lmKGkoInRleHQiLHU/IiAiOnIuX2RmbHRUaXRsZS5hbm5vdGF0aW9uKSxpKCJ0ZXh0YW5nbGUiKSxuLmNvZXJjZUZvbnQoaSwiZm9udCIsci5mb250KSxpKCJ3aWR0aCIpLGkoImFsaWduIiksaSgiaGVpZ2h0IikmJmkoInZhbGlnbiIpLHUpe3ZhciBmLGQscD1pKCJhcnJvd3NpZGUiKTstMSE9PXAuaW5kZXhPZigiZW5kIikmJihmPWkoImFycm93aGVhZCIpLGQ9aSgiYXJyb3dzaXplIikpLC0xIT09cC5pbmRleE9mKCJzdGFydCIpJiYoaSgic3RhcnRhcnJvd2hlYWQiLGYpLGkoInN0YXJ0YXJyb3dzaXplIixkKSksaSgiYXJyb3djb2xvciIscz90LmJvcmRlcmNvbG9yOmEuZGVmYXVsdExpbmUpLGkoImFycm93d2lkdGgiLDIqKHMmJmN8fDEpKSxpKCJzdGFuZG9mZiIpLGkoInN0YXJ0c3RhbmRvZmYiKX12YXIgaD1pKCJob3ZlcnRleHQiKSxnPXIuaG92ZXJsYWJlbHx8e307aWYoaCl7dmFyIHY9aSgiaG92ZXJsYWJlbC5iZ2NvbG9yIixnLmJnY29sb3J8fChhLm9wYWNpdHkobyk/YS5yZ2Iobyk6YS5kZWZhdWx0TGluZSkpLG09aSgiaG92ZXJsYWJlbC5ib3JkZXJjb2xvciIsZy5ib3JkZXJjb2xvcnx8YS5jb250cmFzdCh2KSk7bi5jb2VyY2VGb250KGksImhvdmVybGFiZWwuZm9udCIse2ZhbWlseTpnLmZvbnQuZmFtaWx5LHNpemU6Zy5mb250LnNpemUsY29sb3I6Zy5mb250LmNvbG9yfHxtfSl9aSgiY2FwdHVyZWV2ZW50cyIsISFoKX19LHsiLi4vLi4vbGliIjoyMDIsIi4uL2NvbG9yIjo3NX1dLDY0OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoImZhc3QtaXNudW1lcmljIiksYT1lKCIuLi8uLi9saWIvdG9fbG9nX3JhbmdlIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLGkpe3Q9dHx8e307dmFyIG89ImxvZyI9PT1yJiYibGluZWFyIj09PXQudHlwZSxsPSJsaW5lYXIiPT09ciYmImxvZyI9PT10LnR5cGU7aWYob3x8bClmb3IodmFyIHMsYyx1PWUuX2Z1bGxMYXlvdXQuYW5ub3RhdGlvbnMsZj10Ll9pZC5jaGFyQXQoMCksZD0wO2Q8dS5sZW5ndGg7ZCsrKXM9dVtkXSxjPSJhbm5vdGF0aW9uc1siK2QrIl0uIixzW2YrInJlZiJdPT09dC5faWQmJnAoZiksc1siYSIrZisicmVmIl09PT10Ll9pZCYmcCgiYSIrZik7ZnVuY3Rpb24gcChlKXt2YXIgcj1zW2VdLGw9bnVsbDtsPW8/YShyLHQucmFuZ2UpOk1hdGgucG93KDEwLHIpLG4obCl8fChsPW51bGwpLGkoYytlLGwpfX19LHsiLi4vLi4vbGliL3RvX2xvZ19yYW5nZSI6MjI2LCJmYXN0LWlzbnVtZXJpYyI6MTF9XSw2NTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9saWIiKSxhPWUoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksaT1lKCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxvPWUoIi4vY29tbW9uX2RlZmF1bHRzIiksbD1lKCIuL2F0dHJpYnV0ZXMiKTtmdW5jdGlvbiBzKGUsdCxyKXtmdW5jdGlvbiBpKHIsYSl7cmV0dXJuIG4uY29lcmNlKGUsdCxsLHIsYSl9dmFyIHM9aSgidmlzaWJsZSIpLGM9aSgiY2xpY2t0b3Nob3ciKTtpZihzfHxjKXtvKGUsdCxyLGkpO2Zvcih2YXIgdT10LnNob3dhcnJvdyxmPVsieCIsInkiXSxkPVstMTAsLTMwXSxwPXtfZnVsbExheW91dDpyfSxoPTA7aDwyO2grKyl7dmFyIGc9ZltoXSx2PWEuY29lcmNlUmVmKGUsdCxwLGcsIiIsInBhcGVyIik7aWYoInBhcGVyIiE9PXYpYS5nZXRGcm9tSWQocCx2KS5fYW5uSW5kaWNlcy5wdXNoKHQuX2luZGV4KTtpZihhLmNvZXJjZVBvc2l0aW9uKHQscCxpLHYsZywuNSksdSl7dmFyIG09ImEiK2cseT1hLmNvZXJjZVJlZihlLHQscCxtLCJwaXhlbCIsWyJwaXhlbCIsInBhcGVyIl0pOyJwaXhlbCIhPT15JiZ5IT09diYmKHk9dFttXT0icGl4ZWwiKTt2YXIgeD0icGl4ZWwiPT09eT9kW2hdOi40O2EuY29lcmNlUG9zaXRpb24odCxwLGkseSxtLHgpfWkoZysiYW5jaG9yIiksaShnKyJzaGlmdCIpfWlmKG4ubm9uZU9yQWxsKGUsdCxbIngiLCJ5Il0pLHUmJm4ubm9uZU9yQWxsKGUsdCxbImF4IiwiYXkiXSksYyl7dmFyIGI9aSgieGNsaWNrIiksXz1pKCJ5Y2xpY2siKTt0Ll94Y2xpY2s9dm9pZCAwPT09Yj90Lng6YS5jbGVhblBvc2l0aW9uKGIscCx0LnhyZWYpLHQuX3ljbGljaz12b2lkIDA9PT1fP3QueTphLmNsZWFuUG9zaXRpb24oXyxwLHQueXJlZil9fX10LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpKGUsdCx7bmFtZToiYW5ub3RhdGlvbnMiLGhhbmRsZUl0ZW1EZWZhdWx0czpzfSl9fSx7Ii4uLy4uL2xpYiI6MjAyLCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjI0MywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjI0OCwiLi9hdHRyaWJ1dGVzIjo2MCwiLi9jb21tb25fZGVmYXVsdHMiOjYzfV0sNjY6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiZDMiKSxhPWUoIi4uLy4uL3JlZ2lzdHJ5IiksaT1lKCIuLi8uLi9wbG90cy9wbG90cyIpLG89ZSgiLi4vLi4vbGliIiksbD1vLnN0clRyYW5zbGF0ZSxzPWUoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYz1lKCIuLi9jb2xvciIpLHU9ZSgiLi4vZHJhd2luZyIpLGY9ZSgiLi4vZngiKSxkPWUoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLHA9ZSgiLi4vLi4vbGliL3NldGN1cnNvciIpLGg9ZSgiLi4vZHJhZ2VsZW1lbnQiKSxnPWUoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS5hcnJheUVkaXRvcix2PWUoIi4vZHJhd19hcnJvd19oZWFkIik7ZnVuY3Rpb24gbShlLHQpe3ZhciByPWUuX2Z1bGxMYXlvdXQuYW5ub3RhdGlvbnNbdF18fHt9LG49cy5nZXRGcm9tSWQoZSxyLnhyZWYpLGE9cy5nZXRGcm9tSWQoZSxyLnlyZWYpO24mJm4uc2V0U2NhbGUoKSxhJiZhLnNldFNjYWxlKCkseChlLHIsdCwhMSxuLGEpfWZ1bmN0aW9uIHkoZSx0LHIsbixhKXt2YXIgaT1hW3JdLG89YVtyKyJyZWYiXSxsPS0xIT09ci5pbmRleE9mKCJ5IiksYz0iZG9tYWluIj09PXMuZ2V0UmVmVHlwZShvKSx1PWw/bi5oOm4udztyZXR1cm4gZT9jP2krKGw/LXQ6dCkvZS5fbGVuZ3RoOmUucDJyKGUucjJwKGkpK3QpOmkrKGw/LXQ6dCkvdX1mdW5jdGlvbiB4KGUsdCxyLGksbSx4KXt2YXIgYixfLHc9ZS5fZnVsbExheW91dCxUPWUuX2Z1bGxMYXlvdXQuX3NpemUsaz1lLl9jb250ZXh0LmVkaXRzO2k/KGI9ImFubm90YXRpb24tIitpLF89aSsiLmFubm90YXRpb25zIik6KGI9ImFubm90YXRpb24iLF89ImFubm90YXRpb25zIik7dmFyIE09ZyhlLmxheW91dCxfLHQpLEE9TS5tb2RpZnlCYXNlLEw9TS5tb2RpZnlJdGVtLFM9TS5nZXRVcGRhdGVPYmo7dy5faW5mb2xheWVyLnNlbGVjdEFsbCgiLiIrYisnW2RhdGEtaW5kZXg9IicrcisnIl0nKS5yZW1vdmUoKTt2YXIgQz0iY2xpcCIrdy5fdWlkKyJfYW5uIityO2lmKHQuX2lucHV0JiYhMSE9PXQudmlzaWJsZSl7dmFyIE89e3g6e30seTp7fX0sRD0rdC50ZXh0YW5nbGV8fDAsUD13Ll9pbmZvbGF5ZXIuYXBwZW5kKCJnIikuY2xhc3NlZChiLCEwKS5hdHRyKCJkYXRhLWluZGV4IixTdHJpbmcocikpLnN0eWxlKCJvcGFjaXR5Iix0Lm9wYWNpdHkpLHo9UC5hcHBlbmQoImciKS5jbGFzc2VkKCJhbm5vdGF0aW9uLXRleHQtZyIsITApLFI9a1t0LnNob3dhcnJvdz8iYW5ub3RhdGlvblRhaWwiOiJhbm5vdGF0aW9uUG9zaXRpb24iXSxFPXQuY2FwdHVyZWV2ZW50c3x8ay5hbm5vdGF0aW9uVGV4dHx8UixJPXouYXBwZW5kKCJnIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIixFPyJhbGwiOm51bGwpLmNhbGwocCwicG9pbnRlciIpLm9uKCJjbGljayIsKGZ1bmN0aW9uKCl7ZS5fZHJhZ2dpbmc9ITEsZS5lbWl0KCJwbG90bHlfY2xpY2thbm5vdGF0aW9uIixaKG4uZXZlbnQpKX0pKTt0LmhvdmVydGV4dCYmSS5vbigibW91c2VvdmVyIiwoZnVuY3Rpb24oKXt2YXIgcj10LmhvdmVybGFiZWwsbj1yLmZvbnQsYT10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtmLmxvbmVIb3Zlcih7eDA6YS5sZWZ0LWkubGVmdCx4MTphLnJpZ2h0LWkubGVmdCx5OihhLnRvcCthLmJvdHRvbSkvMi1pLnRvcCx0ZXh0OnQuaG92ZXJ0ZXh0LGNvbG9yOnIuYmdjb2xvcixib3JkZXJDb2xvcjpyLmJvcmRlcmNvbG9yLGZvbnRGYW1pbHk6bi5mYW1pbHksZm9udFNpemU6bi5zaXplLGZvbnRDb2xvcjpuLmNvbG9yfSx7Y29udGFpbmVyOncuX2hvdmVybGF5ZXIubm9kZSgpLG91dGVyQ29udGFpbmVyOncuX3BhcGVyLm5vZGUoKSxnZDplfSl9KSkub24oIm1vdXNlb3V0IiwoZnVuY3Rpb24oKXtmLmxvbmVVbmhvdmVyKHcuX2hvdmVybGF5ZXIubm9kZSgpKX0pKTt2YXIgRj10LmJvcmRlcndpZHRoLE49dC5ib3JkZXJwYWQsSD1GK04saj1JLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwiYmciKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixGKyJweCIpLmNhbGwoYy5zdHJva2UsdC5ib3JkZXJjb2xvcikuY2FsbChjLmZpbGwsdC5iZ2NvbG9yKSxCPXQud2lkdGh8fHQuaGVpZ2h0LFY9dy5fdG9wY2xpcHMuc2VsZWN0QWxsKCIjIitDKS5kYXRhKEI/WzBdOltdKTtWLmVudGVyKCkuYXBwZW5kKCJjbGlwUGF0aCIpLmNsYXNzZWQoImFubmNsaXAiLCEwKS5hdHRyKCJpZCIsQykuYXBwZW5kKCJyZWN0IiksVi5leGl0KCkucmVtb3ZlKCk7dmFyIFU9dC5mb250LHE9dy5fbWV0YT9vLnRlbXBsYXRlU3RyaW5nKHQudGV4dCx3Ll9tZXRhKTp0LnRleHQsRz1JLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoImFubm90YXRpb24tdGV4dCIsITApLnRleHQocSk7ay5hbm5vdGF0aW9uVGV4dD9HLmNhbGwoZC5tYWtlRWRpdGFibGUse2RlbGVnYXRlOkksZ2Q6ZX0pLmNhbGwoWSkub24oImVkaXQiLChmdW5jdGlvbihyKXt0LnRleHQ9cix0aGlzLmNhbGwoWSksTCgidGV4dCIsciksbSYmbS5hdXRvcmFuZ2UmJkEobS5fbmFtZSsiLmF1dG9yYW5nZSIsITApLHgmJnguYXV0b3JhbmdlJiZBKHguX25hbWUrIi5hdXRvcmFuZ2UiLCEwKSxhLmNhbGwoIl9ndWlSZWxheW91dCIsZSxTKCkpfSkpOkcuY2FsbChZKX1lbHNlIG4uc2VsZWN0QWxsKCIjIitDKS5yZW1vdmUoKTtmdW5jdGlvbiBaKGUpe3ZhciBuPXtpbmRleDpyLGFubm90YXRpb246dC5faW5wdXQsZnVsbEFubm90YXRpb246dCxldmVudDplfTtyZXR1cm4gaSYmKG4uc3VicGxvdElkPWkpLG59ZnVuY3Rpb24gWShyKXtyZXR1cm4gci5jYWxsKHUuZm9udCxVKS5hdHRyKHsidGV4dC1hbmNob3IiOntsZWZ0OiJzdGFydCIscmlnaHQ6ImVuZCJ9W3QuYWxpZ25dfHwibWlkZGxlIn0pLGQuY29udmVydFRvVHNwYW5zKHIsZSxYKSxyfWZ1bmN0aW9uIFgoKXt2YXIgcj1HLnNlbGVjdEFsbCgiYSIpOzE9PT1yLnNpemUoKSYmci50ZXh0KCk9PT1HLnRleHQoKSYmSS5pbnNlcnQoImEiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKHsieGxpbms6eGxpbms6aHJlZiI6ci5hdHRyKCJ4bGluazpocmVmIiksInhsaW5rOnhsaW5rOnNob3ciOnIuYXR0cigieGxpbms6c2hvdyIpfSkuc3R5bGUoe2N1cnNvcjoicG9pbnRlciJ9KS5ub2RlKCkuYXBwZW5kQ2hpbGQoai5ub2RlKCkpO3ZhciBuPUkuc2VsZWN0KCIuYW5ub3RhdGlvbi10ZXh0LW1hdGgtZ3JvdXAiKSxmPSFuLmVtcHR5KCksZz11LmJCb3goKGY/bjpHKS5ub2RlKCkpLGI9Zy53aWR0aCxfPWcuaGVpZ2h0LE09dC53aWR0aHx8YixFPXQuaGVpZ2h0fHxfLE49TWF0aC5yb3VuZChNKzIqSCksVT1NYXRoLnJvdW5kKEUrMipIKTtmdW5jdGlvbiBxKGUsdCl7cmV0dXJuImF1dG8iPT09dCYmKHQ9ZTwxLzM/ImxlZnQiOmU+Mi8zPyJyaWdodCI6ImNlbnRlciIpLHtjZW50ZXI6MCxtaWRkbGU6MCxsZWZ0Oi41LGJvdHRvbTotLjUscmlnaHQ6LS41LHRvcDouNX1bdF19Zm9yKHZhciBZPSExLFg9WyJ4IiwieSJdLFc9MDtXPFgubGVuZ3RoO1crKyl7dmFyIFEsSiwkLEssZWUsdGU9WFtXXSxyZT10W3RlKyJyZWYiXXx8dGUsbmU9dFsiYSIrdGUrInJlZiJdLGFlPXt4Om0seTp4fVt0ZV0saWU9KEQrKCJ4Ij09PXRlPzA6LTkwKSkqTWF0aC5QSS8xODAsb2U9TipNYXRoLmNvcyhpZSksbGU9VSpNYXRoLnNpbihpZSksc2U9TWF0aC5hYnMob2UpK01hdGguYWJzKGxlKSxjZT10W3RlKyJhbmNob3IiXSx1ZT10W3RlKyJzaGlmdCJdKigieCI9PT10ZT8xOi0xKSxmZT1PW3RlXSxkZT1zLmdldFJlZlR5cGUocmUpO2lmKGFlJiYiZG9tYWluIiE9PWRlKXt2YXIgcGU9YWUucjJmcmFjdGlvbih0W3RlXSk7KHBlPDB8fHBlPjEpJiYobmU9PT1yZT8oKHBlPWFlLnIyZnJhY3Rpb24odFsiYSIrdGVdKSk8MHx8cGU+MSkmJihZPSEwKTpZPSEwKSxRPWFlLl9vZmZzZXQrYWUucjJwKHRbdGVdKSxLPS41fWVsc2V7dmFyIGhlPSJkb21haW4iPT09ZGU7IngiPT09dGU/KCQ9dFt0ZV0sUT1oZT9hZS5fb2Zmc2V0K2FlLl9sZW5ndGgqJDpRPVQubCtULncqJCk6KCQ9MS10W3RlXSxRPWhlP2FlLl9vZmZzZXQrYWUuX2xlbmd0aCokOlE9VC50K1QuaCokKSxLPXQuc2hvd2Fycm93Py41OiR9aWYodC5zaG93YXJyb3cpe2ZlLmhlYWQ9UTt2YXIgZ2U9dFsiYSIrdGVdO2lmKGVlPW9lKnEoLjUsdC54YW5jaG9yKS1sZSpxKC41LHQueWFuY2hvciksbmU9PT1yZSl7dmFyIHZlPXMuZ2V0UmVmVHlwZShuZSk7ImRvbWFpbiI9PT12ZT8oInkiPT09dGUmJihnZT0xLWdlKSxmZS50YWlsPWFlLl9vZmZzZXQrYWUuX2xlbmd0aCpnZSk6InBhcGVyIj09PXZlPyJ5Ij09PXRlPyhnZT0xLWdlLGZlLnRhaWw9VC50K1QuaCpnZSk6ZmUudGFpbD1ULmwrVC53KmdlOmZlLnRhaWw9YWUuX29mZnNldCthZS5yMnAoZ2UpLEo9ZWV9ZWxzZSBmZS50YWlsPVErZ2UsSj1lZStnZTtmZS50ZXh0PWZlLnRhaWwrZWU7dmFyIG1lPXdbIngiPT09dGU/IndpZHRoIjoiaGVpZ2h0Il07aWYoInBhcGVyIj09PXJlJiYoZmUuaGVhZD1vLmNvbnN0cmFpbihmZS5oZWFkLDEsbWUtMSkpLCJwaXhlbCI9PT1uZSl7dmFyIHllPS1NYXRoLm1heChmZS50YWlsLTMsZmUudGV4dCkseGU9TWF0aC5taW4oZmUudGFpbCszLGZlLnRleHQpLW1lO3llPjA/KGZlLnRhaWwrPXllLGZlLnRleHQrPXllKTp4ZT4wJiYoZmUudGFpbC09eGUsZmUudGV4dC09eGUpfWZlLnRhaWwrPXVlLGZlLmhlYWQrPXVlfWVsc2UgSj1lZT1zZSpxKEssY2UpLGZlLnRleHQ9UStlZTtmZS50ZXh0Kz11ZSxlZSs9dWUsSis9dWUsdFsiXyIrdGUrInBhZHBsdXMiXT1zZS8yK0osdFsiXyIrdGUrInBhZG1pbnVzIl09c2UvMi1KLHRbIl8iK3RlKyJzaXplIl09c2UsdFsiXyIrdGUrInNoaWZ0Il09ZWV9aWYoWSlJLnJlbW92ZSgpO2Vsc2V7dmFyIGJlPTAsX2U9MDtpZigibGVmdCIhPT10LmFsaWduJiYoYmU9KE0tYikqKCJjZW50ZXIiPT09dC5hbGlnbj8uNToxKSksInRvcCIhPT10LnZhbGlnbiYmKF9lPShFLV8pKigibWlkZGxlIj09PXQudmFsaWduPy41OjEpKSxmKW4uc2VsZWN0KCJzdmciKS5hdHRyKHt4OkgrYmUtMSx5OkgrX2V9KS5jYWxsKHUuc2V0Q2xpcFVybCxCP0M6bnVsbCxlKTtlbHNle3ZhciB3ZT1IK19lLWcudG9wLFRlPUgrYmUtZy5sZWZ0O0cuY2FsbChkLnBvc2l0aW9uVGV4dCxUZSx3ZSkuY2FsbCh1LnNldENsaXBVcmwsQj9DOm51bGwsZSl9Vi5zZWxlY3QoInJlY3QiKS5jYWxsKHUuc2V0UmVjdCxILEgsTSxFKSxqLmNhbGwodS5zZXRSZWN0LEYvMixGLzIsTi1GLFUtRiksSS5jYWxsKHUuc2V0VHJhbnNsYXRlLE1hdGgucm91bmQoTy54LnRleHQtTi8yKSxNYXRoLnJvdW5kKE8ueS50ZXh0LVUvMikpLHouYXR0cih7dHJhbnNmb3JtOiJyb3RhdGUoIitEKyIsIitPLngudGV4dCsiLCIrTy55LnRleHQrIikifSk7dmFyIGtlLE1lPWZ1bmN0aW9uKHIsbil7UC5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uLWFycm93LWciKS5yZW1vdmUoKTt2YXIgcz1PLnguaGVhZCxmPU8ueS5oZWFkLGQ9Ty54LnRhaWwrcixwPU8ueS50YWlsK24sZz1PLngudGV4dCtyLGI9Ty55LnRleHQrbixfPW8ucm90YXRpb25YWU1hdHJpeChELGcsYiksdz1vLmFwcGx5MkRUcmFuc2Zvcm0oXyksTT1vLmFwcGx5MkRUcmFuc2Zvcm0yKF8pLEM9K2ouYXR0cigid2lkdGgiKSxSPStqLmF0dHIoImhlaWdodCIpLEU9Zy0uNSpDLEY9RStDLE49Yi0uNSpSLEg9TitSLEI9W1tFLE4sRSxIXSxbRSxILEYsSF0sW0YsSCxGLE5dLFtGLE4sRSxOXV0ubWFwKE0pO2lmKCFCLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZV4hIW8uc2VnbWVudHNJbnRlcnNlY3QocyxmLHMrMWU2LGYrMWU2LHRbMF0sdFsxXSx0WzJdLHRbM10pfSksITEpKXtCLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PW8uc2VnbWVudHNJbnRlcnNlY3QoZCxwLHMsZixlWzBdLGVbMV0sZVsyXSxlWzNdKTt0JiYoZD10LngscD10LnkpfSkpO3ZhciBWPXQuYXJyb3d3aWR0aCxVPXQuYXJyb3djb2xvcixxPXQuYXJyb3dzaWRlLEc9UC5hcHBlbmQoImciKS5zdHlsZSh7b3BhY2l0eTpjLm9wYWNpdHkoVSl9KS5jbGFzc2VkKCJhbm5vdGF0aW9uLWFycm93LWciLCEwKSxaPUcuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0iK2QrIiwiK3ArIkwiK3MrIiwiK2YpLnN0eWxlKCJzdHJva2Utd2lkdGgiLFYrInB4IikuY2FsbChjLnN0cm9rZSxjLnJnYihVKSk7aWYodihaLHEsdCksay5hbm5vdGF0aW9uUG9zaXRpb24mJloubm9kZSgpLnBhcmVudE5vZGUmJiFpKXt2YXIgWT1zLFg9ZjtpZih0LnN0YW5kb2ZmKXt2YXIgVz1NYXRoLnNxcnQoTWF0aC5wb3cocy1kLDIpK01hdGgucG93KGYtcCwyKSk7WSs9dC5zdGFuZG9mZiooZC1zKS9XLFgrPXQuc3RhbmRvZmYqKHAtZikvV312YXIgUSxKLCQ9Ry5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJhbm5vdGF0aW9uLWFycm93IiwhMCkuY2xhc3NlZCgiYW5uZHJhZyIsITApLmNsYXNzZWQoImN1cnNvci1tb3ZlIiwhMCkuYXR0cih7ZDoiTTMsM0gtM1YtM0gzWk0wLDBMIisoZC1ZKSsiLCIrKHAtWCksdHJhbnNmb3JtOmwoWSxYKX0pLnN0eWxlKCJzdHJva2Utd2lkdGgiLFYrNisicHgiKS5jYWxsKGMuc3Ryb2tlLCJyZ2JhKDAsMCwwLDApIikuY2FsbChjLmZpbGwsInJnYmEoMCwwLDAsMCkiKTtoLmluaXQoe2VsZW1lbnQ6JC5ub2RlKCksZ2Q6ZSxwcmVwRm46ZnVuY3Rpb24oKXt2YXIgZT11LmdldFRyYW5zbGF0ZShJKTtRPWUueCxKPWUueSxtJiZtLmF1dG9yYW5nZSYmQShtLl9uYW1lKyIuYXV0b3JhbmdlIiwhMCkseCYmeC5hdXRvcmFuZ2UmJkEoeC5fbmFtZSsiLmF1dG9yYW5nZSIsITApfSxtb3ZlRm46ZnVuY3Rpb24oZSxyKXt2YXIgbj13KFEsSiksYT1uWzBdK2UsaT1uWzFdK3I7SS5jYWxsKHUuc2V0VHJhbnNsYXRlLGEsaSksTCgieCIseShtLGUsIngiLFQsdCkpLEwoInkiLHkoeCxyLCJ5IixULHQpKSx0LmF4cmVmPT09dC54cmVmJiZMKCJheCIseShtLGUsImF4IixULHQpKSx0LmF5cmVmPT09dC55cmVmJiZMKCJheSIseSh4LHIsImF5IixULHQpKSxHLmF0dHIoInRyYW5zZm9ybSIsbChlLHIpKSx6LmF0dHIoe3RyYW5zZm9ybToicm90YXRlKCIrRCsiLCIrYSsiLCIraSsiKSJ9KX0sZG9uZUZuOmZ1bmN0aW9uKCl7YS5jYWxsKCJfZ3VpUmVsYXlvdXQiLGUsUygpKTt2YXIgdD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuanMtbm90ZXMtYm94LXBhbmVsIik7dCYmdC5yZWRyYXcodC5zZWxlY3RlZE9iail9fSl9fX07aWYodC5zaG93YXJyb3cmJk1lKDAsMCksUiloLmluaXQoe2VsZW1lbnQ6SS5ub2RlKCksZ2Q6ZSxwcmVwRm46ZnVuY3Rpb24oKXtrZT16LmF0dHIoInRyYW5zZm9ybSIpfSxtb3ZlRm46ZnVuY3Rpb24oZSxyKXt2YXIgbj0icG9pbnRlciI7aWYodC5zaG93YXJyb3cpdC5heHJlZj09PXQueHJlZj9MKCJheCIseShtLGUsImF4IixULHQpKTpMKCJheCIsdC5heCtlKSx0LmF5cmVmPT09dC55cmVmP0woImF5Iix5KHgsciwiYXkiLFQudyx0KSk6TCgiYXkiLHQuYXkrciksTWUoZSxyKTtlbHNle2lmKGkpcmV0dXJuO3ZhciBhLG87aWYobSlhPXkobSxlLCJ4IixULHQpO2Vsc2V7dmFyIHM9dC5feHNpemUvVC53LGM9dC54Kyh0Ll94c2hpZnQtdC54c2hpZnQpL1Qudy1zLzI7YT1oLmFsaWduKGMrZS9ULncscywwLDEsdC54YW5jaG9yKX1pZih4KW89eSh4LHIsInkiLFQsdCk7ZWxzZXt2YXIgdT10Ll95c2l6ZS9ULmgsZj10LnktKHQuX3lzaGlmdCt0LnlzaGlmdCkvVC5oLXUvMjtvPWguYWxpZ24oZi1yL1QuaCx1LDAsMSx0LnlhbmNob3IpfUwoIngiLGEpLEwoInkiLG8pLG0mJnh8fChuPWguZ2V0Q3Vyc29yKG0/LjU6YSx4Py41Om8sdC54YW5jaG9yLHQueWFuY2hvcikpfXouYXR0cih7dHJhbnNmb3JtOmwoZSxyKStrZX0pLHAoSSxuKX0sY2xpY2tGbjpmdW5jdGlvbihyLG4pe3QuY2FwdHVyZWV2ZW50cyYmZS5lbWl0KCJwbG90bHlfY2xpY2thbm5vdGF0aW9uIixaKG4pKX0sZG9uZUZuOmZ1bmN0aW9uKCl7cChJKSxhLmNhbGwoIl9ndWlSZWxheW91dCIsZSxTKCkpO3ZhciB0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5qcy1ub3Rlcy1ib3gtcGFuZWwiKTt0JiZ0LnJlZHJhdyh0LnNlbGVjdGVkT2JqKX19KX19fXQuZXhwb3J0cz17ZHJhdzpmdW5jdGlvbihlKXt2YXIgdD1lLl9mdWxsTGF5b3V0O3QuX2luZm9sYXllci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uIikucmVtb3ZlKCk7Zm9yKHZhciByPTA7cjx0LmFubm90YXRpb25zLmxlbmd0aDtyKyspdC5hbm5vdGF0aW9uc1tyXS52aXNpYmxlJiZtKGUscik7cmV0dXJuIGkucHJldmlvdXNQcm9taXNlcyhlKX0sZHJhd09uZTptLGRyYXdSYXc6eH19LHsiLi4vLi4vbGliIjoyMDIsIi4uLy4uL2xpYi9zZXRjdXJzb3IiOjIyMiwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjoyMjQsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjIzNywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjI0OCwiLi4vLi4vcGxvdHMvcGxvdHMiOjI4MiwiLi4vLi4vcmVnaXN0cnkiOjI5MCwiLi4vY29sb3IiOjc1LCIuLi9kcmFnZWxlbWVudCI6OTQsIi4uL2RyYXdpbmciOjk3LCIuLi9meCI6MTE1LCIuL2RyYXdfYXJyb3dfaGVhZCI6NjcsZDM6OX1dLDY3OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoImQzIiksYT1lKCIuLi9jb2xvciIpLGk9ZSgiLi9hcnJvd19wYXRocyIpLG89ZSgiLi4vLi4vbGliIiksbD1vLnN0clNjYWxlLHM9by5zdHJSb3RhdGUsYz1vLnN0clRyYW5zbGF0ZTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBvLHUsZixkLHA9ZS5ub2RlKCksaD1pW3IuYXJyb3doZWFkfHwwXSxnPWlbci5zdGFydGFycm93aGVhZHx8MF0sdj0oci5hcnJvd3dpZHRofHwxKSooci5hcnJvd3NpemV8fDEpLG09KHIuYXJyb3d3aWR0aHx8MSkqKHIuc3RhcnRhcnJvd3NpemV8fDEpLHk9dC5pbmRleE9mKCJzdGFydCIpPj0wLHg9dC5pbmRleE9mKCJlbmQiKT49MCxiPWguYmFja29mZip2K3Iuc3RhbmRvZmYsXz1nLmJhY2tvZmYqbStyLnN0YXJ0c3RhbmRvZmY7aWYoImxpbmUiPT09cC5ub2RlTmFtZSl7bz17eDorZS5hdHRyKCJ4MSIpLHk6K2UuYXR0cigieTEiKX0sdT17eDorZS5hdHRyKCJ4MiIpLHk6K2UuYXR0cigieTIiKX07dmFyIHc9by54LXUueCxUPW8ueS11Lnk7aWYoZD0oZj1NYXRoLmF0YW4yKFQsdykpK01hdGguUEksYiYmXyYmYitfPk1hdGguc3FydCh3KncrVCpUKSlyZXR1cm4gdm9pZCBSKCk7aWYoYil7aWYoYipiPncqdytUKlQpcmV0dXJuIHZvaWQgUigpO3ZhciBrPWIqTWF0aC5jb3MoZiksTT1iKk1hdGguc2luKGYpO3UueCs9ayx1LnkrPU0sZS5hdHRyKHt4Mjp1LngseTI6dS55fSl9aWYoXyl7aWYoXypfPncqdytUKlQpcmV0dXJuIHZvaWQgUigpO3ZhciBBPV8qTWF0aC5jb3MoZiksTD1fKk1hdGguc2luKGYpO28ueC09QSxvLnktPUwsZS5hdHRyKHt4MTpvLngseTE6by55fSl9fWVsc2UgaWYoInBhdGgiPT09cC5ub2RlTmFtZSl7dmFyIFM9cC5nZXRUb3RhbExlbmd0aCgpLEM9IiI7aWYoUzxiK18pcmV0dXJuIHZvaWQgUigpO3ZhciBPPXAuZ2V0UG9pbnRBdExlbmd0aCgwKSxEPXAuZ2V0UG9pbnRBdExlbmd0aCguMSk7Zj1NYXRoLmF0YW4yKE8ueS1ELnksTy54LUQueCksbz1wLmdldFBvaW50QXRMZW5ndGgoTWF0aC5taW4oXyxTKSksQz0iMHB4LCIrXysicHgsIjt2YXIgUD1wLmdldFBvaW50QXRMZW5ndGgoUyksej1wLmdldFBvaW50QXRMZW5ndGgoUy0uMSk7ZD1NYXRoLmF0YW4yKFAueS16LnksUC54LXoueCksdT1wLmdldFBvaW50QXRMZW5ndGgoTWF0aC5tYXgoMCxTLWIpKSxDKz1TLShDP18rYjpiKSsicHgsIitTKyJweCIsZS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsQyl9ZnVuY3Rpb24gUigpe2Uuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIwcHgsMTAwcHgiKX1mdW5jdGlvbiBFKHQsaSxvLHUpe3QucGF0aCYmKHQubm9Sb3RhdGUmJihvPTApLG4uc2VsZWN0KHAucGFyZW50Tm9kZSkuYXBwZW5kKCJwYXRoIikuYXR0cih7Y2xhc3M6ZS5hdHRyKCJjbGFzcyIpLGQ6dC5wYXRoLHRyYW5zZm9ybTpjKGkueCxpLnkpK3MoMTgwKm8vTWF0aC5QSSkrbCh1KX0pLnN0eWxlKHtmaWxsOmEucmdiKHIuYXJyb3djb2xvciksInN0cm9rZS13aWR0aCI6MH0pKX15JiZFKGcsbyxmLG0pLHgmJkUoaCx1LGQsdil9fSx7Ii4uLy4uL2xpYiI6MjAyLCIuLi9jb2xvciI6NzUsIi4vYXJyb3dfcGF0aHMiOjU5LGQzOjl9XSw2ODpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuL2RyYXciKSxhPWUoIi4vY2xpY2siKTt0LmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToiYW5ub3RhdGlvbnMiLGxheW91dEF0dHJpYnV0ZXM6ZSgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6ZSgiLi9kZWZhdWx0cyIpLGluY2x1ZGVCYXNlUGxvdDplKCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaW5jbHVkZV9jb21wb25lbnRzIikoImFubm90YXRpb25zIiksY2FsY0F1dG9yYW5nZTplKCIuL2NhbGNfYXV0b3JhbmdlIiksZHJhdzpuLmRyYXcsZHJhd09uZTpuLmRyYXdPbmUsZHJhd1JhdzpuLmRyYXdSYXcsaGFzQ2xpY2tUb1Nob3c6YS5oYXNDbGlja1RvU2hvdyxvbkNsaWNrOmEub25DbGljayxjb252ZXJ0Q29vcmRzOmUoIi4vY29udmVydF9jb29yZHMiKX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2luY2x1ZGVfY29tcG9uZW50cyI6MjYwLCIuL2F0dHJpYnV0ZXMiOjYwLCIuL2NhbGNfYXV0b3JhbmdlIjo2MSwiLi9jbGljayI6NjIsIi4vY29udmVydF9jb29yZHMiOjY0LCIuL2RlZmF1bHRzIjo2NSwiLi9kcmF3Ijo2Nn1dLDY5OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uL2Fubm90YXRpb25zL2F0dHJpYnV0ZXMiKSxhPWUoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxpPWUoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheTt0LmV4cG9ydHM9YShpKCJhbm5vdGF0aW9uIix7dmlzaWJsZTpuLnZpc2libGUseDp7dmFsVHlwZToiYW55In0seTp7dmFsVHlwZToiYW55In0sejp7dmFsVHlwZToiYW55In0sYXg6e3ZhbFR5cGU6Im51bWJlciJ9LGF5Ont2YWxUeXBlOiJudW1iZXIifSx4YW5jaG9yOm4ueGFuY2hvcix4c2hpZnQ6bi54c2hpZnQseWFuY2hvcjpuLnlhbmNob3IseXNoaWZ0Om4ueXNoaWZ0LHRleHQ6bi50ZXh0LHRleHRhbmdsZTpuLnRleHRhbmdsZSxmb250Om4uZm9udCx3aWR0aDpuLndpZHRoLGhlaWdodDpuLmhlaWdodCxvcGFjaXR5Om4ub3BhY2l0eSxhbGlnbjpuLmFsaWduLHZhbGlnbjpuLnZhbGlnbixiZ2NvbG9yOm4uYmdjb2xvcixib3JkZXJjb2xvcjpuLmJvcmRlcmNvbG9yLGJvcmRlcnBhZDpuLmJvcmRlcnBhZCxib3JkZXJ3aWR0aDpuLmJvcmRlcndpZHRoLHNob3dhcnJvdzpuLnNob3dhcnJvdyxhcnJvd2NvbG9yOm4uYXJyb3djb2xvcixhcnJvd2hlYWQ6bi5hcnJvd2hlYWQsc3RhcnRhcnJvd2hlYWQ6bi5zdGFydGFycm93aGVhZCxhcnJvd3NpZGU6bi5hcnJvd3NpZGUsYXJyb3dzaXplOm4uYXJyb3dzaXplLHN0YXJ0YXJyb3dzaXplOm4uc3RhcnRhcnJvd3NpemUsYXJyb3d3aWR0aDpuLmFycm93d2lkdGgsc3RhbmRvZmY6bi5zdGFuZG9mZixzdGFydHN0YW5kb2ZmOm4uc3RhcnRzdGFuZG9mZixob3ZlcnRleHQ6bi5ob3ZlcnRleHQsaG92ZXJsYWJlbDpuLmhvdmVybGFiZWwsY2FwdHVyZWV2ZW50czpuLmNhcHR1cmVldmVudHN9KSwiY2FsYyIsImZyb20tcm9vdCIpfSx7Ii4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjIzMCwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6MjM3LCIuLi9hbm5vdGF0aW9ucy9hdHRyaWJ1dGVzIjo2MH1dLDcwOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2xpYiIpLGE9ZSgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKTtmdW5jdGlvbiBpKGUsdCl7dmFyIHI9dC5mdWxsU2NlbmVMYXlvdXQuZG9tYWluLGk9dC5mdWxsTGF5b3V0Ll9zaXplLG89e3BkYXRhOm51bGwsdHlwZToibGluZWFyIixhdXRvcmFuZ2U6ITEscmFuZ2U6Wy0xLzAsMS8wXX07ZS5feGE9e30sbi5leHRlbmRGbGF0KGUuX3hhLG8pLGEuc2V0Q29udmVydChlLl94YSksZS5feGEuX29mZnNldD1pLmwrci54WzBdKmkudyxlLl94YS5sMnA9ZnVuY3Rpb24oKXtyZXR1cm4uNSooMStlLl9wZGF0YVswXS9lLl9wZGF0YVszXSkqaS53KihyLnhbMV0tci54WzBdKX0sZS5feWE9e30sbi5leHRlbmRGbGF0KGUuX3lhLG8pLGEuc2V0Q29udmVydChlLl95YSksZS5feWEuX29mZnNldD1pLnQrKDEtci55WzFdKSppLmgsZS5feWEubDJwPWZ1bmN0aW9uKCl7cmV0dXJuLjUqKDEtZS5fcGRhdGFbMV0vZS5fcGRhdGFbM10pKmkuaCooci55WzFdLXIueVswXSl9fXQuZXhwb3J0cz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5mdWxsU2NlbmVMYXlvdXQuYW5ub3RhdGlvbnMscj0wO3I8dC5sZW5ndGg7cisrKWkodFtyXSxlKTtlLmZ1bGxMYXlvdXQuX2luZm9sYXllci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uLSIrZS5pZCkucmVtb3ZlKCl9fSx7Ii4uLy4uL2xpYiI6MjAyLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6MjQ4fV0sNzE6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vbGliIiksYT1lKCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9ZSgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksbz1lKCIuLi9hbm5vdGF0aW9ucy9jb21tb25fZGVmYXVsdHMiKSxsPWUoIi4vYXR0cmlidXRlcyIpO2Z1bmN0aW9uIHMoZSx0LHIsaSl7ZnVuY3Rpb24gcyhyLGEpe3JldHVybiBuLmNvZXJjZShlLHQsbCxyLGEpfWZ1bmN0aW9uIGMoZSl7dmFyIG49ZSsiYXhpcyIsaT17X2Z1bGxMYXlvdXQ6e319O3JldHVybiBpLl9mdWxsTGF5b3V0W25dPXJbbl0sYS5jb2VyY2VQb3NpdGlvbih0LGkscyxlLGUsLjUpfXMoInZpc2libGUiKSYmKG8oZSx0LGkuZnVsbExheW91dCxzKSxjKCJ4IiksYygieSIpLGMoInoiKSxuLm5vbmVPckFsbChlLHQsWyJ4IiwieSIsInoiXSksdC54cmVmPSJ4Iix0LnlyZWY9InkiLHQuenJlZj0ieiIscygieGFuY2hvciIpLHMoInlhbmNob3IiKSxzKCJ4c2hpZnQiKSxzKCJ5c2hpZnQiKSx0LnNob3dhcnJvdyYmKHQuYXhyZWY9InBpeGVsIix0LmF5cmVmPSJwaXhlbCIscygiYXgiLC0xMCkscygiYXkiLC0zMCksbi5ub25lT3JBbGwoZSx0LFsiYXgiLCJheSJdKSkpfXQuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7aShlLHQse25hbWU6ImFubm90YXRpb25zIixoYW5kbGVJdGVtRGVmYXVsdHM6cyxmdWxsTGF5b3V0OnIuZnVsbExheW91dH0pfX0seyIuLi8uLi9saWIiOjIwMiwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjoyNDMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjoyNDgsIi4uL2Fubm90YXRpb25zL2NvbW1vbl9kZWZhdWx0cyI6NjMsIi4vYXR0cmlidXRlcyI6Njl9XSw3MjpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi9hbm5vdGF0aW9ucy9kcmF3IikuZHJhd1JhdyxhPWUoIi4uLy4uL3Bsb3RzL2dsM2QvcHJvamVjdCIpLGk9WyJ4IiwieSIsInoiXTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUuZnVsbFNjZW5lTGF5b3V0LHI9ZS5kYXRhU2NhbGUsbz10LmFubm90YXRpb25zLGw9MDtsPG8ubGVuZ3RoO2wrKyl7Zm9yKHZhciBzPW9bbF0sYz0hMSx1PTA7dTwzO3UrKyl7dmFyIGY9aVt1XSxkPXNbZl0scD10W2YrImF4aXMiXS5yMmZyYWN0aW9uKGQpO2lmKHA8MHx8cD4xKXtjPSEwO2JyZWFrfX1jP2UuZnVsbExheW91dC5faW5mb2xheWVyLnNlbGVjdCgiLmFubm90YXRpb24tIitlLmlkKydbZGF0YS1pbmRleD0iJytsKyciXScpLnJlbW92ZSgpOihzLl9wZGF0YT1hKGUuZ2xwbG90LmNhbWVyYVBhcmFtcyxbdC54YXhpcy5yMmwocy54KSpyWzBdLHQueWF4aXMucjJsKHMueSkqclsxXSx0LnpheGlzLnIybChzLnopKnJbMl1dKSxuKGUuZ3JhcGhEaXYscyxsLGUuaWQscy5feGEscy5feWEpKX19fSx7Ii4uLy4uL3Bsb3RzL2dsM2QvcHJvamVjdCI6Mjc5LCIuLi9hbm5vdGF0aW9ucy9kcmF3Ijo2Nn1dLDczOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL3JlZ2lzdHJ5IiksYT1lKCIuLi8uLi9saWIiKTt0LmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToiYW5ub3RhdGlvbnMzZCIsc2NoZW1hOntzdWJwbG90czp7c2NlbmU6e2Fubm90YXRpb25zOmUoIi4vYXR0cmlidXRlcyIpfX19LGxheW91dEF0dHJpYnV0ZXM6ZSgiLi9hdHRyaWJ1dGVzIiksaGFuZGxlRGVmYXVsdHM6ZSgiLi9kZWZhdWx0cyIpLGluY2x1ZGVCYXNlUGxvdDpmdW5jdGlvbihlLHQpe3ZhciByPW4uc3VicGxvdHNSZWdpc3RyeS5nbDNkO2lmKCFyKXJldHVybjtmb3IodmFyIGk9ci5hdHRyUmVnZXgsbz1PYmplY3Qua2V5cyhlKSxsPTA7bDxvLmxlbmd0aDtsKyspe3ZhciBzPW9bbF07aS50ZXN0KHMpJiYoZVtzXS5hbm5vdGF0aW9uc3x8W10pLmxlbmd0aCYmKGEucHVzaFVuaXF1ZSh0Ll9iYXNlUGxvdE1vZHVsZXMsciksYS5wdXNoVW5pcXVlKHQuX3N1YnBsb3RzLmdsM2QscykpfX0sY29udmVydDplKCIuL2NvbnZlcnQiKSxkcmF3OmUoIi4vZHJhdyIpfX0seyIuLi8uLi9saWIiOjIwMiwiLi4vLi4vcmVnaXN0cnkiOjI5MCwiLi9hdHRyaWJ1dGVzIjo2OSwiLi9jb252ZXJ0Ijo3MCwiLi9kZWZhdWx0cyI6NzEsIi4vZHJhdyI6NzJ9XSw3NDpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtyLmRlZmF1bHRzPVsiIzFmNzdiNCIsIiNmZjdmMGUiLCIjMmNhMDJjIiwiI2Q2MjcyOCIsIiM5NDY3YmQiLCIjOGM1NjRiIiwiI2UzNzdjMiIsIiM3ZjdmN2YiLCIjYmNiZDIyIiwiIzE3YmVjZiJdLHIuZGVmYXVsdExpbmU9IiM0NDQiLHIubGlnaHRMaW5lPSIjZWVlIixyLmJhY2tncm91bmQ9IiNmZmYiLHIuYm9yZGVyTGluZT0iI0JFQzhEOSIsci5saWdodEZyYWN0aW9uPTFlMy8xMX0se31dLDc1OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoInRpbnljb2xvcjIiKSxhPWUoImZhc3QtaXNudW1lcmljIiksaT10LmV4cG9ydHM9e30sbz1lKCIuL2F0dHJpYnV0ZXMiKTtpLmRlZmF1bHRzPW8uZGVmYXVsdHM7dmFyIGw9aS5kZWZhdWx0TGluZT1vLmRlZmF1bHRMaW5lO2kubGlnaHRMaW5lPW8ubGlnaHRMaW5lO3ZhciBzPWkuYmFja2dyb3VuZD1vLmJhY2tncm91bmQ7ZnVuY3Rpb24gYyhlKXtpZihhKGUpfHwic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIGU7dmFyIHQ9ZS50cmltKCk7aWYoInJnYiIhPT10LnN1YnN0cigwLDMpKXJldHVybiBlO3ZhciByPXQubWF0Y2goL15yZ2JhP1xzKlwoKFteKCldKilcKSQvKTtpZighcilyZXR1cm4gZTt2YXIgbj1yWzFdLnRyaW0oKS5zcGxpdCgvXHMqW1xzLF1ccyovKSxpPSJhIj09PXQuY2hhckF0KDMpJiY0PT09bi5sZW5ndGg7aWYoIWkmJjMhPT1uLmxlbmd0aClyZXR1cm4gZTtmb3IodmFyIG89MDtvPG4ubGVuZ3RoO28rKyl7aWYoIW5bb10ubGVuZ3RoKXJldHVybiBlO2lmKG5bb109TnVtYmVyKG5bb10pLCEobltvXT49MCkpcmV0dXJuIGU7aWYoMz09PW8pbltvXT4xJiYobltvXT0xKTtlbHNlIGlmKG5bb10+PTEpcmV0dXJuIGV9dmFyIGw9TWF0aC5yb3VuZCgyNTUqblswXSkrIiwgIitNYXRoLnJvdW5kKDI1NSpuWzFdKSsiLCAiK01hdGgucm91bmQoMjU1Km5bMl0pO3JldHVybiBpPyJyZ2JhKCIrbCsiLCAiK25bM10rIikiOiJyZ2IoIitsKyIpIn1pLnRpbnlSR0I9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50b1JnYigpO3JldHVybiJyZ2IoIitNYXRoLnJvdW5kKHQucikrIiwgIitNYXRoLnJvdW5kKHQuZykrIiwgIitNYXRoLnJvdW5kKHQuYikrIikifSxpLnJnYj1mdW5jdGlvbihlKXtyZXR1cm4gaS50aW55UkdCKG4oZSkpfSxpLm9wYWNpdHk9ZnVuY3Rpb24oZSl7cmV0dXJuIGU/bihlKS5nZXRBbHBoYSgpOjB9LGkuYWRkT3BhY2l0eT1mdW5jdGlvbihlLHQpe3ZhciByPW4oZSkudG9SZ2IoKTtyZXR1cm4icmdiYSgiK01hdGgucm91bmQoci5yKSsiLCAiK01hdGgucm91bmQoci5nKSsiLCAiK01hdGgucm91bmQoci5iKSsiLCAiK3QrIikifSxpLmNvbWJpbmU9ZnVuY3Rpb24oZSx0KXt2YXIgcj1uKGUpLnRvUmdiKCk7aWYoMT09PXIuYSlyZXR1cm4gbihlKS50b1JnYlN0cmluZygpO3ZhciBhPW4odHx8cykudG9SZ2IoKSxpPTE9PT1hLmE/YTp7cjoyNTUqKDEtYS5hKSthLnIqYS5hLGc6MjU1KigxLWEuYSkrYS5nKmEuYSxiOjI1NSooMS1hLmEpK2EuYiphLmF9LG89e3I6aS5yKigxLXIuYSkrci5yKnIuYSxnOmkuZyooMS1yLmEpK3IuZypyLmEsYjppLmIqKDEtci5hKStyLmIqci5hfTtyZXR1cm4gbihvKS50b1JnYlN0cmluZygpfSxpLmNvbnRyYXN0PWZ1bmN0aW9uKGUsdCxyKXt2YXIgYT1uKGUpO3JldHVybiAxIT09YS5nZXRBbHBoYSgpJiYoYT1uKGkuY29tYmluZShlLHMpKSksKGEuaXNEYXJrKCk/dD9hLmxpZ2h0ZW4odCk6czpyP2EuZGFya2VuKHIpOmwpLnRvU3RyaW5nKCl9LGkuc3Ryb2tlPWZ1bmN0aW9uKGUsdCl7dmFyIHI9bih0KTtlLnN0eWxlKHtzdHJva2U6aS50aW55UkdCKHIpLCJzdHJva2Utb3BhY2l0eSI6ci5nZXRBbHBoYSgpfSl9LGkuZmlsbD1mdW5jdGlvbihlLHQpe3ZhciByPW4odCk7ZS5zdHlsZSh7ZmlsbDppLnRpbnlSR0IociksImZpbGwtb3BhY2l0eSI6ci5nZXRBbHBoYSgpfSl9LGkuY2xlYW49ZnVuY3Rpb24oZSl7aWYoZSYmIm9iamVjdCI9PXR5cGVvZiBlKXt2YXIgdCxyLG4sYSxvPU9iamVjdC5rZXlzKGUpO2Zvcih0PTA7dDxvLmxlbmd0aDt0KyspaWYoYT1lW249b1t0XV0sImNvbG9yIj09PW4uc3Vic3RyKG4ubGVuZ3RoLTUpKWlmKEFycmF5LmlzQXJyYXkoYSkpZm9yKHI9MDtyPGEubGVuZ3RoO3IrKylhW3JdPWMoYVtyXSk7ZWxzZSBlW25dPWMoYSk7ZWxzZSBpZigiY29sb3JzY2FsZSI9PT1uLnN1YnN0cihuLmxlbmd0aC0xMCkmJkFycmF5LmlzQXJyYXkoYSkpZm9yKHI9MDtyPGEubGVuZ3RoO3IrKylBcnJheS5pc0FycmF5KGFbcl0pJiYoYVtyXVsxXT1jKGFbcl1bMV0pKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoYSkpe3ZhciBsPWFbMF07aWYoIUFycmF5LmlzQXJyYXkobCkmJmwmJiJvYmplY3QiPT10eXBlb2YgbClmb3Iocj0wO3I8YS5sZW5ndGg7cisrKWkuY2xlYW4oYVtyXSl9ZWxzZSBhJiYib2JqZWN0Ij09dHlwZW9mIGEmJmkuY2xlYW4oYSl9fX0seyIuL2F0dHJpYnV0ZXMiOjc0LCJmYXN0LWlzbnVtZXJpYyI6MTEsdGlueWNvbG9yMjo1OH1dLDc2OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLGE9ZSgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksaT1lKCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxvPWUoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbDt0LmV4cG9ydHM9byh7dGhpY2tuZXNzbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZnJhY3Rpb24iLCJwaXhlbHMiXSxkZmx0OiJwaXhlbHMifSx0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDozMH0sbGVubW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZnJhY3Rpb24iLCJwaXhlbHMiXSxkZmx0OiJmcmFjdGlvbiJ9LGxlbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9LHg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLjAyLG1pbjotMixtYXg6M30seGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoibGVmdCJ9LHhwYWQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxMH0seTp7dmFsVHlwZToibnVtYmVyIixkZmx0Oi41LG1pbjotMixtYXg6M30seWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZGZsdDoibWlkZGxlIn0seXBhZDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEwfSxvdXRsaW5lY29sb3I6bi5saW5lY29sb3Isb3V0bGluZXdpZHRoOm4ubGluZXdpZHRoLGJvcmRlcmNvbG9yOm4ubGluZWNvbG9yLGJvcmRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MH0sYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMCwwLDAsMCkifSx0aWNrbW9kZTpuLnRpY2ttb2RlLG50aWNrczpuLm50aWNrcyx0aWNrMDpuLnRpY2swLGR0aWNrOm4uZHRpY2ssdGlja3ZhbHM6bi50aWNrdmFscyx0aWNrdGV4dDpuLnRpY2t0ZXh0LHRpY2tzOmkoe30sbi50aWNrcyx7ZGZsdDoiIn0pLHRpY2tsYWJlbHBvc2l0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJvdXRzaWRlIiwiaW5zaWRlIiwib3V0c2lkZSB0b3AiLCJpbnNpZGUgdG9wIiwib3V0c2lkZSBib3R0b20iLCJpbnNpZGUgYm90dG9tIl0sZGZsdDoib3V0c2lkZSJ9LHRpY2tsZW46bi50aWNrbGVuLHRpY2t3aWR0aDpuLnRpY2t3aWR0aCx0aWNrY29sb3I6bi50aWNrY29sb3Isc2hvd3RpY2tsYWJlbHM6bi5zaG93dGlja2xhYmVscyx0aWNrZm9udDphKHt9KSx0aWNrYW5nbGU6bi50aWNrYW5nbGUsdGlja2Zvcm1hdDpuLnRpY2tmb3JtYXQsdGlja2Zvcm1hdHN0b3BzOm4udGlja2Zvcm1hdHN0b3BzLHRpY2twcmVmaXg6bi50aWNrcHJlZml4LHNob3d0aWNrcHJlZml4Om4uc2hvd3RpY2twcmVmaXgsdGlja3N1ZmZpeDpuLnRpY2tzdWZmaXgsc2hvd3RpY2tzdWZmaXg6bi5zaG93dGlja3N1ZmZpeCxzZXBhcmF0ZXRob3VzYW5kczpuLnNlcGFyYXRldGhvdXNhbmRzLGV4cG9uZW50Zm9ybWF0Om4uZXhwb25lbnRmb3JtYXQsbWluZXhwb25lbnQ6bi5taW5leHBvbmVudCxzaG93ZXhwb25lbnQ6bi5zaG93ZXhwb25lbnQsdGl0bGU6e3RleHQ6e3ZhbFR5cGU6InN0cmluZyJ9LGZvbnQ6YSh7fSksc2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicmlnaHQiLCJ0b3AiLCJib3R0b20iXSxkZmx0OiJ0b3AifX0sX2RlcHJlY2F0ZWQ6e3RpdGxlOnt2YWxUeXBlOiJzdHJpbmcifSx0aXRsZWZvbnQ6YSh7fSksdGl0bGVzaWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJyaWdodCIsInRvcCIsImJvdHRvbSJdLGRmbHQ6InRvcCJ9fX0sImNvbG9yYmFycyIsImZyb20tcm9vdCIpfSx7Ii4uLy4uL2xpYi9leHRlbmQiOjE5NiwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6MjMwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiOjI2MiwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjoyNzZ9XSw3NzpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9e2NuOntjb2xvcmJhcjoiY29sb3JiYXIiLGNiYmc6ImNiYmciLGNiZmlsbDoiY2JmaWxsIixjYmZpbGxzOiJjYmZpbGxzIixjYmxpbmU6ImNibGluZSIsY2JsaW5lczoiY2JsaW5lcyIsY2JheGlzOiJjYmF4aXMiLGNidGl0bGV1bnNoaWZ0OiJjYnRpdGxldW5zaGlmdCIsY2J0aXRsZToiY2J0aXRsZSIsY2JvdXRsaW5lOiJjYm91dGxpbmUiLGNyaXNwOiJjcmlzcCIsanNQbGFjZWhvbGRlcjoianMtcGxhY2Vob2xkZXIifX19LHt9XSw3ODpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9saWIiKSxhPWUoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxpPWUoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzIiksbz1lKCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja19tYXJrX2RlZmF1bHRzIiksbD1lKCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0cyIpLHM9ZSgiLi9hdHRyaWJ1dGVzIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgYz1hLm5ld0NvbnRhaW5lcih0LCJjb2xvcmJhciIpLHU9ZS5jb2xvcmJhcnx8e307ZnVuY3Rpb24gZihlLHQpe3JldHVybiBuLmNvZXJjZSh1LGMscyxlLHQpfXZhciBkPWYoInRoaWNrbmVzc21vZGUiKTtmKCJ0aGlja25lc3MiLCJmcmFjdGlvbiI9PT1kPzMwLyhyLndpZHRoLXIubWFyZ2luLmwtci5tYXJnaW4ucik6MzApO3ZhciBwPWYoImxlbm1vZGUiKTtmKCJsZW4iLCJmcmFjdGlvbiI9PT1wPzE6ci5oZWlnaHQtci5tYXJnaW4udC1yLm1hcmdpbi5iKSxmKCJ4IiksZigieGFuY2hvciIpLGYoInhwYWQiKSxmKCJ5IiksZigieWFuY2hvciIpLGYoInlwYWQiKSxuLm5vbmVPckFsbCh1LGMsWyJ4IiwieSJdKSxmKCJvdXRsaW5lY29sb3IiKSxmKCJvdXRsaW5ld2lkdGgiKSxmKCJib3JkZXJjb2xvciIpLGYoImJvcmRlcndpZHRoIiksZigiYmdjb2xvciIpO3ZhciBoPWYoInRpY2tsYWJlbHBvc2l0aW9uIik7aSh1LGMsZiwibGluZWFyIik7dmFyIGc9e291dGVyVGlja3M6ITEsZm9udDpyLmZvbnR9Oy0xIT09aC5pbmRleE9mKCJpbnNpZGUiKSYmKGcuYmdDb2xvcj0iYmxhY2siKSxsKHUsYyxmLCJsaW5lYXIiLGcpLG8odSxjLGYsImxpbmVhciIsZyksZigidGl0bGUudGV4dCIsci5fZGZsdFRpdGxlLmNvbG9yYmFyKSxuLmNvZXJjZUZvbnQoZiwidGl0bGUuZm9udCIsci5mb250KSxmKCJ0aXRsZS5zaWRlIil9fSx7Ii4uLy4uL2xpYiI6MjAyLCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjoyMzcsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzIjoyNjksIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX21hcmtfZGVmYXVsdHMiOjI3MCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHMiOjI3MSwiLi9hdHRyaWJ1dGVzIjo3Nn1dLDc5OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoImQzIiksYT1lKCJ0aW55Y29sb3IyIiksaT1lKCIuLi8uLi9wbG90cy9wbG90cyIpLG89ZSgiLi4vLi4vcmVnaXN0cnkiKSxsPWUoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIikscz1lKCIuLi9kcmFnZWxlbWVudCIpLGM9ZSgiLi4vLi4vbGliIiksdT1jLnN0clRyYW5zbGF0ZSxmPWUoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGQ9ZSgiLi4vLi4vbGliL3NldGN1cnNvciIpLHA9ZSgiLi4vZHJhd2luZyIpLGg9ZSgiLi4vY29sb3IiKSxnPWUoIi4uL3RpdGxlcyIpLHY9ZSgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksbT1lKCIuLi9jb2xvcnNjYWxlL2hlbHBlcnMiKS5mbGlwU2NhbGUseT1lKCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19kZWZhdWx0cyIpLHg9ZSgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3Bvc2l0aW9uX2RlZmF1bHRzIiksYj1lKCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxfPWUoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKSx3PV8uTElORV9TUEFDSU5HLFQ9Xy5GUk9NX1RMLGs9Xy5GUk9NX0JSLE09ZSgiLi9jb25zdGFudHMiKS5jbjt0LmV4cG9ydHM9e2RyYXc6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fZnVsbExheW91dC5faW5mb2xheWVyLnNlbGVjdEFsbCgiZy4iK00uY29sb3JiYXIpLmRhdGEoZnVuY3Rpb24oZSl7dmFyIHQscixuLGEsaT1lLl9mdWxsTGF5b3V0LG89ZS5jYWxjZGF0YSxsPVtdO2Z1bmN0aW9uIHMoZSl7cmV0dXJuIGYoZSx7X2ZpbGxjb2xvcjpudWxsLF9saW5lOntjb2xvcjpudWxsLHdpZHRoOm51bGwsZGFzaDpudWxsfSxfbGV2ZWxzOntzdGFydDpudWxsLGVuZDpudWxsLHNpemU6bnVsbH0sX2ZpbGxsZXZlbHM6bnVsbCxfZmlsbGdyYWRpZW50Om51bGwsX3pyYW5nZTpudWxsfSl9ZnVuY3Rpb24gYygpeyJmdW5jdGlvbiI9PXR5cGVvZiBhLmNhbGM/YS5jYWxjKGUsbix0KToodC5fZmlsbGdyYWRpZW50PXIucmV2ZXJzZXNjYWxlP20oci5jb2xvcnNjYWxlKTpyLmNvbG9yc2NhbGUsdC5fenJhbmdlPVtyW2EubWluXSxyW2EubWF4XV0pfWZvcih2YXIgdT0wO3U8by5sZW5ndGg7dSsrKXt2YXIgZD1vW3VdLHA9KG49ZFswXS50cmFjZSkuX21vZHVsZS5jb2xvcmJhcjtpZighMD09PW4udmlzaWJsZSYmcClmb3IodmFyIGg9QXJyYXkuaXNBcnJheShwKSxnPWg/cDpbcF0sdj0wO3Y8Zy5sZW5ndGg7disrKXt2YXIgeT0oYT1nW3ZdKS5jb250YWluZXI7KHI9eT9uW3ldOm4pJiZyLnNob3dzY2FsZSYmKCh0PXMoci5jb2xvcmJhcikpLl9pZD0iY2IiK24udWlkKyhoJiZ5PyItIit5OiIiKSx0Ll90cmFjZUluZGV4PW4uaW5kZXgsdC5fcHJvcFByZWZpeD0oeT95KyIuIjoiIikrImNvbG9yYmFyLiIsdC5fbWV0YT1uLl9tZXRhLGMoKSxsLnB1c2godCkpfX1mb3IodmFyIHggaW4gaS5fY29sb3JBeGVzKWlmKChyPWlbeF0pLnNob3dzY2FsZSl7dmFyIGI9aS5fY29sb3JBeGVzW3hdOyh0PXMoci5jb2xvcmJhcikpLl9pZD0iY2IiK3gsdC5fcHJvcFByZWZpeD14KyIuY29sb3JiYXIuIix0Ll9tZXRhPWkuX21ldGEsYT17bWluOiJjbWluIixtYXg6ImNtYXgifSwiaGVhdG1hcCIhPT1iWzBdJiYobj1iWzFdLGEuY2FsYz1uLl9tb2R1bGUuY29sb3JiYXIuY2FsYyksYygpLGwucHVzaCh0KX1yZXR1cm4gbH0oZSksKGZ1bmN0aW9uKGUpe3JldHVybiBlLl9pZH0pKTt0LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLChmdW5jdGlvbihlKXtyZXR1cm4gZS5faWR9KSkuY2xhc3NlZChNLmNvbG9yYmFyLCEwKSx0LmVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2MuZW5zdXJlU2luZ2xlKHIsInJlY3QiLE0uY2JiZyksYy5lbnN1cmVTaW5nbGUociwiZyIsTS5jYmZpbGxzKSxjLmVuc3VyZVNpbmdsZShyLCJnIixNLmNibGluZXMpLGMuZW5zdXJlU2luZ2xlKHIsImciLE0uY2JheGlzLChmdW5jdGlvbihlKXtlLmNsYXNzZWQoTS5jcmlzcCwhMCl9KSksYy5lbnN1cmVTaW5nbGUociwiZyIsTS5jYnRpdGxldW5zaGlmdCwoZnVuY3Rpb24oZSl7ZS5hcHBlbmQoImciKS5jbGFzc2VkKE0uY2J0aXRsZSwhMCl9KSksYy5lbnN1cmVTaW5nbGUociwicmVjdCIsTS5jYm91dGxpbmUpO3ZhciBtPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbz1yLl9mdWxsTGF5b3V0LHM9by5fc2l6ZSxkPXQuX2ZpbGxjb2xvcixtPXQuX2xpbmUsXz10LnRpdGxlLEE9Xy5zaWRlLEw9dC5fenJhbmdlfHxuLmV4dGVudCgoImZ1bmN0aW9uIj09dHlwZW9mIGQ/ZDptLmNvbG9yKS5kb21haW4oKSksUz0iZnVuY3Rpb24iPT10eXBlb2YgbS5jb2xvcj9tLmNvbG9yOmZ1bmN0aW9uKCl7cmV0dXJuIG0uY29sb3J9LEM9ImZ1bmN0aW9uIj09dHlwZW9mIGQ/ZDpmdW5jdGlvbigpe3JldHVybiBkfSxPPXQuX2xldmVscyxEPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLGk9dC5fbGV2ZWxzLG89W10sbD1bXSxzPWkuZW5kK2kuc2l6ZS8xMDAsYz1pLnNpemUsdT0xLjAwMSpyWzBdLS4wMDEqclsxXSxmPTEuMDAxKnJbMV0tLjAwMSpyWzBdO2ZvcihhPTA7YTwxZTUmJihuPWkuc3RhcnQrYSpjLCEoYz4wP24+PXM6bjw9cykpO2ErKyluPnUmJm48ZiYmby5wdXNoKG4pO2lmKHQuX2ZpbGxncmFkaWVudClsPVswXTtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiB0Ll9maWxsY29sb3Ipe3ZhciBkPXQuX2ZpbGxsZXZlbHM7aWYoZClmb3Iocz1kLmVuZCtkLnNpemUvMTAwLGM9ZC5zaXplLGE9MDthPDFlNSYmKG49ZC5zdGFydCthKmMsIShjPjA/bj49czpuPD1zKSk7YSsrKW4+clswXSYmbjxyWzFdJiZsLnB1c2gobik7ZWxzZShsPW8ubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS1pLnNpemUvMn0pKSkucHVzaChsW2wubGVuZ3RoLTFdK2kuc2l6ZSl9ZWxzZSB0Ll9maWxsY29sb3ImJiJzdHJpbmciPT10eXBlb2YgdC5fZmlsbGNvbG9yJiYobD1bMF0pO2kuc2l6ZTwwJiYoby5yZXZlcnNlKCksbC5yZXZlcnNlKCkpO3JldHVybntsaW5lOm8sZmlsbDpsfX0oMCx0LEwpLFA9RC5maWxsLHo9RC5saW5lLFI9TWF0aC5yb3VuZCh0LnRoaWNrbmVzcyooImZyYWN0aW9uIj09PXQudGhpY2tuZXNzbW9kZT9zLnc6MSkpLEU9Ui9zLncsST1NYXRoLnJvdW5kKHQubGVuKigiZnJhY3Rpb24iPT09dC5sZW5tb2RlP3MuaDoxKSksRj1JL3MuaCxOPXQueHBhZC9zLncsSD0odC5ib3JkZXJ3aWR0aCt0Lm91dGxpbmV3aWR0aCkvMixqPXQueXBhZC9zLmgsQj1NYXRoLnJvdW5kKHQueCpzLncrdC54cGFkKSxWPXQueC1FKih7bWlkZGxlOi41LHJpZ2h0OjF9W3QueGFuY2hvcl18fDApLFU9dC55K0YqKCh7dG9wOi0uNSxib3R0b206LjV9W3QueWFuY2hvcl18fDApLS41KSxxPU1hdGgucm91bmQocy5oKigxLVUpKSxHPXEtSTt0Ll9sZW5GcmFjPUYsdC5fdGhpY2tGcmFjPUUsdC5feExlZnRGcmFjPVYsdC5feUJvdHRvbUZyYWM9VTt2YXIgWj10Ll9heGlzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1lLl9mdWxsTGF5b3V0LGE9e3R5cGU6ImxpbmVhciIscmFuZ2U6cix0aWNrbW9kZTp0LnRpY2ttb2RlLG50aWNrczp0Lm50aWNrcyx0aWNrMDp0LnRpY2swLGR0aWNrOnQuZHRpY2ssdGlja3ZhbHM6dC50aWNrdmFscyx0aWNrdGV4dDp0LnRpY2t0ZXh0LHRpY2tzOnQudGlja3MsdGlja2xlbjp0LnRpY2tsZW4sdGlja3dpZHRoOnQudGlja3dpZHRoLHRpY2tjb2xvcjp0LnRpY2tjb2xvcixzaG93dGlja2xhYmVsczp0LnNob3d0aWNrbGFiZWxzLHRpY2tsYWJlbHBvc2l0aW9uOnQudGlja2xhYmVscG9zaXRpb24sdGlja2ZvbnQ6dC50aWNrZm9udCx0aWNrYW5nbGU6dC50aWNrYW5nbGUsdGlja2Zvcm1hdDp0LnRpY2tmb3JtYXQsZXhwb25lbnRmb3JtYXQ6dC5leHBvbmVudGZvcm1hdCxtaW5leHBvbmVudDp0Lm1pbmV4cG9uZW50LHNlcGFyYXRldGhvdXNhbmRzOnQuc2VwYXJhdGV0aG91c2FuZHMsc2hvd2V4cG9uZW50OnQuc2hvd2V4cG9uZW50LHNob3d0aWNrcHJlZml4OnQuc2hvd3RpY2twcmVmaXgsdGlja3ByZWZpeDp0LnRpY2twcmVmaXgsc2hvd3RpY2tzdWZmaXg6dC5zaG93dGlja3N1ZmZpeCx0aWNrc3VmZml4OnQudGlja3N1ZmZpeCx0aXRsZTp0LnRpdGxlLHNob3dsaW5lOiEwLGFuY2hvcjoiZnJlZSIsc2lkZToicmlnaHQiLHBvc2l0aW9uOjF9LGk9e3R5cGU6ImxpbmVhciIsX2lkOiJ5Iit0Ll9pZH0sbz17bGV0dGVyOiJ5Iixmb250Om4uZm9udCxub0hvdmVyOiEwLG5vVGlja3NvbjohMCxub1RpY2tsYWJlbG1vZGU6ITAsY2FsZW5kYXI6bi5jYWxlbmRhcn07ZnVuY3Rpb24gbChlLHQpe3JldHVybiBjLmNvZXJjZShhLGksYixlLHQpfXJldHVybiB5KGEsaSxsLG8sbikseChhLGksbCxvKSxpfShyLHQsTCk7Wi5wb3NpdGlvbj10LngrTitFLC0xIT09WyJ0b3AiLCJib3R0b20iXS5pbmRleE9mKEEpJiYoWi50aXRsZS5zaWRlPUEsWi50aXRsZXg9dC54K04sWi50aXRsZXk9VSsoInRvcCI9PT1fLnNpZGU/Ri1qOmopKTtpZihtLmNvbG9yJiYiYXV0byI9PT10LnRpY2ttb2RlKXtaLnRpY2ttb2RlPSJsaW5lYXIiLFoudGljazA9Ty5zdGFydDt2YXIgWT1PLnNpemUsWD1jLmNvbnN0cmFpbigocS1HKS81MCw0LDE1KSsxLFc9KExbMV0tTFswXSkvKCh0Lm50aWNrc3x8WCkqWSk7aWYoVz4xKXt2YXIgUT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKFcpL01hdGguTE4xMCkpO1kqPVEqYy5yb3VuZFVwKFcvUSxbMiw1LDEwXSksKE1hdGguYWJzKE8uc3RhcnQpL08uc2l6ZSsxZS02KSUxPDJlLTYmJihaLnRpY2swPTApfVouZHRpY2s9WX1aLmRvbWFpbj1bVStqLFUrRi1qXSxaLnNldFNjYWxlKCksZS5hdHRyKCJ0cmFuc2Zvcm0iLHUoTWF0aC5yb3VuZChzLmwpLE1hdGgucm91bmQocy50KSkpO3ZhciBKLCQ9ZS5zZWxlY3QoIi4iK00uY2J0aXRsZXVuc2hpZnQpLmF0dHIoInRyYW5zZm9ybSIsdSgtTWF0aC5yb3VuZChzLmwpLC1NYXRoLnJvdW5kKHMudCkpKSxLPWUuc2VsZWN0KCIuIitNLmNiYXhpcyksZWU9MDtmdW5jdGlvbiB0ZShuLGEpe3ZhciBpPXtwcm9wQ29udGFpbmVyOloscHJvcE5hbWU6dC5fcHJvcFByZWZpeCsidGl0bGUiLHRyYWNlSW5kZXg6dC5fdHJhY2VJbmRleCxfbWV0YTp0Ll9tZXRhLHBsYWNlaG9sZGVyOm8uX2RmbHRUaXRsZS5jb2xvcmJhcixjb250YWluZXJHcm91cDplLnNlbGVjdCgiLiIrTS5jYnRpdGxlKX0sbD0iaCI9PT1uLmNoYXJBdCgwKT9uLnN1YnN0cigxKToiaCIrbjtlLnNlbGVjdEFsbCgiLiIrbCsiLC4iK2wrIi1tYXRoLWdyb3VwIikucmVtb3ZlKCksZy5kcmF3KHIsbixmKGksYXx8e30pKX1yZXR1cm4gYy5zeW5jT3JBc3luYyhbaS5wcmV2aW91c1Byb21pc2VzLGZ1bmN0aW9uKCl7aWYoLTEhPT1bInRvcCIsImJvdHRvbSJdLmluZGV4T2YoQSkpe3ZhciBlLHI9cy5sKyh0LngrTikqcy53LG49Wi50aXRsZS5mb250LnNpemU7ZT0idG9wIj09PUE/KDEtKFUrRi1qKSkqcy5oK3MudCszKy43NSpuOigxLShVK2opKSpzLmgrcy50LTMtLjI1Km4sdGUoWi5faWQrInRpdGxlIix7YXR0cmlidXRlczp7eDpyLHk6ZSwidGV4dC1hbmNob3IiOiJzdGFydCJ9fSl9fSxmdW5jdGlvbigpe2lmKC0xIT09WyJ0b3AiLCJib3R0b20iXS5pbmRleE9mKEEpKXt2YXIgaT1lLnNlbGVjdCgiLiIrTS5jYnRpdGxlKSxvPWkuc2VsZWN0KCJ0ZXh0IiksZj1bLXQub3V0bGluZXdpZHRoLzIsdC5vdXRsaW5ld2lkdGgvMl0sZD1pLnNlbGVjdCgiLmgiK1ouX2lkKyJ0aXRsZS1tYXRoLWdyb3VwIikubm9kZSgpLGg9MTUuNjtpZihvLm5vZGUoKSYmKGg9cGFyc2VJbnQoby5ub2RlKCkuc3R5bGUuZm9udFNpemUsMTApKncpLGQ/KGVlPXAuYkJveChkKS5oZWlnaHQpPmgmJihmWzFdLT0oZWUtaCkvMik6by5ub2RlKCkmJiFvLmNsYXNzZWQoTS5qc1BsYWNlaG9sZGVyKSYmKGVlPXAuYkJveChvLm5vZGUoKSkuaGVpZ2h0KSxlZSl7aWYoZWUrPTUsInRvcCI9PT1BKVouZG9tYWluWzFdLT1lZS9zLmgsZlsxXSo9LTE7ZWxzZXtaLmRvbWFpblswXSs9ZWUvcy5oO3ZhciBnPXYubGluZUNvdW50KG8pO2ZbMV0rPSgxLWcpKmh9aS5hdHRyKCJ0cmFuc2Zvcm0iLHUoZlswXSxmWzFdKSksWi5zZXRTY2FsZSgpfX1lLnNlbGVjdEFsbCgiLiIrTS5jYmZpbGxzKyIsLiIrTS5jYmxpbmVzKS5hdHRyKCJ0cmFuc2Zvcm0iLHUoMCxNYXRoLnJvdW5kKHMuaCooMS1aLmRvbWFpblsxXSkpKSksSy5hdHRyKCJ0cmFuc2Zvcm0iLHUoMCxNYXRoLnJvdW5kKC1zLnQpKSk7dmFyIHk9ZS5zZWxlY3QoIi4iK00uY2JmaWxscykuc2VsZWN0QWxsKCJyZWN0LiIrTS5jYmZpbGwpLmF0dHIoInN0eWxlIiwiIikuZGF0YShQKTt5LmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZChNLmNiZmlsbCwhMCkuc3R5bGUoInN0cm9rZSIsIm5vbmUiKSx5LmV4aXQoKS5yZW1vdmUoKTt2YXIgeD1MLm1hcChaLmMycCkubWFwKE1hdGgucm91bmQpLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUtdH0pKTt5LmVhY2goKGZ1bmN0aW9uKGUsaSl7dmFyIG89WzA9PT1pP0xbMF06KFBbaV0rUFtpLTFdKS8yLGk9PT1QLmxlbmd0aC0xP0xbMV06KFBbaV0rUFtpKzFdKS8yXS5tYXAoWi5jMnApLm1hcChNYXRoLnJvdW5kKTtvWzFdPWMuY29uc3RyYWluKG9bMV0rKG9bMV0+b1swXSk/MTotMSx4WzBdLHhbMV0pO3ZhciBsPW4uc2VsZWN0KHRoaXMpLmF0dHIoe3g6Qix3aWR0aDpNYXRoLm1heChSLDIpLHk6bi5taW4obyksaGVpZ2h0Ok1hdGgubWF4KG4ubWF4KG8pLW4ubWluKG8pLDIpfSk7aWYodC5fZmlsbGdyYWRpZW50KXAuZ3JhZGllbnQobCxyLHQuX2lkLCJ2ZXJ0aWNhbCIsdC5fZmlsbGdyYWRpZW50LCJmaWxsIik7ZWxzZXt2YXIgcz1DKGUpLnJlcGxhY2UoImUtIiwiIik7bC5hdHRyKCJmaWxsIixhKHMpLnRvSGV4U3RyaW5nKCkpfX0pKTt2YXIgYj1lLnNlbGVjdCgiLiIrTS5jYmxpbmVzKS5zZWxlY3RBbGwoInBhdGguIitNLmNibGluZSkuZGF0YShtLmNvbG9yJiZtLndpZHRoP3o6W10pO2IuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKE0uY2JsaW5lLCEwKSxiLmV4aXQoKS5yZW1vdmUoKSxiLmVhY2goKGZ1bmN0aW9uKGUpe24uc2VsZWN0KHRoaXMpLmF0dHIoImQiLCJNIitCKyIsIisoTWF0aC5yb3VuZChaLmMycChlKSkrbS53aWR0aC8yJTEpKyJoIitSKS5jYWxsKHAubGluZUdyb3VwU3R5bGUsbS53aWR0aCxTKGUpLG0uZGFzaCl9KSksSy5zZWxlY3RBbGwoImcuIitaLl9pZCsidGljayxwYXRoIikucmVtb3ZlKCk7dmFyIF89QitSKyh0Lm91dGxpbmV3aWR0aHx8MCkvMi0oIm91dHNpZGUiPT09dC50aWNrcz8xOjApLFQ9bC5jYWxjVGlja3MoWiksaz1sLmdldFRpY2tTaWducyhaKVsyXTtyZXR1cm4gbC5kcmF3VGlja3MocixaLHt2YWxzOiJpbnNpZGUiPT09Wi50aWNrcz9sLmNsaXBFbmRzKFosVCk6VCxsYXllcjpLLHBhdGg6bC5tYWtlVGlja1BhdGgoWixfLGspLHRyYW5zRm46bC5tYWtlVHJhbnNUaWNrRm4oWil9KSxsLmRyYXdMYWJlbHMocixaLHt2YWxzOlQsbGF5ZXI6Syx0cmFuc0ZuOmwubWFrZVRyYW5zVGlja0xhYmVsRm4oWiksbGFiZWxGbnM6bC5tYWtlTGFiZWxGbnMoWixfKX0pfSxmdW5jdGlvbigpe2lmKC0xPT09WyJ0b3AiLCJib3R0b20iXS5pbmRleE9mKEEpKXt2YXIgZT1aLnRpdGxlLmZvbnQuc2l6ZSx0PVouX29mZnNldCtaLl9sZW5ndGgvMixhPXMubCsoWi5wb3NpdGlvbnx8MCkqcy53KygicmlnaHQiPT09Wi5zaWRlPzEwK2UqKFouc2hvd3RpY2tsYWJlbHM/MTouNSk6LTEwLWUqKFouc2hvd3RpY2tsYWJlbHM/LjU6MCkpO3RlKCJoIitaLl9pZCsidGl0bGUiLHthdm9pZDp7c2VsZWN0aW9uOm4uc2VsZWN0KHIpLnNlbGVjdEFsbCgiZy4iK1ouX2lkKyJ0aWNrIiksc2lkZTpBLG9mZnNldExlZnQ6cy5sLG9mZnNldFRvcDowLG1heFNoaWZ0Om8ud2lkdGh9LGF0dHJpYnV0ZXM6e3g6YSx5OnQsInRleHQtYW5jaG9yIjoibWlkZGxlIn0sdHJhbnNmb3JtOntyb3RhdGU6Ii05MCIsb2Zmc2V0OjB9fSl9fSxpLnByZXZpb3VzUHJvbWlzZXMsZnVuY3Rpb24oKXt2YXIgbj1SK3Qub3V0bGluZXdpZHRoLzI7aWYoLTE9PT1aLnRpY2tsYWJlbHBvc2l0aW9uLmluZGV4T2YoImluc2lkZSIpJiYobis9cC5iQm94KEsubm9kZSgpKS53aWR0aCksKEo9JC5zZWxlY3QoInRleHQiKSkubm9kZSgpJiYhSi5jbGFzc2VkKE0uanNQbGFjZWhvbGRlcikpe3ZhciBhLG89JC5zZWxlY3QoIi5oIitaLl9pZCsidGl0bGUtbWF0aC1ncm91cCIpLm5vZGUoKTthPW8mJi0xIT09WyJ0b3AiLCJib3R0b20iXS5pbmRleE9mKEEpP3AuYkJveChvKS53aWR0aDpwLmJCb3goJC5ub2RlKCkpLnJpZ2h0LUItcy5sLG49TWF0aC5tYXgobixhKX12YXIgbD0yKnQueHBhZCtuK3QuYm9yZGVyd2lkdGgrdC5vdXRsaW5ld2lkdGgvMixjPXEtRztlLnNlbGVjdCgiLiIrTS5jYmJnKS5hdHRyKHt4OkItdC54cGFkLSh0LmJvcmRlcndpZHRoK3Qub3V0bGluZXdpZHRoKS8yLHk6Ry1ILHdpZHRoOk1hdGgubWF4KGwsMiksaGVpZ2h0Ok1hdGgubWF4KGMrMipILDIpfSkuY2FsbChoLmZpbGwsdC5iZ2NvbG9yKS5jYWxsKGguc3Ryb2tlLHQuYm9yZGVyY29sb3IpLnN0eWxlKCJzdHJva2Utd2lkdGgiLHQuYm9yZGVyd2lkdGgpLGUuc2VsZWN0QWxsKCIuIitNLmNib3V0bGluZSkuYXR0cih7eDpCLHk6Ryt0LnlwYWQrKCJ0b3AiPT09QT9lZTowKSx3aWR0aDpNYXRoLm1heChSLDIpLGhlaWdodDpNYXRoLm1heChjLTIqdC55cGFkLWVlLDIpfSkuY2FsbChoLnN0cm9rZSx0Lm91dGxpbmVjb2xvcikuc3R5bGUoe2ZpbGw6Im5vbmUiLCJzdHJva2Utd2lkdGgiOnQub3V0bGluZXdpZHRofSk7dmFyIGY9KHtjZW50ZXI6LjUscmlnaHQ6MX1bdC54YW5jaG9yXXx8MCkqbDtlLmF0dHIoInRyYW5zZm9ybSIsdShzLmwtZixzLnQpKTt2YXIgZD17fSxnPVRbdC55YW5jaG9yXSx2PWtbdC55YW5jaG9yXTsicGl4ZWxzIj09PXQubGVubW9kZT8oZC55PXQueSxkLnQ9YypnLGQuYj1jKnYpOihkLnQ9ZC5iPTAsZC55dD10LnkrdC5sZW4qZyxkLnliPXQueS10Lmxlbip2KTt2YXIgbT1UW3QueGFuY2hvcl0seT1rW3QueGFuY2hvcl07aWYoInBpeGVscyI9PT10LnRoaWNrbmVzc21vZGUpZC54PXQueCxkLmw9bCptLGQucj1sKnk7ZWxzZXt2YXIgeD1sLVI7ZC5sPXgqbSxkLnI9eCp5LGQueGw9dC54LXQudGhpY2tuZXNzKm0sZC54cj10LngrdC50aGlja25lc3MqeX1pLmF1dG9NYXJnaW4ocix0Ll9pZCxkKX1dLHIpfShyLHQsZSk7bSYmbS50aGVuJiYoZS5fcHJvbWlzZXN8fFtdKS5wdXNoKG0pLGUuX2NvbnRleHQuZWRpdHMuY29sb3JiYXJQb3NpdGlvbiYmZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGEsaSxsPXIuX2Z1bGxMYXlvdXQuX3NpemU7cy5pbml0KHtlbGVtZW50OmUubm9kZSgpLGdkOnIscHJlcEZuOmZ1bmN0aW9uKCl7bj1lLmF0dHIoInRyYW5zZm9ybSIpLGQoZSl9LG1vdmVGbjpmdW5jdGlvbihyLG8pe2UuYXR0cigidHJhbnNmb3JtIixuK3UocixvKSksYT1zLmFsaWduKHQuX3hMZWZ0RnJhYytyL2wudyx0Ll90aGlja0ZyYWMsMCwxLHQueGFuY2hvciksaT1zLmFsaWduKHQuX3lCb3R0b21GcmFjLW8vbC5oLHQuX2xlbkZyYWMsMCwxLHQueWFuY2hvcik7dmFyIGM9cy5nZXRDdXJzb3IoYSxpLHQueGFuY2hvcix0LnlhbmNob3IpO2QoZSxjKX0sZG9uZUZuOmZ1bmN0aW9uKCl7aWYoZChlKSx2b2lkIDAhPT1hJiZ2b2lkIDAhPT1pKXt2YXIgbj17fTtuW3QuX3Byb3BQcmVmaXgrIngiXT1hLG5bdC5fcHJvcFByZWZpeCsieSJdPWksdm9pZCAwIT09dC5fdHJhY2VJbmRleD9vLmNhbGwoIl9ndWlSZXN0eWxlIixyLG4sdC5fdHJhY2VJbmRleCk6by5jYWxsKCJfZ3VpUmVsYXlvdXQiLHIsbil9fX0pfShyLHQsZSl9KSksdC5leGl0KCkuZWFjaCgoZnVuY3Rpb24odCl7aS5hdXRvTWFyZ2luKGUsdC5faWQpfSkpLnJlbW92ZSgpLHQub3JkZXIoKX19fSx7Ii4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjE3NywiLi4vLi4vbGliIjoyMDIsIi4uLy4uL2xpYi9leHRlbmQiOjE5NiwiLi4vLi4vbGliL3NldGN1cnNvciI6MjIyLCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjIyNCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjI0OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZGVmYXVsdHMiOjI1MCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIjoyNjIsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9wb3NpdGlvbl9kZWZhdWx0cyI6MjY1LCIuLi8uLi9wbG90cy9wbG90cyI6MjgyLCIuLi8uLi9yZWdpc3RyeSI6MjkwLCIuLi9jb2xvciI6NzUsIi4uL2NvbG9yc2NhbGUvaGVscGVycyI6ODYsIi4uL2RyYWdlbGVtZW50Ijo5NCwiLi4vZHJhd2luZyI6OTcsIi4uL3RpdGxlcyI6MTcwLCIuL2NvbnN0YW50cyI6NzcsZDM6OSx0aW55Y29sb3IyOjU4fV0sODA6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vbGliIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBuLmlzUGxhaW5PYmplY3QoZS5jb2xvcmJhcil9fSx7Ii4uLy4uL2xpYiI6MjAyfV0sODE6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6ImNvbG9yYmFyIixhdHRyaWJ1dGVzOmUoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOmUoIi4vZGVmYXVsdHMiKSxkcmF3OmUoIi4vZHJhdyIpLmRyYXcsaGFzQ29sb3JiYXI6ZSgiLi9oYXNfY29sb3JiYXIiKX19LHsiLi9hdHRyaWJ1dGVzIjo3NiwiLi9kZWZhdWx0cyI6NzgsIi4vZHJhdyI6NzksIi4vaGFzX2NvbG9yYmFyIjo4MH1dLDgyOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uL2NvbG9yYmFyL2F0dHJpYnV0ZXMiKSxhPWUoIi4uLy4uL2xpYi9yZWdleCIpLmNvdW50ZXIsaT1lKCIuL3NjYWxlcy5qcyIpLnNjYWxlcztPYmplY3Qua2V5cyhpKTtmdW5jdGlvbiBvKGUpe3JldHVybiJgIitlKyJgIn10LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtlPWV8fCIiO3ZhciByLGw9KHQ9dHx8e30pLmNMZXR0ZXJ8fCJjIixzPSgib25seUlmTnVtZXJpY2FsImluIHQ/dC5vbmx5SWZOdW1lcmljYWw6Qm9vbGVhbihlKSwibm9TY2FsZSJpbiB0P3Qubm9TY2FsZToibWFya2VyLmxpbmUiPT09ZSksYz0ic2hvd1NjYWxlRGZsdCJpbiB0P3Quc2hvd1NjYWxlRGZsdDoieiI9PT1sLHU9InN0cmluZyI9PXR5cGVvZiB0LmNvbG9yc2NhbGVEZmx0P2lbdC5jb2xvcnNjYWxlRGZsdF06bnVsbCxmPXQuZWRpdFR5cGVPdmVycmlkZXx8IiIsZD1lP2UrIi4iOiIiOyJjb2xvckF0dHIiaW4gdD8ocj10LmNvbG9yQXR0cix0LmNvbG9yQXR0cik6byhkKyhyPXt6OiJ6IixjOiJjb2xvciJ9W2xdKSk7dmFyIHA9bCsiYXV0byIsaD1sKyJtaW4iLGc9bCsibWF4Iix2PWwrIm1pZCIsbT0obyhkK3ApLG8oZCtoKSxvKGQrZykse30pO21baF09bVtnXT12b2lkIDA7dmFyIHk9e307eVtwXT0hMTt2YXIgeD17fTtyZXR1cm4iY29sb3IiPT09ciYmKHguY29sb3I9e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwLGVkaXRUeXBlOmZ8fCJzdHlsZSJ9LHQuYW5pbSYmKHguY29sb3IuYW5pbT0hMCkpLHhbcF09e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czptfSx4W2hdPXt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxlZGl0VHlwZTpmfHwicGxvdCIsaW1wbGllZEVkaXRzOnl9LHhbZ109e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpudWxsLGVkaXRUeXBlOmZ8fCJwbG90IixpbXBsaWVkRWRpdHM6eX0seFt2XT17dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czptfSx4LmNvbG9yc2NhbGU9e3ZhbFR5cGU6ImNvbG9yc2NhbGUiLGVkaXRUeXBlOiJjYWxjIixkZmx0OnUsaW1wbGllZEVkaXRzOnthdXRvY29sb3JzY2FsZTohMX19LHguYXV0b2NvbG9yc2NhbGU9e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEhPT10LmF1dG9Db2xvckRmbHQsZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czp7Y29sb3JzY2FsZTp2b2lkIDB9fSx4LnJldmVyc2VzY2FsZT17dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToicGxvdCJ9LHN8fCh4LnNob3dzY2FsZT17dmFsVHlwZToiYm9vbGVhbiIsZGZsdDpjLGVkaXRUeXBlOiJjYWxjIn0seC5jb2xvcmJhcj1uKSx0Lm5vQ29sb3JBeGlzfHwoeC5jb2xvcmF4aXM9e3ZhbFR5cGU6InN1YnBsb3RpZCIscmVnZXg6YSgiY29sb3JheGlzIiksZGZsdDpudWxsLGVkaXRUeXBlOiJjYWxjIn0pLHh9fSx7Ii4uLy4uL2xpYi9yZWdleCI6MjE4LCIuLi9jb2xvcmJhci9hdHRyaWJ1dGVzIjo3NiwiLi9zY2FsZXMuanMiOjkwfV0sODM6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiZmFzdC1pc251bWVyaWMiKSxhPWUoIi4uLy4uL2xpYiIpLGk9ZSgiLi9oZWxwZXJzIikuZXh0cmFjdE9wdHM7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbyxsPWUuX2Z1bGxMYXlvdXQscz1yLnZhbHMsYz1yLmNvbnRhaW5lclN0cix1PWM/YS5uZXN0ZWRQcm9wZXJ0eSh0LGMpLmdldCgpOnQsZj1pKHUpLGQ9ITEhPT1mLmF1dG8scD1mLm1pbixoPWYubWF4LGc9Zi5taWQsdj1mdW5jdGlvbigpe3JldHVybiBhLmFnZ051bXMoTWF0aC5taW4sbnVsbCxzKX0sbT1mdW5jdGlvbigpe3JldHVybiBhLmFnZ051bXMoTWF0aC5tYXgsbnVsbCxzKX07KHZvaWQgMD09PXA/cD12KCk6ZCYmKHA9dS5fY29sb3JBeCYmbihwKT9NYXRoLm1pbihwLHYoKSk6digpKSx2b2lkIDA9PT1oP2g9bSgpOmQmJihoPXUuX2NvbG9yQXgmJm4oaCk/TWF0aC5tYXgoaCxtKCkpOm0oKSksZCYmdm9pZCAwIT09ZyYmKGgtZz5nLXA/cD1nLShoLWcpOmgtZzxnLXAmJihoPWcrKGctcCkpKSxwPT09aCYmKHAtPS41LGgrPS41KSxmLl9zeW5jKCJtaW4iLHApLGYuX3N5bmMoIm1heCIsaCksZi5hdXRvY29sb3JzY2FsZSkmJihvPXAqaDwwP2wuY29sb3JzY2FsZS5kaXZlcmdpbmc6cD49MD9sLmNvbG9yc2NhbGUuc2VxdWVudGlhbDpsLmNvbG9yc2NhbGUuc2VxdWVudGlhbG1pbnVzLGYuX3N5bmMoImNvbG9yc2NhbGUiLG8pKX19LHsiLi4vLi4vbGliIjoyMDIsIi4vaGVscGVycyI6ODYsImZhc3QtaXNudW1lcmljIjoxMX1dLDg0OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2xpYiIpLGE9ZSgiLi9oZWxwZXJzIikuaGFzQ29sb3JzY2FsZSxpPWUoIi4vaGVscGVycyIpLmV4dHJhY3RPcHRzO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIHIoZSx0KXt2YXIgcj1lWyJfIit0XTt2b2lkIDAhPT1yJiYoZVt0XT1yKX1mdW5jdGlvbiBvKGUsYSl7dmFyIG89YS5jb250YWluZXI/bi5uZXN0ZWRQcm9wZXJ0eShlLGEuY29udGFpbmVyKS5nZXQoKTplO2lmKG8paWYoby5jb2xvcmF4aXMpby5fY29sb3JBeD10W28uY29sb3JheGlzXTtlbHNle3ZhciBsPWkobykscz1sLmF1dG87KHN8fHZvaWQgMD09PWwubWluKSYmcihvLGEubWluKSwoc3x8dm9pZCAwPT09bC5tYXgpJiZyKG8sYS5tYXgpLGwuYXV0b2NvbG9yc2NhbGUmJnIobywiY29sb3JzY2FsZSIpfX1mb3IodmFyIGw9MDtsPGUubGVuZ3RoO2wrKyl7dmFyIHM9ZVtsXSxjPXMuX21vZHVsZS5jb2xvcmJhcjtpZihjKWlmKEFycmF5LmlzQXJyYXkoYykpZm9yKHZhciB1PTA7dTxjLmxlbmd0aDt1KyspbyhzLGNbdV0pO2Vsc2UgbyhzLGMpO2EocywibWFya2VyLmxpbmUiKSYmbyhzLHtjb250YWluZXI6Im1hcmtlci5saW5lIixtaW46ImNtaW4iLG1heDoiY21heCJ9KX1mb3IodmFyIGYgaW4gdC5fY29sb3JBeGVzKW8odFtmXSx7bWluOiJjbWluIixtYXg6ImNtYXgifSl9fSx7Ii4uLy4uL2xpYiI6MjAyLCIuL2hlbHBlcnMiOjg2fV0sODU6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiZmFzdC1pc251bWVyaWMiKSxhPWUoIi4uLy4uL2xpYiIpLGk9ZSgiLi4vY29sb3JiYXIvaGFzX2NvbG9yYmFyIiksbz1lKCIuLi9jb2xvcmJhci9kZWZhdWx0cyIpLGw9ZSgiLi9zY2FsZXMiKS5pc1ZhbGlkLHM9ZSgiLi4vLi4vcmVnaXN0cnkiKS50cmFjZUlzO2Z1bmN0aW9uIGMoZSx0KXt2YXIgcj10LnNsaWNlKDAsdC5sZW5ndGgtMSk7cmV0dXJuIHQ/YS5uZXN0ZWRQcm9wZXJ0eShlLHIpLmdldCgpfHx7fTplfXQuZXhwb3J0cz1mdW5jdGlvbiBlKHQscix1LGYsZCl7dmFyIHA9ZC5wcmVmaXgsaD1kLmNMZXR0ZXIsZz0iX21vZHVsZSJpbiByLHY9Yyh0LHApLG09YyhyLHApLHk9YyhyLl90ZW1wbGF0ZXx8e30scCl8fHt9LHg9ZnVuY3Rpb24oKXtyZXR1cm4gZGVsZXRlIHQuY29sb3JheGlzLGRlbGV0ZSByLmNvbG9yYXhpcyxlKHQscix1LGYsZCl9O2lmKGcpe3ZhciBiPXUuX2NvbG9yQXhlc3x8e30sXz1mKHArImNvbG9yYXhpcyIpO2lmKF8pe3ZhciB3PXMociwiY29udG91ciIpJiZhLm5lc3RlZFByb3BlcnR5KHIsImNvbnRvdXJzLmNvbG9yaW5nIikuZ2V0KCl8fCJoZWF0bWFwIixUPWJbX107cmV0dXJuIHZvaWQoVD8oVFsyXS5wdXNoKHgpLFRbMF0hPT13JiYoVFswXT0hMSxhLndhcm4oWyJJZ25vcmluZyBjb2xvcmF4aXM6IixfLCJzZXR0aW5nIiwiYXMgaXQgaXMgbGlua2VkIHRvIGluY29tcGF0aWJsZSBjb2xvcnNjYWxlcy4iXS5qb2luKCIgIikpKSk6YltfXT1bdyxyLFt4XV0pfX12YXIgaz12W2grIm1pbiJdLE09dltoKyJtYXgiXSxBPW4oaykmJm4oTSkmJms8TTtmKHAraCsiYXV0byIsIUEpP2YocCtoKyJtaWQiKTooZihwK2grIm1pbiIpLGYocCtoKyJtYXgiKSk7dmFyIEwsUyxDPXYuY29sb3JzY2FsZSxPPXkuY29sb3JzY2FsZTsodm9pZCAwIT09QyYmKEw9IWwoQykpLHZvaWQgMCE9PU8mJihMPSFsKE8pKSxmKHArImF1dG9jb2xvcnNjYWxlIixMKSxmKHArImNvbG9yc2NhbGUiKSxmKHArInJldmVyc2VzY2FsZSIpLCJtYXJrZXIubGluZS4iIT09cCkmJihwJiZnJiYoUz1pKHYpKSxmKHArInNob3dzY2FsZSIsUykmJihwJiZ5JiYobS5fdGVtcGxhdGU9eSksbyh2LG0sdSkpKX19LHsiLi4vLi4vbGliIjoyMDIsIi4uLy4uL3JlZ2lzdHJ5IjoyOTAsIi4uL2NvbG9yYmFyL2RlZmF1bHRzIjo3OCwiLi4vY29sb3JiYXIvaGFzX2NvbG9yYmFyIjo4MCwiLi9zY2FsZXMiOjkwLCJmYXN0LWlzbnVtZXJpYyI6MTF9XSw4NjpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJkMyIpLGE9ZSgidGlueWNvbG9yMiIpLGk9ZSgiZmFzdC1pc251bWVyaWMiKSxvPWUoIi4uLy4uL2xpYiIpLGw9ZSgiLi4vY29sb3IiKSxzPWUoIi4vc2NhbGVzIikuaXNWYWxpZDt2YXIgYz1bInNob3dzY2FsZSIsImF1dG9jb2xvcnNjYWxlIiwiY29sb3JzY2FsZSIsInJldmVyc2VzY2FsZSIsImNvbG9yYmFyIl0sdT1bIm1pbiIsIm1heCIsIm1pZCIsImF1dG8iXTtmdW5jdGlvbiBmKGUpe3ZhciB0LHIsbixhPWUuX2NvbG9yQXgsaT1hfHxlLG89e307Zm9yKHI9MDtyPGMubGVuZ3RoO3IrKylvW249Y1tyXV09aVtuXTtpZihhKWZvcih0PSJjIixyPTA7cjx1Lmxlbmd0aDtyKyspb1tuPXVbcl1dPWlbImMiK25dO2Vsc2V7dmFyIGw7Zm9yKHI9MDtyPHUubGVuZ3RoO3IrKykoKGw9ImMiKyhuPXVbcl0pKWluIGl8fChsPSJ6IituKWluIGkpJiYob1tuXT1pW2xdKTt0PWwuY2hhckF0KDApfXJldHVybiBvLl9zeW5jPWZ1bmN0aW9uKGUscil7dmFyIG49LTEhPT11LmluZGV4T2YoZSk/dCtlOmU7aVtuXT1pWyJfIituXT1yfSxvfWZ1bmN0aW9uIGQoZSl7Zm9yKHZhciB0PWYoZSkscj10Lm1pbixuPXQubWF4LGE9dC5yZXZlcnNlc2NhbGU/cCh0LmNvbG9yc2NhbGUpOnQuY29sb3JzY2FsZSxpPWEubGVuZ3RoLG89bmV3IEFycmF5KGkpLGw9bmV3IEFycmF5KGkpLHM9MDtzPGk7cysrKXt2YXIgYz1hW3NdO29bc109citjWzBdKihuLXIpLGxbc109Y1sxXX1yZXR1cm57ZG9tYWluOm8scmFuZ2U6bH19ZnVuY3Rpb24gcChlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscj1uZXcgQXJyYXkodCksbj10LTEsYT0wO24+PTA7bi0tLGErKyl7dmFyIGk9ZVtuXTtyW2FdPVsxLWlbMF0saVsxXV19cmV0dXJuIHJ9ZnVuY3Rpb24gaChlLHQpe3Q9dHx8e307Zm9yKHZhciByPWUuZG9tYWluLG89ZS5yYW5nZSxzPW8ubGVuZ3RoLGM9bmV3IEFycmF5KHMpLHU9MDt1PHM7dSsrKXt2YXIgZj1hKG9bdV0pLnRvUmdiKCk7Y1t1XT1bZi5yLGYuZyxmLmIsZi5hXX12YXIgZCxwPW4uc2NhbGUubGluZWFyKCkuZG9tYWluKHIpLnJhbmdlKGMpLmNsYW1wKCEwKSxoPXQubm9OdW1lcmljQ2hlY2ssdj10LnJldHVybkFycmF5O3JldHVybihkPWgmJnY/cDpoP2Z1bmN0aW9uKGUpe3JldHVybiBnKHAoZSkpfTp2P2Z1bmN0aW9uKGUpe3JldHVybiBpKGUpP3AoZSk6YShlKS5pc1ZhbGlkKCk/ZTpsLmRlZmF1bHRMaW5lfTpmdW5jdGlvbihlKXtyZXR1cm4gaShlKT9nKHAoZSkpOmEoZSkuaXNWYWxpZCgpP2U6bC5kZWZhdWx0TGluZX0pLmRvbWFpbj1wLmRvbWFpbixkLnJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIG99LGR9ZnVuY3Rpb24gZyhlKXt2YXIgdD17cjplWzBdLGc6ZVsxXSxiOmVbMl0sYTplWzNdfTtyZXR1cm4gYSh0KS50b1JnYlN0cmluZygpfXQuZXhwb3J0cz17aGFzQ29sb3JzY2FsZTpmdW5jdGlvbihlLHQscil7dmFyIG49dD9vLm5lc3RlZFByb3BlcnR5KGUsdCkuZ2V0KCl8fHt9OmUsYT1uW3J8fCJjb2xvciJdLGw9ITE7aWYoby5pc0FycmF5T3JUeXBlZEFycmF5KGEpKWZvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWlmKGkoYVtjXSkpe2w9ITA7YnJlYWt9cmV0dXJuIG8uaXNQbGFpbk9iamVjdChuKSYmKGx8fCEwPT09bi5zaG93c2NhbGV8fGkobi5jbWluKSYmaShuLmNtYXgpfHxzKG4uY29sb3JzY2FsZSl8fG8uaXNQbGFpbk9iamVjdChuLmNvbG9yYmFyKSl9LGV4dHJhY3RPcHRzOmYsZXh0cmFjdFNjYWxlOmQsZmxpcFNjYWxlOnAsbWFrZUNvbG9yU2NhbGVGdW5jOmgsbWFrZUNvbG9yU2NhbGVGdW5jRnJvbVRyYWNlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGgoZChlKSx0KX19fSx7Ii4uLy4uL2xpYiI6MjAyLCIuLi9jb2xvciI6NzUsIi4vc2NhbGVzIjo5MCxkMzo5LCJmYXN0LWlzbnVtZXJpYyI6MTEsdGlueWNvbG9yMjo1OH1dLDg3OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4vc2NhbGVzIiksYT1lKCIuL2hlbHBlcnMiKTt0LmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToiY29sb3JzY2FsZSIsYXR0cmlidXRlczplKCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOmUoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czplKCIuL2xheW91dF9kZWZhdWx0cyIpLGhhbmRsZURlZmF1bHRzOmUoIi4vZGVmYXVsdHMiKSxjcm9zc1RyYWNlRGVmYXVsdHM6ZSgiLi9jcm9zc190cmFjZV9kZWZhdWx0cyIpLGNhbGM6ZSgiLi9jYWxjIiksc2NhbGVzOm4uc2NhbGVzLGRlZmF1bHRTY2FsZTpuLmRlZmF1bHRTY2FsZSxnZXRTY2FsZTpuLmdldCxpc1ZhbGlkU2NhbGU6bi5pc1ZhbGlkLGhhc0NvbG9yc2NhbGU6YS5oYXNDb2xvcnNjYWxlLGV4dHJhY3RPcHRzOmEuZXh0cmFjdE9wdHMsZXh0cmFjdFNjYWxlOmEuZXh0cmFjdFNjYWxlLGZsaXBTY2FsZTphLmZsaXBTY2FsZSxtYWtlQ29sb3JTY2FsZUZ1bmM6YS5tYWtlQ29sb3JTY2FsZUZ1bmMsbWFrZUNvbG9yU2NhbGVGdW5jRnJvbVRyYWNlOmEubWFrZUNvbG9yU2NhbGVGdW5jRnJvbVRyYWNlfX0seyIuL2F0dHJpYnV0ZXMiOjgyLCIuL2NhbGMiOjgzLCIuL2Nyb3NzX3RyYWNlX2RlZmF1bHRzIjo4NCwiLi9kZWZhdWx0cyI6ODUsIi4vaGVscGVycyI6ODYsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjg4LCIuL2xheW91dF9kZWZhdWx0cyI6ODksIi4vc2NhbGVzIjo5MH1dLDg4OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGE9ZSgiLi9hdHRyaWJ1dGVzIiksaT1lKCIuL3NjYWxlcyIpLnNjYWxlczt0LmV4cG9ydHM9e2VkaXRUeXBlOiJjYWxjIixjb2xvcnNjYWxlOntlZGl0VHlwZToiY2FsYyIsc2VxdWVudGlhbDp7dmFsVHlwZToiY29sb3JzY2FsZSIsZGZsdDppLlJlZHMsZWRpdFR5cGU6ImNhbGMifSxzZXF1ZW50aWFsbWludXM6e3ZhbFR5cGU6ImNvbG9yc2NhbGUiLGRmbHQ6aS5CbHVlcyxlZGl0VHlwZToiY2FsYyJ9LGRpdmVyZ2luZzp7dmFsVHlwZToiY29sb3JzY2FsZSIsZGZsdDppLlJkQnUsZWRpdFR5cGU6ImNhbGMifX0sY29sb3JheGlzOm4oe19pc1N1YnBsb3RPYmo6ITAsZWRpdFR5cGU6ImNhbGMifSxhKCIiLHtjb2xvckF0dHI6ImNvcnJlc3BvbmRpbmcgdHJhY2UgY29sb3IgYXJyYXkocykiLG5vQ29sb3JBeGlzOiEwLHNob3dTY2FsZURmbHQ6ITB9KSl9fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjE5NiwiLi9hdHRyaWJ1dGVzIjo4MiwiLi9zY2FsZXMiOjkwfV0sODk6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vbGliIiksYT1lKCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIiksaT1lKCIuL2xheW91dF9hdHRyaWJ1dGVzIiksbz1lKCIuL2RlZmF1bHRzIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gcihyLGEpe3JldHVybiBuLmNvZXJjZShlLHQsaSxyLGEpfXIoImNvbG9yc2NhbGUuc2VxdWVudGlhbCIpLHIoImNvbG9yc2NhbGUuc2VxdWVudGlhbG1pbnVzIikscigiY29sb3JzY2FsZS5kaXZlcmdpbmciKTt2YXIgbCxzLGM9dC5fY29sb3JBeGVzO2Z1bmN0aW9uIHUoZSx0KXtyZXR1cm4gbi5jb2VyY2UobCxzLGkuY29sb3JheGlzLGUsdCl9Zm9yKHZhciBmIGluIGMpe3ZhciBkPWNbZl07aWYoZFswXSlsPWVbZl18fHt9LChzPWEubmV3Q29udGFpbmVyKHQsZiwiY29sb3JheGlzIikpLl9uYW1lPWYsbyhsLHMsdCx1LHtwcmVmaXg6IiIsY0xldHRlcjoiYyJ9KTtlbHNle2Zvcih2YXIgcD0wO3A8ZFsyXS5sZW5ndGg7cCsrKWRbMl1bcF0oKTtkZWxldGUgdC5fY29sb3JBeGVzW2ZdfX19fSx7Ii4uLy4uL2xpYiI6MjAyLCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjoyMzcsIi4vZGVmYXVsdHMiOjg1LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4OH1dLDkwOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoInRpbnljb2xvcjIiKSxhPXtHcmV5czpbWzAsInJnYigwLDAsMCkiXSxbMSwicmdiKDI1NSwyNTUsMjU1KSJdXSxZbEduQnU6W1swLCJyZ2IoOCwyOSw4OCkiXSxbLjEyNSwicmdiKDM3LDUyLDE0OCkiXSxbLjI1LCJyZ2IoMzQsOTQsMTY4KSJdLFsuMzc1LCJyZ2IoMjksMTQ1LDE5MikiXSxbLjUsInJnYig2NSwxODIsMTk2KSJdLFsuNjI1LCJyZ2IoMTI3LDIwNSwxODcpIl0sWy43NSwicmdiKDE5OSwyMzMsMTgwKSJdLFsuODc1LCJyZ2IoMjM3LDI0OCwyMTcpIl0sWzEsInJnYigyNTUsMjU1LDIxNykiXV0sR3JlZW5zOltbMCwicmdiKDAsNjgsMjcpIl0sWy4xMjUsInJnYigwLDEwOSw0NCkiXSxbLjI1LCJyZ2IoMzUsMTM5LDY5KSJdLFsuMzc1LCJyZ2IoNjUsMTcxLDkzKSJdLFsuNSwicmdiKDExNiwxOTYsMTE4KSJdLFsuNjI1LCJyZ2IoMTYxLDIxNywxNTUpIl0sWy43NSwicmdiKDE5OSwyMzMsMTkyKSJdLFsuODc1LCJyZ2IoMjI5LDI0NSwyMjQpIl0sWzEsInJnYigyNDcsMjUyLDI0NSkiXV0sWWxPclJkOltbMCwicmdiKDEyOCwwLDM4KSJdLFsuMTI1LCJyZ2IoMTg5LDAsMzgpIl0sWy4yNSwicmdiKDIyNywyNiwyOCkiXSxbLjM3NSwicmdiKDI1Miw3OCw0MikiXSxbLjUsInJnYigyNTMsMTQxLDYwKSJdLFsuNjI1LCJyZ2IoMjU0LDE3OCw3NikiXSxbLjc1LCJyZ2IoMjU0LDIxNywxMTgpIl0sWy44NzUsInJnYigyNTUsMjM3LDE2MCkiXSxbMSwicmdiKDI1NSwyNTUsMjA0KSJdXSxCbHVlcmVkOltbMCwicmdiKDAsMCwyNTUpIl0sWzEsInJnYigyNTUsMCwwKSJdXSxSZEJ1OltbMCwicmdiKDUsMTAsMTcyKSJdLFsuMzUsInJnYigxMDYsMTM3LDI0NykiXSxbLjUsInJnYigxOTAsMTkwLDE5MCkiXSxbLjYsInJnYigyMjAsMTcwLDEzMikiXSxbLjcsInJnYigyMzAsMTQ1LDkwKSJdLFsxLCJyZ2IoMTc4LDEwLDI4KSJdXSxSZWRzOltbMCwicmdiKDIyMCwyMjAsMjIwKSJdLFsuMiwicmdiKDI0NSwxOTUsMTU3KSJdLFsuNCwicmdiKDI0NSwxNjAsMTA1KSJdLFsxLCJyZ2IoMTc4LDEwLDI4KSJdXSxCbHVlczpbWzAsInJnYig1LDEwLDE3MikiXSxbLjM1LCJyZ2IoNDAsNjAsMTkwKSJdLFsuNSwicmdiKDcwLDEwMCwyNDUpIl0sWy42LCJyZ2IoOTAsMTIwLDI0NSkiXSxbLjcsInJnYigxMDYsMTM3LDI0NykiXSxbMSwicmdiKDIyMCwyMjAsMjIwKSJdXSxQaWNuaWM6W1swLCJyZ2IoMCwwLDI1NSkiXSxbLjEsInJnYig1MSwxNTMsMjU1KSJdLFsuMiwicmdiKDEwMiwyMDQsMjU1KSJdLFsuMywicmdiKDE1MywyMDQsMjU1KSJdLFsuNCwicmdiKDIwNCwyMDQsMjU1KSJdLFsuNSwicmdiKDI1NSwyNTUsMjU1KSJdLFsuNiwicmdiKDI1NSwyMDQsMjU1KSJdLFsuNywicmdiKDI1NSwxNTMsMjU1KSJdLFsuOCwicmdiKDI1NSwxMDIsMjA0KSJdLFsuOSwicmdiKDI1NSwxMDIsMTAyKSJdLFsxLCJyZ2IoMjU1LDAsMCkiXV0sUmFpbmJvdzpbWzAsInJnYigxNTAsMCw5MCkiXSxbLjEyNSwicmdiKDAsMCwyMDApIl0sWy4yNSwicmdiKDAsMjUsMjU1KSJdLFsuMzc1LCJyZ2IoMCwxNTIsMjU1KSJdLFsuNSwicmdiKDQ0LDI1NSwxNTApIl0sWy42MjUsInJnYigxNTEsMjU1LDApIl0sWy43NSwicmdiKDI1NSwyMzQsMCkiXSxbLjg3NSwicmdiKDI1NSwxMTEsMCkiXSxbMSwicmdiKDI1NSwwLDApIl1dLFBvcnRsYW5kOltbMCwicmdiKDEyLDUxLDEzMSkiXSxbLjI1LCJyZ2IoMTAsMTM2LDE4NikiXSxbLjUsInJnYigyNDIsMjExLDU2KSJdLFsuNzUsInJnYigyNDIsMTQzLDU2KSJdLFsxLCJyZ2IoMjE3LDMwLDMwKSJdXSxKZXQ6W1swLCJyZ2IoMCwwLDEzMSkiXSxbLjEyNSwicmdiKDAsNjAsMTcwKSJdLFsuMzc1LCJyZ2IoNSwyNTUsMjU1KSJdLFsuNjI1LCJyZ2IoMjU1LDI1NSwwKSJdLFsuODc1LCJyZ2IoMjUwLDAsMCkiXSxbMSwicmdiKDEyOCwwLDApIl1dLEhvdDpbWzAsInJnYigwLDAsMCkiXSxbLjMsInJnYigyMzAsMCwwKSJdLFsuNiwicmdiKDI1NSwyMTAsMCkiXSxbMSwicmdiKDI1NSwyNTUsMjU1KSJdXSxCbGFja2JvZHk6W1swLCJyZ2IoMCwwLDApIl0sWy4yLCJyZ2IoMjMwLDAsMCkiXSxbLjQsInJnYigyMzAsMjEwLDApIl0sWy43LCJyZ2IoMjU1LDI1NSwyNTUpIl0sWzEsInJnYigxNjAsMjAwLDI1NSkiXV0sRWFydGg6W1swLCJyZ2IoMCwwLDEzMCkiXSxbLjEsInJnYigwLDE4MCwxODApIl0sWy4yLCJyZ2IoNDAsMjEwLDQwKSJdLFsuNCwicmdiKDIzMCwyMzAsNTApIl0sWy42LCJyZ2IoMTIwLDcwLDIwKSJdLFsxLCJyZ2IoMjU1LDI1NSwyNTUpIl1dLEVsZWN0cmljOltbMCwicmdiKDAsMCwwKSJdLFsuMTUsInJnYigzMCwwLDEwMCkiXSxbLjQsInJnYigxMjAsMCwxMDApIl0sWy42LCJyZ2IoMTYwLDkwLDApIl0sWy44LCJyZ2IoMjMwLDIwMCwwKSJdLFsxLCJyZ2IoMjU1LDI1MCwyMjApIl1dLFZpcmlkaXM6W1swLCIjNDQwMTU0Il0sWy4wNjI3NDUwOTgwMzkyMTU2OSwiIzQ4MTg2YSJdLFsuMTI1NDkwMTk2MDc4NDMxMzcsIiM0NzJkN2IiXSxbLjE4ODIzNTI5NDExNzY0NzA2LCIjNDI0MDg2Il0sWy4yNTA5ODAzOTIxNTY4NjI3NCwiIzNiNTI4YiJdLFsuMzEzNzI1NDkwMTk2MDc4NCwiIzMzNjM4ZCJdLFsuMzc2NDcwNTg4MjM1Mjk0MSwiIzJjNzI4ZSJdLFsuNDM5MjE1Njg2Mjc0NTA5OCwiIzI2ODI4ZSJdLFsuNTAxOTYwNzg0MzEzNzI1NSwiIzIxOTE4YyJdLFsuNTY0NzA1ODgyMzUyOTQxMiwiIzFmYTA4OCJdLFsuNjI3NDUwOTgwMzkyMTU2OSwiIzI4YWU4MCJdLFsuNjkwMTk2MDc4NDMxMzcyNSwiIzNmYmM3MyJdLFsuNzUyOTQxMTc2NDcwNTg4MiwiIzVlYzk2MiJdLFsuODE1Njg2Mjc0NTA5ODAzOSwiIzg0ZDQ0YiJdLFsuODc4NDMxMzcyNTQ5MDE5NiwiI2FkZGMzMCJdLFsuOTQxMTc2NDcwNTg4MjM1MywiI2Q4ZTIxOSJdLFsxLCIjZmRlNzI1Il1dLENpdmlkaXM6W1swLCJyZ2IoMCwzMiw3NikiXSxbLjA1ODgyNCwicmdiKDAsNDIsMTAyKSJdLFsuMTE3NjQ3LCJyZ2IoMCw1MiwxMTApIl0sWy4xNzY0NzEsInJnYigzOSw2MywxMDgpIl0sWy4yMzUyOTQsInJnYig2MCw3NCwxMDcpIl0sWy4yOTQxMTgsInJnYig3Niw4NSwxMDcpIl0sWy4zNTI5NDEsInJnYig5MSw5NSwxMDkpIl0sWy40MTE3NjUsInJnYigxMDQsMTA2LDExMikiXSxbLjQ3MDU4OCwicmdiKDExNywxMTcsMTE3KSJdLFsuNTI5NDEyLCJyZ2IoMTMxLDEyOSwxMjApIl0sWy41ODgyMzUsInJnYigxNDYsMTQwLDEyMCkiXSxbLjY0NzA1OSwicmdiKDE2MSwxNTIsMTE4KSJdLFsuNzA1ODgyLCJyZ2IoMTc2LDE2NSwxMTQpIl0sWy43NjQ3MDYsInJnYigxOTIsMTc3LDEwOSkiXSxbLjgyMzUyOSwicmdiKDIwOSwxOTEsMTAyKSJdLFsuODgyMzUzLCJyZ2IoMjI1LDIwNCw5MikiXSxbLjk0MTE3NiwicmdiKDI0MywyMTksNzkpIl0sWzEsInJnYigyNTUsMjMzLDY5KSJdXX0saT1hLlJkQnU7ZnVuY3Rpb24gbyhlKXt2YXIgdD0wO2lmKCFBcnJheS5pc0FycmF5KGUpfHxlLmxlbmd0aDwyKXJldHVybiExO2lmKCFlWzBdfHwhZVtlLmxlbmd0aC0xXSlyZXR1cm4hMTtpZigwIT0rZVswXVswXXx8MSE9K2VbZS5sZW5ndGgtMV1bMF0pcmV0dXJuITE7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBhPWVbcl07aWYoMiE9PWEubGVuZ3RofHwrYVswXTx0fHwhbihhWzFdKS5pc1ZhbGlkKCkpcmV0dXJuITE7dD0rYVswXX1yZXR1cm4hMH10LmV4cG9ydHM9e3NjYWxlczphLGRlZmF1bHRTY2FsZTppLGdldDpmdW5jdGlvbihlLHQpe2lmKHR8fCh0PWkpLCFlKXJldHVybiB0O2Z1bmN0aW9uIHIoKXt0cnl7ZT1hW2VdfHxKU09OLnBhcnNlKGUpfWNhdGNoKHIpe2U9dH19cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlJiYocigpLCJzdHJpbmciPT10eXBlb2YgZSYmcigpKSxvKGUpP2U6dH0saXNWYWxpZDpmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09YVtlXXx8byhlKX19fSx7dGlueWNvbG9yMjo1OH1dLDkxOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscixuLGEpe3ZhciBpPShlLXIpLyhuLXIpLG89aSt0LyhuLXIpLGw9KGkrbykvMjtyZXR1cm4ibGVmdCI9PT1hfHwiYm90dG9tIj09PWE/aToiY2VudGVyIj09PWF8fCJtaWRkbGUiPT09YT9sOiJyaWdodCI9PT1hfHwidG9wIj09PWE/bzppPDIvMy1sP2k6bz40LzMtbD9vOmx9fSx7fV0sOTI6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vbGliIiksYT1bWyJzdy1yZXNpemUiLCJzLXJlc2l6ZSIsInNlLXJlc2l6ZSJdLFsidy1yZXNpemUiLCJtb3ZlIiwiZS1yZXNpemUiXSxbIm53LXJlc2l6ZSIsIm4tcmVzaXplIiwibmUtcmVzaXplIl1dO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscixpKXtyZXR1cm4gZT0ibGVmdCI9PT1yPzA6ImNlbnRlciI9PT1yPzE6InJpZ2h0Ij09PXI/MjpuLmNvbnN0cmFpbihNYXRoLmZsb29yKDMqZSksMCwyKSx0PSJib3R0b20iPT09aT8wOiJtaWRkbGUiPT09aT8xOiJ0b3AiPT09aT8yOm4uY29uc3RyYWluKE1hdGguZmxvb3IoMyp0KSwwLDIpLGFbdF1bZV19fSx7Ii4uLy4uL2xpYiI6MjAyfV0sOTM6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ci5zZWxlY3RNb2RlPWZ1bmN0aW9uKGUpe3JldHVybiJsYXNzbyI9PT1lfHwic2VsZWN0Ij09PWV9LHIuZHJhd01vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuImRyYXdjbG9zZWRwYXRoIj09PWV8fCJkcmF3b3BlbnBhdGgiPT09ZXx8ImRyYXdsaW5lIj09PWV8fCJkcmF3cmVjdCI9PT1lfHwiZHJhd2NpcmNsZSI9PT1lfSxyLm9wZW5Nb2RlPWZ1bmN0aW9uKGUpe3JldHVybiJkcmF3bGluZSI9PT1lfHwiZHJhd29wZW5wYXRoIj09PWV9LHIucmVjdE1vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuInNlbGVjdCI9PT1lfHwiZHJhd2xpbmUiPT09ZXx8ImRyYXdyZWN0Ij09PWV8fCJkcmF3Y2lyY2xlIj09PWV9LHIuZnJlZU1vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuImxhc3NvIj09PWV8fCJkcmF3Y2xvc2VkcGF0aCI9PT1lfHwiZHJhd29wZW5wYXRoIj09PWV9LHIuc2VsZWN0aW5nT3JEcmF3aW5nPWZ1bmN0aW9uKGUpe3JldHVybiByLmZyZWVNb2RlKGUpfHxyLnJlY3RNb2RlKGUpfX0se31dLDk0OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIm1vdXNlLWV2ZW50LW9mZnNldCIpLGE9ZSgiaGFzLWhvdmVyIiksaT1lKCJoYXMtcGFzc2l2ZS1ldmVudHMiKSxvPWUoIi4uLy4uL2xpYiIpLnJlbW92ZUVsZW1lbnQsbD1lKCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIikscz10LmV4cG9ydHM9e307cy5hbGlnbj1lKCIuL2FsaWduIikscy5nZXRDdXJzb3I9ZSgiLi9jdXJzb3IiKTt2YXIgYz1lKCIuL3VuaG92ZXIiKTtmdW5jdGlvbiB1KCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ZS5jbGFzc05hbWU9ImRyYWdjb3ZlciI7dmFyIHQ9ZS5zdHlsZTtyZXR1cm4gdC5wb3NpdGlvbj0iZml4ZWQiLHQubGVmdD0wLHQucmlnaHQ9MCx0LnRvcD0wLHQuYm90dG9tPTAsdC56SW5kZXg9OTk5OTk5OTk5LHQuYmFja2dyb3VuZD0ibm9uZSIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlKSxlfWZ1bmN0aW9uIGYoZSl7cmV0dXJuIG4oZS5jaGFuZ2VkVG91Y2hlcz9lLmNoYW5nZWRUb3VjaGVzWzBdOmUsZG9jdW1lbnQuYm9keSl9cy51bmhvdmVyPWMud3JhcHBlZCxzLnVuaG92ZXJSYXc9Yy5yYXcscy5pbml0PWZ1bmN0aW9uKGUpe3ZhciB0LHIsbixjLGQscCxoLGcsdj1lLmdkLG09MSx5PXYuX2NvbnRleHQuZG91YmxlQ2xpY2tEZWxheSx4PWUuZWxlbWVudDt2Ll9tb3VzZURvd25UaW1lfHwodi5fbW91c2VEb3duVGltZT0wKSx4LnN0eWxlLnBvaW50ZXJFdmVudHM9ImFsbCIseC5vbm1vdXNlZG93bj1fLGk/KHguX29udG91Y2hzdGFydCYmeC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix4Ll9vbnRvdWNoc3RhcnQpLHguX29udG91Y2hzdGFydD1fLHguYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsXyx7cGFzc2l2ZTohMX0pKTp4Lm9udG91Y2hzdGFydD1fO3ZhciBiPWUuY2xhbXBGbnx8ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBNYXRoLmFicyhlKTxyJiYoZT0wKSxNYXRoLmFicyh0KTxyJiYodD0wKSxbZSx0XX07ZnVuY3Rpb24gXyhpKXt2Ll9kcmFnZ2VkPSExLHYuX2RyYWdnaW5nPSEwO3ZhciBvPWYoaSk7dD1vWzBdLHI9b1sxXSxoPWkudGFyZ2V0LHA9aSxnPTI9PT1pLmJ1dHRvbnN8fGkuY3RybEtleSwidW5kZWZpbmVkIj09dHlwZW9mIGkuY2xpZW50WCYmInVuZGVmaW5lZCI9PXR5cGVvZiBpLmNsaWVudFkmJihpLmNsaWVudFg9dCxpLmNsaWVudFk9ciksKG49KG5ldyBEYXRlKS5nZXRUaW1lKCkpLXYuX21vdXNlRG93blRpbWU8eT9tKz0xOihtPTEsdi5fbW91c2VEb3duVGltZT1uKSxlLnByZXBGbiYmZS5wcmVwRm4oaSx0LHIpLGEmJiFnPyhkPXUoKSkuc3R5bGUuY3Vyc29yPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHgpLmN1cnNvcjphfHwoZD1kb2N1bWVudCxjPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuY3Vyc29yLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5jdXJzb3I9d2luZG93LmdldENvbXB1dGVkU3R5bGUoeCkuY3Vyc29yKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIixUKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsVCksITEhPT1lLmRyYWdtb2RlJiYoaS5wcmV2ZW50RGVmYXVsdCgpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdyksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix3LHtwYXNzaXZlOiExfSkpfWZ1bmN0aW9uIHcobil7bi5wcmV2ZW50RGVmYXVsdCgpO3ZhciBhPWYobiksaT1lLm1pbkRyYWd8fGwuTUlORFJBRyxvPWIoYVswXS10LGFbMV0tcixpKSxjPW9bMF0sdT1vWzFdOyhjfHx1KSYmKHYuX2RyYWdnZWQ9ITAscy51bmhvdmVyKHYpKSx2Ll9kcmFnZ2VkJiZlLm1vdmVGbiYmIWcmJih2Ll9kcmFnZGF0YT17ZWxlbWVudDp4LGR4OmMsZHk6dX0sZS5tb3ZlRm4oYyx1KSl9ZnVuY3Rpb24gVCh0KXtpZihkZWxldGUgdi5fZHJhZ2RhdGEsITEhPT1lLmRyYWdtb2RlJiYodC5wcmV2ZW50RGVmYXVsdCgpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdyksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix3KSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsVCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLFQpLGE/byhkKTpjJiYoZC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuY3Vyc29yPWMsYz1udWxsKSx2Ll9kcmFnZ2luZyl7aWYodi5fZHJhZ2dpbmc9ITEsKG5ldyBEYXRlKS5nZXRUaW1lKCktdi5fbW91c2VEb3duVGltZT55JiYobT1NYXRoLm1heChtLTEsMSkpLHYuX2RyYWdnZWQpZS5kb25lRm4mJmUuZG9uZUZuKCk7ZWxzZSBpZihlLmNsaWNrRm4mJmUuY2xpY2tGbihtLHApLCFnKXt2YXIgcjt0cnl7cj1uZXcgTW91c2VFdmVudCgiY2xpY2siLHQpfWNhdGNoKGUpe3ZhciBuPWYodCk7KHI9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoIk1vdXNlRXZlbnRzIikpLmluaXRNb3VzZUV2ZW50KCJjbGljayIsdC5idWJibGVzLHQuY2FuY2VsYWJsZSx0LnZpZXcsdC5kZXRhaWwsdC5zY3JlZW5YLHQuc2NyZWVuWSxuWzBdLG5bMV0sdC5jdHJsS2V5LHQuYWx0S2V5LHQuc2hpZnRLZXksdC5tZXRhS2V5LHQuYnV0dG9uLHQucmVsYXRlZFRhcmdldCl9aC5kaXNwYXRjaEV2ZW50KHIpfXYuX2RyYWdnaW5nPSExLHYuX2RyYWdnZWQ9ITF9ZWxzZSB2Ll9kcmFnZ2VkPSExfX0scy5jb3ZlclNsaXA9dX0seyIuLi8uLi9saWIiOjIwMiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyI6MjU0LCIuL2FsaWduIjo5MSwiLi9jdXJzb3IiOjkyLCIuL3VuaG92ZXIiOjk1LCJoYXMtaG92ZXIiOjQyLCJoYXMtcGFzc2l2ZS1ldmVudHMiOjQzLCJtb3VzZS1ldmVudC1vZmZzZXQiOjQ3fV0sOTU6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vbGliL2V2ZW50cyIpLGE9ZSgiLi4vLi4vbGliL3Rocm90dGxlIiksaT1lKCIuLi8uLi9saWIvZG9tIikuZ2V0R3JhcGhEaXYsbz1lKCIuLi9meC9jb25zdGFudHMiKSxsPXQuZXhwb3J0cz17fTtsLndyYXBwZWQ9ZnVuY3Rpb24oZSx0LHIpeyhlPWkoZSkpLl9mdWxsTGF5b3V0JiZhLmNsZWFyKGUuX2Z1bGxMYXlvdXQuX3VpZCtvLkhPVkVSSUQpLGwucmF3KGUsdCxyKX0sbC5yYXc9ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLl9mdWxsTGF5b3V0LGE9ZS5faG92ZXJkYXRhO3R8fCh0PXt9KSx0LnRhcmdldCYmITE9PT1uLnRyaWdnZXJIYW5kbGVyKGUsInBsb3RseV9iZWZvcmVob3ZlciIsdCl8fChyLl9ob3ZlcmxheWVyLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpLHIuX2hvdmVybGF5ZXIuc2VsZWN0QWxsKCJsaW5lIikucmVtb3ZlKCksci5faG92ZXJsYXllci5zZWxlY3RBbGwoImNpcmNsZSIpLnJlbW92ZSgpLGUuX2hvdmVyZGF0YT12b2lkIDAsdC50YXJnZXQmJmEmJmUuZW1pdCgicGxvdGx5X3VuaG92ZXIiLHtldmVudDp0LHBvaW50czphfSkpfX0seyIuLi8uLi9saWIvZG9tIjoxOTQsIi4uLy4uL2xpYi9ldmVudHMiOjE5NSwiLi4vLi4vbGliL3Rocm90dGxlIjoyMjUsIi4uL2Z4L2NvbnN0YW50cyI6MTA5fV0sOTY6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ci5kYXNoPXt2YWxUeXBlOiJzdHJpbmciLHZhbHVlczpbInNvbGlkIiwiZG90IiwiZGFzaCIsImxvbmdkYXNoIiwiZGFzaGRvdCIsImxvbmdkYXNoZG90Il0sZGZsdDoic29saWQiLGVkaXRUeXBlOiJzdHlsZSJ9fSx7fV0sOTc6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiZDMiKSxhPWUoImZhc3QtaXNudW1lcmljIiksaT1lKCJ0aW55Y29sb3IyIiksbz1lKCIuLi8uLi9yZWdpc3RyeSIpLGw9ZSgiLi4vY29sb3IiKSxzPWUoIi4uL2NvbG9yc2NhbGUiKSxjPWUoIi4uLy4uL2xpYiIpLHU9Yy5zdHJUcmFuc2xhdGUsZj1lKCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxkPWUoIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIikscD1lKCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuTElORV9TUEFDSU5HLGg9ZSgiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyIpLkRFU0VMRUNURElNLGc9ZSgiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXMiKSx2PWUoIi4uLy4uL3RyYWNlcy9zY2F0dGVyL21ha2VfYnViYmxlX3NpemVfZnVuYyIpLG09ZSgiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIikuYXBwZW5kQXJyYXlQb2ludFZhbHVlLHk9dC5leHBvcnRzPXt9O3kuZm9udD1mdW5jdGlvbihlLHQscixuKXtjLmlzUGxhaW5PYmplY3QodCkmJihuPXQuY29sb3Iscj10LnNpemUsdD10LmZhbWlseSksdCYmZS5zdHlsZSgiZm9udC1mYW1pbHkiLHQpLHIrMSYmZS5zdHlsZSgiZm9udC1zaXplIixyKyJweCIpLG4mJmUuY2FsbChsLmZpbGwsbil9LHkuc2V0UG9zaXRpb249ZnVuY3Rpb24oZSx0LHIpe2UuYXR0cigieCIsdCkuYXR0cigieSIscil9LHkuc2V0U2l6ZT1mdW5jdGlvbihlLHQscil7ZS5hdHRyKCJ3aWR0aCIsdCkuYXR0cigiaGVpZ2h0IixyKX0seS5zZXRSZWN0PWZ1bmN0aW9uKGUsdCxyLG4sYSl7ZS5jYWxsKHkuc2V0UG9zaXRpb24sdCxyKS5jYWxsKHkuc2V0U2l6ZSxuLGEpfSx5LnRyYW5zbGF0ZVBvaW50PWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBpPXIuYzJwKGUueCksbz1uLmMycChlLnkpO3JldHVybiEhKGEoaSkmJmEobykmJnQubm9kZSgpKSYmKCJ0ZXh0Ij09PXQubm9kZSgpLm5vZGVOYW1lP3QuYXR0cigieCIsaSkuYXR0cigieSIsbyk6dC5hdHRyKCJ0cmFuc2Zvcm0iLHUoaSxvKSksITApfSx5LnRyYW5zbGF0ZVBvaW50cz1mdW5jdGlvbihlLHQscil7ZS5lYWNoKChmdW5jdGlvbihlKXt2YXIgYT1uLnNlbGVjdCh0aGlzKTt5LnRyYW5zbGF0ZVBvaW50KGUsYSx0LHIpfSkpfSx5LmhpZGVPdXRzaWRlUmFuZ2VQb2ludD1mdW5jdGlvbihlLHQscixuLGEsaSl7dC5hdHRyKCJkaXNwbGF5IixyLmlzUHRXaXRoaW5SYW5nZShlLGEpJiZuLmlzUHRXaXRoaW5SYW5nZShlLGkpP251bGw6Im5vbmUiKX0seS5oaWRlT3V0c2lkZVJhbmdlUG9pbnRzPWZ1bmN0aW9uKGUsdCl7aWYodC5faGFzQ2xpcE9uQXhpc0ZhbHNlKXt2YXIgcj10LnhheGlzLGE9dC55YXhpcztlLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBpPXRbMF0udHJhY2UsbD1pLnhjYWxlbmRhcixzPWkueWNhbGVuZGFyLGM9by50cmFjZUlzKGksImJhci1saWtlIik/Ii5iYXJ0ZXh0IjoiLnBvaW50LC50ZXh0cG9pbnQiO2Uuc2VsZWN0QWxsKGMpLmVhY2goKGZ1bmN0aW9uKGUpe3kuaGlkZU91dHNpZGVSYW5nZVBvaW50KGUsbi5zZWxlY3QodGhpcykscixhLGwscyl9KSl9KSl9fSx5LmNyaXNwUm91bmQ9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0JiZhKHQpP2UuX2NvbnRleHQuc3RhdGljUGxvdD90OnQ8MT8xOk1hdGgucm91bmQodCk6cnx8MH0seS5zaW5nbGVMaW5lU3R5bGU9ZnVuY3Rpb24oZSx0LHIsbixhKXt0LnN0eWxlKCJmaWxsIiwibm9uZSIpO3ZhciBpPSgoKGV8fFtdKVswXXx8e30pLnRyYWNlfHx7fSkubGluZXx8e30sbz1yfHxpLndpZHRofHwwLHM9YXx8aS5kYXNofHwiIjtsLnN0cm9rZSh0LG58fGkuY29sb3IpLHkuZGFzaExpbmUodCxzLG8pfSx5LmxpbmVHcm91cFN0eWxlPWZ1bmN0aW9uKGUsdCxyLGEpe2Uuc3R5bGUoImZpbGwiLCJub25lIikuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIGk9KCgoZXx8W10pWzBdfHx7fSkudHJhY2V8fHt9KS5saW5lfHx7fSxvPXR8fGkud2lkdGh8fDAscz1hfHxpLmRhc2h8fCIiO24uc2VsZWN0KHRoaXMpLmNhbGwobC5zdHJva2Uscnx8aS5jb2xvcikuY2FsbCh5LmRhc2hMaW5lLHMsbyl9KSl9LHkuZGFzaExpbmU9ZnVuY3Rpb24oZSx0LHIpe3I9K3J8fDAsdD15LmRhc2hTdHlsZSh0LHIpLGUuc3R5bGUoeyJzdHJva2UtZGFzaGFycmF5Ijp0LCJzdHJva2Utd2lkdGgiOnIrInB4In0pfSx5LmRhc2hTdHlsZT1mdW5jdGlvbihlLHQpe3Q9K3R8fDE7dmFyIHI9TWF0aC5tYXgodCwzKTtyZXR1cm4ic29saWQiPT09ZT9lPSIiOiJkb3QiPT09ZT9lPXIrInB4LCIrcisicHgiOiJkYXNoIj09PWU/ZT0zKnIrInB4LCIrMypyKyJweCI6ImxvbmdkYXNoIj09PWU/ZT01KnIrInB4LCIrNSpyKyJweCI6ImRhc2hkb3QiPT09ZT9lPTMqcisicHgsIityKyJweCwiK3IrInB4LCIrcisicHgiOiJsb25nZGFzaGRvdCI9PT1lJiYoZT01KnIrInB4LCIrMipyKyJweCwiK3IrInB4LCIrMipyKyJweCIpLGV9LHkuc2luZ2xlRmlsbFN0eWxlPWZ1bmN0aW9uKGUpe3ZhciB0PSgoKG4uc2VsZWN0KGUubm9kZSgpKS5kYXRhKClbMF18fFtdKVswXXx8e30pLnRyYWNlfHx7fSkuZmlsbGNvbG9yO3QmJmUuY2FsbChsLmZpbGwsdCl9LHkuZmlsbEdyb3VwU3R5bGU9ZnVuY3Rpb24oZSl7ZS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwwKS5lYWNoKChmdW5jdGlvbihlKXt2YXIgdD1uLnNlbGVjdCh0aGlzKTtlWzBdLnRyYWNlJiZ0LmNhbGwobC5maWxsLGVbMF0udHJhY2UuZmlsbGNvbG9yKX0pKX07dmFyIHg9ZSgiLi9zeW1ib2xfZGVmcyIpO3kuc3ltYm9sTmFtZXM9W10seS5zeW1ib2xGdW5jcz1bXSx5LnN5bWJvbE5lZWRMaW5lcz17fSx5LnN5bWJvbE5vRG90PXt9LHkuc3ltYm9sTm9GaWxsPXt9LHkuc3ltYm9sTGlzdD1bXSxPYmplY3Qua2V5cyh4KS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdD14W2VdLHI9dC5uO3kuc3ltYm9sTGlzdC5wdXNoKHIsU3RyaW5nKHIpLGUscisxMDAsU3RyaW5nKHIrMTAwKSxlKyItb3BlbiIpLHkuc3ltYm9sTmFtZXNbcl09ZSx5LnN5bWJvbEZ1bmNzW3JdPXQuZix0Lm5lZWRMaW5lJiYoeS5zeW1ib2xOZWVkTGluZXNbcl09ITApLHQubm9Eb3Q/eS5zeW1ib2xOb0RvdFtyXT0hMDp5LnN5bWJvbExpc3QucHVzaChyKzIwMCxTdHJpbmcocisyMDApLGUrIi1kb3QiLHIrMzAwLFN0cmluZyhyKzMwMCksZSsiLW9wZW4tZG90IiksdC5ub0ZpbGwmJih5LnN5bWJvbE5vRmlsbFtyXT0hMCl9KSk7dmFyIGI9eS5zeW1ib2xOYW1lcy5sZW5ndGg7ZnVuY3Rpb24gXyhlLHQpe3ZhciByPWUlMTAwO3JldHVybiB5LnN5bWJvbEZ1bmNzW3JdKHQpKyhlPj0yMDA/Ik0wLDAuNUwwLjUsMEwwLC0wLjVMLTAuNSwwWiI6IiIpfXkuc3ltYm9sTnVtYmVyPWZ1bmN0aW9uKGUpe2lmKGEoZSkpZT0rZTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgZSl7dmFyIHQ9MDtlLmluZGV4T2YoIi1vcGVuIik+MCYmKHQ9MTAwLGU9ZS5yZXBsYWNlKCItb3BlbiIsIiIpKSxlLmluZGV4T2YoIi1kb3QiKT4wJiYodCs9MjAwLGU9ZS5yZXBsYWNlKCItZG90IiwiIikpLChlPXkuc3ltYm9sTmFtZXMuaW5kZXhPZihlKSk+PTAmJihlKz10KX1yZXR1cm4gZSUxMDA+PWJ8fGU+PTQwMD8wOk1hdGguZmxvb3IoTWF0aC5tYXgoZSwwKSl9O3ZhciB3PXt4MToxLHgyOjAseTE6MCx5MjowfSxUPXt4MTowLHgyOjAseTE6MSx5MjowfSxrPW4uZm9ybWF0KCJ+LjFmIiksTT17cmFkaWFsOntub2RlOiJyYWRpYWxHcmFkaWVudCJ9LHJhZGlhbHJldmVyc2VkOntub2RlOiJyYWRpYWxHcmFkaWVudCIscmV2ZXJzZWQ6ITB9LGhvcml6b250YWw6e25vZGU6ImxpbmVhckdyYWRpZW50IixhdHRyczp3fSxob3Jpem9udGFscmV2ZXJzZWQ6e25vZGU6ImxpbmVhckdyYWRpZW50IixhdHRyczp3LHJldmVyc2VkOiEwfSx2ZXJ0aWNhbDp7bm9kZToibGluZWFyR3JhZGllbnQiLGF0dHJzOlR9LHZlcnRpY2FscmV2ZXJzZWQ6e25vZGU6ImxpbmVhckdyYWRpZW50IixhdHRyczpULHJldmVyc2VkOiEwfX07eS5ncmFkaWVudD1mdW5jdGlvbihlLHQscixhLG8scyl7Zm9yKHZhciB1PW8ubGVuZ3RoLGY9TVthXSxkPW5ldyBBcnJheSh1KSxwPTA7cDx1O3ArKylmLnJldmVyc2VkP2RbdS0xLXBdPVtrKDEwMCooMS1vW3BdWzBdKSksb1twXVsxXV06ZFtwXT1baygxMDAqb1twXVswXSksb1twXVsxXV07dmFyIGg9dC5fZnVsbExheW91dCxnPSJnIitoLl91aWQrIi0iK3Isdj1oLl9kZWZzLnNlbGVjdCgiLmdyYWRpZW50cyIpLnNlbGVjdEFsbCgiIyIrZykuZGF0YShbYStkLmpvaW4oIjsiKV0sYy5pZGVudGl0eSk7di5leGl0KCkucmVtb3ZlKCksdi5lbnRlcigpLmFwcGVuZChmLm5vZGUpLmVhY2goKGZ1bmN0aW9uKCl7dmFyIGU9bi5zZWxlY3QodGhpcyk7Zi5hdHRycyYmZS5hdHRyKGYuYXR0cnMpLGUuYXR0cigiaWQiLGcpO3ZhciB0PWUuc2VsZWN0QWxsKCJzdG9wIikuZGF0YShkKTt0LmV4aXQoKS5yZW1vdmUoKSx0LmVudGVyKCkuYXBwZW5kKCJzdG9wIiksdC5lYWNoKChmdW5jdGlvbihlKXt2YXIgdD1pKGVbMV0pO24uc2VsZWN0KHRoaXMpLmF0dHIoe29mZnNldDplWzBdKyIlIiwic3RvcC1jb2xvciI6bC50aW55UkdCKHQpLCJzdG9wLW9wYWNpdHkiOnQuZ2V0QWxwaGEoKX0pfSkpfSkpLGUuc3R5bGUocyxSKGcsdCkpLnN0eWxlKHMrIi1vcGFjaXR5IixudWxsKTt2YXIgbT1mdW5jdGlvbihlKXtyZXR1cm4iLiIrZS5hdHRyKCJjbGFzcyIpLnJlcGxhY2UoL1xzL2csIi4iKX0seT1tKG4uc2VsZWN0KGUubm9kZSgpLnBhcmVudE5vZGUpKSsiPiIrbShlKTtoLl9ncmFkaWVudFVybFF1ZXJ5UGFydHNbeV09MX0seS5pbml0R3JhZGllbnRzPWZ1bmN0aW9uKGUpe3ZhciB0PWUuX2Z1bGxMYXlvdXQ7Yy5lbnN1cmVTaW5nbGUodC5fZGVmcywiZyIsImdyYWRpZW50cyIpLnNlbGVjdEFsbCgibGluZWFyR3JhZGllbnQscmFkaWFsR3JhZGllbnQiKS5yZW1vdmUoKSx0Ll9ncmFkaWVudFVybFF1ZXJ5UGFydHM9e319LHkucG9pbnRTdHlsZT1mdW5jdGlvbihlLHQscil7aWYoZS5zaXplKCkpe3ZhciBhPXkubWFrZVBvaW50U3R5bGVGbnModCk7ZS5lYWNoKChmdW5jdGlvbihlKXt5LnNpbmdsZVBvaW50U3R5bGUoZSxuLnNlbGVjdCh0aGlzKSx0LGEscil9KSl9fSx5LnNpbmdsZVBvaW50U3R5bGU9ZnVuY3Rpb24oZSx0LHIsbixhKXt2YXIgaT1yLm1hcmtlcixvPWkubGluZTtpZih0LnN0eWxlKCJvcGFjaXR5IixuLnNlbGVjdGVkT3BhY2l0eUZuP24uc2VsZWN0ZWRPcGFjaXR5Rm4oZSk6dm9pZCAwPT09ZS5tbz9pLm9wYWNpdHk6ZS5tbyksbi5tczJtcmMpe3ZhciBzO3M9InZhcmlvdXMiPT09ZS5tc3x8InZhcmlvdXMiPT09aS5zaXplPzM6bi5tczJtcmMoZS5tcyksZS5tcmM9cyxuLnNlbGVjdGVkU2l6ZUZuJiYocz1lLm1yYz1uLnNlbGVjdGVkU2l6ZUZuKGUpKTt2YXIgdT15LnN5bWJvbE51bWJlcihlLm14fHxpLnN5bWJvbCl8fDA7ZS5vbT11JTIwMD49MTAwLHQuYXR0cigiZCIsXyh1LHMpKX12YXIgZixkLHAsaD0hMTtpZihlLnNvKXA9by5vdXRsaWVyd2lkdGgsZD1vLm91dGxpZXJjb2xvcixmPWkub3V0bGllcmNvbG9yO2Vsc2V7dmFyIGc9KG98fHt9KS53aWR0aDtwPShlLm1sdysxfHxnKzF8fChlLnRyYWNlPyhlLnRyYWNlLm1hcmtlci5saW5lfHx7fSkud2lkdGg6MCkrMSktMXx8MCxkPSJtbGMiaW4gZT9lLm1sY2M9bi5saW5lU2NhbGUoZS5tbGMpOmMuaXNBcnJheU9yVHlwZWRBcnJheShvLmNvbG9yKT9sLmRlZmF1bHRMaW5lOm8uY29sb3IsYy5pc0FycmF5T3JUeXBlZEFycmF5KGkuY29sb3IpJiYoZj1sLmRlZmF1bHRMaW5lLGg9ITApLGY9Im1jImluIGU/ZS5tY2M9bi5tYXJrZXJTY2FsZShlLm1jKTppLmNvbG9yfHwicmdiYSgwLDAsMCwwKSIsbi5zZWxlY3RlZENvbG9yRm4mJihmPW4uc2VsZWN0ZWRDb2xvckZuKGUpKX1pZihlLm9tKXQuY2FsbChsLnN0cm9rZSxmKS5zdHlsZSh7InN0cm9rZS13aWR0aCI6KHB8fDEpKyJweCIsZmlsbDoibm9uZSJ9KTtlbHNle3Quc3R5bGUoInN0cm9rZS13aWR0aCIsKGUuaXNCbGFuaz8wOnApKyJweCIpO3ZhciB2PWkuZ3JhZGllbnQsbT1lLm1ndDtpZihtP2g9ITA6bT12JiZ2LnR5cGUsQXJyYXkuaXNBcnJheShtKSYmKG09bVswXSxNW21dfHwobT0wKSksbSYmIm5vbmUiIT09bSl7dmFyIHg9ZS5tZ2M7eD9oPSEwOng9di5jb2xvcjt2YXIgYj1yLnVpZDtoJiYoYis9Ii0iK2UuaSkseS5ncmFkaWVudCh0LGEsYixtLFtbMCx4XSxbMSxmXV0sImZpbGwiKX1lbHNlIGwuZmlsbCh0LGYpO3AmJmwuc3Ryb2tlKHQsZCl9fSx5Lm1ha2VQb2ludFN0eWxlRm5zPWZ1bmN0aW9uKGUpe3ZhciB0PXt9LHI9ZS5tYXJrZXI7cmV0dXJuIHQubWFya2VyU2NhbGU9eS50cnlDb2xvcnNjYWxlKHIsIiIpLHQubGluZVNjYWxlPXkudHJ5Q29sb3JzY2FsZShyLCJsaW5lIiksby50cmFjZUlzKGUsInN5bWJvbHMiKSYmKHQubXMybXJjPWcuaXNCdWJibGUoZSk/dihlKTpmdW5jdGlvbigpe3JldHVybihyLnNpemV8fDYpLzJ9KSxlLnNlbGVjdGVkcG9pbnRzJiZjLmV4dGVuZEZsYXQodCx5Lm1ha2VTZWxlY3RlZFBvaW50U3R5bGVGbnMoZSkpLHR9LHkubWFrZVNlbGVjdGVkUG9pbnRTdHlsZUZucz1mdW5jdGlvbihlKXt2YXIgdD17fSxyPWUuc2VsZWN0ZWR8fHt9LG49ZS51bnNlbGVjdGVkfHx7fSxhPWUubWFya2VyfHx7fSxpPXIubWFya2VyfHx7fSxsPW4ubWFya2VyfHx7fSxzPWEub3BhY2l0eSx1PWkub3BhY2l0eSxmPWwub3BhY2l0eSxkPXZvaWQgMCE9PXUscD12b2lkIDAhPT1mOyhjLmlzQXJyYXlPclR5cGVkQXJyYXkocyl8fGR8fHApJiYodC5zZWxlY3RlZE9wYWNpdHlGbj1mdW5jdGlvbihlKXt2YXIgdD12b2lkIDA9PT1lLm1vP2Eub3BhY2l0eTplLm1vO3JldHVybiBlLnNlbGVjdGVkP2Q/dTp0OnA/ZjpoKnR9KTt2YXIgZz1hLmNvbG9yLHY9aS5jb2xvcixtPWwuY29sb3I7KHZ8fG0pJiYodC5zZWxlY3RlZENvbG9yRm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5tY2N8fGc7cmV0dXJuIGUuc2VsZWN0ZWQ/dnx8dDptfHx0fSk7dmFyIHk9YS5zaXplLHg9aS5zaXplLGI9bC5zaXplLF89dm9pZCAwIT09eCx3PXZvaWQgMCE9PWI7cmV0dXJuIG8udHJhY2VJcyhlLCJzeW1ib2xzIikmJihffHx3KSYmKHQuc2VsZWN0ZWRTaXplRm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5tcmN8fHkvMjtyZXR1cm4gZS5zZWxlY3RlZD9fP3gvMjp0Onc/Yi8yOnR9KSx0fSx5Lm1ha2VTZWxlY3RlZFRleHRTdHlsZUZucz1mdW5jdGlvbihlKXt2YXIgdD17fSxyPWUuc2VsZWN0ZWR8fHt9LG49ZS51bnNlbGVjdGVkfHx7fSxhPWUudGV4dGZvbnR8fHt9LGk9ci50ZXh0Zm9udHx8e30sbz1uLnRleHRmb250fHx7fSxzPWEuY29sb3IsYz1pLmNvbG9yLHU9by5jb2xvcjtyZXR1cm4gdC5zZWxlY3RlZFRleHRDb2xvckZuPWZ1bmN0aW9uKGUpe3ZhciB0PWUudGN8fHM7cmV0dXJuIGUuc2VsZWN0ZWQ/Y3x8dDp1fHwoYz90OmwuYWRkT3BhY2l0eSh0LGgpKX0sdH0seS5zZWxlY3RlZFBvaW50U3R5bGU9ZnVuY3Rpb24oZSx0KXtpZihlLnNpemUoKSYmdC5zZWxlY3RlZHBvaW50cyl7dmFyIHI9eS5tYWtlU2VsZWN0ZWRQb2ludFN0eWxlRm5zKHQpLGE9dC5tYXJrZXJ8fHt9LGk9W107ci5zZWxlY3RlZE9wYWNpdHlGbiYmaS5wdXNoKChmdW5jdGlvbihlLHQpe2Uuc3R5bGUoIm9wYWNpdHkiLHIuc2VsZWN0ZWRPcGFjaXR5Rm4odCkpfSkpLHIuc2VsZWN0ZWRDb2xvckZuJiZpLnB1c2goKGZ1bmN0aW9uKGUsdCl7bC5maWxsKGUsci5zZWxlY3RlZENvbG9yRm4odCkpfSkpLHIuc2VsZWN0ZWRTaXplRm4mJmkucHVzaCgoZnVuY3Rpb24oZSx0KXt2YXIgbj10Lm14fHxhLnN5bWJvbHx8MCxpPXIuc2VsZWN0ZWRTaXplRm4odCk7ZS5hdHRyKCJkIixfKHkuc3ltYm9sTnVtYmVyKG4pLGkpKSx0Lm1yYzI9aX0pKSxpLmxlbmd0aCYmZS5lYWNoKChmdW5jdGlvbihlKXtmb3IodmFyIHQ9bi5zZWxlY3QodGhpcykscj0wO3I8aS5sZW5ndGg7cisrKWlbcl0odCxlKX0pKX19LHkudHJ5Q29sb3JzY2FsZT1mdW5jdGlvbihlLHQpe3ZhciByPXQ/Yy5uZXN0ZWRQcm9wZXJ0eShlLHQpLmdldCgpOmU7aWYocil7dmFyIG49ci5jb2xvcjtpZigoci5jb2xvcnNjYWxlfHxyLl9jb2xvckF4KSYmYy5pc0FycmF5T3JUeXBlZEFycmF5KG4pKXJldHVybiBzLm1ha2VDb2xvclNjYWxlRnVuY0Zyb21UcmFjZShyKX1yZXR1cm4gYy5pZGVudGl0eX07dmFyIEE9e3N0YXJ0OjEsZW5kOi0xLG1pZGRsZTowLGJvdHRvbToxLHRvcDotMX07ZnVuY3Rpb24gTChlLHQscixhKXt2YXIgaT1uLnNlbGVjdChlLm5vZGUoKS5wYXJlbnROb2RlKSxvPS0xIT09dC5pbmRleE9mKCJ0b3AiKT8idG9wIjotMSE9PXQuaW5kZXhPZigiYm90dG9tIik/ImJvdHRvbSI6Im1pZGRsZSIsbD0tMSE9PXQuaW5kZXhPZigibGVmdCIpPyJlbmQiOi0xIT09dC5pbmRleE9mKCJyaWdodCIpPyJzdGFydCI6Im1pZGRsZSIscz1hP2EvLjgrMTowLGM9KGYubGluZUNvdW50KGUpLTEpKnArMSxkPUFbbF0qcyxoPS43NSpyK0Fbb10qcysoQVtvXS0xKSpjKnIvMjtlLmF0dHIoInRleHQtYW5jaG9yIixsKSxpLmF0dHIoInRyYW5zZm9ybSIsdShkLGgpKX1mdW5jdGlvbiBTKGUsdCl7dmFyIHI9ZS50c3x8dC50ZXh0Zm9udC5zaXplO3JldHVybiBhKHIpJiZyPjA/cjowfXkudGV4dFBvaW50U3R5bGU9ZnVuY3Rpb24oZSx0LHIpe2lmKGUuc2l6ZSgpKXt2YXIgYTtpZih0LnNlbGVjdGVkcG9pbnRzKXt2YXIgaT15Lm1ha2VTZWxlY3RlZFRleHRTdHlsZUZucyh0KTthPWkuc2VsZWN0ZWRUZXh0Q29sb3JGbn12YXIgbz10LnRleHR0ZW1wbGF0ZSxsPXIuX2Z1bGxMYXlvdXQ7ZS5lYWNoKChmdW5jdGlvbihlKXt2YXIgaT1uLnNlbGVjdCh0aGlzKSxzPW8/Yy5leHRyYWN0T3B0aW9uKGUsdCwidHh0IiwidGV4dHRlbXBsYXRlIik6Yy5leHRyYWN0T3B0aW9uKGUsdCwidHgiLCJ0ZXh0Iik7aWYoc3x8MD09PXMpe2lmKG8pe3ZhciB1PXQuX21vZHVsZS5mb3JtYXRMYWJlbHM/dC5fbW9kdWxlLmZvcm1hdExhYmVscyhlLHQsbCk6e30sZD17fTttKGQsdCxlLmkpO3ZhciBwPXQuX21ldGF8fHt9O3M9Yy50ZXh0dGVtcGxhdGVTdHJpbmcocyx1LGwuX2QzbG9jYWxlLGQsZSxwKX12YXIgaD1lLnRwfHx0LnRleHRwb3NpdGlvbixnPVMoZSx0KSx2PWE/YShlKTplLnRjfHx0LnRleHRmb250LmNvbG9yO2kuY2FsbCh5LmZvbnQsZS50Znx8dC50ZXh0Zm9udC5mYW1pbHksZyx2KS50ZXh0KHMpLmNhbGwoZi5jb252ZXJ0VG9Uc3BhbnMscikuY2FsbChMLGgsZyxlLm1yYyl9ZWxzZSBpLnJlbW92ZSgpfSkpfX0seS5zZWxlY3RlZFRleHRTdHlsZT1mdW5jdGlvbihlLHQpe2lmKGUuc2l6ZSgpJiZ0LnNlbGVjdGVkcG9pbnRzKXt2YXIgcj15Lm1ha2VTZWxlY3RlZFRleHRTdHlsZUZucyh0KTtlLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciBhPW4uc2VsZWN0KHRoaXMpLGk9ci5zZWxlY3RlZFRleHRDb2xvckZuKGUpLG89ZS50cHx8dC50ZXh0cG9zaXRpb24scz1TKGUsdCk7bC5maWxsKGEsaSksTChhLG8scyxlLm1yYzJ8fGUubXJjKX0pKX19O2Z1bmN0aW9uIEMoZSx0LHIsYSl7dmFyIGk9ZVswXS10WzBdLG89ZVsxXS10WzFdLGw9clswXS10WzBdLHM9clsxXS10WzFdLGM9TWF0aC5wb3coaSppK28qbywuMjUpLHU9TWF0aC5wb3cobCpsK3MqcywuMjUpLGY9KHUqdSppLWMqYypsKSphLGQ9KHUqdSpvLWMqYypzKSphLHA9Myp1KihjK3UpLGg9MypjKihjK3UpO3JldHVybltbbi5yb3VuZCh0WzBdKyhwJiZmL3ApLDIpLG4ucm91bmQodFsxXSsocCYmZC9wKSwyKV0sW24ucm91bmQodFswXS0oaCYmZi9oKSwyKSxuLnJvdW5kKHRbMV0tKGgmJmQvaCksMildXX15LnNtb290aG9wZW49ZnVuY3Rpb24oZSx0KXtpZihlLmxlbmd0aDwzKXJldHVybiJNIitlLmpvaW4oIkwiKTt2YXIgcixuPSJNIitlWzBdLGE9W107Zm9yKHI9MTtyPGUubGVuZ3RoLTE7cisrKWEucHVzaChDKGVbci0xXSxlW3JdLGVbcisxXSx0KSk7Zm9yKG4rPSJRIithWzBdWzBdKyIgIitlWzFdLHI9MjtyPGUubGVuZ3RoLTE7cisrKW4rPSJDIithW3ItMl1bMV0rIiAiK2Fbci0xXVswXSsiICIrZVtyXTtyZXR1cm4gbis9IlEiK2FbZS5sZW5ndGgtM11bMV0rIiAiK2VbZS5sZW5ndGgtMV19LHkuc21vb3RoY2xvc2VkPWZ1bmN0aW9uKGUsdCl7aWYoZS5sZW5ndGg8MylyZXR1cm4iTSIrZS5qb2luKCJMIikrIloiO3ZhciByLG49Ik0iK2VbMF0sYT1lLmxlbmd0aC0xLGk9W0MoZVthXSxlWzBdLGVbMV0sdCldO2ZvcihyPTE7cjxhO3IrKylpLnB1c2goQyhlW3ItMV0sZVtyXSxlW3IrMV0sdCkpO2ZvcihpLnB1c2goQyhlW2EtMV0sZVthXSxlWzBdLHQpKSxyPTE7cjw9YTtyKyspbis9IkMiK2lbci0xXVsxXSsiICIraVtyXVswXSsiICIrZVtyXTtyZXR1cm4gbis9IkMiK2lbYV1bMV0rIiAiK2lbMF1bMF0rIiAiK2VbMF0rIloifTt2YXIgTz17aHY6ZnVuY3Rpb24oZSx0KXtyZXR1cm4iSCIrbi5yb3VuZCh0WzBdLDIpKyJWIituLnJvdW5kKHRbMV0sMil9LHZoOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIlYiK24ucm91bmQodFsxXSwyKSsiSCIrbi5yb3VuZCh0WzBdLDIpfSxodmg6ZnVuY3Rpb24oZSx0KXtyZXR1cm4iSCIrbi5yb3VuZCgoZVswXSt0WzBdKS8yLDIpKyJWIituLnJvdW5kKHRbMV0sMikrIkgiK24ucm91bmQodFswXSwyKX0sdmh2OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIlYiK24ucm91bmQoKGVbMV0rdFsxXSkvMiwyKSsiSCIrbi5yb3VuZCh0WzBdLDIpKyJWIituLnJvdW5kKHRbMV0sMil9fSxEPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIkwiK24ucm91bmQodFswXSwyKSsiLCIrbi5yb3VuZCh0WzFdLDIpfTt5LnN0ZXBzPWZ1bmN0aW9uKGUpe3ZhciB0PU9bZV18fEQ7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj0iTSIrbi5yb3VuZChlWzBdWzBdLDIpKyIsIituLnJvdW5kKGVbMF1bMV0sMiksYT0xO2E8ZS5sZW5ndGg7YSsrKXIrPXQoZVthLTFdLGVbYV0pO3JldHVybiByfX0seS5tYWtlVGVzdGVyPWZ1bmN0aW9uKCl7dmFyIGU9Yy5lbnN1cmVTaW5nbGVCeUlkKG4uc2VsZWN0KCJib2R5IiksInN2ZyIsImpzLXBsb3RseS10ZXN0ZXIiLChmdW5jdGlvbihlKXtlLmF0dHIoZC5zdmdBdHRycykuc3R5bGUoe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDoiLTEwMDAwcHgiLHRvcDoiLTEwMDAwcHgiLHdpZHRoOiI5MDAwcHgiLGhlaWdodDoiOTAwMHB4Iiwiei1pbmRleCI6IjEifSl9KSksdD1jLmVuc3VyZVNpbmdsZShlLCJwYXRoIiwianMtcmVmZXJlbmNlLXBvaW50IiwoZnVuY3Rpb24oZSl7ZS5hdHRyKCJkIiwiTTAsMEgxVjFIMFoiKS5zdHlsZSh7InN0cm9rZS13aWR0aCI6MCxmaWxsOiJibGFjayJ9KX0pKTt5LnRlc3Rlcj1lLHkudGVzdHJlZj10fSx5LnNhdmVkQkJveGVzPXt9O3ZhciBQPTA7ZnVuY3Rpb24geihlKXt2YXIgdD1lLmdldEF0dHJpYnV0ZSgiZGF0YS11bmZvcm1hdHRlZCIpO2lmKG51bGwhPT10KXJldHVybiB0K2UuZ2V0QXR0cmlidXRlKCJkYXRhLW1hdGgiKStlLmdldEF0dHJpYnV0ZSgidGV4dC1hbmNob3IiKStlLmdldEF0dHJpYnV0ZSgic3R5bGUiKX1mdW5jdGlvbiBSKGUsdCl7aWYoIWUpcmV0dXJuIG51bGw7dmFyIHI9dC5fY29udGV4dDtyZXR1cm4idXJsKCciKyhyLl9leHBvcnRlZFBsb3Q/IiI6ci5fYmFzZVVybHx8IiIpKyIjIitlKyInKSJ9eS5iQm94PWZ1bmN0aW9uKGUsdCxyKXt2YXIgYSxpLG87aWYocnx8KHI9eihlKSkscil7aWYoYT15LnNhdmVkQkJveGVzW3JdKXJldHVybiBjLmV4dGVuZEZsYXQoe30sYSl9ZWxzZSBpZigxPT09ZS5jaGlsZE5vZGVzLmxlbmd0aCl7dmFyIGw9ZS5jaGlsZE5vZGVzWzBdO2lmKHI9eihsKSl7dmFyIHM9K2wuZ2V0QXR0cmlidXRlKCJ4Iil8fDAsdT0rbC5nZXRBdHRyaWJ1dGUoInkiKXx8MCxkPWwuZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKTtpZighZCl7dmFyIHA9eS5iQm94KGwsITEscik7cmV0dXJuIHMmJihwLmxlZnQrPXMscC5yaWdodCs9cyksdSYmKHAudG9wKz11LHAuYm90dG9tKz11KSxwfWlmKHIrPSJ+IitzKyJ+Iit1KyJ+IitkLGE9eS5zYXZlZEJCb3hlc1tyXSlyZXR1cm4gYy5leHRlbmRGbGF0KHt9LGEpfX10P2k9ZToobz15LnRlc3Rlci5ub2RlKCksaT1lLmNsb25lTm9kZSghMCksby5hcHBlbmRDaGlsZChpKSksbi5zZWxlY3QoaSkuYXR0cigidHJhbnNmb3JtIixudWxsKS5jYWxsKGYucG9zaXRpb25UZXh0LDAsMCk7dmFyIGg9aS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxnPXkudGVzdHJlZi5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dHx8by5yZW1vdmVDaGlsZChpKTt2YXIgdj17aGVpZ2h0OmguaGVpZ2h0LHdpZHRoOmgud2lkdGgsbGVmdDpoLmxlZnQtZy5sZWZ0LHRvcDpoLnRvcC1nLnRvcCxyaWdodDpoLnJpZ2h0LWcubGVmdCxib3R0b206aC5ib3R0b20tZy50b3B9O3JldHVybiBQPj0xZTQmJih5LnNhdmVkQkJveGVzPXt9LFA9MCksciYmKHkuc2F2ZWRCQm94ZXNbcl09diksUCsrLGMuZXh0ZW5kRmxhdCh7fSx2KX0seS5zZXRDbGlwVXJsPWZ1bmN0aW9uKGUsdCxyKXtlLmF0dHIoImNsaXAtcGF0aCIsUih0LHIpKX0seS5nZXRUcmFuc2xhdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9KGVbZS5hdHRyPyJhdHRyIjoiZ2V0QXR0cmlidXRlIl0oInRyYW5zZm9ybSIpfHwiIikucmVwbGFjZSgvLipcYnRyYW5zbGF0ZVwoKC0/XGQqXC4/XGQqKVteLVxkXSooLT9cZCpcLj9cZCopW15cZF0uKi8sKGZ1bmN0aW9uKGUsdCxyKXtyZXR1cm5bdCxyXS5qb2luKCIgIil9KSkuc3BsaXQoIiAiKTtyZXR1cm57eDordFswXXx8MCx5Oit0WzFdfHwwfX0seS5zZXRUcmFuc2xhdGU9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWUuYXR0cj8iYXR0ciI6ImdldEF0dHJpYnV0ZSIsYT1lLmF0dHI/ImF0dHIiOiJzZXRBdHRyaWJ1dGUiLGk9ZVtuXSgidHJhbnNmb3JtIil8fCIiO3JldHVybiB0PXR8fDAscj1yfHwwLGk9aS5yZXBsYWNlKC8oXGJ0cmFuc2xhdGVcKC4qP1wpOz8pLywiIikudHJpbSgpLGk9KGkrPXUodCxyKSkudHJpbSgpLGVbYV0oInRyYW5zZm9ybSIsaSksaX0seS5nZXRTY2FsZT1mdW5jdGlvbihlKXt2YXIgdD0oZVtlLmF0dHI/ImF0dHIiOiJnZXRBdHRyaWJ1dGUiXSgidHJhbnNmb3JtIil8fCIiKS5yZXBsYWNlKC8uKlxic2NhbGVcKChcZCpcLj9cZCopW15cZF0qKFxkKlwuP1xkKilbXlxkXS4qLywoZnVuY3Rpb24oZSx0LHIpe3JldHVyblt0LHJdLmpvaW4oIiAiKX0pKS5zcGxpdCgiICIpO3JldHVybnt4Oit0WzBdfHwxLHk6K3RbMV18fDF9fSx5LnNldFNjYWxlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1lLmF0dHI/ImF0dHIiOiJnZXRBdHRyaWJ1dGUiLGE9ZS5hdHRyPyJhdHRyIjoic2V0QXR0cmlidXRlIixpPWVbbl0oInRyYW5zZm9ybSIpfHwiIjtyZXR1cm4gdD10fHwxLHI9cnx8MSxpPWkucmVwbGFjZSgvKFxic2NhbGVcKC4qP1wpOz8pLywiIikudHJpbSgpLGk9KGkrPSJzY2FsZSgiK3QrIiwiK3IrIikiKS50cmltKCksZVthXSgidHJhbnNmb3JtIixpKSxpfTt2YXIgRT0vXHMqc2MuKi87eS5zZXRQb2ludEdyb3VwU2NhbGU9ZnVuY3Rpb24oZSx0LHIpe2lmKHQ9dHx8MSxyPXJ8fDEsZSl7dmFyIG49MT09PXQmJjE9PT1yPyIiOiJzY2FsZSgiK3QrIiwiK3IrIikiO2UuZWFjaCgoZnVuY3Rpb24oKXt2YXIgZT0odGhpcy5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpfHwiIikucmVwbGFjZShFLCIiKTtlPShlKz1uKS50cmltKCksdGhpcy5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsZSl9KSl9fTt2YXIgST0vdHJhbnNsYXRlXChbXildKlwpXHMqJC87eS5zZXRUZXh0UG9pbnRzU2NhbGU9ZnVuY3Rpb24oZSx0LHIpe2UmJmUuZWFjaCgoZnVuY3Rpb24oKXt2YXIgZSxhPW4uc2VsZWN0KHRoaXMpLGk9YS5zZWxlY3QoInRleHQiKTtpZihpLm5vZGUoKSl7dmFyIG89cGFyc2VGbG9hdChpLmF0dHIoIngiKXx8MCksbD1wYXJzZUZsb2F0KGkuYXR0cigieSIpfHwwKSxzPShhLmF0dHIoInRyYW5zZm9ybSIpfHwiIikubWF0Y2goSSk7ZT0xPT09dCYmMT09PXI/W106W3UobyxsKSwic2NhbGUoIit0KyIsIityKyIpIix1KC1vLC1sKV0scyYmZS5wdXNoKHMpLGEuYXR0cigidHJhbnNmb3JtIixlLmpvaW4oIiIpKX19KSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyI6MTExLCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IjoxNzcsIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiOjE4MCwiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiOjE4MiwiLi4vLi4vbGliIjoyMDIsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6MjI0LCIuLi8uLi9yZWdpc3RyeSI6MjkwLCIuLi8uLi90cmFjZXMvc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmMiOjM0NywiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXMiOjM1NSwiLi4vY29sb3IiOjc1LCIuLi9jb2xvcnNjYWxlIjo4NywiLi9zeW1ib2xfZGVmcyI6OTgsZDM6OSwiZmFzdC1pc251bWVyaWMiOjExLHRpbnljb2xvcjI6NTh9XSw5ODpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJkMyIpO3QuZXhwb3J0cz17Y2lyY2xlOntuOjAsZjpmdW5jdGlvbihlKXt2YXIgdD1uLnJvdW5kKGUsMik7cmV0dXJuIk0iK3QrIiwwQSIrdCsiLCIrdCsiIDAgMSwxIDAsLSIrdCsiQSIrdCsiLCIrdCsiIDAgMCwxICIrdCsiLDBaIn19LHNxdWFyZTp7bjoxLGY6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5yb3VuZChlLDIpO3JldHVybiJNIit0KyIsIit0KyJILSIrdCsiVi0iK3QrIkgiK3QrIloifX0sZGlhbW9uZDp7bjoyLGY6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5yb3VuZCgxLjMqZSwyKTtyZXR1cm4iTSIrdCsiLDBMMCwiK3QrIkwtIit0KyIsMEwwLC0iK3QrIloifX0sY3Jvc3M6e246MyxmOmZ1bmN0aW9uKGUpe3ZhciB0PW4ucm91bmQoLjQqZSwyKSxyPW4ucm91bmQoMS4yKmUsMik7cmV0dXJuIk0iK3IrIiwiK3QrIkgiK3QrIlYiK3IrIkgtIit0KyJWIit0KyJILSIrcisiVi0iK3QrIkgtIit0KyJWLSIrcisiSCIrdCsiVi0iK3QrIkgiK3IrIloifX0seDp7bjo0LGY6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5yb3VuZCguOCplL01hdGguc3FydCgyKSwyKSxyPSJsIit0KyIsIit0LGE9ImwiK3QrIiwtIit0LGk9ImwtIit0KyIsLSIrdCxvPSJsLSIrdCsiLCIrdDtyZXR1cm4iTTAsIit0K3IrYStpK2EraStvK2krbytyK28rcisiWiJ9fSwidHJpYW5nbGUtdXAiOntuOjUsZjpmdW5jdGlvbihlKXt2YXIgdD1uLnJvdW5kKDIqZS9NYXRoLnNxcnQoMyksMik7cmV0dXJuIk0tIit0KyIsIituLnJvdW5kKGUvMiwyKSsiSCIrdCsiTDAsLSIrbi5yb3VuZChlLDIpKyJaIn19LCJ0cmlhbmdsZS1kb3duIjp7bjo2LGY6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5yb3VuZCgyKmUvTWF0aC5zcXJ0KDMpLDIpO3JldHVybiJNLSIrdCsiLC0iK24ucm91bmQoZS8yLDIpKyJIIit0KyJMMCwiK24ucm91bmQoZSwyKSsiWiJ9fSwidHJpYW5nbGUtbGVmdCI6e246NyxmOmZ1bmN0aW9uKGUpe3ZhciB0PW4ucm91bmQoMiplL01hdGguc3FydCgzKSwyKTtyZXR1cm4iTSIrbi5yb3VuZChlLzIsMikrIiwtIit0KyJWIit0KyJMLSIrbi5yb3VuZChlLDIpKyIsMFoifX0sInRyaWFuZ2xlLXJpZ2h0Ijp7bjo4LGY6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5yb3VuZCgyKmUvTWF0aC5zcXJ0KDMpLDIpO3JldHVybiJNLSIrbi5yb3VuZChlLzIsMikrIiwtIit0KyJWIit0KyJMIituLnJvdW5kKGUsMikrIiwwWiJ9fSwidHJpYW5nbGUtbmUiOntuOjksZjpmdW5jdGlvbihlKXt2YXIgdD1uLnJvdW5kKC42KmUsMikscj1uLnJvdW5kKDEuMiplLDIpO3JldHVybiJNLSIrcisiLC0iK3QrIkgiK3QrIlYiK3IrIloifX0sInRyaWFuZ2xlLXNlIjp7bjoxMCxmOmZ1bmN0aW9uKGUpe3ZhciB0PW4ucm91bmQoLjYqZSwyKSxyPW4ucm91bmQoMS4yKmUsMik7cmV0dXJuIk0iK3QrIiwtIityKyJWIit0KyJILSIrcisiWiJ9fSwidHJpYW5nbGUtc3ciOntuOjExLGY6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5yb3VuZCguNiplLDIpLHI9bi5yb3VuZCgxLjIqZSwyKTtyZXR1cm4iTSIrcisiLCIrdCsiSC0iK3QrIlYtIityKyJaIn19LCJ0cmlhbmdsZS1udyI6e246MTIsZjpmdW5jdGlvbihlKXt2YXIgdD1uLnJvdW5kKC42KmUsMikscj1uLnJvdW5kKDEuMiplLDIpO3JldHVybiJNLSIrdCsiLCIrcisiVi0iK3QrIkgiK3IrIloifX0scGVudGFnb246e246MTMsZjpmdW5jdGlvbihlKXt2YXIgdD1uLnJvdW5kKC45NTEqZSwyKSxyPW4ucm91bmQoLjU4OCplLDIpLGE9bi5yb3VuZCgtZSwyKSxpPW4ucm91bmQoLS4zMDkqZSwyKTtyZXR1cm4iTSIrdCsiLCIraSsiTCIrcisiLCIrbi5yb3VuZCguODA5KmUsMikrIkgtIityKyJMLSIrdCsiLCIraSsiTDAsIithKyJaIn19LGhleGFnb246e246MTQsZjpmdW5jdGlvbihlKXt2YXIgdD1uLnJvdW5kKGUsMikscj1uLnJvdW5kKGUvMiwyKSxhPW4ucm91bmQoZSpNYXRoLnNxcnQoMykvMiwyKTtyZXR1cm4iTSIrYSsiLC0iK3IrIlYiK3IrIkwwLCIrdCsiTC0iK2ErIiwiK3IrIlYtIityKyJMMCwtIit0KyJaIn19LGhleGFnb24yOntuOjE1LGY6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5yb3VuZChlLDIpLHI9bi5yb3VuZChlLzIsMiksYT1uLnJvdW5kKGUqTWF0aC5zcXJ0KDMpLzIsMik7cmV0dXJuIk0tIityKyIsIithKyJIIityKyJMIit0KyIsMEwiK3IrIiwtIithKyJILSIrcisiTC0iK3QrIiwwWiJ9fSxvY3RhZ29uOntuOjE2LGY6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5yb3VuZCguOTI0KmUsMikscj1uLnJvdW5kKC4zODMqZSwyKTtyZXR1cm4iTS0iK3IrIiwtIit0KyJIIityKyJMIit0KyIsLSIrcisiViIrcisiTCIrcisiLCIrdCsiSC0iK3IrIkwtIit0KyIsIityKyJWLSIrcisiWiJ9fSxzdGFyOntuOjE3LGY6ZnVuY3Rpb24oZSl7dmFyIHQ9MS40KmUscj1uLnJvdW5kKC4yMjUqdCwyKSxhPW4ucm91bmQoLjk1MSp0LDIpLGk9bi5yb3VuZCguMzYzKnQsMiksbz1uLnJvdW5kKC41ODgqdCwyKSxsPW4ucm91bmQoLXQsMikscz1uLnJvdW5kKC0uMzA5KnQsMiksYz1uLnJvdW5kKC4xMTgqdCwyKSx1PW4ucm91bmQoLjgwOSp0LDIpO3JldHVybiJNIityKyIsIitzKyJIIithKyJMIitpKyIsIitjKyJMIitvKyIsIit1KyJMMCwiK24ucm91bmQoLjM4Mip0LDIpKyJMLSIrbysiLCIrdSsiTC0iK2krIiwiK2MrIkwtIithKyIsIitzKyJILSIrcisiTDAsIitsKyJaIn19LGhleGFncmFtOntuOjE4LGY6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5yb3VuZCguNjYqZSwyKSxyPW4ucm91bmQoLjM4KmUsMiksYT1uLnJvdW5kKC43NiplLDIpO3JldHVybiJNLSIrYSsiLDBsLSIrcisiLC0iK3QrImgiK2ErImwiK3IrIiwtIit0KyJsIityKyIsIit0KyJoIithKyJsLSIrcisiLCIrdCsibCIrcisiLCIrdCsiaC0iK2ErImwtIityKyIsIit0KyJsLSIrcisiLC0iK3QrImgtIithKyJaIn19LCJzdGFyLXRyaWFuZ2xlLXVwIjp7bjoxOSxmOmZ1bmN0aW9uKGUpe3ZhciB0PW4ucm91bmQoZSpNYXRoLnNxcnQoMykqLjgsMikscj1uLnJvdW5kKC44KmUsMiksYT1uLnJvdW5kKDEuNiplLDIpLGk9bi5yb3VuZCg0KmUsMiksbz0iQSAiK2krIiwiK2krIiAwIDAgMSAiO3JldHVybiJNLSIrdCsiLCIrcitvK3QrIiwiK3IrbysiMCwtIithK28rIi0iK3QrIiwiK3IrIloifX0sInN0YXItdHJpYW5nbGUtZG93biI6e246MjAsZjpmdW5jdGlvbihlKXt2YXIgdD1uLnJvdW5kKGUqTWF0aC5zcXJ0KDMpKi44LDIpLHI9bi5yb3VuZCguOCplLDIpLGE9bi5yb3VuZCgxLjYqZSwyKSxpPW4ucm91bmQoNCplLDIpLG89IkEgIitpKyIsIitpKyIgMCAwIDEgIjtyZXR1cm4iTSIrdCsiLC0iK3IrbysiLSIrdCsiLC0iK3IrbysiMCwiK2Erbyt0KyIsLSIrcisiWiJ9fSwic3Rhci1zcXVhcmUiOntuOjIxLGY6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5yb3VuZCgxLjEqZSwyKSxyPW4ucm91bmQoMiplLDIpLGE9IkEgIityKyIsIityKyIgMCAwIDEgIjtyZXR1cm4iTS0iK3QrIiwtIit0K2ErIi0iK3QrIiwiK3QrYSt0KyIsIit0K2ErdCsiLC0iK3QrYSsiLSIrdCsiLC0iK3QrIloifX0sInN0YXItZGlhbW9uZCI6e246MjIsZjpmdW5jdGlvbihlKXt2YXIgdD1uLnJvdW5kKDEuNCplLDIpLHI9bi5yb3VuZCgxLjkqZSwyKSxhPSJBICIrcisiLCIrcisiIDAgMCAxICI7cmV0dXJuIk0tIit0KyIsMCIrYSsiMCwiK3QrYSt0KyIsMCIrYSsiMCwtIit0K2ErIi0iK3QrIiwwWiJ9fSwiZGlhbW9uZC10YWxsIjp7bjoyMyxmOmZ1bmN0aW9uKGUpe3ZhciB0PW4ucm91bmQoLjcqZSwyKSxyPW4ucm91bmQoMS40KmUsMik7cmV0dXJuIk0wLCIrcisiTCIrdCsiLDBMMCwtIityKyJMLSIrdCsiLDBaIn19LCJkaWFtb25kLXdpZGUiOntuOjI0LGY6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5yb3VuZCgxLjQqZSwyKSxyPW4ucm91bmQoLjcqZSwyKTtyZXR1cm4iTTAsIityKyJMIit0KyIsMEwwLC0iK3IrIkwtIit0KyIsMFoifX0saG91cmdsYXNzOntuOjI1LGY6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5yb3VuZChlLDIpO3JldHVybiJNIit0KyIsIit0KyJILSIrdCsiTCIrdCsiLC0iK3QrIkgtIit0KyJaIn0sbm9Eb3Q6ITB9LGJvd3RpZTp7bjoyNixmOmZ1bmN0aW9uKGUpe3ZhciB0PW4ucm91bmQoZSwyKTtyZXR1cm4iTSIrdCsiLCIrdCsiVi0iK3QrIkwtIit0KyIsIit0KyJWLSIrdCsiWiJ9LG5vRG90OiEwfSwiY2lyY2xlLWNyb3NzIjp7bjoyNyxmOmZ1bmN0aW9uKGUpe3ZhciB0PW4ucm91bmQoZSwyKTtyZXR1cm4iTTAsIit0KyJWLSIrdCsiTSIrdCsiLDBILSIrdCsiTSIrdCsiLDBBIit0KyIsIit0KyIgMCAxLDEgMCwtIit0KyJBIit0KyIsIit0KyIgMCAwLDEgIit0KyIsMFoifSxuZWVkTGluZTohMCxub0RvdDohMH0sImNpcmNsZS14Ijp7bjoyOCxmOmZ1bmN0aW9uKGUpe3ZhciB0PW4ucm91bmQoZSwyKSxyPW4ucm91bmQoZS9NYXRoLnNxcnQoMiksMik7cmV0dXJuIk0iK3IrIiwiK3IrIkwtIityKyIsLSIrcisiTSIrcisiLC0iK3IrIkwtIityKyIsIityKyJNIit0KyIsMEEiK3QrIiwiK3QrIiAwIDEsMSAwLC0iK3QrIkEiK3QrIiwiK3QrIiAwIDAsMSAiK3QrIiwwWiJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSwic3F1YXJlLWNyb3NzIjp7bjoyOSxmOmZ1bmN0aW9uKGUpe3ZhciB0PW4ucm91bmQoZSwyKTtyZXR1cm4iTTAsIit0KyJWLSIrdCsiTSIrdCsiLDBILSIrdCsiTSIrdCsiLCIrdCsiSC0iK3QrIlYtIit0KyJIIit0KyJaIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJzcXVhcmUteCI6e246MzAsZjpmdW5jdGlvbihlKXt2YXIgdD1uLnJvdW5kKGUsMik7cmV0dXJuIk0iK3QrIiwiK3QrIkwtIit0KyIsLSIrdCsiTSIrdCsiLC0iK3QrIkwtIit0KyIsIit0KyJNIit0KyIsIit0KyJILSIrdCsiVi0iK3QrIkgiK3QrIloifSxuZWVkTGluZTohMCxub0RvdDohMH0sImRpYW1vbmQtY3Jvc3MiOntuOjMxLGY6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5yb3VuZCgxLjMqZSwyKTtyZXR1cm4iTSIrdCsiLDBMMCwiK3QrIkwtIit0KyIsMEwwLC0iK3QrIlpNMCwtIit0KyJWIit0KyJNLSIrdCsiLDBIIit0fSxuZWVkTGluZTohMCxub0RvdDohMH0sImRpYW1vbmQteCI6e246MzIsZjpmdW5jdGlvbihlKXt2YXIgdD1uLnJvdW5kKDEuMyplLDIpLHI9bi5yb3VuZCguNjUqZSwyKTtyZXR1cm4iTSIrdCsiLDBMMCwiK3QrIkwtIit0KyIsMEwwLC0iK3QrIlpNLSIrcisiLC0iK3IrIkwiK3IrIiwiK3IrIk0tIityKyIsIityKyJMIityKyIsLSIrcn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJjcm9zcy10aGluIjp7bjozMyxmOmZ1bmN0aW9uKGUpe3ZhciB0PW4ucm91bmQoMS40KmUsMik7cmV0dXJuIk0wLCIrdCsiVi0iK3QrIk0iK3QrIiwwSC0iK3R9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sIngtdGhpbiI6e246MzQsZjpmdW5jdGlvbihlKXt2YXIgdD1uLnJvdW5kKGUsMik7cmV0dXJuIk0iK3QrIiwiK3QrIkwtIit0KyIsLSIrdCsiTSIrdCsiLC0iK3QrIkwtIit0KyIsIit0fSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LGFzdGVyaXNrOntuOjM1LGY6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5yb3VuZCgxLjIqZSwyKSxyPW4ucm91bmQoLjg1KmUsMik7cmV0dXJuIk0wLCIrdCsiVi0iK3QrIk0iK3QrIiwwSC0iK3QrIk0iK3IrIiwiK3IrIkwtIityKyIsLSIrcisiTSIrcisiLC0iK3IrIkwtIityKyIsIityfSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LGhhc2g6e246MzYsZjpmdW5jdGlvbihlKXt2YXIgdD1uLnJvdW5kKGUvMiwyKSxyPW4ucm91bmQoZSwyKTtyZXR1cm4iTSIrdCsiLCIrcisiVi0iK3IrIm0tIityKyIsMFYiK3IrIk0iK3IrIiwiK3QrIkgtIityKyJtMCwtIityKyJIIityfSxuZWVkTGluZTohMCxub0ZpbGw6ITB9LCJ5LXVwIjp7bjozNyxmOmZ1bmN0aW9uKGUpe3ZhciB0PW4ucm91bmQoMS4yKmUsMikscj1uLnJvdW5kKDEuNiplLDIpLGE9bi5yb3VuZCguOCplLDIpO3JldHVybiJNLSIrdCsiLCIrYSsiTDAsME0iK3QrIiwiK2ErIkwwLDBNMCwtIityKyJMMCwwIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSwieS1kb3duIjp7bjozOCxmOmZ1bmN0aW9uKGUpe3ZhciB0PW4ucm91bmQoMS4yKmUsMikscj1uLnJvdW5kKDEuNiplLDIpLGE9bi5yb3VuZCguOCplLDIpO3JldHVybiJNLSIrdCsiLC0iK2ErIkwwLDBNIit0KyIsLSIrYSsiTDAsME0wLCIrcisiTDAsMCJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sInktbGVmdCI6e246MzksZjpmdW5jdGlvbihlKXt2YXIgdD1uLnJvdW5kKDEuMiplLDIpLHI9bi5yb3VuZCgxLjYqZSwyKSxhPW4ucm91bmQoLjgqZSwyKTtyZXR1cm4iTSIrYSsiLCIrdCsiTDAsME0iK2ErIiwtIit0KyJMMCwwTS0iK3IrIiwwTDAsMCJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sInktcmlnaHQiOntuOjQwLGY6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5yb3VuZCgxLjIqZSwyKSxyPW4ucm91bmQoMS42KmUsMiksYT1uLnJvdW5kKC44KmUsMik7cmV0dXJuIk0tIithKyIsIit0KyJMMCwwTS0iK2ErIiwtIit0KyJMMCwwTSIrcisiLDBMMCwwIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSwibGluZS1ldyI6e246NDEsZjpmdW5jdGlvbihlKXt2YXIgdD1uLnJvdW5kKDEuNCplLDIpO3JldHVybiJNIit0KyIsMEgtIit0fSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LCJsaW5lLW5zIjp7bjo0MixmOmZ1bmN0aW9uKGUpe3ZhciB0PW4ucm91bmQoMS40KmUsMik7cmV0dXJuIk0wLCIrdCsiVi0iK3R9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sImxpbmUtbmUiOntuOjQzLGY6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5yb3VuZChlLDIpO3JldHVybiJNIit0KyIsLSIrdCsiTC0iK3QrIiwiK3R9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sImxpbmUtbnciOntuOjQ0LGY6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5yb3VuZChlLDIpO3JldHVybiJNIit0KyIsIit0KyJMLSIrdCsiLC0iK3R9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sImFycm93LXVwIjp7bjo0NSxmOmZ1bmN0aW9uKGUpe3ZhciB0PW4ucm91bmQoZSwyKTtyZXR1cm4iTTAsMEwtIit0KyIsIituLnJvdW5kKDIqZSwyKSsiSCIrdCsiWiJ9LG5vRG90OiEwfSwiYXJyb3ctZG93biI6e246NDYsZjpmdW5jdGlvbihlKXt2YXIgdD1uLnJvdW5kKGUsMik7cmV0dXJuIk0wLDBMLSIrdCsiLC0iK24ucm91bmQoMiplLDIpKyJIIit0KyJaIn0sbm9Eb3Q6ITB9LCJhcnJvdy1sZWZ0Ijp7bjo0NyxmOmZ1bmN0aW9uKGUpe3ZhciB0PW4ucm91bmQoMiplLDIpLHI9bi5yb3VuZChlLDIpO3JldHVybiJNMCwwTCIrdCsiLC0iK3IrIlYiK3IrIloifSxub0RvdDohMH0sImFycm93LXJpZ2h0Ijp7bjo0OCxmOmZ1bmN0aW9uKGUpe3ZhciB0PW4ucm91bmQoMiplLDIpLHI9bi5yb3VuZChlLDIpO3JldHVybiJNMCwwTC0iK3QrIiwtIityKyJWIityKyJaIn0sbm9Eb3Q6ITB9LCJhcnJvdy1iYXItdXAiOntuOjQ5LGY6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5yb3VuZChlLDIpO3JldHVybiJNLSIrdCsiLDBIIit0KyJNMCwwTC0iK3QrIiwiK24ucm91bmQoMiplLDIpKyJIIit0KyJaIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJhcnJvdy1iYXItZG93biI6e246NTAsZjpmdW5jdGlvbihlKXt2YXIgdD1uLnJvdW5kKGUsMik7cmV0dXJuIk0tIit0KyIsMEgiK3QrIk0wLDBMLSIrdCsiLC0iK24ucm91bmQoMiplLDIpKyJIIit0KyJaIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJhcnJvdy1iYXItbGVmdCI6e246NTEsZjpmdW5jdGlvbihlKXt2YXIgdD1uLnJvdW5kKDIqZSwyKSxyPW4ucm91bmQoZSwyKTtyZXR1cm4iTTAsLSIrcisiViIrcisiTTAsMEwiK3QrIiwtIityKyJWIityKyJaIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJhcnJvdy1iYXItcmlnaHQiOntuOjUyLGY6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5yb3VuZCgyKmUsMikscj1uLnJvdW5kKGUsMik7cmV0dXJuIk0wLC0iK3IrIlYiK3IrIk0wLDBMLSIrdCsiLC0iK3IrIlYiK3IrIloifSxuZWVkTGluZTohMCxub0RvdDohMH19fSx7ZDM6OX1dLDk5OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz17dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6ImNhbGMifSx0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJwZXJjZW50IiwiY29uc3RhbnQiLCJzcXJ0IiwiZGF0YSJdLGVkaXRUeXBlOiJjYWxjIn0sc3ltbWV0cmljOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToiY2FsYyJ9LGFycmF5Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGFycmF5bWludXM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxMCxlZGl0VHlwZToiY2FsYyJ9LHZhbHVlbWludXM6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxMCxlZGl0VHlwZToiY2FsYyJ9LHRyYWNlcmVmOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6InN0eWxlIn0sdHJhY2VyZWZtaW51czp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJzdHlsZSJ9LGNvcHlfeXN0eWxlOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToicGxvdCJ9LGNvcHlfenN0eWxlOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToic3R5bGUifSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LHRoaWNrbmVzczp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjIsZWRpdFR5cGU6InN0eWxlIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToiY2FsYyIsX2RlcHJlY2F0ZWQ6e29wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6InN0eWxlIn19fX0se31dLDEwMDpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJmYXN0LWlzbnVtZXJpYyIpLGE9ZSgiLi4vLi4vcmVnaXN0cnkiKSxpPWUoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz1lKCIuLi8uLi9saWIiKSxsPWUoIi4vY29tcHV0ZV9lcnJvciIpO2Z1bmN0aW9uIHMoZSx0LHIsYSl7dmFyIHM9dFsiZXJyb3JfIithXXx8e30sYz1bXTtpZihzLnZpc2libGUmJi0xIT09WyJsaW5lYXIiLCJsb2ciXS5pbmRleE9mKHIudHlwZSkpe2Zvcih2YXIgdT1sKHMpLGY9MDtmPGUubGVuZ3RoO2YrKyl7dmFyIGQ9ZVtmXSxwPWQuaTtpZih2b2lkIDA9PT1wKXA9ZjtlbHNlIGlmKG51bGw9PT1wKWNvbnRpbnVlO3ZhciBoPWRbYV07aWYobihyLmMybChoKSkpe3ZhciBnPXUoaCxwKTtpZihuKGdbMF0pJiZuKGdbMV0pKXt2YXIgdj1kW2ErInMiXT1oLWdbMF0sbT1kW2ErImgiXT1oK2dbMV07Yy5wdXNoKHYsbSl9fX12YXIgeT1yLl9pZCx4PXQuX2V4dHJlbWVzW3ldLGI9aS5maW5kRXh0cmVtZXMocixjLG8uZXh0ZW5kRmxhdCh7dG96ZXJvOngub3B0cy50b3plcm99LHtwYWRkZWQ6ITB9KSk7eC5taW49eC5taW4uY29uY2F0KGIubWluKSx4Lm1heD14Lm1heC5jb25jYXQoYi5tYXgpfX10LmV4cG9ydHM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUuY2FsY2RhdGEscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdLG89blswXS50cmFjZTtpZighMD09PW8udmlzaWJsZSYmYS50cmFjZUlzKG8sImVycm9yQmFyc09LIikpe3ZhciBsPWkuZ2V0RnJvbUlkKGUsby54YXhpcyksYz1pLmdldEZyb21JZChlLG8ueWF4aXMpO3MobixvLGwsIngiKSxzKG4sbyxjLCJ5Iil9fX19LHsiLi4vLi4vbGliIjoyMDIsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjoyNDgsIi4uLy4uL3JlZ2lzdHJ5IjoyOTAsIi4vY29tcHV0ZV9lcnJvciI6MTAxLCJmYXN0LWlzbnVtZXJpYyI6MTF9XSwxMDE6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlLHQpe3JldHVybiJwZXJjZW50Ij09PWU/ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguYWJzKGUqdC8xMDApfToiY29uc3RhbnQiPT09ZT9mdW5jdGlvbigpe3JldHVybiBNYXRoLmFicyh0KX06InNxcnQiPT09ZT9mdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5zcXJ0KE1hdGguYWJzKGUpKX06dm9pZCAwfXQuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1lLnR5cGUscj1lLnN5bW1ldHJpYztpZigiZGF0YSI9PT10KXt2YXIgYT1lLmFycmF5fHxbXTtpZihyKXJldHVybiBmdW5jdGlvbihlLHQpe3ZhciByPSthW3RdO3JldHVybltyLHJdfTt2YXIgaT1lLmFycmF5bWludXN8fFtdO3JldHVybiBmdW5jdGlvbihlLHQpe3ZhciByPSthW3RdLG49K2lbdF07cmV0dXJuIGlzTmFOKHIpJiZpc05hTihuKT9bTmFOLE5hTl06W258fDAscnx8MF19fXZhciBvPW4odCxlLnZhbHVlKSxsPW4odCxlLnZhbHVlbWludXMpO3JldHVybiByfHx2b2lkIDA9PT1lLnZhbHVlbWludXM/ZnVuY3Rpb24oZSl7dmFyIHQ9byhlKTtyZXR1cm5bdCx0XX06ZnVuY3Rpb24oZSl7cmV0dXJuW2woZSksbyhlKV19fX0se31dLDEwMjpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJmYXN0LWlzbnVtZXJpYyIpLGE9ZSgiLi4vLi4vcmVnaXN0cnkiKSxpPWUoIi4uLy4uL2xpYiIpLG89ZSgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLGw9ZSgiLi9hdHRyaWJ1dGVzIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLHMpe3ZhciBjPSJlcnJvcl8iK3MuYXhpcyx1PW8ubmV3Q29udGFpbmVyKHQsYyksZj1lW2NdfHx7fTtmdW5jdGlvbiBkKGUsdCl7cmV0dXJuIGkuY29lcmNlKGYsdSxsLGUsdCl9aWYoITEhPT1kKCJ2aXNpYmxlIix2b2lkIDAhPT1mLmFycmF5fHx2b2lkIDAhPT1mLnZhbHVlfHwic3FydCI9PT1mLnR5cGUpKXt2YXIgcD1kKCJ0eXBlIiwiYXJyYXkiaW4gZj8iZGF0YSI6InBlcmNlbnQiKSxoPSEwOyJzcXJ0IiE9PXAmJihoPWQoInN5bW1ldHJpYyIsISgoImRhdGEiPT09cD8iYXJyYXltaW51cyI6InZhbHVlbWludXMiKWluIGYpKSksImRhdGEiPT09cD8oZCgiYXJyYXkiKSxkKCJ0cmFjZXJlZiIpLGh8fChkKCJhcnJheW1pbnVzIiksZCgidHJhY2VyZWZtaW51cyIpKSk6InBlcmNlbnQiIT09cCYmImNvbnN0YW50IiE9PXB8fChkKCJ2YWx1ZSIpLGh8fGQoInZhbHVlbWludXMiKSk7dmFyIGc9ImNvcHlfIitzLmluaGVyaXQrInN0eWxlIjtpZihzLmluaGVyaXQpKHRbImVycm9yXyIrcy5pbmhlcml0XXx8e30pLnZpc2libGUmJmQoZywhKGYuY29sb3J8fG4oZi50aGlja25lc3MpfHxuKGYud2lkdGgpKSk7cy5pbmhlcml0JiZ1W2ddfHwoZCgiY29sb3IiLHIpLGQoInRoaWNrbmVzcyIpLGQoIndpZHRoIixhLnRyYWNlSXModCwiZ2wzZCIpPzA6NCkpfX19LHsiLi4vLi4vbGliIjoyMDIsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjIzNywiLi4vLi4vcmVnaXN0cnkiOjI5MCwiLi9hdHRyaWJ1dGVzIjo5OSwiZmFzdC1pc251bWVyaWMiOjExfV0sMTAzOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2xpYiIpLGE9ZSgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGk9ZSgiLi9hdHRyaWJ1dGVzIiksbz17ZXJyb3JfeDpuLmV4dGVuZEZsYXQoe30saSksZXJyb3JfeTpuLmV4dGVuZEZsYXQoe30saSl9O2RlbGV0ZSBvLmVycm9yX3guY29weV96c3R5bGUsZGVsZXRlIG8uZXJyb3JfeS5jb3B5X3pzdHlsZSxkZWxldGUgby5lcnJvcl95LmNvcHlfeXN0eWxlO3ZhciBsPXtlcnJvcl94Om4uZXh0ZW5kRmxhdCh7fSxpKSxlcnJvcl95Om4uZXh0ZW5kRmxhdCh7fSxpKSxlcnJvcl96Om4uZXh0ZW5kRmxhdCh7fSxpKX07ZGVsZXRlIGwuZXJyb3JfeC5jb3B5X3lzdHlsZSxkZWxldGUgbC5lcnJvcl95LmNvcHlfeXN0eWxlLGRlbGV0ZSBsLmVycm9yX3ouY29weV95c3R5bGUsZGVsZXRlIGwuZXJyb3Jfei5jb3B5X3pzdHlsZSx0LmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToiZXJyb3JiYXJzIixzY2hlbWE6e3RyYWNlczp7c2NhdHRlcjpvLGJhcjpvLGhpc3RvZ3JhbTpvLHNjYXR0ZXIzZDphKGwsImNhbGMiLCJuZXN0ZWQiKSxzY2F0dGVyZ2w6YShvLCJjYWxjIiwibmVzdGVkIil9fSxzdXBwbHlEZWZhdWx0czplKCIuL2RlZmF1bHRzIiksY2FsYzplKCIuL2NhbGMiKSxtYWtlQ29tcHV0ZUVycm9yOmUoIi4vY29tcHV0ZV9lcnJvciIpLHBsb3Q6ZSgiLi9wbG90Iiksc3R5bGU6ZSgiLi9zdHlsZSIpLGhvdmVySW5mbzpmdW5jdGlvbihlLHQscil7KHQuZXJyb3JfeXx8e30pLnZpc2libGUmJihyLnllcnI9ZS55aC1lLnksdC5lcnJvcl95LnN5bW1ldHJpY3x8KHIueWVycm5lZz1lLnktZS55cykpOyh0LmVycm9yX3h8fHt9KS52aXNpYmxlJiYoci54ZXJyPWUueGgtZS54LHQuZXJyb3JfeC5zeW1tZXRyaWN8fChyLnhlcnJuZWc9ZS54LWUueHMpKX19fSx7Ii4uLy4uL2xpYiI6MjAyLCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjoyMzAsIi4vYXR0cmlidXRlcyI6OTksIi4vY2FsYyI6MTAwLCIuL2NvbXB1dGVfZXJyb3IiOjEwMSwiLi9kZWZhdWx0cyI6MTAyLCIuL3Bsb3QiOjEwNCwiLi9zdHlsZSI6MTA1fV0sMTA0OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoImQzIiksYT1lKCJmYXN0LWlzbnVtZXJpYyIpLGk9ZSgiLi4vZHJhd2luZyIpLG89ZSgiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsbCl7dmFyIHM9ci54YXhpcyxjPXIueWF4aXMsdT1sJiZsLmR1cmF0aW9uPjA7dC5lYWNoKChmdW5jdGlvbih0KXt2YXIgZixkPXRbMF0udHJhY2UscD1kLmVycm9yX3h8fHt9LGg9ZC5lcnJvcl95fHx7fTtkLmlkcyYmKGY9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaWR9KTt2YXIgZz1vLmhhc01hcmtlcnMoZCkmJmQubWFya2VyLm1heGRpc3BsYXllZD4wO2gudmlzaWJsZXx8cC52aXNpYmxlfHwodD1bXSk7dmFyIHY9bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLmVycm9yYmFyIikuZGF0YSh0LGYpO2lmKHYuZXhpdCgpLnJlbW92ZSgpLHQubGVuZ3RoKXtwLnZpc2libGV8fHYuc2VsZWN0QWxsKCJwYXRoLnhlcnJvciIpLnJlbW92ZSgpLGgudmlzaWJsZXx8di5zZWxlY3RBbGwoInBhdGgueWVycm9yIikucmVtb3ZlKCksdi5zdHlsZSgib3BhY2l0eSIsMSk7dmFyIG09di5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImVycm9yYmFyIiwhMCk7dSYmbS5zdHlsZSgib3BhY2l0eSIsMCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKGwuZHVyYXRpb24pLnN0eWxlKCJvcGFjaXR5IiwxKSxpLnNldENsaXBVcmwodixyLmxheWVyQ2xpcElkLGUpLHYuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9bi5zZWxlY3QodGhpcykscj1mdW5jdGlvbihlLHQscil7dmFyIG49e3g6dC5jMnAoZS54KSx5OnIuYzJwKGUueSl9O3ZvaWQgMCE9PWUueWgmJihuLnloPXIuYzJwKGUueWgpLG4ueXM9ci5jMnAoZS55cyksYShuLnlzKXx8KG4ubm9ZUz0hMCxuLnlzPXIuYzJwKGUueXMsITApKSk7dm9pZCAwIT09ZS54aCYmKG4ueGg9dC5jMnAoZS54aCksbi54cz10LmMycChlLnhzKSxhKG4ueHMpfHwobi5ub1hTPSEwLG4ueHM9dC5jMnAoZS54cywhMCkpKTtyZXR1cm4gbn0oZSxzLGMpO2lmKCFnfHxlLnZpcyl7dmFyIGksbz10LnNlbGVjdCgicGF0aC55ZXJyb3IiKTtpZihoLnZpc2libGUmJmEoci54KSYmYShyLnloKSYmYShyLnlzKSl7dmFyIGY9aC53aWR0aDtpPSJNIisoci54LWYpKyIsIityLnloKyJoIisyKmYrIm0tIitmKyIsMFYiK3IueXMsci5ub1lTfHwoaSs9Im0tIitmKyIsMGgiKzIqZiksIW8uc2l6ZSgpP289dC5hcHBlbmQoInBhdGgiKS5zdHlsZSgidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpLmNsYXNzZWQoInllcnJvciIsITApOnUmJihvPW8udHJhbnNpdGlvbigpLmR1cmF0aW9uKGwuZHVyYXRpb24pLmVhc2UobC5lYXNpbmcpKSxvLmF0dHIoImQiLGkpfWVsc2Ugby5yZW1vdmUoKTt2YXIgZD10LnNlbGVjdCgicGF0aC54ZXJyb3IiKTtpZihwLnZpc2libGUmJmEoci55KSYmYShyLnhoKSYmYShyLnhzKSl7dmFyIHY9KHAuY29weV95c3R5bGU/aDpwKS53aWR0aDtpPSJNIityLnhoKyIsIisoci55LXYpKyJ2IisyKnYrIm0wLC0iK3YrIkgiK3IueHMsci5ub1hTfHwoaSs9Im0wLC0iK3YrInYiKzIqdiksIWQuc2l6ZSgpP2Q9dC5hcHBlbmQoInBhdGgiKS5zdHlsZSgidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpLmNsYXNzZWQoInhlcnJvciIsITApOnUmJihkPWQudHJhbnNpdGlvbigpLmR1cmF0aW9uKGwuZHVyYXRpb24pLmVhc2UobC5lYXNpbmcpKSxkLmF0dHIoImQiLGkpfWVsc2UgZC5yZW1vdmUoKX19KSl9fSkpfX0seyIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlcyI6MzU1LCIuLi9kcmF3aW5nIjo5NyxkMzo5LCJmYXN0LWlzbnVtZXJpYyI6MTF9XSwxMDU6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiZDMiKSxhPWUoIi4uL2NvbG9yIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe2UuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXS50cmFjZSxyPXQuZXJyb3JfeXx8e30saT10LmVycm9yX3h8fHt9LG89bi5zZWxlY3QodGhpcyk7by5zZWxlY3RBbGwoInBhdGgueWVycm9yIikuc3R5bGUoInN0cm9rZS13aWR0aCIsci50aGlja25lc3MrInB4IikuY2FsbChhLnN0cm9rZSxyLmNvbG9yKSxpLmNvcHlfeXN0eWxlJiYoaT1yKSxvLnNlbGVjdEFsbCgicGF0aC54ZXJyb3IiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixpLnRoaWNrbmVzcysicHgiKS5jYWxsKGEuc3Ryb2tlLGkuY29sb3IpfSkpfX0seyIuLi9jb2xvciI6NzUsZDM6OX1dLDEwNjpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxhPWUoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKS5ob3ZlcmxhYmVsLGk9ZSgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7dC5leHBvcnRzPXtob3ZlcmxhYmVsOntiZ2NvbG9yOmkoe30sYS5iZ2NvbG9yLHthcnJheU9rOiEwfSksYm9yZGVyY29sb3I6aSh7fSxhLmJvcmRlcmNvbG9yLHthcnJheU9rOiEwfSksZm9udDpuKHthcnJheU9rOiEwLGVkaXRUeXBlOiJub25lIn0pLGFsaWduOmkoe30sYS5hbGlnbix7YXJyYXlPazohMH0pLG5hbWVsZW5ndGg6aSh7fSxhLm5hbWVsZW5ndGgse2FycmF5T2s6ITB9KSxlZGl0VHlwZToibm9uZSJ9fX0seyIuLi8uLi9saWIvZXh0ZW5kIjoxOTYsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6Mjc2LCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxMTZ9XSwxMDc6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vbGliIiksYT1lKCIuLi8uLi9yZWdpc3RyeSIpO2Z1bmN0aW9uIGkoZSx0LHIsYSl7YT1hfHxuLmlkZW50aXR5LEFycmF5LmlzQXJyYXkoZSkmJih0WzBdW3JdPWEoZSkpfXQuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1lLmNhbGNkYXRhLHI9ZS5fZnVsbExheW91dDtmdW5jdGlvbiBvKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbi5jb2VyY2VIb3ZlcmluZm8oe2hvdmVyaW5mbzp0fSx7X21vZHVsZTplLl9tb2R1bGV9LHIpfX1mb3IodmFyIGw9MDtsPHQubGVuZ3RoO2wrKyl7dmFyIHM9dFtsXSxjPXNbMF0udHJhY2U7aWYoIWEudHJhY2VJcyhjLCJwaWUtbGlrZSIpKXt2YXIgdT1hLnRyYWNlSXMoYywiMmRNYXAiKT9pOm4uZmlsbEFycmF5O3UoYy5ob3ZlcmluZm8scywiaGkiLG8oYykpLGMuaG92ZXJ0ZW1wbGF0ZSYmdShjLmhvdmVydGVtcGxhdGUscywiaHQiKSxjLmhvdmVybGFiZWwmJih1KGMuaG92ZXJsYWJlbC5iZ2NvbG9yLHMsImhiZyIpLHUoYy5ob3ZlcmxhYmVsLmJvcmRlcmNvbG9yLHMsImhiYyIpLHUoYy5ob3ZlcmxhYmVsLmZvbnQuc2l6ZSxzLCJodHMiKSx1KGMuaG92ZXJsYWJlbC5mb250LmNvbG9yLHMsImh0YyIpLHUoYy5ob3ZlcmxhYmVsLmZvbnQuZmFtaWx5LHMsImh0ZiIpLHUoYy5ob3ZlcmxhYmVsLm5hbWVsZW5ndGgscywiaG5sIiksdShjLmhvdmVybGFiZWwuYWxpZ24scywiaHRhIikpfX19fSx7Ii4uLy4uL2xpYiI6MjAyLCIuLi8uLi9yZWdpc3RyeSI6MjkwfV0sMTA4OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL3JlZ2lzdHJ5IiksYT1lKCIuL2hvdmVyIikuaG92ZXI7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgaT1uLmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMiLCJvbkNsaWNrIikoZSxlLl9ob3ZlcmRhdGEpO2Z1bmN0aW9uIG8oKXtlLmVtaXQoInBsb3RseV9jbGljayIse3BvaW50czplLl9ob3ZlcmRhdGEsZXZlbnQ6dH0pfXZvaWQgMCE9PXImJmEoZSx0LHIsITApLGUuX2hvdmVyZGF0YSYmdCYmdC50YXJnZXQmJihpJiZpLnRoZW4/aS50aGVuKG8pOm8oKSx0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiYmdC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSl9fSx7Ii4uLy4uL3JlZ2lzdHJ5IjoyOTAsIi4vaG92ZXIiOjExMn1dLDEwOTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9e1lBTkdMRTo2MCxIT1ZFUkFSUk9XU0laRTo2LEhPVkVSVEVYVFBBRDozLEhPVkVSRk9OVFNJWkU6MTMsSE9WRVJGT05UOiJBcmlhbCwgc2Fucy1zZXJpZiIsSE9WRVJNSU5USU1FOjUwLEhPVkVSSUQ6Ii1ob3ZlciJ9fSx7fV0sMTEwOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2xpYiIpLGE9ZSgiLi9hdHRyaWJ1dGVzIiksaT1lKCIuL2hvdmVybGFiZWxfZGVmYXVsdHMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsbyl7dmFyIGw9bi5leHRlbmRGbGF0KHt9LG8uaG92ZXJsYWJlbCk7dC5ob3ZlcnRlbXBsYXRlJiYobC5uYW1lbGVuZ3RoPS0xKSxpKGUsdCwoZnVuY3Rpb24ocixpKXtyZXR1cm4gbi5jb2VyY2UoZSx0LGEscixpKX0pLGwpfX0seyIuLi8uLi9saWIiOjIwMiwiLi9hdHRyaWJ1dGVzIjoxMDYsIi4vaG92ZXJsYWJlbF9kZWZhdWx0cyI6MTEzfV0sMTExOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2xpYiIpO3IuZ2V0U3VicGxvdD1mdW5jdGlvbihlKXtyZXR1cm4gZS5zdWJwbG90fHxlLnhheGlzK2UueWF4aXN8fGUuZ2VvfSxyLmlzVHJhY2VJblN1YnBsb3RzPWZ1bmN0aW9uKGUsdCl7aWYoInNwbG9tIj09PWUudHlwZSl7Zm9yKHZhciBuPWUueGF4ZXN8fFtdLGE9ZS55YXhlc3x8W10saT0wO2k8bi5sZW5ndGg7aSsrKWZvcih2YXIgbz0wO288YS5sZW5ndGg7bysrKWlmKC0xIT09dC5pbmRleE9mKG5baV0rYVtvXSkpcmV0dXJuITA7cmV0dXJuITF9cmV0dXJuLTEhPT10LmluZGV4T2Yoci5nZXRTdWJwbG90KGUpKX0sci5mbGF0PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPW5ldyBBcnJheShlLmxlbmd0aCksbj0wO248ZS5sZW5ndGg7bisrKXJbbl09dDtyZXR1cm4gcn0sci5wMmM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9bmV3IEFycmF5KGUubGVuZ3RoKSxuPTA7bjxlLmxlbmd0aDtuKyspcltuXT1lW25dLnAyYyh0KTtyZXR1cm4gcn0sci5nZXREaXN0YW5jZUZ1bmN0aW9uPWZ1bmN0aW9uKGUsdCxuLGEpe3JldHVybiJjbG9zZXN0Ij09PWU/YXx8ci5xdWFkcmF0dXJlKHQsbik6IngiPT09ZS5jaGFyQXQoMCk/dDpufSxyLmdldENsb3Nlc3Q9ZnVuY3Rpb24oZSx0LHIpe2lmKCExIT09ci5pbmRleClyLmluZGV4Pj0wJiZyLmluZGV4PGUubGVuZ3RoP3IuZGlzdGFuY2U9MDpyLmluZGV4PSExO2Vsc2UgZm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBhPXQoZVtuXSk7YTw9ci5kaXN0YW5jZSYmKHIuaW5kZXg9bixyLmRpc3RhbmNlPWEpfXJldHVybiByfSxyLmluYm94PWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZSp0PDB8fDA9PT1lP3I6MS8wfSxyLnF1YWRyYXR1cmU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49ZShyKSxhPXQocik7cmV0dXJuIE1hdGguc3FydChuKm4rYSphKX19LHIubWFrZUV2ZW50RGF0YT1mdW5jdGlvbihlLHQsbil7dmFyIGE9ImluZGV4ImluIGU/ZS5pbmRleDplLnBvaW50TnVtYmVyLGk9e2RhdGE6dC5faW5wdXQsZnVsbERhdGE6dCxjdXJ2ZU51bWJlcjp0LmluZGV4LHBvaW50TnVtYmVyOmF9O2lmKHQuX2luZGV4VG9Qb2ludHMpe3ZhciBvPXQuX2luZGV4VG9Qb2ludHNbYV07MT09PW8ubGVuZ3RoP2kucG9pbnRJbmRleD1vWzBdOmkucG9pbnRJbmRpY2VzPW99ZWxzZSBpLnBvaW50SW5kZXg9YTtyZXR1cm4gdC5fbW9kdWxlLmV2ZW50RGF0YT9pPXQuX21vZHVsZS5ldmVudERhdGEoaSxlLHQsbixhKTooInhWYWwiaW4gZT9pLng9ZS54VmFsOiJ4ImluIGUmJihpLng9ZS54KSwieVZhbCJpbiBlP2kueT1lLnlWYWw6InkiaW4gZSYmKGkueT1lLnkpLGUueGEmJihpLnhheGlzPWUueGEpLGUueWEmJihpLnlheGlzPWUueWEpLHZvaWQgMCE9PWUuekxhYmVsVmFsJiYoaS56PWUuekxhYmVsVmFsKSksci5hcHBlbmRBcnJheVBvaW50VmFsdWUoaSx0LGEpLGl9LHIuYXBwZW5kQXJyYXlQb2ludFZhbHVlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgYT10Ll9hcnJheUF0dHJzO2lmKGEpZm9yKHZhciBsPTA7bDxhLmxlbmd0aDtsKyspe3ZhciBzPWFbbF0sYz1pKHMpO2lmKHZvaWQgMD09PWVbY10pe3ZhciB1PW8obi5uZXN0ZWRQcm9wZXJ0eSh0LHMpLmdldCgpLHIpO3ZvaWQgMCE9PXUmJihlW2NdPXUpfX19LHIuYXBwZW5kQXJyYXlNdWx0aVBvaW50VmFsdWVzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgYT10Ll9hcnJheUF0dHJzO2lmKGEpZm9yKHZhciBsPTA7bDxhLmxlbmd0aDtsKyspe3ZhciBzPWFbbF0sYz1pKHMpO2lmKHZvaWQgMD09PWVbY10pe2Zvcih2YXIgdT1uLm5lc3RlZFByb3BlcnR5KHQscykuZ2V0KCksZj1uZXcgQXJyYXkoci5sZW5ndGgpLGQ9MDtkPHIubGVuZ3RoO2QrKylmW2RdPW8odSxyW2RdKTtlW2NdPWZ9fX07dmFyIGE9e2lkczoiaWQiLGxvY2F0aW9uczoibG9jYXRpb24iLGxhYmVsczoibGFiZWwiLHZhbHVlczoidmFsdWUiLCJtYXJrZXIuY29sb3JzIjoiY29sb3IiLHBhcmVudHM6InBhcmVudCJ9O2Z1bmN0aW9uIGkoZSl7cmV0dXJuIGFbZV18fGV9ZnVuY3Rpb24gbyhlLHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP0FycmF5LmlzQXJyYXkoZSkmJkFycmF5LmlzQXJyYXkoZVt0WzBdXSk/ZVt0WzBdXVt0WzFdXTp2b2lkIDA6ZVt0XX12YXIgbD17eDohMCx5OiEwfSxzPXsieCB1bmlmaWVkIjohMCwieSB1bmlmaWVkIjohMH07ci5pc1VuaWZpZWRIb3Zlcj1mdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGUmJiEhc1tlXX0sci5pc1hZaG92ZXI9ZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlJiYhIWxbZV19fSx7Ii4uLy4uL2xpYiI6MjAyfV0sMTEyOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoImQzIiksYT1lKCJmYXN0LWlzbnVtZXJpYyIpLGk9ZSgidGlueWNvbG9yMiIpLG89ZSgiLi4vLi4vbGliIiksbD1vLnN0clRyYW5zbGF0ZSxzPW8uc3RyUm90YXRlLGM9ZSgiLi4vLi4vbGliL2V2ZW50cyIpLHU9ZSgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksZj1lKCIuLi8uLi9saWIvb3ZlcnJpZGVfY3Vyc29yIiksZD1lKCIuLi9kcmF3aW5nIikscD1lKCIuLi9jb2xvciIpLGg9ZSgiLi4vZHJhZ2VsZW1lbnQiKSxnPWUoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksdj1lKCIuLi8uLi9yZWdpc3RyeSIpLG09ZSgiLi9oZWxwZXJzIikseT1lKCIuL2NvbnN0YW50cyIpLHg9ZSgiLi4vbGVnZW5kL2RlZmF1bHRzIiksYj1lKCIuLi9sZWdlbmQvZHJhdyIpLF89eS5ZQU5HTEUsdz1NYXRoLlBJKl8vMTgwLFQ9MS9NYXRoLnNpbih3KSxrPU1hdGguY29zKHcpLE09TWF0aC5zaW4odyksQT15LkhPVkVSQVJST1dTSVpFLEw9eS5IT1ZFUlRFWFRQQUQ7ZnVuY3Rpb24gUyhlKXtyZXR1cm5bZS50cmFjZS5pbmRleCxlLmluZGV4LGUueDAsZS55MCxlLm5hbWUsZS5hdHRyLGUueGEsZS55YXx8IiJdLmpvaW4oIiwiKX1yLmhvdmVyPWZ1bmN0aW9uKGUsdCxyLGkpe2U9by5nZXRHcmFwaERpdihlKSxvLnRocm90dGxlKGUuX2Z1bGxMYXlvdXQuX3VpZCt5LkhPVkVSSUQseS5IT1ZFUk1JTlRJTUUsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKGUsdCxyLGkpe3J8fChyPSJ4eSIpO3ZhciBsPUFycmF5LmlzQXJyYXkocik/cjpbcl0scz1lLl9mdWxsTGF5b3V0LHU9cy5fcGxvdHN8fFtdLGQ9dVtyXSxnPXMuX2hhcygiY2FydGVzaWFuIik7aWYoZCl7dmFyIHk9ZC5vdmVybGF5cy5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlkfSkpO2w9bC5jb25jYXQoeSl9Zm9yKHZhciB4PWwubGVuZ3RoLGI9bmV3IEFycmF5KHgpLF89bmV3IEFycmF5KHgpLHc9ITEsaz0wO2s8eDtrKyspe3ZhciBNPWxba107aWYodVtNXSl3PSEwLGJba109dVtNXS54YXhpcyxfW2tdPXVbTV0ueWF4aXM7ZWxzZXtpZighc1tNXXx8IXNbTV0uX3N1YnBsb3QpcmV0dXJuIHZvaWQgby53YXJuKCJVbnJlY29nbml6ZWQgc3VicGxvdDogIitNKTt2YXIgQT1zW01dLl9zdWJwbG90O2Jba109QS54YXhpcyxfW2tdPUEueWF4aXN9fXZhciBMPXQuaG92ZXJtb2RlfHxzLmhvdmVybW9kZTtMJiYhdyYmKEw9ImNsb3Nlc3QiKTtpZigtMT09PVsieCIsInkiLCJjbG9zZXN0IiwieCB1bmlmaWVkIiwieSB1bmlmaWVkIl0uaW5kZXhPZihMKXx8IWUuY2FsY2RhdGF8fGUucXVlcnlTZWxlY3RvcigiLnpvb21ib3giKXx8ZS5fZHJhZ2dpbmcpcmV0dXJuIGgudW5ob3ZlclJhdyhlLHQpO3ZhciBDLEQsSSxGLE4sSCxqLEIsVixVLHEsRyxaLFk9LTE9PT1zLmhvdmVyZGlzdGFuY2U/MS8wOnMuaG92ZXJkaXN0YW5jZSxYPS0xPT09cy5zcGlrZWRpc3RhbmNlPzEvMDpzLnNwaWtlZGlzdGFuY2UsVz1bXSxRPVtdLEo9e2hMaW5lUG9pbnQ6bnVsbCx2TGluZVBvaW50Om51bGx9LCQ9ITE7aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IoTD0iYXJyYXkiLEk9MDtJPHQubGVuZ3RoO0krKykoTj1lLmNhbGNkYXRhW3RbSV0uY3VydmVOdW1iZXJ8fDBdKSYmKEg9TlswXS50cmFjZSwic2tpcCIhPT1OWzBdLnRyYWNlLmhvdmVyaW5mbyYmKFEucHVzaChOKSwiaCI9PT1ILm9yaWVudGF0aW9uJiYoJD0hMCkpKTtlbHNle2ZvcihGPTA7RjxlLmNhbGNkYXRhLmxlbmd0aDtGKyspTj1lLmNhbGNkYXRhW0ZdLCJza2lwIiE9PShIPU5bMF0udHJhY2UpLmhvdmVyaW5mbyYmbS5pc1RyYWNlSW5TdWJwbG90cyhILGwpJiYoUS5wdXNoKE4pLCJoIj09PUgub3JpZW50YXRpb24mJigkPSEwKSk7dmFyIEssZWU7aWYoIXQudGFyZ2V0KUs9InhweCJpbiB0P3QueHB4OmJbMF0uX2xlbmd0aC8yLGVlPSJ5cHgiaW4gdD90LnlweDpfWzBdLl9sZW5ndGgvMjtlbHNle2lmKCExPT09Yy50cmlnZ2VySGFuZGxlcihlLCJwbG90bHlfYmVmb3JlaG92ZXIiLHQpKXJldHVybjt2YXIgdGU9dC50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Sz10LmNsaWVudFgtdGUubGVmdCxlZT10LmNsaWVudFktdGUudG9wLHMuX2NhbGNJbnZlcnNlVHJhbnNmb3JtKGUpO3ZhciByZT1vLmFwcGx5M0RUcmFuc2Zvcm0ocy5faW52VHJhbnNmb3JtKShLLGVlKTtpZihLPXJlWzBdLGVlPXJlWzFdLEs8MHx8Sz5iWzBdLl9sZW5ndGh8fGVlPDB8fGVlPl9bMF0uX2xlbmd0aClyZXR1cm4gaC51bmhvdmVyUmF3KGUsdCl9aWYodC5wb2ludGVyWD1LK2JbMF0uX29mZnNldCx0LnBvaW50ZXJZPWVlK19bMF0uX29mZnNldCxDPSJ4dmFsImluIHQ/bS5mbGF0KGwsdC54dmFsKTptLnAyYyhiLEspLEQ9Inl2YWwiaW4gdD9tLmZsYXQobCx0Lnl2YWwpOm0ucDJjKF8sZWUpLCFhKENbMF0pfHwhYShEWzBdKSlyZXR1cm4gby53YXJuKCJGeC5ob3ZlciBmYWlsZWQiLHQsZSksaC51bmhvdmVyUmF3KGUsdCl9dmFyIG5lPTEvMDtmdW5jdGlvbiBhZShlLHIpe2ZvcihGPTA7RjxRLmxlbmd0aDtGKyspaWYoKE49UVtGXSkmJk5bMF0mJk5bMF0udHJhY2UmJiEwPT09KEg9TlswXS50cmFjZSkudmlzaWJsZSYmMCE9PUguX2xlbmd0aCYmLTE9PT1bImNhcnBldCIsImNvbnRvdXJjYXJwZXQiXS5pbmRleE9mKEguX21vZHVsZS5uYW1lKSl7aWYoInNwbG9tIj09PUgudHlwZT9qPWxbQj0wXTooaj1tLmdldFN1YnBsb3QoSCksQj1sLmluZGV4T2YoaikpLFY9TCxtLmlzVW5pZmllZEhvdmVyKFYpJiYoVj1WLmNoYXJBdCgwKSksRz17Y2Q6Tix0cmFjZTpILHhhOmJbQl0seWE6X1tCXSxtYXhIb3ZlckRpc3RhbmNlOlksbWF4U3Bpa2VEaXN0YW5jZTpYLGluZGV4OiExLGRpc3RhbmNlOk1hdGgubWluKG5lLFkpLHNwaWtlRGlzdGFuY2U6MS8wLHhTcGlrZTp2b2lkIDAseVNwaWtlOnZvaWQgMCxjb2xvcjpwLmRlZmF1bHRMaW5lLG5hbWU6SC5uYW1lLHgwOnZvaWQgMCx4MTp2b2lkIDAseTA6dm9pZCAwLHkxOnZvaWQgMCx4TGFiZWxWYWw6dm9pZCAwLHlMYWJlbFZhbDp2b2lkIDAsekxhYmVsVmFsOnZvaWQgMCx0ZXh0OnZvaWQgMH0sc1tqXSYmKEcuc3VicGxvdD1zW2pdLl9zdWJwbG90KSxzLl9zcGxvbVNjZW5lcyYmcy5fc3Bsb21TY2VuZXNbSC51aWRdJiYoRy5zY2VuZT1zLl9zcGxvbVNjZW5lc1tILnVpZF0pLFo9Vy5sZW5ndGgsImFycmF5Ij09PVYpe3ZhciBuPXRbRl07InBvaW50TnVtYmVyImluIG4/KEcuaW5kZXg9bi5wb2ludE51bWJlcixWPSJjbG9zZXN0Iik6KFY9IiIsInh2YWwiaW4gbiYmKFU9bi54dmFsLFY9IngiKSwieXZhbCJpbiBuJiYocT1uLnl2YWwsVj1WPyJjbG9zZXN0IjoieSIpKX1lbHNlIHZvaWQgMCE9PWUmJnZvaWQgMCE9PXI/KFU9ZSxxPXIpOihVPUNbQl0scT1EW0JdKTtpZigwIT09WSlpZihILl9tb2R1bGUmJkguX21vZHVsZS5ob3ZlclBvaW50cyl7dmFyIGk9SC5fbW9kdWxlLmhvdmVyUG9pbnRzKEcsVSxxLFYscy5faG92ZXJsYXllcik7aWYoaSlmb3IodmFyIGMsdT0wO3U8aS5sZW5ndGg7dSsrKWM9aVt1XSxhKGMueDApJiZhKGMueTApJiZXLnB1c2goeihjLEwpKX1lbHNlIG8ubG9nKCJVbnJlY29nbml6ZWQgdHJhY2UgdHlwZSBpbiBob3ZlcjoiLEgpO2lmKCJjbG9zZXN0Ij09PUwmJlcubGVuZ3RoPlomJihXLnNwbGljZSgwLFopLG5lPVdbMF0uZGlzdGFuY2UpLGcmJjAhPT1YJiYwPT09Vy5sZW5ndGgpe0cuZGlzdGFuY2U9WCxHLmluZGV4PSExO3ZhciBmPUguX21vZHVsZS5ob3ZlclBvaW50cyhHLFUscSwiY2xvc2VzdCIscy5faG92ZXJsYXllcik7aWYoZiYmKGY9Zi5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNwaWtlRGlzdGFuY2U8PVh9KSkpLGYmJmYubGVuZ3RoKXt2YXIgZCxoPWYuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS54YS5zaG93c3Bpa2VzJiYiaG92ZXJlZCBkYXRhIiE9PWUueGEuc3Bpa2VzbmFwfSkpO2lmKGgubGVuZ3RoKXt2YXIgdj1oWzBdO2Eodi54MCkmJmEodi55MCkmJihkPW9lKHYpLCghSi52TGluZVBvaW50fHxKLnZMaW5lUG9pbnQuc3Bpa2VEaXN0YW5jZT5kLnNwaWtlRGlzdGFuY2UpJiYoSi52TGluZVBvaW50PWQpKX12YXIgeT1mLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUueWEuc2hvd3NwaWtlcyYmImhvdmVyZWQgZGF0YSIhPT1lLnlhLnNwaWtlc25hcH0pKTtpZih5Lmxlbmd0aCl7dmFyIHg9eVswXTthKHgueDApJiZhKHgueTApJiYoZD1vZSh4KSwoIUouaExpbmVQb2ludHx8Si5oTGluZVBvaW50LnNwaWtlRGlzdGFuY2U+ZC5zcGlrZURpc3RhbmNlKSYmKEouaExpbmVQb2ludD1kKSl9fX19fWZ1bmN0aW9uIGllKGUsdCl7Zm9yKHZhciByLG49bnVsbCxhPTEvMCxpPTA7aTxlLmxlbmd0aDtpKyspKHI9ZVtpXS5zcGlrZURpc3RhbmNlKTw9YSYmcjw9dCYmKG49ZVtpXSxhPXIpO3JldHVybiBufWZ1bmN0aW9uIG9lKGUpe3JldHVybiBlP3t4YTplLnhhLHlhOmUueWEseDp2b2lkIDAhPT1lLnhTcGlrZT9lLnhTcGlrZTooZS54MCtlLngxKS8yLHk6dm9pZCAwIT09ZS55U3Bpa2U/ZS55U3Bpa2U6KGUueTArZS55MSkvMixkaXN0YW5jZTplLmRpc3RhbmNlLHNwaWtlRGlzdGFuY2U6ZS5zcGlrZURpc3RhbmNlLGN1cnZlTnVtYmVyOmUudHJhY2UuaW5kZXgsY29sb3I6ZS5jb2xvcixwb2ludE51bWJlcjplLmluZGV4fTpudWxsfWFlKCk7dmFyIGxlPXtmdWxsTGF5b3V0OnMsY29udGFpbmVyOnMuX2hvdmVybGF5ZXIsb3V0ZXJDb250YWluZXI6cy5fcGFwZXJkaXYsZXZlbnQ6dH0sc2U9ZS5fc3Bpa2Vwb2ludHMsY2U9e3ZMaW5lUG9pbnQ6Si52TGluZVBvaW50LGhMaW5lUG9pbnQ6Si5oTGluZVBvaW50fTtpZihlLl9zcGlrZXBvaW50cz1jZSxnJiYwIT09WCYmMCE9PVcubGVuZ3RoKXt2YXIgdWU9aWUoVy5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnlhLnNob3dzcGlrZXN9KSksWCk7Si5oTGluZVBvaW50PW9lKHVlKTt2YXIgZmU9aWUoVy5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnhhLnNob3dzcGlrZXN9KSksWCk7Si52TGluZVBvaW50PW9lKGZlKX1pZigwPT09Vy5sZW5ndGgpe3ZhciBkZT1oLnVuaG92ZXJSYXcoZSx0KTtyZXR1cm4hZ3x8bnVsbD09PUouaExpbmVQb2ludCYmbnVsbD09PUoudkxpbmVQb2ludHx8RShzZSkmJlIoZSxKLGxlKSxkZX1nJiZFKHNlKSYmUihlLEosbGUpO2lmKFcuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5kaXN0YW5jZS10LmRpc3RhbmNlfSkpLG0uaXNYWWhvdmVyKFYpJiYwIT09V1swXS5sZW5ndGgmJiJzcGxvbSIhPT1XWzBdLnRyYWNlLnR5cGUpe3ZhciBwZT1XWzBdLGhlPXBlLmNkW3BlLmluZGV4XSxnZT0iZ3JvdXAiPT09cy5ib3htb2RlfHwiZ3JvdXAiPT09cy52aW9saW5tb2RlLHZlPXBlLnhWYWwsbWU9cGUueGE7ImNhdGVnb3J5Ij09PW1lLnR5cGUmJih2ZT1tZS5fY2F0ZWdvcmllc01hcFt2ZV0pLCJkYXRlIj09PW1lLnR5cGUmJih2ZT1tZS5kMmModmUpKSxoZSYmaGUudCYmaGUudC5wb3NMZXR0ZXI9PT1tZS5faWQmJmdlJiYodmUrPWhlLnQuZFBvcyk7dmFyIHllPXBlLnlWYWw7ImNhdGVnb3J5Ij09PShtZT1wZS55YSkudHlwZSYmKHllPW1lLl9jYXRlZ29yaWVzTWFwW3llXSksImRhdGUiPT09bWUudHlwZSYmKHllPW1lLmQyYyh5ZSkpLGhlJiZoZS50JiZoZS50LnBvc0xldHRlcj09PW1lLl9pZCYmZ2UmJih5ZSs9aGUudC5kUG9zKSxhZSh2ZSx5ZSk7dmFyIHhlPXt9O1c9Vy5maWx0ZXIoKGZ1bmN0aW9uKGUpe3ZhciB0PVMoZSk7aWYoIXhlW3RdKXJldHVybiB4ZVt0XT0hMCx4ZVt0XX0pKX12YXIgYmU9ZS5faG92ZXJkYXRhLF9lPVtdO2ZvcihJPTA7STxXLmxlbmd0aDtJKyspe3ZhciB3ZT1XW0ldLFRlPW0ubWFrZUV2ZW50RGF0YSh3ZSx3ZS50cmFjZSx3ZS5jZCk7aWYoITEhPT13ZS5ob3ZlcnRlbXBsYXRlKXt2YXIga2U9ITE7d2UuY2Rbd2UuaW5kZXhdJiZ3ZS5jZFt3ZS5pbmRleF0uaHQmJihrZT13ZS5jZFt3ZS5pbmRleF0uaHQpLHdlLmhvdmVydGVtcGxhdGU9a2V8fHdlLnRyYWNlLmhvdmVydGVtcGxhdGV8fCExfXdlLmV2ZW50RGF0YT1bVGVdLF9lLnB1c2goVGUpfWUuX2hvdmVyZGF0YT1fZTt2YXIgTWU9InkiPT09TCYmKFEubGVuZ3RoPjF8fFcubGVuZ3RoPjEpfHwiY2xvc2VzdCI9PT1MJiYkJiZXLmxlbmd0aD4xLEFlPXAuY29tYmluZShzLnBsb3RfYmdjb2xvcnx8cC5iYWNrZ3JvdW5kLHMucGFwZXJfYmdjb2xvciksTGU9e2hvdmVybW9kZTpMLHJvdGF0ZUxhYmVsczpNZSxiZ0NvbG9yOkFlLGNvbnRhaW5lcjpzLl9ob3ZlcmxheWVyLG91dGVyQ29udGFpbmVyOnMuX3BhcGVyZGl2LGNvbW1vbkxhYmVsT3B0czpzLmhvdmVybGFiZWwsaG92ZXJkaXN0YW5jZTpzLmhvdmVyZGlzdGFuY2V9LFNlPU8oVyxMZSxlKTttLmlzVW5pZmllZEhvdmVyKEwpfHwoIWZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLGksbyxsLHMsYyx1PTAsZj0xLGQ9ZS5zaXplKCkscD1uZXcgQXJyYXkoZCksaD0wO2Z1bmN0aW9uIGcoZSl7dmFyIHQ9ZVswXSxyPWVbZS5sZW5ndGgtMV07aWYoYT10LnBtaW4tdC5wb3MtdC5kcCt0LnNpemUsaT1yLnBvcytyLmRwK3Iuc2l6ZS10LnBtYXgsYT4uMDEpe2ZvcihsPWUubGVuZ3RoLTE7bD49MDtsLS0pZVtsXS5kcCs9YTtuPSExfWlmKCEoaTwuMDEpKXtpZihhPC0uMDEpe2ZvcihsPWUubGVuZ3RoLTE7bD49MDtsLS0pZVtsXS5kcC09aTtuPSExfWlmKG4pe3ZhciBjPTA7Zm9yKG89MDtvPGUubGVuZ3RoO28rKykocz1lW29dKS5wb3Mrcy5kcCtzLnNpemU+dC5wbWF4JiZjKys7Zm9yKG89ZS5sZW5ndGgtMTtvPj0wJiYhKGM8PTApO28tLSkocz1lW29dKS5wb3M+dC5wbWF4LTEmJihzLmRlbD0hMCxjLS0pO2ZvcihvPTA7bzxlLmxlbmd0aCYmIShjPD0wKTtvKyspaWYoKHM9ZVtvXSkucG9zPHQucG1pbisxKWZvcihzLmRlbD0hMCxjLS0saT0yKnMuc2l6ZSxsPWUubGVuZ3RoLTE7bD49MDtsLS0pZVtsXS5kcC09aTtmb3Iobz1lLmxlbmd0aC0xO28+PTAmJiEoYzw9MCk7by0tKShzPWVbb10pLnBvcytzLmRwK3Muc2l6ZT50LnBtYXgmJihzLmRlbD0hMCxjLS0pfX19ZS5lYWNoKChmdW5jdGlvbihlKXt2YXIgbj1lW3RdLGE9IngiPT09bi5faWQuY2hhckF0KDApLGk9bi5yYW5nZTswPT09aCYmaSYmaVswXT5pWzFdIT09YSYmKGY9LTEpLHBbaCsrXT1be2RhdHVtOmUsdHJhY2VJbmRleDplLnRyYWNlLmluZGV4LGRwOjAscG9zOmUucG9zLHBvc3JlZjplLnBvc3JlZixzaXplOmUuYnkqKGE/VDoxKS8yLHBtaW46MCxwbWF4OmE/ci53aWR0aDpyLmhlaWdodH1dfSkpLHAuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVswXS5wb3NyZWYtdFswXS5wb3NyZWZ8fGYqKHRbMF0udHJhY2VJbmRleC1lWzBdLnRyYWNlSW5kZXgpfSkpO2Zvcig7IW4mJnU8PWQ7KXtmb3IodSsrLG49ITAsbz0wO288cC5sZW5ndGgtMTspe3ZhciB2PXBbb10sbT1wW28rMV0seT12W3YubGVuZ3RoLTFdLHg9bVswXTtpZigoYT15LnBvcyt5LmRwK3kuc2l6ZS14LnBvcy14LmRwK3guc2l6ZSk+LjAxJiZ5LnBtaW49PT14LnBtaW4mJnkucG1heD09PXgucG1heCl7Zm9yKGw9bS5sZW5ndGgtMTtsPj0wO2wtLSltW2xdLmRwKz1hO2Zvcih2LnB1c2guYXBwbHkodixtKSxwLnNwbGljZShvKzEsMSksYz0wLGw9di5sZW5ndGgtMTtsPj0wO2wtLSljKz12W2xdLmRwO2ZvcihpPWMvdi5sZW5ndGgsbD12Lmxlbmd0aC0xO2w+PTA7bC0tKXZbbF0uZHAtPWk7bj0hMX1lbHNlIG8rK31wLmZvckVhY2goZyl9Zm9yKG89cC5sZW5ndGgtMTtvPj0wO28tLSl7dmFyIGI9cFtvXTtmb3IobD1iLmxlbmd0aC0xO2w+PTA7bC0tKXt2YXIgXz1iW2xdLHc9Xy5kYXR1bTt3Lm9mZnNldD1fLmRwLHcuZGVsPV8uZGVsfX19KFNlLE1lPyJ4YSI6InlhIixzKSxQKFNlLE1lLHMuX2ludlNjYWxlWCxzLl9pbnZTY2FsZVkpKTtpZih0LnRhcmdldCYmdC50YXJnZXQudGFnTmFtZSl7dmFyIENlPXYuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImhhc0NsaWNrVG9TaG93IikoZSxfZSk7ZihuLnNlbGVjdCh0LnRhcmdldCksQ2U/InBvaW50ZXIiOiIiKX1pZighdC50YXJnZXR8fGl8fCFmdW5jdGlvbihlLHQscil7aWYoIXJ8fHIubGVuZ3RoIT09ZS5faG92ZXJkYXRhLmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIG49ci5sZW5ndGgtMTtuPj0wO24tLSl7dmFyIGE9cltuXSxpPWUuX2hvdmVyZGF0YVtuXTtpZihhLmN1cnZlTnVtYmVyIT09aS5jdXJ2ZU51bWJlcnx8U3RyaW5nKGEucG9pbnROdW1iZXIpIT09U3RyaW5nKGkucG9pbnROdW1iZXIpfHxTdHJpbmcoYS5wb2ludE51bWJlcnMpIT09U3RyaW5nKGkucG9pbnROdW1iZXJzKSlyZXR1cm4hMH1yZXR1cm4hMX0oZSwwLGJlKSlyZXR1cm47YmUmJmUuZW1pdCgicGxvdGx5X3VuaG92ZXIiLHtldmVudDp0LHBvaW50czpiZX0pO2UuZW1pdCgicGxvdGx5X2hvdmVyIix7ZXZlbnQ6dCxwb2ludHM6ZS5faG92ZXJkYXRhLHhheGVzOmIseWF4ZXM6Xyx4dmFsczpDLHl2YWxzOkR9KX0oZSx0LHIsaSl9KSl9LHIubG9uZUhvdmVyPWZ1bmN0aW9uKGUsdCl7dmFyIHI9ITA7QXJyYXkuaXNBcnJheShlKXx8KHI9ITEsZT1bZV0pO3ZhciBhPWUubWFwKChmdW5jdGlvbihlKXtyZXR1cm57Y29sb3I6ZS5jb2xvcnx8cC5kZWZhdWx0TGluZSx4MDplLngwfHxlLnh8fDAseDE6ZS54MXx8ZS54fHwwLHkwOmUueTB8fGUueXx8MCx5MTplLnkxfHxlLnl8fDAseExhYmVsOmUueExhYmVsLHlMYWJlbDplLnlMYWJlbCx6TGFiZWw6ZS56TGFiZWwsdGV4dDplLnRleHQsbmFtZTplLm5hbWUsaWRlYWxBbGlnbjplLmlkZWFsQWxpZ24sYm9yZGVyQ29sb3I6ZS5ib3JkZXJDb2xvcixmb250RmFtaWx5OmUuZm9udEZhbWlseSxmb250U2l6ZTplLmZvbnRTaXplLGZvbnRDb2xvcjplLmZvbnRDb2xvcixuYW1lTGVuZ3RoOmUubmFtZUxlbmd0aCx0ZXh0QWxpZ246ZS50ZXh0QWxpZ24sdHJhY2U6ZS50cmFjZXx8e2luZGV4OjAsaG92ZXJpbmZvOiIifSx4YTp7X29mZnNldDowfSx5YTp7X29mZnNldDowfSxpbmRleDowLGhvdmVydGVtcGxhdGU6ZS5ob3ZlcnRlbXBsYXRlfHwhMSxldmVudERhdGE6ZS5ldmVudERhdGF8fCExLGhvdmVydGVtcGxhdGVMYWJlbHM6ZS5ob3ZlcnRlbXBsYXRlTGFiZWxzfHwhMX19KSksaT1uLnNlbGVjdCh0LmNvbnRhaW5lciksbz10Lm91dGVyQ29udGFpbmVyP24uc2VsZWN0KHQub3V0ZXJDb250YWluZXIpOmksbD17aG92ZXJtb2RlOiJjbG9zZXN0Iixyb3RhdGVMYWJlbHM6ITEsYmdDb2xvcjp0LmJnQ29sb3J8fHAuYmFja2dyb3VuZCxjb250YWluZXI6aSxvdXRlckNvbnRhaW5lcjpvfSxzPU8oYSxsLHQuZ2QpLGM9MCx1PTA7cy5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiBlLnkwLXQueTB9KSkuZWFjaCgoZnVuY3Rpb24oZSxyKXt2YXIgbj1lLnkwLWUuYnkvMjtlLm9mZnNldD1uLTU8Yz9jLW4rNTowLGM9bitlLmJ5K2Uub2Zmc2V0LHI9PT10LmFuY2hvckluZGV4JiYodT1lLm9mZnNldCl9KSkuZWFjaCgoZnVuY3Rpb24oZSl7ZS5vZmZzZXQtPXV9KSk7dmFyIGY9dC5nZC5fZnVsbExheW91dC5faW52U2NhbGVYLGQ9dC5nZC5fZnVsbExheW91dC5faW52U2NhbGVZO3JldHVybiBQKHMsbC5yb3RhdGVMYWJlbHMsZixkKSxyP3M6cy5ub2RlKCl9O3ZhciBDPS88ZXh0cmE+KFtcc1xTXSopPFwvZXh0cmE+LztmdW5jdGlvbiBPKGUsdCxyKXt2YXIgYT1yLl9mdWxsTGF5b3V0LGk9dC5ob3Zlcm1vZGUsYz10LnJvdGF0ZUxhYmVscyxmPXQuYmdDb2xvcixoPXQuY29udGFpbmVyLGc9dC5vdXRlckNvbnRhaW5lcix2PXQuY29tbW9uTGFiZWxPcHRzfHx7fSx3PXQuZm9udEZhbWlseXx8eS5IT1ZFUkZPTlQsVD10LmZvbnRTaXplfHx5LkhPVkVSRk9OVFNJWkUsaz1lWzBdLE09ay54YSxDPWsueWEsTz0ieSI9PT1pLmNoYXJBdCgwKT8ieUxhYmVsIjoieExhYmVsIixQPWtbT10sej0oU3RyaW5nKFApfHwiIikuc3BsaXQoIiAiKVswXSxSPWcubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEU9Ui50b3AsST1SLndpZHRoLEY9Ui5oZWlnaHQsTj12b2lkIDAhPT1QJiZrLmRpc3RhbmNlPD10LmhvdmVyZGlzdGFuY2UmJigieCI9PT1pfHwieSI9PT1pKTtpZihOKXt2YXIgSCxqLEI9ITA7Zm9yKEg9MDtIPGUubGVuZ3RoO0grKylpZihCJiZ2b2lkIDA9PT1lW0hdLnpMYWJlbCYmKEI9ITEpLGo9ZVtIXS5ob3ZlcmluZm98fGVbSF0udHJhY2UuaG92ZXJpbmZvKXt2YXIgVj1BcnJheS5pc0FycmF5KGopP2o6ai5zcGxpdCgiKyIpO2lmKC0xPT09Vi5pbmRleE9mKCJhbGwiKSYmLTE9PT1WLmluZGV4T2YoaSkpe049ITE7YnJlYWt9fUImJihOPSExKX12YXIgVT1oLnNlbGVjdEFsbCgiZy5heGlzdGV4dCIpLmRhdGEoTj9bMF06W10pO2Z1bmN0aW9uIHEoZSl7cmV0dXJuIGUuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09ZS56TGFiZWxWYWx8fChlW09dfHwiIikuc3BsaXQoIiAiKVswXT09PXp9KSl9aWYoVS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImF4aXN0ZXh0IiwhMCksVS5leGl0KCkucmVtb3ZlKCksVS5lYWNoKChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLHM9by5lbnN1cmVTaW5nbGUodCwicGF0aCIsIiIsKGZ1bmN0aW9uKGUpe2Uuc3R5bGUoeyJzdHJva2Utd2lkdGgiOiIxcHgifSl9KSksYz1vLmVuc3VyZVNpbmdsZSh0LCJ0ZXh0IiwiIiwoZnVuY3Rpb24oZSl7ZS5hdHRyKCJkYXRhLW5vdGV4IiwxKX0pKSxmPXYuYmdjb2xvcnx8cC5kZWZhdWx0TGluZSxoPXYuYm9yZGVyY29sb3J8fHAuY29udHJhc3QoZiksZz1wLmNvbnRyYXN0KGYpLG09e2ZhbWlseTp2LmZvbnQuZmFtaWx5fHx3LHNpemU6di5mb250LnNpemV8fFQsY29sb3I6di5mb250LmNvbG9yfHxnfTtzLnN0eWxlKHtmaWxsOmYsc3Ryb2tlOmh9KSxjLnRleHQoUCkuY2FsbChkLmZvbnQsbSkuY2FsbCh1LnBvc2l0aW9uVGV4dCwwLDApLmNhbGwodS5jb252ZXJ0VG9Uc3BhbnMsciksdC5hdHRyKCJ0cmFuc2Zvcm0iLCIiKTt2YXIgeSx4LGI9Yy5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoIngiPT09aSl7dmFyIF89InRvcCI9PT1NLnNpZGU/Ii0iOiIiO2MuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5jYWxsKHUucG9zaXRpb25UZXh0LDAsInRvcCI9PT1NLnNpZGU/RS1iLmJvdHRvbS1BLUw6RS1iLnRvcCtBK0wpLHk9TS5fb2Zmc2V0KyhrLngwK2sueDEpLzIseD1DLl9vZmZzZXQrKCJ0b3AiPT09TS5zaWRlPzA6Qy5fbGVuZ3RoKTt2YXIgUz1iLndpZHRoLzIrTDt5PFM/KHk9UyxzLmF0dHIoImQiLCJNLSIrKFMtQSkrIiwwTC0iKyhTLTIqQSkrIiwiK18rQSsiSCIrKEwrYi53aWR0aC8yKSsidiIrXysoMipMK2IuaGVpZ2h0KSsiSC0iK1MrIlYiK18rQSsiWiIpKTp5PmEud2lkdGgtUz8oeT1hLndpZHRoLVMscy5hdHRyKCJkIiwiTSIrKFMtQSkrIiwwTCIrUysiLCIrXytBKyJ2IitfKygyKkwrYi5oZWlnaHQpKyJILSIrUysiViIrXytBKyJIIisoUy0yKkEpKyJaIikpOnMuYXR0cigiZCIsIk0wLDBMIitBKyIsIitfK0ErIkgiKyhMK2Iud2lkdGgvMikrInYiK18rKDIqTCtiLmhlaWdodCkrIkgtIisoTCtiLndpZHRoLzIpKyJWIitfK0ErIkgtIitBKyJaIil9ZWxzZXt2YXIgTyxELHo7InJpZ2h0Ij09PUMuc2lkZT8oTz0ic3RhcnQiLEQ9MSx6PSIiLHk9TS5fb2Zmc2V0K00uX2xlbmd0aCk6KE89ImVuZCIsRD0tMSx6PSItIix5PU0uX29mZnNldCkseD1DLl9vZmZzZXQrKGsueTAray55MSkvMixjLmF0dHIoInRleHQtYW5jaG9yIixPKSxzLmF0dHIoImQiLCJNMCwwTCIreitBKyIsIitBKyJWIisoTCtiLmhlaWdodC8yKSsiaCIreisoMipMK2Iud2lkdGgpKyJWLSIrKEwrYi5oZWlnaHQvMikrIkgiK3orQSsiVi0iK0ErIloiKTt2YXIgUixJPWIuaGVpZ2h0LzIsRj1FLWIudG9wLUksTj0iY2xpcCIrYS5fdWlkKyJjb21tb25sYWJlbCIrQy5faWQ7aWYoeTxiLndpZHRoKzIqTCtBKXtSPSJNLSIrKEErTCkrIi0iK0krImgtIisoYi53aWR0aC1MKSsiViIrSSsiaCIrKGIud2lkdGgtTCkrIloiO3ZhciBIPWIud2lkdGgteStMO3UucG9zaXRpb25UZXh0KGMsSCxGKSwiZW5kIj09PU8mJmMuc2VsZWN0QWxsKCJ0c3BhbiIpLmVhY2goKGZ1bmN0aW9uKCl7dmFyIGU9bi5zZWxlY3QodGhpcyksdD1kLnRlc3Rlci5hcHBlbmQoInRleHQiKS50ZXh0KGUudGV4dCgpKS5jYWxsKGQuZm9udCxtKSxyPXQubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO01hdGgucm91bmQoci53aWR0aCk8TWF0aC5yb3VuZChiLndpZHRoKSYmZS5hdHRyKCJ4IixILXIud2lkdGgpLHQucmVtb3ZlKCl9KSl9ZWxzZSB1LnBvc2l0aW9uVGV4dChjLEQqKEwrQSksRiksUj1udWxsO3ZhciBqPWEuX3RvcGNsaXBzLnNlbGVjdEFsbCgiIyIrTikuZGF0YShSP1swXTpbXSk7ai5lbnRlcigpLmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsTikuYXBwZW5kKCJwYXRoIiksai5leGl0KCkucmVtb3ZlKCksai5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIixSKSxkLnNldENsaXBVcmwoYyxSP046bnVsbCxyKX10LmF0dHIoInRyYW5zZm9ybSIsbCh5LHgpKSxlPXEoZSl9KSksbS5pc1VuaWZpZWRIb3ZlcihpKSl7aWYoaC5zZWxlY3RBbGwoImcuaG92ZXJ0ZXh0IikucmVtb3ZlKCksdm9pZCAwIT09UCYmay5kaXN0YW5jZTw9dC5ob3ZlcmRpc3RhbmNlJiYoZT1xKGUpKSwwPT09ZS5sZW5ndGgpcmV0dXJuO3ZhciBHPXtzaG93bGVnZW5kOiEwLGxlZ2VuZDp7dGl0bGU6e3RleHQ6UCxmb250OmEuaG92ZXJsYWJlbC5mb250fSxmb250OmEuaG92ZXJsYWJlbC5mb250LGJnY29sb3I6YS5ob3ZlcmxhYmVsLmJnY29sb3IsYm9yZGVyY29sb3I6YS5ob3ZlcmxhYmVsLmJvcmRlcmNvbG9yLGJvcmRlcndpZHRoOjEsdHJhY2Vncm91cGdhcDo3LHRyYWNlb3JkZXI6YS5sZWdlbmQ/YS5sZWdlbmQudHJhY2VvcmRlcjp2b2lkIDAsb3JpZW50YXRpb246InYifX0sWj17fTt4KEcsWixyLl9mdWxsRGF0YSk7dmFyIFk9Wi5sZWdlbmQ7WS5lbnRyaWVzPVtdO2Zvcih2YXIgWD0wO1g8ZS5sZW5ndGg7WCsrKXt2YXIgVz1EKGVbWF0sITAsaSxhLFApLFE9V1swXSxKPVdbMV0sJD1lW1hdOyQubmFtZT1KLCQudGV4dD0iIiE9PUo/SisiIDogIitROlE7dmFyIEs9JC5jZFskLmluZGV4XTtLJiYoSy5tYyYmKCQubWM9Sy5tYyksSy5tY2MmJigkLm1jPUsubWNjKSxLLm1sYyYmKCQubWxjPUsubWxjKSxLLm1sY2MmJigkLm1sYz1LLm1sY2MpLEsubWx3JiYoJC5tbHc9Sy5tbHcpLEsubXJjJiYoJC5tcmM9Sy5tcmMpLEsuZGlyJiYoJC5kaXI9Sy5kaXIpKSwkLl9kaXN0aW5jdD0hMCxZLmVudHJpZXMucHVzaChbJF0pfVkuZW50cmllcy5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiBlWzBdLnRyYWNlLmluZGV4LXRbMF0udHJhY2UuaW5kZXh9KSksWS5sYXllcj1oLGIocixZKTt2YXIgZWU9by5tZWFuKGUubWFwKChmdW5jdGlvbihlKXtyZXR1cm4oZS55MCtlLnkxKS8yfSkpKSx0ZT1vLm1lYW4oZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybihlLngwK2UueDEpLzJ9KSkpLHJlPWguc2VsZWN0KCJnLmxlZ2VuZCIpLG5lPXJlLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0ZSs9TS5fb2Zmc2V0LGVlKz1DLl9vZmZzZXQtbmUuaGVpZ2h0LzI7dmFyIGFlPW5lLndpZHRoKzIqTDshKHRlK2FlPD1JKSYmdGUtYWU+PTA/dGUtPWFlOnRlKz0yKkw7dmFyIGllPW5lLmhlaWdodCsyKkwsb2U9ZWUraWU+PUY7cmV0dXJuIGllPD1GJiYoZWU8PUU/ZWU9Qy5fb2Zmc2V0KzIqTDpvZSYmKGVlPUYtaWUpKSxyZS5hdHRyKCJ0cmFuc2Zvcm0iLGwodGUsZWUpKSxyZX12YXIgbGU9aC5zZWxlY3RBbGwoImcuaG92ZXJ0ZXh0IikuZGF0YShlLChmdW5jdGlvbihlKXtyZXR1cm4gUyhlKX0pKTtyZXR1cm4gbGUuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJob3ZlcnRleHQiLCEwKS5lYWNoKChmdW5jdGlvbigpe3ZhciBlPW4uc2VsZWN0KHRoaXMpO2UuYXBwZW5kKCJyZWN0IikuY2FsbChwLmZpbGwscC5hZGRPcGFjaXR5KGYsLjgpKSxlLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoIm5hbWUiLCEwKSxlLmFwcGVuZCgicGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLCIxcHgiKSxlLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoIm51bXMiLCEwKS5jYWxsKGQuZm9udCx3LFQpfSkpLGxlLmV4aXQoKS5yZW1vdmUoKSxsZS5lYWNoKChmdW5jdGlvbihlKXt2YXIgdD1uLnNlbGVjdCh0aGlzKS5hdHRyKCJ0cmFuc2Zvcm0iLCIiKSxvPWUuY29sb3I7QXJyYXkuaXNBcnJheShvKSYmKG89b1tlLmV2ZW50RGF0YVswXS5wb2ludE51bWJlcl0pO3ZhciBoPWUuYmdjb2xvcnx8byxnPXAuY29tYmluZShwLm9wYWNpdHkoaCk/aDpwLmRlZmF1bHRMaW5lLGYpLHY9cC5jb21iaW5lKHAub3BhY2l0eShvKT9vOnAuZGVmYXVsdExpbmUsZiksbT1lLmJvcmRlckNvbG9yfHxwLmNvbnRyYXN0KGcpLHk9RChlLE4saSxhLFAsdCkseD15WzBdLGI9eVsxXSxrPXQuc2VsZWN0KCJ0ZXh0Lm51bXMiKS5jYWxsKGQuZm9udCxlLmZvbnRGYW1pbHl8fHcsZS5mb250U2l6ZXx8VCxlLmZvbnRDb2xvcnx8bSkudGV4dCh4KS5hdHRyKCJkYXRhLW5vdGV4IiwxKS5jYWxsKHUucG9zaXRpb25UZXh0LDAsMCkuY2FsbCh1LmNvbnZlcnRUb1RzcGFucyxyKSxNPXQuc2VsZWN0KCJ0ZXh0Lm5hbWUiKSxTPTAsQz0wO2lmKGImJmIhPT14KXtNLmNhbGwoZC5mb250LGUuZm9udEZhbWlseXx8dyxlLmZvbnRTaXplfHxULHYpLnRleHQoYikuYXR0cigiZGF0YS1ub3RleCIsMSkuY2FsbCh1LnBvc2l0aW9uVGV4dCwwLDApLmNhbGwodS5jb252ZXJ0VG9Uc3BhbnMscik7dmFyIE89TS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Uz1PLndpZHRoKzIqTCxDPU8uaGVpZ2h0KzIqTH1lbHNlIE0ucmVtb3ZlKCksdC5zZWxlY3QoInJlY3QiKS5yZW1vdmUoKTt0LnNlbGVjdCgicGF0aCIpLnN0eWxlKHtmaWxsOmcsc3Ryb2tlOm19KTt2YXIgeixSLEg9ay5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaj1lLnhhLl9vZmZzZXQrKGUueDArZS54MSkvMixCPWUueWEuX29mZnNldCsoZS55MCtlLnkxKS8yLFY9TWF0aC5hYnMoZS54MS1lLngwKSxVPU1hdGguYWJzKGUueTEtZS55MCkscT1ILndpZHRoK0ErTCtTO2lmKGUudHkwPUUtSC50b3AsZS5ieD1ILndpZHRoKzIqTCxlLmJ5PU1hdGgubWF4KEguaGVpZ2h0KzIqTCxDKSxlLmFuY2hvcj0ic3RhcnQiLGUudHh3aWR0aD1ILndpZHRoLGUudHgyd2lkdGg9UyxlLm9mZnNldD0wLGMpZS5wb3M9aix6PUIrVS8yK3E8PUYsUj1CLVUvMi1xPj0wLCJ0b3AiIT09ZS5pZGVhbEFsaWduJiZ6fHwhUj96PyhCKz1VLzIsZS5hbmNob3I9InN0YXJ0Iik6ZS5hbmNob3I9Im1pZGRsZSI6KEItPVUvMixlLmFuY2hvcj0iZW5kIik7ZWxzZSBpZihlLnBvcz1CLHo9aitWLzIrcTw9SSxSPWotVi8yLXE+PTAsImxlZnQiIT09ZS5pZGVhbEFsaWduJiZ6fHwhUilpZih6KWorPVYvMixlLmFuY2hvcj0ic3RhcnQiO2Vsc2V7ZS5hbmNob3I9Im1pZGRsZSI7dmFyIEc9cS8yLFo9aitHLUksWT1qLUc7Wj4wJiYoai09WiksWTwwJiYoais9LVkpfWVsc2Ugai09Vi8yLGUuYW5jaG9yPSJlbmQiO2suYXR0cigidGV4dC1hbmNob3IiLGUuYW5jaG9yKSxTJiZNLmF0dHIoInRleHQtYW5jaG9yIixlLmFuY2hvciksdC5hdHRyKCJ0cmFuc2Zvcm0iLGwoaixCKSsoYz9zKF8pOiIiKSl9KSksbGV9ZnVuY3Rpb24gRChlLHQscixuLGEsaSl7dmFyIGw9IiIscz0iIjt2b2lkIDAhPT1lLm5hbWVPdmVycmlkZSYmKGUubmFtZT1lLm5hbWVPdmVycmlkZSksZS5uYW1lJiYoZS50cmFjZS5fbWV0YSYmKGUubmFtZT1vLnRlbXBsYXRlU3RyaW5nKGUubmFtZSxlLnRyYWNlLl9tZXRhKSksbD1JKGUubmFtZSxlLm5hbWVMZW5ndGgpKSx2b2lkIDAhPT1lLnpMYWJlbD8odm9pZCAwIT09ZS54TGFiZWwmJihzKz0ieDogIitlLnhMYWJlbCsiPGJyPiIpLHZvaWQgMCE9PWUueUxhYmVsJiYocys9Ink6ICIrZS55TGFiZWwrIjxicj4iKSwiY2hvcm9wbGV0aCIhPT1lLnRyYWNlLnR5cGUmJiJjaG9yb3BsZXRobWFwYm94IiE9PWUudHJhY2UudHlwZSYmKHMrPShzPyJ6OiAiOiIiKStlLnpMYWJlbCkpOnQmJmVbci5jaGFyQXQoMCkrIkxhYmVsIl09PT1hP3M9ZVsoIngiPT09ci5jaGFyQXQoMCk/InkiOiJ4IikrIkxhYmVsIl18fCIiOnZvaWQgMD09PWUueExhYmVsP3ZvaWQgMCE9PWUueUxhYmVsJiYic2NhdHRlcmNhcnBldCIhPT1lLnRyYWNlLnR5cGUmJihzPWUueUxhYmVsKTpzPXZvaWQgMD09PWUueUxhYmVsP2UueExhYmVsOiIoIitlLnhMYWJlbCsiLCAiK2UueUxhYmVsKyIpIiwhZS50ZXh0JiYwIT09ZS50ZXh0fHxBcnJheS5pc0FycmF5KGUudGV4dCl8fChzKz0ocz8iPGJyPiI6IiIpK2UudGV4dCksdm9pZCAwIT09ZS5leHRyYVRleHQmJihzKz0ocz8iPGJyPiI6IiIpK2UuZXh0cmFUZXh0KSxpJiYiIj09PXMmJiFlLmhvdmVydGVtcGxhdGUmJigiIj09PWwmJmkucmVtb3ZlKCkscz1sKTt2YXIgYz1uLl9kM2xvY2FsZSx1PWUuaG92ZXJ0ZW1wbGF0ZXx8ITEsZj1lLmhvdmVydGVtcGxhdGVMYWJlbHN8fGUsZD1lLmV2ZW50RGF0YVswXXx8e307cmV0dXJuIHUmJihzPShzPW8uaG92ZXJ0ZW1wbGF0ZVN0cmluZyh1LGYsYyxkLGUudHJhY2UuX21ldGEpKS5yZXBsYWNlKEMsKGZ1bmN0aW9uKHQscil7cmV0dXJuIGw9SShyLGUubmFtZUxlbmd0aCksIiJ9KSkpLFtzLGxdfWZ1bmN0aW9uIFAoZSx0LHIsYSl7dmFyIGk9ZnVuY3Rpb24oZSl7cmV0dXJuIGUqcn0sbz1mdW5jdGlvbihlKXtyZXR1cm4gZSphfTtlLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2lmKGUuZGVsKXJldHVybiByLnJlbW92ZSgpO3ZhciBhPXIuc2VsZWN0KCJ0ZXh0Lm51bXMiKSxsPWUuYW5jaG9yLHM9ImVuZCI9PT1sPy0xOjEsYz17c3RhcnQ6MSxlbmQ6LTEsbWlkZGxlOjB9W2xdLGY9YyooQStMKSxwPWYrYyooZS50eHdpZHRoK0wpLGg9MCxnPWUub2Zmc2V0LHY9Im1pZGRsZSI9PT1sO3YmJihmLT1lLnR4MndpZHRoLzIscCs9ZS50eHdpZHRoLzIrTCksdCYmKGcqPS1NLGg9ZS5vZmZzZXQqayksci5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIix2PyJNLSIraShlLmJ4LzIrZS50eDJ3aWR0aC8yKSsiLCIrbyhnLWUuYnkvMikrImgiK2koZS5ieCkrInYiK28oZS5ieSkrImgtIitpKGUuYngpKyJaIjoiTTAsMEwiK2kocypBK2gpKyIsIitvKEErZykrInYiK28oZS5ieS8yLUEpKyJoIitpKHMqZS5ieCkrInYtIitvKGUuYnkpKyJIIitpKHMqQStoKSsiViIrbyhnLUEpKyJaIik7dmFyIG09aCtmLHk9ZytlLnR5MC1lLmJ5LzIrTCx4PWUudGV4dEFsaWdufHwiYXV0byI7ImF1dG8iIT09eCYmKCJsZWZ0Ij09PXgmJiJzdGFydCIhPT1sPyhhLmF0dHIoInRleHQtYW5jaG9yIiwic3RhcnQiKSxtPXY/LWUuYngvMi1lLnR4MndpZHRoLzIrTDotZS5ieC1MKToicmlnaHQiPT09eCYmImVuZCIhPT1sJiYoYS5hdHRyKCJ0ZXh0LWFuY2hvciIsImVuZCIpLG09dj9lLmJ4LzItZS50eDJ3aWR0aC8yLUw6ZS5ieCtMKSksYS5jYWxsKHUucG9zaXRpb25UZXh0LGkobSksbyh5KSksZS50eDJ3aWR0aCYmKHIuc2VsZWN0KCJ0ZXh0Lm5hbWUiKS5jYWxsKHUucG9zaXRpb25UZXh0LGkocCtjKkwraCksbyhnK2UudHkwLWUuYnkvMitMKSksci5zZWxlY3QoInJlY3QiKS5jYWxsKGQuc2V0UmVjdCxpKHArKGMtMSkqZS50eDJ3aWR0aC8yK2gpLG8oZy1lLmJ5LzItMSksaShlLnR4MndpZHRoKSxvKGUuYnkrMikpKX0pKX1mdW5jdGlvbiB6KGUsdCl7dmFyIHI9ZS5pbmRleCxuPWUudHJhY2V8fHt9LGk9ZS5jZFswXSxsPWUuY2Rbcl18fHt9O2Z1bmN0aW9uIHMoZSl7cmV0dXJuIGV8fGEoZSkmJjA9PT1lfXZhciBjPUFycmF5LmlzQXJyYXkocik/ZnVuY3Rpb24oZSx0KXt2YXIgYT1vLmNhc3RPcHRpb24oaSxyLGUpO3JldHVybiBzKGEpP2E6by5leHRyYWN0T3B0aW9uKHt9LG4sIiIsdCl9OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG8uZXh0cmFjdE9wdGlvbihsLG4sZSx0KX07ZnVuY3Rpb24gdSh0LHIsbil7dmFyIGE9YyhyLG4pO3MoYSkmJihlW3RdPWEpfWlmKHUoImhvdmVyaW5mbyIsImhpIiwiaG92ZXJpbmZvIiksdSgiYmdjb2xvciIsImhiZyIsImhvdmVybGFiZWwuYmdjb2xvciIpLHUoImJvcmRlckNvbG9yIiwiaGJjIiwiaG92ZXJsYWJlbC5ib3JkZXJjb2xvciIpLHUoImZvbnRGYW1pbHkiLCJodGYiLCJob3ZlcmxhYmVsLmZvbnQuZmFtaWx5IiksdSgiZm9udFNpemUiLCJodHMiLCJob3ZlcmxhYmVsLmZvbnQuc2l6ZSIpLHUoImZvbnRDb2xvciIsImh0YyIsImhvdmVybGFiZWwuZm9udC5jb2xvciIpLHUoIm5hbWVMZW5ndGgiLCJobmwiLCJob3ZlcmxhYmVsLm5hbWVsZW5ndGgiKSx1KCJ0ZXh0QWxpZ24iLCJodGEiLCJob3ZlcmxhYmVsLmFsaWduIiksZS5wb3NyZWY9InkiPT09dHx8ImNsb3Nlc3QiPT09dCYmImgiPT09bi5vcmllbnRhdGlvbj9lLnhhLl9vZmZzZXQrKGUueDArZS54MSkvMjplLnlhLl9vZmZzZXQrKGUueTArZS55MSkvMixlLngwPW8uY29uc3RyYWluKGUueDAsMCxlLnhhLl9sZW5ndGgpLGUueDE9by5jb25zdHJhaW4oZS54MSwwLGUueGEuX2xlbmd0aCksZS55MD1vLmNvbnN0cmFpbihlLnkwLDAsZS55YS5fbGVuZ3RoKSxlLnkxPW8uY29uc3RyYWluKGUueTEsMCxlLnlhLl9sZW5ndGgpLHZvaWQgMCE9PWUueExhYmVsVmFsJiYoZS54TGFiZWw9InhMYWJlbCJpbiBlP2UueExhYmVsOmcuaG92ZXJMYWJlbFRleHQoZS54YSxlLnhMYWJlbFZhbCksZS54VmFsPWUueGEuYzJkKGUueExhYmVsVmFsKSksdm9pZCAwIT09ZS55TGFiZWxWYWwmJihlLnlMYWJlbD0ieUxhYmVsImluIGU/ZS55TGFiZWw6Zy5ob3ZlckxhYmVsVGV4dChlLnlhLGUueUxhYmVsVmFsKSxlLnlWYWw9ZS55YS5jMmQoZS55TGFiZWxWYWwpKSx2b2lkIDAhPT1lLnpMYWJlbFZhbCYmdm9pZCAwPT09ZS56TGFiZWwmJihlLnpMYWJlbD1TdHJpbmcoZS56TGFiZWxWYWwpKSwhKGlzTmFOKGUueGVycil8fCJsb2ciPT09ZS54YS50eXBlJiZlLnhlcnI8PTApKXt2YXIgZj1nLnRpY2tUZXh0KGUueGEsZS54YS5jMmwoZS54ZXJyKSwiaG92ZXIiKS50ZXh0O3ZvaWQgMCE9PWUueGVycm5lZz9lLnhMYWJlbCs9IiArIitmKyIgLyAtIitnLnRpY2tUZXh0KGUueGEsZS54YS5jMmwoZS54ZXJybmVnKSwiaG92ZXIiKS50ZXh0OmUueExhYmVsKz0iIFx4YjEgIitmLCJ4Ij09PXQmJihlLmRpc3RhbmNlKz0xKX1pZighKGlzTmFOKGUueWVycil8fCJsb2ciPT09ZS55YS50eXBlJiZlLnllcnI8PTApKXt2YXIgZD1nLnRpY2tUZXh0KGUueWEsZS55YS5jMmwoZS55ZXJyKSwiaG92ZXIiKS50ZXh0O3ZvaWQgMCE9PWUueWVycm5lZz9lLnlMYWJlbCs9IiArIitkKyIgLyAtIitnLnRpY2tUZXh0KGUueWEsZS55YS5jMmwoZS55ZXJybmVnKSwiaG92ZXIiKS50ZXh0OmUueUxhYmVsKz0iIFx4YjEgIitkLCJ5Ij09PXQmJihlLmRpc3RhbmNlKz0xKX12YXIgcD1lLmhvdmVyaW5mb3x8ZS50cmFjZS5ob3ZlcmluZm87cmV0dXJuIHAmJiJhbGwiIT09cCYmKC0xPT09KHA9QXJyYXkuaXNBcnJheShwKT9wOnAuc3BsaXQoIisiKSkuaW5kZXhPZigieCIpJiYoZS54TGFiZWw9dm9pZCAwKSwtMT09PXAuaW5kZXhPZigieSIpJiYoZS55TGFiZWw9dm9pZCAwKSwtMT09PXAuaW5kZXhPZigieiIpJiYoZS56TGFiZWw9dm9pZCAwKSwtMT09PXAuaW5kZXhPZigidGV4dCIpJiYoZS50ZXh0PXZvaWQgMCksLTE9PT1wLmluZGV4T2YoIm5hbWUiKSYmKGUubmFtZT12b2lkIDApKSxlfWZ1bmN0aW9uIFIoZSx0LHIpe3ZhciBuLGEsbz1yLmNvbnRhaW5lcixsPXIuZnVsbExheW91dCxzPWwuX3NpemUsYz1yLmV2ZW50LHU9ISF0LmhMaW5lUG9pbnQsZj0hIXQudkxpbmVQb2ludDtpZihvLnNlbGVjdEFsbCgiLnNwaWtlbGluZSIpLnJlbW92ZSgpLGZ8fHUpe3ZhciBoPXAuY29tYmluZShsLnBsb3RfYmdjb2xvcixsLnBhcGVyX2JnY29sb3IpO2lmKHUpe3ZhciB2LG0seT10LmhMaW5lUG9pbnQ7bj15JiZ5LnhhLCJjdXJzb3IiPT09KGE9eSYmeS55YSkuc3Bpa2VzbmFwPyh2PWMucG9pbnRlclgsbT1jLnBvaW50ZXJZKToodj1uLl9vZmZzZXQreS54LG09YS5fb2Zmc2V0K3kueSk7dmFyIHgsYixfPWkucmVhZGFiaWxpdHkoeS5jb2xvcixoKTwxLjU/cC5jb250cmFzdChoKTp5LmNvbG9yLHc9YS5zcGlrZW1vZGUsVD1hLnNwaWtldGhpY2tuZXNzLGs9YS5zcGlrZWNvbG9yfHxfLE09Zy5nZXRQeFBvc2l0aW9uKGUsYSk7aWYoLTEhPT13LmluZGV4T2YoInRvYXhpcyIpfHwtMSE9PXcuaW5kZXhPZigiYWNyb3NzIikpe2lmKC0xIT09dy5pbmRleE9mKCJ0b2F4aXMiKSYmKHg9TSxiPXYpLC0xIT09dy5pbmRleE9mKCJhY3Jvc3MiKSl7dmFyIEE9YS5fY291bnRlckRvbWFpbk1pbixMPWEuX2NvdW50ZXJEb21haW5NYXg7ImZyZWUiPT09YS5hbmNob3ImJihBPU1hdGgubWluKEEsYS5wb3NpdGlvbiksTD1NYXRoLm1heChMLGEucG9zaXRpb24pKSx4PXMubCtBKnMudyxiPXMubCtMKnMud31vLmluc2VydCgibGluZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoe3gxOngseDI6Yix5MTptLHkyOm0sInN0cm9rZS13aWR0aCI6VCxzdHJva2U6aywic3Ryb2tlLWRhc2hhcnJheSI6ZC5kYXNoU3R5bGUoYS5zcGlrZWRhc2gsVCl9KS5jbGFzc2VkKCJzcGlrZWxpbmUiLCEwKS5jbGFzc2VkKCJjcmlzcCIsITApLG8uaW5zZXJ0KCJsaW5lIiwiOmZpcnN0LWNoaWxkIikuYXR0cih7eDE6eCx4MjpiLHkxOm0seTI6bSwic3Ryb2tlLXdpZHRoIjpUKzIsc3Ryb2tlOmh9KS5jbGFzc2VkKCJzcGlrZWxpbmUiLCEwKS5jbGFzc2VkKCJjcmlzcCIsITApfS0xIT09dy5pbmRleE9mKCJtYXJrZXIiKSYmby5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoe2N4Ok0rKCJyaWdodCIhPT1hLnNpZGU/VDotVCksY3k6bSxyOlQsZmlsbDprfSkuY2xhc3NlZCgic3Bpa2VsaW5lIiwhMCl9aWYoZil7dmFyIFMsQyxPPXQudkxpbmVQb2ludDtuPU8mJk8ueGEsYT1PJiZPLnlhLCJjdXJzb3IiPT09bi5zcGlrZXNuYXA/KFM9Yy5wb2ludGVyWCxDPWMucG9pbnRlclkpOihTPW4uX29mZnNldCtPLngsQz1hLl9vZmZzZXQrTy55KTt2YXIgRCxQLHo9aS5yZWFkYWJpbGl0eShPLmNvbG9yLGgpPDEuNT9wLmNvbnRyYXN0KGgpOk8uY29sb3IsUj1uLnNwaWtlbW9kZSxFPW4uc3Bpa2V0aGlja25lc3MsST1uLnNwaWtlY29sb3J8fHosRj1nLmdldFB4UG9zaXRpb24oZSxuKTtpZigtMSE9PVIuaW5kZXhPZigidG9heGlzIil8fC0xIT09Ui5pbmRleE9mKCJhY3Jvc3MiKSl7aWYoLTEhPT1SLmluZGV4T2YoInRvYXhpcyIpJiYoRD1GLFA9QyksLTEhPT1SLmluZGV4T2YoImFjcm9zcyIpKXt2YXIgTj1uLl9jb3VudGVyRG9tYWluTWluLEg9bi5fY291bnRlckRvbWFpbk1heDsiZnJlZSI9PT1uLmFuY2hvciYmKE49TWF0aC5taW4oTixuLnBvc2l0aW9uKSxIPU1hdGgubWF4KEgsbi5wb3NpdGlvbikpLEQ9cy50KygxLUgpKnMuaCxQPXMudCsoMS1OKSpzLmh9by5pbnNlcnQoImxpbmUiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKHt4MTpTLHgyOlMseTE6RCx5MjpQLCJzdHJva2Utd2lkdGgiOkUsc3Ryb2tlOkksInN0cm9rZS1kYXNoYXJyYXkiOmQuZGFzaFN0eWxlKG4uc3Bpa2VkYXNoLEUpfSkuY2xhc3NlZCgic3Bpa2VsaW5lIiwhMCkuY2xhc3NlZCgiY3Jpc3AiLCEwKSxvLmluc2VydCgibGluZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoe3gxOlMseDI6Uyx5MTpELHkyOlAsInN0cm9rZS13aWR0aCI6RSsyLHN0cm9rZTpofSkuY2xhc3NlZCgic3Bpa2VsaW5lIiwhMCkuY2xhc3NlZCgiY3Jpc3AiLCEwKX0tMSE9PVIuaW5kZXhPZigibWFya2VyIikmJm8uaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKHtjeDpTLGN5OkYtKCJ0b3AiIT09bi5zaWRlP0U6LUUpLHI6RSxmaWxsOkl9KS5jbGFzc2VkKCJzcGlrZWxpbmUiLCEwKX19fWZ1bmN0aW9uIEUoZSx0KXtyZXR1cm4hdHx8KHQudkxpbmVQb2ludCE9PWUuX3NwaWtlcG9pbnRzLnZMaW5lUG9pbnR8fHQuaExpbmVQb2ludCE9PWUuX3NwaWtlcG9pbnRzLmhMaW5lUG9pbnQpfWZ1bmN0aW9uIEkoZSx0KXtyZXR1cm4gdS5wbGFpblRleHQoZXx8IiIse2xlbjp0LGFsbG93ZWRUYWdzOlsiYnIiLCJzdWIiLCJzdXAiLCJiIiwiaSIsImVtIl19KX19LHsiLi4vLi4vbGliIjoyMDIsIi4uLy4uL2xpYi9ldmVudHMiOjE5NSwiLi4vLi4vbGliL292ZXJyaWRlX2N1cnNvciI6MjEzLCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjIyNCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjI0OCwiLi4vLi4vcmVnaXN0cnkiOjI5MCwiLi4vY29sb3IiOjc1LCIuLi9kcmFnZWxlbWVudCI6OTQsIi4uL2RyYXdpbmciOjk3LCIuLi9sZWdlbmQvZGVmYXVsdHMiOjEyNywiLi4vbGVnZW5kL2RyYXciOjEyOCwiLi9jb25zdGFudHMiOjEwOSwiLi9oZWxwZXJzIjoxMTEsZDM6OSwiZmFzdC1pc251bWVyaWMiOjExLHRpbnljb2xvcjI6NTh9XSwxMTM6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vbGliIiksYT1lKCIuLi9jb2xvciIpLGk9ZSgiLi9oZWxwZXJzIikuaXNVbmlmaWVkSG92ZXI7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLG8pe2Z1bmN0aW9uIGwoZSl7by5mb250W2VdfHwoby5mb250W2VdPXQubGVnZW5kP3QubGVnZW5kLmZvbnRbZV06dC5mb250W2VdKX1vPW98fHt9LHQmJmkodC5ob3Zlcm1vZGUpJiYoby5mb250fHwoby5mb250PXt9KSxsKCJzaXplIiksbCgiZmFtaWx5IiksbCgiY29sb3IiKSx0LmxlZ2VuZD8oby5iZ2NvbG9yfHwoby5iZ2NvbG9yPWEuY29tYmluZSh0LmxlZ2VuZC5iZ2NvbG9yLHQucGFwZXJfYmdjb2xvcikpLG8uYm9yZGVyY29sb3J8fChvLmJvcmRlcmNvbG9yPXQubGVnZW5kLmJvcmRlcmNvbG9yKSk6by5iZ2NvbG9yfHwoby5iZ2NvbG9yPXQucGFwZXJfYmdjb2xvcikpLHIoImhvdmVybGFiZWwuYmdjb2xvciIsby5iZ2NvbG9yKSxyKCJob3ZlcmxhYmVsLmJvcmRlcmNvbG9yIixvLmJvcmRlcmNvbG9yKSxyKCJob3ZlcmxhYmVsLm5hbWVsZW5ndGgiLG8ubmFtZWxlbmd0aCksbi5jb2VyY2VGb250KHIsImhvdmVybGFiZWwuZm9udCIsby5mb250KSxyKCJob3ZlcmxhYmVsLmFsaWduIixvLmFsaWduKX19LHsiLi4vLi4vbGliIjoyMDIsIi4uL2NvbG9yIjo3NSwiLi9oZWxwZXJzIjoxMTF9XSwxMTQ6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vbGliIiksYT1lKCIuL2xheW91dF9hdHRyaWJ1dGVzIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXtmdW5jdGlvbiBpKHIsaSl7cmV0dXJuIHZvaWQgMCE9PXRbcl0/dFtyXTpuLmNvZXJjZShlLHQsYSxyLGkpfXZhciBvLGw9aSgiY2xpY2ttb2RlIik7cmV0dXJuIHQuX2hhcygiY2FydGVzaWFuIik/bC5pbmRleE9mKCJzZWxlY3QiKT4tMT9vPSJjbG9zZXN0IjoodC5faXNIb3Jpej1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj10Ll9zY2F0dGVyU3RhY2tPcHRzfHx7fSxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBhPWVbbl0saT1hLnhheGlzK2EueWF4aXMsbz0ocltpXXx8e30pW2Euc3RhY2tncm91cF18fHt9O2lmKCJoIiE9PWEub3JpZW50YXRpb24mJiJoIiE9PW8ub3JpZW50YXRpb24pcmV0dXJuITF9cmV0dXJuITB9KHIsdCksbz10Ll9pc0hvcml6PyJ5IjoieCIpOm89ImNsb3Nlc3QiLGkoImhvdmVybW9kZSIsbyl9fSx7Ii4uLy4uL2xpYiI6MjAyLCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxMTZ9XSwxMTU6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiZDMiKSxhPWUoIi4uLy4uL2xpYiIpLGk9ZSgiLi4vZHJhZ2VsZW1lbnQiKSxvPWUoIi4vaGVscGVycyIpLGw9ZSgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHM9ZSgiLi9ob3ZlciIpO3QuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJmeCIsY29uc3RhbnRzOmUoIi4vY29uc3RhbnRzIiksc2NoZW1hOntsYXlvdXQ6bH0sYXR0cmlidXRlczplKCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOmwsc3VwcGx5TGF5b3V0R2xvYmFsRGVmYXVsdHM6ZSgiLi9sYXlvdXRfZ2xvYmFsX2RlZmF1bHRzIiksc3VwcGx5RGVmYXVsdHM6ZSgiLi9kZWZhdWx0cyIpLHN1cHBseUxheW91dERlZmF1bHRzOmUoIi4vbGF5b3V0X2RlZmF1bHRzIiksY2FsYzplKCIuL2NhbGMiKSxnZXREaXN0YW5jZUZ1bmN0aW9uOm8uZ2V0RGlzdGFuY2VGdW5jdGlvbixnZXRDbG9zZXN0Om8uZ2V0Q2xvc2VzdCxpbmJveDpvLmluYm94LHF1YWRyYXR1cmU6by5xdWFkcmF0dXJlLGFwcGVuZEFycmF5UG9pbnRWYWx1ZTpvLmFwcGVuZEFycmF5UG9pbnRWYWx1ZSxjYXN0SG92ZXJPcHRpb246ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBhLmNhc3RPcHRpb24oZSx0LCJob3ZlcmxhYmVsLiIrcil9LGNhc3RIb3ZlcmluZm86ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBhLmNhc3RPcHRpb24oZSxyLCJob3ZlcmluZm8iLChmdW5jdGlvbihyKXtyZXR1cm4gYS5jb2VyY2VIb3ZlcmluZm8oe2hvdmVyaW5mbzpyfSx7X21vZHVsZTplLl9tb2R1bGV9LHQpfSkpfSxob3ZlcjpzLmhvdmVyLHVuaG92ZXI6aS51bmhvdmVyLGxvbmVIb3ZlcjpzLmxvbmVIb3Zlcixsb25lVW5ob3ZlcjpmdW5jdGlvbihlKXt2YXIgdD1hLmlzRDNTZWxlY3Rpb24oZSk/ZTpuLnNlbGVjdChlKTt0LnNlbGVjdEFsbCgiZy5ob3ZlcnRleHQiKS5yZW1vdmUoKSx0LnNlbGVjdEFsbCgiLnNwaWtlbGluZSIpLnJlbW92ZSgpfSxjbGljazplKCIuL2NsaWNrIil9fSx7Ii4uLy4uL2xpYiI6MjAyLCIuLi9kcmFnZWxlbWVudCI6OTQsIi4vYXR0cmlidXRlcyI6MTA2LCIuL2NhbGMiOjEwNywiLi9jbGljayI6MTA4LCIuL2NvbnN0YW50cyI6MTA5LCIuL2RlZmF1bHRzIjoxMTAsIi4vaGVscGVycyI6MTExLCIuL2hvdmVyIjoxMTIsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjExNiwiLi9sYXlvdXRfZGVmYXVsdHMiOjExNywiLi9sYXlvdXRfZ2xvYmFsX2RlZmF1bHRzIjoxMTgsZDM6OX1dLDExNjpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuL2NvbnN0YW50cyIpLGE9ZSgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIikoe2VkaXRUeXBlOiJub25lIn0pO2EuZmFtaWx5LmRmbHQ9bi5IT1ZFUkZPTlQsYS5zaXplLmRmbHQ9bi5IT1ZFUkZPTlRTSVpFLHQuZXhwb3J0cz17Y2xpY2ttb2RlOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJldmVudCIsInNlbGVjdCJdLGRmbHQ6ImV2ZW50IixlZGl0VHlwZToicGxvdCIsZXh0cmFzOlsibm9uZSJdfSxkcmFnbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiem9vbSIsInBhbiIsInNlbGVjdCIsImxhc3NvIiwiZHJhd2Nsb3NlZHBhdGgiLCJkcmF3b3BlbnBhdGgiLCJkcmF3bGluZSIsImRyYXdyZWN0IiwiZHJhd2NpcmNsZSIsIm9yYml0IiwidHVybnRhYmxlIiwhMV0sZGZsdDoiem9vbSIsZWRpdFR5cGU6Im1vZGViYXIifSxob3Zlcm1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIngiLCJ5IiwiY2xvc2VzdCIsITEsInggdW5pZmllZCIsInkgdW5pZmllZCJdLGVkaXRUeXBlOiJtb2RlYmFyIn0saG92ZXJkaXN0YW5jZTp7dmFsVHlwZToiaW50ZWdlciIsbWluOi0xLGRmbHQ6MjAsZWRpdFR5cGU6Im5vbmUifSxzcGlrZWRpc3RhbmNlOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46LTEsZGZsdDoyMCxlZGl0VHlwZToibm9uZSJ9LGhvdmVybGFiZWw6e2JnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToibm9uZSJ9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6Im5vbmUifSxmb250OmEsYWxpZ246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxlZnQiLCJyaWdodCIsImF1dG8iXSxkZmx0OiJhdXRvIixlZGl0VHlwZToibm9uZSJ9LG5hbWVsZW5ndGg6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjotMSxkZmx0OjE1LGVkaXRUeXBlOiJub25lIn0sZWRpdFR5cGU6Im5vbmUifSxzZWxlY3RkaXJlY3Rpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImgiLCJ2IiwiZCIsImFueSJdLGRmbHQ6ImFueSIsZWRpdFR5cGU6Im5vbmUifX19LHsiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjoyNzYsIi4vY29uc3RhbnRzIjoxMDl9XSwxMTc6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vbGliIiksYT1lKCIuL2hlbHBlcnMiKS5pc1VuaWZpZWRIb3ZlcixpPWUoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxvPWUoIi4vaG92ZXJtb2RlX2RlZmF1bHRzIiksbD1lKCIuL2hvdmVybGFiZWxfZGVmYXVsdHMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe2Z1bmN0aW9uIHMocixhKXtyZXR1cm4gbi5jb2VyY2UoZSx0LGkscixhKX12YXIgYz1vKGUsdCxyKTtjJiYocygiaG92ZXJkaXN0YW5jZSIpLHMoInNwaWtlZGlzdGFuY2UiLGEoYyk/LTE6dm9pZCAwKSksInNlbGVjdCI9PT1zKCJkcmFnbW9kZSIpJiZzKCJzZWxlY3RkaXJlY3Rpb24iKTt2YXIgdT10Ll9oYXMoIm1hcGJveCIpLGY9dC5faGFzKCJnZW8iKSxkPXQuX2Jhc2VQbG90TW9kdWxlcy5sZW5ndGg7Inpvb20iPT09dC5kcmFnbW9kZSYmKCh1fHxmKSYmMT09PWR8fHUmJmYmJjI9PT1kKSYmKHQuZHJhZ21vZGU9InBhbiIpLGwoZSx0LHMpfX0seyIuLi8uLi9saWIiOjIwMiwiLi9oZWxwZXJzIjoxMTEsIi4vaG92ZXJsYWJlbF9kZWZhdWx0cyI6MTEzLCIuL2hvdmVybW9kZV9kZWZhdWx0cyI6MTE0LCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxMTZ9XSwxMTg6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vbGliIiksYT1lKCIuL2hvdmVybGFiZWxfZGVmYXVsdHMiKSxpPWUoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXthKGUsdCwoZnVuY3Rpb24ocixhKXtyZXR1cm4gbi5jb2VyY2UoZSx0LGkscixhKX0pKX19LHsiLi4vLi4vbGliIjoyMDIsIi4vaG92ZXJsYWJlbF9kZWZhdWx0cyI6MTEzLCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxMTZ9XSwxMTk6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vbGliIiksYT1lKCIuLi8uLi9saWIvcmVnZXgiKS5jb3VudGVyLGk9ZSgiLi4vLi4vcGxvdHMvZG9tYWluIikuYXR0cmlidXRlcyxvPWUoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiKS5pZFJlZ2V4LGw9ZSgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLHM9e3Jvd3M6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjoxLGVkaXRUeXBlOiJwbG90In0scm93b3JkZXI6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCB0byBib3R0b20iLCJib3R0b20gdG8gdG9wIl0sZGZsdDoidG9wIHRvIGJvdHRvbSIsZWRpdFR5cGU6InBsb3QifSxjb2x1bW5zOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MSxlZGl0VHlwZToicGxvdCJ9LHN1YnBsb3RzOnt2YWxUeXBlOiJpbmZvX2FycmF5IixmcmVlTGVuZ3RoOiEwLGRpbWVuc2lvbnM6MixpdGVtczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlthKCJ4eSIpLnRvU3RyaW5nKCksIiJdLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifSx4YXhlczp7dmFsVHlwZToiaW5mb19hcnJheSIsZnJlZUxlbmd0aDohMCxpdGVtczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOltvLngudG9TdHJpbmcoKSwiIl0sZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LHlheGVzOnt2YWxUeXBlOiJpbmZvX2FycmF5IixmcmVlTGVuZ3RoOiEwLGl0ZW1zOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6W28ueS50b1N0cmluZygpLCIiXSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0scGF0dGVybjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaW5kZXBlbmRlbnQiLCJjb3VwbGVkIl0sZGZsdDoiY291cGxlZCIsZWRpdFR5cGU6InBsb3QifSx4Z2FwOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOiJwbG90In0seWdhcDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxlZGl0VHlwZToicGxvdCJ9LGRvbWFpbjppKHtuYW1lOiJncmlkIixlZGl0VHlwZToicGxvdCIsbm9HcmlkQ2VsbDohMH0se30pLHhzaWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJib3R0b20iLCJib3R0b20gcGxvdCIsInRvcCBwbG90IiwidG9wIl0sZGZsdDoiYm90dG9tIHBsb3QiLGVkaXRUeXBlOiJwbG90In0seXNpZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxlZnQiLCJsZWZ0IHBsb3QiLCJyaWdodCBwbG90IiwicmlnaHQiXSxkZmx0OiJsZWZ0IHBsb3QiLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifTtmdW5jdGlvbiBjKGUsdCxyKXt2YXIgbj10W3IrImF4ZXMiXSxhPU9iamVjdC5rZXlzKChlLl9zcGxvbUF4ZXN8fHt9KVtyXXx8e30pO3JldHVybiBBcnJheS5pc0FycmF5KG4pP246YS5sZW5ndGg/YTp2b2lkIDB9ZnVuY3Rpb24gdShlLHQscixuLGEsaSl7dmFyIG89dChlKyJnYXAiLHIpLGw9dCgiZG9tYWluLiIrZSk7dChlKyJzaWRlIixuKTtmb3IodmFyIHM9bmV3IEFycmF5KGEpLGM9bFswXSx1PShsWzFdLWMpLyhhLW8pLGY9dSooMS1vKSxkPTA7ZDxhO2QrKyl7dmFyIHA9Yyt1KmQ7c1tpP2EtMS1kOmRdPVtwLHArZl19cmV0dXJuIHN9ZnVuY3Rpb24gZihlLHQscixuLGEpe3ZhciBpLG89bmV3IEFycmF5KHIpO2Z1bmN0aW9uIGwoZSxyKXstMSE9PXQuaW5kZXhPZihyKSYmdm9pZCAwPT09bltyXT8ob1tlXT1yLG5bcl09ZSk6b1tlXT0iIn1pZihBcnJheS5pc0FycmF5KGUpKWZvcihpPTA7aTxyO2krKylsKGksZVtpXSk7ZWxzZSBmb3IobCgwLGEpLGk9MTtpPHI7aSsrKWwoaSxhKyhpKzEpKTtyZXR1cm4gb310LmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToiZ3JpZCIsc2NoZW1hOntsYXlvdXQ6e2dyaWQ6c319LGxheW91dEF0dHJpYnV0ZXM6cyxzaXplRGVmYXVsdHM6ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmdyaWR8fHt9LGE9Yyh0LHIsIngiKSxpPWModCxyLCJ5Iik7aWYoZS5ncmlkfHxhfHxpKXt2YXIgbyxmLGQ9QXJyYXkuaXNBcnJheShyLnN1YnBsb3RzKSYmQXJyYXkuaXNBcnJheShyLnN1YnBsb3RzWzBdKSxwPUFycmF5LmlzQXJyYXkoYSksaD1BcnJheS5pc0FycmF5KGkpLGc9cCYmYSE9PXIueGF4ZXMmJmgmJmkhPT1yLnlheGVzO2Q/KG89ci5zdWJwbG90cy5sZW5ndGgsZj1yLnN1YnBsb3RzWzBdLmxlbmd0aCk6KGgmJihvPWkubGVuZ3RoKSxwJiYoZj1hLmxlbmd0aCkpO3ZhciB2PWwubmV3Q29udGFpbmVyKHQsImdyaWQiKSxtPWsoInJvd3MiLG8pLHk9aygiY29sdW1ucyIsZik7aWYobSp5PjEpe2lmKCFkJiYhcCYmIWgpImluZGVwZW5kZW50Ij09PWsoInBhdHRlcm4iKSYmKGQ9ITApO3YuX2hhc1N1YnBsb3RHcmlkPWQ7dmFyIHgsYixfPSJ0b3AgdG8gYm90dG9tIj09PWsoInJvd29yZGVyIiksdz1kPy4yOi4xLFQ9ZD8uMzouMTtnJiZ0Ll9zcGxvbUdyaWREZmx0JiYoeD10Ll9zcGxvbUdyaWREZmx0LnhzaWRlLGI9dC5fc3Bsb21HcmlkRGZsdC55c2lkZSksdi5fZG9tYWlucz17eDp1KCJ4IixrLHcseCx5KSx5OnUoInkiLGssVCxiLG0sXyl9fWVsc2UgZGVsZXRlIHQuZ3JpZH1mdW5jdGlvbiBrKGUsdCl7cmV0dXJuIG4uY29lcmNlKHIsdixzLGUsdCl9fSxjb250ZW50RGVmYXVsdHM6ZnVuY3Rpb24oZSx0KXt2YXIgcj10LmdyaWQ7aWYociYmci5fZG9tYWlucyl7dmFyIG4sYSxpLG8sbCxzLHUsZD1lLmdyaWR8fHt9LHA9dC5fc3VicGxvdHMsaD1yLl9oYXNTdWJwbG90R3JpZCxnPXIucm93cyx2PXIuY29sdW1ucyxtPSJpbmRlcGVuZGVudCI9PT1yLnBhdHRlcm4seT1yLl9heGlzTWFwPXt9O2lmKGgpe3ZhciB4PWQuc3VicGxvdHN8fFtdO3M9ci5zdWJwbG90cz1uZXcgQXJyYXkoZyk7dmFyIGI9MTtmb3Iobj0wO248ZztuKyspe3ZhciBfPXNbbl09bmV3IEFycmF5KHYpLHc9eFtuXXx8W107Zm9yKGE9MDthPHY7YSsrKWlmKG0/KGw9MT09PWI/Inh5IjoieCIrYisieSIrYixiKyspOmw9d1thXSxfW2FdPSIiLC0xIT09cC5jYXJ0ZXNpYW4uaW5kZXhPZihsKSl7aWYodT1sLmluZGV4T2YoInkiKSxpPWwuc2xpY2UoMCx1KSxvPWwuc2xpY2UodSksdm9pZCAwIT09eVtpXSYmeVtpXSE9PWF8fHZvaWQgMCE9PXlbb10mJnlbb10hPT1uKWNvbnRpbnVlO19bYV09bCx5W2ldPWEseVtvXT1ufX19ZWxzZXt2YXIgVD1jKHQsZCwieCIpLGs9Yyh0LGQsInkiKTtyLnhheGVzPWYoVCxwLnhheGlzLHYseSwieCIpLHIueWF4ZXM9ZihrLHAueWF4aXMsZyx5LCJ5Iil9dmFyIE09ci5fYW5jaG9ycz17fSxBPSJ0b3AgdG8gYm90dG9tIj09PXIucm93b3JkZXI7Zm9yKHZhciBMIGluIHkpe3ZhciBTLEMsTyxEPUwuY2hhckF0KDApLFA9cltEKyJzaWRlIl07aWYoUC5sZW5ndGg8OClNW0xdPSJmcmVlIjtlbHNlIGlmKCJ4Ij09PUQpe2lmKCJ0Ij09PVAuY2hhckF0KDApPT09QT8oUz0wLEM9MSxPPWcpOihTPWctMSxDPS0xLE89LTEpLGgpe3ZhciB6PXlbTF07Zm9yKG49UztuIT09TztuKz1DKWlmKChsPXNbbl1bel0pJiYodT1sLmluZGV4T2YoInkiKSxsLnNsaWNlKDAsdSk9PT1MKSl7TVtMXT1sLnNsaWNlKHUpO2JyZWFrfX1lbHNlIGZvcihuPVM7biE9PU87bis9QylpZihvPXIueWF4ZXNbbl0sLTEhPT1wLmNhcnRlc2lhbi5pbmRleE9mKEwrbykpe01bTF09bzticmVha319ZWxzZSBpZigibCI9PT1QLmNoYXJBdCgwKT8oUz0wLEM9MSxPPXYpOihTPXYtMSxDPS0xLE89LTEpLGgpe3ZhciBSPXlbTF07Zm9yKG49UztuIT09TztuKz1DKWlmKChsPXNbUl1bbl0pJiYodT1sLmluZGV4T2YoInkiKSxsLnNsaWNlKHUpPT09TCkpe01bTF09bC5zbGljZSgwLHUpO2JyZWFrfX1lbHNlIGZvcihuPVM7biE9PU87bis9QylpZihpPXIueGF4ZXNbbl0sLTEhPT1wLmNhcnRlc2lhbi5pbmRleE9mKGkrTCkpe01bTF09aTticmVha319fX19fSx7Ii4uLy4uL2xpYiI6MjAyLCIuLi8uLi9saWIvcmVnZXgiOjIxOCwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6MjM3LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIjoyNTQsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6Mjc1fV0sMTIwOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiKSxhPWUoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheTtlKCIuLi8uLi9jb25zdGFudHMvYXhpc19wbGFjZWFibGVfb2JqZWN0cyIpO3QuZXhwb3J0cz1hKCJpbWFnZSIse3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHNvdXJjZTp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiYXJyYXlkcmF3In0sbGF5ZXI6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImJlbG93IiwiYWJvdmUiXSxkZmx0OiJhYm92ZSIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHNpemV4Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZToiYXJyYXlkcmF3In0sc2l6ZXk6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLGVkaXRUeXBlOiJhcnJheWRyYXcifSxzaXppbmc6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZpbGwiLCJjb250YWluIiwic3RyZXRjaCJdLGRmbHQ6ImNvbnRhaW4iLGVkaXRUeXBlOiJhcnJheWRyYXcifSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MSxlZGl0VHlwZToiYXJyYXlkcmF3In0seDp7dmFsVHlwZToiYW55IixkZmx0OjAsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHk6e3ZhbFR5cGU6ImFueSIsZGZsdDowLGVkaXRUeXBlOiJhcnJheWRyYXcifSx4YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxkZmx0OiJsZWZ0IixlZGl0VHlwZToiYXJyYXlkcmF3In0seWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZGZsdDoidG9wIixlZGl0VHlwZToiYXJyYXlkcmF3In0seHJlZjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicGFwZXIiLG4uaWRSZWdleC54LnRvU3RyaW5nKCldLGRmbHQ6InBhcGVyIixlZGl0VHlwZToiYXJyYXlkcmF3In0seXJlZjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicGFwZXIiLG4uaWRSZWdleC55LnRvU3RyaW5nKCldLGRmbHQ6InBhcGVyIixlZGl0VHlwZToiYXJyYXlkcmF3In0sZWRpdFR5cGU6ImFycmF5ZHJhdyJ9KX0seyIuLi8uLi9jb25zdGFudHMvYXhpc19wbGFjZWFibGVfb2JqZWN0cyI6MTc4LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjoyMzcsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiOjI1NH1dLDEyMTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJmYXN0LWlzbnVtZXJpYyIpLGE9ZSgiLi4vLi4vbGliL3RvX2xvZ19yYW5nZSIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscixpKXt0PXR8fHt9O3ZhciBvPSJsb2ciPT09ciYmImxpbmVhciI9PT10LnR5cGUsbD0ibGluZWFyIj09PXImJiJsb2ciPT09dC50eXBlO2lmKG98fGwpZm9yKHZhciBzLGMsdT1lLl9mdWxsTGF5b3V0LmltYWdlcyxmPXQuX2lkLmNoYXJBdCgwKSxkPTA7ZDx1Lmxlbmd0aDtkKyspaWYoYz0iaW1hZ2VzWyIrZCsiXS4iLChzPXVbZF0pW2YrInJlZiJdPT09dC5faWQpe3ZhciBwPXNbZl0saD1zWyJzaXplIitmXSxnPW51bGwsdj1udWxsO2lmKG8pe2c9YShwLHQucmFuZ2UpO3ZhciBtPWgvTWF0aC5wb3coMTAsZykvMjt2PTIqTWF0aC5sb2cobStNYXRoLnNxcnQoMSttKm0pKS9NYXRoLkxOMTB9ZWxzZSB2PShnPU1hdGgucG93KDEwLHApKSooTWF0aC5wb3coMTAsaC8yKS1NYXRoLnBvdygxMCwtaC8yKSk7bihnKT9uKHYpfHwodj1udWxsKTooZz1udWxsLHY9bnVsbCksaShjK2YsZyksaShjKyJzaXplIitmLHYpfX19LHsiLi4vLi4vbGliL3RvX2xvZ19yYW5nZSI6MjI2LCJmYXN0LWlzbnVtZXJpYyI6MTF9XSwxMjI6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vbGliIiksYT1lKCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9ZSgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksbz1lKCIuL2F0dHJpYnV0ZXMiKTtmdW5jdGlvbiBsKGUsdCxyKXtmdW5jdGlvbiBpKHIsYSl7cmV0dXJuIG4uY29lcmNlKGUsdCxvLHIsYSl9dmFyIGw9aSgic291cmNlIik7aWYoIWkoInZpc2libGUiLCEhbCkpcmV0dXJuIHQ7aSgibGF5ZXIiKSxpKCJ4YW5jaG9yIiksaSgieWFuY2hvciIpLGkoInNpemV4IiksaSgic2l6ZXkiKSxpKCJzaXppbmciKSxpKCJvcGFjaXR5Iik7Zm9yKHZhciBzPXtfZnVsbExheW91dDpyfSxjPVsieCIsInkiXSx1PTA7dTwyO3UrKyl7dmFyIGY9Y1t1XSxkPWEuY29lcmNlUmVmKGUsdCxzLGYsInBhcGVyIix2b2lkIDApO2lmKCJwYXBlciIhPT1kKWEuZ2V0RnJvbUlkKHMsZCkuX2ltZ0luZGljZXMucHVzaCh0Ll9pbmRleCk7YS5jb2VyY2VQb3NpdGlvbih0LHMsaSxkLGYsMCl9cmV0dXJuIHR9dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aShlLHQse25hbWU6ImltYWdlcyIsaGFuZGxlSXRlbURlZmF1bHRzOmx9KX19LHsiLi4vLi4vbGliIjoyMDIsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6MjQzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6MjQ4LCIuL2F0dHJpYnV0ZXMiOjEyMH1dLDEyMzpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJkMyIpLGE9ZSgiLi4vZHJhd2luZyIpLGk9ZSgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxvPWUoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyIpLGw9ZSgiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQscixzPWUuX2Z1bGxMYXlvdXQsYz1bXSx1PXt9LGY9W107Zm9yKHI9MDtyPHMuaW1hZ2VzLmxlbmd0aDtyKyspe3ZhciBkPXMuaW1hZ2VzW3JdO2lmKGQudmlzaWJsZSlpZigiYmVsb3ciPT09ZC5sYXllciYmInBhcGVyIiE9PWQueHJlZiYmInBhcGVyIiE9PWQueXJlZil7dD1vLnJlZjJpZChkLnhyZWYpK28ucmVmMmlkKGQueXJlZik7dmFyIHA9cy5fcGxvdHNbdF07aWYoIXApe2YucHVzaChkKTtjb250aW51ZX1wLm1haW5wbG90JiYodD1wLm1haW5wbG90LmlkKSx1W3RdfHwodVt0XT1bXSksdVt0XS5wdXNoKGQpfWVsc2UiYWJvdmUiPT09ZC5sYXllcj9jLnB1c2goZCk6Zi5wdXNoKGQpfXZhciBoPXtsZWZ0OntzaXppbmc6InhNaW4iLG9mZnNldDowfSxjZW50ZXI6e3NpemluZzoieE1pZCIsb2Zmc2V0Oi0uNX0scmlnaHQ6e3NpemluZzoieE1heCIsb2Zmc2V0Oi0xfX0sZz17dG9wOntzaXppbmc6IllNaW4iLG9mZnNldDowfSxtaWRkbGU6e3NpemluZzoiWU1pZCIsb2Zmc2V0Oi0uNX0sYm90dG9tOntzaXppbmc6IllNYXgiLG9mZnNldDotMX19O2Z1bmN0aW9uIHYodCl7dmFyIHI9bi5zZWxlY3QodGhpcyk7aWYodGhpcy5faW1nU3JjIT09dC5zb3VyY2UpaWYoci5hdHRyKCJ4bWxucyIsbC5zdmcpLHQuc291cmNlJiYiZGF0YToiPT09dC5zb3VyY2Uuc2xpY2UoMCw1KSlyLmF0dHIoInhsaW5rOmhyZWYiLHQuc291cmNlKSx0aGlzLl9pbWdTcmM9dC5zb3VyY2U7ZWxzZXt2YXIgYT1uZXcgUHJvbWlzZShmdW5jdGlvbihlKXt2YXIgbj1uZXcgSW1hZ2U7ZnVuY3Rpb24gYSgpe3IucmVtb3ZlKCksZSgpfXRoaXMuaW1nPW4sbi5zZXRBdHRyaWJ1dGUoImNyb3NzT3JpZ2luIiwiYW5vbnltb3VzIiksbi5vbmVycm9yPWEsbi5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTt0LndpZHRoPXRoaXMud2lkdGgsdC5oZWlnaHQ9dGhpcy5oZWlnaHQsdC5nZXRDb250ZXh0KCIyZCIpLmRyYXdJbWFnZSh0aGlzLDAsMCk7dmFyIG49dC50b0RhdGFVUkwoImltYWdlL3BuZyIpO3IuYXR0cigieGxpbms6aHJlZiIsbiksZSgpfSxyLm9uKCJlcnJvciIsYSksbi5zcmM9dC5zb3VyY2UsdGhpcy5faW1nU3JjPXQuc291cmNlfS5iaW5kKHRoaXMpKTtlLl9wcm9taXNlcy5wdXNoKGEpfX1mdW5jdGlvbiBtKHQpe3ZhciByLG8sbD1uLnNlbGVjdCh0aGlzKSxjPWkuZ2V0RnJvbUlkKGUsdC54cmVmKSx1PWkuZ2V0RnJvbUlkKGUsdC55cmVmKSxmPSJkb21haW4iPT09aS5nZXRSZWZUeXBlKHQueHJlZiksZD0iZG9tYWluIj09PWkuZ2V0UmVmVHlwZSh0LnlyZWYpLHA9cy5fc2l6ZTtyPXZvaWQgMCE9PWM/InN0cmluZyI9PXR5cGVvZiB0LnhyZWYmJmY/Yy5fbGVuZ3RoKnQuc2l6ZXg6TWF0aC5hYnMoYy5sMnAodC5zaXpleCktYy5sMnAoMCkpOnQuc2l6ZXgqcC53LG89dm9pZCAwIT09dT8ic3RyaW5nIj09dHlwZW9mIHQueXJlZiYmZD91Ll9sZW5ndGgqdC5zaXpleTpNYXRoLmFicyh1LmwycCh0LnNpemV5KS11LmwycCgwKSk6dC5zaXpleSpwLmg7dmFyIHYsbSx5PXIqaFt0LnhhbmNob3JdLm9mZnNldCx4PW8qZ1t0LnlhbmNob3JdLm9mZnNldCxiPWhbdC54YW5jaG9yXS5zaXppbmcrZ1t0LnlhbmNob3JdLnNpemluZztzd2l0Y2godj12b2lkIDAhPT1jPyJzdHJpbmciPT10eXBlb2YgdC54cmVmJiZmP2MuX2xlbmd0aCp0LngrYy5fb2Zmc2V0OmMucjJwKHQueCkrYy5fb2Zmc2V0OnQueCpwLncrcC5sLHYrPXksbT12b2lkIDAhPT11PyJzdHJpbmciPT10eXBlb2YgdC55cmVmJiZkP3UuX2xlbmd0aCooMS10LnkpK3UuX29mZnNldDp1LnIycCh0LnkpK3UuX29mZnNldDpwLmgtdC55KnAuaCtwLnQsbSs9eCx0LnNpemluZyl7Y2FzZSJmaWxsIjpiKz0iIHNsaWNlIjticmVhaztjYXNlInN0cmV0Y2giOmI9Im5vbmUifWwuYXR0cih7eDp2LHk6bSx3aWR0aDpyLGhlaWdodDpvLHByZXNlcnZlQXNwZWN0UmF0aW86YixvcGFjaXR5OnQub3BhY2l0eX0pO3ZhciBfPShjJiYiZG9tYWluIiE9PWkuZ2V0UmVmVHlwZSh0LnhyZWYpP2MuX2lkOiIiKSsodSYmImRvbWFpbiIhPT1pLmdldFJlZlR5cGUodC55cmVmKT91Ll9pZDoiIik7YS5zZXRDbGlwVXJsKGwsXz8iY2xpcCIrcy5fdWlkK186bnVsbCxlKX12YXIgeT1zLl9pbWFnZUxvd2VyTGF5ZXIuc2VsZWN0QWxsKCJpbWFnZSIpLmRhdGEoZikseD1zLl9pbWFnZVVwcGVyTGF5ZXIuc2VsZWN0QWxsKCJpbWFnZSIpLmRhdGEoYyk7eS5lbnRlcigpLmFwcGVuZCgiaW1hZ2UiKSx4LmVudGVyKCkuYXBwZW5kKCJpbWFnZSIpLHkuZXhpdCgpLnJlbW92ZSgpLHguZXhpdCgpLnJlbW92ZSgpLHkuZWFjaCgoZnVuY3Rpb24oZSl7di5iaW5kKHRoaXMpKGUpLG0uYmluZCh0aGlzKShlKX0pKSx4LmVhY2goKGZ1bmN0aW9uKGUpe3YuYmluZCh0aGlzKShlKSxtLmJpbmQodGhpcykoZSl9KSk7dmFyIGI9T2JqZWN0LmtleXMocy5fcGxvdHMpO2ZvcihyPTA7cjxiLmxlbmd0aDtyKyspe3Q9YltyXTt2YXIgXz1zLl9wbG90c1t0XTtpZihfLmltYWdlbGF5ZXIpe3ZhciB3PV8uaW1hZ2VsYXllci5zZWxlY3RBbGwoImltYWdlIikuZGF0YSh1W3RdfHxbXSk7dy5lbnRlcigpLmFwcGVuZCgiaW1hZ2UiKSx3LmV4aXQoKS5yZW1vdmUoKSx3LmVhY2goKGZ1bmN0aW9uKGUpe3YuYmluZCh0aGlzKShlKSxtLmJpbmQodGhpcykoZSl9KSl9fX19LHsiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiOjE4MiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjI0OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjoyNTEsIi4uL2RyYXdpbmciOjk3LGQzOjl9XSwxMjQ6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6ImltYWdlcyIsbGF5b3V0QXR0cmlidXRlczplKCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czplKCIuL2RlZmF1bHRzIiksaW5jbHVkZUJhc2VQbG90OmUoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9pbmNsdWRlX2NvbXBvbmVudHMiKSgiaW1hZ2VzIiksZHJhdzplKCIuL2RyYXciKSxjb252ZXJ0Q29vcmRzOmUoIi4vY29udmVydF9jb29yZHMiKX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2luY2x1ZGVfY29tcG9uZW50cyI6MjYwLCIuL2F0dHJpYnV0ZXMiOjEyMCwiLi9jb252ZXJ0X2Nvb3JkcyI6MTIxLCIuL2RlZmF1bHRzIjoxMjIsIi4vZHJhdyI6MTIzfV0sMTI1OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGE9ZSgiLi4vY29sb3IvYXR0cmlidXRlcyIpO3QuZXhwb3J0cz17Ymdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJsZWdlbmQifSxib3JkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS5kZWZhdWx0TGluZSxlZGl0VHlwZToibGVnZW5kIn0sYm9yZGVyd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJsZWdlbmQifSxmb250Om4oe2VkaXRUeXBlOiJsZWdlbmQifSksb3JpZW50YXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInYiLCJoIl0sZGZsdDoidiIsZWRpdFR5cGU6ImxlZ2VuZCJ9LHRyYWNlb3JkZXI6e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbInJldmVyc2VkIiwiZ3JvdXBlZCJdLGV4dHJhczpbIm5vcm1hbCJdLGVkaXRUeXBlOiJsZWdlbmQifSx0cmFjZWdyb3VwZ2FwOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MTAsZWRpdFR5cGU6ImxlZ2VuZCJ9LGl0ZW1zaXppbmc6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRyYWNlIiwiY29uc3RhbnQiXSxkZmx0OiJ0cmFjZSIsZWRpdFR5cGU6ImxlZ2VuZCJ9LGl0ZW13aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MzAsZGZsdDozMCxlZGl0VHlwZToibGVnZW5kIn0saXRlbWNsaWNrOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b2dnbGUiLCJ0b2dnbGVvdGhlcnMiLCExXSxkZmx0OiJ0b2dnbGUiLGVkaXRUeXBlOiJsZWdlbmQifSxpdGVtZG91YmxlY2xpY2s6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvZ2dsZSIsInRvZ2dsZW90aGVycyIsITFdLGRmbHQ6InRvZ2dsZW90aGVycyIsZWRpdFR5cGU6ImxlZ2VuZCJ9LHg6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGVkaXRUeXBlOiJsZWdlbmQifSx4YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoibGVmdCIsZWRpdFR5cGU6ImxlZ2VuZCJ9LHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGVkaXRUeXBlOiJsZWdlbmQifSx5YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZWRpdFR5cGU6ImxlZ2VuZCJ9LHVpcmV2aXNpb246e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifSx2YWxpZ246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGRmbHQ6Im1pZGRsZSIsZWRpdFR5cGU6ImxlZ2VuZCJ9LHRpdGxlOnt0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImxlZ2VuZCJ9LGZvbnQ6bih7ZWRpdFR5cGU6ImxlZ2VuZCJ9KSxzaWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AiLCJsZWZ0IiwidG9wIGxlZnQiXSxlZGl0VHlwZToibGVnZW5kIn0sZWRpdFR5cGU6ImxlZ2VuZCJ9LGVkaXRUeXBlOiJsZWdlbmQifX0seyIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjI3NiwiLi4vY29sb3IvYXR0cmlidXRlcyI6NzR9XSwxMjY6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPXtzY3JvbGxCYXJXaWR0aDo2LHNjcm9sbEJhck1pbkhlaWdodDoyMCxzY3JvbGxCYXJDb2xvcjoiIzgwOEJBNCIsc2Nyb2xsQmFyTWFyZ2luOjQsc2Nyb2xsQmFyRW50ZXJBdHRyczp7cng6MjAscnk6Myx3aWR0aDowLGhlaWdodDowfSx0aXRsZVBhZDoyLGl0ZW1HYXA6NX19LHt9XSwxMjc6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vcmVnaXN0cnkiKSxhPWUoIi4uLy4uL2xpYiIpLGk9ZSgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLG89ZSgiLi9hdHRyaWJ1dGVzIiksbD1lKCIuLi8uLi9wbG90cy9sYXlvdXRfYXR0cmlidXRlcyIpLHM9ZSgiLi9oZWxwZXJzIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIGM9ZS5sZWdlbmR8fHt9LHU9MCxmPSExLGQ9Im5vcm1hbCIscD0wO3A8ci5sZW5ndGg7cCsrKXt2YXIgaD1yW3BdO2gudmlzaWJsZSYmKChoLnNob3dsZWdlbmR8fGguX2RmbHRTaG93TGVnZW5kJiYhKGguX21vZHVsZSYmaC5fbW9kdWxlLmF0dHJpYnV0ZXMmJmguX21vZHVsZS5hdHRyaWJ1dGVzLnNob3dsZWdlbmQmJiExPT09aC5fbW9kdWxlLmF0dHJpYnV0ZXMuc2hvd2xlZ2VuZC5kZmx0KSkmJih1KyssaC5zaG93bGVnZW5kJiYoZj0hMCwobi50cmFjZUlzKGgsInBpZS1saWtlIil8fCEwPT09aC5faW5wdXQuc2hvd2xlZ2VuZCkmJnUrKykpLChuLnRyYWNlSXMoaCwiYmFyIikmJiJzdGFjayI9PT10LmJhcm1vZGV8fC0xIT09WyJ0b25leHR4IiwidG9uZXh0eSJdLmluZGV4T2YoaC5maWxsKSkmJihkPXMuaXNHcm91cGVkKHt0cmFjZW9yZGVyOmR9KT8iZ3JvdXBlZCtyZXZlcnNlZCI6InJldmVyc2VkIiksdm9pZCAwIT09aC5sZWdlbmRncm91cCYmIiIhPT1oLmxlZ2VuZGdyb3VwJiYoZD1zLmlzUmV2ZXJzZWQoe3RyYWNlb3JkZXI6ZH0pPyJyZXZlcnNlZCtncm91cGVkIjoiZ3JvdXBlZCIpKX12YXIgZz1hLmNvZXJjZShlLHQsbCwic2hvd2xlZ2VuZCIsZiYmdT4xKTtpZighMSE9PWd8fGMudWlyZXZpc2lvbil7dmFyIHY9aS5uZXdDb250YWluZXIodCwibGVnZW5kIik7aWYoXygidWlyZXZpc2lvbiIsdC51aXJldmlzaW9uKSwhMSE9PWcpe18oImJnY29sb3IiLHQucGFwZXJfYmdjb2xvciksXygiYm9yZGVyY29sb3IiKSxfKCJib3JkZXJ3aWR0aCIpLGEuY29lcmNlRm9udChfLCJmb250Iix0LmZvbnQpO3ZhciBtLHkseCxiPV8oIm9yaWVudGF0aW9uIik7ImgiPT09Yj8obT0wLG4uZ2V0Q29tcG9uZW50TWV0aG9kKCJyYW5nZXNsaWRlciIsImlzVmlzaWJsZSIpKGUueGF4aXMpPyh5PTEuMSx4PSJib3R0b20iKTooeT0tLjEseD0idG9wIikpOihtPTEuMDIseT0xLHg9ImF1dG8iKSxfKCJ0cmFjZW9yZGVyIixkKSxzLmlzR3JvdXBlZCh0LmxlZ2VuZCkmJl8oInRyYWNlZ3JvdXBnYXAiKSxfKCJpdGVtc2l6aW5nIiksXygiaXRlbXdpZHRoIiksXygiaXRlbWNsaWNrIiksXygiaXRlbWRvdWJsZWNsaWNrIiksXygieCIsbSksXygieGFuY2hvciIpLF8oInkiLHkpLF8oInlhbmNob3IiLHgpLF8oInZhbGlnbiIpLGEubm9uZU9yQWxsKGMsdixbIngiLCJ5Il0pLF8oInRpdGxlLnRleHQiKSYmKF8oInRpdGxlLnNpZGUiLCJoIj09PWI/ImxlZnQiOiJ0b3AiKSxhLmNvZXJjZUZvbnQoXywidGl0bGUuZm9udCIsdC5mb250KSl9fWZ1bmN0aW9uIF8oZSx0KXtyZXR1cm4gYS5jb2VyY2UoYyx2LG8sZSx0KX19fSx7Ii4uLy4uL2xpYiI6MjAyLCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjoyMzcsIi4uLy4uL3Bsb3RzL2xheW91dF9hdHRyaWJ1dGVzIjoyODAsIi4uLy4uL3JlZ2lzdHJ5IjoyOTAsIi4vYXR0cmlidXRlcyI6MTI1LCIuL2hlbHBlcnMiOjEzMX1dLDEyODpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJkMyIpLGE9ZSgiLi4vLi4vbGliIiksaT1lKCIuLi8uLi9wbG90cy9wbG90cyIpLG89ZSgiLi4vLi4vcmVnaXN0cnkiKSxsPWUoIi4uLy4uL2xpYi9ldmVudHMiKSxzPWUoIi4uL2RyYWdlbGVtZW50IiksYz1lKCIuLi9kcmF3aW5nIiksdT1lKCIuLi9jb2xvciIpLGY9ZSgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksZD1lKCIuL2hhbmRsZV9jbGljayIpLHA9ZSgiLi9jb25zdGFudHMiKSxoPWUoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKSxnPWguTElORV9TUEFDSU5HLHY9aC5GUk9NX1RMLG09aC5GUk9NX0JSLHk9ZSgiLi9nZXRfbGVnZW5kX2RhdGEiKSx4PWUoIi4vc3R5bGUiKSxiPWUoIi4vaGVscGVycyIpO2Z1bmN0aW9uIF8oZSx0LHIsbixhKXt2YXIgaT1yLmRhdGEoKVswXVswXS50cmFjZSxzPXtldmVudDphLG5vZGU6ci5ub2RlKCksY3VydmVOdW1iZXI6aS5pbmRleCxleHBhbmRlZEluZGV4OmkuX2V4cGFuZGVkSW5kZXgsZGF0YTplLmRhdGEsbGF5b3V0OmUubGF5b3V0LGZyYW1lczplLl90cmFuc2l0aW9uRGF0YS5fZnJhbWVzLGNvbmZpZzplLl9jb250ZXh0LGZ1bGxEYXRhOmUuX2Z1bGxEYXRhLGZ1bGxMYXlvdXQ6ZS5fZnVsbExheW91dH07aWYoaS5fZ3JvdXAmJihzLmdyb3VwPWkuX2dyb3VwKSxvLnRyYWNlSXMoaSwicGllLWxpa2UiKSYmKHMubGFiZWw9ci5kYXR1bSgpWzBdLmxhYmVsKSwhMSE9PWwudHJpZ2dlckhhbmRsZXIoZSwicGxvdGx5X2xlZ2VuZGNsaWNrIixzKSlpZigxPT09bil0Ll9jbGlja1RpbWVvdXQ9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtkKHIsZSxuKX0pLGUuX2NvbnRleHQuZG91YmxlQ2xpY2tEZWxheSk7ZWxzZSBpZigyPT09bil7dC5fY2xpY2tUaW1lb3V0JiZjbGVhclRpbWVvdXQodC5fY2xpY2tUaW1lb3V0KSxlLl9sZWdlbmRNb3VzZURvd25UaW1lPTAsITEhPT1sLnRyaWdnZXJIYW5kbGVyKGUsInBsb3RseV9sZWdlbmRkb3VibGVjbGljayIscykmJmQocixlLG4pfX1mdW5jdGlvbiB3KGUsdCxyKXt2YXIgbixpPWUuZGF0YSgpWzBdWzBdLGw9aS50cmFjZSxzPW8udHJhY2VJcyhsLCJwaWUtbGlrZSIpLHU9bC5pbmRleCxkPXIuX21haW4mJnQuX2NvbnRleHQuZWRpdHMubGVnZW5kVGV4dCYmIXMsaD1yLl9tYXhOYW1lTGVuZ3RoO3IuZW50cmllcz9uPWkudGV4dDoobj1zP2kubGFiZWw6bC5uYW1lLGwuX21ldGEmJihuPWEudGVtcGxhdGVTdHJpbmcobixsLl9tZXRhKSkpO3ZhciBnPWEuZW5zdXJlU2luZ2xlKGUsInRleHQiLCJsZWdlbmR0ZXh0Iik7Zy5hdHRyKCJ0ZXh0LWFuY2hvciIsInN0YXJ0IikuY2FsbChjLmZvbnQsci5mb250KS50ZXh0KGQ/VChuLGgpOm4pO3ZhciB2PXIuaXRlbXdpZHRoKzIqcC5pdGVtR2FwO2YucG9zaXRpb25UZXh0KGcsdiwwKSxkP2cuY2FsbChmLm1ha2VFZGl0YWJsZSx7Z2Q6dCx0ZXh0Om59KS5jYWxsKE0sZSx0LHIpLm9uKCJlZGl0IiwoZnVuY3Rpb24obil7dGhpcy50ZXh0KFQobixoKSkuY2FsbChNLGUsdCxyKTt2YXIgbD1pLnRyYWNlLl9mdWxsSW5wdXR8fHt9LHM9e307aWYoby5oYXNUcmFuc2Zvcm0obCwiZ3JvdXBieSIpKXt2YXIgYz1vLmdldFRyYW5zZm9ybUluZGljZXMobCwiZ3JvdXBieSIpLGY9Y1tjLmxlbmd0aC0xXSxkPWEua2V5ZWRDb250YWluZXIobCwidHJhbnNmb3Jtc1siK2YrIl0uc3R5bGVzIiwidGFyZ2V0IiwidmFsdWUubmFtZSIpO2Quc2V0KGkudHJhY2UuX2dyb3VwLG4pLHM9ZC5jb25zdHJ1Y3RVcGRhdGUoKX1lbHNlIHMubmFtZT1uO3JldHVybiBvLmNhbGwoIl9ndWlSZXN0eWxlIix0LHMsdSl9KSk6TShnLGUsdCxyKX1mdW5jdGlvbiBUKGUsdCl7dmFyIHI9TWF0aC5tYXgoNCx0KTtpZihlJiZlLnRyaW0oKS5sZW5ndGg+PXIvMilyZXR1cm4gZTtmb3IodmFyIG49ci0oZT1lfHwiIikubGVuZ3RoO24+MDtuLS0pZSs9IiAiO3JldHVybiBlfWZ1bmN0aW9uIGsoZSx0KXt2YXIgcixpPXQuX2NvbnRleHQuZG91YmxlQ2xpY2tEZWxheSxvPTEsbD1hLmVuc3VyZVNpbmdsZShlLCJyZWN0IiwibGVnZW5kdG9nZ2xlIiwoZnVuY3Rpb24oZSl7dC5fY29udGV4dC5zdGF0aWNQbG90fHxlLnN0eWxlKCJjdXJzb3IiLCJwb2ludGVyIikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKSxlLmNhbGwodS5maWxsLCJyZ2JhKDAsMCwwLDApIil9KSk7dC5fY29udGV4dC5zdGF0aWNQbG90fHwobC5vbigibW91c2Vkb3duIiwoZnVuY3Rpb24oKXsocj0obmV3IERhdGUpLmdldFRpbWUoKSktdC5fbGVnZW5kTW91c2VEb3duVGltZTxpP28rPTE6KG89MSx0Ll9sZWdlbmRNb3VzZURvd25UaW1lPXIpfSkpLGwub24oIm1vdXNldXAiLChmdW5jdGlvbigpe2lmKCF0Ll9kcmFnZ2VkJiYhdC5fZWRpdGluZyl7dmFyIHI9dC5fZnVsbExheW91dC5sZWdlbmQ7KG5ldyBEYXRlKS5nZXRUaW1lKCktdC5fbGVnZW5kTW91c2VEb3duVGltZT5pJiYobz1NYXRoLm1heChvLTEsMSkpLF8odCxyLGUsbyxuLmV2ZW50KX19KSkpfWZ1bmN0aW9uIE0oZSx0LHIsbil7bi5fbWFpbnx8ZS5hdHRyKCJkYXRhLW5vdGV4IiwhMCksZi5jb252ZXJ0VG9Uc3BhbnMoZSxyLChmdW5jdGlvbigpeyFmdW5jdGlvbihlLHQscil7dmFyIG49ZS5kYXRhKClbMF1bMF07aWYoci5fbWFpbiYmbiYmIW4udHJhY2Uuc2hvd2xlZ2VuZClyZXR1cm4gdm9pZCBlLnJlbW92ZSgpO3ZhciBhPWUuc2VsZWN0KCJnW2NsYXNzKj1tYXRoLWdyb3VwXSIpLGk9YS5ub2RlKCk7cnx8KHI9dC5fZnVsbExheW91dC5sZWdlbmQpO3ZhciBvLGwscz1yLmJvcmRlcndpZHRoLHU9KG4/cjpyLnRpdGxlKS5mb250LnNpemUqZztpZihpKXt2YXIgZD1jLmJCb3goaSk7bz1kLmhlaWdodCxsPWQud2lkdGgsbj9jLnNldFRyYW5zbGF0ZShhLDAsLjI1Km8pOmMuc2V0VHJhbnNsYXRlKGEscywuNzUqbytzKX1lbHNle3ZhciBoPWUuc2VsZWN0KG4/Ii5sZWdlbmR0ZXh0IjoiLmxlZ2VuZHRpdGxldGV4dCIpLHY9Zi5saW5lQ291bnQoaCksbT1oLm5vZGUoKTtvPXUqdixsPW0/Yy5iQm94KG0pLndpZHRoOjA7dmFyIHk9dSooKHYtMSkvMi0uMyk7aWYobil7dmFyIHg9ci5pdGVtd2lkdGgrMipwLml0ZW1HYXA7Zi5wb3NpdGlvblRleHQoaCx4LC15KX1lbHNlIGYucG9zaXRpb25UZXh0KGgscC50aXRsZVBhZCtzLHUrcyl9bj8obi5saW5lSGVpZ2h0PXUsbi5oZWlnaHQ9TWF0aC5tYXgobywxNikrMyxuLndpZHRoPWwpOihyLl90aXRsZVdpZHRoPWwsci5fdGl0bGVIZWlnaHQ9byl9KHQscixuKX0pKX1mdW5jdGlvbiBBKGUpe3JldHVybiBhLmlzUmlnaHRBbmNob3IoZSk/InJpZ2h0IjphLmlzQ2VudGVyQW5jaG9yKGUpPyJjZW50ZXIiOiJsZWZ0In1mdW5jdGlvbiBMKGUpe3JldHVybiBhLmlzQm90dG9tQW5jaG9yKGUpPyJib3R0b20iOmEuaXNNaWRkbGVBbmNob3IoZSk/Im1pZGRsZSI6InRvcCJ9dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbD1lLl9mdWxsTGF5b3V0LGY9ImxlZ2VuZCIrbC5fdWlkO2lmKHQ/KHI9dC5sYXllcixmKz0iLWhvdmVyIik6KCh0PWwubGVnZW5kfHx7fSkuX21haW49ITAscj1sLl9pbmZvbGF5ZXIpLHIpe3ZhciBkO2lmKGUuX2xlZ2VuZE1vdXNlRG93blRpbWV8fChlLl9sZWdlbmRNb3VzZURvd25UaW1lPTApLHQuX21haW4pe2lmKCFlLmNhbGNkYXRhKXJldHVybjtkPWwuc2hvd2xlZ2VuZCYmeShlLmNhbGNkYXRhLHQpfWVsc2V7aWYoIXQuZW50cmllcylyZXR1cm47ZD15KHQuZW50cmllcyx0KX12YXIgaD1sLmhpZGRlbmxhYmVsc3x8W107aWYodC5fbWFpbiYmKCFsLnNob3dsZWdlbmR8fCFkLmxlbmd0aCkpcmV0dXJuIHIuc2VsZWN0QWxsKCIubGVnZW5kIikucmVtb3ZlKCksbC5fdG9wZGVmcy5zZWxlY3QoIiMiK2YpLnJlbW92ZSgpLGkuYXV0b01hcmdpbihlLCJsZWdlbmQiKTt2YXIgZz1hLmVuc3VyZVNpbmdsZShyLCJnIiwibGVnZW5kIiwoZnVuY3Rpb24oZSl7dC5fbWFpbiYmZS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpfSkpLFQ9YS5lbnN1cmVTaW5nbGVCeUlkKGwuX3RvcGRlZnMsImNsaXBQYXRoIixmLChmdW5jdGlvbihlKXtlLmFwcGVuZCgicmVjdCIpfSkpLFM9YS5lbnN1cmVTaW5nbGUoZywicmVjdCIsImJnIiwoZnVuY3Rpb24oZSl7ZS5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIil9KSk7Uy5jYWxsKHUuc3Ryb2tlLHQuYm9yZGVyY29sb3IpLmNhbGwodS5maWxsLHQuYmdjb2xvcikuc3R5bGUoInN0cm9rZS13aWR0aCIsdC5ib3JkZXJ3aWR0aCsicHgiKTt2YXIgQz1hLmVuc3VyZVNpbmdsZShnLCJnIiwic2Nyb2xsYm94IiksTz10LnRpdGxlO2lmKHQuX3RpdGxlV2lkdGg9MCx0Ll90aXRsZUhlaWdodD0wLE8udGV4dCl7dmFyIEQ9YS5lbnN1cmVTaW5nbGUoQywidGV4dCIsImxlZ2VuZHRpdGxldGV4dCIpO0QuYXR0cigidGV4dC1hbmNob3IiLCJzdGFydCIpLmNhbGwoYy5mb250LE8uZm9udCkudGV4dChPLnRleHQpLE0oRCxDLGUsdCl9ZWxzZSBDLnNlbGVjdEFsbCgiLmxlZ2VuZHRpdGxldGV4dCIpLnJlbW92ZSgpO3ZhciBQPWEuZW5zdXJlU2luZ2xlKGcsInJlY3QiLCJzY3JvbGxiYXIiLChmdW5jdGlvbihlKXtlLmF0dHIocC5zY3JvbGxCYXJFbnRlckF0dHJzKS5jYWxsKHUuZmlsbCxwLnNjcm9sbEJhckNvbG9yKX0pKSx6PUMuc2VsZWN0QWxsKCJnLmdyb3VwcyIpLmRhdGEoZCk7ei5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZ3JvdXBzIiksei5leGl0KCkucmVtb3ZlKCk7dmFyIFI9ei5zZWxlY3RBbGwoImcudHJhY2VzIikuZGF0YShhLmlkZW50aXR5KTtSLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0cmFjZXMiKSxSLmV4aXQoKS5yZW1vdmUoKSxSLnN0eWxlKCJvcGFjaXR5IiwoZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXS50cmFjZTtyZXR1cm4gby50cmFjZUlzKHQsInBpZS1saWtlIik/LTEhPT1oLmluZGV4T2YoZVswXS5sYWJlbCk/LjU6MToibGVnZW5kb25seSI9PT10LnZpc2libGU/LjU6MX0pKS5lYWNoKChmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLmNhbGwodyxlLHQpfSkpLmNhbGwoeCxlLHQpLmVhY2goKGZ1bmN0aW9uKCl7dC5fbWFpbiYmbi5zZWxlY3QodGhpcykuY2FsbChrLGUpfSkpLGEuc3luY09yQXN5bmMoW2kucHJldmlvdXNQcm9taXNlcyxmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlLHQscixhKXt2YXIgaT1lLl9mdWxsTGF5b3V0O2F8fChhPWkubGVnZW5kKTt2YXIgbz1pLl9zaXplLGw9Yi5pc1ZlcnRpY2FsKGEpLHM9Yi5pc0dyb3VwZWQoYSksdT1hLmJvcmRlcndpZHRoLGY9Mip1LGQ9cC5pdGVtR2FwLGg9YS5pdGVtd2lkdGgrMipkLGc9MioodStkKSx2PUwoYSksbT1hLnk8MHx8MD09PWEueSYmInRvcCI9PT12LHk9YS55PjF8fDE9PT1hLnkmJiJib3R0b20iPT09djthLl9tYXhIZWlnaHQ9TWF0aC5tYXgobXx8eT9pLmhlaWdodC8yOm8uaCwzMCk7dmFyIHg9MDthLl93aWR0aD0wLGEuX2hlaWdodD0wO3ZhciBfPWZ1bmN0aW9uKGUpe3ZhciB0PTAscj0wLG49ZS50aXRsZS5zaWRlO24mJigtMSE9PW4uaW5kZXhPZigibGVmdCIpJiYodD1lLl90aXRsZVdpZHRoKSwtMSE9PW4uaW5kZXhPZigidG9wIikmJihyPWUuX3RpdGxlSGVpZ2h0KSk7cmV0dXJuW3Qscl19KGEpO2lmKGwpci5lYWNoKChmdW5jdGlvbihlKXt2YXIgdD1lWzBdLmhlaWdodDtjLnNldFRyYW5zbGF0ZSh0aGlzLHUrX1swXSx1K19bMV0rYS5faGVpZ2h0K3QvMitkKSxhLl9oZWlnaHQrPXQsYS5fd2lkdGg9TWF0aC5tYXgoYS5fd2lkdGgsZVswXS53aWR0aCl9KSkseD1oK2EuX3dpZHRoLGEuX3dpZHRoKz1kK2grZixhLl9oZWlnaHQrPWcscyYmKHQuZWFjaCgoZnVuY3Rpb24oZSx0KXtjLnNldFRyYW5zbGF0ZSh0aGlzLDAsdCphLnRyYWNlZ3JvdXBnYXApfSkpLGEuX2hlaWdodCs9KGEuX2xncm91cHNMZW5ndGgtMSkqYS50cmFjZWdyb3VwZ2FwKTtlbHNle3ZhciB3PUEoYSksVD1hLng8MHx8MD09PWEueCYmInJpZ2h0Ij09PXcsaz1hLng+MXx8MT09PWEueCYmImxlZnQiPT09dyxNPXl8fG0sUz1pLndpZHRoLzI7YS5fbWF4V2lkdGg9TWF0aC5tYXgoVD9NJiYibGVmdCI9PT13P28ubCtvLnc6UzprP00mJiJyaWdodCI9PT13P28ucitvLnc6UzpvLncsMipoKTt2YXIgQz0wLE89MDtyLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWVbMF0ud2lkdGgraDtDPU1hdGgubWF4KEMsdCksTys9dH0pKSx4PW51bGw7dmFyIEQ9MDtpZihzKXt2YXIgUD0wLHo9MCxSPTA7dC5lYWNoKChmdW5jdGlvbigpe3ZhciBlPTAsdD0wO24uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy50cmFjZXMiKS5lYWNoKChmdW5jdGlvbihyKXt2YXIgbj1yWzBdLmhlaWdodDtjLnNldFRyYW5zbGF0ZSh0aGlzLF9bMF0sX1sxXSt1K2Qrbi8yK3QpLHQrPW4sZT1NYXRoLm1heChlLGgrclswXS53aWR0aCl9KSksUD1NYXRoLm1heChQLHQpO3ZhciByPWUrZDtyK3Urej5hLl9tYXhXaWR0aCYmKEQ9TWF0aC5tYXgoRCx6KSx6PTAsUis9UCthLnRyYWNlZ3JvdXBnYXAsUD10KSxjLnNldFRyYW5zbGF0ZSh0aGlzLHosUikseis9cn0pKSxhLl93aWR0aD1NYXRoLm1heChELHopK3UsYS5faGVpZ2h0PVIrUCtnfWVsc2V7dmFyIEU9ci5zaXplKCksST1PK2YrKEUtMSkqZDxhLl9tYXhXaWR0aCxGPTAsTj0wLEg9MCxqPTA7ci5lYWNoKChmdW5jdGlvbihlKXt2YXIgdD1lWzBdLmhlaWdodCxyPWgrZVswXS53aWR0aCxuPShJP3I6QykrZDtuK3UrTi1kPj1hLl9tYXhXaWR0aCYmKEQ9TWF0aC5tYXgoRCxqKSxOPTAsSCs9RixhLl9oZWlnaHQrPUYsRj0wKSxjLnNldFRyYW5zbGF0ZSh0aGlzLF9bMF0rdStOLF9bMV0rdStIK3QvMitkKSxqPU4rcitkLE4rPW4sRj1NYXRoLm1heChGLHQpfSkpLEk/KGEuX3dpZHRoPU4rZixhLl9oZWlnaHQ9RitnKTooYS5fd2lkdGg9TWF0aC5tYXgoRCxqKStmLGEuX2hlaWdodCs9RitnKX19YS5fd2lkdGg9TWF0aC5jZWlsKE1hdGgubWF4KGEuX3dpZHRoK19bMF0sYS5fdGl0bGVXaWR0aCsyKih1K3AudGl0bGVQYWQpKSksYS5faGVpZ2h0PU1hdGguY2VpbChNYXRoLm1heChhLl9oZWlnaHQrX1sxXSxhLl90aXRsZUhlaWdodCsyKih1K3AuaXRlbUdhcCkpKSxhLl9lZmZIZWlnaHQ9TWF0aC5taW4oYS5faGVpZ2h0LGEuX21heEhlaWdodCk7dmFyIEI9ZS5fY29udGV4dC5lZGl0cyxWPUIubGVnZW5kVGV4dHx8Qi5sZWdlbmRQb3NpdGlvbjtyLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLnNlbGVjdCgiLmxlZ2VuZHRvZ2dsZSIpLHI9ZVswXS5oZWlnaHQsYT1WP2g6eHx8aCtlWzBdLndpZHRoO2x8fChhKz1kLzIpLGMuc2V0UmVjdCh0LDAsLXIvMixhLHIpfSkpfShlLHosUix0KX0sZnVuY3Rpb24oKXtpZighdC5fbWFpbnx8IWZ1bmN0aW9uKGUpe3ZhciB0PWUuX2Z1bGxMYXlvdXQubGVnZW5kLHI9QSh0KSxuPUwodCk7cmV0dXJuIGkuYXV0b01hcmdpbihlLCJsZWdlbmQiLHt4OnQueCx5OnQueSxsOnQuX3dpZHRoKnZbcl0scjp0Ll93aWR0aCptW3JdLGI6dC5fZWZmSGVpZ2h0Km1bbl0sdDp0Ll9lZmZIZWlnaHQqdltuXX0pfShlKSl7dmFyIHUsZCxoLHkseD1sLl9zaXplLGI9dC5ib3JkZXJ3aWR0aCx3PXgubCt4LncqdC54LXZbQSh0KV0qdC5fd2lkdGgsaz14LnQreC5oKigxLXQueSktdltMKHQpXSp0Ll9lZmZIZWlnaHQ7aWYodC5fbWFpbiYmbC5tYXJnaW4uYXV0b2V4cGFuZCl7dmFyIE09dyxPPWs7dz1hLmNvbnN0cmFpbih3LDAsbC53aWR0aC10Ll93aWR0aCksaz1hLmNvbnN0cmFpbihrLDAsbC5oZWlnaHQtdC5fZWZmSGVpZ2h0KSx3IT09TSYmYS5sb2coIkNvbnN0cmFpbiBsZWdlbmQueCB0byBtYWtlIGxlZ2VuZCBmaXQgaW5zaWRlIGdyYXBoIiksayE9PU8mJmEubG9nKCJDb25zdHJhaW4gbGVnZW5kLnkgdG8gbWFrZSBsZWdlbmQgZml0IGluc2lkZSBncmFwaCIpfWlmKHQuX21haW4mJmMuc2V0VHJhbnNsYXRlKGcsdyxrKSxQLm9uKCIuZHJhZyIsbnVsbCksZy5vbigid2hlZWwiLG51bGwpLCF0Ll9tYWlufHx0Ll9oZWlnaHQ8PXQuX21heEhlaWdodHx8ZS5fY29udGV4dC5zdGF0aWNQbG90KXt2YXIgRD10Ll9lZmZIZWlnaHQ7dC5fbWFpbnx8KEQ9dC5faGVpZ2h0KSxTLmF0dHIoe3dpZHRoOnQuX3dpZHRoLWIsaGVpZ2h0OkQtYix4OmIvMix5OmIvMn0pLGMuc2V0VHJhbnNsYXRlKEMsMCwwKSxULnNlbGVjdCgicmVjdCIpLmF0dHIoe3dpZHRoOnQuX3dpZHRoLTIqYixoZWlnaHQ6RC0yKmIseDpiLHk6Yn0pLGMuc2V0Q2xpcFVybChDLGYsZSksYy5zZXRSZWN0KFAsMCwwLDAsMCksZGVsZXRlIHQuX3Njcm9sbFl9ZWxzZXt2YXIgeixSLEUsST1NYXRoLm1heChwLnNjcm9sbEJhck1pbkhlaWdodCx0Ll9lZmZIZWlnaHQqdC5fZWZmSGVpZ2h0L3QuX2hlaWdodCksRj10Ll9lZmZIZWlnaHQtSS0yKnAuc2Nyb2xsQmFyTWFyZ2luLE49dC5faGVpZ2h0LXQuX2VmZkhlaWdodCxIPUYvTixqPU1hdGgubWluKHQuX3Njcm9sbFl8fDAsTik7Uy5hdHRyKHt3aWR0aDp0Ll93aWR0aC0yKmIrcC5zY3JvbGxCYXJXaWR0aCtwLnNjcm9sbEJhck1hcmdpbixoZWlnaHQ6dC5fZWZmSGVpZ2h0LWIseDpiLzIseTpiLzJ9KSxULnNlbGVjdCgicmVjdCIpLmF0dHIoe3dpZHRoOnQuX3dpZHRoLTIqYitwLnNjcm9sbEJhcldpZHRoK3Auc2Nyb2xsQmFyTWFyZ2luLGhlaWdodDp0Ll9lZmZIZWlnaHQtMipiLHg6Yix5OmIran0pLGMuc2V0Q2xpcFVybChDLGYsZSksVShqLEksSCksZy5vbigid2hlZWwiLChmdW5jdGlvbigpe1Uoaj1hLmNvbnN0cmFpbih0Ll9zY3JvbGxZK24uZXZlbnQuZGVsdGFZL0YqTiwwLE4pLEksSCksMCE9PWomJmohPT1OJiZuLmV2ZW50LnByZXZlbnREZWZhdWx0KCl9KSk7dmFyIEI9bi5iZWhhdmlvci5kcmFnKCkub24oImRyYWdzdGFydCIsKGZ1bmN0aW9uKCl7dmFyIGU9bi5ldmVudC5zb3VyY2VFdmVudDt6PSJ0b3VjaHN0YXJ0Ij09PWUudHlwZT9lLmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFk6ZS5jbGllbnRZLEU9an0pKS5vbigiZHJhZyIsKGZ1bmN0aW9uKCl7dmFyIGU9bi5ldmVudC5zb3VyY2VFdmVudDsyPT09ZS5idXR0b25zfHxlLmN0cmxLZXl8fChSPSJ0b3VjaG1vdmUiPT09ZS50eXBlP2UuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WTplLmNsaWVudFksVShqPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj0oci10KS9IK2U7cmV0dXJuIGEuY29uc3RyYWluKG4sMCxOKX0oRSx6LFIpLEksSCkpfSkpO1AuY2FsbChCKTt2YXIgVj1uLmJlaGF2aW9yLmRyYWcoKS5vbigiZHJhZ3N0YXJ0IiwoZnVuY3Rpb24oKXt2YXIgZT1uLmV2ZW50LnNvdXJjZUV2ZW50OyJ0b3VjaHN0YXJ0Ij09PWUudHlwZSYmKHo9ZS5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZLEU9ail9KSkub24oImRyYWciLChmdW5jdGlvbigpe3ZhciBlPW4uZXZlbnQuc291cmNlRXZlbnQ7InRvdWNobW92ZSI9PT1lLnR5cGUmJihSPWUuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WSxVKGo9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPSh0LXIpL0grZTtyZXR1cm4gYS5jb25zdHJhaW4obiwwLE4pfShFLHosUiksSSxIKSl9KSk7Qy5jYWxsKFYpfWlmKGUuX2NvbnRleHQuZWRpdHMubGVnZW5kUG9zaXRpb24pZy5jbGFzc2VkKCJjdXJzb3ItbW92ZSIsITApLHMuaW5pdCh7ZWxlbWVudDpnLm5vZGUoKSxnZDplLHByZXBGbjpmdW5jdGlvbigpe3ZhciBlPWMuZ2V0VHJhbnNsYXRlKGcpO2g9ZS54LHk9ZS55fSxtb3ZlRm46ZnVuY3Rpb24oZSxyKXt2YXIgbj1oK2UsYT15K3I7Yy5zZXRUcmFuc2xhdGUoZyxuLGEpLHU9cy5hbGlnbihuLDAseC5sLHgubCt4LncsdC54YW5jaG9yKSxkPXMuYWxpZ24oYSwwLHgudCt4LmgseC50LHQueWFuY2hvcil9LGRvbmVGbjpmdW5jdGlvbigpe3ZvaWQgMCE9PXUmJnZvaWQgMCE9PWQmJm8uY2FsbCgiX2d1aVJlbGF5b3V0IixlLHsibGVnZW5kLngiOnUsImxlZ2VuZC55IjpkfSl9LGNsaWNrRm46ZnVuY3Rpb24odCxuKXt2YXIgYT1yLnNlbGVjdEFsbCgiZy50cmFjZXMiKS5maWx0ZXIoKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gbi5jbGllbnRYPj1lLmxlZnQmJm4uY2xpZW50WDw9ZS5yaWdodCYmbi5jbGllbnRZPj1lLnRvcCYmbi5jbGllbnRZPD1lLmJvdHRvbX0pKTthLnNpemUoKT4wJiZfKGUsZyxhLHQsbil9fSl9ZnVuY3Rpb24gVShyLG4sYSl7dC5fc2Nyb2xsWT1lLl9mdWxsTGF5b3V0LmxlZ2VuZC5fc2Nyb2xsWT1yLGMuc2V0VHJhbnNsYXRlKEMsMCwtciksYy5zZXRSZWN0KFAsdC5fd2lkdGgscC5zY3JvbGxCYXJNYXJnaW4rciphLHAuc2Nyb2xsQmFyV2lkdGgsbiksVC5zZWxlY3QoInJlY3QiKS5hdHRyKCJ5IixiK3IpfX1dLGUpfX19LHsiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6MTc3LCIuLi8uLi9saWIiOjIwMiwiLi4vLi4vbGliL2V2ZW50cyI6MTk1LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjIyNCwiLi4vLi4vcGxvdHMvcGxvdHMiOjI4MiwiLi4vLi4vcmVnaXN0cnkiOjI5MCwiLi4vY29sb3IiOjc1LCIuLi9kcmFnZWxlbWVudCI6OTQsIi4uL2RyYXdpbmciOjk3LCIuL2NvbnN0YW50cyI6MTI2LCIuL2dldF9sZWdlbmRfZGF0YSI6MTI5LCIuL2hhbmRsZV9jbGljayI6MTMwLCIuL2hlbHBlcnMiOjEzMSwiLi9zdHlsZSI6MTMzLGQzOjl9XSwxMjk6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vcmVnaXN0cnkiKSxhPWUoIi4vaGVscGVycyIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciByLGksbz17fSxsPVtdLHM9ITEsYz17fSx1PTAsZj0wLGQ9dC5fbWFpbjtmdW5jdGlvbiBwKGUscil7aWYoIiIhPT1lJiZhLmlzR3JvdXBlZCh0KSktMT09PWwuaW5kZXhPZihlKT8obC5wdXNoKGUpLHM9ITAsb1tlXT1bW3JdXSk6b1tlXS5wdXNoKFtyXSk7ZWxzZXt2YXIgbj0ifn5pIit1O2wucHVzaChuKSxvW25dPVtbcl1dLHUrK319Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGg9ZVtyXSxnPWhbMF0sdj1nLnRyYWNlLG09di5sZWdlbmRncm91cDtpZighZHx8di52aXNpYmxlJiZ2LnNob3dsZWdlbmQpaWYobi50cmFjZUlzKHYsInBpZS1saWtlIikpZm9yKGNbbV18fChjW21dPXt9KSxpPTA7aTxoLmxlbmd0aDtpKyspe3ZhciB5PWhbaV0ubGFiZWw7Y1ttXVt5XXx8KHAobSx7bGFiZWw6eSxjb2xvcjpoW2ldLmNvbG9yLGk6aFtpXS5pLHRyYWNlOnYscHRzOmhbaV0ucHRzfSksY1ttXVt5XT0hMCxmPU1hdGgubWF4KGYsKHl8fCIiKS5sZW5ndGgpKX1lbHNlIHAobSxnKSxmPU1hdGgubWF4KGYsKHYubmFtZXx8IiIpLmxlbmd0aCl9aWYoIWwubGVuZ3RoKXJldHVybltdO3ZhciB4LGIsXz1sLmxlbmd0aDtpZihzJiZhLmlzR3JvdXBlZCh0KSlmb3IoYj1uZXcgQXJyYXkoXykscj0wO3I8XztyKyspeD1vW2xbcl1dLGJbcl09YS5pc1JldmVyc2VkKHQpP3gucmV2ZXJzZSgpOng7ZWxzZXtmb3IoYj1bbmV3IEFycmF5KF8pXSxyPTA7cjxfO3IrKyl4PW9bbFtyXV1bMF0sYlswXVthLmlzUmV2ZXJzZWQodCk/Xy1yLTE6cl09eDtfPTF9cmV0dXJuIHQuX2xncm91cHNMZW5ndGg9Xyx0Ll9tYXhOYW1lTGVuZ3RoPWYsYn19LHsiLi4vLi4vcmVnaXN0cnkiOjI5MCwiLi9oZWxwZXJzIjoxMzF9XSwxMzA6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vbGliIiksYT1lKCIuLi8uLi9yZWdpc3RyeSIpLGk9ITA7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbz10Ll9mdWxsTGF5b3V0O2lmKCF0Ll9kcmFnZ2VkJiYhdC5fZWRpdGluZyl7dmFyIGwscz1vLmxlZ2VuZC5pdGVtY2xpY2ssYz1vLmxlZ2VuZC5pdGVtZG91YmxlY2xpY2s7aWYoMT09PXImJiJ0b2dnbGUiPT09cyYmInRvZ2dsZW90aGVycyI9PT1jJiZpJiZ0LmRhdGEmJnQuX2NvbnRleHQuc2hvd1RpcHM/KG4ubm90aWZpZXIobi5fKHQsIkRvdWJsZS1jbGljayBvbiBsZWdlbmQgdG8gaXNvbGF0ZSBvbmUgdHJhY2UiKSwibG9uZyIpLGk9ITEpOmk9ITEsMT09PXI/bD1zOjI9PT1yJiYobD1jKSxsKXt2YXIgdSxmLGQscCxoLGc9by5oaWRkZW5sYWJlbHM/by5oaWRkZW5sYWJlbHMuc2xpY2UoKTpbXSx2PWUuZGF0YSgpWzBdWzBdLG09dC5fZnVsbERhdGEseT12LnRyYWNlLHg9eS5sZWdlbmRncm91cCxiPXt9LF89W10sdz1bXSxUPVtdO2lmKGEudHJhY2VJcyh5LCJwaWUtbGlrZSIpKXt2YXIgaz12LmxhYmVsLE09Zy5pbmRleE9mKGspOyJ0b2dnbGUiPT09bD8tMT09PU0/Zy5wdXNoKGspOmcuc3BsaWNlKE0sMSk6InRvZ2dsZW90aGVycyI9PT1sJiYoZz1bXSx0LmNhbGNkYXRhWzBdLmZvckVhY2goKGZ1bmN0aW9uKGUpe2shPT1lLmxhYmVsJiZnLnB1c2goZS5sYWJlbCl9KSksdC5fZnVsbExheW91dC5oaWRkZW5sYWJlbHMmJnQuX2Z1bGxMYXlvdXQuaGlkZGVubGFiZWxzLmxlbmd0aD09PWcubGVuZ3RoJiYtMT09PU0mJihnPVtdKSksYS5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsImhpZGRlbmxhYmVscyIsZyl9ZWxzZXt2YXIgQSxMPXgmJngubGVuZ3RoLFM9W107aWYoTClmb3IodT0wO3U8bS5sZW5ndGg7dSsrKShBPW1bdV0pLnZpc2libGUmJkEubGVnZW5kZ3JvdXA9PT14JiZTLnB1c2godSk7aWYoInRvZ2dsZSI9PT1sKXt2YXIgQztzd2l0Y2goeS52aXNpYmxlKXtjYXNlITA6Qz0ibGVnZW5kb25seSI7YnJlYWs7Y2FzZSExOkM9ITE7YnJlYWs7Y2FzZSJsZWdlbmRvbmx5IjpDPSEwfWlmKEwpZm9yKHU9MDt1PG0ubGVuZ3RoO3UrKykhMSE9PW1bdV0udmlzaWJsZSYmbVt1XS5sZWdlbmRncm91cD09PXgmJk4obVt1XSxDKTtlbHNlIE4oeSxDKX1lbHNlIGlmKCJ0b2dnbGVvdGhlcnMiPT09bCl7dmFyIE8sRCxQLHosUj0hMDtmb3IodT0wO3U8bS5sZW5ndGg7dSsrKWlmKE89bVt1XT09PXksUD0hMCE9PW1bdV0uc2hvd2xlZ2VuZCwhKE98fFB8fChEPUwmJm1bdV0ubGVnZW5kZ3JvdXA9PT14KXx8ITAhPT1tW3VdLnZpc2libGV8fGEudHJhY2VJcyhtW3VdLCJub3RMZWdlbmRJc29sYXRhYmxlIikpKXtSPSExO2JyZWFrfWZvcih1PTA7dTxtLmxlbmd0aDt1KyspaWYoITEhPT1tW3VdLnZpc2libGUmJiFhLnRyYWNlSXMobVt1XSwibm90TGVnZW5kSXNvbGF0YWJsZSIpKXN3aXRjaCh5LnZpc2libGUpe2Nhc2UibGVnZW5kb25seSI6TihtW3VdLCEwKTticmVhaztjYXNlITA6ej0hIVJ8fCJsZWdlbmRvbmx5IixPPW1bdV09PT15LFA9ITAhPT1tW3VdLnNob3dsZWdlbmQmJiFtW3VdLmxlZ2VuZGdyb3VwLEQ9T3x8TCYmbVt1XS5sZWdlbmRncm91cD09PXgsTihtW3VdLCEoIUQmJiFQKXx8eil9fWZvcih1PTA7dTx3Lmxlbmd0aDt1KyspaWYoZD13W3VdKXt2YXIgRT1kLmNvbnN0cnVjdFVwZGF0ZSgpLEk9T2JqZWN0LmtleXMoRSk7Zm9yKGY9MDtmPEkubGVuZ3RoO2YrKylwPUlbZl0sKGJbcF09YltwXXx8W10pW1RbdV1dPUVbcF19Zm9yKGg9T2JqZWN0LmtleXMoYiksdT0wO3U8aC5sZW5ndGg7dSsrKWZvcihwPWhbdV0sZj0wO2Y8Xy5sZW5ndGg7ZisrKWJbcF0uaGFzT3duUHJvcGVydHkoZil8fChiW3BdW2ZdPXZvaWQgMCk7YS5jYWxsKCJfZ3VpUmVzdHlsZSIsdCxiLF8pfX19ZnVuY3Rpb24gRihlLHQscil7dmFyIG49Xy5pbmRleE9mKGUpLGE9Ylt0XTtyZXR1cm4gYXx8KGE9Ylt0XT1bXSksLTE9PT1fLmluZGV4T2YoZSkmJihfLnB1c2goZSksbj1fLmxlbmd0aC0xKSxhW25dPXIsbn1mdW5jdGlvbiBOKGUsdCl7dmFyIHI9ZS5fZnVsbElucHV0O2lmKGEuaGFzVHJhbnNmb3JtKHIsImdyb3VwYnkiKSl7dmFyIGk9d1tyLmluZGV4XTtpZighaSl7dmFyIG89YS5nZXRUcmFuc2Zvcm1JbmRpY2VzKHIsImdyb3VwYnkiKSxsPW9bby5sZW5ndGgtMV07aT1uLmtleWVkQ29udGFpbmVyKHIsInRyYW5zZm9ybXNbIitsKyJdLnN0eWxlcyIsInRhcmdldCIsInZhbHVlLnZpc2libGUiKSx3W3IuaW5kZXhdPWl9dmFyIHM9aS5nZXQoZS5fZ3JvdXApO3ZvaWQgMD09PXMmJihzPSEwKSwhMSE9PXMmJmkuc2V0KGUuX2dyb3VwLHQpLFRbci5pbmRleF09RihyLmluZGV4LCJ2aXNpYmxlIiwhMSE9PXIudmlzaWJsZSl9ZWxzZXt2YXIgYz0hMSE9PXIudmlzaWJsZSYmdDtGKHIuaW5kZXgsInZpc2libGUiLGMpfX19fSx7Ii4uLy4uL2xpYiI6MjAyLCIuLi8uLi9yZWdpc3RyeSI6MjkwfV0sMTMxOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IuaXNHcm91cGVkPWZ1bmN0aW9uKGUpe3JldHVybi0xIT09KGUudHJhY2VvcmRlcnx8IiIpLmluZGV4T2YoImdyb3VwZWQiKX0sci5pc1ZlcnRpY2FsPWZ1bmN0aW9uKGUpe3JldHVybiJoIiE9PWUub3JpZW50YXRpb259LHIuaXNSZXZlcnNlZD1mdW5jdGlvbihlKXtyZXR1cm4tMSE9PShlLnRyYWNlb3JkZXJ8fCIiKS5pbmRleE9mKCJyZXZlcnNlZCIpfX0se31dLDEzMjpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToibGVnZW5kIixsYXlvdXRBdHRyaWJ1dGVzOmUoIi4vYXR0cmlidXRlcyIpLHN1cHBseUxheW91dERlZmF1bHRzOmUoIi4vZGVmYXVsdHMiKSxkcmF3OmUoIi4vZHJhdyIpLHN0eWxlOmUoIi4vc3R5bGUiKX19LHsiLi9hdHRyaWJ1dGVzIjoxMjUsIi4vZGVmYXVsdHMiOjEyNywiLi9kcmF3IjoxMjgsIi4vc3R5bGUiOjEzM31dLDEzMzpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJkMyIpLGE9ZSgiLi4vLi4vcmVnaXN0cnkiKSxpPWUoIi4uLy4uL2xpYiIpLG89aS5zdHJUcmFuc2xhdGUsbD1lKCIuLi9kcmF3aW5nIikscz1lKCIuLi9jb2xvciIpLGM9ZSgiLi4vY29sb3JzY2FsZS9oZWxwZXJzIikuZXh0cmFjdE9wdHMsdT1lKCIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlcyIpLGY9ZSgiLi4vLi4vdHJhY2VzL3BpZS9zdHlsZV9vbmUiKSxkPWUoIi4uLy4uL3RyYWNlcy9waWUvaGVscGVycyIpLmNhc3RPcHRpb24scD1lKCIuL2NvbnN0YW50cyIpO2Z1bmN0aW9uIGgoZSx0KXtyZXR1cm4odD8icmFkaWFsIjoiaG9yaXpvbnRhbCIpKyhlPyIiOiJyZXZlcnNlZCIpfXQuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7dmFyIGc9dC5fZnVsbExheW91dDtyfHwocj1nLmxlZ2VuZCk7dmFyIHY9ImNvbnN0YW50Ij09PXIuaXRlbXNpemluZyxtPXIuaXRlbXdpZHRoLHk9KG0rMipwLml0ZW1HYXApLzIseD1vKHksMCksYj1mdW5jdGlvbihlLHQscixuKXt2YXIgYTtpZihlKzEpYT1lO2Vsc2V7aWYoISh0JiZ0LndpZHRoPjApKXJldHVybiAwO2E9dC53aWR0aH1yZXR1cm4gdj9uOk1hdGgubWluKGEscil9O2Z1bmN0aW9uIF8oZSx0LHIpe3ZhciBpPWVbMF0udHJhY2Usbz1pLm1hcmtlcnx8e30sbD1vLmxpbmV8fHt9LGM9cj9pLnZpc2libGUmJmkudHlwZT09PXI6YS50cmFjZUlzKGksImJhciIpLHU9bi5zZWxlY3QodCkuc2VsZWN0KCJnLmxlZ2VuZHBvaW50cyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmQiK3IpLmRhdGEoYz9bZV06W10pO3UuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJsZWdlbmQiK3IsITApLmF0dHIoImQiLCJNNiw2SC02Vi02SDZaIikuYXR0cigidHJhbnNmb3JtIix4KSx1LmV4aXQoKS5yZW1vdmUoKSx1LmVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLHI9ZVswXSxhPWIoci5tbHcsby5saW5lLDUsMik7dC5zdHlsZSgic3Ryb2tlLXdpZHRoIixhKyJweCIpLmNhbGwocy5maWxsLHIubWN8fG8uY29sb3IpLGEmJnMuc3Ryb2tlKHQsci5tbGN8fGwuY29sb3IpfSkpfWZ1bmN0aW9uIHcoZSx0LHIpe3ZhciBvPWVbMF0sbD1vLnRyYWNlLHM9cj9sLnZpc2libGUmJmwudHlwZT09PXI6YS50cmFjZUlzKGwsciksYz1uLnNlbGVjdCh0KS5zZWxlY3QoImcubGVnZW5kcG9pbnRzIikuc2VsZWN0QWxsKCJwYXRoLmxlZ2VuZCIrcikuZGF0YShzP1tlXTpbXSk7aWYoYy5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImxlZ2VuZCIrciwhMCkuYXR0cigiZCIsIk02LDZILTZWLTZINloiKS5hdHRyKCJ0cmFuc2Zvcm0iLHgpLGMuZXhpdCgpLnJlbW92ZSgpLGMuc2l6ZSgpKXt2YXIgdT0obC5tYXJrZXJ8fHt9KS5saW5lLHA9YihkKHUud2lkdGgsby5wdHMpLHUsNSwyKSxoPWkubWluRXh0ZW5kKGwse21hcmtlcjp7bGluZTp7d2lkdGg6cH19fSk7aC5tYXJrZXIubGluZS5jb2xvcj11LmNvbG9yO3ZhciBnPWkubWluRXh0ZW5kKG8se3RyYWNlOmh9KTtmKGMsZyxoKX19ZS5lYWNoKChmdW5jdGlvbihlKXt2YXIgdD1uLnNlbGVjdCh0aGlzKSxhPWkuZW5zdXJlU2luZ2xlKHQsImciLCJsYXllcnMiKTthLnN0eWxlKCJvcGFjaXR5IixlWzBdLnRyYWNlLm9wYWNpdHkpO3ZhciBsPXIudmFsaWduLHM9ZVswXS5saW5lSGVpZ2h0LGM9ZVswXS5oZWlnaHQ7aWYoIm1pZGRsZSIhPT1sJiZzJiZjKXt2YXIgdT17dG9wOjEsYm90dG9tOi0xfVtsXSooLjUqKHMtYyszKSk7YS5hdHRyKCJ0cmFuc2Zvcm0iLG8oMCx1KSl9ZWxzZSBhLmF0dHIoInRyYW5zZm9ybSIsbnVsbCk7YS5zZWxlY3RBbGwoImcubGVnZW5kZmlsbCIpLmRhdGEoW2VdKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxlZ2VuZGZpbGwiLCEwKSxhLnNlbGVjdEFsbCgiZy5sZWdlbmRsaW5lcyIpLmRhdGEoW2VdKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxlZ2VuZGxpbmVzIiwhMCk7dmFyIGY9YS5zZWxlY3RBbGwoImcubGVnZW5kc3ltYm9scyIpLmRhdGEoW2VdKTtmLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgibGVnZW5kc3ltYm9scyIsITApLGYuc2VsZWN0QWxsKCJnLmxlZ2VuZHBvaW50cyIpLmRhdGEoW2VdKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxlZ2VuZHBvaW50cyIsITApfSkpLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciByLGE9ZVswXS50cmFjZSxvPVtdO2lmKGEudmlzaWJsZSlzd2l0Y2goYS50eXBlKXtjYXNlImhpc3RvZ3JhbTJkIjpjYXNlImhlYXRtYXAiOm89W1siTS0xNSwtMlY0SDE1Vi0yWiJdXSxyPSEwO2JyZWFrO2Nhc2UiY2hvcm9wbGV0aCI6Y2FzZSJjaG9yb3BsZXRobWFwYm94IjpvPVtbIk0tNiwtNlY2SDZWLTZaIl1dLHI9ITA7YnJlYWs7Y2FzZSJkZW5zaXR5bWFwYm94IjpvPVtbIk0tNiwwIGE2LDYgMCAxLDAgMTIsMCBhIDYsNiAwIDEsMCAtMTIsMCJdXSxyPSJyYWRpYWwiO2JyZWFrO2Nhc2UiY29uZSI6bz1bWyJNLTYsMiBBMiwyIDAgMCwwIC02LDYgVjZMNiw0WiJdLFsiTS02LC02IEEyLDIgMCAwLDAgLTYsLTIgTDYsLTRaIl0sWyJNLTYsLTIgQTIsMiAwIDAsMCAtNiwyIEw2LDBaIl1dLHI9ITE7YnJlYWs7Y2FzZSJzdHJlYW10dWJlIjpvPVtbIk0tNiwyIEEyLDIgMCAwLDAgLTYsNiBINiBBMiwyIDAgMCwxIDYsMiBaIl0sWyJNLTYsLTYgQTIsMiAwIDAsMCAtNiwtMiBINiBBMiwyIDAgMCwxIDYsLTYgWiJdLFsiTS02LC0yIEEyLDIgMCAwLDAgLTYsMiBINiBBMiwyIDAgMCwxIDYsLTIgWiJdXSxyPSExO2JyZWFrO2Nhc2Uic3VyZmFjZSI6bz1bWyJNLTYsLTYgQTIsMyAwIDAsMCAtNiwwIEg2IEEyLDMgMCAwLDEgNiwtNiBaIl0sWyJNLTYsMSBBMiwzIDAgMCwxIC02LDYgSDYgQTIsMyAwIDAsMCA2LDAgWiJdXSxyPSEwO2JyZWFrO2Nhc2UibWVzaDNkIjpvPVtbIk0tNiw2SDBMLTYsLTZaIl0sWyJNNiw2SDBMNiwtNloiXSxbIk0tNiwtNkg2TDAsNloiXV0scj0hMTticmVhaztjYXNlInZvbHVtZSI6bz1bWyJNLTYsNkgwTC02LC02WiJdLFsiTTYsNkgwTDYsLTZaIl0sWyJNLTYsLTZINkwwLDZaIl1dLHI9ITA7YnJlYWs7Y2FzZSJpc29zdXJmYWNlIjpvPVtbIk0tNiw2SDBMLTYsLTZaIl0sWyJNNiw2SDBMNiwtNloiXSxbIk0tNiwtNiBBMTIsMjQgMCAwLDAgNiwtNiBMMCw2WiJdXSxyPSExfXZhciB1PW4uc2VsZWN0KHRoaXMpLnNlbGVjdCgiZy5sZWdlbmRwb2ludHMiKS5zZWxlY3RBbGwoInBhdGgubGVnZW5kM2RhbmRmcmllbmRzIikuZGF0YShvKTt1LmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgibGVnZW5kM2RhbmRmcmllbmRzIiwhMCkuYXR0cigidHJhbnNmb3JtIix4KS5zdHlsZSgic3Ryb2tlLW1pdGVybGltaXQiLDEpLHUuZXhpdCgpLnJlbW92ZSgpLHUuZWFjaCgoZnVuY3Rpb24oZSxvKXt2YXIgdSxmPW4uc2VsZWN0KHRoaXMpLGQ9YyhhKSxwPWQuY29sb3JzY2FsZSxnPWQucmV2ZXJzZXNjYWxlO2lmKHApe2lmKCFyKXt2YXIgdj1wLmxlbmd0aDt1PTA9PT1vP3BbZz92LTE6MF1bMV06MT09PW8/cFtnPzA6di0xXVsxXTpwW01hdGguZmxvb3IoKHYtMSkvMildWzFdfX1lbHNle3ZhciBtPWEudmVydGV4Y29sb3J8fGEuZmFjZWNvbG9yfHxhLmNvbG9yO3U9aS5pc0FycmF5T3JUeXBlZEFycmF5KG0pP21bb118fG1bMF06bX1mLmF0dHIoImQiLGVbMF0pLHU/Zi5jYWxsKHMuZmlsbCx1KTpmLmNhbGwoKGZ1bmN0aW9uKGUpe2lmKGUuc2l6ZSgpKXt2YXIgbj0ibGVnZW5kZmlsbC0iK2EudWlkO2wuZ3JhZGllbnQoZSx0LG4saChnLCJyYWRpYWwiPT09cikscCwiZmlsbCIpfX0pKX0pKX0pKS5lYWNoKChmdW5jdGlvbihlKXt2YXIgdD1lWzBdLnRyYWNlLHI9IndhdGVyZmFsbCI9PT10LnR5cGU7aWYoZVswXS5fZGlzdGluY3QmJnIpe3ZhciBhPWVbMF0udHJhY2VbZVswXS5kaXJdLm1hcmtlcjtyZXR1cm4gZVswXS5tYz1hLmNvbG9yLGVbMF0ubWx3PWEubGluZS53aWR0aCxlWzBdLm1sYz1hLmxpbmUuY29sb3IsXyhlLHRoaXMsIndhdGVyZmFsbCIpfXZhciBpPVtdO3QudmlzaWJsZSYmciYmKGk9ZVswXS5oYXNUb3RhbHM/W1siaW5jcmVhc2luZyIsIk0tNiwtNlY2SDBaIl0sWyJ0b3RhbHMiLCJNNiw2SDBMLTYsLTZILTBaIl0sWyJkZWNyZWFzaW5nIiwiTTYsNlYtNkgwWiJdXTpbWyJpbmNyZWFzaW5nIiwiTS02LC02VjZINloiXSxbImRlY3JlYXNpbmciLCJNNiw2Vi02SC02WiJdXSk7dmFyIG89bi5zZWxlY3QodGhpcykuc2VsZWN0KCJnLmxlZ2VuZHBvaW50cyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmR3YXRlcmZhbGwiKS5kYXRhKGkpO28uZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJsZWdlbmR3YXRlcmZhbGwiLCEwKS5hdHRyKCJ0cmFuc2Zvcm0iLHgpLnN0eWxlKCJzdHJva2UtbWl0ZXJsaW1pdCIsMSksby5leGl0KCkucmVtb3ZlKCksby5lYWNoKChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxhPXRbZVswXV0ubWFya2VyLGk9Yih2b2lkIDAsYS5saW5lLDUsMik7ci5hdHRyKCJkIixlWzFdKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixpKyJweCIpLmNhbGwocy5maWxsLGEuY29sb3IpLGkmJnIuY2FsbChzLnN0cm9rZSxhLmxpbmUuY29sb3IpfSkpfSkpLmVhY2goKGZ1bmN0aW9uKGUpe18oZSx0aGlzLCJmdW5uZWwiKX0pKS5lYWNoKChmdW5jdGlvbihlKXtfKGUsdGhpcyl9KSkuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9ZVswXS50cmFjZSxvPW4uc2VsZWN0KHRoaXMpLnNlbGVjdCgiZy5sZWdlbmRwb2ludHMiKS5zZWxlY3RBbGwoInBhdGgubGVnZW5kYm94IikuZGF0YShyLnZpc2libGUmJmEudHJhY2VJcyhyLCJib3gtdmlvbGluIik/W2VdOltdKTtvLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgibGVnZW5kYm94IiwhMCkuYXR0cigiZCIsIk02LDZILTZWLTZINloiKS5hdHRyKCJ0cmFuc2Zvcm0iLHgpLG8uZXhpdCgpLnJlbW92ZSgpLG8uZWFjaCgoZnVuY3Rpb24oKXt2YXIgZT1uLnNlbGVjdCh0aGlzKTtpZigiYWxsIiE9PXIuYm94cG9pbnRzJiYiYWxsIiE9PXIucG9pbnRzfHwwIT09cy5vcGFjaXR5KHIuZmlsbGNvbG9yKXx8MCE9PXMub3BhY2l0eSgoci5saW5lfHx7fSkuY29sb3IpKXt2YXIgYT1iKHZvaWQgMCxyLmxpbmUsNSwyKTtlLnN0eWxlKCJzdHJva2Utd2lkdGgiLGErInB4IikuY2FsbChzLmZpbGwsci5maWxsY29sb3IpLGEmJnMuc3Ryb2tlKGUsci5saW5lLmNvbG9yKX1lbHNle3ZhciBjPWkubWluRXh0ZW5kKHIse21hcmtlcjp7c2l6ZTp2PzEyOmkuY29uc3RyYWluKHIubWFya2VyLnNpemUsMiwxNiksc2l6ZXJlZjoxLHNpemVtaW46MSxzaXplbW9kZToiZGlhbWV0ZXIifX0pO28uY2FsbChsLnBvaW50U3R5bGUsYyx0KX19KSl9KSkuZWFjaCgoZnVuY3Rpb24oZSl7dyhlLHRoaXMsImZ1bm5lbGFyZWEiKX0pKS5lYWNoKChmdW5jdGlvbihlKXt3KGUsdGhpcywicGllIil9KSkuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHIsYSxvPWVbMF0scz1vLnRyYWNlLGY9cy52aXNpYmxlJiZzLmZpbGwmJiJub25lIiE9PXMuZmlsbCxkPXUuaGFzTGluZXMocykscD1zLmNvbnRvdXJzLGc9ITEsdj0hMSx5PWMocykseD15LmNvbG9yc2NhbGUsXz15LnJldmVyc2VzY2FsZTtpZihwKXt2YXIgdz1wLmNvbG9yaW5nOyJsaW5lcyI9PT13P2c9ITA6ZD0ibm9uZSI9PT13fHwiaGVhdG1hcCI9PT13fHxwLnNob3dsaW5lcywiY29uc3RyYWludCI9PT1wLnR5cGU/Zj0iPSIhPT1wLl9vcGVyYXRpb246ImZpbGwiIT09dyYmImhlYXRtYXAiIT09d3x8KHY9ITApfXZhciBUPXUuaGFzTWFya2VycyhzKXx8dS5oYXNUZXh0KHMpLGs9Znx8dixNPWR8fGcsQT1UfHwhaz8iTTUsMCI6TT8iTTUsLTIiOiJNNSwtMyIsTD1uLnNlbGVjdCh0aGlzKSxTPUwuc2VsZWN0KCIubGVnZW5kZmlsbCIpLnNlbGVjdEFsbCgicGF0aCIpLmRhdGEoZnx8dj9bZV06W10pO2lmKFMuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJqcy1maWxsIiwhMCksUy5leGl0KCkucmVtb3ZlKCksUy5hdHRyKCJkIixBKyJoIittKyJ2NmgtIittKyJ6IikuY2FsbChmP2wuZmlsbEdyb3VwU3R5bGU6ZnVuY3Rpb24oZSl7aWYoZS5zaXplKCkpe3ZhciByPSJsZWdlbmRmaWxsLSIrcy51aWQ7bC5ncmFkaWVudChlLHQscixoKF8pLHgsImZpbGwiKX19KSxkfHxnKXt2YXIgQz1iKHZvaWQgMCxzLmxpbmUsMTAsNSk7YT1pLm1pbkV4dGVuZChzLHtsaW5lOnt3aWR0aDpDfX0pLHI9W2kubWluRXh0ZW5kKG8se3RyYWNlOmF9KV19dmFyIE89TC5zZWxlY3QoIi5sZWdlbmRsaW5lcyIpLnNlbGVjdEFsbCgicGF0aCIpLmRhdGEoZHx8Zz9bcl06W10pO08uZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJqcy1saW5lIiwhMCksTy5leGl0KCkucmVtb3ZlKCksTy5hdHRyKCJkIixBKyhnPyJsIittKyIsMC4wMDAxIjoiaCIrbSkpLmNhbGwoZD9sLmxpbmVHcm91cFN0eWxlOmZ1bmN0aW9uKGUpe2lmKGUuc2l6ZSgpKXt2YXIgcj0ibGVnZW5kbGluZS0iK3MudWlkO2wubGluZUdyb3VwU3R5bGUoZSksbC5ncmFkaWVudChlLHQscixoKF8pLHgsInN0cm9rZSIpfX0pfSkpLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciByLGEsbz1lWzBdLHM9by50cmFjZSxjPXUuaGFzTWFya2VycyhzKSxmPXUuaGFzVGV4dChzKSxkPXUuaGFzTGluZXMocyk7ZnVuY3Rpb24gcChlLHQscixuKXt2YXIgYT1pLm5lc3RlZFByb3BlcnR5KHMsZSkuZ2V0KCksbz1pLmlzQXJyYXlPclR5cGVkQXJyYXkoYSkmJnQ/dChhKTphO2lmKHYmJm8mJnZvaWQgMCE9PW4mJihvPW4pLHIpe2lmKG88clswXSlyZXR1cm4gclswXTtpZihvPnJbMV0pcmV0dXJuIHJbMV19cmV0dXJuIG99ZnVuY3Rpb24gaChlKXtyZXR1cm4gby5fZGlzdGluY3QmJm8uaW5kZXgmJmVbby5pbmRleF0/ZVtvLmluZGV4XTplWzBdfWlmKGN8fGZ8fGQpe3ZhciBnPXt9LG09e307aWYoYyl7Zy5tYz1wKCJtYXJrZXIuY29sb3IiLGgpLGcubXg9cCgibWFya2VyLnN5bWJvbCIsaCksZy5tbz1wKCJtYXJrZXIub3BhY2l0eSIsaS5tZWFuLFsuMiwxXSksZy5tbGM9cCgibWFya2VyLmxpbmUuY29sb3IiLGgpLGcubWx3PXAoIm1hcmtlci5saW5lLndpZHRoIixpLm1lYW4sWzAsNV0sMiksbS5tYXJrZXI9e3NpemVyZWY6MSxzaXplbWluOjEsc2l6ZW1vZGU6ImRpYW1ldGVyIn07dmFyIHk9cCgibWFya2VyLnNpemUiLGkubWVhbixbMiwxNl0sMTIpO2cubXM9eSxtLm1hcmtlci5zaXplPXl9ZCYmKG0ubGluZT17d2lkdGg6cCgibGluZS53aWR0aCIsaCxbMCwxMF0sNSl9KSxmJiYoZy50eD0iQWEiLGcudHA9cCgidGV4dHBvc2l0aW9uIixoKSxnLnRzPTEwLGcudGM9cCgidGV4dGZvbnQuY29sb3IiLGgpLGcudGY9cCgidGV4dGZvbnQuZmFtaWx5IixoKSkscj1baS5taW5FeHRlbmQobyxnKV0sKGE9aS5taW5FeHRlbmQocyxtKSkuc2VsZWN0ZWRwb2ludHM9bnVsbCxhLnRleHR0ZW1wbGF0ZT1udWxsfXZhciBiPW4uc2VsZWN0KHRoaXMpLnNlbGVjdCgiZy5sZWdlbmRwb2ludHMiKSxfPWIuc2VsZWN0QWxsKCJwYXRoLnNjYXR0ZXJwdHMiKS5kYXRhKGM/cjpbXSk7Xy5lbnRlcigpLmluc2VydCgicGF0aCIsIjpmaXJzdC1jaGlsZCIpLmNsYXNzZWQoInNjYXR0ZXJwdHMiLCEwKS5hdHRyKCJ0cmFuc2Zvcm0iLHgpLF8uZXhpdCgpLnJlbW92ZSgpLF8uY2FsbChsLnBvaW50U3R5bGUsYSx0KSxjJiYoclswXS5tcmM9Myk7dmFyIHc9Yi5zZWxlY3RBbGwoImcucG9pbnR0ZXh0IikuZGF0YShmP3I6W10pO3cuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJwb2ludHRleHQiLCEwKS5hcHBlbmQoInRleHQiKS5hdHRyKCJ0cmFuc2Zvcm0iLHgpLHcuZXhpdCgpLnJlbW92ZSgpLHcuc2VsZWN0QWxsKCJ0ZXh0IikuY2FsbChsLnRleHRQb2ludFN0eWxlLGEsdCl9KSkuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXS50cmFjZSxyPW4uc2VsZWN0KHRoaXMpLnNlbGVjdCgiZy5sZWdlbmRwb2ludHMiKS5zZWxlY3RBbGwoInBhdGgubGVnZW5kY2FuZGxlIikuZGF0YSh0LnZpc2libGUmJiJjYW5kbGVzdGljayI9PT10LnR5cGU/W2UsZV06W10pO3IuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJsZWdlbmRjYW5kbGUiLCEwKS5hdHRyKCJkIiwoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD8iTS0xNSwwSC04TS04LDZWLTZIOFoiOiJNMTUsMEg4TTgsLTZWNkgtOFoifSkpLmF0dHIoInRyYW5zZm9ybSIseCkuc3R5bGUoInN0cm9rZS1taXRlcmxpbWl0IiwxKSxyLmV4aXQoKS5yZW1vdmUoKSxyLmVhY2goKGZ1bmN0aW9uKGUscil7dmFyIGE9bi5zZWxlY3QodGhpcyksaT10W3I/ImluY3JlYXNpbmciOiJkZWNyZWFzaW5nIl0sbz1iKHZvaWQgMCxpLmxpbmUsNSwyKTthLnN0eWxlKCJzdHJva2Utd2lkdGgiLG8rInB4IikuY2FsbChzLmZpbGwsaS5maWxsY29sb3IpLG8mJnMuc3Ryb2tlKGEsaS5saW5lLmNvbG9yKX0pKX0pKS5lYWNoKChmdW5jdGlvbihlKXt2YXIgdD1lWzBdLnRyYWNlLHI9bi5zZWxlY3QodGhpcykuc2VsZWN0KCJnLmxlZ2VuZHBvaW50cyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmRvaGxjIikuZGF0YSh0LnZpc2libGUmJiJvaGxjIj09PXQudHlwZT9bZSxlXTpbXSk7ci5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImxlZ2VuZG9obGMiLCEwKS5hdHRyKCJkIiwoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD8iTS0xNSwwSDBNLTgsLTZWMCI6Ik0xNSwwSDBNOCw2VjAifSkpLmF0dHIoInRyYW5zZm9ybSIseCkuc3R5bGUoInN0cm9rZS1taXRlcmxpbWl0IiwxKSxyLmV4aXQoKS5yZW1vdmUoKSxyLmVhY2goKGZ1bmN0aW9uKGUscil7dmFyIGE9bi5zZWxlY3QodGhpcyksaT10W3I/ImluY3JlYXNpbmciOiJkZWNyZWFzaW5nIl0sbz1iKHZvaWQgMCxpLmxpbmUsNSwyKTthLnN0eWxlKCJmaWxsIiwibm9uZSIpLmNhbGwobC5kYXNoTGluZSxpLmxpbmUuZGFzaCxvKSxvJiZzLnN0cm9rZShhLGkubGluZS5jb2xvcil9KSl9KSl9fSx7Ii4uLy4uL2xpYiI6MjAyLCIuLi8uLi9yZWdpc3RyeSI6MjkwLCIuLi8uLi90cmFjZXMvcGllL2hlbHBlcnMiOjMyMiwiLi4vLi4vdHJhY2VzL3BpZS9zdHlsZV9vbmUiOjMyOCwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXMiOjM1NSwiLi4vY29sb3IiOjc1LCIuLi9jb2xvcnNjYWxlL2hlbHBlcnMiOjg2LCIuLi9kcmF3aW5nIjo5NywiLi9jb25zdGFudHMiOjEyNixkMzo5fV0sMTM0OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL3JlZ2lzdHJ5IiksYT1lKCIuLi8uLi9wbG90cy9wbG90cyIpLGk9ZSgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIiksbz1lKCIuLi8uLi9mb250cy9wbG90aWNvbiIpLGw9ZSgiLi4vc2hhcGVzL2RyYXciKS5lcmFzZUFjdGl2ZVNoYXBlLHM9ZSgiLi4vLi4vbGliIiksYz1zLl8sdT10LmV4cG9ydHM9e307ZnVuY3Rpb24gZihlLHQpe3ZhciByLGEsbz10LmN1cnJlbnRUYXJnZXQsbD1vLmdldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIikscz1vLmdldEF0dHJpYnV0ZSgiZGF0YS12YWwiKXx8ITAsYz1lLl9mdWxsTGF5b3V0LHU9e30sZj1pLmxpc3QoZSxudWxsLCEwKSxkPWMuX2NhcnRlc2lhblNwaWtlc0VuYWJsZWQ7aWYoInpvb20iPT09bCl7dmFyIHAsaD0iaW4iPT09cz8uNToyLGc9KDEraCkvMix2PSgxLWgpLzI7Zm9yKGE9MDthPGYubGVuZ3RoO2ErKylpZighKHI9ZlthXSkuZml4ZWRyYW5nZSlpZihwPXIuX25hbWUsImF1dG8iPT09cyl1W3ArIi5hdXRvcmFuZ2UiXT0hMDtlbHNlIGlmKCJyZXNldCI9PT1zKXtpZih2b2lkIDA9PT1yLl9yYW5nZUluaXRpYWwpdVtwKyIuYXV0b3JhbmdlIl09ITA7ZWxzZXt2YXIgbT1yLl9yYW5nZUluaXRpYWwuc2xpY2UoKTt1W3ArIi5yYW5nZVswXSJdPW1bMF0sdVtwKyIucmFuZ2VbMV0iXT1tWzFdfXZvaWQgMCE9PXIuX3Nob3dTcGlrZUluaXRpYWwmJih1W3ArIi5zaG93c3Bpa2VzIl09ci5fc2hvd1NwaWtlSW5pdGlhbCwib24iIT09ZHx8ci5fc2hvd1NwaWtlSW5pdGlhbHx8KGQ9Im9mZiIpKX1lbHNle3ZhciB5PVtyLnIybChyLnJhbmdlWzBdKSxyLnIybChyLnJhbmdlWzFdKV0seD1bZyp5WzBdK3YqeVsxXSxnKnlbMV0rdip5WzBdXTt1W3ArIi5yYW5nZVswXSJdPXIubDJyKHhbMF0pLHVbcCsiLnJhbmdlWzFdIl09ci5sMnIoeFsxXSl9fWVsc2UiaG92ZXJtb2RlIiE9PWx8fCJ4IiE9PXMmJiJ5IiE9PXN8fChzPWMuX2lzSG9yaXo/InkiOiJ4IixvLnNldEF0dHJpYnV0ZSgiZGF0YS12YWwiLHMpKSx1W2xdPXM7Yy5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZD1kLG4uY2FsbCgiX2d1aVJlbGF5b3V0IixlLHUpfWZ1bmN0aW9uIGQoZSx0KXtmb3IodmFyIHI9dC5jdXJyZW50VGFyZ2V0LGE9ci5nZXRBdHRyaWJ1dGUoImRhdGEtYXR0ciIpLGk9ci5nZXRBdHRyaWJ1dGUoImRhdGEtdmFsIil8fCEwLG89ZS5fZnVsbExheW91dC5fc3VicGxvdHMuZ2wzZHx8W10sbD17fSxzPWEuc3BsaXQoIi4iKSxjPTA7YzxvLmxlbmd0aDtjKyspbFtvW2NdKyIuIitzWzFdXT1pO3ZhciB1PSJwYW4iPT09aT9pOiJ6b29tIjtsLmRyYWdtb2RlPXUsbi5jYWxsKCJfZ3VpUmVsYXlvdXQiLGUsbCl9ZnVuY3Rpb24gcChlLHQpe2Zvcih2YXIgcj10LmN1cnJlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKCJkYXRhLWF0dHIiKSxhPSJyZXNldExhc3RTYXZlIj09PXIsaT0icmVzZXREZWZhdWx0Ij09PXIsbz1lLl9mdWxsTGF5b3V0LGw9by5fc3VicGxvdHMuZ2wzZHx8W10scz17fSxjPTA7YzxsLmxlbmd0aDtjKyspe3ZhciB1LGY9bFtjXSxkPWYrIi5jYW1lcmEiLHA9ZisiLmFzcGVjdHJhdGlvIixoPWYrIi5hc3BlY3Rtb2RlIixnPW9bZl0uX3NjZW5lO2E/KHNbZCsiLnVwIl09Zy52aWV3SW5pdGlhbC51cCxzW2QrIi5leWUiXT1nLnZpZXdJbml0aWFsLmV5ZSxzW2QrIi5jZW50ZXIiXT1nLnZpZXdJbml0aWFsLmNlbnRlcix1PSEwKTppJiYoc1tkKyIudXAiXT1udWxsLHNbZCsiLmV5ZSJdPW51bGwsc1tkKyIuY2VudGVyIl09bnVsbCx1PSEwKSx1JiYoc1twKyIueCJdPWcudmlld0luaXRpYWwuYXNwZWN0cmF0aW8ueCxzW3ArIi55Il09Zy52aWV3SW5pdGlhbC5hc3BlY3RyYXRpby55LHNbcCsiLnoiXT1nLnZpZXdJbml0aWFsLmFzcGVjdHJhdGlvLnosc1toXT1nLnZpZXdJbml0aWFsLmFzcGVjdG1vZGUpfW4uY2FsbCgiX2d1aVJlbGF5b3V0IixlLHMpfWZ1bmN0aW9uIGgoZSx0KXt2YXIgcj10LmN1cnJlbnRUYXJnZXQsbj1yLl9wcmV2aW91c1ZhbCxhPWUuX2Z1bGxMYXlvdXQsaT1hLl9zdWJwbG90cy5nbDNkfHxbXSxvPVsieGF4aXMiLCJ5YXhpcyIsInpheGlzIl0sbD17fSxzPXt9O2lmKG4pcz1uLHIuX3ByZXZpb3VzVmFsPW51bGw7ZWxzZXtmb3IodmFyIGM9MDtjPGkubGVuZ3RoO2MrKyl7dmFyIHU9aVtjXSxmPWFbdV0sZD11KyIuaG92ZXJtb2RlIjtsW2RdPWYuaG92ZXJtb2RlLHNbZF09ITE7Zm9yKHZhciBwPTA7cDwzO3ArKyl7dmFyIGg9b1twXSxnPXUrIi4iK2grIi5zaG93c3Bpa2VzIjtzW2ddPSExLGxbZ109ZltoXS5zaG93c3Bpa2VzfX1yLl9wcmV2aW91c1ZhbD1sfXJldHVybiBzfWZ1bmN0aW9uIGcoZSx0KXtmb3IodmFyIHI9dC5jdXJyZW50VGFyZ2V0LGE9ci5nZXRBdHRyaWJ1dGUoImRhdGEtYXR0ciIpLGk9ci5nZXRBdHRyaWJ1dGUoImRhdGEtdmFsIil8fCEwLG89ZS5fZnVsbExheW91dCxsPW8uX3N1YnBsb3RzLmdlb3x8W10scz0wO3M8bC5sZW5ndGg7cysrKXt2YXIgYz1sW3NdLHU9b1tjXTtpZigiem9vbSI9PT1hKXt2YXIgZj11LnByb2plY3Rpb24uc2NhbGUsZD0iaW4iPT09aT8yKmY6LjUqZjtuLmNhbGwoIl9ndWlSZWxheW91dCIsZSxjKyIucHJvamVjdGlvbi5zY2FsZSIsZCl9fSJyZXNldCI9PT1hJiZ4KGUsImdlbyIpfWZ1bmN0aW9uIHYoZSl7dmFyIHQ9ZS5fZnVsbExheW91dDtyZXR1cm4hdC5ob3Zlcm1vZGUmJih0Ll9oYXMoImNhcnRlc2lhbiIpP3QuX2lzSG9yaXo/InkiOiJ4IjoiY2xvc2VzdCIpfWZ1bmN0aW9uIG0oZSl7dmFyIHQ9dihlKTtuLmNhbGwoIl9ndWlSZWxheW91dCIsZSwiaG92ZXJtb2RlIix0KX1mdW5jdGlvbiB5KGUsdCl7Zm9yKHZhciByPXQuY3VycmVudFRhcmdldC5nZXRBdHRyaWJ1dGUoImRhdGEtdmFsIiksYT1lLl9mdWxsTGF5b3V0LGk9YS5fc3VicGxvdHMubWFwYm94fHxbXSxvPXt9LGw9MDtsPGkubGVuZ3RoO2wrKyl7dmFyIHM9aVtsXSxjPWFbc10uem9vbSx1PSJpbiI9PT1yPzEuMDUqYzpjLzEuMDU7b1tzKyIuem9vbSJdPXV9bi5jYWxsKCJfZ3VpUmVsYXlvdXQiLGUsbyl9ZnVuY3Rpb24geChlLHQpe2Zvcih2YXIgcj1lLl9mdWxsTGF5b3V0LGE9ci5fc3VicGxvdHNbdF18fFtdLGk9e30sbz0wO288YS5sZW5ndGg7bysrKWZvcih2YXIgbD1hW29dLHM9cltsXS5fc3VicGxvdC52aWV3SW5pdGlhbCxjPU9iamVjdC5rZXlzKHMpLHU9MDt1PGMubGVuZ3RoO3UrKyl7dmFyIGY9Y1t1XTtpW2wrIi4iK2ZdPXNbZl19bi5jYWxsKCJfZ3VpUmVsYXlvdXQiLGUsaSl9dS50b0ltYWdlPXtuYW1lOiJ0b0ltYWdlIix0aXRsZTpmdW5jdGlvbihlKXt2YXIgdD0oZS5fY29udGV4dC50b0ltYWdlQnV0dG9uT3B0aW9uc3x8e30pLmZvcm1hdHx8InBuZyI7cmV0dXJuIGMoZSwicG5nIj09PXQ/IkRvd25sb2FkIHBsb3QgYXMgYSBwbmciOiJEb3dubG9hZCBwbG90Iil9LGljb246by5jYW1lcmEsY2xpY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fY29udGV4dC50b0ltYWdlQnV0dG9uT3B0aW9ucyxyPXtmb3JtYXQ6dC5mb3JtYXR8fCJwbmcifTtzLm5vdGlmaWVyKGMoZSwiVGFraW5nIHNuYXBzaG90IC0gdGhpcyBtYXkgdGFrZSBhIGZldyBzZWNvbmRzIiksImxvbmciKSwic3ZnIiE9PXIuZm9ybWF0JiZzLmlzSUUoKSYmKHMubm90aWZpZXIoYyhlLCJJRSBvbmx5IHN1cHBvcnRzIHN2Zy4gIENoYW5naW5nIGZvcm1hdCB0byBzdmcuIiksImxvbmciKSxyLmZvcm1hdD0ic3ZnIiksWyJmaWxlbmFtZSIsIndpZHRoIiwiaGVpZ2h0Iiwic2NhbGUiXS5mb3JFYWNoKChmdW5jdGlvbihlKXtlIGluIHQmJihyW2VdPXRbZV0pfSkpLG4uY2FsbCgiZG93bmxvYWRJbWFnZSIsZSxyKS50aGVuKChmdW5jdGlvbih0KXtzLm5vdGlmaWVyKGMoZSwiU25hcHNob3Qgc3VjY2VlZGVkIikrIiAtICIrdCwibG9uZyIpfSkpLmNhdGNoKChmdW5jdGlvbigpe3Mubm90aWZpZXIoYyhlLCJTb3JyeSwgdGhlcmUgd2FzIGEgcHJvYmxlbSBkb3dubG9hZGluZyB5b3VyIHNuYXBzaG90ISIpLCJsb25nIil9KSl9fSx1LnNlbmREYXRhVG9DbG91ZD17bmFtZToic2VuZERhdGFUb0Nsb3VkIix0aXRsZTpmdW5jdGlvbihlKXtyZXR1cm4gYyhlLCJFZGl0IGluIENoYXJ0IFN0dWRpbyIpfSxpY29uOm8uZGlzayxjbGljazpmdW5jdGlvbihlKXthLnNlbmREYXRhVG9DbG91ZChlKX19LHUuZWRpdEluQ2hhcnRTdHVkaW89e25hbWU6ImVkaXRJbkNoYXJ0U3R1ZGlvIix0aXRsZTpmdW5jdGlvbihlKXtyZXR1cm4gYyhlLCJFZGl0IGluIENoYXJ0IFN0dWRpbyIpfSxpY29uOm8ucGVuY2lsLGNsaWNrOmZ1bmN0aW9uKGUpe2Euc2VuZERhdGFUb0Nsb3VkKGUpfX0sdS56b29tMmQ9e25hbWU6Inpvb20yZCIsdGl0bGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSwiWm9vbSIpfSxhdHRyOiJkcmFnbW9kZSIsdmFsOiJ6b29tIixpY29uOm8uem9vbWJveCxjbGljazpmfSx1LnBhbjJkPXtuYW1lOiJwYW4yZCIsdGl0bGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSwiUGFuIil9LGF0dHI6ImRyYWdtb2RlIix2YWw6InBhbiIsaWNvbjpvLnBhbixjbGljazpmfSx1LnNlbGVjdDJkPXtuYW1lOiJzZWxlY3QyZCIsdGl0bGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSwiQm94IFNlbGVjdCIpfSxhdHRyOiJkcmFnbW9kZSIsdmFsOiJzZWxlY3QiLGljb246by5zZWxlY3Rib3gsY2xpY2s6Zn0sdS5sYXNzbzJkPXtuYW1lOiJsYXNzbzJkIix0aXRsZTpmdW5jdGlvbihlKXtyZXR1cm4gYyhlLCJMYXNzbyBTZWxlY3QiKX0sYXR0cjoiZHJhZ21vZGUiLHZhbDoibGFzc28iLGljb246by5sYXNzbyxjbGljazpmfSx1LmRyYXdjbG9zZWRwYXRoPXtuYW1lOiJkcmF3Y2xvc2VkcGF0aCIsdGl0bGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSwiRHJhdyBjbG9zZWQgZnJlZWZvcm0iKX0sYXR0cjoiZHJhZ21vZGUiLHZhbDoiZHJhd2Nsb3NlZHBhdGgiLGljb246by5kcmF3Y2xvc2VkcGF0aCxjbGljazpmfSx1LmRyYXdvcGVucGF0aD17bmFtZToiZHJhd29wZW5wYXRoIix0aXRsZTpmdW5jdGlvbihlKXtyZXR1cm4gYyhlLCJEcmF3IG9wZW4gZnJlZWZvcm0iKX0sYXR0cjoiZHJhZ21vZGUiLHZhbDoiZHJhd29wZW5wYXRoIixpY29uOm8uZHJhd29wZW5wYXRoLGNsaWNrOmZ9LHUuZHJhd2xpbmU9e25hbWU6ImRyYXdsaW5lIix0aXRsZTpmdW5jdGlvbihlKXtyZXR1cm4gYyhlLCJEcmF3IGxpbmUiKX0sYXR0cjoiZHJhZ21vZGUiLHZhbDoiZHJhd2xpbmUiLGljb246by5kcmF3bGluZSxjbGljazpmfSx1LmRyYXdyZWN0PXtuYW1lOiJkcmF3cmVjdCIsdGl0bGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSwiRHJhdyByZWN0YW5nbGUiKX0sYXR0cjoiZHJhZ21vZGUiLHZhbDoiZHJhd3JlY3QiLGljb246by5kcmF3cmVjdCxjbGljazpmfSx1LmRyYXdjaXJjbGU9e25hbWU6ImRyYXdjaXJjbGUiLHRpdGxlOmZ1bmN0aW9uKGUpe3JldHVybiBjKGUsIkRyYXcgY2lyY2xlIil9LGF0dHI6ImRyYWdtb2RlIix2YWw6ImRyYXdjaXJjbGUiLGljb246by5kcmF3Y2lyY2xlLGNsaWNrOmZ9LHUuZXJhc2VzaGFwZT17bmFtZToiZXJhc2VzaGFwZSIsdGl0bGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSwiRXJhc2UgYWN0aXZlIHNoYXBlIil9LGljb246by5lcmFzZXNoYXBlLGNsaWNrOmx9LHUuem9vbUluMmQ9e25hbWU6Inpvb21JbjJkIix0aXRsZTpmdW5jdGlvbihlKXtyZXR1cm4gYyhlLCJab29tIGluIil9LGF0dHI6Inpvb20iLHZhbDoiaW4iLGljb246by56b29tX3BsdXMsY2xpY2s6Zn0sdS56b29tT3V0MmQ9e25hbWU6Inpvb21PdXQyZCIsdGl0bGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSwiWm9vbSBvdXQiKX0sYXR0cjoiem9vbSIsdmFsOiJvdXQiLGljb246by56b29tX21pbnVzLGNsaWNrOmZ9LHUuYXV0b1NjYWxlMmQ9e25hbWU6ImF1dG9TY2FsZTJkIix0aXRsZTpmdW5jdGlvbihlKXtyZXR1cm4gYyhlLCJBdXRvc2NhbGUiKX0sYXR0cjoiem9vbSIsdmFsOiJhdXRvIixpY29uOm8uYXV0b3NjYWxlLGNsaWNrOmZ9LHUucmVzZXRTY2FsZTJkPXtuYW1lOiJyZXNldFNjYWxlMmQiLHRpdGxlOmZ1bmN0aW9uKGUpe3JldHVybiBjKGUsIlJlc2V0IGF4ZXMiKX0sYXR0cjoiem9vbSIsdmFsOiJyZXNldCIsaWNvbjpvLmhvbWUsY2xpY2s6Zn0sdS5ob3ZlckNsb3Nlc3RDYXJ0ZXNpYW49e25hbWU6ImhvdmVyQ2xvc2VzdENhcnRlc2lhbiIsdGl0bGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSwiU2hvdyBjbG9zZXN0IGRhdGEgb24gaG92ZXIiKX0sYXR0cjoiaG92ZXJtb2RlIix2YWw6ImNsb3Nlc3QiLGljb246by50b29sdGlwX2Jhc2ljLGdyYXZpdHk6Im5lIixjbGljazpmfSx1LmhvdmVyQ29tcGFyZUNhcnRlc2lhbj17bmFtZToiaG92ZXJDb21wYXJlQ2FydGVzaWFuIix0aXRsZTpmdW5jdGlvbihlKXtyZXR1cm4gYyhlLCJDb21wYXJlIGRhdGEgb24gaG92ZXIiKX0sYXR0cjoiaG92ZXJtb2RlIix2YWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX2Z1bGxMYXlvdXQuX2lzSG9yaXo/InkiOiJ4In0saWNvbjpvLnRvb2x0aXBfY29tcGFyZSxncmF2aXR5OiJuZSIsY2xpY2s6Zn0sdS56b29tM2Q9e25hbWU6Inpvb20zZCIsdGl0bGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSwiWm9vbSIpfSxhdHRyOiJzY2VuZS5kcmFnbW9kZSIsdmFsOiJ6b29tIixpY29uOm8uem9vbWJveCxjbGljazpkfSx1LnBhbjNkPXtuYW1lOiJwYW4zZCIsdGl0bGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSwiUGFuIil9LGF0dHI6InNjZW5lLmRyYWdtb2RlIix2YWw6InBhbiIsaWNvbjpvLnBhbixjbGljazpkfSx1Lm9yYml0Um90YXRpb249e25hbWU6Im9yYml0Um90YXRpb24iLHRpdGxlOmZ1bmN0aW9uKGUpe3JldHVybiBjKGUsIk9yYml0YWwgcm90YXRpb24iKX0sYXR0cjoic2NlbmUuZHJhZ21vZGUiLHZhbDoib3JiaXQiLGljb246b1siM2Rfcm90YXRlIl0sY2xpY2s6ZH0sdS50YWJsZVJvdGF0aW9uPXtuYW1lOiJ0YWJsZVJvdGF0aW9uIix0aXRsZTpmdW5jdGlvbihlKXtyZXR1cm4gYyhlLCJUdXJudGFibGUgcm90YXRpb24iKX0sYXR0cjoic2NlbmUuZHJhZ21vZGUiLHZhbDoidHVybnRhYmxlIixpY29uOm9bInotYXhpcyJdLGNsaWNrOmR9LHUucmVzZXRDYW1lcmFEZWZhdWx0M2Q9e25hbWU6InJlc2V0Q2FtZXJhRGVmYXVsdDNkIix0aXRsZTpmdW5jdGlvbihlKXtyZXR1cm4gYyhlLCJSZXNldCBjYW1lcmEgdG8gZGVmYXVsdCIpfSxhdHRyOiJyZXNldERlZmF1bHQiLGljb246by5ob21lLGNsaWNrOnB9LHUucmVzZXRDYW1lcmFMYXN0U2F2ZTNkPXtuYW1lOiJyZXNldENhbWVyYUxhc3RTYXZlM2QiLHRpdGxlOmZ1bmN0aW9uKGUpe3JldHVybiBjKGUsIlJlc2V0IGNhbWVyYSB0byBsYXN0IHNhdmUiKX0sYXR0cjoicmVzZXRMYXN0U2F2ZSIsaWNvbjpvLm1vdmllLGNsaWNrOnB9LHUuaG92ZXJDbG9zZXN0M2Q9e25hbWU6ImhvdmVyQ2xvc2VzdDNkIix0aXRsZTpmdW5jdGlvbihlKXtyZXR1cm4gYyhlLCJUb2dnbGUgc2hvdyBjbG9zZXN0IGRhdGEgb24gaG92ZXIiKX0sYXR0cjoiaG92ZXJtb2RlIix2YWw6bnVsbCx0b2dnbGU6ITAsaWNvbjpvLnRvb2x0aXBfYmFzaWMsZ3Jhdml0eToibmUiLGNsaWNrOmZ1bmN0aW9uKGUsdCl7dmFyIHI9aChlLHQpO24uY2FsbCgiX2d1aVJlbGF5b3V0IixlLHIpfX0sdS56b29tSW5HZW89e25hbWU6Inpvb21JbkdlbyIsdGl0bGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSwiWm9vbSBpbiIpfSxhdHRyOiJ6b29tIix2YWw6ImluIixpY29uOm8uem9vbV9wbHVzLGNsaWNrOmd9LHUuem9vbU91dEdlbz17bmFtZToiem9vbU91dEdlbyIsdGl0bGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSwiWm9vbSBvdXQiKX0sYXR0cjoiem9vbSIsdmFsOiJvdXQiLGljb246by56b29tX21pbnVzLGNsaWNrOmd9LHUucmVzZXRHZW89e25hbWU6InJlc2V0R2VvIix0aXRsZTpmdW5jdGlvbihlKXtyZXR1cm4gYyhlLCJSZXNldCIpfSxhdHRyOiJyZXNldCIsdmFsOm51bGwsaWNvbjpvLmF1dG9zY2FsZSxjbGljazpnfSx1LmhvdmVyQ2xvc2VzdEdlbz17bmFtZToiaG92ZXJDbG9zZXN0R2VvIix0aXRsZTpmdW5jdGlvbihlKXtyZXR1cm4gYyhlLCJUb2dnbGUgc2hvdyBjbG9zZXN0IGRhdGEgb24gaG92ZXIiKX0sYXR0cjoiaG92ZXJtb2RlIix2YWw6bnVsbCx0b2dnbGU6ITAsaWNvbjpvLnRvb2x0aXBfYmFzaWMsZ3Jhdml0eToibmUiLGNsaWNrOm19LHUuaG92ZXJDbG9zZXN0R2wyZD17bmFtZToiaG92ZXJDbG9zZXN0R2wyZCIsdGl0bGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSwiVG9nZ2xlIHNob3cgY2xvc2VzdCBkYXRhIG9uIGhvdmVyIil9LGF0dHI6ImhvdmVybW9kZSIsdmFsOm51bGwsdG9nZ2xlOiEwLGljb246by50b29sdGlwX2Jhc2ljLGdyYXZpdHk6Im5lIixjbGljazptfSx1LmhvdmVyQ2xvc2VzdFBpZT17bmFtZToiaG92ZXJDbG9zZXN0UGllIix0aXRsZTpmdW5jdGlvbihlKXtyZXR1cm4gYyhlLCJUb2dnbGUgc2hvdyBjbG9zZXN0IGRhdGEgb24gaG92ZXIiKX0sYXR0cjoiaG92ZXJtb2RlIix2YWw6ImNsb3Nlc3QiLGljb246by50b29sdGlwX2Jhc2ljLGdyYXZpdHk6Im5lIixjbGljazptfSx1LnJlc2V0Vmlld1NhbmtleT17bmFtZToicmVzZXRTYW5rZXlHcm91cCIsdGl0bGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSwiUmVzZXQgdmlldyIpfSxpY29uOm8uaG9tZSxjbGljazpmdW5jdGlvbihlKXtmb3IodmFyIHQ9eyJub2RlLmdyb3VwcyI6W10sIm5vZGUueCI6W10sIm5vZGUueSI6W119LHI9MDtyPGUuX2Z1bGxEYXRhLmxlbmd0aDtyKyspe3ZhciBhPWUuX2Z1bGxEYXRhW3JdLl92aWV3SW5pdGlhbDt0WyJub2RlLmdyb3VwcyJdLnB1c2goYS5ub2RlLmdyb3Vwcy5zbGljZSgpKSx0WyJub2RlLngiXS5wdXNoKGEubm9kZS54LnNsaWNlKCkpLHRbIm5vZGUueSJdLnB1c2goYS5ub2RlLnkuc2xpY2UoKSl9bi5jYWxsKCJyZXN0eWxlIixlLHQpfX0sdS50b2dnbGVIb3Zlcj17bmFtZToidG9nZ2xlSG92ZXIiLHRpdGxlOmZ1bmN0aW9uKGUpe3JldHVybiBjKGUsIlRvZ2dsZSBzaG93IGNsb3Nlc3QgZGF0YSBvbiBob3ZlciIpfSxhdHRyOiJob3Zlcm1vZGUiLHZhbDpudWxsLHRvZ2dsZTohMCxpY29uOm8udG9vbHRpcF9iYXNpYyxncmF2aXR5OiJuZSIsY2xpY2s6ZnVuY3Rpb24oZSx0KXt2YXIgcj1oKGUsdCk7ci5ob3Zlcm1vZGU9dihlKSxuLmNhbGwoIl9ndWlSZWxheW91dCIsZSxyKX19LHUucmVzZXRWaWV3cz17bmFtZToicmVzZXRWaWV3cyIsdGl0bGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSwiUmVzZXQgdmlld3MiKX0saWNvbjpvLmhvbWUsY2xpY2s6ZnVuY3Rpb24oZSx0KXt2YXIgcj10LmN1cnJlbnRUYXJnZXQ7ci5zZXRBdHRyaWJ1dGUoImRhdGEtYXR0ciIsInpvb20iKSxyLnNldEF0dHJpYnV0ZSgiZGF0YS12YWwiLCJyZXNldCIpLGYoZSx0KSxyLnNldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIiwicmVzZXRMYXN0U2F2ZSIpLHAoZSx0KSx4KGUsImdlbyIpLHgoZSwibWFwYm94Iil9fSx1LnRvZ2dsZVNwaWtlbGluZXM9e25hbWU6InRvZ2dsZVNwaWtlbGluZXMiLHRpdGxlOmZ1bmN0aW9uKGUpe3JldHVybiBjKGUsIlRvZ2dsZSBTcGlrZSBMaW5lcyIpfSxpY29uOm8uc3Bpa2VsaW5lLGF0dHI6Il9jYXJ0ZXNpYW5TcGlrZXNFbmFibGVkIix2YWw6Im9uIixjbGljazpmdW5jdGlvbihlKXt2YXIgdD1lLl9mdWxsTGF5b3V0LHI9dC5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZDt0Ll9jYXJ0ZXNpYW5TcGlrZXNFbmFibGVkPSJvbiI9PT1yPyJvZmYiOiJvbiIsbi5jYWxsKCJfZ3VpUmVsYXlvdXQiLGUsZnVuY3Rpb24oZSl7Zm9yKHZhciB0PSJvbiI9PT1lLl9mdWxsTGF5b3V0Ll9jYXJ0ZXNpYW5TcGlrZXNFbmFibGVkLHI9aS5saXN0KGUsbnVsbCwhMCksbj17fSxhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBvPXJbYV07bltvLl9uYW1lKyIuc2hvd3NwaWtlcyJdPSEhdHx8by5fc2hvd1NwaWtlSW5pdGlhbH1yZXR1cm4gbn0oZSkpfX0sdS5yZXNldFZpZXdNYXBib3g9e25hbWU6InJlc2V0Vmlld01hcGJveCIsdGl0bGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSwiUmVzZXQgdmlldyIpfSxhdHRyOiJyZXNldCIsaWNvbjpvLmhvbWUsY2xpY2s6ZnVuY3Rpb24oZSl7eChlLCJtYXBib3giKX19LHUuem9vbUluTWFwYm94PXtuYW1lOiJ6b29tSW5NYXBib3giLHRpdGxlOmZ1bmN0aW9uKGUpe3JldHVybiBjKGUsIlpvb20gaW4iKX0sYXR0cjoiem9vbSIsdmFsOiJpbiIsaWNvbjpvLnpvb21fcGx1cyxjbGljazp5fSx1Lnpvb21PdXRNYXBib3g9e25hbWU6Inpvb21PdXRNYXBib3giLHRpdGxlOmZ1bmN0aW9uKGUpe3JldHVybiBjKGUsIlpvb20gb3V0Iil9LGF0dHI6Inpvb20iLHZhbDoib3V0IixpY29uOm8uem9vbV9taW51cyxjbGljazp5fX0seyIuLi8uLi9mb250cy9wbG90aWNvbiI6MTg1LCIuLi8uLi9saWIiOjIwMiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjoyNTEsIi4uLy4uL3Bsb3RzL3Bsb3RzIjoyODIsIi4uLy4uL3JlZ2lzdHJ5IjoyOTAsIi4uL3NoYXBlcy9kcmF3IjoxNTZ9XSwxMzU6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ci5tYW5hZ2U9ZSgiLi9tYW5hZ2UiKX0seyIuL21hbmFnZSI6MTM2fV0sMTM2OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyIpLGE9ZSgiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXMiKSxpPWUoIi4uLy4uL3JlZ2lzdHJ5Iiksbz1lKCIuLi9meC9oZWxwZXJzIikuaXNVbmlmaWVkSG92ZXIsbD1lKCIuL21vZGViYXIiKSxzPWUoIi4vYnV0dG9ucyIpO3QuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1lLl9mdWxsTGF5b3V0LHI9ZS5fY29udGV4dCx1PXQuX21vZGVCYXI7aWYoci5kaXNwbGF5TW9kZUJhcnx8ci53YXRlcm1hcmspe2lmKCFBcnJheS5pc0FycmF5KHIubW9kZUJhckJ1dHRvbnNUb1JlbW92ZSkpdGhyb3cgbmV3IEVycm9yKFsiKm1vZGVCYXJCdXR0b25zVG9SZW1vdmUqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyIsIm11c3QgYmUgYW4gYXJyYXkuIl0uam9pbigiICIpKTtpZighQXJyYXkuaXNBcnJheShyLm1vZGVCYXJCdXR0b25zVG9BZGQpKXRocm93IG5ldyBFcnJvcihbIiptb2RlQmFyQnV0dG9uc1RvQWRkKiBjb25maWd1cmF0aW9uIG9wdGlvbnMiLCJtdXN0IGJlIGFuIGFycmF5LiJdLmpvaW4oIiAiKSk7dmFyIGYsZD1yLm1vZGVCYXJCdXR0b25zO2Y9QXJyYXkuaXNBcnJheShkKSYmZC5sZW5ndGg/ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspZm9yKHZhciByPWVbdF0sbj0wO248ci5sZW5ndGg7bisrKXt2YXIgYT1yW25dO2lmKCJzdHJpbmciPT10eXBlb2YgYSl7aWYodm9pZCAwPT09c1thXSl0aHJvdyBuZXcgRXJyb3IoWyIqbW9kZUJhckJ1dHRvbnMqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyIsImludmFsaWQgYnV0dG9uIG5hbWUiXS5qb2luKCIgIikpO2VbdF1bbl09c1thXX19cmV0dXJuIGV9KGQpOiFyLmRpc3BsYXlNb2RlQmFyJiZyLndhdGVybWFyaz9bXTpmdW5jdGlvbihlKXt2YXIgdD1lLl9mdWxsTGF5b3V0LHI9ZS5fZnVsbERhdGEsbD1lLl9jb250ZXh0LHU9bC5tb2RlQmFyQnV0dG9uc1RvUmVtb3ZlLGY9bC5tb2RlQmFyQnV0dG9uc1RvQWRkLGQ9dC5faGFzKCJjYXJ0ZXNpYW4iKSxwPXQuX2hhcygiZ2wzZCIpLGg9dC5faGFzKCJnZW8iKSxnPXQuX2hhcygicGllIiksdj10Ll9oYXMoImZ1bm5lbGFyZWEiKSxtPXQuX2hhcygiZ2wyZCIpLHk9dC5faGFzKCJ0ZXJuYXJ5IikseD10Ll9oYXMoIm1hcGJveCIpLGI9dC5faGFzKCJwb2xhciIpLF89dC5faGFzKCJzYW5rZXkiKSx3PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1uLmxpc3Qoe19mdWxsTGF5b3V0OmV9LG51bGwsITApLHI9MDtyPHQubGVuZ3RoO3IrKylpZighdFtyXS5maXhlZHJhbmdlKXJldHVybiExO3JldHVybiEwfSh0KSxUPW8odC5ob3Zlcm1vZGUpLGs9W107ZnVuY3Rpb24gTShlKXtpZihlLmxlbmd0aCl7Zm9yKHZhciB0PVtdLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTstMT09PXUuaW5kZXhPZihuKSYmdC5wdXNoKHNbbl0pfWsucHVzaCh0KX19dmFyIEE9WyJ0b0ltYWdlIl07bC5zaG93RWRpdEluQ2hhcnRTdHVkaW8/QS5wdXNoKCJlZGl0SW5DaGFydFN0dWRpbyIpOmwuc2hvd1NlbmRUb0Nsb3VkJiZBLnB1c2goInNlbmREYXRhVG9DbG91ZCIpO00oQSk7dmFyIEw9W10sUz1bXSxDPVtdLE89W107KGR8fG18fGd8fHZ8fHkpK2grcCt4K2I+MT8oUz1bInRvZ2dsZUhvdmVyIl0sQz1bInJlc2V0Vmlld3MiXSk6aD8oTD1bInpvb21JbkdlbyIsInpvb21PdXRHZW8iXSxTPVsiaG92ZXJDbG9zZXN0R2VvIl0sQz1bInJlc2V0R2VvIl0pOnA/KFM9WyJob3ZlckNsb3Nlc3QzZCJdLEM9WyJyZXNldENhbWVyYURlZmF1bHQzZCIsInJlc2V0Q2FtZXJhTGFzdFNhdmUzZCJdKTp4PyhMPVsiem9vbUluTWFwYm94Iiwiem9vbU91dE1hcGJveCJdLFM9WyJ0b2dnbGVIb3ZlciJdLEM9WyJyZXNldFZpZXdNYXBib3giXSk6bT9TPVsiaG92ZXJDbG9zZXN0R2wyZCJdOmc/Uz1bImhvdmVyQ2xvc2VzdFBpZSJdOl8/KFM9WyJob3ZlckNsb3Nlc3RDYXJ0ZXNpYW4iLCJob3ZlckNvbXBhcmVDYXJ0ZXNpYW4iXSxDPVsicmVzZXRWaWV3U2Fua2V5Il0pOlM9WyJ0b2dnbGVIb3ZlciJdO2QmJihTPVsidG9nZ2xlU3Bpa2VsaW5lcyIsImhvdmVyQ2xvc2VzdENhcnRlc2lhbiIsImhvdmVyQ29tcGFyZUNhcnRlc2lhbiJdKTsoZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspaWYoIWkudHJhY2VJcyhlW3RdLCJub0hvdmVyIikpcmV0dXJuITE7cmV0dXJuITB9KHIpfHxUKSYmKFM9W10pOyFkJiYhbXx8d3x8KEw9WyJ6b29tSW4yZCIsInpvb21PdXQyZCIsImF1dG9TY2FsZTJkIl0sInJlc2V0Vmlld3MiIT09Q1swXSYmKEM9WyJyZXNldFNjYWxlMmQiXSkpO3A/Tz1bInpvb20zZCIsInBhbjNkIiwib3JiaXRSb3RhdGlvbiIsInRhYmxlUm90YXRpb24iXTooZHx8bSkmJiF3fHx5P089WyJ6b29tMmQiLCJwYW4yZCJdOnh8fGg/Tz1bInBhbjJkIl06YiYmKE89WyJ6b29tMmQiXSk7KGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0hMSxyPTA7cjxlLmxlbmd0aCYmIXQ7cisrKXt2YXIgbj1lW3JdO24uX21vZHVsZSYmbi5fbW9kdWxlLnNlbGVjdFBvaW50cyYmKGkudHJhY2VJcyhuLCJzY2F0dGVyLWxpa2UiKT8oYS5oYXNNYXJrZXJzKG4pfHxhLmhhc1RleHQobikpJiYodD0hMCk6aS50cmFjZUlzKG4sImJveC12aW9saW4iKSYmImFsbCIhPT1uLmJveHBvaW50cyYmImFsbCIhPT1uLnBvaW50c3x8KHQ9ITApKX1yZXR1cm4gdH0pKHIpJiZPLnB1c2goInNlbGVjdDJkIiwibGFzc28yZCIpO2lmKEFycmF5LmlzQXJyYXkoZikpe2Zvcih2YXIgRD1bXSxQPTA7UDxmLmxlbmd0aDtQKyspe3ZhciB6PWZbUF07InN0cmluZyI9PXR5cGVvZiB6Py0xIT09Yy5pbmRleE9mKHopJiYodC5faGFzKCJtYXBib3giKXx8dC5faGFzKCJjYXJ0ZXNpYW4iKSkmJk8ucHVzaCh6KTpELnB1c2goeil9Zj1EfXJldHVybiBNKE8pLE0oTC5jb25jYXQoQykpLE0oUyksZnVuY3Rpb24oZSx0KXtpZih0Lmxlbmd0aClpZihBcnJheS5pc0FycmF5KHRbMF0pKWZvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUucHVzaCh0W3JdKTtlbHNlIGUucHVzaCh0KTtyZXR1cm4gZX0oayxmKX0oZSksdT91LnVwZGF0ZShlLGYpOnQuX21vZGVCYXI9bChlLGYpfWVsc2UgdSYmKHUuZGVzdHJveSgpLGRlbGV0ZSB0Ll9tb2RlQmFyKX07dmFyIGM9WyJkcmF3bGluZSIsImRyYXdvcGVucGF0aCIsImRyYXdjbG9zZWRwYXRoIiwiZHJhd2NpcmNsZSIsImRyYXdyZWN0IiwiZXJhc2VzaGFwZSJdfSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6MjUxLCIuLi8uLi9yZWdpc3RyeSI6MjkwLCIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlcyI6MzU1LCIuLi9meC9oZWxwZXJzIjoxMTEsIi4vYnV0dG9ucyI6MTM0LCIuL21vZGViYXIiOjEzN31dLDEzNzpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJkMyIpLGE9ZSgiZmFzdC1pc251bWVyaWMiKSxpPWUoIi4uLy4uL2xpYiIpLG89ZSgiLi4vLi4vZm9udHMvcGxvdGljb24iKSxsPW5ldyBET01QYXJzZXI7ZnVuY3Rpb24gcyhlKXt0aGlzLmNvbnRhaW5lcj1lLmNvbnRhaW5lcix0aGlzLmVsZW1lbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy51cGRhdGUoZS5ncmFwaEluZm8sZS5idXR0b25zKSx0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpfXZhciBjPXMucHJvdG90eXBlO2MudXBkYXRlPWZ1bmN0aW9uKGUsdCl7dGhpcy5ncmFwaEluZm89ZTt2YXIgcj10aGlzLmdyYXBoSW5mby5fY29udGV4dCxuPXRoaXMuZ3JhcGhJbmZvLl9mdWxsTGF5b3V0LGE9Im1vZGViYXItIituLl91aWQ7dGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSgiaWQiLGEpLHRoaXMuX3VpZD1hLHRoaXMuZWxlbWVudC5jbGFzc05hbWU9Im1vZGViYXIiLCJob3ZlciI9PT1yLmRpc3BsYXlNb2RlQmFyJiYodGhpcy5lbGVtZW50LmNsYXNzTmFtZSs9IiBtb2RlYmFyLS1ob3ZlciBlYXNlLWJnIiksInYiPT09bi5tb2RlYmFyLm9yaWVudGF0aW9uJiYodGhpcy5lbGVtZW50LmNsYXNzTmFtZSs9IiB2ZXJ0aWNhbCIsdD10LnJldmVyc2UoKSk7dmFyIG89bi5tb2RlYmFyLGw9ImhvdmVyIj09PXIuZGlzcGxheU1vZGVCYXI/Ii5qcy1wbG90bHktcGxvdCAucGxvdGx5OmhvdmVyICI6IiI7aS5kZWxldGVSZWxhdGVkU3R5bGVSdWxlKGEpLGkuYWRkUmVsYXRlZFN0eWxlUnVsZShhLGwrIiMiK2ErIiAubW9kZWJhci1ncm91cCIsImJhY2tncm91bmQtY29sb3I6ICIrby5iZ2NvbG9yKSxpLmFkZFJlbGF0ZWRTdHlsZVJ1bGUoYSwiIyIrYSsiIC5tb2RlYmFyLWJ0biAuaWNvbiBwYXRoIiwiZmlsbDogIitvLmNvbG9yKSxpLmFkZFJlbGF0ZWRTdHlsZVJ1bGUoYSwiIyIrYSsiIC5tb2RlYmFyLWJ0bjpob3ZlciAuaWNvbiBwYXRoIiwiZmlsbDogIitvLmFjdGl2ZWNvbG9yKSxpLmFkZFJlbGF0ZWRTdHlsZVJ1bGUoYSwiIyIrYSsiIC5tb2RlYmFyLWJ0bi5hY3RpdmUgLmljb24gcGF0aCIsImZpbGw6ICIrby5hY3RpdmVjb2xvcik7dmFyIHM9IXRoaXMuaGFzQnV0dG9ucyh0KSxjPXRoaXMuaGFzTG9nbyE9PXIuZGlzcGxheWxvZ28sdT10aGlzLmxvY2FsZSE9PXIubG9jYWxlO2lmKHRoaXMubG9jYWxlPXIubG9jYWxlLChzfHxjfHx1KSYmKHRoaXMucmVtb3ZlQWxsQnV0dG9ucygpLHRoaXMudXBkYXRlQnV0dG9ucyh0KSxyLndhdGVybWFya3x8ci5kaXNwbGF5bG9nbykpe3ZhciBmPXRoaXMuZ2V0TG9nbygpO3Iud2F0ZXJtYXJrJiYoZi5jbGFzc05hbWU9Zi5jbGFzc05hbWUrIiB3YXRlcm1hcmsiKSwidiI9PT1uLm1vZGViYXIub3JpZW50YXRpb24/dGhpcy5lbGVtZW50Lmluc2VydEJlZm9yZShmLHRoaXMuZWxlbWVudC5jaGlsZE5vZGVzWzBdKTp0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoZiksdGhpcy5oYXNMb2dvPSEwfXRoaXMudXBkYXRlQWN0aXZlQnV0dG9uKCl9LGMudXBkYXRlQnV0dG9ucz1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3RoaXMuYnV0dG9ucz1lLHRoaXMuYnV0dG9uRWxlbWVudHM9W10sdGhpcy5idXR0b25zTmFtZXM9W10sdGhpcy5idXR0b25zLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPXQuY3JlYXRlR3JvdXAoKTtlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuPWUubmFtZTtpZighbil0aHJvdyBuZXcgRXJyb3IoIm11c3QgcHJvdmlkZSBidXR0b24gJ25hbWUnIGluIGJ1dHRvbiBjb25maWciKTtpZigtMSE9PXQuYnV0dG9uc05hbWVzLmluZGV4T2YobikpdGhyb3cgbmV3IEVycm9yKCJidXR0b24gbmFtZSAnIituKyInIGlzIHRha2VuIik7dC5idXR0b25zTmFtZXMucHVzaChuKTt2YXIgYT10LmNyZWF0ZUJ1dHRvbihlKTt0LmJ1dHRvbkVsZW1lbnRzLnB1c2goYSksci5hcHBlbmRDaGlsZChhKX0pKSx0LmVsZW1lbnQuYXBwZW5kQ2hpbGQocil9KSl9LGMuY3JlYXRlR3JvdXA9ZnVuY3Rpb24oKXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gZS5jbGFzc05hbWU9Im1vZGViYXItZ3JvdXAiLGV9LGMuY3JlYXRlQnV0dG9uPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7ci5zZXRBdHRyaWJ1dGUoInJlbCIsInRvb2x0aXAiKSxyLmNsYXNzTmFtZT0ibW9kZWJhci1idG4iO3ZhciBhPWUudGl0bGU7dm9pZCAwPT09YT9hPWUubmFtZToiZnVuY3Rpb24iPT10eXBlb2YgYSYmKGE9YSh0aGlzLmdyYXBoSW5mbykpLChhfHwwPT09YSkmJnIuc2V0QXR0cmlidXRlKCJkYXRhLXRpdGxlIixhKSx2b2lkIDAhPT1lLmF0dHImJnIuc2V0QXR0cmlidXRlKCJkYXRhLWF0dHIiLGUuYXR0cik7dmFyIGk9ZS52YWw7aWYodm9pZCAwIT09aSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoaT1pKHRoaXMuZ3JhcGhJbmZvKSksci5zZXRBdHRyaWJ1dGUoImRhdGEtdmFsIixpKSksImZ1bmN0aW9uIiE9dHlwZW9mIGUuY2xpY2spdGhyb3cgbmV3IEVycm9yKCJtdXN0IHByb3ZpZGUgYnV0dG9uICdjbGljaycgZnVuY3Rpb24gaW4gYnV0dG9uIGNvbmZpZyIpO3IuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLChmdW5jdGlvbihyKXtlLmNsaWNrKHQuZ3JhcGhJbmZvLHIpLHQudXBkYXRlQWN0aXZlQnV0dG9uKHIuY3VycmVudFRhcmdldCl9KSksci5zZXRBdHRyaWJ1dGUoImRhdGEtdG9nZ2xlIixlLnRvZ2dsZXx8ITEpLGUudG9nZ2xlJiZuLnNlbGVjdChyKS5jbGFzc2VkKCJhY3RpdmUiLCEwKTt2YXIgbD1lLmljb247cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGw/ci5hcHBlbmRDaGlsZChsKCkpOnIuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVJY29uKGx8fG8ucXVlc3Rpb24pKSxyLnNldEF0dHJpYnV0ZSgiZGF0YS1ncmF2aXR5IixlLmdyYXZpdHl8fCJuIikscn0sYy5jcmVhdGVJY29uPWZ1bmN0aW9uKGUpe3ZhciB0LHI9YShlLmhlaWdodCk/TnVtYmVyKGUuaGVpZ2h0KTplLmFzY2VudC1lLmRlc2NlbnQsbj0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciO2lmKGUucGF0aCl7KHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG4sInN2ZyIpKS5zZXRBdHRyaWJ1dGUoInZpZXdCb3giLFswLDAsZS53aWR0aCxyXS5qb2luKCIgIikpLHQuc2V0QXR0cmlidXRlKCJjbGFzcyIsImljb24iKTt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobiwicGF0aCIpO2kuc2V0QXR0cmlidXRlKCJkIixlLnBhdGgpLGUudHJhbnNmb3JtP2kuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLGUudHJhbnNmb3JtKTp2b2lkIDAhPT1lLmFzY2VudCYmaS5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsIm1hdHJpeCgxIDAgMCAtMSAwICIrZS5hc2NlbnQrIikiKSx0LmFwcGVuZENoaWxkKGkpfWUuc3ZnJiYodD1sLnBhcnNlRnJvbVN0cmluZyhlLnN2ZywiYXBwbGljYXRpb24veG1sIikuY2hpbGROb2Rlc1swXSk7cmV0dXJuIHQuc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIxZW0iKSx0LnNldEF0dHJpYnV0ZSgid2lkdGgiLCIxZW0iKSx0fSxjLnVwZGF0ZUFjdGl2ZUJ1dHRvbj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdyYXBoSW5mby5fZnVsbExheW91dCxyPXZvaWQgMCE9PWU/ZS5nZXRBdHRyaWJ1dGUoImRhdGEtYXR0ciIpOm51bGw7dGhpcy5idXR0b25FbGVtZW50cy5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgYT1lLmdldEF0dHJpYnV0ZSgiZGF0YS12YWwiKXx8ITAsbz1lLmdldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIiksbD0idHJ1ZSI9PT1lLmdldEF0dHJpYnV0ZSgiZGF0YS10b2dnbGUiKSxzPW4uc2VsZWN0KGUpO2lmKGwpbz09PXImJnMuY2xhc3NlZCgiYWN0aXZlIiwhcy5jbGFzc2VkKCJhY3RpdmUiKSk7ZWxzZXt2YXIgYz1udWxsPT09bz9vOmkubmVzdGVkUHJvcGVydHkodCxvKS5nZXQoKTtzLmNsYXNzZWQoImFjdGl2ZSIsYz09PWEpfX0pKX0sYy5oYXNCdXR0b25zPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYnV0dG9ucztpZighdClyZXR1cm4hMTtpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7KytyKXtpZihlW3JdLmxlbmd0aCE9PXRbcl0ubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbj0wO248ZVtyXS5sZW5ndGg7bisrKWlmKGVbcl1bbl0ubmFtZSE9PXRbcl1bbl0ubmFtZSlyZXR1cm4hMX1yZXR1cm4hMH0sYy5nZXRMb2dvPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVHcm91cCgpLHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO3JldHVybiB0LmhyZWY9Imh0dHBzOi8vcGxvdGx5LmNvbS8iLHQudGFyZ2V0PSJfYmxhbmsiLHQuc2V0QXR0cmlidXRlKCJkYXRhLXRpdGxlIixpLl8odGhpcy5ncmFwaEluZm8sIlByb2R1Y2VkIHdpdGggUGxvdGx5IikpLHQuY2xhc3NOYW1lPSJtb2RlYmFyLWJ0biBwbG90bHlqc2ljb24gbW9kZWJhci1idG4tLWxvZ28iLHQuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVJY29uKG8ubmV3cGxvdGx5bG9nbykpLGUuYXBwZW5kQ2hpbGQodCksZX0sYy5yZW1vdmVBbGxCdXR0b25zPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmVsZW1lbnQuZmlyc3RDaGlsZDspdGhpcy5lbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuZWxlbWVudC5maXJzdENoaWxkKTt0aGlzLmhhc0xvZ289ITF9LGMuZGVzdHJveT1mdW5jdGlvbigpe2kucmVtb3ZlRWxlbWVudCh0aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIubW9kZWJhciIpKSxpLmRlbGV0ZVJlbGF0ZWRTdHlsZVJ1bGUodGhpcy5fdWlkKX0sdC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5fZnVsbExheW91dCxhPW5ldyBzKHtncmFwaEluZm86ZSxjb250YWluZXI6ci5fbW9kZWJhcmRpdi5ub2RlKCksYnV0dG9uczp0fSk7cmV0dXJuIHIuX3ByaXZhdGVwbG90JiZuLnNlbGVjdChhLmVsZW1lbnQpLmFwcGVuZCgic3BhbiIpLmNsYXNzZWQoImJhZGdlLXByaXZhdGUgZmxvYXQtLWxlZnQiLCEwKS50ZXh0KCJQUklWQVRFIiksYX19LHsiLi4vLi4vZm9udHMvcGxvdGljb24iOjE4NSwiLi4vLi4vbGliIjoyMDIsZDM6OSwiZmFzdC1pc251bWVyaWMiOjExfV0sMTM4OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGE9ZSgiLi4vY29sb3IvYXR0cmlidXRlcyIpLGk9KDAsZSgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5KSgiYnV0dG9uIix7dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToicGxvdCJ9LHN0ZXA6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm1vbnRoIiwieWVhciIsImRheSIsImhvdXIiLCJtaW51dGUiLCJzZWNvbmQiLCJhbGwiXSxkZmx0OiJtb250aCIsZWRpdFR5cGU6InBsb3QifSxzdGVwbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYmFja3dhcmQiLCJ0b2RhdGUiXSxkZmx0OiJiYWNrd2FyZCIsZWRpdFR5cGU6InBsb3QifSxjb3VudDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6InBsb3QifSxsYWJlbDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0pO3QuZXhwb3J0cz17dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6InBsb3QifSxidXR0b25zOmkseDp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjMsZWRpdFR5cGU6InBsb3QifSx4YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoibGVmdCIsZWRpdFR5cGU6InBsb3QifSx5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMixtYXg6MyxlZGl0VHlwZToicGxvdCJ9LHlhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJ0b3AiLCJtaWRkbGUiLCJib3R0b20iXSxkZmx0OiJib3R0b20iLGVkaXRUeXBlOiJwbG90In0sZm9udDpuKHtlZGl0VHlwZToicGxvdCJ9KSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDphLmxpZ2h0TGluZSxlZGl0VHlwZToicGxvdCJ9LGFjdGl2ZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InBsb3QifSxib3JkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS5kZWZhdWx0TGluZSxlZGl0VHlwZToicGxvdCJ9LGJvcmRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In19LHsiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6MjM3LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjI3NiwiLi4vY29sb3IvYXR0cmlidXRlcyI6NzR9XSwxMzk6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPXt5UGFkOi4wMixtaW5CdXR0b25XaWR0aDozMCxyeDozLHJ5OjMsbGlnaHRBbW91bnQ6MjUsZGFya0Ftb3VudDoxMH19LHt9XSwxNDA6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vbGliIiksYT1lKCIuLi9jb2xvciIpLGk9ZSgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLG89ZSgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksbD1lKCIuL2F0dHJpYnV0ZXMiKSxzPWUoIi4vY29uc3RhbnRzIik7ZnVuY3Rpb24gYyhlLHQscixhKXt2YXIgaT1hLmNhbGVuZGFyO2Z1bmN0aW9uIG8ocixhKXtyZXR1cm4gbi5jb2VyY2UoZSx0LGwuYnV0dG9ucyxyLGEpfWlmKG8oInZpc2libGUiKSl7dmFyIHM9bygic3RlcCIpOyJhbGwiIT09cyYmKCFpfHwiZ3JlZ29yaWFuIj09PWl8fCJtb250aCIhPT1zJiYieWVhciIhPT1zP28oInN0ZXBtb2RlIik6dC5zdGVwbW9kZT0iYmFja3dhcmQiLG8oImNvdW50IikpLG8oImxhYmVsIil9fXQuZXhwb3J0cz1mdW5jdGlvbihlLHQscix1LGYpe3ZhciBkPWUucmFuZ2VzZWxlY3Rvcnx8e30scD1pLm5ld0NvbnRhaW5lcih0LCJyYW5nZXNlbGVjdG9yIik7ZnVuY3Rpb24gaChlLHQpe3JldHVybiBuLmNvZXJjZShkLHAsbCxlLHQpfWlmKGgoInZpc2libGUiLG8oZCxwLHtuYW1lOiJidXR0b25zIixoYW5kbGVJdGVtRGVmYXVsdHM6YyxjYWxlbmRhcjpmfSkubGVuZ3RoPjApKXt2YXIgZz1mdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPXIuZmlsdGVyKChmdW5jdGlvbihyKXtyZXR1cm4gdFtyXS5hbmNob3I9PT1lLl9pZH0pKSxhPTAsaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgbz10W25baV1dLmRvbWFpbjtvJiYoYT1NYXRoLm1heChvWzFdLGEpKX1yZXR1cm5bZS5kb21haW5bMF0sYStzLnlQYWRdfSh0LHIsdSk7aCgieCIsZ1swXSksaCgieSIsZ1sxXSksbi5ub25lT3JBbGwoZSx0LFsieCIsInkiXSksaCgieGFuY2hvciIpLGgoInlhbmNob3IiKSxuLmNvZXJjZUZvbnQoaCwiZm9udCIsci5mb250KTt2YXIgdj1oKCJiZ2NvbG9yIik7aCgiYWN0aXZlY29sb3IiLGEuY29udHJhc3QodixzLmxpZ2h0QW1vdW50LHMuZGFya0Ftb3VudCkpLGgoImJvcmRlcmNvbG9yIiksaCgiYm9yZGVyd2lkdGgiKX19fSx7Ii4uLy4uL2xpYiI6MjAyLCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjoyMzcsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6MjQzLCIuLi9jb2xvciI6NzUsIi4vYXR0cmlidXRlcyI6MTM4LCIuL2NvbnN0YW50cyI6MTM5fV0sMTQxOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoImQzIiksYT1lKCIuLi8uLi9yZWdpc3RyeSIpLGk9ZSgiLi4vLi4vcGxvdHMvcGxvdHMiKSxvPWUoIi4uL2NvbG9yIiksbD1lKCIuLi9kcmF3aW5nIikscz1lKCIuLi8uLi9saWIiKSxjPXMuc3RyVHJhbnNsYXRlLHU9ZSgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksZj1lKCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxkPWUoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKSxwPWQuTElORV9TUEFDSU5HLGg9ZC5GUk9NX1RMLGc9ZC5GUk9NX0JSLHY9ZSgiLi9jb25zdGFudHMiKSxtPWUoIi4vZ2V0X3VwZGF0ZV9vYmplY3QiKTtmdW5jdGlvbiB5KGUpe3JldHVybiBlLl9pZH1mdW5jdGlvbiB4KGUsdCxyKXt2YXIgbj1zLmVuc3VyZVNpbmdsZShlLCJyZWN0Iiwic2VsZWN0b3ItcmVjdCIsKGZ1bmN0aW9uKGUpe2UuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpfSkpO24uYXR0cih7cng6di5yeCxyeTp2LnJ5fSksbi5jYWxsKG8uc3Ryb2tlLHQuYm9yZGVyY29sb3IpLmNhbGwoby5maWxsLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuX2lzQWN0aXZlfHx0Ll9pc0hvdmVyZWQ/ZS5hY3RpdmVjb2xvcjplLmJnY29sb3J9KHQscikpLnN0eWxlKCJzdHJva2Utd2lkdGgiLHQuYm9yZGVyd2lkdGgrInB4Iil9ZnVuY3Rpb24gYihlLHQscixuKXtzLmVuc3VyZVNpbmdsZShlLCJ0ZXh0Iiwic2VsZWN0b3ItdGV4dCIsKGZ1bmN0aW9uKGUpe2UuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKX0pKS5jYWxsKGwuZm9udCx0LmZvbnQpLnRleHQoZnVuY3Rpb24oZSx0KXtpZihlLmxhYmVsKXJldHVybiB0P3MudGVtcGxhdGVTdHJpbmcoZS5sYWJlbCx0KTplLmxhYmVsO3JldHVybiJhbGwiPT09ZS5zdGVwPyJhbGwiOmUuY291bnQrZS5zdGVwLmNoYXJBdCgwKX0ocixuLl9mdWxsTGF5b3V0Ll9tZXRhKSkuY2FsbCgoZnVuY3Rpb24oZSl7dS5jb252ZXJ0VG9Uc3BhbnMoZSxuKX0pKX10LmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fZnVsbExheW91dC5faW5mb2xheWVyLnNlbGVjdEFsbCgiLnJhbmdlc2VsZWN0b3IiKS5kYXRhKGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1mLmxpc3QoZSwieCIsITApLHI9W10sbj0wO248dC5sZW5ndGg7bisrKXt2YXIgYT10W25dO2EucmFuZ2VzZWxlY3RvciYmYS5yYW5nZXNlbGVjdG9yLnZpc2libGUmJnIucHVzaChhKX1yZXR1cm4gcn0oZSkseSk7dC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInJhbmdlc2VsZWN0b3IiLCEwKSx0LmV4aXQoKS5yZW1vdmUoKSx0LnN0eWxlKHtjdXJzb3I6InBvaW50ZXIiLCJwb2ludGVyLWV2ZW50cyI6ImFsbCJ9KSx0LmVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpLG89dCxmPW8ucmFuZ2VzZWxlY3RvcixkPXIuc2VsZWN0QWxsKCJnLmJ1dHRvbiIpLmRhdGEocy5maWx0ZXJWaXNpYmxlKGYuYnV0dG9ucykpO2QuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJidXR0b24iLCEwKSxkLmV4aXQoKS5yZW1vdmUoKSxkLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpLGk9bShvLHQpO3QuX2lzQWN0aXZlPWZ1bmN0aW9uKGUsdCxyKXtpZigiYWxsIj09PXQuc3RlcClyZXR1cm4hMD09PWUuYXV0b3JhbmdlO3ZhciBuPU9iamVjdC5rZXlzKHIpO3JldHVybiBlLnJhbmdlWzBdPT09cltuWzBdXSYmZS5yYW5nZVsxXT09PXJbblsxXV19KG8sdCxpKSxyLmNhbGwoeCxmLHQpLHIuY2FsbChiLGYsdCxlKSxyLm9uKCJjbGljayIsKGZ1bmN0aW9uKCl7ZS5fZHJhZ2dlZHx8YS5jYWxsKCJfZ3VpUmVsYXlvdXQiLGUsaSl9KSksci5vbigibW91c2VvdmVyIiwoZnVuY3Rpb24oKXt0Ll9pc0hvdmVyZWQ9ITAsci5jYWxsKHgsZix0KX0pKSxyLm9uKCJtb3VzZW91dCIsKGZ1bmN0aW9uKCl7dC5faXNIb3ZlcmVkPSExLHIuY2FsbCh4LGYsdCl9KSl9KSksZnVuY3Rpb24oZSx0LHIsYSxvKXt2YXIgZj0wLGQ9MCxtPXIuYm9yZGVyd2lkdGg7dC5lYWNoKChmdW5jdGlvbigpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLnNlbGVjdCgiLnNlbGVjdG9yLXRleHQiKSx0PXIuZm9udC5zaXplKnAsYT1NYXRoLm1heCh0KnUubGluZUNvdW50KGUpLDE2KSszO2Q9TWF0aC5tYXgoZCxhKX0pKSx0LmVhY2goKGZ1bmN0aW9uKCl7dmFyIGU9bi5zZWxlY3QodGhpcyksdD1lLnNlbGVjdCgiLnNlbGVjdG9yLXJlY3QiKSxhPWUuc2VsZWN0KCIuc2VsZWN0b3ItdGV4dCIpLGk9YS5ub2RlKCkmJmwuYkJveChhLm5vZGUoKSkud2lkdGgsbz1yLmZvbnQuc2l6ZSpwLHM9dS5saW5lQ291bnQoYSksaD1NYXRoLm1heChpKzEwLHYubWluQnV0dG9uV2lkdGgpO2UuYXR0cigidHJhbnNmb3JtIixjKG0rZixtKSksdC5hdHRyKHt4OjAseTowLHdpZHRoOmgsaGVpZ2h0OmR9KSx1LnBvc2l0aW9uVGV4dChhLGgvMixkLzItKHMtMSkqby8yKzMpLGYrPWgrNX0pKTt2YXIgeT1lLl9mdWxsTGF5b3V0Ll9zaXplLHg9eS5sK3kudypyLngsYj15LnQreS5oKigxLXIueSksXz0ibGVmdCI7cy5pc1JpZ2h0QW5jaG9yKHIpJiYoeC09ZixfPSJyaWdodCIpO3MuaXNDZW50ZXJBbmNob3IocikmJih4LT1mLzIsXz0iY2VudGVyIik7dmFyIHc9InRvcCI7cy5pc0JvdHRvbUFuY2hvcihyKSYmKGItPWQsdz0iYm90dG9tIik7cy5pc01pZGRsZUFuY2hvcihyKSYmKGItPWQvMix3PSJtaWRkbGUiKTtmPU1hdGguY2VpbChmKSxkPU1hdGguY2VpbChkKSx4PU1hdGgucm91bmQoeCksYj1NYXRoLnJvdW5kKGIpLGkuYXV0b01hcmdpbihlLGErIi1yYW5nZS1zZWxlY3RvciIse3g6ci54LHk6ci55LGw6ZipoW19dLHI6ZipnW19dLGI6ZCpnW3ddLHQ6ZCpoW3ddfSksby5hdHRyKCJ0cmFuc2Zvcm0iLGMoeCxiKSl9KGUsZCxmLG8uX25hbWUscil9KSl9fSx7Ii4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjE3NywiLi4vLi4vbGliIjoyMDIsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6MjI0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjI1MSwiLi4vLi4vcGxvdHMvcGxvdHMiOjI4MiwiLi4vLi4vcmVnaXN0cnkiOjI5MCwiLi4vY29sb3IiOjc1LCIuLi9kcmF3aW5nIjo5NywiLi9jb25zdGFudHMiOjEzOSwiLi9nZXRfdXBkYXRlX29iamVjdCI6MTQyLGQzOjl9XSwxNDI6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiZDMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLl9uYW1lLGE9e307aWYoImFsbCI9PT10LnN0ZXApYVtyKyIuYXV0b3JhbmdlIl09ITA7ZWxzZXt2YXIgaT1mdW5jdGlvbihlLHQpe3ZhciByLGE9ZS5yYW5nZSxpPW5ldyBEYXRlKGUucjJsKGFbMV0pKSxvPXQuc3RlcCxsPXQuY291bnQ7c3dpdGNoKHQuc3RlcG1vZGUpe2Nhc2UiYmFja3dhcmQiOnI9ZS5sMnIoK24udGltZVtvXS51dGMub2Zmc2V0KGksLWwpKTticmVhaztjYXNlInRvZGF0ZSI6dmFyIHM9bi50aW1lW29dLnV0Yy5vZmZzZXQoaSwtbCk7cj1lLmwycigrbi50aW1lW29dLnV0Yy5jZWlsKHMpKX12YXIgYz1hWzFdO3JldHVybltyLGNdfShlLHQpO2FbcisiLnJhbmdlWzBdIl09aVswXSxhW3IrIi5yYW5nZVsxXSJdPWlbMV19cmV0dXJuIGF9fSx7ZDM6OX1dLDE0MzpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToicmFuZ2VzZWxlY3RvciIsc2NoZW1hOntzdWJwbG90czp7eGF4aXM6e3Jhbmdlc2VsZWN0b3I6ZSgiLi9hdHRyaWJ1dGVzIil9fX0sbGF5b3V0QXR0cmlidXRlczplKCIuL2F0dHJpYnV0ZXMiKSxoYW5kbGVEZWZhdWx0czplKCIuL2RlZmF1bHRzIiksZHJhdzplKCIuL2RyYXciKX19LHsiLi9hdHRyaWJ1dGVzIjoxMzgsIi4vZGVmYXVsdHMiOjE0MCwiLi9kcmF3IjoxNDF9XSwxNDQ6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vY29sb3IvYXR0cmlidXRlcyIpO3QuZXhwb3J0cz17Ymdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5iYWNrZ3JvdW5kLGVkaXRUeXBlOiJwbG90In0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Om4uZGVmYXVsdExpbmUsZWRpdFR5cGU6InBsb3QifSxib3JkZXJ3aWR0aDp7dmFsVHlwZToiaW50ZWdlciIsZGZsdDowLG1pbjowLGVkaXRUeXBlOiJwbG90In0sYXV0b3JhbmdlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIixpbXBsaWVkRWRpdHM6eyJyYW5nZVswXSI6dm9pZCAwLCJyYW5nZVsxXSI6dm9pZCAwfX0scmFuZ2U6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyIsaW1wbGllZEVkaXRzOnsiXmF1dG9yYW5nZSI6ITF9fSx7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyIsaW1wbGllZEVkaXRzOnsiXmF1dG9yYW5nZSI6ITF9fV0sZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czp7YXV0b3JhbmdlOiExfX0sdGhpY2tuZXNzOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6LjE1LG1pbjowLG1heDoxLGVkaXRUeXBlOiJwbG90In0sdmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn19LHsiLi4vY29sb3IvYXR0cmlidXRlcyI6NzR9XSwxNDU6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIikubGlzdCxhPWUoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hdXRvcmFuZ2UiKS5nZXRBdXRvUmFuZ2UsaT1lKCIuL2NvbnN0YW50cyIpO3QuZXhwb3J0cz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9bihlLCJ4IiwhMCkscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbz10W3JdLGw9b1tpLm5hbWVdO2wmJmwudmlzaWJsZSYmbC5hdXRvcmFuZ2UmJihsLl9pbnB1dC5hdXRvcmFuZ2U9ITAsbC5faW5wdXQucmFuZ2U9bC5yYW5nZT1hKGUsbykpfX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZSI6MjQ3LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjI1MSwiLi9jb25zdGFudHMiOjE0Nn1dLDE0NjpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9e25hbWU6InJhbmdlc2xpZGVyIixjb250YWluZXJDbGFzc05hbWU6InJhbmdlc2xpZGVyLWNvbnRhaW5lciIsYmdDbGFzc05hbWU6InJhbmdlc2xpZGVyLWJnIixyYW5nZVBsb3RDbGFzc05hbWU6InJhbmdlc2xpZGVyLXJhbmdlcGxvdCIsbWFza01pbkNsYXNzTmFtZToicmFuZ2VzbGlkZXItbWFzay1taW4iLG1hc2tNYXhDbGFzc05hbWU6InJhbmdlc2xpZGVyLW1hc2stbWF4IixzbGlkZUJveENsYXNzTmFtZToicmFuZ2VzbGlkZXItc2xpZGVib3giLGdyYWJiZXJNaW5DbGFzc05hbWU6InJhbmdlc2xpZGVyLWdyYWJiZXItbWluIixncmFiQXJlYU1pbkNsYXNzTmFtZToicmFuZ2VzbGlkZXItZ3JhYmFyZWEtbWluIixoYW5kbGVNaW5DbGFzc05hbWU6InJhbmdlc2xpZGVyLWhhbmRsZS1taW4iLGdyYWJiZXJNYXhDbGFzc05hbWU6InJhbmdlc2xpZGVyLWdyYWJiZXItbWF4IixncmFiQXJlYU1heENsYXNzTmFtZToicmFuZ2VzbGlkZXItZ3JhYmFyZWEtbWF4IixoYW5kbGVNYXhDbGFzc05hbWU6InJhbmdlc2xpZGVyLWhhbmRsZS1tYXgiLG1hc2tNaW5PcHBBeGlzQ2xhc3NOYW1lOiJyYW5nZXNsaWRlci1tYXNrLW1pbi1vcHAtYXhpcyIsbWFza01heE9wcEF4aXNDbGFzc05hbWU6InJhbmdlc2xpZGVyLW1hc2stbWF4LW9wcC1heGlzIixtYXNrQ29sb3I6InJnYmEoMCwwLDAsMC40KSIsbWFza09wcEF4aXNDb2xvcjoicmdiYSgwLDAsMCwwLjIpIixzbGlkZUJveEZpbGw6InRyYW5zcGFyZW50IixzbGlkZUJveEN1cnNvcjoiZXctcmVzaXplIixncmFiQXJlYUZpbGw6InRyYW5zcGFyZW50IixncmFiQXJlYUN1cnNvcjoiY29sLXJlc2l6ZSIsZ3JhYkFyZWFXaWR0aDoxMCxoYW5kbGVXaWR0aDo0LGhhbmRsZVJhZGl1czoxLGhhbmRsZVN0cm9rZVdpZHRoOjEsZXh0cmFQYWQ6MTV9fSx7fV0sMTQ3OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2xpYiIpLGE9ZSgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLGk9ZSgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIiksbz1lKCIuL2F0dHJpYnV0ZXMiKSxsPWUoIi4vb3BwYXhpc19hdHRyaWJ1dGVzIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgcz1lW3JdLGM9dFtyXTtpZihzLnJhbmdlc2xpZGVyfHx0Ll9yZXF1ZXN0UmFuZ2VzbGlkZXJbYy5faWRdKXtuLmlzUGxhaW5PYmplY3Qocy5yYW5nZXNsaWRlcil8fChzLnJhbmdlc2xpZGVyPXt9KTt2YXIgdSxmLGQ9cy5yYW5nZXNsaWRlcixwPWEubmV3Q29udGFpbmVyKGMsInJhbmdlc2xpZGVyIik7aWYoXygidmlzaWJsZSIpKXtfKCJiZ2NvbG9yIix0LnBsb3RfYmdjb2xvciksXygiYm9yZGVyY29sb3IiKSxfKCJib3JkZXJ3aWR0aCIpLF8oInRoaWNrbmVzcyIpLF8oImF1dG9yYW5nZSIsIWMuaXNWYWxpZFJhbmdlKGQucmFuZ2UpKSxfKCJyYW5nZSIpO3ZhciBoPXQuX3N1YnBsb3RzO2lmKGgpZm9yKHZhciBnPWguY2FydGVzaWFuLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3Vic3RyKDAsZS5pbmRleE9mKCJ5IikpPT09aS5uYW1lMmlkKHIpfSkpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3Vic3RyKGUuaW5kZXhPZigieSIpLGUubGVuZ3RoKX0pKSx2PW4uc2ltcGxlTWFwKGcsaS5pZDJuYW1lKSxtPTA7bTx2Lmxlbmd0aDttKyspe3ZhciB5PXZbbV07dT1kW3ldfHx7fSxmPWEubmV3Q29udGFpbmVyKHAseSwieWF4aXMiKTt2YXIgeCxiPXRbeV07dS5yYW5nZSYmYi5pc1ZhbGlkUmFuZ2UodS5yYW5nZSkmJih4PSJmaXhlZCIpLCJtYXRjaCIhPT13KCJyYW5nZW1vZGUiLHgpJiZ3KCJyYW5nZSIsYi5yYW5nZS5zbGljZSgpKX1wLl9pbnB1dD1kfX1mdW5jdGlvbiBfKGUsdCl7cmV0dXJuIG4uY29lcmNlKGQscCxvLGUsdCl9ZnVuY3Rpb24gdyhlLHQpe3JldHVybiBuLmNvZXJjZSh1LGYsbCxlLHQpfX19LHsiLi4vLi4vbGliIjoyMDIsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjIzNywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjoyNTEsIi4vYXR0cmlidXRlcyI6MTQ0LCIuL29wcGF4aXNfYXR0cmlidXRlcyI6MTUxfV0sMTQ4OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoImQzIiksYT1lKCIuLi8uLi9yZWdpc3RyeSIpLGk9ZSgiLi4vLi4vcGxvdHMvcGxvdHMiKSxvPWUoIi4uLy4uL2xpYiIpLGw9by5zdHJUcmFuc2xhdGUscz1lKCIuLi9kcmF3aW5nIiksYz1lKCIuLi9jb2xvciIpLHU9ZSgiLi4vdGl0bGVzIiksZj1lKCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxkPWUoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyIpLHA9ZSgiLi4vZHJhZ2VsZW1lbnQiKSxoPWUoIi4uLy4uL2xpYi9zZXRjdXJzb3IiKSxnPWUoIi4vY29uc3RhbnRzIik7ZnVuY3Rpb24gdihlLHQscixuKXt2YXIgYT1vLmVuc3VyZVNpbmdsZShlLCJyZWN0IixnLmJnQ2xhc3NOYW1lLChmdW5jdGlvbihlKXtlLmF0dHIoe3g6MCx5OjAsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSl9KSksaT1uLmJvcmRlcndpZHRoJTI9PTA/bi5ib3JkZXJ3aWR0aDpuLmJvcmRlcndpZHRoLTEsYz0tbi5fb2Zmc2V0U2hpZnQsdT1zLmNyaXNwUm91bmQodCxuLmJvcmRlcndpZHRoKTthLmF0dHIoe3dpZHRoOm4uX3dpZHRoK2ksaGVpZ2h0Om4uX2hlaWdodCtpLHRyYW5zZm9ybTpsKGMsYyksZmlsbDpuLmJnY29sb3Isc3Ryb2tlOm4uYm9yZGVyY29sb3IsInN0cm9rZS13aWR0aCI6dX0pfWZ1bmN0aW9uIG0oZSx0LHIsbil7dmFyIGE9dC5fZnVsbExheW91dDtvLmVuc3VyZVNpbmdsZUJ5SWQoYS5fdG9wZGVmcywiY2xpcFBhdGgiLG4uX2NsaXBJZCwoZnVuY3Rpb24oZSl7ZS5hcHBlbmQoInJlY3QiKS5hdHRyKHt4OjAseTowfSl9KSkuc2VsZWN0KCJyZWN0IikuYXR0cih7d2lkdGg6bi5fd2lkdGgsaGVpZ2h0Om4uX2hlaWdodH0pfWZ1bmN0aW9uIHkoZSx0LHIsYSl7dmFyIGwsYz10LmNhbGNkYXRhLHU9ZS5zZWxlY3RBbGwoImcuIitnLnJhbmdlUGxvdENsYXNzTmFtZSkuZGF0YShyLl9zdWJwbG90c1dpdGgsby5pZGVudGl0eSk7dS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGcucmFuZ2VQbG90Q2xhc3NOYW1lKyIgIitlfSkpLmNhbGwocy5zZXRDbGlwVXJsLGEuX2NsaXBJZCx0KSx1Lm9yZGVyKCksdS5leGl0KCkucmVtb3ZlKCksdS5lYWNoKChmdW5jdGlvbihlLG8pe3ZhciBzPW4uc2VsZWN0KHRoaXMpLHU9MD09PW8scD1kLmdldEZyb21JZCh0LGUsInkiKSxoPXAuX25hbWUsZz1hW2hdLHY9e2RhdGE6W10sbGF5b3V0Ont4YXhpczp7dHlwZTpyLnR5cGUsZG9tYWluOlswLDFdLHJhbmdlOmEucmFuZ2Uuc2xpY2UoKSxjYWxlbmRhcjpyLmNhbGVuZGFyfSx3aWR0aDphLl93aWR0aCxoZWlnaHQ6YS5faGVpZ2h0LG1hcmdpbjp7dDowLGI6MCxsOjAscjowfX0sX2NvbnRleHQ6dC5fY29udGV4dH07ci5yYW5nZWJyZWFrcyYmKHYubGF5b3V0LnhheGlzLnJhbmdlYnJlYWtzPXIucmFuZ2VicmVha3MpLHYubGF5b3V0W2hdPXt0eXBlOnAudHlwZSxkb21haW46WzAsMV0scmFuZ2U6Im1hdGNoIiE9PWcucmFuZ2Vtb2RlP2cucmFuZ2Uuc2xpY2UoKTpwLnJhbmdlLnNsaWNlKCksY2FsZW5kYXI6cC5jYWxlbmRhcn0scC5yYW5nZWJyZWFrcyYmKHYubGF5b3V0W2hdLnJhbmdlYnJlYWtzPXAucmFuZ2VicmVha3MpLGkuc3VwcGx5RGVmYXVsdHModik7dmFyIG09di5fZnVsbExheW91dC54YXhpcyx5PXYuX2Z1bGxMYXlvdXRbaF07bS5jbGVhckNhbGMoKSxtLnNldFNjYWxlKCkseS5jbGVhckNhbGMoKSx5LnNldFNjYWxlKCk7dmFyIHg9e2lkOmUscGxvdGdyb3VwOnMseGF4aXM6bSx5YXhpczp5LGlzUmFuZ2VQbG90OiEwfTt1P2w9eDooeC5tYWlucGxvdD0ieHkiLHgubWFpbnBsb3RpbmZvPWwpLGYucmFuZ2VQbG90KHQseCxmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1bXSxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBhPWVbbl0saT1hWzBdLnRyYWNlO2kueGF4aXMraS55YXhpcz09PXQmJnIucHVzaChhKX1yZXR1cm4gcn0oYyxlKSl9KSl9ZnVuY3Rpb24geChlLHQscixuLGEpeyhvLmVuc3VyZVNpbmdsZShlLCJyZWN0IixnLm1hc2tNaW5DbGFzc05hbWUsKGZ1bmN0aW9uKGUpe2UuYXR0cih7eDowLHk6MCwic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9KX0pKS5hdHRyKCJoZWlnaHQiLG4uX2hlaWdodCkuY2FsbChjLmZpbGwsZy5tYXNrQ29sb3IpLG8uZW5zdXJlU2luZ2xlKGUsInJlY3QiLGcubWFza01heENsYXNzTmFtZSwoZnVuY3Rpb24oZSl7ZS5hdHRyKHt5OjAsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSl9KSkuYXR0cigiaGVpZ2h0IixuLl9oZWlnaHQpLmNhbGwoYy5maWxsLGcubWFza0NvbG9yKSwibWF0Y2giIT09YS5yYW5nZW1vZGUpJiYoby5lbnN1cmVTaW5nbGUoZSwicmVjdCIsZy5tYXNrTWluT3BwQXhpc0NsYXNzTmFtZSwoZnVuY3Rpb24oZSl7ZS5hdHRyKHt5OjAsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSl9KSkuYXR0cigid2lkdGgiLG4uX3dpZHRoKS5jYWxsKGMuZmlsbCxnLm1hc2tPcHBBeGlzQ29sb3IpLG8uZW5zdXJlU2luZ2xlKGUsInJlY3QiLGcubWFza01heE9wcEF4aXNDbGFzc05hbWUsKGZ1bmN0aW9uKGUpe2UuYXR0cih7eTowLCJzaGFwZS1yZW5kZXJpbmciOiJjcmlzcEVkZ2VzIn0pfSkpLmF0dHIoIndpZHRoIixuLl93aWR0aCkuc3R5bGUoImJvcmRlci10b3AiLGcubWFza09wcEJvcmRlcikuY2FsbChjLmZpbGwsZy5tYXNrT3BwQXhpc0NvbG9yKSl9ZnVuY3Rpb24gYihlLHQscixuKXt0Ll9jb250ZXh0LnN0YXRpY1Bsb3R8fG8uZW5zdXJlU2luZ2xlKGUsInJlY3QiLGcuc2xpZGVCb3hDbGFzc05hbWUsKGZ1bmN0aW9uKGUpe2UuYXR0cih7eTowLGN1cnNvcjpnLnNsaWRlQm94Q3Vyc29yLCJzaGFwZS1yZW5kZXJpbmciOiJjcmlzcEVkZ2VzIn0pfSkpLmF0dHIoe2hlaWdodDpuLl9oZWlnaHQsZmlsbDpnLnNsaWRlQm94RmlsbH0pfWZ1bmN0aW9uIF8oZSx0LHIsbil7dmFyIGE9by5lbnN1cmVTaW5nbGUoZSwiZyIsZy5ncmFiYmVyTWluQ2xhc3NOYW1lKSxpPW8uZW5zdXJlU2luZ2xlKGUsImciLGcuZ3JhYmJlck1heENsYXNzTmFtZSksbD17eDowLHdpZHRoOmcuaGFuZGxlV2lkdGgscng6Zy5oYW5kbGVSYWRpdXMsZmlsbDpjLmJhY2tncm91bmQsc3Ryb2tlOmMuZGVmYXVsdExpbmUsInN0cm9rZS13aWR0aCI6Zy5oYW5kbGVTdHJva2VXaWR0aCwic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9LHM9e3k6TWF0aC5yb3VuZChuLl9oZWlnaHQvNCksaGVpZ2h0Ok1hdGgucm91bmQobi5faGVpZ2h0LzIpfTtvLmVuc3VyZVNpbmdsZShhLCJyZWN0IixnLmhhbmRsZU1pbkNsYXNzTmFtZSwoZnVuY3Rpb24oZSl7ZS5hdHRyKGwpfSkpLmF0dHIocyksby5lbnN1cmVTaW5nbGUoaSwicmVjdCIsZy5oYW5kbGVNYXhDbGFzc05hbWUsKGZ1bmN0aW9uKGUpe2UuYXR0cihsKX0pKS5hdHRyKHMpO3ZhciB1PXt3aWR0aDpnLmdyYWJBcmVhV2lkdGgseDowLHk6MCxmaWxsOmcuZ3JhYkFyZWFGaWxsLGN1cnNvcjp0Ll9jb250ZXh0LnN0YXRpY1Bsb3Q/dm9pZCAwOmcuZ3JhYkFyZWFDdXJzb3J9O28uZW5zdXJlU2luZ2xlKGEsInJlY3QiLGcuZ3JhYkFyZWFNaW5DbGFzc05hbWUsKGZ1bmN0aW9uKGUpe2UuYXR0cih1KX0pKS5hdHRyKCJoZWlnaHQiLG4uX2hlaWdodCksby5lbnN1cmVTaW5nbGUoaSwicmVjdCIsZy5ncmFiQXJlYU1heENsYXNzTmFtZSwoZnVuY3Rpb24oZSl7ZS5hdHRyKHUpfSkpLmF0dHIoImhlaWdodCIsbi5faGVpZ2h0KX10LmV4cG9ydHM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUuX2Z1bGxMYXlvdXQscj10Ll9yYW5nZVNsaWRlckRhdGEsaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgcz1yW2ldW2cubmFtZV07cy5fY2xpcElkPXMuX2lkKyItIit0Ll91aWR9dmFyIGM9dC5faW5mb2xheWVyLnNlbGVjdEFsbCgiZy4iK2cuY29udGFpbmVyQ2xhc3NOYW1lKS5kYXRhKHIsKGZ1bmN0aW9uKGUpe3JldHVybiBlLl9uYW1lfSkpO2MuZXhpdCgpLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPWVbZy5uYW1lXTt0Ll90b3BkZWZzLnNlbGVjdCgiIyIrci5fY2xpcElkKS5yZW1vdmUoKX0pKS5yZW1vdmUoKSwwIT09ci5sZW5ndGgmJihjLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChnLmNvbnRhaW5lckNsYXNzTmFtZSwhMCkuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKSxjLmVhY2goKGZ1bmN0aW9uKHIpe3ZhciBpPW4uc2VsZWN0KHRoaXMpLHM9cltnLm5hbWVdLGM9dFtkLmlkMm5hbWUoci5hbmNob3IpXSxmPXNbZC5pZDJuYW1lKHIuYW5jaG9yKV07aWYocy5yYW5nZSl7dmFyIHcsVD1vLnNpbXBsZU1hcChzLnJhbmdlLHIucjJsKSxrPW8uc2ltcGxlTWFwKHIucmFuZ2Usci5yMmwpO3c9a1swXTxrWzFdP1tNYXRoLm1pbihUWzBdLGtbMF0pLE1hdGgubWF4KFRbMV0sa1sxXSldOltNYXRoLm1heChUWzBdLGtbMF0pLE1hdGgubWluKFRbMV0sa1sxXSldLHMucmFuZ2U9cy5faW5wdXQucmFuZ2U9by5zaW1wbGVNYXAodyxyLmwycil9ci5jbGVhblJhbmdlKCJyYW5nZXNsaWRlci5yYW5nZSIpO3ZhciBNPXQuX3NpemUsQT1yLmRvbWFpbjtzLl93aWR0aD1NLncqKEFbMV0tQVswXSk7dmFyIEw9TWF0aC5yb3VuZChNLmwrTS53KkFbMF0pLFM9TWF0aC5yb3VuZChNLnQrTS5oKigxLXIuX2NvdW50ZXJEb21haW5NaW4pKygiYm90dG9tIj09PXIuc2lkZT9yLl9kZXB0aDowKStzLl9vZmZzZXRTaGlmdCtnLmV4dHJhUGFkKTtpLmF0dHIoInRyYW5zZm9ybSIsbChMLFMpKSxzLl9ybD1vLnNpbXBsZU1hcChzLnJhbmdlLHIucjJsKTt2YXIgQz1zLl9ybFswXSxPPXMuX3JsWzFdLEQ9Ty1DO2lmKHMucDJkPWZ1bmN0aW9uKGUpe3JldHVybiBlL3MuX3dpZHRoKkQrQ30scy5kMnA9ZnVuY3Rpb24oZSl7cmV0dXJuKGUtQykvRCpzLl93aWR0aH0sci5yYW5nZWJyZWFrcyl7dmFyIFA9ci5sb2NhdGVCcmVha3MoQyxPKTtpZihQLmxlbmd0aCl7dmFyIHosUixFPTA7Zm9yKHo9MDt6PFAubGVuZ3RoO3orKylFKz0oUj1QW3pdKS5tYXgtUi5taW47dmFyIEk9cy5fd2lkdGgvKE8tQy1FKSxGPVstSSpDXTtmb3Ioej0wO3o8UC5sZW5ndGg7eisrKVI9UFt6XSxGLnB1c2goRltGLmxlbmd0aC0xXS1JKihSLm1heC1SLm1pbikpO2ZvcihzLmQycD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9RlswXSxyPTA7cjxQLmxlbmd0aDtyKyspe3ZhciBuPVBbcl07aWYoZT49bi5tYXgpdD1GW3IrMV07ZWxzZSBpZihlPG4ubWluKWJyZWFrfXJldHVybiB0K0kqZX0sej0wO3o8UC5sZW5ndGg7eisrKShSPVBbel0pLnBtaW49cy5kMnAoUi5taW4pLFIucG1heD1zLmQycChSLm1heCk7cy5wMmQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PUZbMF0scj0wO3I8UC5sZW5ndGg7cisrKXt2YXIgbj1QW3JdO2lmKGU+PW4ucG1heCl0PUZbcisxXTtlbHNlIGlmKGU8bi5wbWluKWJyZWFrfXJldHVybihlLXQpL0l9fX1pZigibWF0Y2giIT09Zi5yYW5nZW1vZGUpe3ZhciBOPWMucjJsKGYucmFuZ2VbMF0pLEg9Yy5yMmwoZi5yYW5nZVsxXSktTjtzLmQycE9wcEF4aXM9ZnVuY3Rpb24oZSl7cmV0dXJuKGUtTikvSCpzLl9oZWlnaHR9fWkuY2FsbCh2LGUscixzKS5jYWxsKG0sZSxyLHMpLmNhbGwoeSxlLHIscykuY2FsbCh4LGUscixzLGYpLmNhbGwoYixlLHIscykuY2FsbChfLGUscixzKSxmdW5jdGlvbihlLHQscixpKXtpZih0Ll9jb250ZXh0LnN0YXRpY1Bsb3QpcmV0dXJuO3ZhciBsPWUuc2VsZWN0KCJyZWN0LiIrZy5zbGlkZUJveENsYXNzTmFtZSkubm9kZSgpLHM9ZS5zZWxlY3QoInJlY3QuIitnLmdyYWJBcmVhTWluQ2xhc3NOYW1lKS5ub2RlKCksYz1lLnNlbGVjdCgicmVjdC4iK2cuZ3JhYkFyZWFNYXhDbGFzc05hbWUpLm5vZGUoKTtmdW5jdGlvbiB1KCl7dmFyIHU9bi5ldmVudCxmPXUudGFyZ2V0LGQ9dS5jbGllbnRYfHx1LnRvdWNoZXNbMF0uY2xpZW50WCxnPWQtZS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCx2PWkuZDJwKHIuX3JsWzBdKSxtPWkuZDJwKHIuX3JsWzFdKSx5PXAuY292ZXJTbGlwKCk7ZnVuY3Rpb24geChlKXt2YXIgdSxwLHgsYj0rKGUuY2xpZW50WHx8ZS50b3VjaGVzWzBdLmNsaWVudFgpLWQ7c3dpdGNoKGYpe2Nhc2UgbDp4PSJldy1yZXNpemUiLHU9ditiLHA9bStiO2JyZWFrO2Nhc2Ugczp4PSJjb2wtcmVzaXplIix1PXYrYixwPW07YnJlYWs7Y2FzZSBjOng9ImNvbC1yZXNpemUiLHU9dixwPW0rYjticmVhaztkZWZhdWx0Ong9ImV3LXJlc2l6ZSIsdT1nLHA9ZytifWlmKHA8dSl7dmFyIF89cDtwPXUsdT1ffWkuX3BpeGVsTWluPXUsaS5fcGl4ZWxNYXg9cCxoKG4uc2VsZWN0KHkpLHgpLGZ1bmN0aW9uKGUsdCxyLG4pe2Z1bmN0aW9uIGkoZSl7cmV0dXJuIHIubDJyKG8uY29uc3RyYWluKGUsbi5fcmxbMF0sbi5fcmxbMV0pKX12YXIgbD1pKG4ucDJkKG4uX3BpeGVsTWluKSkscz1pKG4ucDJkKG4uX3BpeGVsTWF4KSk7d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoZnVuY3Rpb24oKXthLmNhbGwoIl9ndWlSZWxheW91dCIsdCxyLl9uYW1lKyIucmFuZ2UiLFtsLHNdKX0pKX0oMCx0LHIsaSl9ZnVuY3Rpb24gYigpe3kucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix4KSx5LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLGIpLHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix4KSx0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIixiKSxvLnJlbW92ZUVsZW1lbnQoeSl9dGhpcy5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHgpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLGIpLHkuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix4KSx5LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLGIpfWUub24oIm1vdXNlZG93biIsdSksZS5vbigidG91Y2hzdGFydCIsdSl9KGksZSxyLHMpLGZ1bmN0aW9uKGUsdCxyLG4sYSxpKXt2YXIgcz1nLmhhbmRsZVdpZHRoLzI7ZnVuY3Rpb24gYyhlKXtyZXR1cm4gby5jb25zdHJhaW4oZSwwLG4uX3dpZHRoKX1mdW5jdGlvbiB1KGUpe3JldHVybiBvLmNvbnN0cmFpbihlLDAsbi5faGVpZ2h0KX1mdW5jdGlvbiBmKGUpe3JldHVybiBvLmNvbnN0cmFpbihlLC1zLG4uX3dpZHRoK3MpfXZhciBkPWMobi5kMnAoci5fcmxbMF0pKSxwPWMobi5kMnAoci5fcmxbMV0pKTtpZihlLnNlbGVjdCgicmVjdC4iK2cuc2xpZGVCb3hDbGFzc05hbWUpLmF0dHIoIngiLGQpLmF0dHIoIndpZHRoIixwLWQpLGUuc2VsZWN0KCJyZWN0LiIrZy5tYXNrTWluQ2xhc3NOYW1lKS5hdHRyKCJ3aWR0aCIsZCksZS5zZWxlY3QoInJlY3QuIitnLm1hc2tNYXhDbGFzc05hbWUpLmF0dHIoIngiLHApLmF0dHIoIndpZHRoIixuLl93aWR0aC1wKSwibWF0Y2giIT09aS5yYW5nZW1vZGUpe3ZhciBoPW4uX2hlaWdodC11KG4uZDJwT3BwQXhpcyhhLl9ybFsxXSkpLHY9bi5faGVpZ2h0LXUobi5kMnBPcHBBeGlzKGEuX3JsWzBdKSk7ZS5zZWxlY3QoInJlY3QuIitnLm1hc2tNaW5PcHBBeGlzQ2xhc3NOYW1lKS5hdHRyKCJ4IixkKS5hdHRyKCJoZWlnaHQiLGgpLmF0dHIoIndpZHRoIixwLWQpLGUuc2VsZWN0KCJyZWN0LiIrZy5tYXNrTWF4T3BwQXhpc0NsYXNzTmFtZSkuYXR0cigieCIsZCkuYXR0cigieSIsdikuYXR0cigiaGVpZ2h0IixuLl9oZWlnaHQtdikuYXR0cigid2lkdGgiLHAtZCksZS5zZWxlY3QoInJlY3QuIitnLnNsaWRlQm94Q2xhc3NOYW1lKS5hdHRyKCJ5IixoKS5hdHRyKCJoZWlnaHQiLHYtaCl9dmFyIG09TWF0aC5yb3VuZChmKGQtcykpLS41LHk9TWF0aC5yb3VuZChmKHAtcykpKy41O2Uuc2VsZWN0KCJnLiIrZy5ncmFiYmVyTWluQ2xhc3NOYW1lKS5hdHRyKCJ0cmFuc2Zvcm0iLGwobSwuNSkpLGUuc2VsZWN0KCJnLiIrZy5ncmFiYmVyTWF4Q2xhc3NOYW1lKS5hdHRyKCJ0cmFuc2Zvcm0iLGwoeSwuNSkpfShpLDAscixzLGMsZiksImJvdHRvbSI9PT1yLnNpZGUmJnUuZHJhdyhlLHIuX2lkKyJ0aXRsZSIse3Byb3BDb250YWluZXI6cixwcm9wTmFtZTpyLl9uYW1lKyIudGl0bGUiLHBsYWNlaG9sZGVyOnQuX2RmbHRUaXRsZS54LGF0dHJpYnV0ZXM6e3g6ci5fb2Zmc2V0K3IuX2xlbmd0aC8yLHk6UytzLl9oZWlnaHQrcy5fb2Zmc2V0U2hpZnQrMTArMS41KnIudGl0bGUuZm9udC5zaXplLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9fSl9KSkpfX0seyIuLi8uLi9saWIiOjIwMiwiLi4vLi4vbGliL3NldGN1cnNvciI6MjIyLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjI2MSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjoyNTEsIi4uLy4uL3Bsb3RzL3Bsb3RzIjoyODIsIi4uLy4uL3JlZ2lzdHJ5IjoyOTAsIi4uL2NvbG9yIjo3NSwiLi4vZHJhZ2VsZW1lbnQiOjk0LCIuLi9kcmF3aW5nIjo5NywiLi4vdGl0bGVzIjoxNzAsIi4vY29uc3RhbnRzIjoxNDYsZDM6OX1dLDE0OTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxhPWUoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGk9ZSgiLi9jb25zdGFudHMiKSxvPWUoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5MSU5FX1NQQUNJTkcsbD1pLm5hbWU7ZnVuY3Rpb24gcyhlKXt2YXIgdD1lJiZlW2xdO3JldHVybiB0JiZ0LnZpc2libGV9ci5pc1Zpc2libGU9cyxyLm1ha2VEYXRhPWZ1bmN0aW9uKGUpe3ZhciB0PW4ubGlzdCh7X2Z1bGxMYXlvdXQ6ZX0sIngiLCEwKSxyPWUubWFyZ2luLGE9W107aWYoIWUuX2hhcygiZ2wyZCIpKWZvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgbz10W2ldO2lmKHMobykpe2EucHVzaChvKTt2YXIgYz1vW2xdO2MuX2lkPWwrby5faWQsYy5faGVpZ2h0PShlLmhlaWdodC1yLmItci50KSpjLnRoaWNrbmVzcyxjLl9vZmZzZXRTaGlmdD1NYXRoLmZsb29yKGMuYm9yZGVyd2lkdGgvMil9fWUuX3JhbmdlU2xpZGVyRGF0YT1hfSxyLmF1dG9NYXJnaW5PcHRzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5fZnVsbExheW91dCxuPXRbbF0scz10Ll9pZC5jaGFyQXQoMCksYz0wLHU9MDsiYm90dG9tIj09PXQuc2lkZSYmKGM9dC5fZGVwdGgsdC50aXRsZS50ZXh0IT09ci5fZGZsdFRpdGxlW3NdJiYodT0xLjUqdC50aXRsZS5mb250LnNpemUrMTArbi5fb2Zmc2V0U2hpZnQsdSs9KHQudGl0bGUudGV4dC5tYXRjaChhLkJSX1RBR19BTEwpfHxbXSkubGVuZ3RoKnQudGl0bGUuZm9udC5zaXplKm8pKTtyZXR1cm57eDowLHk6dC5fY291bnRlckRvbWFpbk1pbixsOjAscjowLHQ6MCxiOm4uX2hlaWdodCtjK01hdGgubWF4KHIubWFyZ2luLmIsdSkscGFkOmkuZXh0cmFQYWQrMipuLl9vZmZzZXRTaGlmdH19fSx7Ii4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjE3NywiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjoyMjQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6MjUxLCIuL2NvbnN0YW50cyI6MTQ2fV0sMTUwOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2xpYiIpLGE9ZSgiLi9hdHRyaWJ1dGVzIiksaT1lKCIuL29wcGF4aXNfYXR0cmlidXRlcyIpLG89ZSgiLi9oZWxwZXJzIik7dC5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6InJhbmdlc2xpZGVyIixzY2hlbWE6e3N1YnBsb3RzOnt4YXhpczp7cmFuZ2VzbGlkZXI6bi5leHRlbmRGbGF0KHt9LGEse3lheGlzOml9KX19fSxsYXlvdXRBdHRyaWJ1dGVzOmUoIi4vYXR0cmlidXRlcyIpLGhhbmRsZURlZmF1bHRzOmUoIi4vZGVmYXVsdHMiKSxjYWxjQXV0b3JhbmdlOmUoIi4vY2FsY19hdXRvcmFuZ2UiKSxkcmF3OmUoIi4vZHJhdyIpLGlzVmlzaWJsZTpvLmlzVmlzaWJsZSxtYWtlRGF0YTpvLm1ha2VEYXRhLGF1dG9NYXJnaW5PcHRzOm8uYXV0b01hcmdpbk9wdHN9fSx7Ii4uLy4uL2xpYiI6MjAyLCIuL2F0dHJpYnV0ZXMiOjE0NCwiLi9jYWxjX2F1dG9yYW5nZSI6MTQ1LCIuL2RlZmF1bHRzIjoxNDcsIi4vZHJhdyI6MTQ4LCIuL2hlbHBlcnMiOjE0OSwiLi9vcHBheGlzX2F0dHJpYnV0ZXMiOjE1MX1dLDE1MTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9e19pc1N1YnBsb3RPYmo6ITAscmFuZ2Vtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwiZml4ZWQiLCJtYXRjaCJdLGRmbHQ6Im1hdGNoIixlZGl0VHlwZToiY2FsYyJ9LHJhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InBsb3QifSx7dmFsVHlwZToiYW55IixlZGl0VHlwZToicGxvdCJ9XSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJjYWxjIn19LHt9XSwxNTI6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vYW5ub3RhdGlvbnMvYXR0cmlidXRlcyIpLGE9ZSgiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvYXR0cmlidXRlcyIpLmxpbmUsaT1lKCIuLi9kcmF3aW5nL2F0dHJpYnV0ZXMiKS5kYXNoLG89ZSgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsbD1lKCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikudGVtcGxhdGVkQXJyYXk7ZSgiLi4vLi4vY29uc3RhbnRzL2F4aXNfcGxhY2VhYmxlX29iamVjdHMiKTt0LmV4cG9ydHM9bCgic2hhcGUiLHt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImNpcmNsZSIsInJlY3QiLCJwYXRoIiwibGluZSJdLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LGxheWVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJiZWxvdyIsImFib3ZlIl0sZGZsdDoiYWJvdmUiLGVkaXRUeXBlOiJhcnJheWRyYXcifSx4cmVmOm8oe30sbi54cmVmLHt9KSx4c2l6ZW1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInNjYWxlZCIsInBpeGVsIl0sZGZsdDoic2NhbGVkIixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx4YW5jaG9yOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHgwOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHgxOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHlyZWY6byh7fSxuLnlyZWYse30pLHlzaXplbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic2NhbGVkIiwicGl4ZWwiXSxkZmx0OiJzY2FsZWQiLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHlhbmNob3I6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seTA6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seTE6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0scGF0aDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MSxlZGl0VHlwZToiYXJyYXlkcmF3In0sbGluZTp7Y29sb3I6byh7fSxhLmNvbG9yLHtlZGl0VHlwZToiYXJyYXlkcmF3In0pLHdpZHRoOm8oe30sYS53aWR0aCx7ZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0pLGRhc2g6byh7fSxpLHtlZGl0VHlwZToiYXJyYXlkcmF3In0pLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LGZpbGxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMCwwLDAsMCkiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxmaWxscnVsZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZXZlbm9kZCIsIm5vbnplcm8iXSxkZmx0OiJldmVub2RkIixlZGl0VHlwZToiYXJyYXlkcmF3In0sZWRpdGFibGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sZWRpdFR5cGU6ImFycmF5ZHJhdyJ9KX0seyIuLi8uLi9jb25zdGFudHMvYXhpc19wbGFjZWFibGVfb2JqZWN0cyI6MTc4LCIuLi8uLi9saWIvZXh0ZW5kIjoxOTYsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjIzNywiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvYXR0cmlidXRlcyI6MzMwLCIuLi9hbm5vdGF0aW9ucy9hdHRyaWJ1dGVzIjo2MCwiLi4vZHJhd2luZy9hdHRyaWJ1dGVzIjo5Nn1dLDE1MzpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9saWIiKSxhPWUoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksaT1lKCIuL2NvbnN0YW50cyIpLG89ZSgiLi9oZWxwZXJzIik7ZnVuY3Rpb24gbChlKXtyZXR1cm4gYyhlLmxpbmUud2lkdGgsZS54c2l6ZW1vZGUsZS54MCxlLngxLGUucGF0aCwhMSl9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gYyhlLmxpbmUud2lkdGgsZS55c2l6ZW1vZGUsZS55MCxlLnkxLGUucGF0aCwhMCl9ZnVuY3Rpb24gYyhlLHQscixhLGwscyl7dmFyIGM9ZS8yLHU9cztpZigicGl4ZWwiPT09dCl7dmFyIGY9bD9vLmV4dHJhY3RQYXRoQ29vcmRzKGwscz9pLnBhcmFtSXNZOmkucGFyYW1Jc1gpOltyLGFdLGQ9bi5hZ2dOdW1zKE1hdGgubWF4LG51bGwsZikscD1uLmFnZ051bXMoTWF0aC5taW4sbnVsbCxmKSxoPXA8MD9NYXRoLmFicyhwKStjOmMsZz1kPjA/ZCtjOmM7cmV0dXJue3BwYWQ6YyxwcGFkcGx1czp1P2g6ZyxwcGFkbWludXM6dT9nOmh9fXJldHVybntwcGFkOmN9fWZ1bmN0aW9uIHUoZSx0LHIsbixhKXt2YXIgbD0iY2F0ZWdvcnkiPT09ZS50eXBlfHwibXVsdGljYXRlZ29yeSI9PT1lLnR5cGU/ZS5yMmM6ZS5kMmM7aWYodm9pZCAwIT09dClyZXR1cm5bbCh0KSxsKHIpXTtpZihuKXt2YXIgcyxjLHUsZixkPTEvMCxwPS0xLzAsaD1uLm1hdGNoKGkuc2VnbWVudFJFKTtmb3IoImRhdGUiPT09ZS50eXBlJiYobD1vLmRlY29kZURhdGUobCkpLHM9MDtzPGgubGVuZ3RoO3MrKyl2b2lkIDAhPT0oYz1hW2hbc10uY2hhckF0KDApXS5kcmF3bikmJighKHU9aFtzXS5zdWJzdHIoMSkubWF0Y2goaS5wYXJhbVJFKSl8fHUubGVuZ3RoPGN8fCgoZj1sKHVbY10pKTxkJiYoZD1mKSxmPnAmJihwPWYpKSk7cmV0dXJuIHA+PWQ/W2QscF06dm9pZCAwfX10LmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fZnVsbExheW91dCxyPW4uZmlsdGVyVmlzaWJsZSh0LnNoYXBlcyk7aWYoci5sZW5ndGgmJmUuX2Z1bGxEYXRhLmxlbmd0aClmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKyl7dmFyIGMsZixkPXJbb107ZC5fZXh0cmVtZXM9e307dmFyIHA9YS5nZXRSZWZUeXBlKGQueHJlZiksaD1hLmdldFJlZlR5cGUoZC55cmVmKTtpZigicGFwZXIiIT09ZC54cmVmJiYiZG9tYWluIiE9PXApe3ZhciBnPSJwaXhlbCI9PT1kLnhzaXplbW9kZT9kLnhhbmNob3I6ZC54MCx2PSJwaXhlbCI9PT1kLnhzaXplbW9kZT9kLnhhbmNob3I6ZC54MTsoZj11KGM9YS5nZXRGcm9tSWQoZSxkLnhyZWYpLGcsdixkLnBhdGgsaS5wYXJhbUlzWCkpJiYoZC5fZXh0cmVtZXNbYy5faWRdPWEuZmluZEV4dHJlbWVzKGMsZixsKGQpKSl9aWYoInBhcGVyIiE9PWQueXJlZiYmImRvbWFpbiIhPT1oKXt2YXIgbT0icGl4ZWwiPT09ZC55c2l6ZW1vZGU/ZC55YW5jaG9yOmQueTAseT0icGl4ZWwiPT09ZC55c2l6ZW1vZGU/ZC55YW5jaG9yOmQueTE7KGY9dShjPWEuZ2V0RnJvbUlkKGUsZC55cmVmKSxtLHksZC5wYXRoLGkucGFyYW1Jc1kpKSYmKGQuX2V4dHJlbWVzW2MuX2lkXT1hLmZpbmRFeHRyZW1lcyhjLGYscyhkKSkpfX19fSx7Ii4uLy4uL2xpYiI6MjAyLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6MjQ4LCIuL2NvbnN0YW50cyI6MTU0LCIuL2hlbHBlcnMiOjE2M31dLDE1NDpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9e3NlZ21lbnRSRTovW01MSFZRQ1RTWl1bXk1MSFZRQ1RTWl0qL2cscGFyYW1SRTovW15ccyxdKy9nLHBhcmFtSXNYOntNOnswOiEwLGRyYXduOjB9LEw6ezA6ITAsZHJhd246MH0sSDp7MDohMCxkcmF3bjowfSxWOnt9LFE6ezA6ITAsMjohMCxkcmF3bjoyfSxDOnswOiEwLDI6ITAsNDohMCxkcmF3bjo0fSxUOnswOiEwLGRyYXduOjB9LFM6ezA6ITAsMjohMCxkcmF3bjoyfSxaOnt9fSxwYXJhbUlzWTp7TTp7MTohMCxkcmF3bjoxfSxMOnsxOiEwLGRyYXduOjF9LEg6e30sVjp7MDohMCxkcmF3bjowfSxROnsxOiEwLDM6ITAsZHJhd246M30sQzp7MTohMCwzOiEwLDU6ITAsZHJhd246NX0sVDp7MTohMCxkcmF3bjoxfSxTOnsxOiEwLDM6ITAsZHJhd246NX0sWjp7fX0sbnVtUGFyYW1zOntNOjIsTDoyLEg6MSxWOjEsUTo0LEM6NixUOjIsUzo0LFo6MH19fSx7fV0sMTU1OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2xpYiIpLGE9ZSgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPWUoIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpLG89ZSgiLi9hdHRyaWJ1dGVzIiksbD1lKCIuL2hlbHBlcnMiKTtmdW5jdGlvbiBzKGUsdCxyKXtmdW5jdGlvbiBpKHIsYSl7cmV0dXJuIG4uY29lcmNlKGUsdCxvLHIsYSl9aWYoaSgidmlzaWJsZSIpKXt2YXIgcz1pKCJwYXRoIiksYz1pKCJ0eXBlIixzPyJwYXRoIjoicmVjdCIpOyJwYXRoIiE9PXQudHlwZSYmZGVsZXRlIHQucGF0aCxpKCJlZGl0YWJsZSIpLGkoImxheWVyIiksaSgib3BhY2l0eSIpLGkoImZpbGxjb2xvciIpLGkoImZpbGxydWxlIiksaSgibGluZS53aWR0aCIpJiYoaSgibGluZS5jb2xvciIpLGkoImxpbmUuZGFzaCIpKTtmb3IodmFyIHU9aSgieHNpemVtb2RlIiksZj1pKCJ5c2l6ZW1vZGUiKSxkPVsieCIsInkiXSxwPTA7cDwyO3ArKyl7dmFyIGgsZyx2LG09ZFtwXSx5PW0rImFuY2hvciIseD0ieCI9PT1tP3U6ZixiPXtfZnVsbExheW91dDpyfSxfPWEuY29lcmNlUmVmKGUsdCxiLG0sdm9pZCAwLCJwYXBlciIpO2lmKCJyYW5nZSI9PT1hLmdldFJlZlR5cGUoXyk/KChoPWEuZ2V0RnJvbUlkKGIsXykpLl9zaGFwZUluZGljZXMucHVzaCh0Ll9pbmRleCksdj1sLnJhbmdlVG9TaGFwZVBvc2l0aW9uKGgpLGc9bC5zaGFwZVBvc2l0aW9uVG9SYW5nZShoKSk6Zz12PW4uaWRlbnRpdHksInBhdGgiIT09Yyl7dmFyIHc9bSsiMCIsVD1tKyIxIixrPWVbd10sTT1lW1RdO2Vbd109ZyhlW3ddLCEwKSxlW1RdPWcoZVtUXSwhMCksInBpeGVsIj09PXg/KGkodywwKSxpKFQsMTApKTooYS5jb2VyY2VQb3NpdGlvbih0LGIsaSxfLHcsLjI1KSxhLmNvZXJjZVBvc2l0aW9uKHQsYixpLF8sVCwuNzUpKSx0W3ddPXYodFt3XSksdFtUXT12KHRbVF0pLGVbd109ayxlW1RdPU19aWYoInBpeGVsIj09PXgpe3ZhciBBPWVbeV07ZVt5XT1nKGVbeV0sITApLGEuY29lcmNlUG9zaXRpb24odCxiLGksXyx5LC4yNSksdFt5XT12KHRbeV0pLGVbeV09QX19InBhdGgiPT09Yz9pKCJwYXRoIik6bi5ub25lT3JBbGwoZSx0LFsieDAiLCJ4MSIsInkwIiwieTEiXSl9fXQuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2koZSx0LHtuYW1lOiJzaGFwZXMiLGhhbmRsZUl0ZW1EZWZhdWx0czpzfSl9fSx7Ii4uLy4uL2xpYiI6MjAyLCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjI0MywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjI0OCwiLi9hdHRyaWJ1dGVzIjoxNTIsIi4vaGVscGVycyI6MTYzfV0sMTU2OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL3JlZ2lzdHJ5IiksYT1lKCIuLi8uLi9saWIiKSxpPWUoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz1lKCIuL2RyYXdfbmV3c2hhcGUvaGVscGVycyIpLnJlYWRQYXRocyxsPWUoIi4vZHJhd19uZXdzaGFwZS9kaXNwbGF5X291dGxpbmVzIikscz1lKCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaGFuZGxlX291dGxpbmUiKS5jbGVhck91dGxpbmVDb250cm9sbGVycyxjPWUoIi4uL2NvbG9yIiksdT1lKCIuLi9kcmF3aW5nIiksZj1lKCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikuYXJyYXlFZGl0b3IsZD1lKCIuLi9kcmFnZWxlbWVudCIpLHA9ZSgiLi4vLi4vbGliL3NldGN1cnNvciIpLGg9ZSgiLi9jb25zdGFudHMiKSxnPWUoIi4vaGVscGVycyIpO2Z1bmN0aW9uIHYoZSl7dmFyIHQ9ZS5fZnVsbExheW91dDtmb3IodmFyIHIgaW4gdC5fc2hhcGVVcHBlckxheWVyLnNlbGVjdEFsbCgicGF0aCIpLnJlbW92ZSgpLHQuX3NoYXBlTG93ZXJMYXllci5zZWxlY3RBbGwoInBhdGgiKS5yZW1vdmUoKSx0Ll9wbG90cyl7dmFyIG49dC5fcGxvdHNbcl0uc2hhcGVsYXllcjtuJiZuLnNlbGVjdEFsbCgicGF0aCIpLnJlbW92ZSgpfWZvcih2YXIgYT0wO2E8dC5zaGFwZXMubGVuZ3RoO2ErKyl0LnNoYXBlc1thXS52aXNpYmxlJiZ4KGUsYSl9ZnVuY3Rpb24gbShlKXtyZXR1cm4hIWUuX2Z1bGxMYXlvdXQuX2RyYXdpbmd9ZnVuY3Rpb24geShlKXtyZXR1cm4hZS5fY29udGV4dC5lZGl0cy5zaGFwZVBvc2l0aW9ufWZ1bmN0aW9uIHgoZSx0KXtlLl9mdWxsTGF5b3V0Ll9wYXBlcmRpdi5zZWxlY3RBbGwoJy5zaGFwZWxheWVyIFtkYXRhLWluZGV4PSInK3QrJyJdJykucmVtb3ZlKCk7dmFyIHI9Zy5tYWtlT3B0aW9uc0FuZFBsb3RpbmZvKGUsdCkscz1yLm9wdGlvbnMseD1yLnBsb3RpbmZvO2lmKHMuX2lucHV0JiYhMSE9PXMudmlzaWJsZSlpZigiYmVsb3ciIT09cy5sYXllcilrKGUuX2Z1bGxMYXlvdXQuX3NoYXBlVXBwZXJMYXllcik7ZWxzZSBpZigicGFwZXIiPT09cy54cmVmfHwicGFwZXIiPT09cy55cmVmKWsoZS5fZnVsbExheW91dC5fc2hhcGVMb3dlckxheWVyKTtlbHNle2lmKHguX2hhZFBsb3RpbmZvKWsoKHgubWFpbnBsb3RpbmZvfHx4KS5zaGFwZWxheWVyKTtlbHNlIGsoZS5fZnVsbExheW91dC5fc2hhcGVMb3dlckxheWVyKX1mdW5jdGlvbiBrKHIpe3ZhciBrPV8oZSxzKSxNPXsiZGF0YS1pbmRleCI6dCwiZmlsbC1ydWxlIjpzLmZpbGxydWxlLGQ6a30sQT1zLm9wYWNpdHksTD1zLmZpbGxjb2xvcixTPXMubGluZS53aWR0aD9zLmxpbmUuY29sb3I6InJnYmEoMCwwLDAsMCkiLEM9cy5saW5lLndpZHRoLE89cy5saW5lLmRhc2g7Q3x8ITAhPT1zLmVkaXRhYmxlfHwoQz01LE89InNvbGlkIik7dmFyIEQ9IloiIT09a1trLmxlbmd0aC0xXSxQPXkoZSkmJnMuZWRpdGFibGUmJmUuX2Z1bGxMYXlvdXQuX2FjdGl2ZVNoYXBlSW5kZXg9PT10O1AmJihMPUQ/InJnYmEoMCwwLDAsMCkiOmUuX2Z1bGxMYXlvdXQuYWN0aXZlc2hhcGUuZmlsbGNvbG9yLEE9ZS5fZnVsbExheW91dC5hY3RpdmVzaGFwZS5vcGFjaXR5KTt2YXIgeixSPXIuYXBwZW5kKCJwYXRoIikuYXR0cihNKS5zdHlsZSgib3BhY2l0eSIsQSkuY2FsbChjLnN0cm9rZSxTKS5jYWxsKGMuZmlsbCxMKS5jYWxsKHUuZGFzaExpbmUsTyxDKTtpZihiKFIsZSxzKSwoUHx8ZS5fY29udGV4dC5lZGl0cy5zaGFwZVBvc2l0aW9uKSYmKHo9ZihlLmxheW91dCwic2hhcGVzIixzKSksUCl7Ui5zdHlsZSh7Y3Vyc29yOiJtb3ZlIn0pO3ZhciBFPXtlbGVtZW50OlIubm9kZSgpLHBsb3RpbmZvOngsZ2Q6ZSxlZGl0SGVscGVyczp6LGlzQWN0aXZlU2hhcGU6ITB9LEk9byhrLGUpO2woSSxSLEUpfWVsc2UgZS5fY29udGV4dC5lZGl0cy5zaGFwZVBvc2l0aW9uP2Z1bmN0aW9uKGUsdCxyLG8sbCxzKXt2YXIgYyxmLHYseSx4LFQsayxNLEEsTCxTLEMsTyxELFAseixSPSJwaXhlbCI9PT1yLnhzaXplbW9kZSxFPSJwaXhlbCI9PT1yLnlzaXplbW9kZSxJPSJsaW5lIj09PXIudHlwZSxGPSJwYXRoIj09PXIudHlwZSxOPXMubW9kaWZ5SXRlbSxIPWkuZ2V0RnJvbUlkKGUsci54cmVmKSxqPWkuZ2V0UmVmVHlwZShyLnhyZWYpLEI9aS5nZXRGcm9tSWQoZSxyLnlyZWYpLFY9aS5nZXRSZWZUeXBlKHIueXJlZiksVT1nLmdldERhdGFUb1BpeGVsKGUsSCwhMSxqKSxxPWcuZ2V0RGF0YVRvUGl4ZWwoZSxCLCEwLFYpLEc9Zy5nZXRQaXhlbFRvRGF0YShlLEgsITEsaiksWj1nLmdldFBpeGVsVG9EYXRhKGUsQiwhMCxWKSxZPUk/ZnVuY3Rpb24oKXt2YXIgZT1NYXRoLm1heChyLmxpbmUud2lkdGgsMTApLG49bC5hcHBlbmQoImciKS5hdHRyKCJkYXRhLWluZGV4IixvKTtuLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLHQuYXR0cigiZCIpKS5zdHlsZSh7Y3Vyc29yOiJtb3ZlIiwic3Ryb2tlLXdpZHRoIjplLCJzdHJva2Utb3BhY2l0eSI6IjAifSk7dmFyIGE9eyJmaWxsLW9wYWNpdHkiOiIwIn0saT1NYXRoLm1heChlLzIsMTApO3JldHVybiBuLmFwcGVuZCgiY2lyY2xlIikuYXR0cih7ImRhdGEtbGluZS1wb2ludCI6InN0YXJ0LXBvaW50IixjeDpSP1Uoci54YW5jaG9yKStyLngwOlUoci54MCksY3k6RT9xKHIueWFuY2hvciktci55MDpxKHIueTApLHI6aX0pLnN0eWxlKGEpLmNsYXNzZWQoImN1cnNvci1ncmFiIiwhMCksbi5hcHBlbmQoImNpcmNsZSIpLmF0dHIoeyJkYXRhLWxpbmUtcG9pbnQiOiJlbmQtcG9pbnQiLGN4OlI/VShyLnhhbmNob3IpK3IueDE6VShyLngxKSxjeTpFP3Eoci55YW5jaG9yKS1yLnkxOnEoci55MSkscjppfSkuc3R5bGUoYSkuY2xhc3NlZCgiY3Vyc29yLWdyYWIiLCEwKSxufSgpOnQsWD17ZWxlbWVudDpZLm5vZGUoKSxnZDplLHByZXBGbjpmdW5jdGlvbihuKXtpZihtKGUpKXJldHVybjtSJiYoeD1VKHIueGFuY2hvcikpO0UmJihUPXEoci55YW5jaG9yKSk7InBhdGgiPT09ci50eXBlP1A9ci5wYXRoOihjPVI/ci54MDpVKHIueDApLGY9RT9yLnkwOnEoci55MCksdj1SP3IueDE6VShyLngxKSx5PUU/ci55MTpxKHIueTEpKTtjPHY/KEE9YyxPPSJ4MCIsTD12LEQ9IngxIik6KEE9dixPPSJ4MSIsTD1jLEQ9IngwIik7IUUmJmY8eXx8RSYmZj55PyhrPWYsUz0ieTAiLE09eSxDPSJ5MSIpOihrPXksUz0ieTEiLE09ZixDPSJ5MCIpO1cobiksJChsLHIpLGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10LnhyZWYsYT10LnlyZWYsbz1pLmdldEZyb21JZChyLG4pLGw9aS5nZXRGcm9tSWQocixhKSxzPSIiOyJwYXBlciI9PT1ufHxvLmF1dG9yYW5nZXx8KHMrPW4pOyJwYXBlciI9PT1hfHxsLmF1dG9yYW5nZXx8KHMrPWEpO3Uuc2V0Q2xpcFVybChlLHM/ImNsaXAiK3IuX2Z1bGxMYXlvdXQuX3VpZCtzOm51bGwscil9KHQscixlKSxYLm1vdmVGbj0ibW92ZSI9PT16P1E6SixYLmFsdEtleT1uLmFsdEtleX0sZG9uZUZuOmZ1bmN0aW9uKCl7aWYobShlKSlyZXR1cm47cCh0KSxLKGwpLGIodCxlLHIpLG4uY2FsbCgiX2d1aVJlbGF5b3V0IixlLHMuZ2V0VXBkYXRlT2JqKCkpfSxjbGlja0ZuOmZ1bmN0aW9uKCl7aWYobShlKSlyZXR1cm47SyhsKX19O2Z1bmN0aW9uIFcocil7aWYobShlKSl6PW51bGw7ZWxzZSBpZihJKXo9InBhdGgiPT09ci50YXJnZXQudGFnTmFtZT8ibW92ZSI6InN0YXJ0LXBvaW50Ij09PXIudGFyZ2V0LmF0dHJpYnV0ZXNbImRhdGEtbGluZS1wb2ludCJdLnZhbHVlPyJyZXNpemUtb3Zlci1zdGFydC1wb2ludCI6InJlc2l6ZS1vdmVyLWVuZC1wb2ludCI7ZWxzZXt2YXIgbj1YLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYT1uLnJpZ2h0LW4ubGVmdCxpPW4uYm90dG9tLW4udG9wLG89ci5jbGllbnRYLW4ubGVmdCxsPXIuY2xpZW50WS1uLnRvcCxzPSFGJiZhPjEwJiZpPjEwJiYhci5zaGlmdEtleT9kLmdldEN1cnNvcihvL2EsMS1sL2kpOiJtb3ZlIjtwKHQscyksej1zLnNwbGl0KCItIilbMF19fWZ1bmN0aW9uIFEobixhKXtpZigicGF0aCI9PT1yLnR5cGUpe3ZhciBpPWZ1bmN0aW9uKGUpe3JldHVybiBlfSxvPWkscz1pO1I/TigieGFuY2hvciIsci54YW5jaG9yPUcoeCtuKSk6KG89ZnVuY3Rpb24oZSl7cmV0dXJuIEcoVShlKStuKX0sSCYmImRhdGUiPT09SC50eXBlJiYobz1nLmVuY29kZURhdGUobykpKSxFP04oInlhbmNob3IiLHIueWFuY2hvcj1aKFQrYSkpOihzPWZ1bmN0aW9uKGUpe3JldHVybiBaKHEoZSkrYSl9LEImJiJkYXRlIj09PUIudHlwZSYmKHM9Zy5lbmNvZGVEYXRlKHMpKSksTigicGF0aCIsci5wYXRoPXcoUCxvLHMpKX1lbHNlIFI/TigieGFuY2hvciIsci54YW5jaG9yPUcoeCtuKSk6KE4oIngwIixyLngwPUcoYytuKSksTigieDEiLHIueDE9Ryh2K24pKSksRT9OKCJ5YW5jaG9yIixyLnlhbmNob3I9WihUK2EpKTooTigieTAiLHIueTA9WihmK2EpKSxOKCJ5MSIsci55MT1aKHkrYSkpKTt0LmF0dHIoImQiLF8oZSxyKSksJChsLHIpfWZ1bmN0aW9uIEoobixhKXtpZihGKXt2YXIgaT1mdW5jdGlvbihlKXtyZXR1cm4gZX0sbz1pLHM9aTtSP04oInhhbmNob3IiLHIueGFuY2hvcj1HKHgrbikpOihvPWZ1bmN0aW9uKGUpe3JldHVybiBHKFUoZSkrbil9LEgmJiJkYXRlIj09PUgudHlwZSYmKG89Zy5lbmNvZGVEYXRlKG8pKSksRT9OKCJ5YW5jaG9yIixyLnlhbmNob3I9WihUK2EpKToocz1mdW5jdGlvbihlKXtyZXR1cm4gWihxKGUpK2EpfSxCJiYiZGF0ZSI9PT1CLnR5cGUmJihzPWcuZW5jb2RlRGF0ZShzKSkpLE4oInBhdGgiLHIucGF0aD13KFAsbyxzKSl9ZWxzZSBpZihJKXtpZigicmVzaXplLW92ZXItc3RhcnQtcG9pbnQiPT09eil7dmFyIHU9YytuLGQ9RT9mLWE6ZithO04oIngwIixyLngwPVI/dTpHKHUpKSxOKCJ5MCIsci55MD1FP2Q6WihkKSl9ZWxzZSBpZigicmVzaXplLW92ZXItZW5kLXBvaW50Ij09PXope3ZhciBwPXYrbixoPUU/eS1hOnkrYTtOKCJ4MSIsci54MT1SP3A6RyhwKSksTigieTEiLHIueTE9RT9oOlooaCkpfX1lbHNle3ZhciBtPWZ1bmN0aW9uKGUpe3JldHVybi0xIT09ei5pbmRleE9mKGUpfSxiPW0oIm4iKSxqPW0oInMiKSxWPW0oInciKSxZPW0oImUiKSxYPWI/aythOmssVz1qP00rYTpNLFE9Vj9BK246QSxKPVk/TCtuOkw7RSYmKGImJihYPWstYSksaiYmKFc9TS1hKSksKCFFJiZXLVg+MTB8fEUmJlgtVz4xMCkmJihOKFMscltTXT1FP1g6WihYKSksTihDLHJbQ109RT9XOlooVykpKSxKLVE+MTAmJihOKE8scltPXT1SP1E6RyhRKSksTihELHJbRF09Uj9KOkcoSikpKX10LmF0dHIoImQiLF8oZSxyKSksJChsLHIpfWZ1bmN0aW9uICQoZSx0KXsoUnx8RSkmJmZ1bmN0aW9uKCl7dmFyIHI9InBhdGgiIT09dC50eXBlLG49ZS5zZWxlY3RBbGwoIi52aXN1YWwtY3VlIikuZGF0YShbMF0pO24uZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKHtmaWxsOiIjZmZmIiwiZmlsbC1ydWxlIjoiZXZlbm9kZCIsc3Ryb2tlOiIjMDAwIiwic3Ryb2tlLXdpZHRoIjoxfSkuY2xhc3NlZCgidmlzdWFsLWN1ZSIsITApO3ZhciBpPVUoUj90LnhhbmNob3I6YS5taWRSYW5nZShyP1t0LngwLHQueDFdOmcuZXh0cmFjdFBhdGhDb29yZHModC5wYXRoLGgucGFyYW1Jc1gpKSksbz1xKEU/dC55YW5jaG9yOmEubWlkUmFuZ2Uocj9bdC55MCx0LnkxXTpnLmV4dHJhY3RQYXRoQ29vcmRzKHQucGF0aCxoLnBhcmFtSXNZKSkpO2lmKGk9Zy5yb3VuZFBvc2l0aW9uRm9yU2hhcnBTdHJva2VSZW5kZXJpbmcoaSwxKSxvPWcucm91bmRQb3NpdGlvbkZvclNoYXJwU3Ryb2tlUmVuZGVyaW5nKG8sMSksUiYmRSl7dmFyIGw9Ik0iKyhpLTEtMSkrIiwiKyhvLTEtMSkrImgtOHYyaDggdjhoMnYtOCBoOHYtMmgtOCB2LThoLTIgWiI7bi5hdHRyKCJkIixsKX1lbHNlIGlmKFIpe3ZhciBzPSJNIisoaS0xLTEpKyIsIisoby05LTEpKyJ2MTggaDIgdi0xOCBaIjtuLmF0dHIoImQiLHMpfWVsc2V7dmFyIGM9Ik0iKyhpLTktMSkrIiwiKyhvLTEtMSkrImgxOCB2MiBoLTE4IFoiO24uYXR0cigiZCIsYyl9fSgpfWZ1bmN0aW9uIEsoZSl7ZS5zZWxlY3RBbGwoIi52aXN1YWwtY3VlIikucmVtb3ZlKCl9ZC5pbml0KFgpLFkubm9kZSgpLm9ubW91c2Vtb3ZlPVd9KGUsUixzLHQscix6KTohMD09PXMuZWRpdGFibGUmJlIuc3R5bGUoInBvaW50ZXItZXZlbnRzIixEfHxjLm9wYWNpdHkoTCkqQTw9LjU/InN0cm9rZSI6ImFsbCIpO1Iubm9kZSgpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZigheShlKSlyZXR1cm47dmFyIHI9K3Qubm9kZSgpLmdldEF0dHJpYnV0ZSgiZGF0YS1pbmRleCIpO2lmKHI+PTApe2lmKHI9PT1lLl9mdWxsTGF5b3V0Ll9hY3RpdmVTaGFwZUluZGV4KXJldHVybiB2b2lkIFQoZSk7ZS5fZnVsbExheW91dC5fYWN0aXZlU2hhcGVJbmRleD1yLGUuX2Z1bGxMYXlvdXQuX2RlYWN0aXZhdGVTaGFwZT1ULHYoZSl9fShlLFIpfSkpfX1mdW5jdGlvbiBiKGUsdCxyKXt2YXIgbj0oci54cmVmK3IueXJlZikucmVwbGFjZSgvcGFwZXIvZywiIikucmVwbGFjZSgvW3h5el1bMS05XSogKmRvbWFpbi9nLCIiKTt1LnNldENsaXBVcmwoZSxuPyJjbGlwIit0Ll9mdWxsTGF5b3V0Ll91aWQrbjpudWxsLHQpfWZ1bmN0aW9uIF8oZSx0KXt2YXIgcixuLG8sbCxzLGMsdSxmLGQ9dC50eXBlLHA9aS5nZXRSZWZUeXBlKHQueHJlZiksdj1pLmdldFJlZlR5cGUodC55cmVmKSxtPWkuZ2V0RnJvbUlkKGUsdC54cmVmKSx5PWkuZ2V0RnJvbUlkKGUsdC55cmVmKSx4PWUuX2Z1bGxMYXlvdXQuX3NpemU7aWYobT8iZG9tYWluIj09PXA/bj1mdW5jdGlvbihlKXtyZXR1cm4gbS5fb2Zmc2V0K20uX2xlbmd0aCplfToocj1nLnNoYXBlUG9zaXRpb25Ub1JhbmdlKG0pLG49ZnVuY3Rpb24oZSl7cmV0dXJuIG0uX29mZnNldCttLnIycChyKGUsITApKX0pOm49ZnVuY3Rpb24oZSl7cmV0dXJuIHgubCt4LncqZX0seT8iZG9tYWluIj09PXY/bD1mdW5jdGlvbihlKXtyZXR1cm4geS5fb2Zmc2V0K3kuX2xlbmd0aCooMS1lKX06KG89Zy5zaGFwZVBvc2l0aW9uVG9SYW5nZSh5KSxsPWZ1bmN0aW9uKGUpe3JldHVybiB5Ll9vZmZzZXQreS5yMnAobyhlLCEwKSl9KTpsPWZ1bmN0aW9uKGUpe3JldHVybiB4LnQreC5oKigxLWUpfSwicGF0aCI9PT1kKXJldHVybiBtJiYiZGF0ZSI9PT1tLnR5cGUmJihuPWcuZGVjb2RlRGF0ZShuKSkseSYmImRhdGUiPT09eS50eXBlJiYobD1nLmRlY29kZURhdGUobCkpLGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1lLnBhdGgsaT1lLnhzaXplbW9kZSxvPWUueXNpemVtb2RlLGw9ZS54YW5jaG9yLHM9ZS55YW5jaG9yO3JldHVybiBuLnJlcGxhY2UoaC5zZWdtZW50UkUsKGZ1bmN0aW9uKGUpe3ZhciBuPTAsYz1lLmNoYXJBdCgwKSx1PWgucGFyYW1Jc1hbY10sZj1oLnBhcmFtSXNZW2NdLGQ9aC5udW1QYXJhbXNbY10scD1lLnN1YnN0cigxKS5yZXBsYWNlKGgucGFyYW1SRSwoZnVuY3Rpb24oZSl7cmV0dXJuIHVbbl0/ZT0icGl4ZWwiPT09aT90KGwpK051bWJlcihlKTp0KGUpOmZbbl0mJihlPSJwaXhlbCI9PT1vP3IocyktTnVtYmVyKGUpOnIoZSkpLCsrbj5kJiYoZT0iWCIpLGV9KSk7cmV0dXJuIG4+ZCYmKHA9cC5yZXBsYWNlKC9bXHMsXSpYLiovLCIiKSxhLmxvZygiSWdub3JpbmcgZXh0cmEgcGFyYW1zIGluIHNlZ21lbnQgIitlKSksYytwfSkpfSh0LG4sbCk7aWYoInBpeGVsIj09PXQueHNpemVtb2RlKXt2YXIgYj1uKHQueGFuY2hvcik7cz1iK3QueDAsYz1iK3QueDF9ZWxzZSBzPW4odC54MCksYz1uKHQueDEpO2lmKCJwaXhlbCI9PT10LnlzaXplbW9kZSl7dmFyIF89bCh0LnlhbmNob3IpO3U9Xy10LnkwLGY9Xy10LnkxfWVsc2UgdT1sKHQueTApLGY9bCh0LnkxKTtpZigibGluZSI9PT1kKXJldHVybiJNIitzKyIsIit1KyJMIitjKyIsIitmO2lmKCJyZWN0Ij09PWQpcmV0dXJuIk0iK3MrIiwiK3UrIkgiK2MrIlYiK2YrIkgiK3MrIloiO3ZhciB3PShzK2MpLzIsVD0odStmKS8yLGs9TWF0aC5hYnMody1zKSxNPU1hdGguYWJzKFQtdSksQT0iQSIraysiLCIrTSxMPXcraysiLCIrVDtyZXR1cm4iTSIrTCtBKyIgMCAxLDEgIisodysiLCIrKFQtTSkpK0ErIiAwIDAsMSAiK0wrIloifWZ1bmN0aW9uIHcoZSx0LHIpe3JldHVybiBlLnJlcGxhY2UoaC5zZWdtZW50UkUsKGZ1bmN0aW9uKGUpe3ZhciBuPTAsYT1lLmNoYXJBdCgwKSxpPWgucGFyYW1Jc1hbYV0sbz1oLnBhcmFtSXNZW2FdLGw9aC5udW1QYXJhbXNbYV07cmV0dXJuIGErZS5zdWJzdHIoMSkucmVwbGFjZShoLnBhcmFtUkUsKGZ1bmN0aW9uKGUpe3JldHVybiBuPj1sfHwoaVtuXT9lPXQoZSk6b1tuXSYmKGU9cihlKSksbisrKSxlfSkpfSkpfWZ1bmN0aW9uIFQoZSl7eShlKSYmKGUuX2Z1bGxMYXlvdXQuX2FjdGl2ZVNoYXBlSW5kZXg+PTAmJihzKGUpLGRlbGV0ZSBlLl9mdWxsTGF5b3V0Ll9hY3RpdmVTaGFwZUluZGV4LHYoZSkpKX10LmV4cG9ydHM9e2RyYXc6dixkcmF3T25lOngsZXJhc2VBY3RpdmVTaGFwZTpmdW5jdGlvbihlKXtpZigheShlKSlyZXR1cm47cyhlKTt2YXIgdD1lLl9mdWxsTGF5b3V0Ll9hY3RpdmVTaGFwZUluZGV4LHI9KGUubGF5b3V0fHx7fSkuc2hhcGVzfHxbXTtpZih0PHIubGVuZ3RoKXtmb3IodmFyIGE9W10saT0wO2k8ci5sZW5ndGg7aSsrKWkhPT10JiZhLnB1c2gocltpXSk7ZGVsZXRlIGUuX2Z1bGxMYXlvdXQuX2FjdGl2ZVNoYXBlSW5kZXgsbi5jYWxsKCJfZ3VpUmVsYXlvdXQiLGUse3NoYXBlczphfSl9fX19LHsiLi4vLi4vbGliIjoyMDIsIi4uLy4uL2xpYi9zZXRjdXJzb3IiOjIyMiwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6MjM3LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6MjQ4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaGFuZGxlX291dGxpbmUiOjI1OCwiLi4vLi4vcmVnaXN0cnkiOjI5MCwiLi4vY29sb3IiOjc1LCIuLi9kcmFnZWxlbWVudCI6OTQsIi4uL2RyYXdpbmciOjk3LCIuL2NvbnN0YW50cyI6MTU0LCIuL2RyYXdfbmV3c2hhcGUvZGlzcGxheV9vdXRsaW5lcyI6MTYwLCIuL2RyYXdfbmV3c2hhcGUvaGVscGVycyI6MTYxLCIuL2hlbHBlcnMiOjE2M31dLDE1NzpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9kcmF3aW5nL2F0dHJpYnV0ZXMiKS5kYXNoLGE9ZSgiLi4vLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7dC5leHBvcnRzPXtuZXdzaGFwZTp7bGluZTp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToibm9uZSJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6NCxlZGl0VHlwZToibm9uZSJ9LGRhc2g6YSh7fSxuLHtkZmx0OiJzb2xpZCIsZWRpdFR5cGU6Im5vbmUifSksZWRpdFR5cGU6Im5vbmUifSxmaWxsY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OiJyZ2JhKDAsMCwwLDApIixlZGl0VHlwZToibm9uZSJ9LGZpbGxydWxlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJldmVub2RkIiwibm9uemVybyJdLGRmbHQ6ImV2ZW5vZGQiLGVkaXRUeXBlOiJub25lIn0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjEsZWRpdFR5cGU6Im5vbmUifSxsYXllcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYmVsb3ciLCJhYm92ZSJdLGRmbHQ6ImFib3ZlIixlZGl0VHlwZToibm9uZSJ9LGRyYXdkaXJlY3Rpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm9ydGhvIiwiaG9yaXpvbnRhbCIsInZlcnRpY2FsIiwiZGlhZ29uYWwiXSxkZmx0OiJkaWFnb25hbCIsZWRpdFR5cGU6Im5vbmUifSxlZGl0VHlwZToibm9uZSJ9LGFjdGl2ZXNoYXBlOntmaWxsY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OiJyZ2IoMjU1LDAsMjU1KSIsZWRpdFR5cGU6Im5vbmUifSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6LjUsZWRpdFR5cGU6Im5vbmUifSxlZGl0VHlwZToibm9uZSJ9fX0seyIuLi8uLi8uLi9saWIvZXh0ZW5kIjoxOTYsIi4uLy4uL2RyYXdpbmcvYXR0cmlidXRlcyI6OTZ9XSwxNTg6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPXtDSVJDTEVfU0lERVM6MzIsaTAwMDowLGkwOTA6OCxpMTgwOjE2LGkyNzA6MjQsY29zNDU6TWF0aC5jb3MoTWF0aC5QSS80KSxzaW40NTpNYXRoLnNpbihNYXRoLlBJLzQpLFNRUlQyOk1hdGguc3FydCgyKX19LHt9XSwxNTk6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vY29sb3IiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe2lmKHIoIm5ld3NoYXBlLmRyYXdkaXJlY3Rpb24iKSxyKCJuZXdzaGFwZS5sYXllciIpLHIoIm5ld3NoYXBlLmZpbGxjb2xvciIpLHIoIm5ld3NoYXBlLmZpbGxydWxlIikscigibmV3c2hhcGUub3BhY2l0eSIpLHIoIm5ld3NoYXBlLmxpbmUud2lkdGgiKSl7dmFyIGE9KGV8fHt9KS5wbG90X2JnY29sb3J8fCIjRkZGIjtyKCJuZXdzaGFwZS5saW5lLmNvbG9yIixuLmNvbnRyYXN0KGEpKSxyKCJuZXdzaGFwZS5saW5lLmRhc2giKX1yKCJhY3RpdmVzaGFwZS5maWxsY29sb3IiKSxyKCJhY3RpdmVzaGFwZS5vcGFjaXR5Iil9fSx7Ii4uLy4uL2NvbG9yIjo3NX1dLDE2MDpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9kcmFnZWxlbWVudCIpLGE9ZSgiLi4vLi4vZHJhZ2VsZW1lbnQvaGVscGVycyIpLmRyYXdNb2RlLGk9ZSgiLi4vLi4vLi4vcmVnaXN0cnkiKSxvPWUoIi4vY29uc3RhbnRzIiksbD1vLmkwMDAscz1vLmkwOTAsYz1vLmkxODAsdT1vLmkyNzAsZj1lKCIuLi8uLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaGFuZGxlX291dGxpbmUiKS5jbGVhck91dGxpbmVDb250cm9sbGVycyxkPWUoIi4vaGVscGVycyIpLHA9ZC5wb2ludHNTaGFwZVJlY3RhbmdsZSxoPWQucG9pbnRzU2hhcGVFbGxpcHNlLGc9ZC53cml0ZVBhdGhzLHY9ZSgiLi9uZXdzaGFwZXMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24gZSh0LHIsbyxkKXtkfHwoZD0wKTt2YXIgbT1vLmdkO2Z1bmN0aW9uIHkoKXtlKHQscixvLGQrKyksaCh0WzBdKSYmeCh7cmVkcmF3aW5nOiEwfSl9ZnVuY3Rpb24geChlKXtvLmlzQWN0aXZlU2hhcGU9ITE7dmFyIHQ9dihyLG8pO09iamVjdC5rZXlzKHQpLmxlbmd0aCYmaS5jYWxsKChlfHx7fSkucmVkcmF3aW5nPyJyZWxheW91dCI6Il9ndWlSZWxheW91dCIsbSx0KX12YXIgYixfLHcsVCxrLE09by5pc0FjdGl2ZVNoYXBlLEE9bS5fZnVsbExheW91dC5fem9vbWxheWVyLEw9by5kcmFnbW9kZTsoYShMKT9tLl9mdWxsTGF5b3V0Ll9kcmF3aW5nPSEwOm0uX2Z1bGxMYXlvdXQuX2FjdGl2ZVNoYXBlSW5kZXg+PTAmJmYobSksci5hdHRyKCJkIixnKHQpKSxNJiYhZCkmJihrPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07ZVtyXT1bXTtmb3IodmFyIGE9MDthPG4ubGVuZ3RoO2ErKyl7ZVtyXVthXT1bXTtmb3IodmFyIGk9MDtpPG5bYV0ubGVuZ3RoO2krKyllW3JdW2FdW2ldPW5bYV1baV19fXJldHVybiBlfShbXSx0KSxmdW5jdGlvbihlKXtiPVtdO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdLGk9IXAoYSkmJmgoYSk7YltyXT1bXTtmb3IodmFyIG89MDtvPGEubGVuZ3RoO28rKylpZigiWiIhPT1hW29dWzBdJiYoIWl8fG89PT1sfHxvPT09c3x8bz09PWN8fG89PT11KSl7dmFyIGY9YVtvXVsxXSxkPWFbb11bMl0sZz1lLmFwcGVuZCgiY2lyY2xlIikuY2xhc3NlZCgiY3Vyc29yLWdyYWIiLCEwKS5hdHRyKCJkYXRhLWkiLHIpLmF0dHIoImRhdGEtaiIsbykuYXR0cigiY3giLGYpLmF0dHIoImN5IixkKS5hdHRyKCJyIiw0KS5zdHlsZSh7Im1peC1ibGVuZC1tb2RlIjoibHVtaW5vc2l0eSIsZmlsbDoiYmxhY2siLHN0cm9rZToid2hpdGUiLCJzdHJva2Utd2lkdGgiOjF9KTtiW3JdW29dPXtlbGVtZW50Omcubm9kZSgpLGdkOm0scHJlcEZuOlMsZG9uZUZuOk8sY2xpY2tGbjpEfSxuLmluaXQoYltyXVtvXSl9fX0oQS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm91dGxpbmUtY29udHJvbGxlcnMiKSksZnVuY3Rpb24oKXtpZihfPVtdLCF0Lmxlbmd0aClyZXR1cm47X1swXT17ZWxlbWVudDpyWzBdWzBdLGdkOm0scHJlcEZuOnosZG9uZUZuOlJ9LG4uaW5pdChfWzBdKX0oKSk7ZnVuY3Rpb24gUyhlKXt3PStlLnNyY0VsZW1lbnQuZ2V0QXR0cmlidXRlKCJkYXRhLWkiKSxUPStlLnNyY0VsZW1lbnQuZ2V0QXR0cmlidXRlKCJkYXRhLWoiKSxiW3ddW1RdLm1vdmVGbj1DfWZ1bmN0aW9uIEMoZSxyKXtpZih0Lmxlbmd0aCl7dmFyIG49a1t3XVtUXVsxXSxhPWtbd11bVF1bMl0saT10W3ddLG89aS5sZW5ndGg7aWYocChpKSl7Zm9yKHZhciBsPTA7bDxvO2wrKylpZihsIT09VCl7dmFyIHM9aVtsXTtzWzFdPT09aVtUXVsxXSYmKHNbMV09bitlKSxzWzJdPT09aVtUXVsyXSYmKHNbMl09YStyKX1pZihpW1RdWzFdPW4rZSxpW1RdWzJdPWErciwhcChpKSlmb3IodmFyIGM9MDtjPG87YysrKWZvcih2YXIgdT0wO3U8aVtjXS5sZW5ndGg7dSsrKWlbY11bdV09a1t3XVtjXVt1XX1lbHNlIGlbVF1bMV09bitlLGlbVF1bMl09YStyO3koKX19ZnVuY3Rpb24gTygpe3goKX1mdW5jdGlvbiBEKGUscil7aWYoMj09PWUpe3c9K3Iuc3JjRWxlbWVudC5nZXRBdHRyaWJ1dGUoImRhdGEtaSIpLFQ9K3Iuc3JjRWxlbWVudC5nZXRBdHRyaWJ1dGUoImRhdGEtaiIpO3ZhciBuPXRbd107cChuKXx8aChuKXx8ZnVuY3Rpb24oKXtpZih0Lmxlbmd0aCYmdFt3XSYmdFt3XS5sZW5ndGgpe2Zvcih2YXIgZT1bXSxyPTA7cjx0W3ddLmxlbmd0aDtyKyspciE9PVQmJmUucHVzaCh0W3ddW3JdKTtlLmxlbmd0aD4xJiYoMiE9PWUubGVuZ3RofHwiWiIhPT1lWzFdWzBdKSYmKDA9PT1UJiYoZVswXVswXT0iTSIpLHRbd109ZSx5KCkseCgpKX19KCl9fWZ1bmN0aW9uIFAoZSxyKXshZnVuY3Rpb24oZSxyKXtpZih0Lmxlbmd0aClmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKylmb3IodmFyIGE9MDthPHRbbl0ubGVuZ3RoO2ErKylmb3IodmFyIGk9MDtpKzI8dFtuXVthXS5sZW5ndGg7aSs9Mil0W25dW2FdW2krMV09a1tuXVthXVtpKzFdK2UsdFtuXVthXVtpKzJdPWtbbl1bYV1baSsyXStyfShlLHIpLHkoKX1mdW5jdGlvbiB6KGUpeyh3PStlLnNyY0VsZW1lbnQuZ2V0QXR0cmlidXRlKCJkYXRhLWkiKSl8fCh3PTApLF9bd10ubW92ZUZuPVB9ZnVuY3Rpb24gUigpe3goKX19fSx7Ii4uLy4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9oYW5kbGVfb3V0bGluZSI6MjU4LCIuLi8uLi8uLi9yZWdpc3RyeSI6MjkwLCIuLi8uLi9kcmFnZWxlbWVudCI6OTQsIi4uLy4uL2RyYWdlbGVtZW50L2hlbHBlcnMiOjkzLCIuL2NvbnN0YW50cyI6MTU4LCIuL2hlbHBlcnMiOjE2MSwiLi9uZXdzaGFwZXMiOjE2Mn1dLDE2MTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJwYXJzZS1zdmctcGF0aCIpLGE9ZSgiLi9jb25zdGFudHMiKSxpPWEuQ0lSQ0xFX1NJREVTLG89YS5TUVJUMixsPWUoIi4uLy4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9oZWxwZXJzIikscz1sLnAycixjPWwucjJwLHU9WzAsMyw0LDUsNiwxLDJdLGY9WzAsMyw0LDEsMl07ZnVuY3Rpb24gZChlLHQpe3JldHVybiBNYXRoLmFicyhlLXQpPD0xZS02fWZ1bmN0aW9uIHAoZSx0KXt2YXIgcj10WzFdLWVbMV0sbj10WzJdLWVbMl07cmV0dXJuIE1hdGguc3FydChyKnIrbipuKX1yLndyaXRlUGF0aHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGg7aWYoIXQpcmV0dXJuIk0wLDBaIjtmb3IodmFyIHI9IiIsbj0wO248dDtuKyspZm9yKHZhciBhPWVbbl0ubGVuZ3RoLGk9MDtpPGE7aSsrKXt2YXIgbz1lW25dW2ldWzBdO2lmKCJaIj09PW8pcis9IloiO2Vsc2UgZm9yKHZhciBsPWVbbl1baV0ubGVuZ3RoLHM9MDtzPGw7cysrKXt2YXIgYz1zOyJRIj09PW98fCJTIj09PW8/Yz1mW3NdOiJDIj09PW8mJihjPXVbc10pLHIrPWVbbl1baV1bY10scz4wJiZzPGwtMSYmKHIrPSIsIil9fXJldHVybiByfSxyLnJlYWRQYXRocz1mdW5jdGlvbihlLHQscixhKXt2YXIgbyxsLHUsZj1uKGUpLGQ9W10scD0tMSxoPTAsZz0wLHY9ZnVuY3Rpb24oKXtsPWgsdT1nfTt2KCk7Zm9yKHZhciBtPTA7bTxmLmxlbmd0aDttKyspe3ZhciB5LHgsYixfLHc9W10sVD1mW21dWzBdLGs9VDtzd2l0Y2goVCl7Y2FzZSJNIjpwKyssZFtwXT1bXSxoPStmW21dWzFdLGc9K2ZbbV1bMl0sdy5wdXNoKFtrLGgsZ10pLHYoKTticmVhaztjYXNlIlEiOmNhc2UiUyI6eT0rZlttXVsxXSxiPStmW21dWzJdLGg9K2ZbbV1bM10sZz0rZlttXVs0XSx3LnB1c2goW2ssaCxnLHksYl0pO2JyZWFrO2Nhc2UiQyI6eT0rZlttXVsxXSxiPStmW21dWzJdLHg9K2ZbbV1bM10sXz0rZlttXVs0XSxoPStmW21dWzVdLGc9K2ZbbV1bNl0sdy5wdXNoKFtrLGgsZyx5LGIseCxfXSk7YnJlYWs7Y2FzZSJUIjpjYXNlIkwiOmg9K2ZbbV1bMV0sZz0rZlttXVsyXSx3LnB1c2goW2ssaCxnXSk7YnJlYWs7Y2FzZSJIIjprPSJMIixoPStmW21dWzFdLHcucHVzaChbayxoLGddKTticmVhaztjYXNlIlYiOms9IkwiLGc9K2ZbbV1bMV0sdy5wdXNoKFtrLGgsZ10pO2JyZWFrO2Nhc2UiQSI6az0iTCI7dmFyIE09K2ZbbV1bMV0sQT0rZlttXVsyXTsrZlttXVs0XXx8KE09LU0sQT0tQSk7dmFyIEw9aC1NLFM9Zztmb3Iobz0xO288PWkvMjtvKyspe3ZhciBDPTIqTWF0aC5QSSpvL2k7dy5wdXNoKFtrLEwrTSpNYXRoLmNvcyhDKSxTK0EqTWF0aC5zaW4oQyldKX1icmVhaztjYXNlIloiOmg9PT1sJiZnPT09dXx8KGg9bCxnPXUsdy5wdXNoKFtrLGgsZ10pKX1mb3IodmFyIE89KHJ8fHt9KS5kb21haW4sRD10Ll9mdWxsTGF5b3V0Ll9zaXplLFA9ciYmInBpeGVsIj09PXIueHNpemVtb2RlLHo9ciYmInBpeGVsIj09PXIueXNpemVtb2RlLFI9ITE9PT1hLEU9MDtFPHcubGVuZ3RoO0UrKyl7Zm9yKG89MDtvKzI8NztvKz0yKXt2YXIgST13W0VdW28rMV0sRj13W0VdW28rMl07dm9pZCAwIT09SSYmdm9pZCAwIT09RiYmKGg9SSxnPUYsciYmKHIueGF4aXMmJnIueGF4aXMucDJyPyhSJiYoSS09ci54YXhpcy5fb2Zmc2V0KSxJPVA/YyhyLnhheGlzLHIueGFuY2hvcikrSTpzKHIueGF4aXMsSSkpOihSJiYoSS09RC5sKSxPP0k9Ty54WzBdK0kvRC53OkkvPUQudyksci55YXhpcyYmci55YXhpcy5wMnI/KFImJihGLT1yLnlheGlzLl9vZmZzZXQpLEY9ej9jKHIueWF4aXMsci55YW5jaG9yKS1GOnMoci55YXhpcyxGKSk6KFImJihGLT1ELnQpLEY9Tz9PLnlbMV0tRi9ELmg6MS1GL0QuaCkpLHdbRV1bbysxXT1JLHdbRV1bbysyXT1GKX1kW3BdLnB1c2god1tFXS5zbGljZSgpKX19cmV0dXJuIGR9LHIucG9pbnRzU2hhcGVSZWN0YW5nbGU9ZnVuY3Rpb24oZSl7aWYoNSE9PWUubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgdD0xO3Q8Mzt0Kyspe2lmKCFkKGVbMF1bdF0tZVsxXVt0XSxlWzNdW3RdLWVbMl1bdF0pKXJldHVybiExO2lmKCFkKGVbMF1bdF0tZVszXVt0XSxlWzFdW3RdLWVbMl1bdF0pKXJldHVybiExfXJldHVybiEoIWQoZVswXVsxXSxlWzFdWzFdKSYmIWQoZVswXVsxXSxlWzNdWzFdKSkmJiEhKHAoZVswXSxlWzFdKSpwKGVbMF0sZVszXSkpfSxyLnBvaW50c1NoYXBlRWxsaXBzZT1mdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aDtpZih0IT09aSsxKXJldHVybiExO3Q9aTtmb3IodmFyIHI9MDtyPHQ7cisrKXt2YXIgbj0oMip0LXIpJXQsYT0odC8yK24pJXQsbz0odC8yK3IpJXQ7aWYoIWQocChlW3JdLGVbb10pLHAoZVtuXSxlW2FdKSkpcmV0dXJuITF9cmV0dXJuITB9LHIuaGFuZGxlRWxsaXBzZT1mdW5jdGlvbihlLHQsbil7aWYoIWUpcmV0dXJuW3Qsbl07dmFyIGE9ci5lbGxpcHNlT3Zlcih7eDA6dFswXSx5MDp0WzFdLHgxOm5bMF0seTE6blsxXX0pLGw9KGEueDErYS54MCkvMixzPShhLnkxK2EueTApLzIsYz0oYS54MS1hLngwKS8yLHU9KGEueTEtYS55MCkvMjtjfHwoYz11Lz1vKSx1fHwodT1jLz1vKTtmb3IodmFyIGY9W10sZD0wO2Q8aTtkKyspe3ZhciBwPTIqZCpNYXRoLlBJL2k7Zi5wdXNoKFtsK2MqTWF0aC5jb3MocCkscyt1Kk1hdGguc2luKHApXSl9cmV0dXJuIGZ9LHIuZWxsaXBzZU92ZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS54MCxyPWUueTAsbj1lLngxLGE9ZS55MSxpPW4tdCxsPWEtcixzPSgodC09aSkrbikvMixjPSgoci09bCkrYSkvMjtyZXR1cm57eDA6cy0oaSo9bykseTA6Yy0obCo9bykseDE6cytpLHkxOmMrbH19fSx7Ii4uLy4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9oZWxwZXJzIjoyNTksIi4vY29uc3RhbnRzIjoxNTgsInBhcnNlLXN2Zy1wYXRoIjo0OH1dLDE2MjpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9kcmFnZWxlbWVudC9oZWxwZXJzIiksYT1uLmRyYXdNb2RlLGk9bi5vcGVuTW9kZSxvPWUoIi4vY29uc3RhbnRzIiksbD1vLmkwMDAscz1vLmkwOTAsYz1vLmkxODAsdT1vLmkyNzAsZj1vLmNvczQ1LGQ9by5zaW40NSxwPWUoIi4uLy4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9oZWxwZXJzIiksaD1wLnAycixnPXAucjJwLHY9ZSgiLi4vLi4vLi4vcGxvdHMvY2FydGVzaWFuL2hhbmRsZV9vdXRsaW5lIikuY2xlYXJTZWxlY3QsbT1lKCIuL2hlbHBlcnMiKSx5PW0ucmVhZFBhdGhzLHg9bS53cml0ZVBhdGhzLGI9bS5lbGxpcHNlT3Zlcjt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZihlLmxlbmd0aCl7dmFyIHI9ZVswXVswXTtpZihyKXt2YXIgbj1yLmdldEF0dHJpYnV0ZSgiZCIpLG89dC5nZCxwPW8uX2Z1bGxMYXlvdXQubmV3c2hhcGUsbT10LnBsb3RpbmZvLF89bS54YXhpcyx3PW0ueWF4aXMsVD0hIW0uZG9tYWlufHwhbS54YXhpcyxrPSEhbS5kb21haW58fCFtLnlheGlzLE09dC5pc0FjdGl2ZVNoYXBlLEE9dC5kcmFnbW9kZSxMPShvLmxheW91dHx8e30pLnNoYXBlc3x8W107aWYoIWEoQSkmJnZvaWQgMCE9PU0pe3ZhciBTPW8uX2Z1bGxMYXlvdXQuX2FjdGl2ZVNoYXBlSW5kZXg7aWYoUzxMLmxlbmd0aClzd2l0Y2goby5fZnVsbExheW91dC5zaGFwZXNbU10udHlwZSl7Y2FzZSJyZWN0IjpBPSJkcmF3cmVjdCI7YnJlYWs7Y2FzZSJjaXJjbGUiOkE9ImRyYXdjaXJjbGUiO2JyZWFrO2Nhc2UibGluZSI6QT0iZHJhd2xpbmUiO2JyZWFrO2Nhc2UicGF0aCI6dmFyIEM9TFtTXS5wYXRofHwiIjtBPSJaIj09PUNbQy5sZW5ndGgtMV0/ImRyYXdjbG9zZWRwYXRoIjoiZHJhd29wZW5wYXRoIn19dmFyIE8sRD1pKEEpLFA9eShuLG8sbSxNKSx6PXtlZGl0YWJsZTohMCx4cmVmOlQ/InBhcGVyIjpfLl9pZCx5cmVmOms/InBhcGVyIjp3Ll9pZCxsYXllcjpwLmxheWVyLG9wYWNpdHk6cC5vcGFjaXR5LGxpbmU6e2NvbG9yOnAubGluZS5jb2xvcix3aWR0aDpwLmxpbmUud2lkdGgsZGFzaDpwLmxpbmUuZGFzaH19O2lmKER8fCh6LmZpbGxjb2xvcj1wLmZpbGxjb2xvcix6LmZpbGxydWxlPXAuZmlsbHJ1bGUpLDE9PT1QLmxlbmd0aCYmKE89UFswXSksTyYmImRyYXdyZWN0Ij09PUEpei50eXBlPSJyZWN0Iix6LngwPU9bMF1bMV0sei55MD1PWzBdWzJdLHoueDE9T1syXVsxXSx6LnkxPU9bMl1bMl07ZWxzZSBpZihPJiYiZHJhd2xpbmUiPT09QSl6LnR5cGU9ImxpbmUiLHoueDA9T1swXVsxXSx6LnkwPU9bMF1bMl0sei54MT1PWzFdWzFdLHoueTE9T1sxXVsyXTtlbHNlIGlmKE8mJiJkcmF3Y2lyY2xlIj09PUEpe3oudHlwZT0iY2lyY2xlIjt2YXIgUj1PW2xdWzFdLEU9T1tzXVsxXSxJPU9bY11bMV0sRj1PW3VdWzFdLE49T1tsXVsyXSxIPU9bc11bMl0saj1PW2NdWzJdLEI9T1t1XVsyXSxWPW0ueGF4aXMmJigiZGF0ZSI9PT1tLnhheGlzLnR5cGV8fCJsb2ciPT09bS54YXhpcy50eXBlKSxVPW0ueWF4aXMmJigiZGF0ZSI9PT1tLnlheGlzLnR5cGV8fCJsb2ciPT09bS55YXhpcy50eXBlKTtWJiYoUj1nKG0ueGF4aXMsUiksRT1nKG0ueGF4aXMsRSksST1nKG0ueGF4aXMsSSksRj1nKG0ueGF4aXMsRikpLFUmJihOPWcobS55YXhpcyxOKSxIPWcobS55YXhpcyxIKSxqPWcobS55YXhpcyxqKSxCPWcobS55YXhpcyxCKSk7dmFyIHE9KEUrRikvMixHPShOK2opLzIsWj1iKHt4MDpxLHkwOkcseDE6cSsoRi1FK0ktUikvMipmLHkxOkcrKEItSCtqLU4pLzIqZH0pO1YmJihaLngwPWgobS54YXhpcyxaLngwKSxaLngxPWgobS54YXhpcyxaLngxKSksVSYmKFoueTA9aChtLnlheGlzLFoueTApLFoueTE9aChtLnlheGlzLFoueTEpKSx6LngwPVoueDAsei55MD1aLnkwLHoueDE9Wi54MSx6LnkxPVoueTF9ZWxzZSB6LnR5cGU9InBhdGgiLF8mJncmJmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj0iZGF0ZSI9PT10LnR5cGUsYT0iZGF0ZSI9PT1yLnR5cGU7aWYoIW4mJiFhKXJldHVybiBlO2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKWZvcih2YXIgbz0wO288ZVtpXS5sZW5ndGg7bysrKWZvcih2YXIgbD0wO2wrMjxlW2ldW29dLmxlbmd0aDtsKz0yKW4mJihlW2ldW29dW2wrMV09ZVtpXVtvXVtsKzFdLnJlcGxhY2UoIiAiLCJfIikpLGEmJihlW2ldW29dW2wrMl09ZVtpXVtvXVtsKzJdLnJlcGxhY2UoIiAiLCJfIikpfShQLF8sdyksei5wYXRoPXgoUCksTz1udWxsO3Yobyk7Zm9yKHZhciBZPXQuZWRpdEhlbHBlcnMsWD0oWXx8e30pLm1vZGlmeUl0ZW0sVz1bXSxRPTA7UTxMLmxlbmd0aDtRKyspe3ZhciBKPW8uX2Z1bGxMYXlvdXQuc2hhcGVzW1FdO2lmKFdbUV09Si5faW5wdXQsdm9pZCAwIT09TSYmUT09PW8uX2Z1bGxMYXlvdXQuX2FjdGl2ZVNoYXBlSW5kZXgpe3ZhciAkPXo7c3dpdGNoKEoudHlwZSl7Y2FzZSJsaW5lIjpjYXNlInJlY3QiOmNhc2UiY2lyY2xlIjpYKCJ4MCIsJC54MCksWCgieDEiLCQueDEpLFgoInkwIiwkLnkwKSxYKCJ5MSIsJC55MSk7YnJlYWs7Y2FzZSJwYXRoIjpYKCJwYXRoIiwkLnBhdGgpfX19cmV0dXJuIHZvaWQgMD09PU0/KFcucHVzaCh6KSxXKTpZP1kuZ2V0VXBkYXRlT2JqKCk6e319fX19LHsiLi4vLi4vLi4vcGxvdHMvY2FydGVzaWFuL2hhbmRsZV9vdXRsaW5lIjoyNTgsIi4uLy4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9oZWxwZXJzIjoyNTksIi4uLy4uL2RyYWdlbGVtZW50L2hlbHBlcnMiOjkzLCIuL2NvbnN0YW50cyI6MTU4LCIuL2hlbHBlcnMiOjE2MX1dLDE2MzpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuL2NvbnN0YW50cyIpLGE9ZSgiLi4vLi4vbGliIik7ci5yYW5nZVRvU2hhcGVQb3NpdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4ibG9nIj09PWUudHlwZT9lLnIyZDpmdW5jdGlvbihlKXtyZXR1cm4gZX19LHIuc2hhcGVQb3NpdGlvblRvUmFuZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuImxvZyI9PT1lLnR5cGU/ZS5kMnI6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9fSxyLmRlY29kZURhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UmJih0PXQucmVwbGFjZSgiXyIsIiAiKSksZSh0KX19LHIuZW5jb2RlRGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodCkucmVwbGFjZSgiICIsIl8iKX19LHIuZXh0cmFjdFBhdGhDb29yZHM9ZnVuY3Rpb24oZSx0KXt2YXIgcj1bXTtyZXR1cm4gZS5tYXRjaChuLnNlZ21lbnRSRSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIGk9dFtlLmNoYXJBdCgwKV0uZHJhd247aWYodm9pZCAwIT09aSl7dmFyIG89ZS5zdWJzdHIoMSkubWF0Y2gobi5wYXJhbVJFKTshb3x8by5sZW5ndGg8aXx8ci5wdXNoKGEuY2xlYW5OdW1iZXIob1tpXSkpfX0pKSxyfSxyLmdldERhdGFUb1BpeGVsPWZ1bmN0aW9uKGUsdCxuLGEpe3ZhciBpLG89ZS5fZnVsbExheW91dC5fc2l6ZTtpZih0KWlmKCJkb21haW4iPT09YSlpPWZ1bmN0aW9uKGUpe3JldHVybiB0Ll9sZW5ndGgqKG4/MS1lOmUpK3QuX29mZnNldH07ZWxzZXt2YXIgbD1yLnNoYXBlUG9zaXRpb25Ub1JhbmdlKHQpO2k9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuX29mZnNldCt0LnIycChsKGUsITApKX0sImRhdGUiPT09dC50eXBlJiYoaT1yLmRlY29kZURhdGUoaSkpfWVsc2UgaT1uP2Z1bmN0aW9uKGUpe3JldHVybiBvLnQrby5oKigxLWUpfTpmdW5jdGlvbihlKXtyZXR1cm4gby5sK28udyplfTtyZXR1cm4gaX0sci5nZXRQaXhlbFRvRGF0YT1mdW5jdGlvbihlLHQsbixhKXt2YXIgaSxvPWUuX2Z1bGxMYXlvdXQuX3NpemU7aWYodClpZigiZG9tYWluIj09PWEpaT1mdW5jdGlvbihlKXt2YXIgcj0oZS10Ll9vZmZzZXQpL3QuX2xlbmd0aDtyZXR1cm4gbj8xLXI6cn07ZWxzZXt2YXIgbD1yLnJhbmdlVG9TaGFwZVBvc2l0aW9uKHQpO2k9ZnVuY3Rpb24oZSl7cmV0dXJuIGwodC5wMnIoZS10Ll9vZmZzZXQpKX19ZWxzZSBpPW4/ZnVuY3Rpb24oZSl7cmV0dXJuIDEtKGUtby50KS9vLmh9OmZ1bmN0aW9uKGUpe3JldHVybihlLW8ubCkvby53fTtyZXR1cm4gaX0sci5yb3VuZFBvc2l0aW9uRm9yU2hhcnBTdHJva2VSZW5kZXJpbmc9ZnVuY3Rpb24oZSx0KXt2YXIgcj0xPT09TWF0aC5yb3VuZCh0JTIpLG49TWF0aC5yb3VuZChlKTtyZXR1cm4gcj9uKy41Om59LHIubWFrZU9wdGlvbnNBbmRQbG90aW5mbz1mdW5jdGlvbihlLHQpe3ZhciByPWUuX2Z1bGxMYXlvdXQuc2hhcGVzW3RdfHx7fSxuPWUuX2Z1bGxMYXlvdXQuX3Bsb3RzW3IueHJlZityLnlyZWZdO3JldHVybiEhbj9uLl9oYWRQbG90aW5mbz0hMDoobj17fSxyLnhyZWYmJiJwYXBlciIhPT1yLnhyZWYmJihuLnhheGlzPWUuX2Z1bGxMYXlvdXRbci54cmVmKyJheGlzIl0pLHIueXJlZiYmInBhcGVyIiE9PXIueXJlZiYmKG4ueWF4aXM9ZS5fZnVsbExheW91dFtyLnlyZWYrImF4aXMiXSkpLG4ueHNpemVtb2RlPXIueHNpemVtb2RlLG4ueXNpemVtb2RlPXIueXNpemVtb2RlLG4ueGFuY2hvcj1yLnhhbmNob3Isbi55YW5jaG9yPXIueWFuY2hvcix7b3B0aW9uczpyLHBsb3RpbmZvOm59fX0seyIuLi8uLi9saWIiOjIwMiwiLi9jb25zdGFudHMiOjE1NH1dLDE2NDpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuL2RyYXciKTt0LmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToic2hhcGVzIixsYXlvdXRBdHRyaWJ1dGVzOmUoIi4vYXR0cmlidXRlcyIpLHN1cHBseUxheW91dERlZmF1bHRzOmUoIi4vZGVmYXVsdHMiKSxzdXBwbHlEcmF3TmV3U2hhcGVEZWZhdWx0czplKCIuL2RyYXdfbmV3c2hhcGUvZGVmYXVsdHMiKSxpbmNsdWRlQmFzZVBsb3Q6ZSgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2luY2x1ZGVfY29tcG9uZW50cyIpKCJzaGFwZXMiKSxjYWxjQXV0b3JhbmdlOmUoIi4vY2FsY19hdXRvcmFuZ2UiKSxkcmF3Om4uZHJhdyxkcmF3T25lOm4uZHJhd09uZX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2luY2x1ZGVfY29tcG9uZW50cyI6MjYwLCIuL2F0dHJpYnV0ZXMiOjE1MiwiLi9jYWxjX2F1dG9yYW5nZSI6MTUzLCIuL2RlZmF1bHRzIjoxNTUsIi4vZHJhdyI6MTU2LCIuL2RyYXdfbmV3c2hhcGUvZGVmYXVsdHMiOjE1OX1dLDE2NTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxhPWUoIi4uLy4uL3Bsb3RzL3BhZF9hdHRyaWJ1dGVzIiksaT1lKCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRGVlcEFsbCxvPWUoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxsPWUoIi4uLy4uL3Bsb3RzL2FuaW1hdGlvbl9hdHRyaWJ1dGVzIikscz1lKCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikudGVtcGxhdGVkQXJyYXksYz1lKCIuL2NvbnN0YW50cyIpLHU9cygic3RlcCIse3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LG1ldGhvZDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicmVzdHlsZSIsInJlbGF5b3V0IiwiYW5pbWF0ZSIsInVwZGF0ZSIsInNraXAiXSxkZmx0OiJyZXN0eWxlIn0sYXJnczp7dmFsVHlwZToiaW5mb19hcnJheSIsZnJlZUxlbmd0aDohMCxpdGVtczpbe3ZhbFR5cGU6ImFueSJ9LHt2YWxUeXBlOiJhbnkifSx7dmFsVHlwZToiYW55In1dfSxsYWJlbDp7dmFsVHlwZToic3RyaW5nIn0sdmFsdWU6e3ZhbFR5cGU6InN0cmluZyJ9LGV4ZWN1dGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9fSk7dC5leHBvcnRzPW8ocygic2xpZGVyIix7dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sYWN0aXZlOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MH0sc3RlcHM6dSxsZW5tb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmcmFjdGlvbiIsInBpeGVscyJdLGRmbHQ6ImZyYWN0aW9uIn0sbGVuOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0seDp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjMsZGZsdDowfSxwYWQ6aShhKHtlZGl0VHlwZToiYXJyYXlkcmF3In0pLHt9LHt0OntkZmx0OjIwfX0pLHhhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxkZmx0OiJsZWZ0In0seTp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjMsZGZsdDowfSx5YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZGZsdDoidG9wIn0sdHJhbnNpdGlvbjp7ZHVyYXRpb246e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxNTB9LGVhc2luZzp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOmwudHJhbnNpdGlvbi5lYXNpbmcudmFsdWVzLGRmbHQ6ImN1YmljLWluLW91dCJ9fSxjdXJyZW50dmFsdWU6e3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHhhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdLGRmbHQ6ImxlZnQifSxvZmZzZXQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxMH0scHJlZml4Ont2YWxUeXBlOiJzdHJpbmcifSxzdWZmaXg6e3ZhbFR5cGU6InN0cmluZyJ9LGZvbnQ6bih7fSl9LGZvbnQ6bih7fSksYWN0aXZlYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6Yy5ncmlwQmdBY3RpdmVDb2xvcn0sYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6Yy5yYWlsQmdDb2xvcn0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmMucmFpbEJvcmRlckNvbG9yfSxib3JkZXJ3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OmMucmFpbEJvcmRlcldpZHRofSx0aWNrbGVuOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6Yy50aWNrTGVuZ3RofSx0aWNrY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmMudGlja0NvbG9yfSx0aWNrd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSxtaW5vcnRpY2tsZW46e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDpjLm1pbm9yVGlja0xlbmd0aH19KSwiYXJyYXlkcmF3IiwiZnJvbS1yb290Iil9LHsiLi4vLi4vbGliL2V4dGVuZCI6MTk2LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjoyMzAsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjIzNywiLi4vLi4vcGxvdHMvYW5pbWF0aW9uX2F0dHJpYnV0ZXMiOjI0MiwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjoyNzYsIi4uLy4uL3Bsb3RzL3BhZF9hdHRyaWJ1dGVzIjoyODEsIi4vY29uc3RhbnRzIjoxNjZ9XSwxNjY6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPXtuYW1lOiJzbGlkZXJzIixjb250YWluZXJDbGFzc05hbWU6InNsaWRlci1jb250YWluZXIiLGdyb3VwQ2xhc3NOYW1lOiJzbGlkZXItZ3JvdXAiLGlucHV0QXJlYUNsYXNzOiJzbGlkZXItaW5wdXQtYXJlYSIscmFpbFJlY3RDbGFzczoic2xpZGVyLXJhaWwtcmVjdCIscmFpbFRvdWNoUmVjdENsYXNzOiJzbGlkZXItcmFpbC10b3VjaC1yZWN0IixncmlwUmVjdENsYXNzOiJzbGlkZXItZ3JpcC1yZWN0Iix0aWNrUmVjdENsYXNzOiJzbGlkZXItdGljay1yZWN0IixpbnB1dFByb3h5Q2xhc3M6InNsaWRlci1pbnB1dC1wcm94eSIsbGFiZWxzQ2xhc3M6InNsaWRlci1sYWJlbHMiLGxhYmVsR3JvdXBDbGFzczoic2xpZGVyLWxhYmVsLWdyb3VwIixsYWJlbENsYXNzOiJzbGlkZXItbGFiZWwiLGN1cnJlbnRWYWx1ZUNsYXNzOiJzbGlkZXItY3VycmVudC12YWx1ZSIscmFpbEhlaWdodDo1LG1lbnVJbmRleEF0dHJOYW1lOiJzbGlkZXItYWN0aXZlLWluZGV4IixhdXRvTWFyZ2luSWRSb290OiJzbGlkZXItIixtaW5XaWR0aDozMCxtaW5IZWlnaHQ6MzAsdGV4dFBhZFg6NDAsYXJyb3dPZmZzZXRYOjQscmFpbFJhZGl1czoyLHJhaWxXaWR0aDo1LHJhaWxCb3JkZXI6NCxyYWlsQm9yZGVyV2lkdGg6MSxyYWlsQm9yZGVyQ29sb3I6IiNiZWM4ZDkiLHJhaWxCZ0NvbG9yOiIjZjhmYWZjIixyYWlsSW5zZXQ6OCxzdGVwSW5zZXQ6MTAsZ3JpcFJhZGl1czoxMCxncmlwV2lkdGg6MjAsZ3JpcEhlaWdodDoyMCxncmlwQm9yZGVyOjIwLGdyaXBCb3JkZXJXaWR0aDoxLGdyaXBCb3JkZXJDb2xvcjoiI2JlYzhkOSIsZ3JpcEJnQ29sb3I6IiNmNmY4ZmEiLGdyaXBCZ0FjdGl2ZUNvbG9yOiIjZGJkZGUwIixsYWJlbFBhZGRpbmc6OCxsYWJlbE9mZnNldDowLHRpY2tXaWR0aDoxLHRpY2tDb2xvcjoiIzMzMyIsdGlja09mZnNldDoyNSx0aWNrTGVuZ3RoOjcsbWlub3JUaWNrT2Zmc2V0OjI1LG1pbm9yVGlja0NvbG9yOiIjMzMzIixtaW5vclRpY2tMZW5ndGg6NCxjdXJyZW50VmFsdWVQYWRkaW5nOjgsY3VycmVudFZhbHVlSW5zZXQ6MH19LHt9XSwxNjc6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vbGliIiksYT1lKCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxpPWUoIi4vYXR0cmlidXRlcyIpLG89ZSgiLi9jb25zdGFudHMiKS5uYW1lLGw9aS5zdGVwcztmdW5jdGlvbiBzKGUsdCxyKXtmdW5jdGlvbiBvKHIsYSl7cmV0dXJuIG4uY29lcmNlKGUsdCxpLHIsYSl9Zm9yKHZhciBsPWEoZSx0LHtuYW1lOiJzdGVwcyIsaGFuZGxlSXRlbURlZmF1bHRzOmN9KSxzPTAsdT0wO3U8bC5sZW5ndGg7dSsrKWxbdV0udmlzaWJsZSYmcysrO2lmKHM8Mj90LnZpc2libGU9ITE6bygidmlzaWJsZSIpKXt0Ll9zdGVwQ291bnQ9czt2YXIgZj10Ll92aXNpYmxlU3RlcHM9bi5maWx0ZXJWaXNpYmxlKGwpOyhsW28oImFjdGl2ZSIpXXx8e30pLnZpc2libGV8fCh0LmFjdGl2ZT1mWzBdLl9pbmRleCksbygieCIpLG8oInkiKSxuLm5vbmVPckFsbChlLHQsWyJ4IiwieSJdKSxvKCJ4YW5jaG9yIiksbygieWFuY2hvciIpLG8oImxlbiIpLG8oImxlbm1vZGUiKSxvKCJwYWQudCIpLG8oInBhZC5yIiksbygicGFkLmIiKSxvKCJwYWQubCIpLG4uY29lcmNlRm9udChvLCJmb250IixyLmZvbnQpLG8oImN1cnJlbnR2YWx1ZS52aXNpYmxlIikmJihvKCJjdXJyZW50dmFsdWUueGFuY2hvciIpLG8oImN1cnJlbnR2YWx1ZS5wcmVmaXgiKSxvKCJjdXJyZW50dmFsdWUuc3VmZml4IiksbygiY3VycmVudHZhbHVlLm9mZnNldCIpLG4uY29lcmNlRm9udChvLCJjdXJyZW50dmFsdWUuZm9udCIsdC5mb250KSksbygidHJhbnNpdGlvbi5kdXJhdGlvbiIpLG8oInRyYW5zaXRpb24uZWFzaW5nIiksbygiYmdjb2xvciIpLG8oImFjdGl2ZWJnY29sb3IiKSxvKCJib3JkZXJjb2xvciIpLG8oImJvcmRlcndpZHRoIiksbygidGlja2xlbiIpLG8oInRpY2t3aWR0aCIpLG8oInRpY2tjb2xvciIpLG8oIm1pbm9ydGlja2xlbiIpfX1mdW5jdGlvbiBjKGUsdCl7ZnVuY3Rpb24gcihyLGEpe3JldHVybiBuLmNvZXJjZShlLHQsbCxyLGEpfWlmKCJza2lwIj09PWUubWV0aG9kfHxBcnJheS5pc0FycmF5KGUuYXJncyk/cigidmlzaWJsZSIpOnQudmlzaWJsZT0hMSl7cigibWV0aG9kIikscigiYXJncyIpO3ZhciBhPXIoImxhYmVsIiwic3RlcC0iK3QuX2luZGV4KTtyKCJ2YWx1ZSIsYSkscigiZXhlY3V0ZSIpfX10LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXthKGUsdCx7bmFtZTpvLGhhbmRsZUl0ZW1EZWZhdWx0czpzfSl9fSx7Ii4uLy4uL2xpYiI6MjAyLCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjI0MywiLi9hdHRyaWJ1dGVzIjoxNjUsIi4vY29uc3RhbnRzIjoxNjZ9XSwxNjg6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiZDMiKSxhPWUoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksaT1lKCIuLi9jb2xvciIpLG89ZSgiLi4vZHJhd2luZyIpLGw9ZSgiLi4vLi4vbGliIikscz1sLnN0clRyYW5zbGF0ZSxjPWUoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLHU9ZSgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLmFycmF5RWRpdG9yLGY9ZSgiLi9jb25zdGFudHMiKSxkPWUoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKSxwPWQuTElORV9TUEFDSU5HLGg9ZC5GUk9NX1RMLGc9ZC5GUk9NX0JSO2Z1bmN0aW9uIHYoZSl7cmV0dXJuIGYuYXV0b01hcmdpbklkUm9vdCtlLl9pbmRleH1mdW5jdGlvbiBtKGUpe3JldHVybiBlLl9pbmRleH1mdW5jdGlvbiB5KGUsdCl7dmFyIHI9by50ZXN0ZXIuc2VsZWN0QWxsKCJnLiIrZi5sYWJlbEdyb3VwQ2xhc3MpLmRhdGEodC5fdmlzaWJsZVN0ZXBzKTtyLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChmLmxhYmVsR3JvdXBDbGFzcywhMCk7dmFyIGk9MCxzPTA7ci5lYWNoKChmdW5jdGlvbihlKXt2YXIgcj1fKG4uc2VsZWN0KHRoaXMpLHtzdGVwOmV9LHQpLm5vZGUoKTtpZihyKXt2YXIgYT1vLmJCb3gocik7cz1NYXRoLm1heChzLGEuaGVpZ2h0KSxpPU1hdGgubWF4KGksYS53aWR0aCl9fSkpLHIucmVtb3ZlKCk7dmFyIHU9dC5fZGltcz17fTt1LmlucHV0QXJlYVdpZHRoPU1hdGgubWF4KGYucmFpbFdpZHRoLGYuZ3JpcEhlaWdodCk7dmFyIGQ9ZS5fZnVsbExheW91dC5fc2l6ZTt1Lmx4PWQubCtkLncqdC54LHUubHk9ZC50K2QuaCooMS10LnkpLCJmcmFjdGlvbiI9PT10Lmxlbm1vZGU/dS5vdXRlckxlbmd0aD1NYXRoLnJvdW5kKGQudyp0Lmxlbik6dS5vdXRlckxlbmd0aD10Lmxlbix1LmlucHV0QXJlYVN0YXJ0PTAsdS5pbnB1dEFyZWFMZW5ndGg9TWF0aC5yb3VuZCh1Lm91dGVyTGVuZ3RoLXQucGFkLmwtdC5wYWQucik7dmFyIHA9KHUuaW5wdXRBcmVhTGVuZ3RoLTIqZi5zdGVwSW5zZXQpLyh0Ll9zdGVwQ291bnQtMSksbT1pK2YubGFiZWxQYWRkaW5nO2lmKHUubGFiZWxTdHJpZGU9TWF0aC5tYXgoMSxNYXRoLmNlaWwobS9wKSksdS5sYWJlbEhlaWdodD1zLHUuY3VycmVudFZhbHVlTWF4V2lkdGg9MCx1LmN1cnJlbnRWYWx1ZUhlaWdodD0wLHUuY3VycmVudFZhbHVlVG90YWxIZWlnaHQ9MCx1LmN1cnJlbnRWYWx1ZU1heExpbmVzPTEsdC5jdXJyZW50dmFsdWUudmlzaWJsZSl7dmFyIHk9by50ZXN0ZXIuYXBwZW5kKCJnIik7ci5lYWNoKChmdW5jdGlvbihlKXt2YXIgcj14KHksdCxlLmxhYmVsKSxuPXIubm9kZSgpJiZvLmJCb3goci5ub2RlKCkpfHx7d2lkdGg6MCxoZWlnaHQ6MH0sYT1jLmxpbmVDb3VudChyKTt1LmN1cnJlbnRWYWx1ZU1heFdpZHRoPU1hdGgubWF4KHUuY3VycmVudFZhbHVlTWF4V2lkdGgsTWF0aC5jZWlsKG4ud2lkdGgpKSx1LmN1cnJlbnRWYWx1ZUhlaWdodD1NYXRoLm1heCh1LmN1cnJlbnRWYWx1ZUhlaWdodCxNYXRoLmNlaWwobi5oZWlnaHQpKSx1LmN1cnJlbnRWYWx1ZU1heExpbmVzPU1hdGgubWF4KHUuY3VycmVudFZhbHVlTWF4TGluZXMsYSl9KSksdS5jdXJyZW50VmFsdWVUb3RhbEhlaWdodD11LmN1cnJlbnRWYWx1ZUhlaWdodCt0LmN1cnJlbnR2YWx1ZS5vZmZzZXQseS5yZW1vdmUoKX11LmhlaWdodD11LmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0K2YudGlja09mZnNldCt0LnRpY2tsZW4rZi5sYWJlbE9mZnNldCt1LmxhYmVsSGVpZ2h0K3QucGFkLnQrdC5wYWQuYjt2YXIgYj0ibGVmdCI7bC5pc1JpZ2h0QW5jaG9yKHQpJiYodS5seC09dS5vdXRlckxlbmd0aCxiPSJyaWdodCIpLGwuaXNDZW50ZXJBbmNob3IodCkmJih1Lmx4LT11Lm91dGVyTGVuZ3RoLzIsYj0iY2VudGVyIik7dmFyIHc9InRvcCI7bC5pc0JvdHRvbUFuY2hvcih0KSYmKHUubHktPXUuaGVpZ2h0LHc9ImJvdHRvbSIpLGwuaXNNaWRkbGVBbmNob3IodCkmJih1Lmx5LT11LmhlaWdodC8yLHc9Im1pZGRsZSIpLHUub3V0ZXJMZW5ndGg9TWF0aC5jZWlsKHUub3V0ZXJMZW5ndGgpLHUuaGVpZ2h0PU1hdGguY2VpbCh1LmhlaWdodCksdS5seD1NYXRoLnJvdW5kKHUubHgpLHUubHk9TWF0aC5yb3VuZCh1Lmx5KTt2YXIgVD17eTp0LnksYjp1LmhlaWdodCpnW3ddLHQ6dS5oZWlnaHQqaFt3XX07ImZyYWN0aW9uIj09PXQubGVubW9kZT8oVC5sPTAsVC54bD10LngtdC5sZW4qaFtiXSxULnI9MCxULnhyPXQueCt0LmxlbipnW2JdKTooVC54PXQueCxULmw9dS5vdXRlckxlbmd0aCpoW2JdLFQucj11Lm91dGVyTGVuZ3RoKmdbYl0pLGEuYXV0b01hcmdpbihlLHYodCksVCl9ZnVuY3Rpb24geChlLHQscil7aWYodC5jdXJyZW50dmFsdWUudmlzaWJsZSl7dmFyIG4sYSxpPXQuX2RpbXM7c3dpdGNoKHQuY3VycmVudHZhbHVlLnhhbmNob3Ipe2Nhc2UicmlnaHQiOm49aS5pbnB1dEFyZWFMZW5ndGgtZi5jdXJyZW50VmFsdWVJbnNldC1pLmN1cnJlbnRWYWx1ZU1heFdpZHRoLGE9ImxlZnQiO2JyZWFrO2Nhc2UiY2VudGVyIjpuPS41KmkuaW5wdXRBcmVhTGVuZ3RoLGE9Im1pZGRsZSI7YnJlYWs7ZGVmYXVsdDpuPWYuY3VycmVudFZhbHVlSW5zZXQsYT0ibGVmdCJ9dmFyIHM9bC5lbnN1cmVTaW5nbGUoZSwidGV4dCIsZi5sYWJlbENsYXNzLChmdW5jdGlvbihlKXtlLmF0dHIoeyJ0ZXh0LWFuY2hvciI6YSwiZGF0YS1ub3RleCI6MX0pfSkpLHU9dC5jdXJyZW50dmFsdWUucHJlZml4P3QuY3VycmVudHZhbHVlLnByZWZpeDoiIjtpZigic3RyaW5nIj09dHlwZW9mIHIpdSs9cjtlbHNle3ZhciBkPXQuc3RlcHNbdC5hY3RpdmVdLmxhYmVsLGg9dC5fZ2QuX2Z1bGxMYXlvdXQuX21ldGE7aCYmKGQ9bC50ZW1wbGF0ZVN0cmluZyhkLGgpKSx1Kz1kfXQuY3VycmVudHZhbHVlLnN1ZmZpeCYmKHUrPXQuY3VycmVudHZhbHVlLnN1ZmZpeCkscy5jYWxsKG8uZm9udCx0LmN1cnJlbnR2YWx1ZS5mb250KS50ZXh0KHUpLmNhbGwoYy5jb252ZXJ0VG9Uc3BhbnMsdC5fZ2QpO3ZhciBnPWMubGluZUNvdW50KHMpLHY9KGkuY3VycmVudFZhbHVlTWF4TGluZXMrMS1nKSp0LmN1cnJlbnR2YWx1ZS5mb250LnNpemUqcDtyZXR1cm4gYy5wb3NpdGlvblRleHQocyxuLHYpLHN9fWZ1bmN0aW9uIGIoZSx0LHIpe2wuZW5zdXJlU2luZ2xlKGUsInJlY3QiLGYuZ3JpcFJlY3RDbGFzcywoZnVuY3Rpb24obil7bi5jYWxsKE0sdCxlLHIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpfSkpLmF0dHIoe3dpZHRoOmYuZ3JpcFdpZHRoLGhlaWdodDpmLmdyaXBIZWlnaHQscng6Zi5ncmlwUmFkaXVzLHJ5OmYuZ3JpcFJhZGl1c30pLmNhbGwoaS5zdHJva2Usci5ib3JkZXJjb2xvcikuY2FsbChpLmZpbGwsci5iZ2NvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixyLmJvcmRlcndpZHRoKyJweCIpfWZ1bmN0aW9uIF8oZSx0LHIpe3ZhciBuPWwuZW5zdXJlU2luZ2xlKGUsInRleHQiLGYubGFiZWxDbGFzcywoZnVuY3Rpb24oZSl7ZS5hdHRyKHsidGV4dC1hbmNob3IiOiJtaWRkbGUiLCJkYXRhLW5vdGV4IjoxfSl9KSksYT10LnN0ZXAubGFiZWwsaT1yLl9nZC5fZnVsbExheW91dC5fbWV0YTtyZXR1cm4gaSYmKGE9bC50ZW1wbGF0ZVN0cmluZyhhLGkpKSxuLmNhbGwoby5mb250LHIuZm9udCkudGV4dChhKS5jYWxsKGMuY29udmVydFRvVHNwYW5zLHIuX2dkKSxufWZ1bmN0aW9uIHcoZSx0KXt2YXIgcj1sLmVuc3VyZVNpbmdsZShlLCJnIixmLmxhYmVsc0NsYXNzKSxhPXQuX2RpbXMsaT1yLnNlbGVjdEFsbCgiZy4iK2YubGFiZWxHcm91cENsYXNzKS5kYXRhKGEubGFiZWxTdGVwcyk7aS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZi5sYWJlbEdyb3VwQ2xhc3MsITApLGkuZXhpdCgpLnJlbW92ZSgpLGkuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyk7ci5jYWxsKF8sZSx0KSxvLnNldFRyYW5zbGF0ZShyLFModCxlLmZyYWN0aW9uKSxmLnRpY2tPZmZzZXQrdC50aWNrbGVuK3QuZm9udC5zaXplKnArZi5sYWJlbE9mZnNldCthLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0KX0pKX1mdW5jdGlvbiBUKGUsdCxyLG4sYSl7dmFyIGk9TWF0aC5yb3VuZChuKihyLl9zdGVwQ291bnQtMSkpLG89ci5fdmlzaWJsZVN0ZXBzW2ldLl9pbmRleDtvIT09ci5hY3RpdmUmJmsoZSx0LHIsbywhMCxhKX1mdW5jdGlvbiBrKGUsdCxyLG4saSxvKXt2YXIgbD1yLmFjdGl2ZTtyLmFjdGl2ZT1uLHUoZS5sYXlvdXQsZi5uYW1lLHIpLmFwcGx5VXBkYXRlKCJhY3RpdmUiLG4pO3ZhciBzPXIuc3RlcHNbci5hY3RpdmVdO3QuY2FsbChMLHIsbyksdC5jYWxsKHgsciksZS5lbWl0KCJwbG90bHlfc2xpZGVyY2hhbmdlIix7c2xpZGVyOnIsc3RlcDpyLnN0ZXBzW3IuYWN0aXZlXSxpbnRlcmFjdGlvbjppLHByZXZpb3VzQWN0aXZlOmx9KSxzJiZzLm1ldGhvZCYmaSYmKHQuX25leHRNZXRob2Q/KHQuX25leHRNZXRob2Quc3RlcD1zLHQuX25leHRNZXRob2QuZG9DYWxsYmFjaz1pLHQuX25leHRNZXRob2QuZG9UcmFuc2l0aW9uPW8pOih0Ll9uZXh0TWV0aG9kPXtzdGVwOnMsZG9DYWxsYmFjazppLGRvVHJhbnNpdGlvbjpvfSx0Ll9uZXh0TWV0aG9kUmFmPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKGZ1bmN0aW9uKCl7dmFyIHI9dC5fbmV4dE1ldGhvZC5zdGVwO3IubWV0aG9kJiYoci5leGVjdXRlJiZhLmV4ZWN1dGVBUElDb21tYW5kKGUsci5tZXRob2Qsci5hcmdzKSx0Ll9uZXh0TWV0aG9kPW51bGwsdC5fbmV4dE1ldGhvZFJhZj1udWxsKX0pKSkpfWZ1bmN0aW9uIE0oZSx0LHIpe3ZhciBhPXIubm9kZSgpLG89bi5zZWxlY3QodCk7ZnVuY3Rpb24gbCgpe3JldHVybiByLmRhdGEoKVswXX1lLm9uKCJtb3VzZWRvd24iLChmdW5jdGlvbigpe3ZhciBlPWwoKTt0LmVtaXQoInBsb3RseV9zbGlkZXJzdGFydCIse3NsaWRlcjplfSk7dmFyIHM9ci5zZWxlY3QoIi4iK2YuZ3JpcFJlY3RDbGFzcyk7bi5ldmVudC5zdG9wUHJvcGFnYXRpb24oKSxuLmV2ZW50LnByZXZlbnREZWZhdWx0KCkscy5jYWxsKGkuZmlsbCxlLmFjdGl2ZWJnY29sb3IpO3ZhciBjPUMoZSxuLm1vdXNlKGEpWzBdKTtUKHQscixlLGMsITApLGUuX2RyYWdnaW5nPSEwLG8ub24oIm1vdXNlbW92ZSIsKGZ1bmN0aW9uKCl7dmFyIGU9bCgpLGk9QyhlLG4ubW91c2UoYSlbMF0pO1QodCxyLGUsaSwhMSl9KSksby5vbigibW91c2V1cCIsKGZ1bmN0aW9uKCl7dmFyIGU9bCgpO2UuX2RyYWdnaW5nPSExLHMuY2FsbChpLmZpbGwsZS5iZ2NvbG9yKSxvLm9uKCJtb3VzZXVwIixudWxsKSxvLm9uKCJtb3VzZW1vdmUiLG51bGwpLHQuZW1pdCgicGxvdGx5X3NsaWRlcmVuZCIse3NsaWRlcjplLHN0ZXA6ZS5zdGVwc1tlLmFjdGl2ZV19KX0pKX0pKX1mdW5jdGlvbiBBKGUsdCl7dmFyIHI9ZS5zZWxlY3RBbGwoInJlY3QuIitmLnRpY2tSZWN0Q2xhc3MpLmRhdGEodC5fdmlzaWJsZVN0ZXBzKSxhPXQuX2RpbXM7ci5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoZi50aWNrUmVjdENsYXNzLCEwKSxyLmV4aXQoKS5yZW1vdmUoKSxyLmF0dHIoe3dpZHRoOnQudGlja3dpZHRoKyJweCIsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSksci5lYWNoKChmdW5jdGlvbihlLHIpe3ZhciBsPXIlYS5sYWJlbFN0cmlkZT09MCxzPW4uc2VsZWN0KHRoaXMpO3MuYXR0cih7aGVpZ2h0Omw/dC50aWNrbGVuOnQubWlub3J0aWNrbGVufSkuY2FsbChpLmZpbGwsdC50aWNrY29sb3IpLG8uc2V0VHJhbnNsYXRlKHMsUyh0LHIvKHQuX3N0ZXBDb3VudC0xKSktLjUqdC50aWNrd2lkdGgsKGw/Zi50aWNrT2Zmc2V0OmYubWlub3JUaWNrT2Zmc2V0KSthLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0KX0pKX1mdW5jdGlvbiBMKGUsdCxyKXtmb3IodmFyIG49ZS5zZWxlY3QoInJlY3QuIitmLmdyaXBSZWN0Q2xhc3MpLGE9MCxpPTA7aTx0Ll9zdGVwQ291bnQ7aSsrKWlmKHQuX3Zpc2libGVTdGVwc1tpXS5faW5kZXg9PT10LmFjdGl2ZSl7YT1pO2JyZWFrfXZhciBvPVModCxhLyh0Ll9zdGVwQ291bnQtMSkpO2lmKCF0Ll9pbnZva2luZ0NvbW1hbmQpe3ZhciBsPW47ciYmdC50cmFuc2l0aW9uLmR1cmF0aW9uPjAmJihsPWwudHJhbnNpdGlvbigpLmR1cmF0aW9uKHQudHJhbnNpdGlvbi5kdXJhdGlvbikuZWFzZSh0LnRyYW5zaXRpb24uZWFzaW5nKSksbC5hdHRyKCJ0cmFuc2Zvcm0iLHMoby0uNSpmLmdyaXBXaWR0aCx0Ll9kaW1zLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0KSl9fWZ1bmN0aW9uIFMoZSx0KXt2YXIgcj1lLl9kaW1zO3JldHVybiByLmlucHV0QXJlYVN0YXJ0K2Yuc3RlcEluc2V0KyhyLmlucHV0QXJlYUxlbmd0aC0yKmYuc3RlcEluc2V0KSpNYXRoLm1pbigxLE1hdGgubWF4KDAsdCkpfWZ1bmN0aW9uIEMoZSx0KXt2YXIgcj1lLl9kaW1zO3JldHVybiBNYXRoLm1pbigxLE1hdGgubWF4KDAsKHQtZi5zdGVwSW5zZXQtci5pbnB1dEFyZWFTdGFydCkvKHIuaW5wdXRBcmVhTGVuZ3RoLTIqZi5zdGVwSW5zZXQtMipyLmlucHV0QXJlYVN0YXJ0KSkpfWZ1bmN0aW9uIE8oZSx0LHIpe3ZhciBuPXIuX2RpbXMsYT1sLmVuc3VyZVNpbmdsZShlLCJyZWN0IixmLnJhaWxUb3VjaFJlY3RDbGFzcywoZnVuY3Rpb24obil7bi5jYWxsKE0sdCxlLHIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpfSkpO2EuYXR0cih7d2lkdGg6bi5pbnB1dEFyZWFMZW5ndGgsaGVpZ2h0Ok1hdGgubWF4KG4uaW5wdXRBcmVhV2lkdGgsZi50aWNrT2Zmc2V0K3IudGlja2xlbituLmxhYmVsSGVpZ2h0KX0pLmNhbGwoaS5maWxsLHIuYmdjb2xvcikuYXR0cigib3BhY2l0eSIsMCksby5zZXRUcmFuc2xhdGUoYSwwLG4uY3VycmVudFZhbHVlVG90YWxIZWlnaHQpfWZ1bmN0aW9uIEQoZSx0KXt2YXIgcj10Ll9kaW1zLG49ci5pbnB1dEFyZWFMZW5ndGgtMipmLnJhaWxJbnNldCxhPWwuZW5zdXJlU2luZ2xlKGUsInJlY3QiLGYucmFpbFJlY3RDbGFzcyk7YS5hdHRyKHt3aWR0aDpuLGhlaWdodDpmLnJhaWxXaWR0aCxyeDpmLnJhaWxSYWRpdXMscnk6Zi5yYWlsUmFkaXVzLCJzaGFwZS1yZW5kZXJpbmciOiJjcmlzcEVkZ2VzIn0pLmNhbGwoaS5zdHJva2UsdC5ib3JkZXJjb2xvcikuY2FsbChpLmZpbGwsdC5iZ2NvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIix0LmJvcmRlcndpZHRoKyJweCIpLG8uc2V0VHJhbnNsYXRlKGEsZi5yYWlsSW5zZXQsLjUqKHIuaW5wdXRBcmVhV2lkdGgtZi5yYWlsV2lkdGgpK3IuY3VycmVudFZhbHVlVG90YWxIZWlnaHQpfXQuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1lLl9mdWxsTGF5b3V0LHI9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZVtmLm5hbWVdLG49W10sYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgaT1yW2FdO2kudmlzaWJsZSYmKGkuX2dkPXQsbi5wdXNoKGkpKX1yZXR1cm4gbn0odCxlKSxpPXQuX2luZm9sYXllci5zZWxlY3RBbGwoImcuIitmLmNvbnRhaW5lckNsYXNzTmFtZSkuZGF0YShyLmxlbmd0aD4wP1swXTpbXSk7ZnVuY3Rpb24gbCh0KXt0Ll9jb21tYW5kT2JzZXJ2ZXImJih0Ll9jb21tYW5kT2JzZXJ2ZXIucmVtb3ZlKCksZGVsZXRlIHQuX2NvbW1hbmRPYnNlcnZlciksYS5hdXRvTWFyZ2luKGUsdih0KSl9aWYoaS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZi5jb250YWluZXJDbGFzc05hbWUsITApLnN0eWxlKCJjdXJzb3IiLCJldy1yZXNpemUiKSxpLmV4aXQoKS5lYWNoKChmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy4iK2YuZ3JvdXBDbGFzc05hbWUpLmVhY2gobCl9KSkucmVtb3ZlKCksMCE9PXIubGVuZ3RoKXt2YXIgcz1pLnNlbGVjdEFsbCgiZy4iK2YuZ3JvdXBDbGFzc05hbWUpLmRhdGEocixtKTtzLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChmLmdyb3VwQ2xhc3NOYW1lLCEwKSxzLmV4aXQoKS5lYWNoKGwpLnJlbW92ZSgpO2Zvcih2YXIgYz0wO2M8ci5sZW5ndGg7YysrKXt2YXIgdT1yW2NdO3koZSx1KX1zLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpOyFmdW5jdGlvbihlKXt2YXIgdD1lLl9kaW1zO3QubGFiZWxTdGVwcz1bXTtmb3IodmFyIHI9ZS5fc3RlcENvdW50LG49MDtuPHI7bis9dC5sYWJlbFN0cmlkZSl0LmxhYmVsU3RlcHMucHVzaCh7ZnJhY3Rpb246bi8oci0xKSxzdGVwOmUuX3Zpc2libGVTdGVwc1tuXX0pfSh0KSxhLm1hbmFnZUNvbW1hbmRPYnNlcnZlcihlLHQsdC5fdmlzaWJsZVN0ZXBzLChmdW5jdGlvbih0KXt2YXIgbj1yLmRhdGEoKVswXTtuLmFjdGl2ZSE9PXQuaW5kZXgmJihuLl9kcmFnZ2luZ3x8ayhlLHIsbix0LmluZGV4LCExLCEwKSl9KSksZnVuY3Rpb24oZSx0LHIpeyhyLnN0ZXBzW3IuYWN0aXZlXXx8e30pLnZpc2libGV8fChyLmFjdGl2ZT1yLl92aXNpYmxlU3RlcHNbMF0uX2luZGV4KTt0LmNhbGwoeCxyKS5jYWxsKEQscikuY2FsbCh3LHIpLmNhbGwoQSxyKS5jYWxsKE8sZSxyKS5jYWxsKGIsZSxyKTt2YXIgbj1yLl9kaW1zO28uc2V0VHJhbnNsYXRlKHQsbi5seCtyLnBhZC5sLG4ubHkrci5wYWQudCksdC5jYWxsKEwsciwhMSksdC5jYWxsKHgscil9KGUsbi5zZWxlY3QodGhpcyksdCl9KSl9fX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IjoxNzcsIi4uLy4uL2xpYiI6MjAyLCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjIyNCwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6MjM3LCIuLi8uLi9wbG90cy9wbG90cyI6MjgyLCIuLi9jb2xvciI6NzUsIi4uL2RyYXdpbmciOjk3LCIuL2NvbnN0YW50cyI6MTY2LGQzOjl9XSwxNjk6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi9jb25zdGFudHMiKTt0LmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZTpuLm5hbWUsbGF5b3V0QXR0cmlidXRlczplKCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czplKCIuL2RlZmF1bHRzIiksZHJhdzplKCIuL2RyYXciKX19LHsiLi9hdHRyaWJ1dGVzIjoxNjUsIi4vY29uc3RhbnRzIjoxNjYsIi4vZGVmYXVsdHMiOjE2NywiLi9kcmF3IjoxNjh9XSwxNzA6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiZDMiKSxhPWUoImZhc3QtaXNudW1lcmljIiksaT1lKCIuLi8uLi9wbG90cy9wbG90cyIpLG89ZSgiLi4vLi4vcmVnaXN0cnkiKSxsPWUoIi4uLy4uL2xpYiIpLHM9bC5zdHJUcmFuc2xhdGUsYz1lKCIuLi9kcmF3aW5nIiksdT1lKCIuLi9jb2xvciIpLGY9ZSgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksZD1lKCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIikscD1lKCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuT1BQT1NJVEVfU0lERSxoPS8gW1hZXVswLTldKiAvO3QuZXhwb3J0cz17ZHJhdzpmdW5jdGlvbihlLHQscil7dmFyIGcsdj1yLnByb3BDb250YWluZXIsbT1yLnByb3BOYW1lLHk9ci5wbGFjZWhvbGRlcix4PXIudHJhY2VJbmRleCxiPXIuYXZvaWR8fHt9LF89ci5hdHRyaWJ1dGVzLHc9ci50cmFuc2Zvcm0sVD1yLmNvbnRhaW5lckdyb3VwLGs9ZS5fZnVsbExheW91dCxNPTEsQT0hMSxMPXYudGl0bGUsUz0oTCYmTC50ZXh0P0wudGV4dDoiIikudHJpbSgpLEM9TCYmTC5mb250P0wuZm9udDp7fSxPPUMuZmFtaWx5LEQ9Qy5zaXplLFA9Qy5jb2xvcjsidGl0bGUudGV4dCI9PT1tP2c9InRpdGxlVGV4dCI6LTEhPT1tLmluZGV4T2YoImF4aXMiKT9nPSJheGlzVGl0bGVUZXh0IjptLmluZGV4T2YoITApJiYoZz0iY29sb3JiYXJUaXRsZVRleHQiKTt2YXIgej1lLl9jb250ZXh0LmVkaXRzW2ddOyIiPT09Uz9NPTA6Uy5yZXBsYWNlKGgsIiAlICIpPT09eS5yZXBsYWNlKGgsIiAlICIpJiYoTT0uMixBPSEwLHp8fChTPSIiKSksci5fbWV0YT9TPWwudGVtcGxhdGVTdHJpbmcoUyxyLl9tZXRhKTprLl9tZXRhJiYoUz1sLnRlbXBsYXRlU3RyaW5nKFMsay5fbWV0YSkpO3ZhciBSPVN8fHo7VHx8KFQ9bC5lbnN1cmVTaW5nbGUoay5faW5mb2xheWVyLCJnIiwiZy0iK3QpKTt2YXIgRT1ULnNlbGVjdEFsbCgidGV4dCIpLmRhdGEoUj9bMF06W10pO2lmKEUuZW50ZXIoKS5hcHBlbmQoInRleHQiKSxFLnRleHQoUykuYXR0cigiY2xhc3MiLHQpLEUuZXhpdCgpLnJlbW92ZSgpLCFSKXJldHVybiBUO2Z1bmN0aW9uIEkoZSl7bC5zeW5jT3JBc3luYyhbRixOXSxlKX1mdW5jdGlvbiBGKHQpe3ZhciByO3JldHVybiB3PyhyPSIiLHcucm90YXRlJiYocis9InJvdGF0ZSgiK1t3LnJvdGF0ZSxfLngsXy55XSsiKSIpLHcub2Zmc2V0JiYocis9cygwLHcub2Zmc2V0KSkpOnI9bnVsbCx0LmF0dHIoInRyYW5zZm9ybSIsciksdC5zdHlsZSh7ImZvbnQtZmFtaWx5IjpPLCJmb250LXNpemUiOm4ucm91bmQoRCwyKSsicHgiLGZpbGw6dS5yZ2IoUCksb3BhY2l0eTpNKnUub3BhY2l0eShQKSwiZm9udC13ZWlnaHQiOmkuZm9udFdlaWdodH0pLmF0dHIoXykuY2FsbChmLmNvbnZlcnRUb1RzcGFucyxlKSxpLnByZXZpb3VzUHJvbWlzZXMoZSl9ZnVuY3Rpb24gTihlKXt2YXIgdD1uLnNlbGVjdChlLm5vZGUoKS5wYXJlbnROb2RlKTtpZihiJiZiLnNlbGVjdGlvbiYmYi5zaWRlJiZTKXt0LmF0dHIoInRyYW5zZm9ybSIsbnVsbCk7dmFyIHI9cFtiLnNpZGVdLGk9ImxlZnQiPT09Yi5zaWRlfHwidG9wIj09PWIuc2lkZT8tMToxLG89YShiLnBhZCk/Yi5wYWQ6Mix1PWMuYkJveCh0Lm5vZGUoKSksZj17bGVmdDowLHRvcDowLHJpZ2h0Omsud2lkdGgsYm90dG9tOmsuaGVpZ2h0fSxkPWIubWF4U2hpZnR8fGkqKGZbYi5zaWRlXS11W2Iuc2lkZV0pLGg9MDtpZihkPDApaD1kO2Vsc2V7dmFyIGc9Yi5vZmZzZXRMZWZ0fHwwLHY9Yi5vZmZzZXRUb3B8fDA7dS5sZWZ0LT1nLHUucmlnaHQtPWcsdS50b3AtPXYsdS5ib3R0b20tPXYsYi5zZWxlY3Rpb24uZWFjaCgoZnVuY3Rpb24oKXt2YXIgZT1jLmJCb3godGhpcyk7bC5iQm94SW50ZXJzZWN0KHUsZSxvKSYmKGg9TWF0aC5tYXgoaCxpKihlW2Iuc2lkZV0tdVtyXSkrbykpfSkpLGg9TWF0aC5taW4oZCxoKX1pZihoPjB8fGQ8MCl7dmFyIG09e2xlZnQ6Wy1oLDBdLHJpZ2h0OltoLDBdLHRvcDpbMCwtaF0sYm90dG9tOlswLGhdfVtiLnNpZGVdO3QuYXR0cigidHJhbnNmb3JtIixzKG1bMF0sbVsxXSkpfX19cmV0dXJuIEUuY2FsbChJKSx6JiYoUz9FLm9uKCIub3BhY2l0eSIsbnVsbCk6KE09MCxBPSEwLEUudGV4dCh5KS5vbigibW91c2VvdmVyLm9wYWNpdHkiLChmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihkLlNIT1dfUExBQ0VIT0xERVIpLnN0eWxlKCJvcGFjaXR5IiwxKX0pKS5vbigibW91c2VvdXQub3BhY2l0eSIsKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKGQuSElERV9QTEFDRUhPTERFUikuc3R5bGUoIm9wYWNpdHkiLDApfSkpKSxFLmNhbGwoZi5tYWtlRWRpdGFibGUse2dkOmV9KS5vbigiZWRpdCIsKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PXg/by5jYWxsKCJfZ3VpUmVzdHlsZSIsZSxtLHQseCk6by5jYWxsKCJfZ3VpUmVsYXlvdXQiLGUsbSx0KX0pKS5vbigiY2FuY2VsIiwoZnVuY3Rpb24oKXt0aGlzLnRleHQodGhpcy5hdHRyKCJkYXRhLXVuZm9ybWF0dGVkIikpLmNhbGwoSSl9KSkub24oImlucHV0IiwoZnVuY3Rpb24oZSl7dGhpcy50ZXh0KGV8fCIgIikuY2FsbChmLnBvc2l0aW9uVGV4dCxfLngsXy55KX0pKSksRS5jbGFzc2VkKCJqcy1wbGFjZWhvbGRlciIsQSksVH19fSx7Ii4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjE3NywiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyI6MTgwLCIuLi8uLi9saWIiOjIwMiwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjoyMjQsIi4uLy4uL3Bsb3RzL3Bsb3RzIjoyODIsIi4uLy4uL3JlZ2lzdHJ5IjoyOTAsIi4uL2NvbG9yIjo3NSwiLi4vZHJhd2luZyI6OTcsZDM6OSwiZmFzdC1pc251bWVyaWMiOjExfV0sMTcxOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGE9ZSgiLi4vY29sb3IvYXR0cmlidXRlcyIpLGk9ZSgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsbz1lKCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsbD1lKCIuLi8uLi9wbG90cy9wYWRfYXR0cmlidXRlcyIpLHM9ZSgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5LGM9cygiYnV0dG9uIix7dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiJ9LG1ldGhvZDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicmVzdHlsZSIsInJlbGF5b3V0IiwiYW5pbWF0ZSIsInVwZGF0ZSIsInNraXAiXSxkZmx0OiJyZXN0eWxlIn0sYXJnczp7dmFsVHlwZToiaW5mb19hcnJheSIsZnJlZUxlbmd0aDohMCxpdGVtczpbe3ZhbFR5cGU6ImFueSJ9LHt2YWxUeXBlOiJhbnkifSx7dmFsVHlwZToiYW55In1dfSxhcmdzMjp7dmFsVHlwZToiaW5mb19hcnJheSIsZnJlZUxlbmd0aDohMCxpdGVtczpbe3ZhbFR5cGU6ImFueSJ9LHt2YWxUeXBlOiJhbnkifSx7dmFsVHlwZToiYW55In1dfSxsYWJlbDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIifSxleGVjdXRlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfX0pO3QuZXhwb3J0cz1vKHMoInVwZGF0ZW1lbnUiLHtfYXJyYXlBdHRyUmVnZXhwczpbL151cGRhdGVtZW51c1xbKDB8WzEtOV1bMC05XSspXF1cLmJ1dHRvbnMvXSx2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIn0sdHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZHJvcGRvd24iLCJidXR0b25zIl0sZGZsdDoiZHJvcGRvd24ifSxkaXJlY3Rpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxlZnQiLCJyaWdodCIsInVwIiwiZG93biJdLGRmbHQ6ImRvd24ifSxhY3RpdmU6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjotMSxkZmx0OjB9LHNob3dhY3RpdmU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LGJ1dHRvbnM6Yyx4Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMixtYXg6MyxkZmx0Oi0uMDV9LHhhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxkZmx0OiJyaWdodCJ9LHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGRmbHQ6MX0seWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGRmbHQ6InRvcCJ9LHBhZDppKGwoe2VkaXRUeXBlOiJhcnJheWRyYXcifSkse30pLGZvbnQ6bih7fSksYmdjb2xvcjp7dmFsVHlwZToiY29sb3IifSxib3JkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS5ib3JkZXJMaW5lfSxib3JkZXJ3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9fSksImFycmF5ZHJhdyIsImZyb20tcm9vdCIpfSx7Ii4uLy4uL2xpYi9leHRlbmQiOjE5NiwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6MjMwLCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjoyMzcsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6Mjc2LCIuLi8uLi9wbG90cy9wYWRfYXR0cmlidXRlcyI6MjgxLCIuLi9jb2xvci9hdHRyaWJ1dGVzIjo3NH1dLDE3MjpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9e25hbWU6InVwZGF0ZW1lbnVzIixjb250YWluZXJDbGFzc05hbWU6InVwZGF0ZW1lbnUtY29udGFpbmVyIixoZWFkZXJHcm91cENsYXNzTmFtZToidXBkYXRlbWVudS1oZWFkZXItZ3JvdXAiLGhlYWRlckNsYXNzTmFtZToidXBkYXRlbWVudS1oZWFkZXIiLGhlYWRlckFycm93Q2xhc3NOYW1lOiJ1cGRhdGVtZW51LWhlYWRlci1hcnJvdyIsZHJvcGRvd25CdXR0b25Hcm91cENsYXNzTmFtZToidXBkYXRlbWVudS1kcm9wZG93bi1idXR0b24tZ3JvdXAiLGRyb3Bkb3duQnV0dG9uQ2xhc3NOYW1lOiJ1cGRhdGVtZW51LWRyb3Bkb3duLWJ1dHRvbiIsYnV0dG9uQ2xhc3NOYW1lOiJ1cGRhdGVtZW51LWJ1dHRvbiIsaXRlbVJlY3RDbGFzc05hbWU6InVwZGF0ZW1lbnUtaXRlbS1yZWN0IixpdGVtVGV4dENsYXNzTmFtZToidXBkYXRlbWVudS1pdGVtLXRleHQiLG1lbnVJbmRleEF0dHJOYW1lOiJ1cGRhdGVtZW51LWFjdGl2ZS1pbmRleCIsYXV0b01hcmdpbklkUm9vdDoidXBkYXRlbWVudS0iLGJsYW5rSGVhZGVyT3B0czp7bGFiZWw6IiAgIn0sbWluV2lkdGg6MzAsbWluSGVpZ2h0OjMwLHRleHRQYWRYOjI0LGFycm93UGFkWDoxNixyeDoyLHJ5OjIsdGV4dE9mZnNldFg6MTIsdGV4dE9mZnNldFk6MyxhcnJvd09mZnNldFg6NCxnYXBCdXR0b25IZWFkZXI6NSxnYXBCdXR0b246MixhY3RpdmVDb2xvcjoiI0Y0RkFGRiIsaG92ZXJDb2xvcjoiI0Y0RkFGRiIsYXJyb3dTeW1ib2w6e2xlZnQ6Ilx1MjVjNCIscmlnaHQ6Ilx1MjViYSIsdXA6Ilx1MjViMiIsZG93bjoiXHUyNWJjIn19fSx7fV0sMTczOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2xpYiIpLGE9ZSgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksaT1lKCIuL2F0dHJpYnV0ZXMiKSxvPWUoIi4vY29uc3RhbnRzIikubmFtZSxsPWkuYnV0dG9ucztmdW5jdGlvbiBzKGUsdCxyKXtmdW5jdGlvbiBvKHIsYSl7cmV0dXJuIG4uY29lcmNlKGUsdCxpLHIsYSl9bygidmlzaWJsZSIsYShlLHQse25hbWU6ImJ1dHRvbnMiLGhhbmRsZUl0ZW1EZWZhdWx0czpjfSkubGVuZ3RoPjApJiYobygiYWN0aXZlIiksbygiZGlyZWN0aW9uIiksbygidHlwZSIpLG8oInNob3dhY3RpdmUiKSxvKCJ4IiksbygieSIpLG4ubm9uZU9yQWxsKGUsdCxbIngiLCJ5Il0pLG8oInhhbmNob3IiKSxvKCJ5YW5jaG9yIiksbygicGFkLnQiKSxvKCJwYWQuciIpLG8oInBhZC5iIiksbygicGFkLmwiKSxuLmNvZXJjZUZvbnQobywiZm9udCIsci5mb250KSxvKCJiZ2NvbG9yIixyLnBhcGVyX2JnY29sb3IpLG8oImJvcmRlcmNvbG9yIiksbygiYm9yZGVyd2lkdGgiKSl9ZnVuY3Rpb24gYyhlLHQpe2Z1bmN0aW9uIHIocixhKXtyZXR1cm4gbi5jb2VyY2UoZSx0LGwscixhKX1yKCJ2aXNpYmxlIiwic2tpcCI9PT1lLm1ldGhvZHx8QXJyYXkuaXNBcnJheShlLmFyZ3MpKSYmKHIoIm1ldGhvZCIpLHIoImFyZ3MiKSxyKCJhcmdzMiIpLHIoImxhYmVsIikscigiZXhlY3V0ZSIpKX10LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXthKGUsdCx7bmFtZTpvLGhhbmRsZUl0ZW1EZWZhdWx0czpzfSl9fSx7Ii4uLy4uL2xpYiI6MjAyLCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjI0MywiLi9hdHRyaWJ1dGVzIjoxNzEsIi4vY29uc3RhbnRzIjoxNzJ9XSwxNzQ6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiZDMiKSxhPWUoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksaT1lKCIuLi9jb2xvciIpLG89ZSgiLi4vZHJhd2luZyIpLGw9ZSgiLi4vLi4vbGliIikscz1lKCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxjPWUoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS5hcnJheUVkaXRvcix1PWUoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5MSU5FX1NQQUNJTkcsZj1lKCIuL2NvbnN0YW50cyIpLGQ9ZSgiLi9zY3JvbGxib3giKTtmdW5jdGlvbiBwKGUpe3JldHVybiBlLl9pbmRleH1mdW5jdGlvbiBoKGUsdCl7cmV0dXJuK2UuYXR0cihmLm1lbnVJbmRleEF0dHJOYW1lKT09PXQuX2luZGV4fWZ1bmN0aW9uIGcoZSx0LHIsbixhLGksbyxsKXt0LmFjdGl2ZT1vLGMoZS5sYXlvdXQsZi5uYW1lLHQpLmFwcGx5VXBkYXRlKCJhY3RpdmUiLG8pLCJidXR0b25zIj09PXQudHlwZT9tKGUsbixudWxsLG51bGwsdCk6ImRyb3Bkb3duIj09PXQudHlwZSYmKGEuYXR0cihmLm1lbnVJbmRleEF0dHJOYW1lLCItMSIpLHYoZSxuLGEsaSx0KSxsfHxtKGUsbixhLGksdCkpfWZ1bmN0aW9uIHYoZSx0LHIsbixhKXt2YXIgaT1sLmVuc3VyZVNpbmdsZSh0LCJnIixmLmhlYWRlckNsYXNzTmFtZSwoZnVuY3Rpb24oZSl7ZS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKX0pKSxzPWEuX2RpbXMsYz1hLmFjdGl2ZSx1PWEuYnV0dG9uc1tjXXx8Zi5ibGFua0hlYWRlck9wdHMsZD17eTphLnBhZC50LHlQYWQ6MCx4OmEucGFkLmwseFBhZDowLGluZGV4OjB9LHA9e3dpZHRoOnMuaGVhZGVyV2lkdGgsaGVpZ2h0OnMuaGVhZGVySGVpZ2h0fTtpLmNhbGwoeSxhLHUsZSkuY2FsbChBLGEsZCxwKSxsLmVuc3VyZVNpbmdsZSh0LCJ0ZXh0IixmLmhlYWRlckFycm93Q2xhc3NOYW1lLChmdW5jdGlvbihlKXtlLmF0dHIoInRleHQtYW5jaG9yIiwiZW5kIikuY2FsbChvLmZvbnQsYS5mb250KS50ZXh0KGYuYXJyb3dTeW1ib2xbYS5kaXJlY3Rpb25dKX0pKS5hdHRyKHt4OnMuaGVhZGVyV2lkdGgtZi5hcnJvd09mZnNldFgrYS5wYWQubCx5OnMuaGVhZGVySGVpZ2h0LzIrZi50ZXh0T2Zmc2V0WSthLnBhZC50fSksaS5vbigiY2xpY2siLChmdW5jdGlvbigpe3IuY2FsbChMLFN0cmluZyhoKHIsYSk/LTE6YS5faW5kZXgpKSxtKGUsdCxyLG4sYSl9KSksaS5vbigibW91c2VvdmVyIiwoZnVuY3Rpb24oKXtpLmNhbGwodyl9KSksaS5vbigibW91c2VvdXQiLChmdW5jdGlvbigpe2kuY2FsbChULGEpfSkpLG8uc2V0VHJhbnNsYXRlKHQscy5seCxzLmx5KX1mdW5jdGlvbiBtKGUsdCxyLGksbyl7cnx8KHI9dCkuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKTt2YXIgcz1mdW5jdGlvbihlKXtyZXR1cm4tMT09K2UuYXR0cihmLm1lbnVJbmRleEF0dHJOYW1lKX0ocikmJiJidXR0b25zIiE9PW8udHlwZT9bXTpvLmJ1dHRvbnMsYz0iZHJvcGRvd24iPT09by50eXBlP2YuZHJvcGRvd25CdXR0b25DbGFzc05hbWU6Zi5idXR0b25DbGFzc05hbWUsdT1yLnNlbGVjdEFsbCgiZy4iK2MpLmRhdGEobC5maWx0ZXJWaXNpYmxlKHMpKSxkPXUuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGMsITApLHA9dS5leGl0KCk7ImRyb3Bkb3duIj09PW8udHlwZT8oZC5hdHRyKCJvcGFjaXR5IiwiMCIpLnRyYW5zaXRpb24oKS5hdHRyKCJvcGFjaXR5IiwiMSIpLHAudHJhbnNpdGlvbigpLmF0dHIoIm9wYWNpdHkiLCIwIikucmVtb3ZlKCkpOnAucmVtb3ZlKCk7dmFyIGg9MCx2PTAsbT1vLl9kaW1zLHg9LTEhPT1bInVwIiwiZG93biJdLmluZGV4T2Yoby5kaXJlY3Rpb24pOyJkcm9wZG93biI9PT1vLnR5cGUmJih4P3Y9bS5oZWFkZXJIZWlnaHQrZi5nYXBCdXR0b25IZWFkZXI6aD1tLmhlYWRlcldpZHRoK2YuZ2FwQnV0dG9uSGVhZGVyKSwiZHJvcGRvd24iPT09by50eXBlJiYidXAiPT09by5kaXJlY3Rpb24mJih2PS1mLmdhcEJ1dHRvbkhlYWRlcitmLmdhcEJ1dHRvbi1tLm9wZW5IZWlnaHQpLCJkcm9wZG93biI9PT1vLnR5cGUmJiJsZWZ0Ij09PW8uZGlyZWN0aW9uJiYoaD0tZi5nYXBCdXR0b25IZWFkZXIrZi5nYXBCdXR0b24tbS5vcGVuV2lkdGgpO3ZhciBiPXt4Om0ubHgraCtvLnBhZC5sLHk6bS5seSt2K28ucGFkLnQseVBhZDpmLmdhcEJ1dHRvbix4UGFkOmYuZ2FwQnV0dG9uLGluZGV4OjB9LGs9e2w6Yi54K28uYm9yZGVyd2lkdGgsdDpiLnkrby5ib3JkZXJ3aWR0aH07dS5lYWNoKChmdW5jdGlvbihsLHMpe3ZhciBjPW4uc2VsZWN0KHRoaXMpO2MuY2FsbCh5LG8sbCxlKS5jYWxsKEEsbyxiKSxjLm9uKCJjbGljayIsKGZ1bmN0aW9uKCl7bi5ldmVudC5kZWZhdWx0UHJldmVudGVkfHwobC5leGVjdXRlJiYobC5hcmdzMiYmby5hY3RpdmU9PT1zPyhnKGUsbywwLHQscixpLC0xKSxhLmV4ZWN1dGVBUElDb21tYW5kKGUsbC5tZXRob2QsbC5hcmdzMikpOihnKGUsbywwLHQscixpLHMpLGEuZXhlY3V0ZUFQSUNvbW1hbmQoZSxsLm1ldGhvZCxsLmFyZ3MpKSksZS5lbWl0KCJwbG90bHlfYnV0dG9uY2xpY2tlZCIse21lbnU6byxidXR0b246bCxhY3RpdmU6by5hY3RpdmV9KSl9KSksYy5vbigibW91c2VvdmVyIiwoZnVuY3Rpb24oKXtjLmNhbGwodyl9KSksYy5vbigibW91c2VvdXQiLChmdW5jdGlvbigpe2MuY2FsbChULG8pLHUuY2FsbChfLG8pfSkpfSkpLHUuY2FsbChfLG8pLHg/KGsudz1NYXRoLm1heChtLm9wZW5XaWR0aCxtLmhlYWRlcldpZHRoKSxrLmg9Yi55LWsudCk6KGsudz1iLngtay5sLGsuaD1NYXRoLm1heChtLm9wZW5IZWlnaHQsbS5oZWFkZXJIZWlnaHQpKSxrLmRpcmVjdGlvbj1vLmRpcmVjdGlvbixpJiYodS5zaXplKCk/ZnVuY3Rpb24oZSx0LHIsbixhLGkpe3ZhciBvLGwscyxjPWEuZGlyZWN0aW9uLHU9InVwIj09PWN8fCJkb3duIj09PWMsZD1hLl9kaW1zLHA9YS5hY3RpdmU7aWYodSlmb3IobD0wLHM9MDtzPHA7cysrKWwrPWQuaGVpZ2h0c1tzXStmLmdhcEJ1dHRvbjtlbHNlIGZvcihvPTAscz0wO3M8cDtzKyspbys9ZC53aWR0aHNbc10rZi5nYXBCdXR0b247bi5lbmFibGUoaSxvLGwpLG4uaGJhciYmbi5oYmFyLmF0dHIoIm9wYWNpdHkiLCIwIikudHJhbnNpdGlvbigpLmF0dHIoIm9wYWNpdHkiLCIxIik7bi52YmFyJiZuLnZiYXIuYXR0cigib3BhY2l0eSIsIjAiKS50cmFuc2l0aW9uKCkuYXR0cigib3BhY2l0eSIsIjEiKX0oMCwwLDAsaSxvLGspOmZ1bmN0aW9uKGUpe3ZhciB0PSEhZS5oYmFyLHI9ISFlLnZiYXI7dCYmZS5oYmFyLnRyYW5zaXRpb24oKS5hdHRyKCJvcGFjaXR5IiwiMCIpLmVhY2goImVuZCIsKGZ1bmN0aW9uKCl7dD0hMSxyfHxlLmRpc2FibGUoKX0pKTtyJiZlLnZiYXIudHJhbnNpdGlvbigpLmF0dHIoIm9wYWNpdHkiLCIwIikuZWFjaCgiZW5kIiwoZnVuY3Rpb24oKXtyPSExLHR8fGUuZGlzYWJsZSgpfSkpfShpKSl9ZnVuY3Rpb24geShlLHQscixuKXtlLmNhbGwoeCx0KS5jYWxsKGIsdCxyLG4pfWZ1bmN0aW9uIHgoZSx0KXtsLmVuc3VyZVNpbmdsZShlLCJyZWN0IixmLml0ZW1SZWN0Q2xhc3NOYW1lLChmdW5jdGlvbihlKXtlLmF0dHIoe3J4OmYucngscnk6Zi5yeSwic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9KX0pKS5jYWxsKGkuc3Ryb2tlLHQuYm9yZGVyY29sb3IpLmNhbGwoaS5maWxsLHQuYmdjb2xvcikuc3R5bGUoInN0cm9rZS13aWR0aCIsdC5ib3JkZXJ3aWR0aCsicHgiKX1mdW5jdGlvbiBiKGUsdCxyLG4pe3ZhciBhPWwuZW5zdXJlU2luZ2xlKGUsInRleHQiLGYuaXRlbVRleHRDbGFzc05hbWUsKGZ1bmN0aW9uKGUpe2UuYXR0cih7InRleHQtYW5jaG9yIjoic3RhcnQiLCJkYXRhLW5vdGV4IjoxfSl9KSksaT1yLmxhYmVsLGM9bi5fZnVsbExheW91dC5fbWV0YTtjJiYoaT1sLnRlbXBsYXRlU3RyaW5nKGksYykpLGEuY2FsbChvLmZvbnQsdC5mb250KS50ZXh0KGkpLmNhbGwocy5jb252ZXJ0VG9Uc3BhbnMsbil9ZnVuY3Rpb24gXyhlLHQpe3ZhciByPXQuYWN0aXZlO2UuZWFjaCgoZnVuY3Rpb24oZSxhKXt2YXIgbz1uLnNlbGVjdCh0aGlzKTthPT09ciYmdC5zaG93YWN0aXZlJiZvLnNlbGVjdCgicmVjdC4iK2YuaXRlbVJlY3RDbGFzc05hbWUpLmNhbGwoaS5maWxsLGYuYWN0aXZlQ29sb3IpfSkpfWZ1bmN0aW9uIHcoZSl7ZS5zZWxlY3QoInJlY3QuIitmLml0ZW1SZWN0Q2xhc3NOYW1lKS5jYWxsKGkuZmlsbCxmLmhvdmVyQ29sb3IpfWZ1bmN0aW9uIFQoZSx0KXtlLnNlbGVjdCgicmVjdC4iK2YuaXRlbVJlY3RDbGFzc05hbWUpLmNhbGwoaS5maWxsLHQuYmdjb2xvcil9ZnVuY3Rpb24gayhlLHQpe3ZhciByPXQuX2RpbXM9e3dpZHRoMTowLGhlaWdodDE6MCxoZWlnaHRzOltdLHdpZHRoczpbXSx0b3RhbFdpZHRoOjAsdG90YWxIZWlnaHQ6MCxvcGVuV2lkdGg6MCxvcGVuSGVpZ2h0OjAsbHg6MCxseTowfSxpPW8udGVzdGVyLnNlbGVjdEFsbCgiZy4iK2YuZHJvcGRvd25CdXR0b25DbGFzc05hbWUpLmRhdGEobC5maWx0ZXJWaXNpYmxlKHQuYnV0dG9ucykpO2kuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGYuZHJvcGRvd25CdXR0b25DbGFzc05hbWUsITApO3ZhciBjPS0xIT09WyJ1cCIsImRvd24iXS5pbmRleE9mKHQuZGlyZWN0aW9uKTtpLmVhY2goKGZ1bmN0aW9uKGEsaSl7dmFyIGw9bi5zZWxlY3QodGhpcyk7bC5jYWxsKHksdCxhLGUpO3ZhciBkPWwuc2VsZWN0KCIuIitmLml0ZW1UZXh0Q2xhc3NOYW1lKSxwPWQubm9kZSgpJiZvLmJCb3goZC5ub2RlKCkpLndpZHRoLGg9TWF0aC5tYXgocCtmLnRleHRQYWRYLGYubWluV2lkdGgpLGc9dC5mb250LnNpemUqdSx2PXMubGluZUNvdW50KGQpLG09TWF0aC5tYXgoZyp2LGYubWluSGVpZ2h0KStmLnRleHRPZmZzZXRZO209TWF0aC5jZWlsKG0pLGg9TWF0aC5jZWlsKGgpLHIud2lkdGhzW2ldPWgsci5oZWlnaHRzW2ldPW0sci5oZWlnaHQxPU1hdGgubWF4KHIuaGVpZ2h0MSxtKSxyLndpZHRoMT1NYXRoLm1heChyLndpZHRoMSxoKSxjPyhyLnRvdGFsV2lkdGg9TWF0aC5tYXgoci50b3RhbFdpZHRoLGgpLHIub3BlbldpZHRoPXIudG90YWxXaWR0aCxyLnRvdGFsSGVpZ2h0Kz1tK2YuZ2FwQnV0dG9uLHIub3BlbkhlaWdodCs9bStmLmdhcEJ1dHRvbik6KHIudG90YWxXaWR0aCs9aCtmLmdhcEJ1dHRvbixyLm9wZW5XaWR0aCs9aCtmLmdhcEJ1dHRvbixyLnRvdGFsSGVpZ2h0PU1hdGgubWF4KHIudG90YWxIZWlnaHQsbSksci5vcGVuSGVpZ2h0PXIudG90YWxIZWlnaHQpfSkpLGM/ci50b3RhbEhlaWdodC09Zi5nYXBCdXR0b246ci50b3RhbFdpZHRoLT1mLmdhcEJ1dHRvbixyLmhlYWRlcldpZHRoPXIud2lkdGgxK2YuYXJyb3dQYWRYLHIuaGVhZGVySGVpZ2h0PXIuaGVpZ2h0MSwiZHJvcGRvd24iPT09dC50eXBlJiYoYz8oci53aWR0aDErPWYuYXJyb3dQYWRYLHIudG90YWxIZWlnaHQ9ci5oZWlnaHQxKTpyLnRvdGFsV2lkdGg9ci53aWR0aDEsci50b3RhbFdpZHRoKz1mLmFycm93UGFkWCksaS5yZW1vdmUoKTt2YXIgZD1yLnRvdGFsV2lkdGgrdC5wYWQubCt0LnBhZC5yLHA9ci50b3RhbEhlaWdodCt0LnBhZC50K3QucGFkLmIsaD1lLl9mdWxsTGF5b3V0Ll9zaXplO3IubHg9aC5sK2gudyp0Lngsci5seT1oLnQraC5oKigxLXQueSk7dmFyIGc9ImxlZnQiO2wuaXNSaWdodEFuY2hvcih0KSYmKHIubHgtPWQsZz0icmlnaHQiKSxsLmlzQ2VudGVyQW5jaG9yKHQpJiYoci5seC09ZC8yLGc9ImNlbnRlciIpO3ZhciB2PSJ0b3AiO2wuaXNCb3R0b21BbmNob3IodCkmJihyLmx5LT1wLHY9ImJvdHRvbSIpLGwuaXNNaWRkbGVBbmNob3IodCkmJihyLmx5LT1wLzIsdj0ibWlkZGxlIiksci50b3RhbFdpZHRoPU1hdGguY2VpbChyLnRvdGFsV2lkdGgpLHIudG90YWxIZWlnaHQ9TWF0aC5jZWlsKHIudG90YWxIZWlnaHQpLHIubHg9TWF0aC5yb3VuZChyLmx4KSxyLmx5PU1hdGgucm91bmQoci5seSksYS5hdXRvTWFyZ2luKGUsTSh0KSx7eDp0LngseTp0LnksbDpkKih7cmlnaHQ6MSxjZW50ZXI6LjV9W2ddfHwwKSxyOmQqKHtsZWZ0OjEsY2VudGVyOi41fVtnXXx8MCksYjpwKih7dG9wOjEsbWlkZGxlOi41fVt2XXx8MCksdDpwKih7Ym90dG9tOjEsbWlkZGxlOi41fVt2XXx8MCl9KX1mdW5jdGlvbiBNKGUpe3JldHVybiBmLmF1dG9NYXJnaW5JZFJvb3QrZS5faW5kZXh9ZnVuY3Rpb24gQShlLHQscixuKXtuPW58fHt9O3ZhciBhPWUuc2VsZWN0KCIuIitmLml0ZW1SZWN0Q2xhc3NOYW1lKSxpPWUuc2VsZWN0KCIuIitmLml0ZW1UZXh0Q2xhc3NOYW1lKSxsPXQuYm9yZGVyd2lkdGgsYz1yLmluZGV4LGQ9dC5fZGltcztvLnNldFRyYW5zbGF0ZShlLGwrci54LGwrci55KTt2YXIgcD0tMSE9PVsidXAiLCJkb3duIl0uaW5kZXhPZih0LmRpcmVjdGlvbiksaD1uLmhlaWdodHx8KHA/ZC5oZWlnaHRzW2NdOmQuaGVpZ2h0MSk7YS5hdHRyKHt4OjAseTowLHdpZHRoOm4ud2lkdGh8fChwP2Qud2lkdGgxOmQud2lkdGhzW2NdKSxoZWlnaHQ6aH0pO3ZhciBnPXQuZm9udC5zaXplKnUsdj0ocy5saW5lQ291bnQoaSktMSkqZy8yO3MucG9zaXRpb25UZXh0KGksZi50ZXh0T2Zmc2V0WCxoLzItditmLnRleHRPZmZzZXRZKSxwP3IueSs9ZC5oZWlnaHRzW2NdK3IueVBhZDpyLngrPWQud2lkdGhzW2NdK3IueFBhZCxyLmluZGV4Kyt9ZnVuY3Rpb24gTChlLHQpe2UuYXR0cihmLm1lbnVJbmRleEF0dHJOYW1lLHR8fCItMSIpLnNlbGVjdEFsbCgiZy4iK2YuZHJvcGRvd25CdXR0b25DbGFzc05hbWUpLnJlbW92ZSgpfXQuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1lLl9mdWxsTGF5b3V0LHI9bC5maWx0ZXJWaXNpYmxlKHRbZi5uYW1lXSk7ZnVuY3Rpb24gaSh0KXthLmF1dG9NYXJnaW4oZSxNKHQpKX12YXIgbz10Ll9tZW51bGF5ZXIuc2VsZWN0QWxsKCJnLiIrZi5jb250YWluZXJDbGFzc05hbWUpLmRhdGEoci5sZW5ndGg+MD9bMF06W10pO2lmKG8uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGYuY29udGFpbmVyQ2xhc3NOYW1lLCEwKS5zdHlsZSgiY3Vyc29yIiwicG9pbnRlciIpLG8uZXhpdCgpLmVhY2goKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLiIrZi5oZWFkZXJHcm91cENsYXNzTmFtZSkuZWFjaChpKX0pKS5yZW1vdmUoKSwwIT09ci5sZW5ndGgpe3ZhciBzPW8uc2VsZWN0QWxsKCJnLiIrZi5oZWFkZXJHcm91cENsYXNzTmFtZSkuZGF0YShyLHApO3MuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGYuaGVhZGVyR3JvdXBDbGFzc05hbWUsITApO2Zvcih2YXIgYz1sLmVuc3VyZVNpbmdsZShvLCJnIixmLmRyb3Bkb3duQnV0dG9uR3JvdXBDbGFzc05hbWUsKGZ1bmN0aW9uKGUpe2Uuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIil9KSksdT0wO3U8ci5sZW5ndGg7dSsrKXt2YXIgeT1yW3VdO2soZSx5KX12YXIgeD0idXBkYXRlbWVudXMiK3QuX3VpZCxiPW5ldyBkKGUsYyx4KTtzLmVudGVyKCkuc2l6ZSgpJiYoYy5ub2RlKCkucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChjLm5vZGUoKSksYy5jYWxsKEwpKSxzLmV4aXQoKS5lYWNoKChmdW5jdGlvbihlKXtjLmNhbGwoTCksaShlKX0pKS5yZW1vdmUoKSxzLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpLGk9ImRyb3Bkb3duIj09PXQudHlwZT9jOm51bGw7YS5tYW5hZ2VDb21tYW5kT2JzZXJ2ZXIoZSx0LHQuYnV0dG9ucywoZnVuY3Rpb24obil7ZyhlLHQsdC5idXR0b25zW24uaW5kZXhdLHIsaSxiLG4uaW5kZXgsITApfSkpLCJkcm9wZG93biI9PT10LnR5cGU/KHYoZSxyLGMsYix0KSxoKGMsdCkmJm0oZSxyLGMsYix0KSk6bShlLHIsbnVsbCxudWxsLHQpfSkpfX19LHsiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6MTc3LCIuLi8uLi9saWIiOjIwMiwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjoyMjQsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjIzNywiLi4vLi4vcGxvdHMvcGxvdHMiOjI4MiwiLi4vY29sb3IiOjc1LCIuLi9kcmF3aW5nIjo5NywiLi9jb25zdGFudHMiOjE3MiwiLi9zY3JvbGxib3giOjE3NixkMzo5fV0sMTc1OltmdW5jdGlvbihlLHQscil7YXJndW1lbnRzWzRdWzE2OV1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7Ii4vYXR0cmlidXRlcyI6MTcxLCIuL2NvbnN0YW50cyI6MTcyLCIuL2RlZmF1bHRzIjoxNzMsIi4vZHJhdyI6MTc0LGR1cDoxNjl9XSwxNzY6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPWw7dmFyIG49ZSgiZDMiKSxhPWUoIi4uL2NvbG9yIiksaT1lKCIuLi9kcmF3aW5nIiksbz1lKCIuLi8uLi9saWIiKTtmdW5jdGlvbiBsKGUsdCxyKXt0aGlzLmdkPWUsdGhpcy5jb250YWluZXI9dCx0aGlzLmlkPXIsdGhpcy5wb3NpdGlvbj1udWxsLHRoaXMudHJhbnNsYXRlWD1udWxsLHRoaXMudHJhbnNsYXRlWT1udWxsLHRoaXMuaGJhcj1udWxsLHRoaXMudmJhcj1udWxsLHRoaXMuYmc9dGhpcy5jb250YWluZXIuc2VsZWN0QWxsKCJyZWN0LnNjcm9sbGJveC1iZyIpLmRhdGEoWzBdKSx0aGlzLmJnLmV4aXQoKS5vbigiLmRyYWciLG51bGwpLm9uKCJ3aGVlbCIsbnVsbCkucmVtb3ZlKCksdGhpcy5iZy5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoInNjcm9sbGJveC1iZyIsITApLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLmF0dHIoe29wYWNpdHk6MCx4OjAseTowLHdpZHRoOjAsaGVpZ2h0OjB9KX1sLmJhcldpZHRoPTIsbC5iYXJMZW5ndGg9MjAsbC5iYXJSYWRpdXM9MixsLmJhclBhZD0xLGwuYmFyQ29sb3I9IiM4MDhCQTQiLGwucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbihlLHQscil7dmFyIG89dGhpcy5nZC5fZnVsbExheW91dCxzPW8ud2lkdGgsYz1vLmhlaWdodDt0aGlzLnBvc2l0aW9uPWU7dmFyIHUsZixkLHAsaD10aGlzLnBvc2l0aW9uLmwsZz10aGlzLnBvc2l0aW9uLncsdj10aGlzLnBvc2l0aW9uLnQsbT10aGlzLnBvc2l0aW9uLmgseT10aGlzLnBvc2l0aW9uLmRpcmVjdGlvbix4PSJkb3duIj09PXksYj0ibGVmdCI9PT15LF89InVwIj09PXksdz1nLFQ9bTt4fHxifHwicmlnaHQiPT09eXx8X3x8KHRoaXMucG9zaXRpb24uZGlyZWN0aW9uPSJkb3duIix4PSEwKSx4fHxfPyhmPSh1PWgpK3cseD8oZD12LFQ9KHA9TWF0aC5taW4oZCtULGMpKS1kKTpUPShwPXYrVCktKGQ9TWF0aC5tYXgocC1ULDApKSk6KHA9KGQ9dikrVCxiP3c9KGY9aCt3KS0odT1NYXRoLm1heChmLXcsMCkpOih1PWgsdz0oZj1NYXRoLm1pbih1K3cscykpLXUpKSx0aGlzLl9ib3g9e2w6dSx0OmQsdzp3LGg6VH07dmFyIGs9Zz53LE09bC5iYXJMZW5ndGgrMipsLmJhclBhZCxBPWwuYmFyV2lkdGgrMipsLmJhclBhZCxMPWgsUz12K207UytBPmMmJihTPWMtQSk7dmFyIEM9dGhpcy5jb250YWluZXIuc2VsZWN0QWxsKCJyZWN0LnNjcm9sbGJhci1ob3Jpem9udGFsIikuZGF0YShrP1swXTpbXSk7Qy5leGl0KCkub24oIi5kcmFnIixudWxsKS5yZW1vdmUoKSxDLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgic2Nyb2xsYmFyLWhvcml6b250YWwiLCEwKS5jYWxsKGEuZmlsbCxsLmJhckNvbG9yKSxrPyh0aGlzLmhiYXI9Qy5hdHRyKHtyeDpsLmJhclJhZGl1cyxyeTpsLmJhclJhZGl1cyx4OkwseTpTLHdpZHRoOk0saGVpZ2h0OkF9KSx0aGlzLl9oYmFyWE1pbj1MK00vMix0aGlzLl9oYmFyVHJhbnNsYXRlTWF4PXctTSk6KGRlbGV0ZSB0aGlzLmhiYXIsZGVsZXRlIHRoaXMuX2hiYXJYTWluLGRlbGV0ZSB0aGlzLl9oYmFyVHJhbnNsYXRlTWF4KTt2YXIgTz1tPlQsRD1sLmJhcldpZHRoKzIqbC5iYXJQYWQsUD1sLmJhckxlbmd0aCsyKmwuYmFyUGFkLHo9aCtnLFI9djt6K0Q+cyYmKHo9cy1EKTt2YXIgRT10aGlzLmNvbnRhaW5lci5zZWxlY3RBbGwoInJlY3Quc2Nyb2xsYmFyLXZlcnRpY2FsIikuZGF0YShPP1swXTpbXSk7RS5leGl0KCkub24oIi5kcmFnIixudWxsKS5yZW1vdmUoKSxFLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgic2Nyb2xsYmFyLXZlcnRpY2FsIiwhMCkuY2FsbChhLmZpbGwsbC5iYXJDb2xvciksTz8odGhpcy52YmFyPUUuYXR0cih7cng6bC5iYXJSYWRpdXMscnk6bC5iYXJSYWRpdXMseDp6LHk6Uix3aWR0aDpELGhlaWdodDpQfSksdGhpcy5fdmJhcllNaW49UitQLzIsdGhpcy5fdmJhclRyYW5zbGF0ZU1heD1ULVApOihkZWxldGUgdGhpcy52YmFyLGRlbGV0ZSB0aGlzLl92YmFyWU1pbixkZWxldGUgdGhpcy5fdmJhclRyYW5zbGF0ZU1heCk7dmFyIEk9dGhpcy5pZCxGPXUtLjUsTj1PP2YrRCsuNTpmKy41LEg9ZC0uNSxqPWs/cCtBKy41OnArLjUsQj1vLl90b3BkZWZzLnNlbGVjdEFsbCgiIyIrSSkuZGF0YShrfHxPP1swXTpbXSk7aWYoQi5leGl0KCkucmVtb3ZlKCksQi5lbnRlcigpLmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsSSkuYXBwZW5kKCJyZWN0Iiksa3x8Tz8odGhpcy5fY2xpcFJlY3Q9Qi5zZWxlY3QoInJlY3QiKS5hdHRyKHt4Ok1hdGguZmxvb3IoRikseTpNYXRoLmZsb29yKEgpLHdpZHRoOk1hdGguY2VpbChOKS1NYXRoLmZsb29yKEYpLGhlaWdodDpNYXRoLmNlaWwoaiktTWF0aC5mbG9vcihIKX0pLHRoaXMuY29udGFpbmVyLmNhbGwoaS5zZXRDbGlwVXJsLEksdGhpcy5nZCksdGhpcy5iZy5hdHRyKHt4OmgseTp2LHdpZHRoOmcsaGVpZ2h0Om19KSk6KHRoaXMuYmcuYXR0cih7d2lkdGg6MCxoZWlnaHQ6MH0pLHRoaXMuY29udGFpbmVyLm9uKCJ3aGVlbCIsbnVsbCkub24oIi5kcmFnIixudWxsKS5jYWxsKGkuc2V0Q2xpcFVybCxudWxsKSxkZWxldGUgdGhpcy5fY2xpcFJlY3QpLGt8fE8pe3ZhciBWPW4uYmVoYXZpb3IuZHJhZygpLm9uKCJkcmFnc3RhcnQiLChmdW5jdGlvbigpe24uZXZlbnQuc291cmNlRXZlbnQucHJldmVudERlZmF1bHQoKX0pKS5vbigiZHJhZyIsdGhpcy5fb25Cb3hEcmFnLmJpbmQodGhpcykpO3RoaXMuY29udGFpbmVyLm9uKCJ3aGVlbCIsbnVsbCkub24oIndoZWVsIix0aGlzLl9vbkJveFdoZWVsLmJpbmQodGhpcykpLm9uKCIuZHJhZyIsbnVsbCkuY2FsbChWKTt2YXIgVT1uLmJlaGF2aW9yLmRyYWcoKS5vbigiZHJhZ3N0YXJ0IiwoZnVuY3Rpb24oKXtuLmV2ZW50LnNvdXJjZUV2ZW50LnByZXZlbnREZWZhdWx0KCksbi5ldmVudC5zb3VyY2VFdmVudC5zdG9wUHJvcGFnYXRpb24oKX0pKS5vbigiZHJhZyIsdGhpcy5fb25CYXJEcmFnLmJpbmQodGhpcykpO2smJnRoaXMuaGJhci5vbigiLmRyYWciLG51bGwpLmNhbGwoVSksTyYmdGhpcy52YmFyLm9uKCIuZHJhZyIsbnVsbCkuY2FsbChVKX10aGlzLnNldFRyYW5zbGF0ZSh0LHIpfSxsLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7KHRoaXMuaGJhcnx8dGhpcy52YmFyKSYmKHRoaXMuYmcuYXR0cih7d2lkdGg6MCxoZWlnaHQ6MH0pLHRoaXMuY29udGFpbmVyLm9uKCJ3aGVlbCIsbnVsbCkub24oIi5kcmFnIixudWxsKS5jYWxsKGkuc2V0Q2xpcFVybCxudWxsKSxkZWxldGUgdGhpcy5fY2xpcFJlY3QpLHRoaXMuaGJhciYmKHRoaXMuaGJhci5vbigiLmRyYWciLG51bGwpLHRoaXMuaGJhci5yZW1vdmUoKSxkZWxldGUgdGhpcy5oYmFyLGRlbGV0ZSB0aGlzLl9oYmFyWE1pbixkZWxldGUgdGhpcy5faGJhclRyYW5zbGF0ZU1heCksdGhpcy52YmFyJiYodGhpcy52YmFyLm9uKCIuZHJhZyIsbnVsbCksdGhpcy52YmFyLnJlbW92ZSgpLGRlbGV0ZSB0aGlzLnZiYXIsZGVsZXRlIHRoaXMuX3ZiYXJZTWluLGRlbGV0ZSB0aGlzLl92YmFyVHJhbnNsYXRlTWF4KX0sbC5wcm90b3R5cGUuX29uQm94RHJhZz1mdW5jdGlvbigpe3ZhciBlPXRoaXMudHJhbnNsYXRlWCx0PXRoaXMudHJhbnNsYXRlWTt0aGlzLmhiYXImJihlLT1uLmV2ZW50LmR4KSx0aGlzLnZiYXImJih0LT1uLmV2ZW50LmR5KSx0aGlzLnNldFRyYW5zbGF0ZShlLHQpfSxsLnByb3RvdHlwZS5fb25Cb3hXaGVlbD1mdW5jdGlvbigpe3ZhciBlPXRoaXMudHJhbnNsYXRlWCx0PXRoaXMudHJhbnNsYXRlWTt0aGlzLmhiYXImJihlKz1uLmV2ZW50LmRlbHRhWSksdGhpcy52YmFyJiYodCs9bi5ldmVudC5kZWx0YVkpLHRoaXMuc2V0VHJhbnNsYXRlKGUsdCl9LGwucHJvdG90eXBlLl9vbkJhckRyYWc9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnRyYW5zbGF0ZVgsdD10aGlzLnRyYW5zbGF0ZVk7aWYodGhpcy5oYmFyKXt2YXIgcj1lK3RoaXMuX2hiYXJYTWluLGE9cit0aGlzLl9oYmFyVHJhbnNsYXRlTWF4O2U9KG8uY29uc3RyYWluKG4uZXZlbnQueCxyLGEpLXIpLyhhLXIpKih0aGlzLnBvc2l0aW9uLnctdGhpcy5fYm94LncpfWlmKHRoaXMudmJhcil7dmFyIGk9dCt0aGlzLl92YmFyWU1pbixsPWkrdGhpcy5fdmJhclRyYW5zbGF0ZU1heDt0PShvLmNvbnN0cmFpbihuLmV2ZW50LnksaSxsKS1pKS8obC1pKSoodGhpcy5wb3NpdGlvbi5oLXRoaXMuX2JveC5oKX10aGlzLnNldFRyYW5zbGF0ZShlLHQpfSxsLnByb3RvdHlwZS5zZXRUcmFuc2xhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLnBvc2l0aW9uLnctdGhpcy5fYm94Lncsbj10aGlzLnBvc2l0aW9uLmgtdGhpcy5fYm94Lmg7aWYoZT1vLmNvbnN0cmFpbihlfHwwLDAsciksdD1vLmNvbnN0cmFpbih0fHwwLDAsbiksdGhpcy50cmFuc2xhdGVYPWUsdGhpcy50cmFuc2xhdGVZPXQsdGhpcy5jb250YWluZXIuY2FsbChpLnNldFRyYW5zbGF0ZSx0aGlzLl9ib3gubC10aGlzLnBvc2l0aW9uLmwtZSx0aGlzLl9ib3gudC10aGlzLnBvc2l0aW9uLnQtdCksdGhpcy5fY2xpcFJlY3QmJnRoaXMuX2NsaXBSZWN0LmF0dHIoe3g6TWF0aC5mbG9vcih0aGlzLnBvc2l0aW9uLmwrZS0uNSkseTpNYXRoLmZsb29yKHRoaXMucG9zaXRpb24udCt0LS41KX0pLHRoaXMuaGJhcil7dmFyIGE9ZS9yO3RoaXMuaGJhci5jYWxsKGkuc2V0VHJhbnNsYXRlLGUrYSp0aGlzLl9oYmFyVHJhbnNsYXRlTWF4LHQpfWlmKHRoaXMudmJhcil7dmFyIGw9dC9uO3RoaXMudmJhci5jYWxsKGkuc2V0VHJhbnNsYXRlLGUsdCtsKnRoaXMuX3ZiYXJUcmFuc2xhdGVNYXgpfX19LHsiLi4vLi4vbGliIjoyMDIsIi4uL2NvbG9yIjo3NSwiLi4vZHJhd2luZyI6OTcsZDM6OX1dLDE3NzpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9e0ZST01fQkw6e2xlZnQ6MCxjZW50ZXI6LjUscmlnaHQ6MSxib3R0b206MCxtaWRkbGU6LjUsdG9wOjF9LEZST01fVEw6e2xlZnQ6MCxjZW50ZXI6LjUscmlnaHQ6MSxib3R0b206MSxtaWRkbGU6LjUsdG9wOjB9LEZST01fQlI6e2xlZnQ6MSxjZW50ZXI6LjUscmlnaHQ6MCxib3R0b206MCxtaWRkbGU6LjUsdG9wOjF9LExJTkVfU1BBQ0lORzoxLjMsQ0FQX1NISUZUOi43LE1JRF9TSElGVDouMzUsT1BQT1NJVEVfU0lERTp7bGVmdDoicmlnaHQiLHJpZ2h0OiJsZWZ0Iix0b3A6ImJvdHRvbSIsYm90dG9tOiJ0b3AifX19LHt9XSwxNzg6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPXtheGlzUmVmRGVzY3JpcHRpb246ZnVuY3Rpb24oZSx0LHIpe3JldHVyblsiSWYgc2V0IHRvIGEiLGUsImF4aXMgaWQgKGUuZy4gKiIrZSsiKiBvciIsIioiK2UrIjIqKSwgdGhlIGAiK2UrImAgcG9zaXRpb24gcmVmZXJzIHRvIGEiLGUsImNvb3JkaW5hdGUuIElmIHNldCB0byAqcGFwZXIqLCB0aGUgYCIrZSsiYCIsInBvc2l0aW9uIHJlZmVycyB0byB0aGUgZGlzdGFuY2UgZnJvbSB0aGUiLHQsIm9mIHRoZSBwbG90dGluZyIsImFyZWEgaW4gbm9ybWFsaXplZCBjb29yZGluYXRlcyB3aGVyZSAqMCogKCoxKikgY29ycmVzcG9uZHMgdG8gdGhlIix0LCIoIityKyIpLiBJZiBzZXQgdG8gYSIsZSwiYXhpcyBJRCBmb2xsb3dlZCBieSIsIipkb21haW4qIChzZXBhcmF0ZWQgYnkgYSBzcGFjZSksIHRoZSBwb3NpdGlvbiBiZWhhdmVzIGxpa2UgZm9yIiwiKnBhcGVyKiwgYnV0IHJlZmVycyB0byB0aGUgZGlzdGFuY2UgaW4gZnJhY3Rpb25zIG9mIHRoZSBkb21haW4iLCJsZW5ndGggZnJvbSB0aGUiLHQsIm9mIHRoZSBkb21haW4gb2YgdGhhdCBheGlzOiBlLmcuLCIsIioiK2UrIjIgZG9tYWluKiByZWZlcnMgdG8gdGhlIGRvbWFpbiBvZiB0aGUgc2Vjb25kIixlLCIgYXhpcyBhbmQgYSIsZSwicG9zaXRpb24gb2YgMC41IHJlZmVycyB0byB0aGUiLCJwb2ludCBiZXR3ZWVuIHRoZSIsdCwiYW5kIHRoZSIsciwib2YgdGhlIGRvbWFpbiBvZiB0aGUiLCJzZWNvbmQiLGUsImF4aXMuIl0uam9pbigiICIpfX19LHt9XSwxNzk6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPXtGT1JNQVRfTElOSzoiaHR0cHM6Ly9naXRodWIuY29tL2QzL2QzLTMueC1hcGktcmVmZXJlbmNlL2Jsb2IvbWFzdGVyL0Zvcm1hdHRpbmcubWQjZDNfZm9ybWF0IixEQVRFX0ZPUk1BVF9MSU5LOiJodHRwczovL2dpdGh1Yi5jb20vZDMvZDMtdGltZS1mb3JtYXQjbG9jYWxlX2Zvcm1hdCJ9fSx7fV0sMTgwOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz17U0hPV19QTEFDRUhPTERFUjoxMDAsSElERV9QTEFDRUhPTERFUjoxZTMsREVTRUxFQ1RESU06LjJ9fSx7fV0sMTgxOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz17QkFETlVNOnZvaWQgMCxGUF9TQUZFOk51bWJlci5NQVhfVkFMVUUvMWU0LE9ORU1BWFlFQVI6MzE2MjI0ZTUsT05FQVZHWUVBUjozMTU1NzZlNSxPTkVNSU5ZRUFSOjMxNTM2ZTYsT05FTUFYUVVBUlRFUjo3OTQ4OGU1LE9ORUFWR1FVQVJURVI6Nzg4OTRlNSxPTkVNSU5RVUFSVEVSOjc2ODk2ZTUsT05FTUFYTU9OVEg6MjY3ODRlNSxPTkVBVkdNT05USDoyNjI5OGU1LE9ORU1JTk1PTlRIOjI0MTkyZTUsT05FV0VFSzo2MDQ4ZTUsT05FREFZOjg2NGU1LE9ORUhPVVI6MzZlNSxPTkVNSU46NmU0LE9ORVNFQzoxZTMsRVBPQ0hKRDoyNDQwNTg3LjUsQUxNT1NUX0VRVUFMOi45OTk5OTksTE9HX0NMSVA6MTAsTUlOVVNfU0lHTjoiXHUyMjEyIn19LHt9XSwxODI6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ci54bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8iLHIuc3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsci54bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsci5zdmdBdHRycz17eG1sbnM6ci5zdmcsInhtbG5zOnhsaW5rIjpyLnhsaW5rfX0se31dLDE4MzpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtyLnZlcnNpb249ZSgiLi92ZXJzaW9uIikudmVyc2lvbixlKCJlczYtcHJvbWlzZSIpLnBvbHlmaWxsKCksZSgiLi4vYnVpbGQvcGxvdGNzcyIpLGUoIi4vZm9udHMvbWF0aGpheF9jb25maWciKSgpO2Zvcih2YXIgbj1lKCIuL3JlZ2lzdHJ5IiksYT1yLnJlZ2lzdGVyPW4ucmVnaXN0ZXIsaT1lKCIuL3Bsb3RfYXBpIiksbz1PYmplY3Qua2V5cyhpKSxsPTA7bDxvLmxlbmd0aDtsKyspe3ZhciBzPW9bbF07Il8iIT09cy5jaGFyQXQoMCkmJihyW3NdPWlbc10pLGEoe21vZHVsZVR5cGU6ImFwaU1ldGhvZCIsbmFtZTpzLGZuOmlbc119KX1hKGUoIi4vdHJhY2VzL3NjYXR0ZXIiKSksYShbZSgiLi9jb21wb25lbnRzL2xlZ2VuZCIpLGUoIi4vY29tcG9uZW50cy9meCIpLGUoIi4vY29tcG9uZW50cy9hbm5vdGF0aW9ucyIpLGUoIi4vY29tcG9uZW50cy9hbm5vdGF0aW9uczNkIiksZSgiLi9jb21wb25lbnRzL3NoYXBlcyIpLGUoIi4vY29tcG9uZW50cy9pbWFnZXMiKSxlKCIuL2NvbXBvbmVudHMvdXBkYXRlbWVudXMiKSxlKCIuL2NvbXBvbmVudHMvc2xpZGVycyIpLGUoIi4vY29tcG9uZW50cy9yYW5nZXNsaWRlciIpLGUoIi4vY29tcG9uZW50cy9yYW5nZXNlbGVjdG9yIiksZSgiLi9jb21wb25lbnRzL2dyaWQiKSxlKCIuL2NvbXBvbmVudHMvZXJyb3JiYXJzIiksZSgiLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSxlKCIuL2NvbXBvbmVudHMvY29sb3JiYXIiKV0pLGEoW2UoIi4vbG9jYWxlLWVuIiksZSgiLi9sb2NhbGUtZW4tdXMiKV0pLHdpbmRvdy5QbG90bHlMb2NhbGVzJiZBcnJheS5pc0FycmF5KHdpbmRvdy5QbG90bHlMb2NhbGVzKSYmKGEod2luZG93LlBsb3RseUxvY2FsZXMpLGRlbGV0ZSB3aW5kb3cuUGxvdGx5TG9jYWxlcyksci5JY29ucz1lKCIuL2ZvbnRzL3Bsb3RpY29uIiksci5QbG90cz1lKCIuL3Bsb3RzL3Bsb3RzIiksci5GeD1lKCIuL2NvbXBvbmVudHMvZngiKSxyLlNuYXBzaG90PWUoIi4vc25hcHNob3QiKSxyLlBsb3RTY2hlbWE9ZSgiLi9wbG90X2FwaS9wbG90X3NjaGVtYSIpLHIuUXVldWU9ZSgiLi9saWIvcXVldWUiKSxyLmQzPWUoImQzIil9LHsiLi4vYnVpbGQvcGxvdGNzcyI6MSwiLi9jb21wb25lbnRzL2Fubm90YXRpb25zIjo2OCwiLi9jb21wb25lbnRzL2Fubm90YXRpb25zM2QiOjczLCIuL2NvbXBvbmVudHMvY29sb3JiYXIiOjgxLCIuL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6ODcsIi4vY29tcG9uZW50cy9lcnJvcmJhcnMiOjEwMywiLi9jb21wb25lbnRzL2Z4IjoxMTUsIi4vY29tcG9uZW50cy9ncmlkIjoxMTksIi4vY29tcG9uZW50cy9pbWFnZXMiOjEyNCwiLi9jb21wb25lbnRzL2xlZ2VuZCI6MTMyLCIuL2NvbXBvbmVudHMvcmFuZ2VzZWxlY3RvciI6MTQzLCIuL2NvbXBvbmVudHMvcmFuZ2VzbGlkZXIiOjE1MCwiLi9jb21wb25lbnRzL3NoYXBlcyI6MTY0LCIuL2NvbXBvbmVudHMvc2xpZGVycyI6MTY5LCIuL2NvbXBvbmVudHMvdXBkYXRlbWVudXMiOjE3NSwiLi9mb250cy9tYXRoamF4X2NvbmZpZyI6MTg0LCIuL2ZvbnRzL3Bsb3RpY29uIjoxODUsIi4vbGliL3F1ZXVlIjoyMTcsIi4vbG9jYWxlLWVuIjoyMjgsIi4vbG9jYWxlLWVuLXVzIjoyMjcsIi4vcGxvdF9hcGkiOjIzMiwiLi9wbG90X2FwaS9wbG90X3NjaGVtYSI6MjM2LCIuL3Bsb3RzL3Bsb3RzIjoyODIsIi4vcmVnaXN0cnkiOjI5MCwiLi9zbmFwc2hvdCI6Mjk1LCIuL3RyYWNlcy9zY2F0dGVyIjozNDIsIi4vdmVyc2lvbiI6MzU4LGQzOjksImVzNi1wcm9taXNlIjoxMH1dLDE4NDpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9ZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIE1hdGhKYXgmJigibG9jYWwiIT09KHdpbmRvdy5QbG90bHlDb25maWd8fHt9KS5NYXRoSmF4Q29uZmlnJiYoTWF0aEpheC5IdWIuQ29uZmlnKHttZXNzYWdlU3R5bGU6Im5vbmUiLHNraXBTdGFydHVwVHlwZXNldDohMCxkaXNwbGF5QWxpZ246ImxlZnQiLHRleDJqYXg6e2lubGluZU1hdGg6W1siJCIsIiQiXSxbIlxcKCIsIlxcKSJdXX19KSxNYXRoSmF4Lkh1Yi5Db25maWd1cmVkKCkpKX19LHt9XSwxODU6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPXt1bmRvOnt3aWR0aDo4NTcuMSxoZWlnaHQ6MWUzLHBhdGg6Im04NTcgMzUwcTAtODctMzQtMTY2dC05MS0xMzctMTM3LTkyLTE2Ni0zNHEtOTYgMC0xODMgNDF0LTE0NyAxMTRxLTQgNi00IDEzdDUgMTFsNzYgNzdxNiA1IDE0IDUgOS0xIDEzLTcgNDEtNTMgMTAwLTgydDEyNi0yOXE1OCAwIDExMCAyM3Q5MiA2MSA2MSA5MSAyMiAxMTEtMjIgMTExLTYxIDkxLTkyIDYxLTExMCAyM3EtNTUgMC0xMDUtMjB0LTkwLTU3bDc3LTc3cTE3LTE2IDgtMzgtMTAtMjMtMzMtMjNoLTI1MHEtMTUgMC0yNSAxMXQtMTEgMjV2MjUwcTAgMjQgMjIgMzMgMjIgMTAgMzktOGw3Mi03MnE2MCA1NyAxMzcgODh0MTU5IDMxcTg3IDAgMTY2LTM0dDEzNy05MiA5MS0xMzcgMzQtMTY2eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0saG9tZTp7d2lkdGg6OTI4LjYsaGVpZ2h0OjFlMyxwYXRoOiJtNzg2IDI5NnYtMjY3cTAtMTUtMTEtMjZ0LTI1LTEwaC0yMTR2MjE0aC0xNDN2LTIxNGgtMjE0cS0xNSAwLTI1IDEwdC0xMSAyNnYyNjdxMCAxIDAgMnQwIDJsMzIxIDI2NCAzMjEtMjY0cTEtMSAxLTR6IG0xMjQgMzlsLTM0LTQxcS01LTUtMTItNmgtMnEtNyAwLTEyIDNsLTM4NiAzMjItMzg2LTMyMnEtNy00LTEzLTQtNyAyLTEyIDdsLTM1IDQxcS00IDUtMyAxM3Q2IDEybDQwMSAzMzRxMTggMTUgNDIgMTV0NDMtMTVsMTM2LTExNHYxMDlxMCA4IDUgMTN0MTMgNWgxMDdxOCAwIDEzLTV0NS0xM3YtMjI3bDEyMi0xMDJxNS01IDYtMTJ0LTQtMTN6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSwiY2FtZXJhLXJldHJvIjp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDoibTUxOCAzODZxMCA4LTUgMTN0LTEzIDVxLTM3IDAtNjMtMjd0LTI2LTYzcTAtOCA1LTEzdDEzLTUgMTIgNSA1IDEzcTAgMjMgMTYgMzh0MzggMTZxOCAwIDEzIDV0NSAxM3ogbTEyNS03M3EwLTU5LTQyLTEwMXQtMTAxLTQyLTEwMSA0Mi00MiAxMDEgNDIgMTAxIDEwMSA0MiAxMDEtNDIgNDItMTAxeiBtLTU3Mi0zMjBoODU4djcxaC04NTh2LTcxeiBtNjQzIDMyMHEwIDg5LTYyIDE1MnQtMTUyIDYyLTE1MS02Mi02My0xNTIgNjMtMTUxIDE1MS02MyAxNTIgNjMgNjIgMTUxeiBtLTU3MSAzNThoMjE0djcyaC0yMTR2LTcyeiBtLTcyLTEwN2g4NTh2MTQzaC00NjJsLTM2LTcxaC0zNjB2LTcyeiBtOTI5IDE0M3YtNzE0cTAtMzAtMjEtNTF0LTUwLTIxaC04NThxLTI5IDAtNTAgMjF0LTIxIDUxdjcxNHEwIDMwIDIxIDUxdDUwIDIxaDg1OHEyOSAwIDUwLTIxdDIxLTUxeiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sem9vbWJveDp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDoibTEwMDAtMjVsLTI1MCAyNTFjNDAgNjMgNjMgMTM4IDYzIDIxOCAwIDIyNC0xODIgNDA2LTQwNyA0MDYtMjI0IDAtNDA2LTE4Mi00MDYtNDA2czE4My00MDYgNDA3LTQwNmM4MCAwIDE1NSAyMiAyMTggNjJsMjUwLTI1MCAxMjUgMTI1eiBtLTgxMiAyNTBsMCA0MzggNDM3IDAgMC00MzgtNDM3IDB6IG02MiAzNzVsMzEzIDAgMC0zMTItMzEzIDAgMCAzMTJ6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSxwYW46e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6Im0xMDAwIDM1MGwtMTg3IDE4OCAwLTEyNS0yNTAgMCAwIDI1MCAxMjUgMC0xODggMTg3LTE4Ny0xODcgMTI1IDAgMC0yNTAtMjUwIDAgMCAxMjUtMTg4LTE4OCAxODYtMTg3IDAgMTI1IDI1MiAwIDAtMjUwLTEyNSAwIDE4Ny0xODggMTg4IDE4OC0xMjUgMCAwIDI1MCAyNTAgMCAwLTEyNiAxODcgMTg4eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sem9vbV9wbHVzOnt3aWR0aDo4NzUsaGVpZ2h0OjFlMyxwYXRoOiJtMSA3ODdsMC04NzUgODc1IDAgMCA4NzUtODc1IDB6IG02ODctNTAwbC0xODcgMCAwLTE4Ny0xMjUgMCAwIDE4Ny0xODggMCAwIDEyNSAxODggMCAwIDE4NyAxMjUgMCAwLTE4NyAxODcgMCAwLTEyNXoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LHpvb21fbWludXM6e3dpZHRoOjg3NSxoZWlnaHQ6MWUzLHBhdGg6Im0wIDc4OGwwLTg3NiA4NzUgMCAwIDg3Ni04NzUgMHogbTY4OC01MDBsLTUwMCAwIDAgMTI1IDUwMCAwIDAtMTI1eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sYXV0b3NjYWxlOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOiJtMjUwIDg1MGwtMTg3IDAtNjMgMCAwLTYyIDAtMTg4IDYzIDAgMCAxODggMTg3IDAgMCA2MnogbTY4OCAwbC0xODggMCAwLTYyIDE4OCAwIDAtMTg4IDYyIDAgMCAxODggMCA2Mi02MiAweiBtLTg3NS05MzhsMCAxODgtNjMgMCAwLTE4OCAwLTYyIDYzIDAgMTg3IDAgMCA2Mi0xODcgMHogbTg3NSAxODhsMC0xODgtMTg4IDAgMC02MiAxODggMCA2MiAwIDAgNjIgMCAxODgtNjIgMHogbS0xMjUgMTg4bC0xIDAtOTMtOTQtMTU2IDE1NiAxNTYgMTU2IDkyLTkzIDIgMCAwIDI1MC0yNTAgMCAwLTIgOTMtOTItMTU2LTE1Ni0xNTYgMTU2IDk0IDkyIDAgMi0yNTAgMCAwLTI1MCAwIDAgOTMgOTMgMTU3LTE1Ni0xNTctMTU2LTkzIDk0IDAgMCAwLTI1MCAyNTAgMCAwIDAtOTQgOTMgMTU2IDE1NyAxNTYtMTU3LTkzLTkzIDAgMCAyNTAgMCAwIDI1MHoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LHRvb2x0aXBfYmFzaWM6e3dpZHRoOjE1MDAsaGVpZ2h0OjFlMyxwYXRoOiJtMzc1IDcyNWwwIDAtMzc1LTM3NSAzNzUtMzc0IDAtMSAxMTI1IDAgMCA3NTAtMTEyNSAweiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sdG9vbHRpcF9jb21wYXJlOnt3aWR0aDoxMTI1LGhlaWdodDoxZTMscGF0aDoibTE4NyA3ODZsMCAyLTE4Ny0xODggMTg4LTE4NyAwIDAgOTM3IDAgMCAzNzMtOTM4IDB6IG0wLTQ5OWwwIDEtMTg3LTE4OCAxODgtMTg4IDAgMCA5MzcgMCAwIDM3Ni05MzgtMXoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LHBsb3RseWxvZ286e3dpZHRoOjE1NDIsaGVpZ2h0OjFlMyxwYXRoOiJtMC0xMGgxODJ2LTE0MGgtMTgydjE0MHogbTIyOCAxNDZoMTgzdi0yODZoLTE4M3YyODZ6IG0yMjUgNzE0aDE4MnYtMTAwMGgtMTgydjEwMDB6IG0yMjUtMjg1aDE4MnYtNzE1aC0xODJ2NzE1eiBtMjI1IDE0MmgxODN2LTg1N2gtMTgzdjg1N3ogbTIzMS00MjhoMTgydi00MjloLTE4MnY0Mjl6IG0yMjUtMjkxaDE4M3YtMTM4aC0xODN2MTM4eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sInotYXhpcyI6e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6Im04MzMgNWwtMTcgMTA4djQxbC0xMzAtNjUgMTMwLTY2YzAgMCAwIDM4IDAgMzkgMC0xIDM2LTE0IDM5LTI1IDQtMTUtNi0yMi0xNi0zMC0xNS0xMi0zOS0xNi01Ni0yMC05MC0yMi0xODctMjMtMjc5LTIzLTI2MSAwLTM0MSAzNC0zNTMgNTkgMyA2MCAyMjggMTEwIDIyOCAxMTAtMTQwLTgtMzUxLTM1LTM1MS0xMTYgMC0xMjAgMjkzLTE0MiA0NzQtMTQyIDE1NSAwIDQ3NyAyMiA0NzcgMTQyIDAgNTAtNzQgNzktMTYzIDk2eiBtLTM3NCA5NGMtNTgtNS05OS0yMS05OS00MCAwLTI0IDY1LTQzIDE0NC00MyA3OSAwIDE0MyAxOSAxNDMgNDMgMCAxOS00MiAzNC05OCA0MHYyMTZoODdsLTEzMiAxMzUtMTMzLTEzNWg4OHYtMjE2eiBtMTY3IDUxNWgtMTM2djFjMTYgMTYgMzEgMzQgNDYgNTJsODQgMTA5djU0aC0yMzB2LTcxaDEyNHYtMWMtMTYtMTctMjgtMzItNDQtNTFsLTg5LTExNHYtNTFoMjQ1djcyeiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sIjNkX3JvdGF0ZSI6e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6Im05MjIgNjYwYy01IDQtOSA3LTE0IDExLTM1OSAyNjMtNTgwLTMxLTU4MC0zMWwtMTAyIDI4IDU4LTQwMGMwIDEgMSAxIDIgMiAxMTggMTA4IDM1MSAyNDkgMzUxIDI0OXMtNjIgMjctMTAwIDQyYzg4IDgzIDIyMiAxODMgMzQ3IDEyMiAxNi04IDMwLTE3IDQ0LTI3LTIgMS00IDItNiA0eiBtMzYtMzI5YzAgMCA2NCAyMjktODggMjk2LTYyIDI3LTEyNCAxNC0xNzUtMTEgMTU3LTc4IDIyNS0yMDggMjQ5LTI2NiA4LTE5IDExLTMxIDExLTMxIDIgNSA2IDE1IDExIDMyLTUtMTMtOC0yMC04LTIweiBtLTc3NS0yMzljNzAtMzEgMTE3LTUwIDE5OC0zMi0xMjEgODAtMTk5IDM0Ni0xOTkgMzQ2bC05Ni0xNS01OC0xMmMwIDAgNTUtMjI2IDE1NS0yODd6IG02MDMgMTMzbC0zMTctMTM5YzAgMCA0LTQgMTktMTQgNy01IDI0LTE1IDI0LTE1cy0xNzctMTQ3LTM4OSA0YzIzNS0yODcgNTM2LTExMiA1MzYtMTEybDMxLTIyIDEwMCAyOTktNC0xeiBtLTI5OC0xNTNjNi00IDE0LTkgMjQtMTUgMCAwLTE3IDEwLTI0IDE1eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sY2FtZXJhOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOiJtNTAwIDQ1MGMtODMgMC0xNTAtNjctMTUwLTE1MCAwLTgzIDY3LTE1MCAxNTAtMTUwIDgzIDAgMTUwIDY3IDE1MCAxNTAgMCA4My02NyAxNTAtMTUwIDE1MHogbTQwMCAxNTBoLTEyMGMtMTYgMC0zNCAxMy0zOSAyOWwtMzEgOTNjLTYgMTUtMjMgMjgtNDAgMjhoLTM0MGMtMTYgMC0zNC0xMy0zOS0yOGwtMzEtOTRjLTYtMTUtMjMtMjgtNDAtMjhoLTEyMGMtNTUgMC0xMDAtNDUtMTAwLTEwMHYtNDUwYzAtNTUgNDUtMTAwIDEwMC0xMDBoODAwYzU1IDAgMTAwIDQ1IDEwMCAxMDB2NDUwYzAgNTUtNDUgMTAwLTEwMCAxMDB6IG0tNDAwLTU1MGMtMTM4IDAtMjUwIDExMi0yNTAgMjUwIDAgMTM4IDExMiAyNTAgMjUwIDI1MCAxMzggMCAyNTAtMTEyIDI1MC0yNTAgMC0xMzgtMTEyLTI1MC0yNTAtMjUweiBtMzY1IDM4MGMtMTkgMC0zNSAxNi0zNSAzNSAwIDE5IDE2IDM1IDM1IDM1IDE5IDAgMzUtMTYgMzUtMzUgMC0xOS0xNi0zNS0zNS0zNXoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LG1vdmllOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOiJtOTM4IDQxM2wtMTg4LTEyNWMwIDM3LTE3IDcxLTQ0IDk0IDY0IDM4IDEwNyAxMDcgMTA3IDE4NyAwIDEyMS05OCAyMTktMjE5IDIxOS0xMjEgMC0yMTktOTgtMjE5LTIxOSAwLTYxIDI1LTExNyA2Ni0xNTZoLTExNWMzMCAzMyA0OSA3NiA0OSAxMjUgMCAxMDMtODQgMTg3LTE4NyAxODdzLTE4OC04NC0xODgtMTg3YzAtNTcgMjYtMTA3IDY1LTE0MS0zOC0yMi02NS02Mi02NS0xMDl2LTI1MGMwLTcwIDU2LTEyNiAxMjUtMTI2aDUwMGM2OSAwIDEyNSA1NiAxMjUgMTI2bDE4OC0xMjZjMzQgMCA2MiAyOCA2MiA2M3YzNzVjMCAzNS0yOCA2My02MiA2M3ogbS03NTAgMGMtNjkgMC0xMjUgNTYtMTI1IDEyNXM1NiAxMjUgMTI1IDEyNSAxMjUtNTYgMTI1LTEyNS01Ni0xMjUtMTI1LTEyNXogbTQwNi0xYy04NyAwLTE1NyA3MC0xNTcgMTU3IDAgODYgNzAgMTU2IDE1NyAxNTZzMTU2LTcwIDE1Ni0xNTYtNzAtMTU3LTE1Ni0xNTd6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSxxdWVzdGlvbjp7d2lkdGg6ODU3LjEsaGVpZ2h0OjFlMyxwYXRoOiJtNTAwIDgydjEwN3EwIDgtNSAxM3QtMTMgNWgtMTA3cS04IDAtMTMtNXQtNS0xM3YtMTA3cTAtOCA1LTEzdDEzLTVoMTA3cTggMCAxMyA1dDUgMTN6IG0xNDMgMzc1cTAgNDktMzEgOTF0LTc3IDY1LTk1IDIzcS0xMzYgMC0yMDctMTE5LTktMTQgNC0yNGw3NC01NXE0LTQgMTAtNCA5IDAgMTQgNyAzMCAzOCA0OCA1MSAxOSAxNCA0OCAxNCAyNyAwIDQ4LTE1dDIxLTMzcTAtMjEtMTEtMzR0LTM4LTI1cS0zNS0xNi02NS00OHQtMjktNzB2LTIwcTAtOCA1LTEzdDEzLTVoMTA3cTggMCAxMyA1dDUgMTNxMCAxMCAxMiAyN3QzMCAyOHExOCAxMCAyOCAxNnQyNSAxOSAyNSAyNyAxNiAzNCA3IDQ1eiBtMjE0LTEwN3EwLTExNy01Ny0yMTV0LTE1Ni0xNTYtMjE1LTU4LTIxNiA1OC0xNTUgMTU2LTU4IDIxNSA1OCAyMTUgMTU1IDE1NiAyMTYgNTggMjE1LTU4IDE1Ni0xNTYgNTctMjE1eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sZGlzazp7d2lkdGg6ODU3LjEsaGVpZ2h0OjFlMyxwYXRoOiJtMjE0LTdoNDI5djIxNGgtNDI5di0yMTR6IG01MDAgMGg3MnY1MDBxMCA4LTYgMjF0LTExIDIwbC0xNTcgMTU2cS01IDYtMTkgMTJ0LTIyIDV2LTIzMnEwLTIyLTE1LTM4dC0zOC0xNmgtMzIycS0yMiAwLTM3IDE2dC0xNiAzOHYyMzJoLTcydi03MTRoNzJ2MjMycTAgMjIgMTYgMzh0MzcgMTZoNDY1cTIyIDAgMzgtMTZ0MTUtMzh2LTIzMnogbS0yMTQgNTE4djE3OHEwIDgtNSAxM3QtMTMgNWgtMTA3cS03IDAtMTMtNXQtNS0xM3YtMTc4cTAtOCA1LTEzdDEzLTVoMTA3cTcgMCAxMyA1dDUgMTN6IG0zNTctMTh2LTUxOHEwLTIyLTE1LTM4dC0zOC0xNmgtNzUwcS0yMyAwLTM4IDE2dC0xNiAzOHY3NTBxMCAyMiAxNiAzOHQzOCAxNmg1MTdxMjMgMCA1MC0xMnQ0Mi0yNmwxNTYtMTU3cTE2LTE1IDI3LTQydDExLTQ5eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sZHJhd29wZW5wYXRoOnt3aWR0aDo3MCxoZWlnaHQ6NzAscGF0aDoiTTMzLjIxLDg1LjY1YTcuMzEsNy4zMSwwLDAsMS0yLjU5LS40OGMtOC4xNi0zLjExLTkuMjctMTkuOC05Ljg4LTQxLjMtLjEtMy41OC0uMTktNi42OC0uMzUtOS0uMTUtMi4xLS42Ny0zLjQ4LTEuNDMtMy43OS0yLjEzLS44OC03LjkxLDIuMzItMTIsNS44NkwzLDMyLjM4YzEuODctMS42NCwxMS41NS05LjY2LDE4LjI3LTYuOSwyLjEzLjg3LDQuNzUsMy4xNCw1LjE3LDksLjE3LDIuNDMuMjYsNS41OS4zNiw5LjI1YTIyNC4xNywyMjQuMTcsMCwwLDAsMS41LDIzLjRjMS41NCwxMC43Niw0LDEyLjIyLDQuNDgsMTIuNC44NC4zMiwyLjc5LS40Niw1Ljc2LTMuNTlMNDMsODAuMDdDNDEuNTMsODEuNTcsMzcuNjgsODUuNjQsMzMuMjEsODUuNjVaTTc0LjgxLDY5YTExLjM0LDExLjM0LDAsMCwwLDYuMDktNi43Mkw4Ny4yNiw0NC41LDc0LjcyLDMyLDU2LjksMzguMzVjLTIuMzcuODYtNS41NywzLjQyLTYuNjEsNkwzOC42NSw3Mi4xNGw4LjQyLDguNDNaTTU1LDQ2LjI3YTcuOTEsNy45MSwwLDAsMSwzLjY0LTMuMTdsMTQuOC01LjMsOCw4TDc2LjExLDYwLjZsLS4wNi4xOWE2LjM3LDYuMzcsMCwwLDEtMywzLjQzTDQ4LjI1LDc0LjU5LDQ0LjYyLDcxWm0xNi41Nyw3LjgyQTYuOSw2LjksMCwxLDAsNjQuNjQsNjEsNi45MSw2LjkxLDAsMCwwLDcxLjU0LDU0LjA5Wm0tNC4wNSwwYTIuODUsMi44NSwwLDEsMS0yLjg1LTIuODVBMi44NiwyLjg2LDAsMCwxLDY3LjQ5LDU0LjA5Wm0tNC4xMyw1LjIyTDYwLjUsNTYuNDUsNDQuMjYsNzIuN2wyLjg2LDIuODZaTTk3LjgzLDM1LjY3LDg0LjE0LDIybC04LjU3LDguNTdMODkuMjYsNDQuMjRabS0xMy42OS04LDgsOC0yLjg1LDIuODUtOC04WiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgMSAtMTUgLTE1KSJ9LGRyYXdjbG9zZWRwYXRoOnt3aWR0aDo5MCxoZWlnaHQ6OTAscGF0aDoiTTg4LjQxLDIxLjEyYTI2LjU2LDI2LjU2LDAsMCwwLTM2LjE4LDBsLTIuMDcsMi0yLjA3LTJhMjYuNTcsMjYuNTcsMCwwLDAtMzYuMTgsMCwyMy43NCwyMy43NCwwLDAsMCwwLDM0LjhMNDgsOTAuMTJhMy4yMiwzLjIyLDAsMCwwLDQuNDIsMGwzNi0zNC4yMWEyMy43MywyMy43MywwLDAsMCwwLTM0Ljc5Wk04NCw1MS4yNCw1MC4xNiw4My4zNSwxNi4zNSw1MS4yNWExNy4yOCwxNy4yOCwwLDAsMSwwLTI1LjQ3LDIwLDIwLDAsMCwxLDI3LjMsMGw0LjI5LDQuMDdhMy4yMywzLjIzLDAsMCwwLDQuNDQsMGw0LjI5LTQuMDdhMjAsMjAsMCwwLDEsMjcuMywwLDE3LjI3LDE3LjI3LDAsMCwxLDAsMjUuNDZaTTY2Ljc2LDQ3LjY4aC0zM3Y2LjkxaDMzWk01My4zNSwzNUg0Ni40NFY2OGg2LjkxWiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgMSAtNSAtNSkifSxsYXNzbzp7d2lkdGg6MTAzMSxoZWlnaHQ6MWUzLHBhdGg6Im0xMDE4IDUzOGMtMzYgMjA3LTI5MCAzMzYtNTY4IDI4Ni0yNzctNDgtNDczLTI1Ni00MzYtNDYzIDEwLTU3IDM2LTEwOCA3Ni0xNTEtMTMtNjYgMTEtMTM3IDY4LTE4MyAzNC0yOCA3NS00MSAxMTQtNDJsLTU1LTcwIDAgMGMtMi0xLTMtMi00LTMtMTAtMTQtOC0zNCA1LTQ1IDE0LTExIDM0LTggNDUgNCAxIDEgMiAzIDIgNWwwIDAgMTEzIDE0MGMxNiAxMSAzMSAyNCA0NSA0MCA0IDMgNiA3IDggMTEgNDgtMyAxMDAgMCAxNTEgOSAyNzggNDggNDczIDI1NSA0MzYgNDYyeiBtLTYyNC0zNzljLTgwIDE0LTE0OSA0OC0xOTcgOTYgNDIgNDIgMTA5IDQ3IDE1NiA5IDMzLTI2IDQ3LTY2IDQxLTEwNXogbS0xODctNzRjLTE5IDE2LTMzIDM3LTM5IDYwIDUwLTMyIDEwOS01NSAxNzQtNjgtNDItMjUtOTUtMjQtMTM1IDh6IG0zNjAgNzVjLTM0LTctNjktOS0xMDItOCA4IDYyLTE2IDEyOC02OCAxNzAtNzMgNTktMTc1IDU0LTI0NC01LTkgMjAtMTYgNDAtMjAgNjEtMjggMTU5IDEyMSAzMTcgMzMzIDM1NHM0MDctNjAgNDM0LTIxN2MyOC0xNTktMTIxLTMxOC0zMzMtMzU1eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sc2VsZWN0Ym94Ont3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOiJtMCA4NTBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0yODYgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTI4NSAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtMjg2IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0tODU3LTI4NmwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTg1NyAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtLTg1Ny0yODVsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG04NTcgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbS04NTctMjg2bDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtMjg2IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0yODUgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTI4NiAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sZHJhd2xpbmU6e3dpZHRoOjcwLGhlaWdodDo3MCxwYXRoOiJNNjAuNjQsNjIuM2ExMS4yOSwxMS4yOSwwLDAsMCw2LjA5LTYuNzJsNi4zNS0xNy43Mkw2MC41NCwyNS4zMWwtMTcuODIsNi40Yy0yLjM2Ljg2LTUuNTcsMy40MS02LjYsNkwyNC40OCw2NS41bDguNDIsOC40MlpNNDAuNzksMzkuNjNhNy44OSw3Ljg5LDAsMCwxLDMuNjUtMy4xN2wxNC43OS01LjMxLDgsOEw2MS45NCw1NGwtLjA2LjE5YTYuNDQsNi40NCwwLDAsMS0zLDMuNDNMMzQuMDcsNjhsLTMuNjItMy42M1ptMTYuNTcsNy44MWE2LjksNi45LDAsMSwwLTYuODksNi45QTYuOSw2LjksMCwwLDAsNTcuMzYsNDcuNDRabS00LDBhMi44NiwyLjg2LDAsMSwxLTIuODUtMi44NUEyLjg2LDIuODYsMCwwLDEsNTMuMzIsNDcuNDRabS00LjEzLDUuMjJMNDYuMzMsNDkuOCwzMC4wOCw2Ni4wNWwyLjg2LDIuODZaTTgzLjY1LDI5LDcwLDE1LjM0LDYxLjQsMjMuOSw3NS4wOSwzNy41OVpNNzAsMjEuMDZsOCw4LTIuODQsMi44NS04LThaTTg3LDgwLjQ5SDEwLjY3Vjg3SDg3WiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgMSAtMTUgLTE1KSJ9LGRyYXdyZWN0Ont3aWR0aDo4MCxoZWlnaHQ6ODAscGF0aDoiTTc4LDIyVjc5SDIxVjIySDc4bTktOUgxMlY4OEg4N1YxM1pNNjgsNDYuMjJIMzFWNTRINjhaTTUzLDMySDQ1LjIyVjY5SDUzWiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgMSAtMTAgLTEwKSJ9LGRyYXdjaXJjbGU6e3dpZHRoOjgwLGhlaWdodDo4MCxwYXRoOiJNNTAsODQuNzJDMjYuODQsODQuNzIsOCw2OS4yOCw4LDUwLjNTMjYuODQsMTUuODcsNTAsMTUuODcsOTIsMzEuMzEsOTIsNTAuMyw3My4xNiw4NC43Miw1MCw4NC43MlptMC02MC41OWMtMTguNiwwLTMzLjc0LDExLjc0LTMzLjc0LDI2LjE3UzMxLjQsNzYuNDYsNTAsNzYuNDYsODMuNzQsNjQuNzIsODMuNzQsNTAuMyw2OC42LDI0LjEzLDUwLDI0LjEzWm0xNy4xNSwyMmgtMzR2Ny4xMWgzNFptLTEzLjgtMTNINDYuMjR2MzRoNy4xMVoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIDEgLTEwIC0xMCkifSxlcmFzZXNoYXBlOnt3aWR0aDo4MCxoZWlnaHQ6ODAscGF0aDoiTTgyLjc3LDc4SDMxLjg1TDYsNDkuNTcsMzEuODUsMjEuMTRIODIuNzdhOC43Miw4LjcyLDAsMCwxLDguNjUsOC43N1Y2OS4yNEE4LjcyLDguNzIsMCwwLDEsODIuNzcsNzhaTTM1LjQ2LDY5Ljg0SDgyLjc3YS41Ny41NywwLDAsMCwuNDktLjZWMjkuOTFhLjU3LjU3LDAsMCwwLS40OS0uNjFIMzUuNDZMMTcsNDkuNTdabTMyLjY4LTM0LjctMjQsMjQsNSw1LDI0LTI0Wm0tMTksLjUzLTUsNSwyNCwyNCw1LTVaIix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAxIC0xMCAtMTApIn0sc3Bpa2VsaW5lOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOiJNNTEyIDQwOWMwLTU3LTQ2LTEwNC0xMDMtMTA0LTU3IDAtMTA0IDQ3LTEwNCAxMDQgMCA1NyA0NyAxMDMgMTA0IDEwMyA1NyAwIDEwMy00NiAxMDMtMTAzeiBtLTMyNy0zOWw5MiAwIDAgOTItOTIgMHogbS0xODUgMGw5MiAwIDAgOTItOTIgMHogbTM3MC0xODZsOTIgMCAwIDkzLTkyIDB6IG0wLTE4NGw5MiAwIDAgOTItOTIgMHoiLHRyYW5zZm9ybToibWF0cml4KDEuNSAwIDAgLTEuNSAwIDg1MCkifSxwZW5jaWw6e3dpZHRoOjE3OTIsaGVpZ2h0OjE3OTIscGF0aDoiTTQ5MSAxNTM2bDkxLTkxLTIzNS0yMzUtOTEgOTF2MTA3aDEyOHYxMjhoMTA3em01MjMtOTI4cTAtMjItMjItMjItMTAgMC0xNyA3bC01NDIgNTQycS03IDctNyAxNyAwIDIyIDIyIDIyIDEwIDAgMTctN2w1NDItNTQycTctNyA3LTE3em0tNTQtMTkybDQxNiA0MTYtODMyIDgzMmgtNDE2di00MTZ6bTY4MyA5NnEwIDUzLTM3IDkwbC0xNjYgMTY2LTQxNi00MTYgMTY2LTE2NXEzNi0zOCA5MC0zOCA1MyAwIDkxIDM4bDIzNSAyMzRxMzcgMzkgMzcgOTF6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAxIDAgMSkifSxuZXdwbG90bHlsb2dvOntuYW1lOiJuZXdwbG90bHlsb2dvIixzdmc6IjxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgMTMyIDEzMic+PGRlZnM+PHN0eWxlPi5jbHMtMSB7ZmlsbDogIzNmNGY3NTt9IC5jbHMtMiB7ZmlsbDogIzgwY2ZiZTt9IC5jbHMtMyB7ZmlsbDogI2ZmZjt9PC9zdHlsZT48L2RlZnM+PHRpdGxlPnBsb3RseS1sb2dvbWFyazwvdGl0bGU+PGcgaWQ9J3N5bWJvbCc+PHJlY3QgY2xhc3M9J2Nscy0xJyB3aWR0aD0nMTMyJyBoZWlnaHQ9JzEzMicgcng9JzYnIHJ5PSc2Jy8+PGNpcmNsZSBjbGFzcz0nY2xzLTInIGN4PSc3OCcgY3k9JzU0JyByPSc2Jy8+PGNpcmNsZSBjbGFzcz0nY2xzLTInIGN4PScxMDInIGN5PSczMCcgcj0nNicvPjxjaXJjbGUgY2xhc3M9J2Nscy0yJyBjeD0nNzgnIGN5PSczMCcgcj0nNicvPjxjaXJjbGUgY2xhc3M9J2Nscy0yJyBjeD0nNTQnIGN5PSczMCcgcj0nNicvPjxjaXJjbGUgY2xhc3M9J2Nscy0yJyBjeD0nMzAnIGN5PSczMCcgcj0nNicvPjxjaXJjbGUgY2xhc3M9J2Nscy0yJyBjeD0nMzAnIGN5PSc1NCcgcj0nNicvPjxwYXRoIGNsYXNzPSdjbHMtMycgZD0nTTMwLDcyYTYsNiwwLDAsMC02LDZ2MjRhNiw2LDAsMCwwLDEyLDBWNzhBNiw2LDAsMCwwLDMwLDcyWicvPjxwYXRoIGNsYXNzPSdjbHMtMycgZD0nTTc4LDcyYTYsNiwwLDAsMC02LDZ2MjRhNiw2LDAsMCwwLDEyLDBWNzhBNiw2LDAsMCwwLDc4LDcyWicvPjxwYXRoIGNsYXNzPSdjbHMtMycgZD0nTTU0LDQ4YTYsNiwwLDAsMC02LDZ2NDhhNiw2LDAsMCwwLDEyLDBWNTRBNiw2LDAsMCwwLDU0LDQ4WicvPjxwYXRoIGNsYXNzPSdjbHMtMycgZD0nTTEwMiw0OGE2LDYsMCwwLDAtNiw2djQ4YTYsNiwwLDAsMCwxMiwwVjU0QTYsNiwwLDAsMCwxMDIsNDhaJy8+PC9nPjwvc3ZnPiJ9fX0se31dLDE4NjpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtyLmlzTGVmdEFuY2hvcj1mdW5jdGlvbihlKXtyZXR1cm4ibGVmdCI9PT1lLnhhbmNob3J8fCJhdXRvIj09PWUueGFuY2hvciYmZS54PD0xLzN9LHIuaXNDZW50ZXJBbmNob3I9ZnVuY3Rpb24oZSl7cmV0dXJuImNlbnRlciI9PT1lLnhhbmNob3J8fCJhdXRvIj09PWUueGFuY2hvciYmZS54PjEvMyYmZS54PDIvM30sci5pc1JpZ2h0QW5jaG9yPWZ1bmN0aW9uKGUpe3JldHVybiJyaWdodCI9PT1lLnhhbmNob3J8fCJhdXRvIj09PWUueGFuY2hvciYmZS54Pj0yLzN9LHIuaXNUb3BBbmNob3I9ZnVuY3Rpb24oZSl7cmV0dXJuInRvcCI9PT1lLnlhbmNob3J8fCJhdXRvIj09PWUueWFuY2hvciYmZS55Pj0yLzN9LHIuaXNNaWRkbGVBbmNob3I9ZnVuY3Rpb24oZSl7cmV0dXJuIm1pZGRsZSI9PT1lLnlhbmNob3J8fCJhdXRvIj09PWUueWFuY2hvciYmZS55PjEvMyYmZS55PDIvM30sci5pc0JvdHRvbUFuY2hvcj1mdW5jdGlvbihlKXtyZXR1cm4iYm90dG9tIj09PWUueWFuY2hvcnx8ImF1dG8iPT09ZS55YW5jaG9yJiZlLnk8PTEvM319LHt9XSwxODc6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi9tb2QiKSxhPW4ubW9kLGk9bi5tb2RIYWxmLG89TWF0aC5QSSxsPTIqbztmdW5jdGlvbiBzKGUpe3JldHVybiBNYXRoLmFicyhlWzFdLWVbMF0pPmwtMWUtMTR9ZnVuY3Rpb24gYyhlLHQpe3JldHVybiBpKHQtZSxsKX1mdW5jdGlvbiB1KGUsdCl7aWYocyh0KSlyZXR1cm4hMDt2YXIgcixuO3RbMF08dFsxXT8ocj10WzBdLG49dFsxXSk6KHI9dFsxXSxuPXRbMF0pLChyPWEocixsKSk+KG49YShuLGwpKSYmKG4rPWwpO3ZhciBpPWEoZSxsKSxvPWkrbDtyZXR1cm4gaT49ciYmaTw9bnx8bz49ciYmbzw9bn1mdW5jdGlvbiBmKGUsdCxyLG4sYSxpLGMpe2E9YXx8MCxpPWl8fDA7dmFyIHUsZixkLHAsaCxnPXMoW3Isbl0pO2Z1bmN0aW9uIHYoZSx0KXtyZXR1cm5bZSpNYXRoLmNvcyh0KSthLGktZSpNYXRoLnNpbih0KV19Zz8odT0wLGY9byxkPWwpOnI8bj8odT1yLGQ9bik6KHU9bixkPXIpLGU8dD8ocD1lLGg9dCk6KHA9dCxoPWUpO3ZhciBtLHk9TWF0aC5hYnMoZC11KTw9bz8wOjE7ZnVuY3Rpb24geChlLHQscil7cmV0dXJuIkEiK1tlLGVdKyIgIitbMCx5LHJdKyIgIit2KGUsdCl9cmV0dXJuIGc/bT1udWxsPT09cD8iTSIrdihoLHUpK3goaCxmLDApK3goaCxkLDApKyJaIjoiTSIrdihwLHUpK3gocCxmLDApK3gocCxkLDApKyJaTSIrdihoLHUpK3goaCxmLDEpK3goaCxkLDEpKyJaIjpudWxsPT09cD8obT0iTSIrdihoLHUpK3goaCxkLDApLGMmJihtKz0iTDAsMFoiKSk6bT0iTSIrdihwLHUpKyJMIit2KGgsdSkreChoLGQsMCkrIkwiK3YocCxkKSt4KHAsdSwxKSsiWiIsbX10LmV4cG9ydHM9e2RlZzJyYWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUvMTgwKm99LHJhZDJkZWc6ZnVuY3Rpb24oZSl7cmV0dXJuIGUvbyoxODB9LGFuZ2xlRGVsdGE6YyxhbmdsZURpc3Q6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTWF0aC5hYnMoYyhlLHQpKX0saXNGdWxsQ2lyY2xlOnMsaXNBbmdsZUluc2lkZVNlY3Rvcjp1LGlzUHRJbnNpZGVTZWN0b3I6ZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuISF1KHQsbikmJihyWzBdPHJbMV0/KGE9clswXSxpPXJbMV0pOihhPXJbMV0saT1yWzBdKSxlPj1hJiZlPD1pKTt2YXIgYSxpfSxwYXRoQXJjOmZ1bmN0aW9uKGUsdCxyLG4sYSl7cmV0dXJuIGYobnVsbCxlLHQscixuLGEsMCl9LHBhdGhTZWN0b3I6ZnVuY3Rpb24oZSx0LHIsbixhKXtyZXR1cm4gZihudWxsLGUsdCxyLG4sYSwxKX0scGF0aEFubnVsdXM6ZnVuY3Rpb24oZSx0LHIsbixhLGkpe3JldHVybiBmKGUsdCxyLG4sYSxpLDEpfX19LHsiLi9tb2QiOjIwOX1dLDE4ODpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1BcnJheS5pc0FycmF5LGE9InVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmQXJyYXlCdWZmZXIuaXNWaWV3P0FycmF5QnVmZmVyOntpc1ZpZXc6ZnVuY3Rpb24oKXtyZXR1cm4hMX19LGk9InVuZGVmaW5lZCI9PXR5cGVvZiBEYXRhVmlldz9mdW5jdGlvbigpe306RGF0YVZpZXc7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gYS5pc1ZpZXcoZSkmJiEoZSBpbnN0YW5jZW9mIGkpfWZ1bmN0aW9uIGwoZSl7cmV0dXJuIG4oZSl8fG8oZSl9ZnVuY3Rpb24gcyhlLHQscil7aWYobChlKSl7aWYobChlWzBdKSl7Zm9yKHZhciBuPXIsYT0wO2E8ZS5sZW5ndGg7YSsrKW49dChuLGVbYV0ubGVuZ3RoKTtyZXR1cm4gbn1yZXR1cm4gZS5sZW5ndGh9cmV0dXJuIDB9ci5pc1R5cGVkQXJyYXk9byxyLmlzQXJyYXlPclR5cGVkQXJyYXk9bCxyLmlzQXJyYXkxRD1mdW5jdGlvbihlKXtyZXR1cm4hbChlWzBdKX0sci5lbnN1cmVBcnJheT1mdW5jdGlvbihlLHQpe3JldHVybiBuKGUpfHwoZT1bXSksZS5sZW5ndGg9dCxlfSxyLmNvbmNhdD1mdW5jdGlvbigpe3ZhciBlLHQscixhLGksbyxsLHMsYz1bXSx1PSEwLGY9MDtmb3Iocj0wO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspKG89KGE9YXJndW1lbnRzW3JdKS5sZW5ndGgpJiYodD9jLnB1c2goYSk6KHQ9YSxpPW8pLG4oYSk/ZT0hMToodT0hMSxmP2UhPT1hLmNvbnN0cnVjdG9yJiYoZT0hMSk6ZT1hLmNvbnN0cnVjdG9yKSxmKz1vKTtpZighZilyZXR1cm5bXTtpZighYy5sZW5ndGgpcmV0dXJuIHQ7aWYodSlyZXR1cm4gdC5jb25jYXQuYXBwbHkodCxjKTtpZihlKXtmb3IoKGw9bmV3IGUoZikpLnNldCh0KSxyPTA7cjxjLmxlbmd0aDtyKyspYT1jW3JdLGwuc2V0KGEsaSksaSs9YS5sZW5ndGg7cmV0dXJuIGx9Zm9yKGw9bmV3IEFycmF5KGYpLHM9MDtzPHQubGVuZ3RoO3MrKylsW3NdPXRbc107Zm9yKHI9MDtyPGMubGVuZ3RoO3IrKyl7Zm9yKGE9Y1tyXSxzPTA7czxhLmxlbmd0aDtzKyspbFtpK3NdPWFbc107aSs9c31yZXR1cm4gbH0sci5tYXhSb3dMZW5ndGg9ZnVuY3Rpb24oZSl7cmV0dXJuIHMoZSxNYXRoLm1heCwwKX0sci5taW5Sb3dMZW5ndGg9ZnVuY3Rpb24oZSl7cmV0dXJuIHMoZSxNYXRoLm1pbiwxLzApfX0se31dLDE4OTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJmYXN0LWlzbnVtZXJpYyIpLGE9ZSgiLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxpPS9eWyciJSwkI1xzJ10rfFssIF18WyciJSwkI1xzJ10rJC9nO3QuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGUmJihlPWUucmVwbGFjZShpLCIiKSksbihlKT9OdW1iZXIoZSk6YX19LHsiLi4vY29uc3RhbnRzL251bWVyaWNhbCI6MTgxLCJmYXN0LWlzbnVtZXJpYyI6MTF9XSwxOTA6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PWUuX2Z1bGxMYXlvdXQ7dC5fZ2xjYW52YXMmJnQuX2dsY2FudmFzLnNpemUoKSYmdC5fZ2xjYW52YXMuZWFjaCgoZnVuY3Rpb24oZSl7ZS5yZWdsJiZlLnJlZ2wuY2xlYXIoe2NvbG9yOiEwLGRlcHRoOiEwfSl9KSl9fSx7fV0sMTkxOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz1mdW5jdGlvbihlKXtlLl9yZXNwb25zaXZlQ2hhcnRIYW5kbGVyJiYod2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsZS5fcmVzcG9uc2l2ZUNoYXJ0SGFuZGxlciksZGVsZXRlIGUuX3Jlc3BvbnNpdmVDaGFydEhhbmRsZXIpfX0se31dLDE5MjpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJmYXN0LWlzbnVtZXJpYyIpLGE9ZSgidGlueWNvbG9yMiIpLGk9ZSgiLi4vcGxvdHMvYXR0cmlidXRlcyIpLG89ZSgiLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL3NjYWxlcyIpLGw9ZSgiLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyIpLkRFU0VMRUNURElNLHM9ZSgiLi9uZXN0ZWRfcHJvcGVydHkiKSxjPWUoIi4vcmVnZXgiKS5jb3VudGVyLHU9ZSgiLi9tb2QiKS5tb2RIYWxmLGY9ZSgiLi9hcnJheSIpLmlzQXJyYXlPclR5cGVkQXJyYXk7ZnVuY3Rpb24gZChlLHQpe3ZhciBuPXIudmFsT2JqZWN0TWV0YVt0LnZhbFR5cGVdO2lmKHQuYXJyYXlPayYmZihlKSlyZXR1cm4hMDtpZihuLnZhbGlkYXRlRnVuY3Rpb24pcmV0dXJuIG4udmFsaWRhdGVGdW5jdGlvbihlLHQpO3ZhciBhPXt9LGk9YSxvPXtzZXQ6ZnVuY3Rpb24oZSl7aT1lfX07cmV0dXJuIG4uY29lcmNlRnVuY3Rpb24oZSxvLGEsdCksaSE9PWF9ci52YWxPYmplY3RNZXRhPXtkYXRhX2FycmF5Ontjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbihlLHQscil7ZihlKT90LnNldChlKTp2b2lkIDAhPT1yJiZ0LnNldChyKX19LGVudW1lcmF0ZWQ6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKGUsdCxyLG4pe24uY29lcmNlTnVtYmVyJiYoZT0rZSksLTE9PT1uLnZhbHVlcy5pbmRleE9mKGUpP3Quc2V0KHIpOnQuc2V0KGUpfSx2YWxpZGF0ZUZ1bmN0aW9uOmZ1bmN0aW9uKGUsdCl7dC5jb2VyY2VOdW1iZXImJihlPStlKTtmb3IodmFyIHI9dC52YWx1ZXMsbj0wO248ci5sZW5ndGg7bisrKXt2YXIgYT1TdHJpbmcocltuXSk7aWYoIi8iPT09YS5jaGFyQXQoMCkmJiIvIj09PWEuY2hhckF0KGEubGVuZ3RoLTEpKXtpZihuZXcgUmVnRXhwKGEuc3Vic3RyKDEsYS5sZW5ndGgtMikpLnRlc3QoZSkpcmV0dXJuITB9ZWxzZSBpZihlPT09cltuXSlyZXR1cm4hMH1yZXR1cm4hMX19LGJvb2xlYW46e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKGUsdCxyKXshMD09PWV8fCExPT09ZT90LnNldChlKTp0LnNldChyKX19LG51bWJlcjp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24oZSx0LHIsYSl7IW4oZSl8fHZvaWQgMCE9PWEubWluJiZlPGEubWlufHx2b2lkIDAhPT1hLm1heCYmZT5hLm1heD90LnNldChyKTp0LnNldCgrZSl9fSxpbnRlZ2VyOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbihlLHQscixhKXtlJTF8fCFuKGUpfHx2b2lkIDAhPT1hLm1pbiYmZTxhLm1pbnx8dm9pZCAwIT09YS5tYXgmJmU+YS5tYXg/dC5zZXQocik6dC5zZXQoK2UpfX0sc3RyaW5nOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbihlLHQscixuKXtpZigic3RyaW5nIiE9dHlwZW9mIGUpe3ZhciBhPSJudW1iZXIiPT10eXBlb2YgZTshMCE9PW4uc3RyaWN0JiZhP3Quc2V0KFN0cmluZyhlKSk6dC5zZXQocil9ZWxzZSBuLm5vQmxhbmsmJiFlP3Quc2V0KHIpOnQuc2V0KGUpfX0sY29sb3I6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKGUsdCxyKXthKGUpLmlzVmFsaWQoKT90LnNldChlKTp0LnNldChyKX19LGNvbG9ybGlzdDp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24oZSx0LHIpe0FycmF5LmlzQXJyYXkoZSkmJmUubGVuZ3RoJiZlLmV2ZXJ5KChmdW5jdGlvbihlKXtyZXR1cm4gYShlKS5pc1ZhbGlkKCl9KSk/dC5zZXQoZSk6dC5zZXQocil9fSxjb2xvcnNjYWxlOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbihlLHQscil7dC5zZXQoby5nZXQoZSxyKSl9fSxhbmdsZTp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24oZSx0LHIpeyJhdXRvIj09PWU/dC5zZXQoImF1dG8iKTpuKGUpP3Quc2V0KHUoK2UsMzYwKSk6dC5zZXQocil9fSxzdWJwbG90aWQ6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhPW4ucmVnZXh8fGMocik7InN0cmluZyI9PXR5cGVvZiBlJiZhLnRlc3QoZSk/dC5zZXQoZSk6dC5zZXQocil9LHZhbGlkYXRlRnVuY3Rpb246ZnVuY3Rpb24oZSx0KXt2YXIgcj10LmRmbHQ7cmV0dXJuIGU9PT1yfHwic3RyaW5nIj09dHlwZW9mIGUmJiEhYyhyKS50ZXN0KGUpfX0sZmxhZ2xpc3Q6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKGUsdCxyLG4pe2lmKCJzdHJpbmciPT10eXBlb2YgZSlpZigtMT09PShuLmV4dHJhc3x8W10pLmluZGV4T2YoZSkpe2Zvcih2YXIgYT1lLnNwbGl0KCIrIiksaT0wO2k8YS5sZW5ndGg7KXt2YXIgbz1hW2ldOy0xPT09bi5mbGFncy5pbmRleE9mKG8pfHxhLmluZGV4T2Yobyk8aT9hLnNwbGljZShpLDEpOmkrK31hLmxlbmd0aD90LnNldChhLmpvaW4oIisiKSk6dC5zZXQocil9ZWxzZSB0LnNldChlKTtlbHNlIHQuc2V0KHIpfX0sYW55Ontjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbihlLHQscil7dm9pZCAwPT09ZT90LnNldChyKTp0LnNldChlKX19LGluZm9fYXJyYXk6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKGUsdCxuLGEpe2Z1bmN0aW9uIGkoZSx0LG4pe3ZhciBhLGk9e3NldDpmdW5jdGlvbihlKXthPWV9fTtyZXR1cm4gdm9pZCAwPT09biYmKG49dC5kZmx0KSxyLnZhbE9iamVjdE1ldGFbdC52YWxUeXBlXS5jb2VyY2VGdW5jdGlvbihlLGksbix0KSxhfXZhciBvPTI9PT1hLmRpbWVuc2lvbnN8fCIxLTIiPT09YS5kaW1lbnNpb25zJiZBcnJheS5pc0FycmF5KGUpJiZBcnJheS5pc0FycmF5KGVbMF0pO2lmKEFycmF5LmlzQXJyYXkoZSkpe3ZhciBsLHMsYyx1LGYsZCxwPWEuaXRlbXMsaD1bXSxnPUFycmF5LmlzQXJyYXkocCksdj1nJiZvJiZBcnJheS5pc0FycmF5KHBbMF0pLG09byYmZyYmIXYseT1nJiYhbT9wLmxlbmd0aDplLmxlbmd0aDtpZihuPUFycmF5LmlzQXJyYXkobik/bjpbXSxvKWZvcihsPTA7bDx5O2wrKylmb3IoaFtsXT1bXSxjPUFycmF5LmlzQXJyYXkoZVtsXSk/ZVtsXTpbXSxmPW0/cC5sZW5ndGg6Zz9wW2xdLmxlbmd0aDpjLmxlbmd0aCxzPTA7czxmO3MrKyl1PW0/cFtzXTpnP3BbbF1bc106cCx2b2lkIDAhPT0oZD1pKGNbc10sdSwobltsXXx8W10pW3NdKSkmJihoW2xdW3NdPWQpO2Vsc2UgZm9yKGw9MDtsPHk7bCsrKXZvaWQgMCE9PShkPWkoZVtsXSxnP3BbbF06cCxuW2xdKSkmJihoW2xdPWQpO3Quc2V0KGgpfWVsc2UgdC5zZXQobil9LHZhbGlkYXRlRnVuY3Rpb246ZnVuY3Rpb24oZSx0KXtpZighQXJyYXkuaXNBcnJheShlKSlyZXR1cm4hMTt2YXIgcj10Lml0ZW1zLG49QXJyYXkuaXNBcnJheShyKSxhPTI9PT10LmRpbWVuc2lvbnM7aWYoIXQuZnJlZUxlbmd0aCYmZS5sZW5ndGghPT1yLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKylpZihhKXtpZighQXJyYXkuaXNBcnJheShlW2ldKXx8IXQuZnJlZUxlbmd0aCYmZVtpXS5sZW5ndGghPT1yW2ldLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG89MDtvPGVbaV0ubGVuZ3RoO28rKylpZighZChlW2ldW29dLG4/cltpXVtvXTpyKSlyZXR1cm4hMX1lbHNlIGlmKCFkKGVbaV0sbj9yW2ldOnIpKXJldHVybiExO3JldHVybiEwfX19LHIuY29lcmNlPWZ1bmN0aW9uKGUsdCxuLGEsaSl7dmFyIG89cyhuLGEpLmdldCgpLGw9cyhlLGEpLGM9cyh0LGEpLHU9bC5nZXQoKSxwPXQuX3RlbXBsYXRlO2lmKHZvaWQgMD09PXUmJnAmJih1PXMocCxhKS5nZXQoKSxwPTApLHZvaWQgMD09PWkmJihpPW8uZGZsdCksby5hcnJheU9rJiZmKHUpKXJldHVybiBjLnNldCh1KSx1O3ZhciBoPXIudmFsT2JqZWN0TWV0YVtvLnZhbFR5cGVdLmNvZXJjZUZ1bmN0aW9uO2godSxjLGksbyk7dmFyIGc9Yy5nZXQoKTtyZXR1cm4gcCYmZz09PWkmJiFkKHUsbykmJihoKHU9cyhwLGEpLmdldCgpLGMsaSxvKSxnPWMuZ2V0KCkpLGd9LHIuY29lcmNlMj1mdW5jdGlvbihlLHQsbixhLGkpe3ZhciBvPXMoZSxhKSxsPXIuY29lcmNlKGUsdCxuLGEsaSksYz1vLmdldCgpO3JldHVybiBudWxsIT1jJiZsfSxyLmNvZXJjZUZvbnQ9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXt9O3JldHVybiByPXJ8fHt9LG4uZmFtaWx5PWUodCsiLmZhbWlseSIsci5mYW1pbHkpLG4uc2l6ZT1lKHQrIi5zaXplIixyLnNpemUpLG4uY29sb3I9ZSh0KyIuY29sb3IiLHIuY29sb3IpLG59LHIuY29lcmNlSG92ZXJpbmZvPWZ1bmN0aW9uKGUsdCxuKXt2YXIgYSxvPXQuX21vZHVsZS5hdHRyaWJ1dGVzLGw9by5ob3ZlcmluZm8/bzppLHM9bC5ob3ZlcmluZm87aWYoMT09PW4uX2RhdGFMZW5ndGgpe3ZhciBjPSJhbGwiPT09cy5kZmx0P3MuZmxhZ3Muc2xpY2UoKTpzLmRmbHQuc3BsaXQoIisiKTtjLnNwbGljZShjLmluZGV4T2YoIm5hbWUiKSwxKSxhPWMuam9pbigiKyIpfXJldHVybiByLmNvZXJjZShlLHQsbCwiaG92ZXJpbmZvIixhKX0sci5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5PWZ1bmN0aW9uKGUsdCl7aWYoZS5tYXJrZXIpe3ZhciByLG4sYT1lLm1hcmtlci5vcGFjaXR5O2lmKHZvaWQgMCE9PWEpZihhKXx8ZS5zZWxlY3RlZHx8ZS51bnNlbGVjdGVkfHwocj1hLG49bCphKSx0KCJzZWxlY3RlZC5tYXJrZXIub3BhY2l0eSIsciksdCgidW5zZWxlY3RlZC5tYXJrZXIub3BhY2l0eSIsbil9fSxyLnZhbGlkYXRlPWR9LHsiLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL3NjYWxlcyI6OTAsIi4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiOjE4MCwiLi4vcGxvdHMvYXR0cmlidXRlcyI6MjQ0LCIuL2FycmF5IjoxODgsIi4vbW9kIjoyMDksIi4vbmVzdGVkX3Byb3BlcnR5IjoyMTAsIi4vcmVnZXgiOjIxOCwiZmFzdC1pc251bWVyaWMiOjExLHRpbnljb2xvcjI6NTh9XSwxOTM6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG4sYSxpPWUoImQzLXRpbWUtZm9ybWF0IikudGltZUZvcm1hdCxvPWUoImZhc3QtaXNudW1lcmljIiksbD1lKCIuL2xvZ2dlcnMiKSxzPWUoIi4vbW9kIikubW9kLGM9ZSgiLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLHU9Yy5CQUROVU0sZj1jLk9ORURBWSxkPWMuT05FSE9VUixwPWMuT05FTUlOLGg9Yy5PTkVTRUMsZz1jLkVQT0NISkQsdj1lKCIuLi9yZWdpc3RyeSIpLG09ZSgiZDMtdGltZS1mb3JtYXQiKS51dGNGb3JtYXQseT0vXlxzKigtP1xkXGRcZFxkfFxkXGQpKC0oXGQ/XGQpKC0oXGQ/XGQpKFsgVHRdKFswMV0/XGR8MlswLTNdKSg6KFswLTVdXGQpKDooWzAtNV1cZChcLlxkKyk/KSk/KFp8enxbK1wtXVxkXGQoOj9cZFxkKT8pPyk/KT8pPyk/XHMqJC9tLHg9L15ccyooLT9cZFxkXGRcZHxcZFxkKSgtKFxkP1xkaT8pKC0oXGQ/XGQpKFsgVHRdKFswMV0/XGR8MlswLTNdKSg6KFswLTVdXGQpKDooWzAtNV1cZChcLlxkKyk/KSk/KFp8enxbK1wtXVxkXGQoOj9cZFxkKT8pPyk/KT8pPyk/XHMqJC9tLGI9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpLTcwO2Z1bmN0aW9uIF8oZSl7cmV0dXJuIGUmJnYuY29tcG9uZW50c1JlZ2lzdHJ5LmNhbGVuZGFycyYmInN0cmluZyI9PXR5cGVvZiBlJiYiZ3JlZ29yaWFuIiE9PWV9ZnVuY3Rpb24gdyhlLHQpe3JldHVybiBTdHJpbmcoZStNYXRoLnBvdygxMCx0KSkuc3Vic3RyKDEpfXIuZGF0ZVRpY2swPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gXyhlKT90P3YuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJDQU5PTklDQUxfU1VOREFZIilbZV06di5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsIkNBTk9OSUNBTF9USUNLIilbZV06dD8iMjAwMC0wMS0wMiI6IjIwMDAtMDEtMDEifShlLCEhdCk7aWYodDwyKXJldHVybiBuO3ZhciBhPXIuZGF0ZVRpbWUybXMobixlKTtyZXR1cm4gYSs9ZioodC0xKSxyLm1zMkRhdGVUaW1lKGEsMCxlKX0sci5kZmx0UmFuZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIF8oZSk/di5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsIkRGTFRSQU5HRSIpW2VdOlsiMjAwMC0wMS0wMSIsIjIwMDEtMDEtMDEiXX0sci5pc0pTRGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPT1lJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5nZXRUaW1lfSxyLmRhdGVUaW1lMm1zPWZ1bmN0aW9uKGUsdCl7aWYoci5pc0pTRGF0ZShlKSl7dmFyIGk9ZS5nZXRUaW1lem9uZU9mZnNldCgpKnAsbz0oZS5nZXRVVENNaW51dGVzKCktZS5nZXRNaW51dGVzKCkpKnArKGUuZ2V0VVRDU2Vjb25kcygpLWUuZ2V0U2Vjb25kcygpKSpoKyhlLmdldFVUQ01pbGxpc2Vjb25kcygpLWUuZ2V0TWlsbGlzZWNvbmRzKCkpO2lmKG8pe3ZhciBsPTMqcDtpPWktbC8yK3Moby1pK2wvMixsKX1yZXR1cm4oZT1OdW1iZXIoZSktaSk+PW4mJmU8PWE/ZTp1fWlmKCJzdHJpbmciIT10eXBlb2YgZSYmIm51bWJlciIhPXR5cGVvZiBlKXJldHVybiB1O2U9U3RyaW5nKGUpO3ZhciBjPV8odCksbT1lLmNoYXJBdCgwKTshY3x8IkciIT09bSYmImciIT09bXx8KGU9ZS5zdWJzdHIoMSksdD0iIik7dmFyIHc9YyYmImNoaW5lc2UiPT09dC5zdWJzdHIoMCw3KSxUPWUubWF0Y2godz94OnkpO2lmKCFUKXJldHVybiB1O3ZhciBrPVRbMV0sTT1UWzNdfHwiMSIsQT1OdW1iZXIoVFs1XXx8MSksTD1OdW1iZXIoVFs3XXx8MCksUz1OdW1iZXIoVFs5XXx8MCksQz1OdW1iZXIoVFsxMV18fDApO2lmKGMpe2lmKDI9PT1rLmxlbmd0aClyZXR1cm4gdTt2YXIgTztrPU51bWJlcihrKTt0cnl7dmFyIEQ9di5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImdldENhbCIpKHQpO2lmKHcpe3ZhciBQPSJpIj09PU0uY2hhckF0KE0ubGVuZ3RoLTEpO009cGFyc2VJbnQoTSwxMCksTz1ELm5ld0RhdGUoayxELnRvTW9udGhJbmRleChrLE0sUCksQSl9ZWxzZSBPPUQubmV3RGF0ZShrLE51bWJlcihNKSxBKX1jYXRjaChlKXtyZXR1cm4gdX1yZXR1cm4gTz8oTy50b0pEKCktZykqZitMKmQrUypwK0MqaDp1fWs9Mj09PWsubGVuZ3RoPyhOdW1iZXIoaykrMmUzLWIpJTEwMCtiOk51bWJlcihrKSxNLT0xO3ZhciB6PW5ldyBEYXRlKERhdGUuVVRDKDJlMyxNLEEsTCxTKSk7cmV0dXJuIHouc2V0VVRDRnVsbFllYXIoayksei5nZXRVVENNb250aCgpIT09TXx8ei5nZXRVVENEYXRlKCkhPT1BP3U6ei5nZXRUaW1lKCkrQypofSxuPXIuTUlOX01TPXIuZGF0ZVRpbWUybXMoIi05OTk5IiksYT1yLk1BWF9NUz1yLmRhdGVUaW1lMm1zKCI5OTk5LTEyLTMxIDIzOjU5OjU5Ljk5OTkiKSxyLmlzRGF0ZVRpbWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5kYXRlVGltZTJtcyhlLHQpIT09dX07dmFyIFQ9OTAqZixrPTMqZCxNPTUqcDtmdW5jdGlvbiBBKGUsdCxyLG4sYSl7aWYoKHR8fHJ8fG58fGEpJiYoZSs9IiAiK3codCwyKSsiOiIrdyhyLDIpLChufHxhKSYmKGUrPSI6Iit3KG4sMiksYSkpKXtmb3IodmFyIGk9NDthJTEwPT0wOylpLT0xLGEvPTEwO2UrPSIuIit3KGEsaSl9cmV0dXJuIGV9ci5tczJEYXRlVGltZT1mdW5jdGlvbihlLHQscil7aWYoIm51bWJlciIhPXR5cGVvZiBlfHwhKGU+PW4mJmU8PWEpKXJldHVybiB1O3R8fCh0PTApO3ZhciBpLG8sbCxjLHkseCxiPU1hdGguZmxvb3IoMTAqcyhlKy4wNSwxKSksdz1NYXRoLnJvdW5kKGUtYi8xMCk7aWYoXyhyKSl7dmFyIEw9TWF0aC5mbG9vcih3L2YpK2csUz1NYXRoLmZsb29yKHMoZSxmKSk7dHJ5e2k9di5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImdldENhbCIpKHIpLmZyb21KRChMKS5mb3JtYXREYXRlKCJ5eXl5LW1tLWRkIil9Y2F0Y2goZSl7aT1tKCJHJVktJW0tJWQiKShuZXcgRGF0ZSh3KSl9aWYoIi0iPT09aS5jaGFyQXQoMCkpZm9yKDtpLmxlbmd0aDwxMTspaT0iLTAiK2kuc3Vic3RyKDEpO2Vsc2UgZm9yKDtpLmxlbmd0aDwxMDspaT0iMCIraTtvPXQ8VD9NYXRoLmZsb29yKFMvZCk6MCxsPXQ8VD9NYXRoLmZsb29yKFMlZC9wKTowLGM9dDxrP01hdGguZmxvb3IoUyVwL2gpOjAseT10PE0/UyVoKjEwK2I6MH1lbHNlIHg9bmV3IERhdGUodyksaT1tKCIlWS0lbS0lZCIpKHgpLG89dDxUP3guZ2V0VVRDSG91cnMoKTowLGw9dDxUP3guZ2V0VVRDTWludXRlcygpOjAsYz10PGs/eC5nZXRVVENTZWNvbmRzKCk6MCx5PXQ8TT8xMCp4LmdldFVUQ01pbGxpc2Vjb25kcygpK2I6MDtyZXR1cm4gQShpLG8sbCxjLHkpfSxyLm1zMkRhdGVUaW1lTG9jYWw9ZnVuY3Rpb24oZSl7aWYoIShlPj1uK2YmJmU8PWEtZikpcmV0dXJuIHU7dmFyIHQ9TWF0aC5mbG9vcigxMCpzKGUrLjA1LDEpKSxyPW5ldyBEYXRlKE1hdGgucm91bmQoZS10LzEwKSk7cmV0dXJuIEEoaSgiJVktJW0tJWQiKShyKSxyLmdldEhvdXJzKCksci5nZXRNaW51dGVzKCksci5nZXRTZWNvbmRzKCksMTAqci5nZXRVVENNaWxsaXNlY29uZHMoKSt0KX0sci5jbGVhbkRhdGU9ZnVuY3Rpb24oZSx0LG4pe2lmKGU9PT11KXJldHVybiB0O2lmKHIuaXNKU0RhdGUoZSl8fCJudW1iZXIiPT10eXBlb2YgZSYmaXNGaW5pdGUoZSkpe2lmKF8obikpcmV0dXJuIGwuZXJyb3IoIkpTIERhdGVzIGFuZCBtaWxsaXNlY29uZHMgYXJlIGluY29tcGF0aWJsZSB3aXRoIHdvcmxkIGNhbGVuZGFycyIsZSksdDtpZighKGU9ci5tczJEYXRlVGltZUxvY2FsKCtlKSkmJnZvaWQgMCE9PXQpcmV0dXJuIHR9ZWxzZSBpZighci5pc0RhdGVUaW1lKGUsbikpcmV0dXJuIGwuZXJyb3IoInVucmVjb2duaXplZCBkYXRlIixlKSx0O3JldHVybiBlfTt2YXIgTD0vJVxkP2YvZztmdW5jdGlvbiBTKGUsdCxyLG4pe2U9ZS5yZXBsYWNlKEwsKGZ1bmN0aW9uKGUpe3ZhciByPU1hdGgubWluKCtlLmNoYXJBdCgxKXx8Niw2KTtyZXR1cm4odC8xZTMlMSsyKS50b0ZpeGVkKHIpLnN1YnN0cigyKS5yZXBsYWNlKC8wKyQvLCIiKXx8IjAifSkpO3ZhciBhPW5ldyBEYXRlKE1hdGguZmxvb3IodCsuMDUpKTtpZihfKG4pKXRyeXtlPXYuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJ3b3JsZENhbEZtdCIpKGUsdCxuKX1jYXRjaChlKXtyZXR1cm4iSW52YWxpZCJ9cmV0dXJuIHIoZSkoYSl9dmFyIEM9WzU5LDU5LjksNTkuOTksNTkuOTk5LDU5Ljk5OTldO3IuZm9ybWF0RGF0ZT1mdW5jdGlvbihlLHQscixuLGEsaSl7aWYoYT1fKGEpJiZhLCF0KWlmKCJ5Ij09PXIpdD1pLnllYXI7ZWxzZSBpZigibSI9PT1yKXQ9aS5tb250aDtlbHNle2lmKCJkIiE9PXIpcmV0dXJuIGZ1bmN0aW9uKGUsdCl7dmFyIHI9cyhlKy4wNSxmKSxuPXcoTWF0aC5mbG9vcihyL2QpLDIpKyI6Iit3KHMoTWF0aC5mbG9vcihyL3ApLDYwKSwyKTtpZigiTSIhPT10KXtvKHQpfHwodD0wKTt2YXIgYT0oMTAwK01hdGgubWluKHMoZS9oLDYwKSxDW3RdKSkudG9GaXhlZCh0KS5zdWJzdHIoMSk7dD4wJiYoYT1hLnJlcGxhY2UoLzArJC8sIiIpLnJlcGxhY2UoL1tcLl0kLywiIikpLG4rPSI6IithfXJldHVybiBufShlLHIpKyJcbiIrUyhpLmRheU1vbnRoWWVhcixlLG4sYSk7dD1pLmRheU1vbnRoKyJcbiIraS55ZWFyfXJldHVybiBTKHQsZSxuLGEpfTt2YXIgTz0zKmY7ci5pbmNyZW1lbnRNb250aD1mdW5jdGlvbihlLHQscil7cj1fKHIpJiZyO3ZhciBuPXMoZSxmKTtpZihlPU1hdGgucm91bmQoZS1uKSxyKXRyeXt2YXIgYT1NYXRoLnJvdW5kKGUvZikrZyxpPXYuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJnZXRDYWwiKShyKSxvPWkuZnJvbUpEKGEpO3JldHVybiB0JTEyP2kuYWRkKG8sdCwibSIpOmkuYWRkKG8sdC8xMiwieSIpLChvLnRvSkQoKS1nKSpmK259Y2F0Y2godCl7bC5lcnJvcigiaW52YWxpZCBtcyAiK2UrIiBpbiBjYWxlbmRhciAiK3IpfXZhciBjPW5ldyBEYXRlKGUrTyk7cmV0dXJuIGMuc2V0VVRDTW9udGgoYy5nZXRVVENNb250aCgpK3QpK24tT30sci5maW5kRXhhY3REYXRlcz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcixuLGE9MCxpPTAsbD0wLHM9MCxjPV8odCkmJnYuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJnZXRDYWwiKSh0KSx1PTA7dTxlLmxlbmd0aDt1KyspaWYobj1lW3VdLG8obikpe2lmKCEobiVmKSlpZihjKXRyeXsxPT09KHI9Yy5mcm9tSkQobi9mK2cpKS5kYXkoKT8xPT09ci5tb250aCgpP2ErKzppKys6bCsrfWNhdGNoKGUpe31lbHNlIDE9PT0ocj1uZXcgRGF0ZShuKSkuZ2V0VVRDRGF0ZSgpPzA9PT1yLmdldFVUQ01vbnRoKCk/YSsrOmkrKzpsKyt9ZWxzZSBzKys7bCs9aSs9YTt2YXIgZD1lLmxlbmd0aC1zO3JldHVybntleGFjdFllYXJzOmEvZCxleGFjdE1vbnRoczppL2QsZXhhY3REYXlzOmwvZH19fSx7Ii4uL2NvbnN0YW50cy9udW1lcmljYWwiOjE4MSwiLi4vcmVnaXN0cnkiOjI5MCwiLi9sb2dnZXJzIjoyMDYsIi4vbW9kIjoyMDksImQzLXRpbWUtZm9ybWF0Ijo3LCJmYXN0LWlzbnVtZXJpYyI6MTF9XSwxOTQ6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiZDMiKSxhPWUoIi4vbG9nZ2VycyIpLGk9ZSgiLi9tYXRyaXgiKSxvPWUoImdsLW1hdDQiKTtmdW5jdGlvbiBsKGUpe3ZhciB0PWUmJmUucGFyZW50Tm9kZTt0JiZ0LnJlbW92ZUNoaWxkKGUpfWZ1bmN0aW9uIHMoZSx0LHIpe3ZhciBuPSJwbG90bHkuanMtc3R5bGUtIitlLGk9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobik7aXx8KChpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIikpLnNldEF0dHJpYnV0ZSgiaWQiLG4pLGkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpKSxkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGkpKTt2YXIgbz1pLnNoZWV0O28uaW5zZXJ0UnVsZT9vLmluc2VydFJ1bGUodCsieyIrcisifSIsMCk6by5hZGRSdWxlP28uYWRkUnVsZSh0LHIsMCk6YS53YXJuKCJhZGRTdHlsZVJ1bGUgZmFpbGVkIil9ZnVuY3Rpb24gYyhlKXt2YXIgdD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlLG51bGwpLHI9dC5nZXRQcm9wZXJ0eVZhbHVlKCItd2Via2l0LXRyYW5zZm9ybSIpfHx0LmdldFByb3BlcnR5VmFsdWUoIi1tb3otdHJhbnNmb3JtIil8fHQuZ2V0UHJvcGVydHlWYWx1ZSgiLW1zLXRyYW5zZm9ybSIpfHx0LmdldFByb3BlcnR5VmFsdWUoIi1vLXRyYW5zZm9ybSIpfHx0LmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpO3JldHVybiJub25lIj09PXI/bnVsbDpyLnJlcGxhY2UoIm1hdHJpeCIsIiIpLnJlcGxhY2UoIjNkIiwiIikuc2xpY2UoMSwtMSkuc3BsaXQoIiwiKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybitlfSkpfWZ1bmN0aW9uIHUoZSl7Zm9yKHZhciB0PVtdO2YoZSk7KXQucHVzaChlKSxlPWUucGFyZW50Tm9kZTtyZXR1cm4gdH1mdW5jdGlvbiBmKGUpe3JldHVybiBlJiYoZSBpbnN0YW5jZW9mIEVsZW1lbnR8fGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCl9dC5leHBvcnRzPXtnZXRHcmFwaERpdjpmdW5jdGlvbihlKXt2YXIgdDtpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKG51bGw9PT0odD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKSkpdGhyb3cgbmV3IEVycm9yKCJObyBET00gZWxlbWVudCB3aXRoIGlkICciK2UrIicgZXhpc3RzIG9uIHRoZSBwYWdlLiIpO3JldHVybiB0fWlmKG51bGw9PWUpdGhyb3cgbmV3IEVycm9yKCJET00gZWxlbWVudCBwcm92aWRlZCBpcyBudWxsIG9yIHVuZGVmaW5lZCIpO3JldHVybiBlfSxpc1Bsb3REaXY6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5zZWxlY3QoZSk7cmV0dXJuIHQubm9kZSgpaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmdC5zaXplKCkmJnQuY2xhc3NlZCgianMtcGxvdGx5LXBsb3QiKX0scmVtb3ZlRWxlbWVudDpsLGFkZFN0eWxlUnVsZTpmdW5jdGlvbihlLHQpe3MoImdsb2JhbCIsZSx0KX0sYWRkUmVsYXRlZFN0eWxlUnVsZTpzLGRlbGV0ZVJlbGF0ZWRTdHlsZVJ1bGU6ZnVuY3Rpb24oZSl7dmFyIHQ9InBsb3RseS5qcy1zdHlsZS0iK2Uscj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0KTtyJiZsKHIpfSxnZXRGdWxsVHJhbnNmb3JtTWF0cml4OmZ1bmN0aW9uKGUpe3ZhciB0PXUoZSkscj1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV07cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9YyhlKTtpZih0KXt2YXIgbj1pLmNvbnZlcnRDc3NNYXRyaXgodCk7cj1vLm11bHRpcGx5KHIscixuKX19KSkscn0sZ2V0RWxlbWVudFRyYW5zZm9ybU1hdHJpeDpjLGdldEVsZW1lbnRBbmRBbmNlc3RvcnM6dSxlcXVhbERvbVJlY3RzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJnQmJmUueD09PXQueCYmZS55PT09dC55JiZlLnRvcD09PXQudG9wJiZlLmxlZnQ9PT10LmxlZnQmJmUucmlnaHQ9PT10LnJpZ2h0JiZlLmJvdHRvbT09PXQuYm90dG9tfX19LHsiLi9sb2dnZXJzIjoyMDYsIi4vbWF0cml4IjoyMDgsZDM6OSwiZ2wtbWF0NCI6Mjd9XSwxOTU6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiZXZlbnRzIikuRXZlbnRFbWl0dGVyLGE9e2luaXQ6ZnVuY3Rpb24oZSl7aWYoZS5fZXYgaW5zdGFuY2VvZiBuKXJldHVybiBlO3ZhciB0PW5ldyBuLHI9bmV3IG47cmV0dXJuIGUuX2V2PXQsZS5faW50ZXJuYWxFdj1yLGUub249dC5vbi5iaW5kKHQpLGUub25jZT10Lm9uY2UuYmluZCh0KSxlLnJlbW92ZUxpc3RlbmVyPXQucmVtb3ZlTGlzdGVuZXIuYmluZCh0KSxlLnJlbW92ZUFsbExpc3RlbmVycz10LnJlbW92ZUFsbExpc3RlbmVycy5iaW5kKHQpLGUuX2ludGVybmFsT249ci5vbi5iaW5kKHIpLGUuX2ludGVybmFsT25jZT1yLm9uY2UuYmluZChyKSxlLl9yZW1vdmVJbnRlcm5hbExpc3RlbmVyPXIucmVtb3ZlTGlzdGVuZXIuYmluZChyKSxlLl9yZW1vdmVBbGxJbnRlcm5hbExpc3RlbmVycz1yLnJlbW92ZUFsbExpc3RlbmVycy5iaW5kKHIpLGUuZW1pdD1mdW5jdGlvbihuLGEpeyJ1bmRlZmluZWQiIT10eXBlb2YgalF1ZXJ5JiZqUXVlcnkoZSkudHJpZ2dlcihuLGEpLHQuZW1pdChuLGEpLHIuZW1pdChuLGEpfSxlfSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbihlLHQscil7dmFyIG4sYTsidW5kZWZpbmVkIiE9dHlwZW9mIGpRdWVyeSYmKG49alF1ZXJ5KGUpLnRyaWdnZXJIYW5kbGVyKHQscikpO3ZhciBpPWUuX2V2O2lmKCFpKXJldHVybiBuO3ZhciBvLGw9aS5fZXZlbnRzW3RdO2lmKCFsKXJldHVybiBuO2Z1bmN0aW9uIHMoZSl7cmV0dXJuIGUubGlzdGVuZXI/KGkucmVtb3ZlTGlzdGVuZXIodCxlLmxpc3RlbmVyKSxlLmZpcmVkP3ZvaWQgMDooZS5maXJlZD0hMCxlLmxpc3RlbmVyLmFwcGx5KGksW3JdKSkpOmUuYXBwbHkoaSxbcl0pfWZvcihsPUFycmF5LmlzQXJyYXkobCk/bDpbbF0sbz0wO288bC5sZW5ndGgtMTtvKyspcyhsW29dKTtyZXR1cm4gYT1zKGxbb10pLHZvaWQgMCE9PW4/bjphfSxwdXJnZTpmdW5jdGlvbihlKXtyZXR1cm4gZGVsZXRlIGUuX2V2LGRlbGV0ZSBlLm9uLGRlbGV0ZSBlLm9uY2UsZGVsZXRlIGUucmVtb3ZlTGlzdGVuZXIsZGVsZXRlIGUucmVtb3ZlQWxsTGlzdGVuZXJzLGRlbGV0ZSBlLmVtaXQsZGVsZXRlIGUuX2V2LGRlbGV0ZSBlLl9pbnRlcm5hbEV2LGRlbGV0ZSBlLl9pbnRlcm5hbE9uLGRlbGV0ZSBlLl9pbnRlcm5hbE9uY2UsZGVsZXRlIGUuX3JlbW92ZUludGVybmFsTGlzdGVuZXIsZGVsZXRlIGUuX3JlbW92ZUFsbEludGVybmFsTGlzdGVuZXJzLGV9fTt0LmV4cG9ydHM9YX0se2V2ZW50czo2fV0sMTk2OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4vaXNfcGxhaW5fb2JqZWN0LmpzIiksYT1BcnJheS5pc0FycmF5O2Z1bmN0aW9uIGkoZSx0LHIsbyl7dmFyIGwscyxjLHUsZixkLHA9ZVswXSxoPWUubGVuZ3RoO2lmKDI9PT1oJiZhKHApJiZhKGVbMV0pJiYwPT09cC5sZW5ndGgpe2lmKGZ1bmN0aW9uKGUsdCl7dmFyIHIsbjtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKXtpZihudWxsIT09KG49ZVtyXSkmJiJvYmplY3QiPT10eXBlb2YgbilyZXR1cm4hMTt2b2lkIDAhPT1uJiYodFtyXT1uKX1yZXR1cm4hMH0oZVsxXSxwKSlyZXR1cm4gcDtwLnNwbGljZSgwLHAubGVuZ3RoKX1mb3IodmFyIGc9MTtnPGg7ZysrKWZvcihzIGluIGw9ZVtnXSljPXBbc10sdT1sW3NdLG8mJmEodSk/cFtzXT11OnQmJnUmJihuKHUpfHwoZj1hKHUpKSk/KGY/KGY9ITEsZD1jJiZhKGMpP2M6W10pOmQ9YyYmbihjKT9jOnt9LHBbc109aShbZCx1XSx0LHIsbykpOigidW5kZWZpbmVkIiE9dHlwZW9mIHV8fHIpJiYocFtzXT11KTtyZXR1cm4gcH1yLmV4dGVuZEZsYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gaShhcmd1bWVudHMsITEsITEsITEpfSxyLmV4dGVuZERlZXA9ZnVuY3Rpb24oKXtyZXR1cm4gaShhcmd1bWVudHMsITAsITEsITEpfSxyLmV4dGVuZERlZXBBbGw9ZnVuY3Rpb24oKXtyZXR1cm4gaShhcmd1bWVudHMsITAsITAsITEpfSxyLmV4dGVuZERlZXBOb0FycmF5cz1mdW5jdGlvbigpe3JldHVybiBpKGFyZ3VtZW50cywhMCwhMSwhMCl9fSx7Ii4vaXNfcGxhaW5fb2JqZWN0LmpzIjoyMDN9XSwxOTc6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD17fSxyPVtdLG49MCxhPTA7YTxlLmxlbmd0aDthKyspe3ZhciBpPWVbYV07MSE9PXRbaV0mJih0W2ldPTEscltuKytdPWkpfXJldHVybiByfX0se31dLDE5ODpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiEwPT09ZS52aXNpYmxlfWZ1bmN0aW9uIGEoZSl7dmFyIHQ9ZVswXS50cmFjZTtyZXR1cm4hMD09PXQudmlzaWJsZSYmMCE9PXQuX2xlbmd0aH10LmV4cG9ydHM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9KHQ9ZSxBcnJheS5pc0FycmF5KHQpJiZBcnJheS5pc0FycmF5KHRbMF0pJiZ0WzBdWzBdJiZ0WzBdWzBdLnRyYWNlP2E6biksaT1bXSxvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciBsPWVbb107cihsKSYmaS5wdXNoKGwpfXJldHVybiBpfX0se31dLDE5OTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixhLGksbz1lKCIuL21vZCIpLm1vZDtmdW5jdGlvbiBsKGUsdCxyLG4sYSxpLG8sbCl7dmFyIHM9ci1lLGM9YS1lLHU9by1hLGY9bi10LGQ9aS10LHA9bC1pLGg9cypwLXUqZjtpZigwPT09aClyZXR1cm4gbnVsbDt2YXIgZz0oYypwLXUqZCkvaCx2PShjKmYtcypkKS9oO3JldHVybiB2PDB8fHY+MXx8ZzwwfHxnPjE/bnVsbDp7eDplK3MqZyx5OnQrZipnfX1mdW5jdGlvbiBzKGUsdCxyLG4sYSl7dmFyIGk9biplK2EqdDtpZihpPDApcmV0dXJuIG4qbithKmE7aWYoaT5yKXt2YXIgbz1uLWUsbD1hLXQ7cmV0dXJuIG8qbytsKmx9dmFyIHM9bip0LWEqZTtyZXR1cm4gcypzL3J9ci5zZWdtZW50c0ludGVyc2VjdD1sLHIuc2VnbWVudERpc3RhbmNlPWZ1bmN0aW9uKGUsdCxyLG4sYSxpLG8sYyl7aWYobChlLHQscixuLGEsaSxvLGMpKXJldHVybiAwO3ZhciB1PXItZSxmPW4tdCxkPW8tYSxwPWMtaSxoPXUqdStmKmYsZz1kKmQrcCpwLHY9TWF0aC5taW4ocyh1LGYsaCxhLWUsaS10KSxzKHUsZixoLG8tZSxjLXQpLHMoZCxwLGcsZS1hLHQtaSkscyhkLHAsZyxyLWEsbi1pKSk7cmV0dXJuIE1hdGguc3FydCh2KX0sci5nZXRUZXh0TG9jYXRpb249ZnVuY3Rpb24oZSx0LHIsbCl7aWYoZT09PWEmJmw9PT1pfHwobj17fSxhPWUsaT1sKSxuW3JdKXJldHVybiBuW3JdO3ZhciBzPWUuZ2V0UG9pbnRBdExlbmd0aChvKHItbC8yLHQpKSxjPWUuZ2V0UG9pbnRBdExlbmd0aChvKHIrbC8yLHQpKSx1PU1hdGguYXRhbigoYy55LXMueSkvKGMueC1zLngpKSxmPWUuZ2V0UG9pbnRBdExlbmd0aChvKHIsdCkpLGQ9e3g6KDQqZi54K3MueCtjLngpLzYseTooNCpmLnkrcy55K2MueSkvNix0aGV0YTp1fTtyZXR1cm4gbltyXT1kLGR9LHIuY2xlYXJMb2NhdGlvbkNhY2hlPWZ1bmN0aW9uKCl7YT1udWxsfSxyLmdldFZpc2libGVTZWdtZW50PWZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLGk9dC5sZWZ0LG89dC5yaWdodCxsPXQudG9wLHM9dC5ib3R0b20sYz0wLHU9ZS5nZXRUb3RhbExlbmd0aCgpLGY9dTtmdW5jdGlvbiBkKHQpe3ZhciByPWUuZ2V0UG9pbnRBdExlbmd0aCh0KTswPT09dD9uPXI6dD09PXUmJihhPXIpO3ZhciBjPXIueDxpP2ktci54OnIueD5vP3IueC1vOjAsZj1yLnk8bD9sLXIueTpyLnk+cz9yLnktczowO3JldHVybiBNYXRoLnNxcnQoYypjK2YqZil9Zm9yKHZhciBwPWQoYyk7cDspe2lmKChjKz1wK3IpPmYpcmV0dXJuO3A9ZChjKX1mb3IocD1kKGYpO3A7KXtpZihjPihmLT1wK3IpKXJldHVybjtwPWQoZil9cmV0dXJue21pbjpjLG1heDpmLGxlbjpmLWMsdG90YWw6dSxpc0Nsb3NlZDowPT09YyYmZj09PXUmJk1hdGguYWJzKG4ueC1hLngpPC4xJiZNYXRoLmFicyhuLnktYS55KTwuMX19LHIuZmluZFBvaW50T25QYXRoPWZ1bmN0aW9uKGUsdCxyLG4pe2Zvcih2YXIgYSxpLG8sbD0obj1ufHx7fSkucGF0aExlbmd0aHx8ZS5nZXRUb3RhbExlbmd0aCgpLHM9bi50b2xlcmFuY2V8fC4wMDEsYz1uLml0ZXJhdGlvbkxpbWl0fHwzMCx1PWUuZ2V0UG9pbnRBdExlbmd0aCgwKVtyXT5lLmdldFBvaW50QXRMZW5ndGgobClbcl0/LTE6MSxmPTAsZD0wLHA9bDtmPGM7KXtpZihhPShkK3ApLzIsbz0oaT1lLmdldFBvaW50QXRMZW5ndGgoYSkpW3JdLXQsTWF0aC5hYnMobyk8cylyZXR1cm4gaTt1Km8+MD9wPWE6ZD1hLGYrK31yZXR1cm4gaX19LHsiLi9tb2QiOjIwOX1dLDIwMDpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9fSx7fV0sMjAxOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKCF0KXJldHVybiBlO3ZhciByPTEvTWF0aC5hYnModCksbj1yPjE/KHIqZStyKnQpL3I6ZSt0LGE9U3RyaW5nKG4pLmxlbmd0aDtpZihhPjE2KXt2YXIgaT1TdHJpbmcodCkubGVuZ3RoO2lmKGE+PVN0cmluZyhlKS5sZW5ndGgraSl7dmFyIG89cGFyc2VGbG9hdChuKS50b1ByZWNpc2lvbigxMik7LTE9PT1vLmluZGV4T2YoImUrIikmJihuPStvKX19cmV0dXJuIG59fSx7fV0sMjAyOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoImQzIiksYT1lKCJkMy10aW1lLWZvcm1hdCIpLnV0Y0Zvcm1hdCxpPWUoImZhc3QtaXNudW1lcmljIiksbz1lKCIuLi9jb25zdGFudHMvbnVtZXJpY2FsIiksbD1vLkZQX1NBRkUscz1vLkJBRE5VTSxjPXQuZXhwb3J0cz17fTtjLm5lc3RlZFByb3BlcnR5PWUoIi4vbmVzdGVkX3Byb3BlcnR5IiksYy5rZXllZENvbnRhaW5lcj1lKCIuL2tleWVkX2NvbnRhaW5lciIpLGMucmVsYXRpdmVBdHRyPWUoIi4vcmVsYXRpdmVfYXR0ciIpLGMuaXNQbGFpbk9iamVjdD1lKCIuL2lzX3BsYWluX29iamVjdCIpLGMudG9Mb2dSYW5nZT1lKCIuL3RvX2xvZ19yYW5nZSIpLGMucmVsaW5rUHJpdmF0ZUtleXM9ZSgiLi9yZWxpbmtfcHJpdmF0ZSIpO3ZhciB1PWUoIi4vYXJyYXkiKTtjLmlzVHlwZWRBcnJheT11LmlzVHlwZWRBcnJheSxjLmlzQXJyYXlPclR5cGVkQXJyYXk9dS5pc0FycmF5T3JUeXBlZEFycmF5LGMuaXNBcnJheTFEPXUuaXNBcnJheTFELGMuZW5zdXJlQXJyYXk9dS5lbnN1cmVBcnJheSxjLmNvbmNhdD11LmNvbmNhdCxjLm1heFJvd0xlbmd0aD11Lm1heFJvd0xlbmd0aCxjLm1pblJvd0xlbmd0aD11Lm1pblJvd0xlbmd0aDt2YXIgZj1lKCIuL21vZCIpO2MubW9kPWYubW9kLGMubW9kSGFsZj1mLm1vZEhhbGY7dmFyIGQ9ZSgiLi9jb2VyY2UiKTtjLnZhbE9iamVjdE1ldGE9ZC52YWxPYmplY3RNZXRhLGMuY29lcmNlPWQuY29lcmNlLGMuY29lcmNlMj1kLmNvZXJjZTIsYy5jb2VyY2VGb250PWQuY29lcmNlRm9udCxjLmNvZXJjZUhvdmVyaW5mbz1kLmNvZXJjZUhvdmVyaW5mbyxjLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHk9ZC5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5LGMudmFsaWRhdGU9ZC52YWxpZGF0ZTt2YXIgcD1lKCIuL2RhdGVzIik7Yy5kYXRlVGltZTJtcz1wLmRhdGVUaW1lMm1zLGMuaXNEYXRlVGltZT1wLmlzRGF0ZVRpbWUsYy5tczJEYXRlVGltZT1wLm1zMkRhdGVUaW1lLGMubXMyRGF0ZVRpbWVMb2NhbD1wLm1zMkRhdGVUaW1lTG9jYWwsYy5jbGVhbkRhdGU9cC5jbGVhbkRhdGUsYy5pc0pTRGF0ZT1wLmlzSlNEYXRlLGMuZm9ybWF0RGF0ZT1wLmZvcm1hdERhdGUsYy5pbmNyZW1lbnRNb250aD1wLmluY3JlbWVudE1vbnRoLGMuZGF0ZVRpY2swPXAuZGF0ZVRpY2swLGMuZGZsdFJhbmdlPXAuZGZsdFJhbmdlLGMuZmluZEV4YWN0RGF0ZXM9cC5maW5kRXhhY3REYXRlcyxjLk1JTl9NUz1wLk1JTl9NUyxjLk1BWF9NUz1wLk1BWF9NUzt2YXIgaD1lKCIuL3NlYXJjaCIpO2MuZmluZEJpbj1oLmZpbmRCaW4sYy5zb3J0ZXJBc2M9aC5zb3J0ZXJBc2MsYy5zb3J0ZXJEZXM9aC5zb3J0ZXJEZXMsYy5kaXN0aW5jdFZhbHM9aC5kaXN0aW5jdFZhbHMsYy5yb3VuZFVwPWgucm91bmRVcCxjLnNvcnQ9aC5zb3J0LGMuZmluZEluZGV4T2ZNaW49aC5maW5kSW5kZXhPZk1pbjt2YXIgZz1lKCIuL3N0YXRzIik7Yy5hZ2dOdW1zPWcuYWdnTnVtcyxjLmxlbj1nLmxlbixjLm1lYW49Zy5tZWFuLGMubWVkaWFuPWcubWVkaWFuLGMubWlkUmFuZ2U9Zy5taWRSYW5nZSxjLnZhcmlhbmNlPWcudmFyaWFuY2UsYy5zdGRldj1nLnN0ZGV2LGMuaW50ZXJwPWcuaW50ZXJwO3ZhciB2PWUoIi4vbWF0cml4Iik7Yy5pbml0MmRBcnJheT12LmluaXQyZEFycmF5LGMudHJhbnNwb3NlUmFnZ2VkPXYudHJhbnNwb3NlUmFnZ2VkLGMuZG90PXYuZG90LGMudHJhbnNsYXRpb25NYXRyaXg9di50cmFuc2xhdGlvbk1hdHJpeCxjLnJvdGF0aW9uTWF0cml4PXYucm90YXRpb25NYXRyaXgsYy5yb3RhdGlvblhZTWF0cml4PXYucm90YXRpb25YWU1hdHJpeCxjLmFwcGx5M0RUcmFuc2Zvcm09di5hcHBseTNEVHJhbnNmb3JtLGMuYXBwbHkyRFRyYW5zZm9ybT12LmFwcGx5MkRUcmFuc2Zvcm0sYy5hcHBseTJEVHJhbnNmb3JtMj12LmFwcGx5MkRUcmFuc2Zvcm0yLGMuY29udmVydENzc01hdHJpeD12LmNvbnZlcnRDc3NNYXRyaXgsYy5pbnZlcnNlVHJhbnNmb3JtTWF0cml4PXYuaW52ZXJzZVRyYW5zZm9ybU1hdHJpeDt2YXIgbT1lKCIuL2FuZ2xlcyIpO2MuZGVnMnJhZD1tLmRlZzJyYWQsYy5yYWQyZGVnPW0ucmFkMmRlZyxjLmFuZ2xlRGVsdGE9bS5hbmdsZURlbHRhLGMuYW5nbGVEaXN0PW0uYW5nbGVEaXN0LGMuaXNGdWxsQ2lyY2xlPW0uaXNGdWxsQ2lyY2xlLGMuaXNBbmdsZUluc2lkZVNlY3Rvcj1tLmlzQW5nbGVJbnNpZGVTZWN0b3IsYy5pc1B0SW5zaWRlU2VjdG9yPW0uaXNQdEluc2lkZVNlY3RvcixjLnBhdGhBcmM9bS5wYXRoQXJjLGMucGF0aFNlY3Rvcj1tLnBhdGhTZWN0b3IsYy5wYXRoQW5udWx1cz1tLnBhdGhBbm51bHVzO3ZhciB5PWUoIi4vYW5jaG9yX3V0aWxzIik7Yy5pc0xlZnRBbmNob3I9eS5pc0xlZnRBbmNob3IsYy5pc0NlbnRlckFuY2hvcj15LmlzQ2VudGVyQW5jaG9yLGMuaXNSaWdodEFuY2hvcj15LmlzUmlnaHRBbmNob3IsYy5pc1RvcEFuY2hvcj15LmlzVG9wQW5jaG9yLGMuaXNNaWRkbGVBbmNob3I9eS5pc01pZGRsZUFuY2hvcixjLmlzQm90dG9tQW5jaG9yPXkuaXNCb3R0b21BbmNob3I7dmFyIHg9ZSgiLi9nZW9tZXRyeTJkIik7Yy5zZWdtZW50c0ludGVyc2VjdD14LnNlZ21lbnRzSW50ZXJzZWN0LGMuc2VnbWVudERpc3RhbmNlPXguc2VnbWVudERpc3RhbmNlLGMuZ2V0VGV4dExvY2F0aW9uPXguZ2V0VGV4dExvY2F0aW9uLGMuY2xlYXJMb2NhdGlvbkNhY2hlPXguY2xlYXJMb2NhdGlvbkNhY2hlLGMuZ2V0VmlzaWJsZVNlZ21lbnQ9eC5nZXRWaXNpYmxlU2VnbWVudCxjLmZpbmRQb2ludE9uUGF0aD14LmZpbmRQb2ludE9uUGF0aDt2YXIgYj1lKCIuL2V4dGVuZCIpO2MuZXh0ZW5kRmxhdD1iLmV4dGVuZEZsYXQsYy5leHRlbmREZWVwPWIuZXh0ZW5kRGVlcCxjLmV4dGVuZERlZXBBbGw9Yi5leHRlbmREZWVwQWxsLGMuZXh0ZW5kRGVlcE5vQXJyYXlzPWIuZXh0ZW5kRGVlcE5vQXJyYXlzO3ZhciBfPWUoIi4vbG9nZ2VycyIpO2MubG9nPV8ubG9nLGMud2Fybj1fLndhcm4sYy5lcnJvcj1fLmVycm9yO3ZhciB3PWUoIi4vcmVnZXgiKTtjLmNvdW50ZXJSZWdleD13LmNvdW50ZXI7dmFyIFQ9ZSgiLi90aHJvdHRsZSIpO2MudGhyb3R0bGU9VC50aHJvdHRsZSxjLnRocm90dGxlRG9uZT1ULmRvbmUsYy5jbGVhclRocm90dGxlPVQuY2xlYXI7dmFyIGs9ZSgiLi9kb20iKTtmdW5jdGlvbiBNKGUpe3ZhciB0PXt9O2Zvcih2YXIgciBpbiBlKWZvcih2YXIgbj1lW3JdLGE9MDthPG4ubGVuZ3RoO2ErKyl0W25bYV1dPStyO3JldHVybiB0fWMuZ2V0R3JhcGhEaXY9ay5nZXRHcmFwaERpdixjLmlzUGxvdERpdj1rLmlzUGxvdERpdixjLnJlbW92ZUVsZW1lbnQ9ay5yZW1vdmVFbGVtZW50LGMuYWRkU3R5bGVSdWxlPWsuYWRkU3R5bGVSdWxlLGMuYWRkUmVsYXRlZFN0eWxlUnVsZT1rLmFkZFJlbGF0ZWRTdHlsZVJ1bGUsYy5kZWxldGVSZWxhdGVkU3R5bGVSdWxlPWsuZGVsZXRlUmVsYXRlZFN0eWxlUnVsZSxjLmdldEZ1bGxUcmFuc2Zvcm1NYXRyaXg9ay5nZXRGdWxsVHJhbnNmb3JtTWF0cml4LGMuZ2V0RWxlbWVudFRyYW5zZm9ybU1hdHJpeD1rLmdldEVsZW1lbnRUcmFuc2Zvcm1NYXRyaXgsYy5nZXRFbGVtZW50QW5kQW5jZXN0b3JzPWsuZ2V0RWxlbWVudEFuZEFuY2VzdG9ycyxjLmVxdWFsRG9tUmVjdHM9ay5lcXVhbERvbVJlY3RzLGMuY2xlYXJSZXNwb25zaXZlPWUoIi4vY2xlYXJfcmVzcG9uc2l2ZSIpLGMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWUoIi4vcHJlc2VydmVfZHJhd2luZ19idWZmZXIiKSxjLm1ha2VUcmFjZUdyb3Vwcz1lKCIuL21ha2VfdHJhY2VfZ3JvdXBzIiksYy5fPWUoIi4vbG9jYWxpemUiKSxjLm5vdGlmaWVyPWUoIi4vbm90aWZpZXIiKSxjLmZpbHRlclVuaXF1ZT1lKCIuL2ZpbHRlcl91bmlxdWUiKSxjLmZpbHRlclZpc2libGU9ZSgiLi9maWx0ZXJfdmlzaWJsZSIpLGMucHVzaFVuaXF1ZT1lKCIuL3B1c2hfdW5pcXVlIiksYy5pbmNyZW1lbnQ9ZSgiLi9pbmNyZW1lbnQiKSxjLmNsZWFuTnVtYmVyPWUoIi4vY2xlYW5fbnVtYmVyIiksYy5lbnN1cmVOdW1iZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGkoZSk/KGU9TnVtYmVyKGUpKTwtbHx8ZT5sP3M6aShlKT9OdW1iZXIoZSk6czpzfSxjLmlzSW5kZXg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4hKHZvaWQgMCE9PXQmJmU+PXQpJiYoaShlKSYmZT49MCYmZSUxPT0wKX0sYy5ub29wPWUoIi4vbm9vcCIpLGMuaWRlbnRpdHk9ZSgiLi9pZGVudGl0eSIpLGMucmVwZWF0PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPW5ldyBBcnJheSh0KSxuPTA7bjx0O24rKylyW25dPWU7cmV0dXJuIHJ9LGMuc3dhcEF0dHJzPWZ1bmN0aW9uKGUsdCxyLG4pe3J8fChyPSJ4Iiksbnx8KG49InkiKTtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIGk9dFthXSxvPWMubmVzdGVkUHJvcGVydHkoZSxpLnJlcGxhY2UoIj8iLHIpKSxsPWMubmVzdGVkUHJvcGVydHkoZSxpLnJlcGxhY2UoIj8iLG4pKSxzPW8uZ2V0KCk7by5zZXQobC5nZXQoKSksbC5zZXQocyl9fSxjLnJhaXNlVG9Ub3A9ZnVuY3Rpb24oZSl7ZS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKGUpfSxjLmNhbmNlbFRyYW5zaXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJhbnNpdGlvbigpLmR1cmF0aW9uKDApfSxjLmNvbnN0cmFpbj1mdW5jdGlvbihlLHQscil7cmV0dXJuIHQ+cj9NYXRoLm1heChyLE1hdGgubWluKHQsZSkpOk1hdGgubWF4KHQsTWF0aC5taW4ocixlKSl9LGMuYkJveEludGVyc2VjdD1mdW5jdGlvbihlLHQscil7cmV0dXJuIHI9cnx8MCxlLmxlZnQ8PXQucmlnaHQrciYmdC5sZWZ0PD1lLnJpZ2h0K3ImJmUudG9wPD10LmJvdHRvbStyJiZ0LnRvcDw9ZS5ib3R0b20rcn0sYy5zaW1wbGVNYXA9ZnVuY3Rpb24oZSx0LHIsbixhKXtmb3IodmFyIGk9ZS5sZW5ndGgsbz1uZXcgQXJyYXkoaSksbD0wO2w8aTtsKyspb1tsXT10KGVbbF0scixuLGEpO3JldHVybiBvfSxjLnJhbmRzdHI9ZnVuY3Rpb24gZSh0LHIsbixhKXtpZihufHwobj0xNiksdm9pZCAwPT09ciYmKHI9MjQpLHI8PTApcmV0dXJuIjAiO3ZhciBpLG8sbD1NYXRoLmxvZyhNYXRoLnBvdygyLHIpKS9NYXRoLmxvZyhuKSxzPSIiO2ZvcihpPTI7bD09PTEvMDtpKj0yKWw9TWF0aC5sb2coTWF0aC5wb3coMixyL2kpKS9NYXRoLmxvZyhuKSppO3ZhciB1PWwtTWF0aC5mbG9vcihsKTtmb3IoaT0wO2k8TWF0aC5mbG9vcihsKTtpKyspcz1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbikudG9TdHJpbmcobikrczt1JiYobz1NYXRoLnBvdyhuLHUpLHM9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm8pLnRvU3RyaW5nKG4pK3MpO3ZhciBmPXBhcnNlSW50KHMsbik7cmV0dXJuIHQmJnRbc118fGYhPT0xLzAmJmY+PU1hdGgucG93KDIscik/YT4xMD8oYy53YXJuKCJyYW5kc3RyIGZhaWxlZCB1bmlxdWVuZXNzIikscyk6ZSh0LHIsbiwoYXx8MCkrMSk6c30sYy5PcHRpb25Db250cm9sPWZ1bmN0aW9uKGUsdCl7ZXx8KGU9e30pLHR8fCh0PSJvcHQiKTt2YXIgcj17b3B0aW9uTGlzdDpbXSxfbmV3b3B0aW9uOmZ1bmN0aW9uKG4pe25bdF09ZSxyW24ubmFtZV09bixyLm9wdGlvbkxpc3QucHVzaChuKX19O3JldHVybiByWyJfIit0XT1lLHJ9LGMuc21vb3RoPWZ1bmN0aW9uKGUsdCl7aWYoKHQ9TWF0aC5yb3VuZCh0KXx8MCk8MilyZXR1cm4gZTt2YXIgcixuLGEsaSxvPWUubGVuZ3RoLGw9MipvLHM9Mip0LTEsYz1uZXcgQXJyYXkocyksdT1uZXcgQXJyYXkobyk7Zm9yKHI9MDtyPHM7cisrKWNbcl09KDEtTWF0aC5jb3MoTWF0aC5QSSoocisxKS90KSkvKDIqdCk7Zm9yKHI9MDtyPG87cisrKXtmb3IoaT0wLG49MDtuPHM7bisrKShhPXIrbisxLXQpPC1vP2EtPWwqTWF0aC5yb3VuZChhL2wpOmE+PWwmJihhLT1sKk1hdGguZmxvb3IoYS9sKSksYTwwP2E9LTEtYTphPj1vJiYoYT1sLTEtYSksaSs9ZVthXSpjW25dO3Vbcl09aX1yZXR1cm4gdX0sYy5zeW5jT3JBc3luYz1mdW5jdGlvbihlLHQscil7dmFyIG47ZnVuY3Rpb24gYSgpe3JldHVybiBjLnN5bmNPckFzeW5jKGUsdCxyKX1mb3IoO2UubGVuZ3RoOylpZigobj0oMCxlLnNwbGljZSgwLDEpWzBdKSh0KSkmJm4udGhlbilyZXR1cm4gbi50aGVuKGEpLnRoZW4odm9pZCAwLGMucHJvbWlzZUVycm9yKTtyZXR1cm4gciYmcih0KX0sYy5zdHJpcFRyYWlsaW5nU2xhc2g9ZnVuY3Rpb24oZSl7cmV0dXJuIi8iPT09ZS5zdWJzdHIoLTEpP2Uuc3Vic3RyKDAsZS5sZW5ndGgtMSk6ZX0sYy5ub25lT3JBbGw9ZnVuY3Rpb24oZSx0LHIpe2lmKGUpe3ZhciBuLGE9ITEsaT0hMDtmb3Iobj0wO248ci5sZW5ndGg7bisrKW51bGwhPWVbcltuXV0/YT0hMDppPSExO2lmKGEmJiFpKWZvcihuPTA7bjxyLmxlbmd0aDtuKyspZVtyW25dXT10W3Jbbl1dfX0sYy5tZXJnZUFycmF5PWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhPSJmdW5jdGlvbiI9PXR5cGVvZiBuO2lmKGMuaXNBcnJheU9yVHlwZWRBcnJheShlKSlmb3IodmFyIGk9TWF0aC5taW4oZS5sZW5ndGgsdC5sZW5ndGgpLG89MDtvPGk7bysrKXt2YXIgbD1lW29dO3Rbb11bcl09YT9uKGwpOmx9fSxjLm1lcmdlQXJyYXlDYXN0UG9zaXRpdmU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBjLm1lcmdlQXJyYXkoZSx0LHIsKGZ1bmN0aW9uKGUpe3ZhciB0PStlO3JldHVybiBpc0Zpbml0ZSh0KSYmdD4wP3Q6MH0pKX0sYy5maWxsQXJyYXk9ZnVuY3Rpb24oZSx0LHIsbil7aWYobj1ufHxjLmlkZW50aXR5LGMuaXNBcnJheU9yVHlwZWRBcnJheShlKSlmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKyl0W2FdW3JdPW4oZVthXSl9LGMuY2FzdE9wdGlvbj1mdW5jdGlvbihlLHQscixuKXtuPW58fGMuaWRlbnRpdHk7dmFyIGE9Yy5uZXN0ZWRQcm9wZXJ0eShlLHIpLmdldCgpO3JldHVybiBjLmlzQXJyYXlPclR5cGVkQXJyYXkoYSk/QXJyYXkuaXNBcnJheSh0KSYmYy5pc0FycmF5T3JUeXBlZEFycmF5KGFbdFswXV0pP24oYVt0WzBdXVt0WzFdXSk6bihhW3RdKTphfSxjLmV4dHJhY3RPcHRpb249ZnVuY3Rpb24oZSx0LHIsbil7aWYociBpbiBlKXJldHVybiBlW3JdO3ZhciBhPWMubmVzdGVkUHJvcGVydHkodCxuKS5nZXQoKTtyZXR1cm4gQXJyYXkuaXNBcnJheShhKT92b2lkIDA6YX0sYy50YWdTZWxlY3RlZD1mdW5jdGlvbihlLHQscil7dmFyIG4sYSxpPXQuc2VsZWN0ZWRwb2ludHMsbz10Ll9pbmRleFRvUG9pbnRzO28mJihuPU0obykpO2Zvcih2YXIgbD0wO2w8aS5sZW5ndGg7bCsrKXt2YXIgcz1pW2xdO2lmKGMuaXNJbmRleChzKXx8Yy5pc0FycmF5T3JUeXBlZEFycmF5KHMpJiZjLmlzSW5kZXgoc1swXSkmJmMuaXNJbmRleChzWzFdKSl7dmFyIHU9bj9uW3NdOnMsZj1yP3JbdV06dTt2b2lkIDAhPT0oYT1mKSYmYTxlLmxlbmd0aCYmKGVbZl0uc2VsZWN0ZWQ9MSl9fX0sYy5zZWxJbmRpY2VzMnNlbFBvaW50cz1mdW5jdGlvbihlKXt2YXIgdD1lLnNlbGVjdGVkcG9pbnRzLHI9ZS5faW5kZXhUb1BvaW50cztpZihyKXtmb3IodmFyIG49TShyKSxhPVtdLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIG89dFtpXTtpZihjLmlzSW5kZXgobykpe3ZhciBsPW5bb107Yy5pc0luZGV4KGwpJiZhLnB1c2gobCl9fXJldHVybiBhfXJldHVybiB0fSxjLmdldFRhcmdldEFycmF5PWZ1bmN0aW9uKGUsdCl7dmFyIHI9dC50YXJnZXQ7aWYoInN0cmluZyI9PXR5cGVvZiByJiZyKXt2YXIgbj1jLm5lc3RlZFByb3BlcnR5KGUscikuZ2V0KCk7cmV0dXJuISFBcnJheS5pc0FycmF5KG4pJiZufXJldHVybiEhQXJyYXkuaXNBcnJheShyKSYmcn0sYy5taW5FeHRlbmQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj17fTsib2JqZWN0IiE9dHlwZW9mIHQmJih0PXt9KTt2YXIgbixhLGksbz1PYmplY3Qua2V5cyhlKTtmb3Iobj0wO248by5sZW5ndGg7bisrKWk9ZVthPW9bbl1dLCJfIiE9PWEuY2hhckF0KDApJiYiZnVuY3Rpb24iIT10eXBlb2YgaSYmKCJtb2R1bGUiPT09YT9yW2FdPWk6QXJyYXkuaXNBcnJheShpKT9yW2FdPSJjb2xvcnNjYWxlIj09PWE/aS5zbGljZSgpOmkuc2xpY2UoMCwzKTpjLmlzVHlwZWRBcnJheShpKT9yW2FdPWkuc3ViYXJyYXkoMCwzKTpyW2FdPWkmJiJvYmplY3QiPT10eXBlb2YgaT9jLm1pbkV4dGVuZChlW2FdLHRbYV0pOmkpO2ZvcihvPU9iamVjdC5rZXlzKHQpLG49MDtuPG8ubGVuZ3RoO24rKykib2JqZWN0Ij09dHlwZW9mKGk9dFthPW9bbl1dKSYmYSBpbiByJiYib2JqZWN0Ij09dHlwZW9mIHJbYV18fChyW2FdPWkpO3JldHVybiByfSxjLnRpdGxlQ2FzZT1mdW5jdGlvbihlKXtyZXR1cm4gZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStlLnN1YnN0cigxKX0sYy5jb250YWluc0FueT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWlmKC0xIT09ZS5pbmRleE9mKHRbcl0pKXJldHVybiEwO3JldHVybiExfSxjLmlzSUU9ZnVuY3Rpb24oKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IubXNTYXZlQmxvYn07dmFyIEE9L01TSUUgWzEtOV1cLi87Yy5pc0lFOW9yQmVsb3c9ZnVuY3Rpb24oKXtyZXR1cm4gYy5pc0lFKCkmJkEudGVzdCh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCl9O3ZhciBMPS9WZXJzaW9uXC9bXGRcLl0rLipTYWZhcmkvO2MuaXNTYWZhcmk9ZnVuY3Rpb24oKXtyZXR1cm4gTC50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KX07dmFyIFM9L2lQYWR8aVBob25lfGlQb2QvO2MuaXNJT1M9ZnVuY3Rpb24oKXtyZXR1cm4gUy50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KX0sYy5pc0QzU2VsZWN0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5jbGFzc2VkfSxjLmVuc3VyZVNpbmdsZT1mdW5jdGlvbihlLHQscixuKXt2YXIgYT1lLnNlbGVjdCh0KyhyPyIuIityOiIiKSk7aWYoYS5zaXplKCkpcmV0dXJuIGE7dmFyIGk9ZS5hcHBlbmQodCk7cmV0dXJuIHImJmkuY2xhc3NlZChyLCEwKSxuJiZpLmNhbGwobiksaX0sYy5lbnN1cmVTaW5nbGVCeUlkPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhPWUuc2VsZWN0KHQrIiMiK3IpO2lmKGEuc2l6ZSgpKXJldHVybiBhO3ZhciBpPWUuYXBwZW5kKHQpLmF0dHIoImlkIixyKTtyZXR1cm4gbiYmaS5jYWxsKG4pLGl9LGMub2JqZWN0RnJvbVBhdGg9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIsbj1lLnNwbGl0KCIuIiksYT1yPXt9LGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIG89bltpXSxsPW51bGwscz1uW2ldLm1hdGNoKC8oLiopXFsoWzAtOV0rKVxdLyk7cz8obz1zWzFdLGw9c1syXSxyPXJbb109W10saT09PW4ubGVuZ3RoLTE/cltsXT10OnJbbF09e30scj1yW2xdKTooaT09PW4ubGVuZ3RoLTE/cltvXT10OnJbb109e30scj1yW29dKX1yZXR1cm4gYX07dmFyIEM9L14oW15cW1wuXSspXC4oLispPy8sTz0vXihbXlwuXSspXFsoWzAtOV0rKVxdKFwuKT8oLispPy87Yy5leHBhbmRPYmplY3RQYXRocz1mdW5jdGlvbihlKXt2YXIgdCxyLG4sYSxpLG8sbDtpZigib2JqZWN0Ij09dHlwZW9mIGUmJiFBcnJheS5pc0FycmF5KGUpKWZvcihyIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShyKSYmKCh0PXIubWF0Y2goQykpPyhhPWVbcl0sbj10WzFdLGRlbGV0ZSBlW3JdLGVbbl09Yy5leHRlbmREZWVwTm9BcnJheXMoZVtuXXx8e30sYy5vYmplY3RGcm9tUGF0aChyLGMuZXhwYW5kT2JqZWN0UGF0aHMoYSkpW25dKSk6KHQ9ci5tYXRjaChPKSk/KGE9ZVtyXSxuPXRbMV0saT1wYXJzZUludCh0WzJdKSxkZWxldGUgZVtyXSxlW25dPWVbbl18fFtdLCIuIj09PXRbM10/KGw9dFs0XSxvPWVbbl1baV09ZVtuXVtpXXx8e30sYy5leHRlbmREZWVwTm9BcnJheXMobyxjLm9iamVjdEZyb21QYXRoKGwsYy5leHBhbmRPYmplY3RQYXRocyhhKSkpKTplW25dW2ldPWMuZXhwYW5kT2JqZWN0UGF0aHMoYSkpOmVbcl09Yy5leHBhbmRPYmplY3RQYXRocyhlW3JdKSk7cmV0dXJuIGV9LGMubnVtU2VwYXJhdGU9ZnVuY3Rpb24oZSx0LHIpe2lmKHJ8fChyPSExKSwic3RyaW5nIiE9dHlwZW9mIHR8fDA9PT10Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlNlcGFyYXRvciBzdHJpbmcgcmVxdWlyZWQgZm9yIGZvcm1hdHRpbmchIik7Im51bWJlciI9PXR5cGVvZiBlJiYoZT1TdHJpbmcoZSkpO3ZhciBuPS8oXGQrKShcZHszfSkvLGE9dC5jaGFyQXQoMCksaT10LmNoYXJBdCgxKSxvPWUuc3BsaXQoIi4iKSxsPW9bMF0scz1vLmxlbmd0aD4xP2Erb1sxXToiIjtpZihpJiYoby5sZW5ndGg+MXx8bC5sZW5ndGg+NHx8cikpZm9yKDtuLnRlc3QobCk7KWw9bC5yZXBsYWNlKG4sIiQxIitpKyIkMiIpO3JldHVybiBsK3N9LGMuVEVNUExBVEVfU1RSSU5HX1JFR0VYPS8leyhbXlxzJXt9Ol0qKShbOnxcfF1bXn1dKik/fS9nO3ZhciBEPS9eXHcqJC87Yy50ZW1wbGF0ZVN0cmluZz1mdW5jdGlvbihlLHQpe3ZhciByPXt9O3JldHVybiBlLnJlcGxhY2UoYy5URU1QTEFURV9TVFJJTkdfUkVHRVgsKGZ1bmN0aW9uKGUsbil7dmFyIGE7cmV0dXJuIEQudGVzdChuKT9hPXRbbl06KHJbbl09cltuXXx8Yy5uZXN0ZWRQcm9wZXJ0eSh0LG4pLmdldCxhPXJbbl0oKSksYy5pc1ZhbGlkVGV4dFZhbHVlKGEpP2E6IiJ9KSl9O3ZhciBQPXttYXg6MTAsY291bnQ6MCxuYW1lOiJob3ZlcnRlbXBsYXRlIn07Yy5ob3ZlcnRlbXBsYXRlU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEUuYXBwbHkoUCxhcmd1bWVudHMpfTt2YXIgej17bWF4OjEwLGNvdW50OjAsbmFtZToidGV4dHRlbXBsYXRlIn07Yy50ZXh0dGVtcGxhdGVTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gRS5hcHBseSh6LGFyZ3VtZW50cyl9O3ZhciBSPS9eWzp8XHxdLztmdW5jdGlvbiBFKGUsdCxyKXt2YXIgaT10aGlzLG89YXJndW1lbnRzO3R8fCh0PXt9KTt2YXIgbD17fTtyZXR1cm4gZS5yZXBsYWNlKGMuVEVNUExBVEVfU1RSSU5HX1JFR0VYLChmdW5jdGlvbihlLHMsdSl7dmFyIGYsZCxwLGg7Zm9yKHA9MztwPG8ubGVuZ3RoO3ArKylpZihmPW9bcF0pe2lmKGYuaGFzT3duUHJvcGVydHkocykpe2Q9ZltzXTticmVha31pZihELnRlc3Qocyl8fChkPWxbc118fGMubmVzdGVkUHJvcGVydHkoZixzKS5nZXQoKSkmJihsW3NdPWQpLHZvaWQgMCE9PWQpYnJlYWt9aWYodm9pZCAwPT09ZCYmaSlyZXR1cm4gaS5jb3VudDxpLm1heCYmKGMud2FybigiVmFyaWFibGUgJyIrcysiJyBpbiAiK2kubmFtZSsiIGNvdWxkIG5vdCBiZSBmb3VuZCEiKSxkPWUpLGkuY291bnQ9PT1pLm1heCYmYy53YXJuKCJUb28gbWFueSAiK2kubmFtZSsiIHdhcm5pbmdzIC0gYWRkaXRpb25hbCB3YXJuaW5ncyB3aWxsIGJlIHN1cHByZXNzZWQiKSxpLmNvdW50KyssZTtpZih1KXtpZigiOiI9PT11WzBdJiYoZD0oaD1yP3IubnVtYmVyRm9ybWF0Om4uZm9ybWF0KSh1LnJlcGxhY2UoUiwiIikpKGQpKSwifCI9PT11WzBdKXtoPXI/ci50aW1lRm9ybWF0OmE7dmFyIGc9Yy5kYXRlVGltZTJtcyhkKTtkPWMuZm9ybWF0RGF0ZShnLHUucmVwbGFjZShSLCIiKSwhMSxoKX19ZWxzZSB0Lmhhc093blByb3BlcnR5KHMrIkxhYmVsIikmJihkPXRbcysiTGFiZWwiXSk7cmV0dXJuIGR9KSl9Yy5zdWJwbG90U29ydD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCkrMSxuPTAsYT0wLGk9MDtpPHI7aSsrKXt2YXIgbz1lLmNoYXJDb2RlQXQoaSl8fDAsbD10LmNoYXJDb2RlQXQoaSl8fDAscz1vPj00OCYmbzw9NTcsYz1sPj00OCYmbDw9NTc7aWYocyYmKG49MTAqbitvLTQ4KSxjJiYoYT0xMCphK2wtNDgpLCFzfHwhYyl7aWYobiE9PWEpcmV0dXJuIG4tYTtpZihvIT09bClyZXR1cm4gby1sfX1yZXR1cm4gYS1ufTt2YXIgST0yZTk7Yy5zZWVkUHNldWRvUmFuZG9tPWZ1bmN0aW9uKCl7ST0yZTl9LGMucHNldWRvUmFuZG9tPWZ1bmN0aW9uKCl7dmFyIGU9STtyZXR1cm4gST0oNjkwNjkqSSsxKSU0Mjk0OTY3Mjk2LE1hdGguYWJzKEktZSk8NDI5NDk2NzI5P2MucHNldWRvUmFuZG9tKCk6SS80Mjk0OTY3Mjk2fSxjLmZpbGxUZXh0PWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1BcnJheS5pc0FycmF5KHIpP2Z1bmN0aW9uKGUpe3IucHVzaChlKX06ZnVuY3Rpb24oZSl7ci50ZXh0PWV9LGE9Yy5leHRyYWN0T3B0aW9uKGUsdCwiaHR4IiwiaG92ZXJ0ZXh0Iik7aWYoYy5pc1ZhbGlkVGV4dFZhbHVlKGEpKXJldHVybiBuKGEpO3ZhciBpPWMuZXh0cmFjdE9wdGlvbihlLHQsInR4IiwidGV4dCIpO3JldHVybiBjLmlzVmFsaWRUZXh0VmFsdWUoaSk/bihpKTp2b2lkIDB9LGMuaXNWYWxpZFRleHRWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gZXx8MD09PWV9LGMuZm9ybWF0UGVyY2VudD1mdW5jdGlvbihlLHQpe3Q9dHx8MDtmb3IodmFyIHI9KE1hdGgucm91bmQoMTAwKmUqTWF0aC5wb3coMTAsdCkpKk1hdGgucG93KC4xLHQpKS50b0ZpeGVkKHQpKyIlIixuPTA7bjx0O24rKyktMSE9PXIuaW5kZXhPZigiLiIpJiYocj0ocj1yLnJlcGxhY2UoIjAlIiwiJSIpKS5yZXBsYWNlKCIuJSIsIiUiKSk7cmV0dXJuIHJ9LGMuaXNIaWRkZW49ZnVuY3Rpb24oZSl7dmFyIHQ9d2luZG93LmdldENvbXB1dGVkU3R5bGUoZSkuZGlzcGxheTtyZXR1cm4hdHx8Im5vbmUiPT09dH0sYy5zdHJUcmFuc2xhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZXx8dD8idHJhbnNsYXRlKCIrZSsiLCIrdCsiKSI6IiJ9LGMuc3RyUm90YXRlPWZ1bmN0aW9uKGUpe3JldHVybiBlPyJyb3RhdGUoIitlKyIpIjoiIn0sYy5zdHJTY2FsZT1mdW5jdGlvbihlKXtyZXR1cm4gMSE9PWU/InNjYWxlKCIrZSsiKSI6IiJ9LGMuZ2V0VGV4dFRyYW5zZm9ybT1mdW5jdGlvbihlKXt2YXIgdD1lLm5vQ2VudGVyLHI9ZS50ZXh0WCxuPWUudGV4dFksYT1lLnRhcmdldFgsaT1lLnRhcmdldFksbz1lLmFuY2hvclh8fDAsbD1lLmFuY2hvcll8fDAscz1lLnJvdGF0ZSx1PWUuc2NhbGU7cmV0dXJuIHU/dT4xJiYodT0xKTp1PTAsYy5zdHJUcmFuc2xhdGUoYS11KihyK28pLGktdSoobitsKSkrYy5zdHJTY2FsZSh1KSsocz8icm90YXRlKCIrcysodD8iIjoiICIrcisiICIrbikrIikiOiIiKX0sYy5lbnN1cmVVbmlmb3JtRm9udFNpemU9ZnVuY3Rpb24oZSx0KXt2YXIgcj1jLmV4dGVuZEZsYXQoe30sdCk7cmV0dXJuIHIuc2l6ZT1NYXRoLm1heCh0LnNpemUsZS5fZnVsbExheW91dC51bmlmb3JtdGV4dC5taW5zaXplfHwwKSxyfSxjLmpvaW4yPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1lLmxlbmd0aDtyZXR1cm4gbj4xP2Uuc2xpY2UoMCwtMSkuam9pbih0KStyK2Vbbi0xXTplLmpvaW4odCl9fSx7Ii4uL2NvbnN0YW50cy9udW1lcmljYWwiOjE4MSwiLi9hbmNob3JfdXRpbHMiOjE4NiwiLi9hbmdsZXMiOjE4NywiLi9hcnJheSI6MTg4LCIuL2NsZWFuX251bWJlciI6MTg5LCIuL2NsZWFyX3Jlc3BvbnNpdmUiOjE5MSwiLi9jb2VyY2UiOjE5MiwiLi9kYXRlcyI6MTkzLCIuL2RvbSI6MTk0LCIuL2V4dGVuZCI6MTk2LCIuL2ZpbHRlcl91bmlxdWUiOjE5NywiLi9maWx0ZXJfdmlzaWJsZSI6MTk4LCIuL2dlb21ldHJ5MmQiOjE5OSwiLi9pZGVudGl0eSI6MjAwLCIuL2luY3JlbWVudCI6MjAxLCIuL2lzX3BsYWluX29iamVjdCI6MjAzLCIuL2tleWVkX2NvbnRhaW5lciI6MjA0LCIuL2xvY2FsaXplIjoyMDUsIi4vbG9nZ2VycyI6MjA2LCIuL21ha2VfdHJhY2VfZ3JvdXBzIjoyMDcsIi4vbWF0cml4IjoyMDgsIi4vbW9kIjoyMDksIi4vbmVzdGVkX3Byb3BlcnR5IjoyMTAsIi4vbm9vcCI6MjExLCIuL25vdGlmaWVyIjoyMTIsIi4vcHJlc2VydmVfZHJhd2luZ19idWZmZXIiOjIxNSwiLi9wdXNoX3VuaXF1ZSI6MjE2LCIuL3JlZ2V4IjoyMTgsIi4vcmVsYXRpdmVfYXR0ciI6MjE5LCIuL3JlbGlua19wcml2YXRlIjoyMjAsIi4vc2VhcmNoIjoyMjEsIi4vc3RhdHMiOjIyMywiLi90aHJvdHRsZSI6MjI1LCIuL3RvX2xvZ19yYW5nZSI6MjI2LGQzOjksImQzLXRpbWUtZm9ybWF0Ijo3LCJmYXN0LWlzbnVtZXJpYyI6MTF9XSwyMDM6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiB3aW5kb3cmJndpbmRvdy5wcm9jZXNzJiZ3aW5kb3cucHJvY2Vzcy52ZXJzaW9ucz8iW29iamVjdCBPYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKToiW29iamVjdCBPYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSYmT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09T2JqZWN0LnByb3RvdHlwZX19LHt9XSwyMDQ6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi9uZXN0ZWRfcHJvcGVydHkiKSxhPS9eXHcqJC87dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLGkpe3ZhciBvLGwscztyPXJ8fCJuYW1lIixpPWl8fCJ2YWx1ZSI7dmFyIGM9e307dCYmdC5sZW5ndGg/KHM9bihlLHQpLGw9cy5nZXQoKSk6bD1lLHQ9dHx8IiI7dmFyIHU9e307aWYobClmb3Iobz0wO288bC5sZW5ndGg7bysrKXVbbFtvXVtyXV09bzt2YXIgZj1hLnRlc3QoaSksZD17c2V0OmZ1bmN0aW9uKGUsdCl7dmFyIGE9bnVsbD09PXQ/NDowO2lmKCFsKXtpZighc3x8ND09PWEpcmV0dXJuO2w9W10scy5zZXQobCl9dmFyIG89dVtlXTtpZih2b2lkIDA9PT1vKXtpZig0PT09YSlyZXR1cm47YXw9MyxvPWwubGVuZ3RoLHVbZV09b31lbHNlIHQhPT0oZj9sW29dW2ldOm4obFtvXSxpKS5nZXQoKSkmJihhfD0yKTt2YXIgcD1sW29dPWxbb118fHt9O3JldHVybiBwW3JdPWUsZj9wW2ldPXQ6bihwLGkpLnNldCh0KSxudWxsIT09dCYmKGEmPS01KSxjW29dPWNbb118YSxkfSxnZXQ6ZnVuY3Rpb24oZSl7aWYobCl7dmFyIHQ9dVtlXTtyZXR1cm4gdm9pZCAwPT09dD92b2lkIDA6Zj9sW3RdW2ldOm4obFt0XSxpKS5nZXQoKX19LHJlbmFtZTpmdW5jdGlvbihlLHQpe3ZhciBuPXVbZV07cmV0dXJuIHZvaWQgMD09PW58fChjW25dPTF8Y1tuXSx1W3RdPW4sZGVsZXRlIHVbZV0sbFtuXVtyXT10KSxkfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dmFyIHQ9dVtlXTtpZih2b2lkIDA9PT10KXJldHVybiBkO3ZhciBhPWxbdF07aWYoT2JqZWN0LmtleXMoYSkubGVuZ3RoPjIpcmV0dXJuIGNbdF09MnxjW3RdLGQuc2V0KGUsbnVsbCk7aWYoZil7Zm9yKG89dDtvPGwubGVuZ3RoO28rKyljW29dPTN8Y1tvXTtmb3Iobz10O288bC5sZW5ndGg7bysrKXVbbFtvXVtyXV0tLTtsLnNwbGljZSh0LDEpLGRlbGV0ZSB1W2VdfWVsc2UgbihhLGkpLnNldChudWxsKSxjW3RdPTZ8Y1t0XTtyZXR1cm4gZH0sY29uc3RydWN0VXBkYXRlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlLGEsbz17fSxzPU9iamVjdC5rZXlzKGMpLHU9MDt1PHMubGVuZ3RoO3UrKylhPXNbdV0sZT10KyJbIithKyJdIixsW2FdPygxJmNbYV0mJihvW2UrIi4iK3JdPWxbYV1bcl0pLDImY1thXSYmKG9bZSsiLiIraV09Zj80JmNbYV0/bnVsbDpsW2FdW2ldOjQmY1thXT9udWxsOm4obFthXSxpKS5nZXQoKSkpOm9bZV09bnVsbDtyZXR1cm4gb319O3JldHVybiBkfX0seyIuL25lc3RlZF9wcm9wZXJ0eSI6MjEwfV0sMjA1OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uL3JlZ2lzdHJ5Iik7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuX2NvbnRleHQubG9jYWxlLGE9MDthPDI7YSsrKXtmb3IodmFyIGk9ZS5fY29udGV4dC5sb2NhbGVzLG89MDtvPDI7bysrKXt2YXIgbD0oaVtyXXx8e30pLmRpY3Rpb25hcnk7aWYobCl7dmFyIHM9bFt0XTtpZihzKXJldHVybiBzfWk9bi5sb2NhbGVSZWdpc3RyeX12YXIgYz1yLnNwbGl0KCItIilbMF07aWYoYz09PXIpYnJlYWs7cj1jfXJldHVybiB0fX0seyIuLi9yZWdpc3RyeSI6MjkwfV0sMjA2OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uL3Bsb3RfYXBpL3Bsb3RfY29uZmlnIikuZGZsdENvbmZpZyxhPWUoIi4vbm90aWZpZXIiKSxpPXQuZXhwb3J0cz17fTtmdW5jdGlvbiBvKGUsdCl7aWYoZSYmZS5hcHBseSl0cnl7cmV0dXJuIHZvaWQgZS5hcHBseShjb25zb2xlLHQpfWNhdGNoKGUpe31mb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl0cnl7ZSh0W3JdKX1jYXRjaChlKXtjb25zb2xlLmxvZyh0W3JdKX19aS5sb2c9ZnVuY3Rpb24oKXt2YXIgZTtpZihuLmxvZ2dpbmc+MSl7dmFyIHQ9WyJMT0c6Il07Zm9yKGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXQucHVzaChhcmd1bWVudHNbZV0pO28oY29uc29sZS50cmFjZXx8Y29uc29sZS5sb2csdCl9aWYobi5ub3RpZnlPbkxvZ2dpbmc+MSl7dmFyIHI9W107Zm9yKGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXIucHVzaChhcmd1bWVudHNbZV0pO2Eoci5qb2luKCI8YnI+IiksImxvbmciKX19LGkud2Fybj1mdW5jdGlvbigpe3ZhciBlO2lmKG4ubG9nZ2luZz4wKXt2YXIgdD1bIldBUk46Il07Zm9yKGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXQucHVzaChhcmd1bWVudHNbZV0pO28oY29uc29sZS50cmFjZXx8Y29uc29sZS5sb2csdCl9aWYobi5ub3RpZnlPbkxvZ2dpbmc+MCl7dmFyIHI9W107Zm9yKGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXIucHVzaChhcmd1bWVudHNbZV0pO2Eoci5qb2luKCI8YnI+IiksInN0aWNrIil9fSxpLmVycm9yPWZ1bmN0aW9uKCl7dmFyIGU7aWYobi5sb2dnaW5nPjApe3ZhciB0PVsiRVJST1I6Il07Zm9yKGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXQucHVzaChhcmd1bWVudHNbZV0pO28oY29uc29sZS5lcnJvcix0KX1pZihuLm5vdGlmeU9uTG9nZ2luZz4wKXt2YXIgcj1bXTtmb3IoZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspci5wdXNoKGFyZ3VtZW50c1tlXSk7YShyLmpvaW4oIjxicj4iKSwic3RpY2siKX19fSx7Ii4uL3Bsb3RfYXBpL3Bsb3RfY29uZmlnIjoyMzUsIi4vbm90aWZpZXIiOjIxMn1dLDIwNzpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJkMyIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7dmFyIGE9ZS5zZWxlY3RBbGwoImcuIityLnJlcGxhY2UoL1xzL2csIi4iKSkuZGF0YSh0LChmdW5jdGlvbihlKXtyZXR1cm4gZVswXS50cmFjZS51aWR9KSk7YS5leGl0KCkucmVtb3ZlKCksYS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixyKSxhLm9yZGVyKCk7dmFyIGk9ZS5jbGFzc2VkKCJyYW5nZXBsb3QiKT8ibm9kZVJhbmdlUGxvdDMiOiJub2RlMyI7cmV0dXJuIGEuZWFjaCgoZnVuY3Rpb24oZSl7ZVswXVtpXT1uLnNlbGVjdCh0aGlzKX0pKSxhfX0se2QzOjl9XSwyMDg6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiZ2wtbWF0NCIpO3IuaW5pdDJkQXJyYXk9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXJbbl09bmV3IEFycmF5KHQpO3JldHVybiByfSxyLnRyYW5zcG9zZVJhZ2dlZD1mdW5jdGlvbihlKXt2YXIgdCxyLG49MCxhPWUubGVuZ3RoO2Zvcih0PTA7dDxhO3QrKyluPU1hdGgubWF4KG4sZVt0XS5sZW5ndGgpO3ZhciBpPW5ldyBBcnJheShuKTtmb3IodD0wO3Q8bjt0KyspZm9yKGlbdF09bmV3IEFycmF5KGEpLHI9MDtyPGE7cisrKWlbdF1bcl09ZVtyXVt0XTtyZXR1cm4gaX0sci5kb3Q9ZnVuY3Rpb24oZSx0KXtpZighZS5sZW5ndGh8fCF0Lmxlbmd0aHx8ZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4gbnVsbDt2YXIgbixhLGk9ZS5sZW5ndGg7aWYoZVswXS5sZW5ndGgpZm9yKG49bmV3IEFycmF5KGkpLGE9MDthPGk7YSsrKW5bYV09ci5kb3QoZVthXSx0KTtlbHNlIGlmKHRbMF0ubGVuZ3RoKXt2YXIgbz1yLnRyYW5zcG9zZVJhZ2dlZCh0KTtmb3Iobj1uZXcgQXJyYXkoby5sZW5ndGgpLGE9MDthPG8ubGVuZ3RoO2ErKyluW2FdPXIuZG90KGUsb1thXSl9ZWxzZSBmb3Iobj0wLGE9MDthPGk7YSsrKW4rPWVbYV0qdFthXTtyZXR1cm4gbn0sci50cmFuc2xhdGlvbk1hdHJpeD1mdW5jdGlvbihlLHQpe3JldHVybltbMSwwLGVdLFswLDEsdF0sWzAsMCwxXV19LHIucm90YXRpb25NYXRyaXg9ZnVuY3Rpb24oZSl7dmFyIHQ9ZSpNYXRoLlBJLzE4MDtyZXR1cm5bW01hdGguY29zKHQpLC1NYXRoLnNpbih0KSwwXSxbTWF0aC5zaW4odCksTWF0aC5jb3ModCksMF0sWzAsMCwxXV19LHIucm90YXRpb25YWU1hdHJpeD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHIuZG90KHIuZG90KHIudHJhbnNsYXRpb25NYXRyaXgodCxuKSxyLnJvdGF0aW9uTWF0cml4KGUpKSxyLnRyYW5zbGF0aW9uTWF0cml4KC10LC1uKSl9LHIuYXBwbHkzRFRyYW5zZm9ybT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMsbj0xPT09YXJndW1lbnRzLmxlbmd0aD90WzBdOlt0WzBdLHRbMV0sdFsyXXx8MF07cmV0dXJuIHIuZG90KGUsW25bMF0sblsxXSxuWzJdLDFdKS5zbGljZSgwLDMpfX0sci5hcHBseTJEVHJhbnNmb3JtPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50czszPT09dC5sZW5ndGgmJih0PXRbMF0pO3ZhciBuPTE9PT1hcmd1bWVudHMubGVuZ3RoP3RbMF06W3RbMF0sdFsxXV07cmV0dXJuIHIuZG90KGUsW25bMF0sblsxXSwxXSkuc2xpY2UoMCwyKX19LHIuYXBwbHkyRFRyYW5zZm9ybTI9ZnVuY3Rpb24oZSl7dmFyIHQ9ci5hcHBseTJEVHJhbnNmb3JtKGUpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdChlLnNsaWNlKDAsMikpLmNvbmNhdCh0KGUuc2xpY2UoMiw0KSkpfX0sci5jb252ZXJ0Q3NzTWF0cml4PWZ1bmN0aW9uKGUpe2lmKGUpe3ZhciB0PWUubGVuZ3RoO2lmKDE2PT09dClyZXR1cm4gZTtpZig2PT09dClyZXR1cm5bZVswXSxlWzFdLDAsMCxlWzJdLGVbM10sMCwwLDAsMCwxLDAsZVs0XSxlWzVdLDAsMV19cmV0dXJuWzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdfSxyLmludmVyc2VUcmFuc2Zvcm1NYXRyaXg9ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIG4uaW52ZXJ0KHQsZSksW1t0WzBdLHRbMV0sdFsyXSx0WzNdXSxbdFs0XSx0WzVdLHRbNl0sdFs3XV0sW3RbOF0sdFs5XSx0WzEwXSx0WzExXV0sW3RbMTJdLHRbMTNdLHRbMTRdLHRbMTVdXV19fSx7ImdsLW1hdDQiOjI3fV0sMjA5OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz17bW9kOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZSV0O3JldHVybiByPDA/cit0OnJ9LG1vZEhhbGY6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTWF0aC5hYnMoZSk+dC8yP2UtTWF0aC5yb3VuZChlL3QpKnQ6ZX19fSx7fV0sMjEwOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoImZhc3QtaXNudW1lcmljIiksYT1lKCIuL2FycmF5IikuaXNBcnJheU9yVHlwZWRBcnJheTtmdW5jdGlvbiBpKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbixvLGwscyxjPWU7Zm9yKGw9MDtsPHQubGVuZ3RoLTE7bCsrKXtpZigtMT09PShyPXRbbF0pKXtmb3Iobj0hMCxvPVtdLHM9MDtzPGMubGVuZ3RoO3MrKylvW3NdPWkoY1tzXSx0LnNsaWNlKGwrMSkpKCksb1tzXSE9PW9bMF0mJihuPSExKTtyZXR1cm4gbj9vWzBdOm99aWYoIm51bWJlciI9PXR5cGVvZiByJiYhYShjKSlyZXR1cm47aWYoIm9iamVjdCIhPXR5cGVvZihjPWNbcl0pfHxudWxsPT09YylyZXR1cm59aWYoIm9iamVjdCI9PXR5cGVvZiBjJiZudWxsIT09YyYmbnVsbCE9PShvPWNbdFtsXV0pKXJldHVybiBvfX10LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZihuKHQpKXQ9U3RyaW5nKHQpO2Vsc2UgaWYoInN0cmluZyIhPXR5cGVvZiB0fHwiWy0xXSI9PT10LnN1YnN0cih0Lmxlbmd0aC00KSl0aHJvdyJiYWQgcHJvcGVydHkgc3RyaW5nIjtmb3IodmFyIHIsYSxvLGw9MCxjPXQuc3BsaXQoIi4iKTtsPGMubGVuZ3RoOyl7aWYocj1TdHJpbmcoY1tsXSkubWF0Y2goL14oW15cW1xdXSopKChcW1wtP1swLTldKlxdKSspJC8pKXtpZihyWzFdKWNbbF09clsxXTtlbHNle2lmKDAhPT1sKXRocm93ImJhZCBwcm9wZXJ0eSBzdHJpbmciO2Muc3BsaWNlKDAsMSl9Zm9yKGE9clsyXS5zdWJzdHIoMSxyWzJdLmxlbmd0aC0yKS5zcGxpdCgiXVsiKSxvPTA7bzxhLmxlbmd0aDtvKyspbCsrLGMuc3BsaWNlKGwsMCxOdW1iZXIoYVtvXSkpfWwrK31yZXR1cm4ib2JqZWN0IiE9dHlwZW9mIGU/ZnVuY3Rpb24oZSx0LHIpe3JldHVybntzZXQ6ZnVuY3Rpb24oKXt0aHJvdyJiYWQgY29udGFpbmVyIn0sZ2V0OmZ1bmN0aW9uKCl7fSxhc3RyOnQscGFydHM6cixvYmo6ZX19KGUsdCxjKTp7c2V0OnMoZSxjLHQpLGdldDppKGUsYyksYXN0cjp0LHBhcnRzOmMsb2JqOmV9fTt2YXIgbz0vKF58XC4pYXJnc1xbLztmdW5jdGlvbiBsKGUsdCl7cmV0dXJuIHZvaWQgMD09PWV8fG51bGw9PT1lJiYhdC5tYXRjaChvKX1mdW5jdGlvbiBzKGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGksbyxzPWUsZD0iIixwPVtbZSxkXV0saD1sKG4scik7Zm9yKG89MDtvPHQubGVuZ3RoLTE7bysrKXtpZigibnVtYmVyIj09dHlwZW9mKGk9dFtvXSkmJiFhKHMpKXRocm93ImFycmF5IGluZGV4IGJ1dCBjb250YWluZXIgaXMgbm90IGFuIGFycmF5IjtpZigtMT09PWkpe2lmKGg9IXUocyx0LnNsaWNlKG8rMSksbixyKSlicmVhaztyZXR1cm59aWYoIWYocyxpLHRbbysxXSxoKSlicmVhaztpZigib2JqZWN0IiE9dHlwZW9mKHM9c1tpXSl8fG51bGw9PT1zKXRocm93ImNvbnRhaW5lciBpcyBub3QgYW4gb2JqZWN0IjtkPWMoZCxpKSxwLnB1c2goW3MsZF0pfWlmKGgpe2lmKG89PT10Lmxlbmd0aC0xJiYoZGVsZXRlIHNbdFtvXV0sQXJyYXkuaXNBcnJheShzKSYmK3Rbb109PXMubGVuZ3RoLTEpKWZvcig7cy5sZW5ndGgmJnZvaWQgMD09PXNbcy5sZW5ndGgtMV07KXMucG9wKCl9ZWxzZSBzW3Rbb11dPW59fWZ1bmN0aW9uIGMoZSx0KXt2YXIgcj10O3JldHVybiBuKHQpP3I9IlsiK3QrIl0iOmUmJihyPSIuIit0KSxlK3J9ZnVuY3Rpb24gdShlLHQscixuKXt2YXIgaSxvPWEociksYz0hMCx1PXIsZD1uLnJlcGxhY2UoIi0xIiwwKSxwPSFvJiZsKHIsZCksaD10WzBdO2ZvcihpPTA7aTxlLmxlbmd0aDtpKyspZD1uLnJlcGxhY2UoIi0xIixpKSxvJiYocD1sKHU9cltpJXIubGVuZ3RoXSxkKSkscCYmKGM9ITEpLGYoZSxpLGgscCkmJnMoZVtpXSx0LG4ucmVwbGFjZSgiLTEiLGkpKSh1KTtyZXR1cm4gY31mdW5jdGlvbiBmKGUsdCxyLG4pe2lmKHZvaWQgMD09PWVbdF0pe2lmKG4pcmV0dXJuITE7ZVt0XT0ibnVtYmVyIj09dHlwZW9mIHI/W106e319cmV0dXJuITB9fSx7Ii4vYXJyYXkiOjE4OCwiZmFzdC1pc251bWVyaWMiOjExfV0sMjExOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz1mdW5jdGlvbigpe319LHt9XSwyMTI6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiZDMiKSxhPWUoImZhc3QtaXNudW1lcmljIiksaT1bXTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZigtMT09PWkuaW5kZXhPZihlKSl7aS5wdXNoKGUpO3ZhciByPTFlMzthKHQpP3I9dDoibG9uZyI9PT10JiYocj0zZTMpO3ZhciBvPW4uc2VsZWN0KCJib2R5Iikuc2VsZWN0QWxsKCIucGxvdGx5LW5vdGlmaWVyIikuZGF0YShbMF0pO28uZW50ZXIoKS5hcHBlbmQoImRpdiIpLmNsYXNzZWQoInBsb3RseS1ub3RpZmllciIsITApLG8uc2VsZWN0QWxsKCIubm90aWZpZXItbm90ZSIpLmRhdGEoaSkuZW50ZXIoKS5hcHBlbmQoImRpdiIpLmNsYXNzZWQoIm5vdGlmaWVyLW5vdGUiLCEwKS5zdHlsZSgib3BhY2l0eSIsMCkuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIGE9bi5zZWxlY3QodGhpcyk7YS5hcHBlbmQoImJ1dHRvbiIpLmNsYXNzZWQoIm5vdGlmaWVyLWNsb3NlIiwhMCkuaHRtbCgiJnRpbWVzOyIpLm9uKCJjbGljayIsKGZ1bmN0aW9uKCl7YS50cmFuc2l0aW9uKCkuY2FsbChsKX0pKTtmb3IodmFyIGk9YS5hcHBlbmQoInAiKSxvPWUuc3BsaXQoLzxiclxzKlwvPz4vZykscz0wO3M8by5sZW5ndGg7cysrKXMmJmkuYXBwZW5kKCJiciIpLGkuYXBwZW5kKCJzcGFuIikudGV4dChvW3NdKTsic3RpY2siPT09dD9hLnRyYW5zaXRpb24oKS5kdXJhdGlvbigzNTApLnN0eWxlKCJvcGFjaXR5IiwxKTphLnRyYW5zaXRpb24oKS5kdXJhdGlvbig3MDApLnN0eWxlKCJvcGFjaXR5IiwxKS50cmFuc2l0aW9uKCkuZGVsYXkocikuY2FsbChsKX0pKX1mdW5jdGlvbiBsKGUpe2UuZHVyYXRpb24oNzAwKS5zdHlsZSgib3BhY2l0eSIsMCkuZWFjaCgiZW5kIiwoZnVuY3Rpb24oZSl7dmFyIHQ9aS5pbmRleE9mKGUpOy0xIT09dCYmaS5zcGxpY2UodCwxKSxuLnNlbGVjdCh0aGlzKS5yZW1vdmUoKX0pKX19fSx7ZDM6OSwiZmFzdC1pc251bWVyaWMiOjExfV0sMjEzOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4vc2V0Y3Vyc29yIiksYT0iZGF0YS1zYXZlZGN1cnNvciI7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5hdHRyKGEpO2lmKHQpe2lmKCFyKXtmb3IodmFyIGk9KGUuYXR0cigiY2xhc3MiKXx8IiIpLnNwbGl0KCIgIiksbz0wO288aS5sZW5ndGg7bysrKXt2YXIgbD1pW29dOzA9PT1sLmluZGV4T2YoImN1cnNvci0iKSYmZS5hdHRyKGEsbC5zdWJzdHIoNykpLmNsYXNzZWQobCwhMSl9ZS5hdHRyKGEpfHxlLmF0dHIoYSwiISEiKX1uKGUsdCl9ZWxzZSByJiYoZS5hdHRyKGEsbnVsbCksIiEhIj09PXI/bihlKTpuKGUscikpfX0seyIuL3NldGN1cnNvciI6MjIyfV0sMjE0OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4vbWF0cml4IikuZG90LGE9ZSgiLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxpPXQuZXhwb3J0cz17fTtpLnRlc3Rlcj1mdW5jdGlvbihlKXt2YXIgdCxyPWUuc2xpY2UoKSxuPXJbMF1bMF0saT1uLG89clswXVsxXSxsPW87Zm9yKHIucHVzaChyWzBdKSx0PTE7dDxyLmxlbmd0aDt0Kyspbj1NYXRoLm1pbihuLHJbdF1bMF0pLGk9TWF0aC5tYXgoaSxyW3RdWzBdKSxvPU1hdGgubWluKG8sclt0XVsxXSksbD1NYXRoLm1heChsLHJbdF1bMV0pO3ZhciBzLGM9ITE7NT09PXIubGVuZ3RoJiYoclswXVswXT09PXJbMV1bMF0/clsyXVswXT09PXJbM11bMF0mJnJbMF1bMV09PT1yWzNdWzFdJiZyWzFdWzFdPT09clsyXVsxXSYmKGM9ITAscz1mdW5jdGlvbihlKXtyZXR1cm4gZVswXT09PXJbMF1bMF19KTpyWzBdWzFdPT09clsxXVsxXSYmclsyXVsxXT09PXJbM11bMV0mJnJbMF1bMF09PT1yWzNdWzBdJiZyWzFdWzBdPT09clsyXVswXSYmKGM9ITAscz1mdW5jdGlvbihlKXtyZXR1cm4gZVsxXT09PXJbMF1bMV19KSk7dmFyIHU9ITAsZj1yWzBdO2Zvcih0PTE7dDxyLmxlbmd0aDt0KyspaWYoZlswXSE9PXJbdF1bMF18fGZbMV0hPT1yW3RdWzFdKXt1PSExO2JyZWFrfXJldHVybnt4bWluOm4seG1heDppLHltaW46byx5bWF4OmwscHRzOnIsY29udGFpbnM6Yz9mdW5jdGlvbihlLHQpe3ZhciByPWVbMF0sYz1lWzFdO3JldHVybiEocj09PWF8fHI8bnx8cj5pfHxjPT09YXx8YzxvfHxjPmwpJiYoIXR8fCFzKGUpKX06ZnVuY3Rpb24oZSx0KXt2YXIgcz1lWzBdLGM9ZVsxXTtpZihzPT09YXx8czxufHxzPml8fGM9PT1hfHxjPG98fGM+bClyZXR1cm4hMTt2YXIgdSxmLGQscCxoLGc9ci5sZW5ndGgsdj1yWzBdWzBdLG09clswXVsxXSx5PTA7Zm9yKHU9MTt1PGc7dSsrKWlmKGY9dixkPW0sdj1yW3VdWzBdLG09clt1XVsxXSwhKHM8KHA9TWF0aC5taW4oZix2KSl8fHM+TWF0aC5tYXgoZix2KXx8Yz5NYXRoLm1heChkLG0pKSlpZihjPE1hdGgubWluKGQsbSkpcyE9PXAmJnkrKztlbHNle2lmKGM9PT0oaD12PT09Zj9jOmQrKHMtZikqKG0tZCkvKHYtZikpKXJldHVybiAxIT09dXx8IXQ7Yzw9aCYmcyE9PXAmJnkrK31yZXR1cm4geSUyPT0xfSxpc1JlY3Q6YyxkZWdlbmVyYXRlOnV9fSxpLmlzU2VnbWVudEJlbnQ9ZnVuY3Rpb24oZSx0LHIsYSl7dmFyIGksbyxsLHM9ZVt0XSxjPVtlW3JdWzBdLXNbMF0sZVtyXVsxXS1zWzFdXSx1PW4oYyxjKSxmPU1hdGguc3FydCh1KSxkPVstY1sxXS9mLGNbMF0vZl07Zm9yKGk9dCsxO2k8cjtpKyspaWYobz1bZVtpXVswXS1zWzBdLGVbaV1bMV0tc1sxXV0sKGw9bihvLGMpKTwwfHxsPnV8fE1hdGguYWJzKG4obyxkKSk+YSlyZXR1cm4hMDtyZXR1cm4hMX0saS5maWx0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgcj1bZVswXV0sbj0wLGE9MDtmdW5jdGlvbiBvKG8pe2UucHVzaChvKTt2YXIgbD1yLmxlbmd0aCxzPW47ci5zcGxpY2UoYSsxKTtmb3IodmFyIGM9cysxO2M8ZS5sZW5ndGg7YysrKShjPT09ZS5sZW5ndGgtMXx8aS5pc1NlZ21lbnRCZW50KGUscyxjKzEsdCkpJiYoci5wdXNoKGVbY10pLHIubGVuZ3RoPGwtMiYmKG49YyxhPXIubGVuZ3RoLTEpLHM9Yyl9ZS5sZW5ndGg+MSYmbyhlLnBvcCgpKTtyZXR1cm57YWRkUHQ6byxyYXc6ZSxmaWx0ZXJlZDpyfX19LHsiLi4vY29uc3RhbnRzL251bWVyaWNhbCI6MTgxLCIuL21hdHJpeCI6MjA4fV0sMjE1OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoImZhc3QtaXNudW1lcmljIiksYT1lKCJpcy1tb2JpbGUiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoInN0cmluZyIhPXR5cGVvZih0PWUmJmUuaGFzT3duUHJvcGVydHkoInVzZXJBZ2VudCIpP2UudXNlckFnZW50OmZ1bmN0aW9uKCl7dmFyIGU7InVuZGVmaW5lZCIhPXR5cGVvZiBuYXZpZ2F0b3ImJihlPW5hdmlnYXRvci51c2VyQWdlbnQpO2UmJmUuaGVhZGVycyYmInN0cmluZyI9PXR5cGVvZiBlLmhlYWRlcnNbInVzZXItYWdlbnQiXSYmKGU9ZS5oZWFkZXJzWyJ1c2VyLWFnZW50Il0pO3JldHVybiBlfSgpKSlyZXR1cm4hMDt2YXIgcj1hKHt1YTp7aGVhZGVyczp7InVzZXItYWdlbnQiOnR9fSx0YWJsZXQ6ITAsZmVhdHVyZURldGVjdDohMX0pO2lmKCFyKWZvcih2YXIgaT10LnNwbGl0KCIgIiksbz0xO288aS5sZW5ndGg7bysrKXtpZigtMSE9PWlbb10uaW5kZXhPZigiU2FmYXJpIikpZm9yKHZhciBsPW8tMTtsPi0xO2wtLSl7dmFyIHM9aVtsXTtpZigiVmVyc2lvbi8iPT09cy5zdWJzdHIoMCw4KSl7dmFyIGM9cy5zdWJzdHIoOCkuc3BsaXQoIi4iKVswXTtpZihuKGMpJiYoYz0rYyksYz49MTMpcmV0dXJuITB9fX1yZXR1cm4gcn19LHsiZmFzdC1pc251bWVyaWMiOjExLCJpcy1tb2JpbGUiOjQ1fV0sMjE2OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKHQgaW5zdGFuY2VvZiBSZWdFeHApe2Zvcih2YXIgcj10LnRvU3RyaW5nKCksbj0wO248ZS5sZW5ndGg7bisrKWlmKGVbbl1pbnN0YW5jZW9mIFJlZ0V4cCYmZVtuXS50b1N0cmluZygpPT09cilyZXR1cm4gZTtlLnB1c2godCl9ZWxzZSF0JiYwIT09dHx8LTEhPT1lLmluZGV4T2YodCl8fGUucHVzaCh0KTtyZXR1cm4gZX19LHt9XSwyMTc6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vbGliIiksYT1lKCIuLi9wbG90X2FwaS9wbG90X2NvbmZpZyIpLmRmbHRDb25maWc7dmFyIGk9e2FkZDpmdW5jdGlvbihlLHQscixuLGkpe3ZhciBvLGw7ZS51bmRvUXVldWU9ZS51bmRvUXVldWV8fHtpbmRleDowLHF1ZXVlOltdLHNlcXVlbmNlOiExfSxsPWUudW5kb1F1ZXVlLmluZGV4LGUuYXV0b3BsYXk/ZS51bmRvUXVldWUuaW5TZXF1ZW5jZXx8KGUuYXV0b3BsYXk9ITEpOighZS51bmRvUXVldWUuc2VxdWVuY2V8fGUudW5kb1F1ZXVlLmJlZ2luU2VxdWVuY2U/KG89e3VuZG86e2NhbGxzOltdLGFyZ3M6W119LHJlZG86e2NhbGxzOltdLGFyZ3M6W119fSxlLnVuZG9RdWV1ZS5xdWV1ZS5zcGxpY2UobCxlLnVuZG9RdWV1ZS5xdWV1ZS5sZW5ndGgtbCxvKSxlLnVuZG9RdWV1ZS5pbmRleCs9MSk6bz1lLnVuZG9RdWV1ZS5xdWV1ZVtsLTFdLGUudW5kb1F1ZXVlLmJlZ2luU2VxdWVuY2U9ITEsbyYmKG8udW5kby5jYWxscy51bnNoaWZ0KHQpLG8udW5kby5hcmdzLnVuc2hpZnQociksby5yZWRvLmNhbGxzLnB1c2gobiksby5yZWRvLmFyZ3MucHVzaChpKSksZS51bmRvUXVldWUucXVldWUubGVuZ3RoPmEucXVldWVMZW5ndGgmJihlLnVuZG9RdWV1ZS5xdWV1ZS5zaGlmdCgpLGUudW5kb1F1ZXVlLmluZGV4LS0pKX0sc3RhcnRTZXF1ZW5jZTpmdW5jdGlvbihlKXtlLnVuZG9RdWV1ZT1lLnVuZG9RdWV1ZXx8e2luZGV4OjAscXVldWU6W10sc2VxdWVuY2U6ITF9LGUudW5kb1F1ZXVlLnNlcXVlbmNlPSEwLGUudW5kb1F1ZXVlLmJlZ2luU2VxdWVuY2U9ITB9LHN0b3BTZXF1ZW5jZTpmdW5jdGlvbihlKXtlLnVuZG9RdWV1ZT1lLnVuZG9RdWV1ZXx8e2luZGV4OjAscXVldWU6W10sc2VxdWVuY2U6ITF9LGUudW5kb1F1ZXVlLnNlcXVlbmNlPSExLGUudW5kb1F1ZXVlLmJlZ2luU2VxdWVuY2U9ITF9LHVuZG86ZnVuY3Rpb24oZSl7dmFyIHQscjtpZihlLmZyYW1ld29yayYmZS5mcmFtZXdvcmsuaXNQb2xhcillLmZyYW1ld29yay51bmRvKCk7ZWxzZSBpZighKHZvaWQgMD09PWUudW5kb1F1ZXVlfHxpc05hTihlLnVuZG9RdWV1ZS5pbmRleCl8fGUudW5kb1F1ZXVlLmluZGV4PD0wKSl7Zm9yKGUudW5kb1F1ZXVlLmluZGV4LS0sdD1lLnVuZG9RdWV1ZS5xdWV1ZVtlLnVuZG9RdWV1ZS5pbmRleF0sZS51bmRvUXVldWUuaW5TZXF1ZW5jZT0hMCxyPTA7cjx0LnVuZG8uY2FsbHMubGVuZ3RoO3IrKylpLnBsb3REbyhlLHQudW5kby5jYWxsc1tyXSx0LnVuZG8uYXJnc1tyXSk7ZS51bmRvUXVldWUuaW5TZXF1ZW5jZT0hMSxlLmF1dG9wbGF5PSExfX0scmVkbzpmdW5jdGlvbihlKXt2YXIgdCxyO2lmKGUuZnJhbWV3b3JrJiZlLmZyYW1ld29yay5pc1BvbGFyKWUuZnJhbWV3b3JrLnJlZG8oKTtlbHNlIGlmKCEodm9pZCAwPT09ZS51bmRvUXVldWV8fGlzTmFOKGUudW5kb1F1ZXVlLmluZGV4KXx8ZS51bmRvUXVldWUuaW5kZXg+PWUudW5kb1F1ZXVlLnF1ZXVlLmxlbmd0aCkpe2Zvcih0PWUudW5kb1F1ZXVlLnF1ZXVlW2UudW5kb1F1ZXVlLmluZGV4XSxlLnVuZG9RdWV1ZS5pblNlcXVlbmNlPSEwLHI9MDtyPHQucmVkby5jYWxscy5sZW5ndGg7cisrKWkucGxvdERvKGUsdC5yZWRvLmNhbGxzW3JdLHQucmVkby5hcmdzW3JdKTtlLnVuZG9RdWV1ZS5pblNlcXVlbmNlPSExLGUuYXV0b3BsYXk9ITEsZS51bmRvUXVldWUuaW5kZXgrK319fTtpLnBsb3REbz1mdW5jdGlvbihlLHQscil7ZS5hdXRvcGxheT0hMCxyPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByLGE9W10saT0wO2k8dC5sZW5ndGg7aSsrKXI9dFtpXSxhW2ldPXI9PT1lP3I6Im9iamVjdCI9PXR5cGVvZiByP0FycmF5LmlzQXJyYXkocik/bi5leHRlbmREZWVwKFtdLHIpOm4uZXh0ZW5kRGVlcEFsbCh7fSxyKTpyO3JldHVybiBhfShlLHIpLHQuYXBwbHkobnVsbCxyKX0sdC5leHBvcnRzPWl9LHsiLi4vbGliIjoyMDIsIi4uL3Bsb3RfYXBpL3Bsb3RfY29uZmlnIjoyMzV9XSwyMTg6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ci5jb3VudGVyPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhPSh0fHwiIikrKHI/IiI6IiQiKSxpPSExPT09bj8iIjoiXiI7cmV0dXJuInh5Ij09PWU/bmV3IFJlZ0V4cChpKyJ4KFsyLTldfFsxLTldWzAtOV0rKT95KFsyLTldfFsxLTldWzAtOV0rKT8iK2EpOm5ldyBSZWdFeHAoaStlKyIoWzItOV18WzEtOV1bMC05XSspPyIrYSl9fSx7fV0sMjE5OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPS9eKC4qKShcLlteXC5cW1xdXSt8XFtcZFxdKSQvLGE9L15bXlwuXFtcXV0rJC87dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7Zm9yKDt0Oyl7dmFyIHI9ZS5tYXRjaChuKTtpZihyKWU9clsxXTtlbHNle2lmKCFlLm1hdGNoKGEpKXRocm93IG5ldyBFcnJvcigiYmFkIHJlbGF0aXZlQXR0ciBjYWxsOiIrW2UsdF0pO2U9IiJ9aWYoIl4iIT09dC5jaGFyQXQoMCkpYnJlYWs7dD10LnNsaWNlKDEpfXJldHVybiBlJiYiWyIhPT10LmNoYXJBdCgwKT9lKyIuIit0OmUrdH19LHt9XSwyMjA6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi9hcnJheSIpLmlzQXJyYXlPclR5cGVkQXJyYXksYT1lKCIuL2lzX3BsYWluX29iamVjdCIpO3QuZXhwb3J0cz1mdW5jdGlvbiBlKHQscil7Zm9yKHZhciBpIGluIHIpe3ZhciBvPXJbaV0sbD10W2ldO2lmKGwhPT1vKWlmKCJfIj09PWkuY2hhckF0KDApfHwiZnVuY3Rpb24iPT10eXBlb2Ygbyl7aWYoaSBpbiB0KWNvbnRpbnVlO3RbaV09b31lbHNlIGlmKG4obykmJm4obCkmJmEob1swXSkpe2lmKCJjdXN0b21kYXRhIj09PWl8fCJpZHMiPT09aSljb250aW51ZTtmb3IodmFyIHM9TWF0aC5taW4oby5sZW5ndGgsbC5sZW5ndGgpLGM9MDtjPHM7YysrKWxbY10hPT1vW2NdJiZhKG9bY10pJiZhKGxbY10pJiZlKGxbY10sb1tjXSl9ZWxzZSBhKG8pJiZhKGwpJiYoZShsLG8pLE9iamVjdC5rZXlzKGwpLmxlbmd0aHx8ZGVsZXRlIHRbaV0pfX19LHsiLi9hcnJheSI6MTg4LCIuL2lzX3BsYWluX29iamVjdCI6MjAzfV0sMjIxOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoImZhc3QtaXNudW1lcmljIiksYT1lKCIuL2xvZ2dlcnMiKSxpPWUoIi4vaWRlbnRpdHkiKSxvPWUoIi4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ZnVuY3Rpb24gbChlLHQpe3JldHVybiBlPHR9ZnVuY3Rpb24gcyhlLHQpe3JldHVybiBlPD10fWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm4gZT50fWZ1bmN0aW9uIHUoZSx0KXtyZXR1cm4gZT49dH1yLmZpbmRCaW49ZnVuY3Rpb24oZSx0LHIpe2lmKG4odC5zdGFydCkpcmV0dXJuIHI/TWF0aC5jZWlsKChlLXQuc3RhcnQpL3Quc2l6ZS0xZS05KS0xOk1hdGguZmxvb3IoKGUtdC5zdGFydCkvdC5zaXplKzFlLTkpO3ZhciBpLG8sZj0wLGQ9dC5sZW5ndGgscD0wLGg9ZD4xPyh0W2QtMV0tdFswXSkvKGQtMSk6MTtmb3Iobz1oPj0wP3I/bDpzOnI/dTpjLGUrPTFlLTkqaCoocj8tMToxKSooaD49MD8xOi0xKTtmPGQmJnArKzwxMDA7KW8odFtpPU1hdGguZmxvb3IoKGYrZCkvMildLGUpP2Y9aSsxOmQ9aTtyZXR1cm4gcD45MCYmYS5sb2coIkxvbmcgYmluYXJ5IHNlYXJjaC4uLiIpLGYtMX0sci5zb3J0ZXJBc2M9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS10fSxyLnNvcnRlckRlcz1mdW5jdGlvbihlLHQpe3JldHVybiB0LWV9LHIuZGlzdGluY3RWYWxzPWZ1bmN0aW9uKGUsdCl7dmFyIG4sYT0odHx8e30pLnVuaXRNaW5EaWZmLGk9ZS5zbGljZSgpO2ZvcihpLnNvcnQoci5zb3J0ZXJBc2MpLG49aS5sZW5ndGgtMTtuPi0xJiZpW25dPT09bztuLS0pO3ZhciBsPTE7YXx8KGw9aVtuXS1pWzBdfHwxKTtmb3IodmFyIHMsYz1sLyhufHwxKS8xZTQsdT1bXSxmPTA7Zjw9bjtmKyspe3ZhciBkPWlbZl0scD1kLXM7dm9pZCAwPT09cz8odS5wdXNoKGQpLHM9ZCk6cD5jJiYobD1NYXRoLm1pbihsLHApLHUucHVzaChkKSxzPWQpfXJldHVybnt2YWxzOnUsbWluRGlmZjpsfX0sci5yb3VuZFVwPWZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIG4sYT0wLGk9dC5sZW5ndGgtMSxvPTAsbD1yPzA6MSxzPXI/MTowLGM9cj9NYXRoLmNlaWw6TWF0aC5mbG9vcjthPGkmJm8rKzwxMDA7KXRbbj1jKChhK2kpLzIpXTw9ZT9hPW4rbDppPW4tcztyZXR1cm4gdFthXX0sci5zb3J0PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPTAsbj0wLGE9MTthPGUubGVuZ3RoO2ErKyl7dmFyIGk9dChlW2FdLGVbYS0xXSk7aWYoaTwwP3I9MTppPjAmJihuPTEpLHImJm4pcmV0dXJuIGUuc29ydCh0KX1yZXR1cm4gbj9lOmUucmV2ZXJzZSgpfSxyLmZpbmRJbmRleE9mTWluPWZ1bmN0aW9uKGUsdCl7dD10fHxpO2Zvcih2YXIgcixuPTEvMCxhPTA7YTxlLmxlbmd0aDthKyspe3ZhciBvPXQoZVthXSk7bzxuJiYobj1vLHI9YSl9cmV0dXJuIHJ9fSx7Ii4uL2NvbnN0YW50cy9udW1lcmljYWwiOjE4MSwiLi9pZGVudGl0eSI6MjAwLCIuL2xvZ2dlcnMiOjIwNiwiZmFzdC1pc251bWVyaWMiOjExfV0sMjIyOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpeyhlLmF0dHIoImNsYXNzIil8fCIiKS5zcGxpdCgiICIpLmZvckVhY2goKGZ1bmN0aW9uKHQpezA9PT10LmluZGV4T2YoImN1cnNvci0iKSYmZS5jbGFzc2VkKHQsITEpfSkpLHQmJmUuY2xhc3NlZCgiY3Vyc29yLSIrdCwhMCl9fSx7fV0sMjIzOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoImZhc3QtaXNudW1lcmljIiksYT1lKCIuL2FycmF5IikuaXNBcnJheU9yVHlwZWRBcnJheTtyLmFnZ051bXM9ZnVuY3Rpb24oZSx0LGksbyl7dmFyIGwscztpZigoIW98fG8+aS5sZW5ndGgpJiYobz1pLmxlbmd0aCksbih0KXx8KHQ9ITEpLGEoaVswXSkpe2ZvcihzPW5ldyBBcnJheShvKSxsPTA7bDxvO2wrKylzW2xdPXIuYWdnTnVtcyhlLHQsaVtsXSk7aT1zfWZvcihsPTA7bDxvO2wrKyluKHQpP24oaVtsXSkmJih0PWUoK3QsK2lbbF0pKTp0PWlbbF07cmV0dXJuIHR9LHIubGVuPWZ1bmN0aW9uKGUpe3JldHVybiByLmFnZ051bXMoKGZ1bmN0aW9uKGUpe3JldHVybiBlKzF9KSwwLGUpfSxyLm1lYW49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8KHQ9ci5sZW4oZSkpLHIuYWdnTnVtcygoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0fSksMCxlKS90fSxyLm1pZFJhbmdlPWZ1bmN0aW9uKGUpe2lmKHZvaWQgMCE9PWUmJjAhPT1lLmxlbmd0aClyZXR1cm4oci5hZ2dOdW1zKE1hdGgubWF4LG51bGwsZSkrci5hZ2dOdW1zKE1hdGgubWluLG51bGwsZSkpLzJ9LHIudmFyaWFuY2U9ZnVuY3Rpb24oZSx0LGEpe3JldHVybiB0fHwodD1yLmxlbihlKSksbihhKXx8KGE9ci5tZWFuKGUsdCkpLHIuYWdnTnVtcygoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZStNYXRoLnBvdyh0LWEsMil9KSwwLGUpL3R9LHIuc3RkZXY9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBNYXRoLnNxcnQoci52YXJpYW5jZShlLHQsbikpfSxyLm1lZGlhbj1mdW5jdGlvbihlKXt2YXIgdD1lLnNsaWNlKCkuc29ydCgpO3JldHVybiByLmludGVycCh0LC41KX0sci5pbnRlcnA9ZnVuY3Rpb24oZSx0KXtpZighbih0KSl0aHJvdyJuIHNob3VsZCBiZSBhIGZpbml0ZSBudW1iZXIiO2lmKCh0PXQqZS5sZW5ndGgtLjUpPDApcmV0dXJuIGVbMF07aWYodD5lLmxlbmd0aC0xKXJldHVybiBlW2UubGVuZ3RoLTFdO3ZhciByPXQlMTtyZXR1cm4gciplW01hdGguY2VpbCh0KV0rKDEtcikqZVtNYXRoLmZsb29yKHQpXX19LHsiLi9hcnJheSI6MTg4LCJmYXN0LWlzbnVtZXJpYyI6MTF9XSwyMjQ6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiZDMiKSxhPWUoIi4uL2xpYiIpLGk9YS5zdHJUcmFuc2xhdGUsbz1lKCIuLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLGw9ZSgiLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLkxJTkVfU1BBQ0lORztmdW5jdGlvbiBzKGUsdCl7cmV0dXJuIGUubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3RdfXZhciBjPS8oW14kXSopKFskXStbXiRdKlskXSspKFteJF0qKS87ci5jb252ZXJ0VG9Uc3BhbnM9ZnVuY3Rpb24oZSx0LEEpe3ZhciBMPWUudGV4dCgpLEM9IWUuYXR0cigiZGF0YS1ub3RleCIpJiYidW5kZWZpbmVkIiE9dHlwZW9mIE1hdGhKYXgmJkwubWF0Y2goYyksTz1uLnNlbGVjdChlLm5vZGUoKS5wYXJlbnROb2RlKTtpZighTy5lbXB0eSgpKXt2YXIgRD1lLmF0dHIoImNsYXNzIik/ZS5hdHRyKCJjbGFzcyIpLnNwbGl0KCIgIilbMF06InRleHQiO3JldHVybiBEKz0iLW1hdGgiLE8uc2VsZWN0QWxsKCJzdmcuIitEKS5yZW1vdmUoKSxPLnNlbGVjdEFsbCgiZy4iK0QrIi1ncm91cCIpLnJlbW92ZSgpLGUuc3R5bGUoImRpc3BsYXkiLG51bGwpLmF0dHIoeyJkYXRhLXVuZm9ybWF0dGVkIjpMLCJkYXRhLW1hdGgiOiJOIn0pLEM/KHQmJnQuX3Byb21pc2VzfHxbXSkucHVzaChuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCl7ZS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKTt2YXIgcj1wYXJzZUludChlLm5vZGUoKS5zdHlsZS5mb250U2l6ZSwxMCksbz17Zm9udFNpemU6cn07IWZ1bmN0aW9uKGUsdCxyKXt2YXIgaSxvLGwscztNYXRoSmF4Lkh1Yi5RdWV1ZSgoZnVuY3Rpb24oKXtyZXR1cm4gbz1hLmV4dGVuZERlZXBBbGwoe30sTWF0aEpheC5IdWIuY29uZmlnKSxsPU1hdGhKYXguSHViLnByb2Nlc3NTZWN0aW9uRGVsYXksdm9pZCAwIT09TWF0aEpheC5IdWIucHJvY2Vzc1NlY3Rpb25EZWxheSYmKE1hdGhKYXguSHViLnByb2Nlc3NTZWN0aW9uRGVsYXk9MCksTWF0aEpheC5IdWIuQ29uZmlnKHttZXNzYWdlU3R5bGU6Im5vbmUiLHRleDJqYXg6e2lubGluZU1hdGg6W1siJCIsIiQiXSxbIlxcKCIsIlxcKSJdXX0sZGlzcGxheUFsaWduOiJsZWZ0In0pfSksKGZ1bmN0aW9uKCl7aWYoIlNWRyIhPT0oaT1NYXRoSmF4Lkh1Yi5jb25maWcubWVudVNldHRpbmdzLnJlbmRlcmVyKSlyZXR1cm4gTWF0aEpheC5IdWIuc2V0UmVuZGVyZXIoIlNWRyIpfSksKGZ1bmN0aW9uKCl7dmFyIHI9Im1hdGgtb3V0cHV0LSIrYS5yYW5kc3RyKHt9LDY0KTtyZXR1cm4gcz1uLnNlbGVjdCgiYm9keSIpLmFwcGVuZCgiZGl2IikuYXR0cih7aWQ6cn0pLnN0eWxlKHt2aXNpYmlsaXR5OiJoaWRkZW4iLHBvc2l0aW9uOiJhYnNvbHV0ZSJ9KS5zdHlsZSh7ImZvbnQtc2l6ZSI6dC5mb250U2l6ZSsicHgifSkudGV4dChlLnJlcGxhY2UodSwiXFxsdCAiKS5yZXBsYWNlKGYsIlxcZ3QgIikpLE1hdGhKYXguSHViLlR5cGVzZXQocy5ub2RlKCkpfSksKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QoImJvZHkiKS5zZWxlY3QoIiNNYXRoSmF4X1NWR19nbHlwaHMiKTtpZihzLnNlbGVjdCgiLk1hdGhKYXhfU1ZHIikuZW1wdHkoKXx8IXMuc2VsZWN0KCJzdmciKS5ub2RlKCkpYS5sb2coIlRoZXJlIHdhcyBhbiBlcnJvciBpbiB0aGUgdGV4IHN5bnRheC4iLGUpLHIoKTtlbHNle3ZhciBvPXMuc2VsZWN0KCJzdmciKS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cihzLnNlbGVjdCgiLk1hdGhKYXhfU1ZHIiksdCxvKX1pZihzLnJlbW92ZSgpLCJTVkciIT09aSlyZXR1cm4gTWF0aEpheC5IdWIuc2V0UmVuZGVyZXIoaSl9KSwoZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09bCYmKE1hdGhKYXguSHViLnByb2Nlc3NTZWN0aW9uRGVsYXk9bCksTWF0aEpheC5IdWIuQ29uZmlnKG8pfSkpfShDWzJdLG8sKGZ1bmN0aW9uKG4sYSxvKXtPLnNlbGVjdEFsbCgic3ZnLiIrRCkucmVtb3ZlKCksTy5zZWxlY3RBbGwoImcuIitEKyItZ3JvdXAiKS5yZW1vdmUoKTt2YXIgbD1uJiZuLnNlbGVjdCgic3ZnIik7aWYoIWx8fCFsLm5vZGUoKSlyZXR1cm4gUCgpLHZvaWQgdCgpO3ZhciBjPU8uYXBwZW5kKCJnIikuY2xhc3NlZChEKyItZ3JvdXAiLCEwKS5hdHRyKHsicG9pbnRlci1ldmVudHMiOiJub25lIiwiZGF0YS11bmZvcm1hdHRlZCI6TCwiZGF0YS1tYXRoIjoiWSJ9KTtjLm5vZGUoKS5hcHBlbmRDaGlsZChsLm5vZGUoKSksYSYmYS5ub2RlKCkmJmwubm9kZSgpLmluc2VydEJlZm9yZShhLm5vZGUoKS5jbG9uZU5vZGUoITApLGwubm9kZSgpLmZpcnN0Q2hpbGQpLGwuYXR0cih7Y2xhc3M6RCxoZWlnaHQ6by5oZWlnaHQscHJlc2VydmVBc3BlY3RSYXRpbzoieE1pbllNaW4gbWVldCJ9KS5zdHlsZSh7b3ZlcmZsb3c6InZpc2libGUiLCJwb2ludGVyLWV2ZW50cyI6Im5vbmUifSk7dmFyIHU9ZS5ub2RlKCkuc3R5bGUuZmlsbHx8ImJsYWNrIixmPWwuc2VsZWN0KCJnIik7Zi5hdHRyKHtmaWxsOnUsc3Ryb2tlOnV9KTt2YXIgZD1zKGYsIndpZHRoIikscD1zKGYsImhlaWdodCIpLGg9K2UuYXR0cigieCIpLWQqe3N0YXJ0OjAsbWlkZGxlOi41LGVuZDoxfVtlLmF0dHIoInRleHQtYW5jaG9yIil8fCJzdGFydCJdLGc9LShyfHxzKGUsImhlaWdodCIpKS80OyJ5Ij09PURbMF0/KGMuYXR0cih7dHJhbnNmb3JtOiJyb3RhdGUoIitbLTkwLCtlLmF0dHIoIngiKSwrZS5hdHRyKCJ5IildKyIpIitpKC1kLzIsZy1wLzIpfSksbC5hdHRyKHt4OitlLmF0dHIoIngiKSx5OitlLmF0dHIoInkiKX0pKToibCI9PT1EWzBdP2wuYXR0cih7eDplLmF0dHIoIngiKSx5OmctcC8yfSk6ImEiPT09RFswXSYmMCE9PUQuaW5kZXhPZigiYXRpdGxlIik/bC5hdHRyKHt4OjAseTpnfSk6bC5hdHRyKHt4OmgseTorZS5hdHRyKCJ5IikrZy1wLzJ9KSxBJiZBLmNhbGwoZSxjKSx0KGMpfSkpfSkpKTpQKCksZX1mdW5jdGlvbiBQKCl7Ty5lbXB0eSgpfHwoRD1lLmF0dHIoImNsYXNzIikrIi1tYXRoIixPLnNlbGVjdCgic3ZnLiIrRCkucmVtb3ZlKCkpLGUudGV4dCgiIikuc3R5bGUoIndoaXRlLXNwYWNlIiwicHJlIiksZnVuY3Rpb24oZSx0KXt0PXQucmVwbGFjZSh2LCIgIik7dmFyIHIsaT0hMSxzPVtdLGM9LTE7ZnVuY3Rpb24gdSgpe2MrKzt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoby5zdmcsInRzcGFuIik7bi5zZWxlY3QodCkuYXR0cih7Y2xhc3M6ImxpbmUiLGR5OmMqbCsiZW0ifSksZS5hcHBlbmRDaGlsZCh0KSxyPXQ7dmFyIGE9cztpZihzPVt7bm9kZTp0fV0sYS5sZW5ndGg+MSlmb3IodmFyIGk9MTtpPGEubGVuZ3RoO2krKylmKGFbaV0pfWZ1bmN0aW9uIGYoZSl7dmFyIHQsYT1lLnR5cGUsaT17fTtpZigiYSI9PT1hKXt0PSJhIjt2YXIgbD1lLnRhcmdldCxjPWUuaHJlZix1PWUucG9wdXA7YyYmKGk9eyJ4bGluazp4bGluazpzaG93IjoiX2JsYW5rIj09PWx8fCJfIiE9PWwuY2hhckF0KDApPyJuZXciOiJyZXBsYWNlIix0YXJnZXQ6bCwieGxpbms6eGxpbms6aHJlZiI6Y30sdSYmKGkub25jbGljaz0nd2luZG93Lm9wZW4odGhpcy5ocmVmLmJhc2VWYWwsdGhpcy50YXJnZXQuYmFzZVZhbCwiJyt1KyciKTtyZXR1cm4gZmFsc2U7JykpfWVsc2UgdD0idHNwYW4iO2Uuc3R5bGUmJihpLnN0eWxlPWUuc3R5bGUpO3ZhciBmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhvLnN2Zyx0KTtpZigic3VwIj09PWF8fCJzdWIiPT09YSl7QShyLCJcdTIwMGIiKSxyLmFwcGVuZENoaWxkKGYpO3ZhciBkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhvLnN2ZywidHNwYW4iKTtBKGQsIlx1MjAwYiIpLG4uc2VsZWN0KGQpLmF0dHIoImR5IixoW2FdKSxpLmR5PXBbYV0sci5hcHBlbmRDaGlsZChmKSxyLmFwcGVuZENoaWxkKGQpfWVsc2Ugci5hcHBlbmRDaGlsZChmKTtuLnNlbGVjdChmKS5hdHRyKGkpLHI9ZS5ub2RlPWYscy5wdXNoKGUpfWZ1bmN0aW9uIEEoZSx0KXtlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHQpKX1mdW5jdGlvbiBMKGUpe2lmKDEhPT1zLmxlbmd0aCl7dmFyIG49cy5wb3AoKTtlIT09bi50eXBlJiZhLmxvZygiU3RhcnQgdGFnIDwiK24udHlwZSsiPiBkb2VzbnQgbWF0Y2ggZW5kIHRhZyA8IitlKyI+LiBQcmV0ZW5kaW5nIGl0IGRpZCBtYXRjaC4iLHQpLHI9c1tzLmxlbmd0aC0xXS5ub2RlfWVsc2UgYS5sb2coIklnbm9yaW5nIHVuZXhwZWN0ZWQgZW5kIHRhZyA8LyIrZSsiPi4iLHQpfXgudGVzdCh0KT91KCk6KHI9ZSxzPVt7bm9kZTplfV0pO2Zvcih2YXIgQz10LnNwbGl0KG0pLE89MDtPPEMubGVuZ3RoO08rKyl7dmFyIEQ9Q1tPXSxQPUQubWF0Y2goeSksej1QJiZQWzJdLnRvTG93ZXJDYXNlKCksUj1kW3pdO2lmKCJiciI9PT16KXUoKTtlbHNlIGlmKHZvaWQgMD09PVIpQShyLFMoRCkpO2Vsc2UgaWYoUFsxXSlMKHopO2Vsc2V7dmFyIEU9UFs0XSxJPXt0eXBlOnp9LEY9ayhFLGIpO2lmKEY/KEY9Ri5yZXBsYWNlKE0sIiQxIGZpbGw6IiksUiYmKEYrPSI7IitSKSk6UiYmKEY9UiksRiYmKEkuc3R5bGU9RiksImEiPT09eil7aT0hMDt2YXIgTj1rKEUsXyk7aWYoTil7dmFyIEg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO0guaHJlZj1OLC0xIT09Zy5pbmRleE9mKEgucHJvdG9jb2wpJiYoSS5ocmVmPWVuY29kZVVSSShkZWNvZGVVUkkoTikpLEkudGFyZ2V0PWsoRSx3KXx8Il9ibGFuayIsSS5wb3B1cD1rKEUsVCkpfX1mKEkpfX1yZXR1cm4gaX0oZS5ub2RlKCksTCkmJmUuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIiksci5wb3NpdGlvblRleHQoZSksQSYmQS5jYWxsKGUpfX07dmFyIHU9Lyg8fCZsdDt8JiM2MDspL2csZj0vKD58Jmd0O3wmIzYyOykvZzt2YXIgZD17c3VwOiJmb250LXNpemU6NzAlIixzdWI6ImZvbnQtc2l6ZTo3MCUiLGI6ImZvbnQtd2VpZ2h0OmJvbGQiLGk6ImZvbnQtc3R5bGU6aXRhbGljIixhOiJjdXJzb3I6cG9pbnRlciIsc3BhbjoiIixlbToiZm9udC1zdHlsZTppdGFsaWM7Zm9udC13ZWlnaHQ6Ym9sZCJ9LHA9e3N1YjoiMC4zZW0iLHN1cDoiLTAuNmVtIn0saD17c3ViOiItMC4yMWVtIixzdXA6IjAuNDJlbSJ9LGc9WyJodHRwOiIsImh0dHBzOiIsIm1haWx0bzoiLCIiLHZvaWQgMCwiOiJdLHY9ci5ORVdMSU5FUz0vKFxyXG4/fFxuKS9nLG09Lyg8W148Pl0qPikvLHk9LzwoXC8/KShbXiA+XSopKFxzKyguKikpPz4vaSx4PS88YnIoXHMrLiopPz4vaTtyLkJSX1RBR19BTEw9LzxicihccysuKik/Pi9naTt2YXIgYj0vKF58W1xzIiddKXN0eWxlXHMqPVxzKigiKFteIl0qKTs/InwnKFteJ10qKTs/JykvaSxfPS8oXnxbXHMiJ10paHJlZlxzKj1ccyooIihbXiJdKikifCcoW14nXSopJykvaSx3PS8oXnxbXHMiJ10pdGFyZ2V0XHMqPVxzKigiKFteIlxzXSopInwnKFteJ1xzXSopJykvaSxUPS8oXnxbXHMiJ10pcG9wdXBccyo9XHMqKCIoW1x3PSxdKikifCcoW1x3PSxdKiknKS9pO2Z1bmN0aW9uIGsoZSx0KXtpZighZSlyZXR1cm4gbnVsbDt2YXIgcj1lLm1hdGNoKHQpLG49ciYmKHJbM118fHJbNF0pO3JldHVybiBuJiZTKG4pfXZhciBNPS8oXnw7KVxzKmNvbG9yOi87ci5wbGFpblRleHQ9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9dm9pZCAwIT09KHQ9dHx8e30pLmxlbiYmLTEhPT10Lmxlbj90LmxlbjoxLzAsbj12b2lkIDAhPT10LmFsbG93ZWRUYWdzP3QuYWxsb3dlZFRhZ3M6WyJiciJdLGE9Ii4uLiIubGVuZ3RoLGk9ZS5zcGxpdChtKSxvPVtdLGw9IiIscz0wLGM9MDtjPGkubGVuZ3RoO2MrKyl7dmFyIHU9aVtjXSxmPXUubWF0Y2goeSksZD1mJiZmWzJdLnRvTG93ZXJDYXNlKCk7aWYoZCktMSE9PW4uaW5kZXhPZihkKSYmKG8ucHVzaCh1KSxsPWQpO2Vsc2V7dmFyIHA9dS5sZW5ndGg7aWYocytwPHIpby5wdXNoKHUpLHMrPXA7ZWxzZSBpZihzPHIpe3ZhciBoPXItcztsJiYoImJyIiE9PWx8fGg8PWF8fHA8PWEpJiZvLnBvcCgpLHI+YT9vLnB1c2godS5zdWJzdHIoMCxoLWEpKyIuLi4iKTpvLnB1c2godS5zdWJzdHIoMCxoKSk7YnJlYWt9bD0iIn19cmV0dXJuIG8uam9pbigiIil9O3ZhciBBPXttdToiXHUwM2JjIixhbXA6IiYiLGx0OiI8IixndDoiPiIsbmJzcDoiXHhhMCIsdGltZXM6Ilx4ZDciLHBsdXNtbjoiXHhiMSIsZGVnOiJceGIwIn0sTD0vJigjXGQrfCN4W1xkYS1mQS1GXSt8W2Etel0rKTsvZztmdW5jdGlvbiBTKGUpe3JldHVybiBlLnJlcGxhY2UoTCwoZnVuY3Rpb24oZSx0KXtyZXR1cm4oIiMiPT09dC5jaGFyQXQoMCk/ZnVuY3Rpb24oZSl7aWYoZT4xMTE0MTExKXJldHVybjt2YXIgdD1TdHJpbmcuZnJvbUNvZGVQb2ludDtpZih0KXJldHVybiB0KGUpO3ZhciByPVN0cmluZy5mcm9tQ2hhckNvZGU7cmV0dXJuIGU8PTY1NTM1P3IoZSk6cig1NTIzMisoZT4+MTApLGUlMTAyNCs1NjMyMCl9KCJ4Ij09PXQuY2hhckF0KDEpP3BhcnNlSW50KHQuc3Vic3RyKDIpLDE2KTpwYXJzZUludCh0LnN1YnN0cigxKSwxMCkpOkFbdF0pfHxlfSkpfWZ1bmN0aW9uIEMoZSx0LHIpe3ZhciBuLGksbyxsPXIuaG9yaXpvbnRhbEFsaWduLHM9ci52ZXJ0aWNhbEFsaWdufHwidG9wIixjPWUubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHU9dC5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIGk9ImJvdHRvbSI9PT1zP2Z1bmN0aW9uKCl7cmV0dXJuIGMuYm90dG9tLW4uaGVpZ2h0fToibWlkZGxlIj09PXM/ZnVuY3Rpb24oKXtyZXR1cm4gYy50b3ArKGMuaGVpZ2h0LW4uaGVpZ2h0KS8yfTpmdW5jdGlvbigpe3JldHVybiBjLnRvcH0sbz0icmlnaHQiPT09bD9mdW5jdGlvbigpe3JldHVybiBjLnJpZ2h0LW4ud2lkdGh9OiJjZW50ZXIiPT09bD9mdW5jdGlvbigpe3JldHVybiBjLmxlZnQrKGMud2lkdGgtbi53aWR0aCkvMn06ZnVuY3Rpb24oKXtyZXR1cm4gYy5sZWZ0fSxmdW5jdGlvbigpe249dGhpcy5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dmFyIGU9bygpLXUubGVmdCx0PWkoKS11LnRvcCxsPXIuZ2R8fHt9O2lmKHIuZ2Qpe2wuX2Z1bGxMYXlvdXQuX2NhbGNJbnZlcnNlVHJhbnNmb3JtKGwpO3ZhciBzPWEuYXBwbHkzRFRyYW5zZm9ybShsLl9mdWxsTGF5b3V0Ll9pbnZUcmFuc2Zvcm0pKGUsdCk7ZT1zWzBdLHQ9c1sxXX1yZXR1cm4gdGhpcy5zdHlsZSh7dG9wOnQrInB4IixsZWZ0OmUrInB4Iiwiei1pbmRleCI6MWUzfSksdGhpc319ci5jb252ZXJ0RW50aXRpZXM9UyxyLnNhbml0aXplSFRNTD1mdW5jdGlvbihlKXtlPWUucmVwbGFjZSh2LCIgIik7Zm9yKHZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKSxyPXQsYT1bXSxpPWUuc3BsaXQobSksbz0wO288aS5sZW5ndGg7bysrKXt2YXIgbD1pW29dLHM9bC5tYXRjaCh5KSxjPXMmJnNbMl0udG9Mb3dlckNhc2UoKTtpZihjIGluIGQpaWYoc1sxXSlhLmxlbmd0aCYmKHI9YS5wb3AoKSk7ZWxzZXt2YXIgdT1zWzRdLGY9ayh1LGIpLHA9Zj97c3R5bGU6Zn06e307aWYoImEiPT09Yyl7dmFyIGg9ayh1LF8pO2lmKGgpe3ZhciB4PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtpZih4LmhyZWY9aCwtMSE9PWcuaW5kZXhPZih4LnByb3RvY29sKSl7cC5ocmVmPWVuY29kZVVSSShkZWNvZGVVUkkoaCkpO3ZhciBUPWsodSx3KTtUJiYocC50YXJnZXQ9VCl9fX12YXIgTT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGMpO3IuYXBwZW5kQ2hpbGQoTSksbi5zZWxlY3QoTSkuYXR0cihwKSxyPU0sYS5wdXNoKE0pfWVsc2Ugci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShTKGwpKSl9cmV0dXJuIHQuaW5uZXJIVE1MfSxyLmxpbmVDb3VudD1mdW5jdGlvbihlKXtyZXR1cm4gZS5zZWxlY3RBbGwoInRzcGFuLmxpbmUiKS5zaXplKCl8fDF9LHIucG9zaXRpb25UZXh0PWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZS5lYWNoKChmdW5jdGlvbigpe3ZhciBlPW4uc2VsZWN0KHRoaXMpO2Z1bmN0aW9uIGEodCxyKXtyZXR1cm4gdm9pZCAwPT09cj9udWxsPT09KHI9ZS5hdHRyKHQpKSYmKGUuYXR0cih0LDApLHI9MCk6ZS5hdHRyKHQscikscn12YXIgaT1hKCJ4Iix0KSxvPWEoInkiLHIpOyJ0ZXh0Ij09PXRoaXMubm9kZU5hbWUmJmUuc2VsZWN0QWxsKCJ0c3Bhbi5saW5lIikuYXR0cih7eDppLHk6b30pfSkpfSxyLm1ha2VFZGl0YWJsZT1mdW5jdGlvbihlLHQpe3ZhciByPXQuZ2QsYT10LmRlbGVnYXRlLGk9bi5kaXNwYXRjaCgiZWRpdCIsImlucHV0IiwiY2FuY2VsIiksbz1hfHxlO2lmKGUuc3R5bGUoeyJwb2ludGVyLWV2ZW50cyI6YT8ibm9uZSI6ImFsbCJ9KSwxIT09ZS5zaXplKCkpdGhyb3cgbmV3IEVycm9yKCJib28iKTtmdW5jdGlvbiBsKCl7IWZ1bmN0aW9uKCl7dmFyIGE9bi5zZWxlY3Qocikuc2VsZWN0KCIuc3ZnLWNvbnRhaW5lciIpLG89YS5hcHBlbmQoImRpdiIpLGw9ZS5ub2RlKCkuc3R5bGUsYz1wYXJzZUZsb2F0KGwuZm9udFNpemV8fDEyKSx1PXQudGV4dDt2b2lkIDA9PT11JiYodT1lLmF0dHIoImRhdGEtdW5mb3JtYXR0ZWQiKSk7by5jbGFzc2VkKCJwbHVnaW4tZWRpdGFibGUgZWRpdGFibGUiLCEwKS5zdHlsZSh7cG9zaXRpb246ImFic29sdXRlIiwiZm9udC1mYW1pbHkiOmwuZm9udEZhbWlseXx8IkFyaWFsIiwiZm9udC1zaXplIjpjLGNvbG9yOnQuZmlsbHx8bC5maWxsfHwiYmxhY2siLG9wYWNpdHk6MSwiYmFja2dyb3VuZC1jb2xvciI6dC5iYWNrZ3JvdW5kfHwidHJhbnNwYXJlbnQiLG91dGxpbmU6IiNmZmZmZmYzMyAxcHggc29saWQiLG1hcmdpbjpbLWMvOCsxLDAsMCwtMV0uam9pbigicHggIikrInB4IixwYWRkaW5nOiIwIiwiYm94LXNpemluZyI6ImJvcmRlci1ib3gifSkuYXR0cih7Y29udGVudGVkaXRhYmxlOiEwfSkudGV4dCh1KS5jYWxsKEMoZSxhLHQpKS5vbigiYmx1ciIsKGZ1bmN0aW9uKCl7ci5fZWRpdGluZz0hMSxlLnRleHQodGhpcy50ZXh0Q29udGVudCkuc3R5bGUoe29wYWNpdHk6MX0pO3ZhciB0LGE9bi5zZWxlY3QodGhpcykuYXR0cigiY2xhc3MiKTsodD1hPyIuIithLnNwbGl0KCIgIilbMF0rIi1tYXRoLWdyb3VwIjoiW2NsYXNzKj0tbWF0aC1ncm91cF0iKSYmbi5zZWxlY3QoZS5ub2RlKCkucGFyZW50Tm9kZSkuc2VsZWN0KHQpLnN0eWxlKHtvcGFjaXR5OjB9KTt2YXIgbz10aGlzLnRleHRDb250ZW50O24uc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigwKS5yZW1vdmUoKSxuLnNlbGVjdChkb2N1bWVudCkub24oIm1vdXNldXAiLG51bGwpLGkuZWRpdC5jYWxsKGUsbyl9KSkub24oImZvY3VzIiwoZnVuY3Rpb24oKXt2YXIgZT10aGlzO3IuX2VkaXRpbmc9ITAsbi5zZWxlY3QoZG9jdW1lbnQpLm9uKCJtb3VzZXVwIiwoZnVuY3Rpb24oKXtpZihuLmV2ZW50LnRhcmdldD09PWUpcmV0dXJuITE7ZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PW8ubm9kZSgpJiZvLm5vZGUoKS5ibHVyKCl9KSl9KSkub24oImtleXVwIiwoZnVuY3Rpb24oKXsyNz09PW4uZXZlbnQud2hpY2g/KHIuX2VkaXRpbmc9ITEsZS5zdHlsZSh7b3BhY2l0eToxfSksbi5zZWxlY3QodGhpcykuc3R5bGUoe29wYWNpdHk6MH0pLm9uKCJibHVyIiwoZnVuY3Rpb24oKXtyZXR1cm4hMX0pKS50cmFuc2l0aW9uKCkucmVtb3ZlKCksaS5jYW5jZWwuY2FsbChlLHRoaXMudGV4dENvbnRlbnQpKTooaS5pbnB1dC5jYWxsKGUsdGhpcy50ZXh0Q29udGVudCksbi5zZWxlY3QodGhpcykuY2FsbChDKGUsYSx0KSkpfSkpLm9uKCJrZXlkb3duIiwoZnVuY3Rpb24oKXsxMz09PW4uZXZlbnQud2hpY2gmJnRoaXMuYmx1cigpfSkpLmNhbGwocyl9KCksZS5zdHlsZSh7b3BhY2l0eTowfSk7dmFyIGEsbD1vLmF0dHIoImNsYXNzIik7KGE9bD8iLiIrbC5zcGxpdCgiICIpWzBdKyItbWF0aC1ncm91cCI6IltjbGFzcyo9LW1hdGgtZ3JvdXBdIikmJm4uc2VsZWN0KGUubm9kZSgpLnBhcmVudE5vZGUpLnNlbGVjdChhKS5zdHlsZSh7b3BhY2l0eTowfSl9ZnVuY3Rpb24gcyhlKXt2YXIgdD1lLm5vZGUoKSxyPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7ci5zZWxlY3ROb2RlQ29udGVudHModCk7dmFyIG49d2luZG93LmdldFNlbGVjdGlvbigpO24ucmVtb3ZlQWxsUmFuZ2VzKCksbi5hZGRSYW5nZShyKSx0LmZvY3VzKCl9cmV0dXJuIHQuaW1tZWRpYXRlP2woKTpvLm9uKCJjbGljayIsbCksbi5yZWJpbmQoZSxpLCJvbiIpfX0seyIuLi9jb25zdGFudHMvYWxpZ25tZW50IjoxNzcsIi4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjoxODIsIi4uL2xpYiI6MjAyLGQzOjl9XSwyMjU6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49e307ZnVuY3Rpb24gYShlKXtlJiZudWxsIT09ZS50aW1lciYmKGNsZWFyVGltZW91dChlLnRpbWVyKSxlLnRpbWVyPW51bGwpfXIudGhyb3R0bGU9ZnVuY3Rpb24oZSx0LHIpe3ZhciBpPW5bZV0sbz1EYXRlLm5vdygpO2lmKCFpKXtmb3IodmFyIGwgaW4gbiluW2xdLnRzPG8tNmU0JiZkZWxldGUgbltsXTtpPW5bZV09e3RzOjAsdGltZXI6bnVsbH19ZnVuY3Rpb24gcygpe3IoKSxpLnRzPURhdGUubm93KCksaS5vbkRvbmUmJihpLm9uRG9uZSgpLGkub25Eb25lPW51bGwpfWEoaSksbz5pLnRzK3Q/cygpOmkudGltZXI9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtzKCksaS50aW1lcj1udWxsfSksdCl9LHIuZG9uZT1mdW5jdGlvbihlKXt2YXIgdD1uW2VdO3JldHVybiB0JiZ0LnRpbWVyP25ldyBQcm9taXNlKChmdW5jdGlvbihlKXt2YXIgcj10Lm9uRG9uZTt0Lm9uRG9uZT1mdW5jdGlvbigpe3ImJnIoKSxlKCksdC5vbkRvbmU9bnVsbH19KSk6UHJvbWlzZS5yZXNvbHZlKCl9LHIuY2xlYXI9ZnVuY3Rpb24oZSl7aWYoZSlhKG5bZV0pLGRlbGV0ZSBuW2VdO2Vsc2UgZm9yKHZhciB0IGluIG4pci5jbGVhcih0KX19LHt9XSwyMjY6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiZmFzdC1pc251bWVyaWMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZihlPjApcmV0dXJuIE1hdGgubG9nKGUpL01hdGguTE4xMDt2YXIgcj1NYXRoLmxvZyhNYXRoLm1pbih0WzBdLHRbMV0pKS9NYXRoLkxOMTA7cmV0dXJuIG4ocil8fChyPU1hdGgubG9nKE1hdGgubWF4KHRbMF0sdFsxXSkpL01hdGguTE4xMC02KSxyfX0seyJmYXN0LWlzbnVtZXJpYyI6MTF9XSwyMjc6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPXttb2R1bGVUeXBlOiJsb2NhbGUiLG5hbWU6ImVuLVVTIixkaWN0aW9uYXJ5OnsiQ2xpY2sgdG8gZW50ZXIgQ29sb3JzY2FsZSB0aXRsZSI6IkNsaWNrIHRvIGVudGVyIENvbG9yc2NhbGUgdGl0bGUifSxmb3JtYXQ6e2RhdGU6IiVtLyVkLyVZIn19fSx7fV0sMjI4OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz17bW9kdWxlVHlwZToibG9jYWxlIixuYW1lOiJlbiIsZGljdGlvbmFyeTp7IkNsaWNrIHRvIGVudGVyIENvbG9yc2NhbGUgdGl0bGUiOiJDbGljayB0byBlbnRlciBDb2xvdXJzY2FsZSB0aXRsZSJ9LGZvcm1hdDp7ZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnREYXlzOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydE1vbnRoczpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLHBlcmlvZHM6WyJBTSIsIlBNIl0sZGF0ZVRpbWU6IiVhICViICVlICVYICVZIixkYXRlOiIlZC8lbS8lWSIsdGltZToiJUg6JU06JVMiLGRlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdLHllYXI6IiVZIixtb250aDoiJWIgJVkiLGRheU1vbnRoOiIlYiAlLWQiLGRheU1vbnRoWWVhcjoiJWIgJS1kLCAlWSJ9fX0se31dLDIyOTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi9yZWdpc3RyeSIpO3QuZXhwb3J0cz1mdW5jdGlvbihlKXtmb3IodmFyIHQscixhPW4ubGF5b3V0QXJyYXlDb250YWluZXJzLGk9bi5sYXlvdXRBcnJheVJlZ2V4ZXMsbz1lLnNwbGl0KCJbIilbMF0sbD0wO2w8aS5sZW5ndGg7bCsrKWlmKChyPWUubWF0Y2goaVtsXSkpJiYwPT09ci5pbmRleCl7dD1yWzBdO2JyZWFrfWlmKHR8fCh0PWFbYS5pbmRleE9mKG8pXSksIXQpcmV0dXJuITE7dmFyIHM9ZS5zdWJzdHIodC5sZW5ndGgpO3JldHVybiBzPyEhKHI9cy5tYXRjaCgvXlxbKDB8WzEtOV1bMC05XSopXF0oXC4oLispKT8kLykpJiZ7YXJyYXk6dCxpbmRleDpOdW1iZXIoclsxXSkscHJvcGVydHk6clszXXx8IiJ9OnthcnJheTp0LGluZGV4OiIiLHByb3BlcnR5OiIifX19LHsiLi4vcmVnaXN0cnkiOjI5MH1dLDIzMDpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi9saWIiKSxhPW4uZXh0ZW5kRmxhdCxpPW4uaXNQbGFpbk9iamVjdCxvPXt2YWxUeXBlOiJmbGFnbGlzdCIsZXh0cmFzOlsibm9uZSJdLGZsYWdzOlsiY2FsYyIsImNsZWFyQXhpc1R5cGVzIiwicGxvdCIsInN0eWxlIiwibWFya2VyU2l6ZSIsImNvbG9yYmFycyJdfSxsPXt2YWxUeXBlOiJmbGFnbGlzdCIsZXh0cmFzOlsibm9uZSJdLGZsYWdzOlsiY2FsYyIsInBsb3QiLCJsZWdlbmQiLCJ0aWNrcyIsImF4cmFuZ2UiLCJsYXlvdXRzdHlsZSIsIm1vZGViYXIiLCJjYW1lcmEiLCJhcnJheWRyYXciLCJjb2xvcmJhcnMiXX0scz1vLmZsYWdzLnNsaWNlKCkuY29uY2F0KFsiZnVsbFJlcGxvdCJdKSxjPWwuZmxhZ3Muc2xpY2UoKS5jb25jYXQoImxheW91dFJlcGxvdCIpO2Z1bmN0aW9uIHUoZSl7Zm9yKHZhciB0PXt9LHI9MDtyPGUubGVuZ3RoO3IrKyl0W2Vbcl1dPSExO3JldHVybiB0fWZ1bmN0aW9uIGYoZSx0LHIpe3ZhciBuPWEoe30sZSk7Zm9yKHZhciBvIGluIG4pe3ZhciBsPW5bb107aShsKSYmKG5bb109ZChsLHQscixvKSl9cmV0dXJuImZyb20tcm9vdCI9PT1yJiYobi5lZGl0VHlwZT10KSxufWZ1bmN0aW9uIGQoZSx0LHIsbil7aWYoZS52YWxUeXBlKXt2YXIgaT1hKHt9LGUpO2lmKGkuZWRpdFR5cGU9dCxBcnJheS5pc0FycmF5KGUuaXRlbXMpKXtpLml0ZW1zPW5ldyBBcnJheShlLml0ZW1zLmxlbmd0aCk7Zm9yKHZhciBvPTA7bzxlLml0ZW1zLmxlbmd0aDtvKyspaS5pdGVtc1tvXT1kKGUuaXRlbXNbb10sdCwiZnJvbS1yb290Iil9cmV0dXJuIGl9cmV0dXJuIGYoZSx0LCJfIj09PW4uY2hhckF0KDApPyJuZXN0ZWQiOiJmcm9tLXJvb3QiKX10LmV4cG9ydHM9e3RyYWNlczpvLGxheW91dDpsLHRyYWNlRmxhZ3M6ZnVuY3Rpb24oKXtyZXR1cm4gdShzKX0sbGF5b3V0RmxhZ3M6ZnVuY3Rpb24oKXtyZXR1cm4gdShjKX0sdXBkYXRlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dC5lZGl0VHlwZTtpZihyJiYibm9uZSIhPT1yKWZvcih2YXIgbj1yLnNwbGl0KCIrIiksYT0wO2E8bi5sZW5ndGg7YSsrKWVbblthXV09ITB9LG92ZXJyaWRlQWxsOmZ9fSx7Ii4uL2xpYiI6MjAyfV0sMjMxOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoImZhc3QtaXNudW1lcmljIiksYT1lKCJnbC1tYXQ0L2Zyb21RdWF0IiksaT1lKCIuLi9yZWdpc3RyeSIpLG89ZSgiLi4vbGliIiksbD1lKCIuLi9wbG90cy9wbG90cyIpLHM9ZSgiLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIiksYz1lKCIuLi9jb21wb25lbnRzL2NvbG9yIiksdT1zLmNsZWFuSWQsZj1zLmdldEZyb21UcmFjZSxkPWkudHJhY2VJcztmdW5jdGlvbiBwKGUsdCl7dmFyIHI9ZVt0XSxuPXQuY2hhckF0KDApO3ImJiJwYXBlciIhPT1yJiYoZVt0XT11KHIsbiwhMCkpfWZ1bmN0aW9uIGgoZSl7ZnVuY3Rpb24gdCh0LHIpe3ZhciBuPWVbdF0sYT1lLnRpdGxlJiZlLnRpdGxlW3JdO24mJiFhJiYoZS50aXRsZXx8KGUudGl0bGU9e30pLGUudGl0bGVbcl09ZVt0XSxkZWxldGUgZVt0XSl9ZSYmKCJzdHJpbmciIT10eXBlb2YgZS50aXRsZSYmIm51bWJlciIhPXR5cGVvZiBlLnRpdGxlfHwoZS50aXRsZT17dGV4dDplLnRpdGxlfSksdCgidGl0bGVmb250IiwiZm9udCIpLHQoInRpdGxlcG9zaXRpb24iLCJwb3NpdGlvbiIpLHQoInRpdGxlc2lkZSIsInNpZGUiKSx0KCJ0aXRsZW9mZnNldCIsIm9mZnNldCIpKX1mdW5jdGlvbiBnKGUpe2lmKCFvLmlzUGxhaW5PYmplY3QoZSkpcmV0dXJuITE7dmFyIHQ9ZS5uYW1lO3JldHVybiBkZWxldGUgZS5uYW1lLGRlbGV0ZSBlLnNob3dsZWdlbmQsKCJzdHJpbmciPT10eXBlb2YgdHx8Im51bWJlciI9PXR5cGVvZiB0KSYmU3RyaW5nKHQpfWZ1bmN0aW9uIHYoZSx0LHIsbil7aWYociYmIW4pcmV0dXJuIGU7aWYobiYmIXIpcmV0dXJuIHQ7aWYoIWUudHJpbSgpKXJldHVybiB0O2lmKCF0LnRyaW0oKSlyZXR1cm4gZTt2YXIgYSxpPU1hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoKTtmb3IoYT0wO2E8aSYmZS5jaGFyQXQoYSk9PT10LmNoYXJBdChhKTthKyspO3JldHVybiBlLnN1YnN0cigwLGEpLnRyaW0oKX1mdW5jdGlvbiBtKGUpe3ZhciB0PSJtaWRkbGUiLHI9ImNlbnRlciI7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlJiYoLTEhPT1lLmluZGV4T2YoInRvcCIpP3Q9InRvcCI6LTEhPT1lLmluZGV4T2YoImJvdHRvbSIpJiYodD0iYm90dG9tIiksLTEhPT1lLmluZGV4T2YoImxlZnQiKT9yPSJsZWZ0IjotMSE9PWUuaW5kZXhPZigicmlnaHQiKSYmKHI9InJpZ2h0IikpLHQrIiAiK3J9ZnVuY3Rpb24geShlLHQpe3JldHVybiB0IGluIGUmJiJvYmplY3QiPT10eXBlb2YgZVt0XSYmMD09PU9iamVjdC5rZXlzKGVbdF0pLmxlbmd0aH1yLmNsZWFyUHJvbWlzZVF1ZXVlPWZ1bmN0aW9uKGUpe0FycmF5LmlzQXJyYXkoZS5fcHJvbWlzZXMpJiZlLl9wcm9taXNlcy5sZW5ndGg+MCYmby5sb2coIkNsZWFyaW5nIHByZXZpb3VzIHJlamVjdGVkIHByb21pc2VzIGZyb20gcXVldWUuIiksZS5fcHJvbWlzZXM9W119LHIuY2xlYW5MYXlvdXQ9ZnVuY3Rpb24oZSl7dmFyIHQsbjtlfHwoZT17fSksZS54YXhpczEmJihlLnhheGlzfHwoZS54YXhpcz1lLnhheGlzMSksZGVsZXRlIGUueGF4aXMxKSxlLnlheGlzMSYmKGUueWF4aXN8fChlLnlheGlzPWUueWF4aXMxKSxkZWxldGUgZS55YXhpczEpLGUuc2NlbmUxJiYoZS5zY2VuZXx8KGUuc2NlbmU9ZS5zY2VuZTEpLGRlbGV0ZSBlLnNjZW5lMSk7dmFyIGk9KGwuc3VicGxvdHNSZWdpc3RyeS5jYXJ0ZXNpYW58fHt9KS5hdHRyUmVnZXgscz0obC5zdWJwbG90c1JlZ2lzdHJ5LnBvbGFyfHx7fSkuYXR0clJlZ2V4LGY9KGwuc3VicGxvdHNSZWdpc3RyeS50ZXJuYXJ5fHx7fSkuYXR0clJlZ2V4LGQ9KGwuc3VicGxvdHNSZWdpc3RyeS5nbDNkfHx7fSkuYXR0clJlZ2V4LGc9T2JqZWN0LmtleXMoZSk7Zm9yKHQ9MDt0PGcubGVuZ3RoO3QrKyl7dmFyIHY9Z1t0XTtpZihpJiZpLnRlc3Qodikpe3ZhciBtPWVbdl07bS5hbmNob3ImJiJmcmVlIiE9PW0uYW5jaG9yJiYobS5hbmNob3I9dShtLmFuY2hvcikpLG0ub3ZlcmxheWluZyYmKG0ub3ZlcmxheWluZz11KG0ub3ZlcmxheWluZykpLG0udHlwZXx8KG0uaXNkYXRlP20udHlwZT0iZGF0ZSI6bS5pc2xvZz9tLnR5cGU9ImxvZyI6ITE9PT1tLmlzZGF0ZSYmITE9PT1tLmlzbG9nJiYobS50eXBlPSJsaW5lYXIiKSksIndpdGh6ZXJvIiE9PW0uYXV0b3JhbmdlJiYidG96ZXJvIiE9PW0uYXV0b3JhbmdlfHwobS5hdXRvcmFuZ2U9ITAsbS5yYW5nZW1vZGU9InRvemVybyIpLGRlbGV0ZSBtLmlzbG9nLGRlbGV0ZSBtLmlzZGF0ZSxkZWxldGUgbS5jYXRlZ29yaWVzLHkobSwiZG9tYWluIikmJmRlbGV0ZSBtLmRvbWFpbix2b2lkIDAhPT1tLmF1dG90aWNrJiYodm9pZCAwPT09bS50aWNrbW9kZSYmKG0udGlja21vZGU9bS5hdXRvdGljaz8iYXV0byI6ImxpbmVhciIpLGRlbGV0ZSBtLmF1dG90aWNrKSxoKG0pfWVsc2UgaWYocyYmcy50ZXN0KHYpKXtoKGVbdl0ucmFkaWFsYXhpcyl9ZWxzZSBpZihmJiZmLnRlc3Qodikpe3ZhciB4PWVbdl07aCh4LmFheGlzKSxoKHguYmF4aXMpLGgoeC5jYXhpcyl9ZWxzZSBpZihkJiZkLnRlc3Qodikpe3ZhciBiPWVbdl0sXz1iLmNhbWVyYXBvc2l0aW9uO2lmKEFycmF5LmlzQXJyYXkoXykmJjQ9PT1fWzBdLmxlbmd0aCl7dmFyIHc9X1swXSxUPV9bMV0saz1fWzJdLE09YShbXSx3KSxBPVtdO2ZvcihuPTA7bjwzOysrbilBW25dPVRbbl0raypNWzIrNCpuXTtiLmNhbWVyYT17ZXllOnt4OkFbMF0seTpBWzFdLHo6QVsyXX0sY2VudGVyOnt4OlRbMF0seTpUWzFdLHo6VFsyXX0sdXA6e3g6MCx5OjAsejoxfX0sZGVsZXRlIGIuY2FtZXJhcG9zaXRpb259aChiLnhheGlzKSxoKGIueWF4aXMpLGgoYi56YXhpcyl9fXZhciBMPUFycmF5LmlzQXJyYXkoZS5hbm5vdGF0aW9ucyk/ZS5hbm5vdGF0aW9ucy5sZW5ndGg6MDtmb3IodD0wO3Q8TDt0Kyspe3ZhciBTPWUuYW5ub3RhdGlvbnNbdF07by5pc1BsYWluT2JqZWN0KFMpJiYoUy5yZWYmJigicGFwZXIiPT09Uy5yZWY/KFMueHJlZj0icGFwZXIiLFMueXJlZj0icGFwZXIiKToiZGF0YSI9PT1TLnJlZiYmKFMueHJlZj0ieCIsUy55cmVmPSJ5IiksZGVsZXRlIFMucmVmKSxwKFMsInhyZWYiKSxwKFMsInlyZWYiKSl9dmFyIEM9QXJyYXkuaXNBcnJheShlLnNoYXBlcyk/ZS5zaGFwZXMubGVuZ3RoOjA7Zm9yKHQ9MDt0PEM7dCsrKXt2YXIgTz1lLnNoYXBlc1t0XTtvLmlzUGxhaW5PYmplY3QoTykmJihwKE8sInhyZWYiKSxwKE8sInlyZWYiKSl9dmFyIEQ9QXJyYXkuaXNBcnJheShlLmltYWdlcyk/ZS5pbWFnZXMubGVuZ3RoOjA7Zm9yKHQ9MDt0PEQ7dCsrKXt2YXIgUD1lLmltYWdlc1t0XTtvLmlzUGxhaW5PYmplY3QoUCkmJihwKFAsInhyZWYiKSxwKFAsInlyZWYiKSl9dmFyIHo9ZS5sZWdlbmQ7cmV0dXJuIHomJih6Lng+Mz8oei54PTEuMDIsei54YW5jaG9yPSJsZWZ0Iik6ei54PC0yJiYoei54PS0uMDIsei54YW5jaG9yPSJyaWdodCIpLHoueT4zPyh6Lnk9MS4wMix6LnlhbmNob3I9ImJvdHRvbSIpOnoueTwtMiYmKHoueT0tLjAyLHoueWFuY2hvcj0idG9wIikpLGgoZSksInJvdGF0ZSI9PT1lLmRyYWdtb2RlJiYoZS5kcmFnbW9kZT0ib3JiaXQiKSxjLmNsZWFuKGUpLGUudGVtcGxhdGUmJmUudGVtcGxhdGUubGF5b3V0JiZyLmNsZWFuTGF5b3V0KGUudGVtcGxhdGUubGF5b3V0KSxlfSxyLmNsZWFuRGF0YT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyl7dmFyIG4sYT1lW3RdO2lmKCJoaXN0b2dyYW15Ij09PWEudHlwZSYmInhiaW5zImluIGEmJiEoInliaW5zImluIGEpJiYoYS55Ymlucz1hLnhiaW5zLGRlbGV0ZSBhLnhiaW5zKSxhLmVycm9yX3kmJiJvcGFjaXR5ImluIGEuZXJyb3JfeSl7dmFyIHM9Yy5kZWZhdWx0cyxmPWEuZXJyb3JfeS5jb2xvcnx8KGQoYSwiYmFyIik/Yy5kZWZhdWx0TGluZTpzW3Qlcy5sZW5ndGhdKTthLmVycm9yX3kuY29sb3I9Yy5hZGRPcGFjaXR5KGMucmdiKGYpLGMub3BhY2l0eShmKSphLmVycm9yX3kub3BhY2l0eSksZGVsZXRlIGEuZXJyb3JfeS5vcGFjaXR5fWlmKCJiYXJkaXIiaW4gYSYmKCJoIiE9PWEuYmFyZGlyfHwhZChhLCJiYXIiKSYmImhpc3RvZ3JhbSIhPT1hLnR5cGUuc3Vic3RyKDAsOSl8fChhLm9yaWVudGF0aW9uPSJoIixyLnN3YXBYWURhdGEoYSkpLGRlbGV0ZSBhLmJhcmRpciksImhpc3RvZ3JhbXkiPT09YS50eXBlJiZyLnN3YXBYWURhdGEoYSksImhpc3RvZ3JhbXgiIT09YS50eXBlJiYiaGlzdG9ncmFteSIhPT1hLnR5cGV8fChhLnR5cGU9Imhpc3RvZ3JhbSIpLCJzY2wiaW4gYSYmISgiY29sb3JzY2FsZSJpbiBhKSYmKGEuY29sb3JzY2FsZT1hLnNjbCxkZWxldGUgYS5zY2wpLCJyZXZlcnNlc2NsImluIGEmJiEoInJldmVyc2VzY2FsZSJpbiBhKSYmKGEucmV2ZXJzZXNjYWxlPWEucmV2ZXJzZXNjbCxkZWxldGUgYS5yZXZlcnNlc2NsKSxhLnhheGlzJiYoYS54YXhpcz11KGEueGF4aXMsIngiKSksYS55YXhpcyYmKGEueWF4aXM9dShhLnlheGlzLCJ5IikpLGQoYSwiZ2wzZCIpJiZhLnNjZW5lJiYoYS5zY2VuZT1sLnN1YnBsb3RzUmVnaXN0cnkuZ2wzZC5jbGVhbklkKGEuc2NlbmUpKSwhZChhLCJwaWUtbGlrZSIpJiYhZChhLCJiYXItbGlrZSIpKWlmKEFycmF5LmlzQXJyYXkoYS50ZXh0cG9zaXRpb24pKWZvcihuPTA7bjxhLnRleHRwb3NpdGlvbi5sZW5ndGg7bisrKWEudGV4dHBvc2l0aW9uW25dPW0oYS50ZXh0cG9zaXRpb25bbl0pO2Vsc2UgYS50ZXh0cG9zaXRpb24mJihhLnRleHRwb3NpdGlvbj1tKGEudGV4dHBvc2l0aW9uKSk7dmFyIHA9aS5nZXRNb2R1bGUoYSk7aWYocCYmcC5jb2xvcmJhcil7dmFyIHg9cC5jb2xvcmJhci5jb250YWluZXIsYj14P2FbeF06YTtiJiZiLmNvbG9yc2NhbGUmJigiWUlHbkJ1Ij09PWIuY29sb3JzY2FsZSYmKGIuY29sb3JzY2FsZT0iWWxHbkJ1IiksIllJT3JSZCI9PT1iLmNvbG9yc2NhbGUmJihiLmNvbG9yc2NhbGU9IllsT3JSZCIpKX1pZigic3VyZmFjZSI9PT1hLnR5cGUmJm8uaXNQbGFpbk9iamVjdChhLmNvbnRvdXJzKSl7dmFyIF89WyJ4IiwieSIsInoiXTtmb3Iobj0wO248Xy5sZW5ndGg7bisrKXt2YXIgdz1hLmNvbnRvdXJzW19bbl1dO28uaXNQbGFpbk9iamVjdCh3KSYmKHcuaGlnaGxpZ2h0Q29sb3ImJih3LmhpZ2hsaWdodGNvbG9yPXcuaGlnaGxpZ2h0Q29sb3IsZGVsZXRlIHcuaGlnaGxpZ2h0Q29sb3IpLHcuaGlnaGxpZ2h0V2lkdGgmJih3LmhpZ2hsaWdodHdpZHRoPXcuaGlnaGxpZ2h0V2lkdGgsZGVsZXRlIHcuaGlnaGxpZ2h0V2lkdGgpKX19aWYoImNhbmRsZXN0aWNrIj09PWEudHlwZXx8Im9obGMiPT09YS50eXBlKXt2YXIgVD0hMSE9PShhLmluY3JlYXNpbmd8fHt9KS5zaG93bGVnZW5kLGs9ITEhPT0oYS5kZWNyZWFzaW5nfHx7fSkuc2hvd2xlZ2VuZCxNPWcoYS5pbmNyZWFzaW5nKSxBPWcoYS5kZWNyZWFzaW5nKTtpZighMSE9PU0mJiExIT09QSl7dmFyIEw9dihNLEEsVCxrKTtMJiYoYS5uYW1lPUwpfWVsc2UhTSYmIUF8fGEubmFtZXx8KGEubmFtZT1NfHxBKX1pZihBcnJheS5pc0FycmF5KGEudHJhbnNmb3Jtcykpe3ZhciBTPWEudHJhbnNmb3Jtcztmb3Iobj0wO248Uy5sZW5ndGg7bisrKXt2YXIgQz1TW25dO2lmKG8uaXNQbGFpbk9iamVjdChDKSlzd2l0Y2goQy50eXBlKXtjYXNlImZpbHRlciI6Qy5maWx0ZXJzcmMmJihDLnRhcmdldD1DLmZpbHRlcnNyYyxkZWxldGUgQy5maWx0ZXJzcmMpLEMuY2FsZW5kYXImJihDLnZhbHVlY2FsZW5kYXJ8fChDLnZhbHVlY2FsZW5kYXI9Qy5jYWxlbmRhciksZGVsZXRlIEMuY2FsZW5kYXIpO2JyZWFrO2Nhc2UiZ3JvdXBieSI6aWYoQy5zdHlsZXM9Qy5zdHlsZXN8fEMuc3R5bGUsQy5zdHlsZXMmJiFBcnJheS5pc0FycmF5KEMuc3R5bGVzKSl7dmFyIE89Qy5zdHlsZXMsRD1PYmplY3Qua2V5cyhPKTtDLnN0eWxlcz1bXTtmb3IodmFyIFA9MDtQPEQubGVuZ3RoO1ArKylDLnN0eWxlcy5wdXNoKHt0YXJnZXQ6RFtQXSx2YWx1ZTpPW0RbUF1dfSl9fX19eShhLCJsaW5lIikmJmRlbGV0ZSBhLmxpbmUsIm1hcmtlciJpbiBhJiYoeShhLm1hcmtlciwibGluZSIpJiZkZWxldGUgYS5tYXJrZXIubGluZSx5KGEsIm1hcmtlciIpJiZkZWxldGUgYS5tYXJrZXIpLGMuY2xlYW4oYSksYS5hdXRvYmlueCYmKGRlbGV0ZSBhLmF1dG9iaW54LGRlbGV0ZSBhLnhiaW5zKSxhLmF1dG9iaW55JiYoZGVsZXRlIGEuYXV0b2JpbnksZGVsZXRlIGEueWJpbnMpLGgoYSksYS5jb2xvcmJhciYmaChhLmNvbG9yYmFyKSxhLm1hcmtlciYmYS5tYXJrZXIuY29sb3JiYXImJmgoYS5tYXJrZXIuY29sb3JiYXIpLGEubGluZSYmYS5saW5lLmNvbG9yYmFyJiZoKGEubGluZS5jb2xvcmJhciksYS5hYXhpcyYmaChhLmFheGlzKSxhLmJheGlzJiZoKGEuYmF4aXMpfX0sci5zd2FwWFlEYXRhPWZ1bmN0aW9uKGUpe3ZhciB0O2lmKG8uc3dhcEF0dHJzKGUsWyI/IiwiPzAiLCJkPyIsIj9iaW5zIiwibmJpbnM/IiwiYXV0b2Jpbj8iLCI/c3JjIiwiZXJyb3JfPyJdKSxBcnJheS5pc0FycmF5KGUueikmJkFycmF5LmlzQXJyYXkoZS56WzBdKSYmKGUudHJhbnNwb3NlP2RlbGV0ZSBlLnRyYW5zcG9zZTplLnRyYW5zcG9zZT0hMCksZS5lcnJvcl94JiZlLmVycm9yX3kpe3ZhciByPWUuZXJyb3JfeSxuPSJjb3B5X3lzdHlsZSJpbiByP3IuY29weV95c3R5bGU6IShyLmNvbG9yfHxyLnRoaWNrbmVzc3x8ci53aWR0aCk7by5zd2FwQXR0cnMoZSxbImVycm9yXz8uY29weV95c3R5bGUiXSksbiYmby5zd2FwQXR0cnMoZSxbImVycm9yXz8uY29sb3IiLCJlcnJvcl8/LnRoaWNrbmVzcyIsImVycm9yXz8ud2lkdGgiXSl9aWYoInN0cmluZyI9PXR5cGVvZiBlLmhvdmVyaW5mbyl7dmFyIGE9ZS5ob3ZlcmluZm8uc3BsaXQoIisiKTtmb3IodD0wO3Q8YS5sZW5ndGg7dCsrKSJ4Ij09PWFbdF0/YVt0XT0ieSI6InkiPT09YVt0XSYmKGFbdF09IngiKTtlLmhvdmVyaW5mbz1hLmpvaW4oIisiKX19LHIuY29lcmNlVHJhY2VJbmRpY2VzPWZ1bmN0aW9uKGUsdCl7aWYobih0KSlyZXR1cm5bdF07aWYoIUFycmF5LmlzQXJyYXkodCl8fCF0Lmxlbmd0aClyZXR1cm4gZS5kYXRhLm1hcCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdH0pKTtpZihBcnJheS5pc0FycmF5KHQpKXtmb3IodmFyIHI9W10sYT0wO2E8dC5sZW5ndGg7YSsrKW8uaXNJbmRleCh0W2FdLGUuZGF0YS5sZW5ndGgpP3IucHVzaCh0W2FdKTpvLndhcm4oInRyYWNlIGluZGV4ICgiLHRbYV0sIikgaXMgbm90IGEgbnVtYmVyIG9yIGlzIG91dCBvZiBib3VuZHMiKTtyZXR1cm4gcn1yZXR1cm4gdH0sci5tYW5hZ2VBcnJheUNvbnRhaW5lcnM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBhPWUub2JqLGk9ZS5wYXJ0cyxsPWkubGVuZ3RoLHM9aVtsLTFdLGM9bihzKTtpZihjJiZudWxsPT09dCl7dmFyIHU9aS5zbGljZSgwLGwtMSkuam9pbigiLiIpO28ubmVzdGVkUHJvcGVydHkoYSx1KS5nZXQoKS5zcGxpY2UocywxKX1lbHNlIGMmJnZvaWQgMD09PWUuZ2V0KCk/KHZvaWQgMD09PWUuZ2V0KCkmJihyW2UuYXN0cl09bnVsbCksZS5zZXQodCkpOmUuc2V0KHQpfTt2YXIgeD0vKFwuW15cW1xdXC5dK3xcW1teXFtcXVwuXStcXSkkLztmdW5jdGlvbiBiKGUpe3ZhciB0PWUuc2VhcmNoKHgpO2lmKHQ+MClyZXR1cm4gZS5zdWJzdHIoMCx0KX1yLmhhc1BhcmVudD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1iKHQpO3I7KXtpZihyIGluIGUpcmV0dXJuITA7cj1iKHIpfXJldHVybiExfTt2YXIgXz1bIngiLCJ5IiwieiJdO3IuY2xlYXJBeGlzVHlwZXM9ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKWZvcih2YXIgYT1lLl9mdWxsRGF0YVtuXSxpPTA7aTwzO2krKyl7dmFyIGw9ZihlLGEsX1tpXSk7aWYobCYmImxvZyIhPT1sLnR5cGUpe3ZhciBzPWwuX25hbWUsYz1sLl9pZC5zdWJzdHIoMSk7aWYoInNjZW5lIj09PWMuc3Vic3RyKDAsNSkpe2lmKHZvaWQgMCE9PXJbY10pY29udGludWU7cz1jKyIuIitzfXZhciB1PXMrIi50eXBlIjt2b2lkIDA9PT1yW3NdJiZ2b2lkIDA9PT1yW3VdJiZvLm5lc3RlZFByb3BlcnR5KGUubGF5b3V0LHUpLnNldChudWxsKX19fX0seyIuLi9jb21wb25lbnRzL2NvbG9yIjo3NSwiLi4vbGliIjoyMDIsIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6MjUxLCIuLi9wbG90cy9wbG90cyI6MjgyLCIuLi9yZWdpc3RyeSI6MjkwLCJmYXN0LWlzbnVtZXJpYyI6MTEsImdsLW1hdDQvZnJvbVF1YXQiOjE3fV0sMjMyOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4vcGxvdF9hcGkiKTtyLnBsb3Q9bi5wbG90LHIubmV3UGxvdD1uLm5ld1Bsb3Qsci5yZXN0eWxlPW4ucmVzdHlsZSxyLnJlbGF5b3V0PW4ucmVsYXlvdXQsci5yZWRyYXc9bi5yZWRyYXcsci51cGRhdGU9bi51cGRhdGUsci5fZ3VpUmVzdHlsZT1uLl9ndWlSZXN0eWxlLHIuX2d1aVJlbGF5b3V0PW4uX2d1aVJlbGF5b3V0LHIuX2d1aVVwZGF0ZT1uLl9ndWlVcGRhdGUsci5fc3RvcmVEaXJlY3RHVUlFZGl0PW4uX3N0b3JlRGlyZWN0R1VJRWRpdCxyLnJlYWN0PW4ucmVhY3Qsci5leHRlbmRUcmFjZXM9bi5leHRlbmRUcmFjZXMsci5wcmVwZW5kVHJhY2VzPW4ucHJlcGVuZFRyYWNlcyxyLmFkZFRyYWNlcz1uLmFkZFRyYWNlcyxyLmRlbGV0ZVRyYWNlcz1uLmRlbGV0ZVRyYWNlcyxyLm1vdmVUcmFjZXM9bi5tb3ZlVHJhY2VzLHIucHVyZ2U9bi5wdXJnZSxyLmFkZEZyYW1lcz1uLmFkZEZyYW1lcyxyLmRlbGV0ZUZyYW1lcz1uLmRlbGV0ZUZyYW1lcyxyLmFuaW1hdGU9bi5hbmltYXRlLHIuc2V0UGxvdENvbmZpZz1uLnNldFBsb3RDb25maWcsci50b0ltYWdlPWUoIi4vdG9faW1hZ2UiKSxyLnZhbGlkYXRlPWUoIi4vdmFsaWRhdGUiKSxyLmRvd25sb2FkSW1hZ2U9ZSgiLi4vc25hcHNob3QvZG93bmxvYWQiKTt2YXIgYT1lKCIuL3RlbXBsYXRlX2FwaSIpO3IubWFrZVRlbXBsYXRlPWEubWFrZVRlbXBsYXRlLHIudmFsaWRhdGVUZW1wbGF0ZT1hLnZhbGlkYXRlVGVtcGxhdGV9LHsiLi4vc25hcHNob3QvZG93bmxvYWQiOjI5MiwiLi9wbG90X2FwaSI6MjM0LCIuL3RlbXBsYXRlX2FwaSI6MjM5LCIuL3RvX2ltYWdlIjoyNDAsIi4vdmFsaWRhdGUiOjI0MX1dLDIzMzpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi9saWIvaXNfcGxhaW5fb2JqZWN0IiksYT1lKCIuLi9saWIvbm9vcCIpLGk9ZSgiLi4vbGliL2xvZ2dlcnMiKSxvPWUoIi4uL2xpYi9zZWFyY2giKS5zb3J0ZXJBc2MsbD1lKCIuLi9yZWdpc3RyeSIpO3IuY29udGFpbmVyQXJyYXlNYXRjaD1lKCIuL2NvbnRhaW5lcl9hcnJheV9tYXRjaCIpO3ZhciBzPXIuaXNBZGRWYWw9ZnVuY3Rpb24oZSl7cmV0dXJuImFkZCI9PT1lfHxuKGUpfSxjPXIuaXNSZW1vdmVWYWw9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PT1lfHwicmVtb3ZlIj09PWV9O3IuYXBwbHlDb250YWluZXJBcnJheUNoYW5nZXM9ZnVuY3Rpb24oZSx0LHIsbix1KXt2YXIgZj10LmFzdHIsZD1sLmdldENvbXBvbmVudE1ldGhvZChmLCJzdXBwbHlMYXlvdXREZWZhdWx0cyIpLHA9bC5nZXRDb21wb25lbnRNZXRob2QoZiwiZHJhdyIpLGg9bC5nZXRDb21wb25lbnRNZXRob2QoZiwiZHJhd09uZSIpLGc9bi5yZXBsb3R8fG4ucmVjYWxjfHxkPT09YXx8cD09PWEsdj1lLmxheW91dCxtPWUuX2Z1bGxMYXlvdXQ7aWYoclsiIl0pe09iamVjdC5rZXlzKHIpLmxlbmd0aD4xJiZpLndhcm4oIkZ1bGwgYXJyYXkgZWRpdHMgYXJlIGluY29tcGF0aWJsZSB3aXRoIG90aGVyIGVkaXRzIixmKTt2YXIgeT1yWyIiXVsiIl07aWYoYyh5KSl0LnNldChudWxsKTtlbHNle2lmKCFBcnJheS5pc0FycmF5KHkpKXJldHVybiBpLndhcm4oIlVucmVjb2duaXplZCBmdWxsIGFycmF5IGVkaXQgdmFsdWUiLGYseSksITA7dC5zZXQoeSl9cmV0dXJuIWcmJihkKHYsbSkscChlKSwhMCl9dmFyIHgsYixfLHcsVCxrLE0sQSxMPU9iamVjdC5rZXlzKHIpLm1hcChOdW1iZXIpLnNvcnQobyksUz10LmdldCgpLEM9U3x8W10sTz11KG0sZikuZ2V0KCksRD1bXSxQPS0xLHo9Qy5sZW5ndGg7Zm9yKHg9MDt4PEwubGVuZ3RoO3grKylpZih3PXJbXz1MW3hdXSxUPU9iamVjdC5rZXlzKHcpLGs9d1siIl0sTT1zKGspLF88MHx8Xz5DLmxlbmd0aC0oTT8wOjEpKWkud2FybigiaW5kZXggb3V0IG9mIHJhbmdlIixmLF8pO2Vsc2UgaWYodm9pZCAwIT09aylULmxlbmd0aD4xJiZpLndhcm4oIkluc2VydGlvbiAmIHJlbW92YWwgYXJlIGluY29tcGF0aWJsZSB3aXRoIGVkaXRzIHRvIHRoZSBzYW1lIGluZGV4LiIsZixfKSxjKGspP0QucHVzaChfKTpNPygiYWRkIj09PWsmJihrPXt9KSxDLnNwbGljZShfLDAsayksTyYmTy5zcGxpY2UoXywwLHt9KSk6aS53YXJuKCJVbnJlY29nbml6ZWQgZnVsbCBvYmplY3QgZWRpdCB2YWx1ZSIsZixfLGspLC0xPT09UCYmKFA9Xyk7ZWxzZSBmb3IoYj0wO2I8VC5sZW5ndGg7YisrKUE9ZisiWyIrXysiXS4iLHUoQ1tfXSxUW2JdLEEpLnNldCh3W1RbYl1dKTtmb3IoeD1ELmxlbmd0aC0xO3g+PTA7eC0tKUMuc3BsaWNlKERbeF0sMSksTyYmTy5zcGxpY2UoRFt4XSwxKTtpZihDLmxlbmd0aD9TfHx0LnNldChDKTp0LnNldChudWxsKSxnKXJldHVybiExO2lmKGQodixtKSxoIT09YSl7dmFyIFI7aWYoLTE9PT1QKVI9TDtlbHNle2Zvcih6PU1hdGgubWF4KEMubGVuZ3RoLHopLFI9W10seD0wO3g8TC5sZW5ndGgmJiEoKF89TFt4XSk+PVApO3grKylSLnB1c2goXyk7Zm9yKHg9UDt4PHo7eCsrKVIucHVzaCh4KX1mb3IoeD0wO3g8Ui5sZW5ndGg7eCsrKWgoZSxSW3hdKX1lbHNlIHAoZSk7cmV0dXJuITB9fSx7Ii4uL2xpYi9pc19wbGFpbl9vYmplY3QiOjIwMywiLi4vbGliL2xvZ2dlcnMiOjIwNiwiLi4vbGliL25vb3AiOjIxMSwiLi4vbGliL3NlYXJjaCI6MjIxLCIuLi9yZWdpc3RyeSI6MjkwLCIuL2NvbnRhaW5lcl9hcnJheV9tYXRjaCI6MjI5fV0sMjM0OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoImQzIiksYT1lKCJmYXN0LWlzbnVtZXJpYyIpLGk9ZSgiaGFzLWhvdmVyIiksbz1lKCIuLi9saWIiKSxsPW8ubmVzdGVkUHJvcGVydHkscz1lKCIuLi9saWIvZXZlbnRzIiksYz1lKCIuLi9saWIvcXVldWUiKSx1PWUoIi4uL3JlZ2lzdHJ5IiksZj1lKCIuL3Bsb3Rfc2NoZW1hIiksZD1lKCIuLi9wbG90cy9wbG90cyIpLHA9ZSgiLi4vcGxvdHMvcG9sYXIvbGVnYWN5IiksaD1lKCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGc9ZSgiLi4vY29tcG9uZW50cy9kcmF3aW5nIiksdj1lKCIuLi9jb21wb25lbnRzL2NvbG9yIiksbT1lKCIuLi9wbG90cy9jYXJ0ZXNpYW4vZ3JhcGhfaW50ZXJhY3QiKS5pbml0SW50ZXJhY3Rpb25zLHk9ZSgiLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKSx4PWUoIi4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGI9ZSgiLi4vcGxvdHMvY2FydGVzaWFuL3NlbGVjdCIpLmNsZWFyU2VsZWN0LF89ZSgiLi9wbG90X2NvbmZpZyIpLmRmbHRDb25maWcsdz1lKCIuL21hbmFnZV9hcnJheXMiKSxUPWUoIi4vaGVscGVycyIpLGs9ZSgiLi9zdWJyb3V0aW5lcyIpLE09ZSgiLi9lZGl0X3R5cGVzIiksQT1lKCIuLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIikuQVhfTkFNRV9QQVRURVJOLEw9MDtmdW5jdGlvbiBTKGUpe3ZhciB0PWUuX2Z1bGxMYXlvdXQ7dC5fcmVkcmF3RnJvbUF1dG9NYXJnaW5Db3VudD90Ll9yZWRyYXdGcm9tQXV0b01hcmdpbkNvdW50LS06ZS5lbWl0KCJwbG90bHlfYWZ0ZXJwbG90Iil9ZnVuY3Rpb24gQyhlLHQpe3RyeXtlLl9mdWxsTGF5b3V0Ll9wYXBlci5zdHlsZSgiYmFja2dyb3VuZCIsdCl9Y2F0Y2goZSl7by5lcnJvcihlKX19ZnVuY3Rpb24gTyhlLHQpe0MoZSx2LmNvbWJpbmUodCwid2hpdGUiKSl9ZnVuY3Rpb24gRChlLHQpe2lmKCFlLl9jb250ZXh0KXtlLl9jb250ZXh0PW8uZXh0ZW5kRGVlcCh7fSxfKTt2YXIgcj1uLnNlbGVjdCgiYmFzZSIpO2UuX2NvbnRleHQuX2Jhc2VVcmw9ci5zaXplKCkmJnIuYXR0cigiaHJlZiIpP3dpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KCIjIilbMF06IiJ9dmFyIGEsbCxzLGM9ZS5fY29udGV4dDtpZih0KXtmb3IobD1PYmplY3Qua2V5cyh0KSxhPTA7YTxsLmxlbmd0aDthKyspImVkaXRhYmxlIiE9PShzPWxbYV0pJiYiZWRpdHMiIT09cyYmcyBpbiBjJiYoInNldEJhY2tncm91bmQiPT09cyYmIm9wYXF1ZSI9PT10W3NdP2Nbc109TzpjW3NdPXRbc10pO3QucGxvdDNkUGl4ZWxSYXRpbyYmIWMucGxvdEdsUGl4ZWxSYXRpbyYmKGMucGxvdEdsUGl4ZWxSYXRpbz1jLnBsb3QzZFBpeGVsUmF0aW8pO3ZhciB1PXQuZWRpdGFibGU7aWYodm9pZCAwIT09dSlmb3IoYy5lZGl0YWJsZT11LGw9T2JqZWN0LmtleXMoYy5lZGl0cyksYT0wO2E8bC5sZW5ndGg7YSsrKWMuZWRpdHNbbFthXV09dTtpZih0LmVkaXRzKWZvcihsPU9iamVjdC5rZXlzKHQuZWRpdHMpLGE9MDthPGwubGVuZ3RoO2ErKykocz1sW2FdKWluIGMuZWRpdHMmJihjLmVkaXRzW3NdPXQuZWRpdHNbc10pO2MuX2V4cG9ydGVkUGxvdD10Ll9leHBvcnRlZFBsb3R9Yy5zdGF0aWNQbG90JiYoYy5lZGl0YWJsZT0hMSxjLmVkaXRzPXt9LGMuYXV0b3NpemFibGU9ITEsYy5zY3JvbGxab29tPSExLGMuZG91YmxlQ2xpY2s9ITEsYy5zaG93VGlwcz0hMSxjLnNob3dMaW5rPSExLGMuZGlzcGxheU1vZGVCYXI9ITEpLCJob3ZlciIhPT1jLmRpc3BsYXlNb2RlQmFyfHxpfHwoYy5kaXNwbGF5TW9kZUJhcj0hMCksInRyYW5zcGFyZW50IiE9PWMuc2V0QmFja2dyb3VuZCYmImZ1bmN0aW9uIj09dHlwZW9mIGMuc2V0QmFja2dyb3VuZHx8KGMuc2V0QmFja2dyb3VuZD1DKSxjLl9oYXNaZXJvSGVpZ2h0PWMuX2hhc1plcm9IZWlnaHR8fDA9PT1lLmNsaWVudEhlaWdodCxjLl9oYXNaZXJvV2lkdGg9Yy5faGFzWmVyb1dpZHRofHwwPT09ZS5jbGllbnRXaWR0aDt2YXIgZj1jLnNjcm9sbFpvb20sZD1jLl9zY3JvbGxab29tPXt9O2lmKCEwPT09ZilkLmNhcnRlc2lhbj0xLGQuZ2wzZD0xLGQuZ2VvPTEsZC5tYXBib3g9MTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgZil7dmFyIHA9Zi5zcGxpdCgiKyIpO2ZvcihhPTA7YTxwLmxlbmd0aDthKyspZFtwW2FdXT0xfWVsc2UhMSE9PWYmJihkLmdsM2Q9MSxkLmdlbz0xLGQubWFwYm94PTEpfWZ1bmN0aW9uIFAoZSx0KXt2YXIgcixuLGE9dCsxLGk9W107Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKykobj1lW3JdKTwwP2kucHVzaChhK24pOmkucHVzaChuKTtyZXR1cm4gaX1mdW5jdGlvbiB6KGUsdCxyKXt2YXIgbixhO2ZvcihuPTA7bjx0Lmxlbmd0aDtuKyspe2lmKChhPXRbbl0pIT09cGFyc2VJbnQoYSwxMCkpdGhyb3cgbmV3IEVycm9yKCJhbGwgdmFsdWVzIGluICIrcisiIG11c3QgYmUgaW50ZWdlcnMiKTtpZihhPj1lLmRhdGEubGVuZ3RofHxhPC1lLmRhdGEubGVuZ3RoKXRocm93IG5ldyBFcnJvcihyKyIgbXVzdCBiZSB2YWxpZCBpbmRpY2VzIGZvciBnZC5kYXRhLiIpO2lmKHQuaW5kZXhPZihhLG4rMSk+LTF8fGE+PTAmJnQuaW5kZXhPZigtZS5kYXRhLmxlbmd0aCthKT4tMXx8YTwwJiZ0LmluZGV4T2YoZS5kYXRhLmxlbmd0aCthKT4tMSl0aHJvdyBuZXcgRXJyb3IoImVhY2ggaW5kZXggaW4gIityKyIgbXVzdCBiZSB1bmlxdWUuIil9fWZ1bmN0aW9uIFIoZSx0LHIpe2lmKCFBcnJheS5pc0FycmF5KGUuZGF0YSkpdGhyb3cgbmV3IEVycm9yKCJnZC5kYXRhIG11c3QgYmUgYW4gYXJyYXkuIik7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigiY3VycmVudEluZGljZXMgaXMgYSByZXF1aXJlZCBhcmd1bWVudC4iKTtpZihBcnJheS5pc0FycmF5KHQpfHwodD1bdF0pLHooZSx0LCJjdXJyZW50SW5kaWNlcyIpLCJ1bmRlZmluZWQiPT10eXBlb2Ygcnx8QXJyYXkuaXNBcnJheShyKXx8KHI9W3JdKSwidW5kZWZpbmVkIiE9dHlwZW9mIHImJnooZSxyLCJuZXdJbmRpY2VzIiksInVuZGVmaW5lZCIhPXR5cGVvZiByJiZ0Lmxlbmd0aCE9PXIubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiY3VycmVudCBhbmQgbmV3IGluZGljZXMgbXVzdCBiZSBvZiBlcXVhbCBsZW5ndGguIil9ZnVuY3Rpb24gRShlLHQscixuLGkpeyFmdW5jdGlvbihlLHQscixuKXt2YXIgYT1vLmlzUGxhaW5PYmplY3Qobik7aWYoIUFycmF5LmlzQXJyYXkoZS5kYXRhKSl0aHJvdyBuZXcgRXJyb3IoImdkLmRhdGEgbXVzdCBiZSBhbiBhcnJheSIpO2lmKCFvLmlzUGxhaW5PYmplY3QodCkpdGhyb3cgbmV3IEVycm9yKCJ1cGRhdGUgbXVzdCBiZSBhIGtleTp2YWx1ZSBvYmplY3QiKTtpZigidW5kZWZpbmVkIj09dHlwZW9mIHIpdGhyb3cgbmV3IEVycm9yKCJpbmRpY2VzIG11c3QgYmUgYW4gaW50ZWdlciBvciBhcnJheSBvZiBpbnRlZ2VycyIpO2Zvcih2YXIgaSBpbiB6KGUsciwiaW5kaWNlcyIpLHQpe2lmKCFBcnJheS5pc0FycmF5KHRbaV0pfHx0W2ldLmxlbmd0aCE9PXIubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiYXR0cmlidXRlICIraSsiIG11c3QgYmUgYW4gYXJyYXkgb2YgbGVuZ3RoIGVxdWFsIHRvIGluZGljZXMgYXJyYXkgbGVuZ3RoIik7aWYoYSYmKCEoaSBpbiBuKXx8IUFycmF5LmlzQXJyYXkobltpXSl8fG5baV0ubGVuZ3RoIT09dFtpXS5sZW5ndGgpKXRocm93IG5ldyBFcnJvcigid2hlbiBtYXhQb2ludHMgaXMgc2V0IGFzIGEga2V5OnZhbHVlIG9iamVjdCBpdCBtdXN0IGNvbnRhaW4gYSAxOjEgY29ycmlzcG9uZGVuY2Ugd2l0aCB0aGUga2V5cyBhbmQgbnVtYmVyIG9mIHRyYWNlcyBpbiB0aGUgdXBkYXRlIG9iamVjdCIpfX0oZSx0LHIsbik7Zm9yKHZhciBzPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBpLHMsYyx1LGYsZD1vLmlzUGxhaW5PYmplY3QobikscD1bXTtmb3IodmFyIGggaW4gQXJyYXkuaXNBcnJheShyKXx8KHI9W3JdKSxyPVAocixlLmRhdGEubGVuZ3RoLTEpLHQpZm9yKHZhciBnPTA7ZzxyLmxlbmd0aDtnKyspe2lmKGk9ZS5kYXRhW3JbZ11dLHM9KGM9bChpLGgpKS5nZXQoKSx1PXRbaF1bZ10sIW8uaXNBcnJheU9yVHlwZWRBcnJheSh1KSl0aHJvdyBuZXcgRXJyb3IoImF0dHJpYnV0ZTogIitoKyIgaW5kZXg6ICIrZysiIG11c3QgYmUgYW4gYXJyYXkiKTtpZighby5pc0FycmF5T3JUeXBlZEFycmF5KHMpKXRocm93IG5ldyBFcnJvcigiY2Fubm90IGV4dGVuZCBtaXNzaW5nIG9yIG5vbi1hcnJheSBhdHRyaWJ1dGU6ICIraCk7aWYocy5jb25zdHJ1Y3RvciE9PXUuY29uc3RydWN0b3IpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgZXh0ZW5kIGFycmF5IHdpdGggYW4gYXJyYXkgb2YgYSBkaWZmZXJlbnQgdHlwZTogIitoKTtmPWQ/bltoXVtnXTpuLGEoZil8fChmPS0xKSxwLnB1c2goe3Byb3A6Yyx0YXJnZXQ6cyxpbnNlcnQ6dSxtYXhwOk1hdGguZmxvb3IoZil9KX1yZXR1cm4gcH0oZSx0LHIsbiksYz17fSx1PXt9LGY9MDtmPHMubGVuZ3RoO2YrKyl7dmFyIGQ9c1tmXS5wcm9wLHA9c1tmXS5tYXhwLGg9aShzW2ZdLnRhcmdldCxzW2ZdLmluc2VydCxwKTtkLnNldChoWzBdKSxBcnJheS5pc0FycmF5KGNbZC5hc3RyXSl8fChjW2QuYXN0cl09W10pLGNbZC5hc3RyXS5wdXNoKGhbMV0pLEFycmF5LmlzQXJyYXkodVtkLmFzdHJdKXx8KHVbZC5hc3RyXT1bXSksdVtkLmFzdHJdLnB1c2goc1tmXS50YXJnZXQubGVuZ3RoKX1yZXR1cm57dXBkYXRlOmMsbWF4UG9pbnRzOnV9fWZ1bmN0aW9uIEkoZSx0KXt2YXIgcj1uZXcgZS5jb25zdHJ1Y3RvcihlLmxlbmd0aCt0Lmxlbmd0aCk7cmV0dXJuIHIuc2V0KGUpLHIuc2V0KHQsZS5sZW5ndGgpLHJ9ZnVuY3Rpb24gRihlLHQsbixhKXtlPW8uZ2V0R3JhcGhEaXYoZSksVC5jbGVhclByb21pc2VRdWV1ZShlKTt2YXIgaT17fTtpZigic3RyaW5nIj09dHlwZW9mIHQpaVt0XT1uO2Vsc2V7aWYoIW8uaXNQbGFpbk9iamVjdCh0KSlyZXR1cm4gby53YXJuKCJSZXN0eWxlIGZhaWwuIix0LG4sYSksUHJvbWlzZS5yZWplY3QoKTtpPW8uZXh0ZW5kRmxhdCh7fSx0KSx2b2lkIDA9PT1hJiYoYT1uKX1PYmplY3Qua2V5cyhpKS5sZW5ndGgmJihlLmNoYW5nZWQ9ITApO3ZhciBsPVQuY29lcmNlVHJhY2VJbmRpY2VzKGUsYSkscz1CKGUsaSxsKSx1PXMuZmxhZ3M7dS5jYWxjJiYoZS5jYWxjZGF0YT12b2lkIDApLHUuY2xlYXJBeGlzVHlwZXMmJlQuY2xlYXJBeGlzVHlwZXMoZSxsLHt9KTt2YXIgZj1bXTt1LmZ1bGxSZXBsb3Q/Zi5wdXNoKHIucGxvdCk6KGYucHVzaChkLnByZXZpb3VzUHJvbWlzZXMpLGQuc3VwcGx5RGVmYXVsdHMoZSksdS5tYXJrZXJTaXplJiYoZC5kb0NhbGNkYXRhKGUpLEcoZikpLHUuc3R5bGUmJmYucHVzaChrLmRvVHJhY2VTdHlsZSksdS5jb2xvcmJhcnMmJmYucHVzaChrLmRvQ29sb3JCYXJzKSxmLnB1c2goUykpLGYucHVzaChkLnJlaG92ZXIsZC5yZWRyYWcpLGMuYWRkKGUsRixbZSxzLnVuZG9pdCxzLnRyYWNlc10sRixbZSxzLnJlZG9pdCxzLnRyYWNlc10pO3ZhciBwPW8uc3luY09yQXN5bmMoZixlKTtyZXR1cm4gcCYmcC50aGVufHwocD1Qcm9taXNlLnJlc29sdmUoKSkscC50aGVuKChmdW5jdGlvbigpe3JldHVybiBlLmVtaXQoInBsb3RseV9yZXN0eWxlIixzLmV2ZW50RGF0YSksZX0pKX1mdW5jdGlvbiBOKGUpe3JldHVybiB2b2lkIDA9PT1lP251bGw6ZX1mdW5jdGlvbiBIKGUsdCl7cmV0dXJuIHQ/ZnVuY3Rpb24odCxyLG4pe3ZhciBhPWwodCxyKSxpPWEuc2V0O3JldHVybiBhLnNldD1mdW5jdGlvbih0KXtqKChufHwiIikrcixhLmdldCgpLHQsZSksaSh0KX0sYX06bH1mdW5jdGlvbiBqKGUsdCxyLG4pe2lmKEFycmF5LmlzQXJyYXkodCl8fEFycmF5LmlzQXJyYXkocikpZm9yKHZhciBhPUFycmF5LmlzQXJyYXkodCk/dDpbXSxpPUFycmF5LmlzQXJyYXkocik/cjpbXSxsPU1hdGgubWF4KGEubGVuZ3RoLGkubGVuZ3RoKSxzPTA7czxsO3MrKylqKGUrIlsiK3MrIl0iLGFbc10saVtzXSxuKTtlbHNlIGlmKG8uaXNQbGFpbk9iamVjdCh0KXx8by5pc1BsYWluT2JqZWN0KHIpKXt2YXIgYz1vLmlzUGxhaW5PYmplY3QodCk/dDp7fSx1PW8uaXNQbGFpbk9iamVjdChyKT9yOnt9LGY9by5leHRlbmRGbGF0KHt9LGMsdSk7Zm9yKHZhciBkIGluIGYpaihlKyIuIitkLGNbZF0sdVtkXSxuKX1lbHNlIHZvaWQgMD09PW5bZV0mJihuW2VdPU4odCkpfWZ1bmN0aW9uIEIoZSx0LHIpe3ZhciBuLGE9ZS5fZnVsbExheW91dCxpPWUuX2Z1bGxEYXRhLHM9ZS5kYXRhLGM9YS5fZ3VpRWRpdGluZyxwPUgoYS5fcHJlR1VJLGMpLGc9by5leHRlbmREZWVwQWxsKHt9LHQpO1YodCk7dmFyIHYsbT1NLnRyYWNlRmxhZ3MoKSx5PXt9LHg9e307ZnVuY3Rpb24gYigpe3JldHVybiByLm1hcCgoZnVuY3Rpb24oKXt9KSl9ZnVuY3Rpb24gXyhlKXt2YXIgdD1oLmlkMm5hbWUoZSk7LTE9PT12LmluZGV4T2YodCkmJnYucHVzaCh0KX1mdW5jdGlvbiB3KGUpe3JldHVybiJMQVlPVVQiK2UrIi5hdXRvcmFuZ2UifWZ1bmN0aW9uIGsoZSl7cmV0dXJuIkxBWU9VVCIrZSsiLnJhbmdlIn1mdW5jdGlvbiBBKGUpe2Zvcih2YXIgdD1lO3Q8aS5sZW5ndGg7dCsrKWlmKGlbdF0uX2lucHV0PT09c1tlXSlyZXR1cm4gaVt0XX1mdW5jdGlvbiBMKG4saSxvKXtpZihBcnJheS5pc0FycmF5KG4pKW4uZm9yRWFjaCgoZnVuY3Rpb24oZSl7TChlLGksbyl9KSk7ZWxzZSBpZighKG4gaW4gdCkmJiFULmhhc1BhcmVudCh0LG4pKXt2YXIgbDtpZigiTEFZT1VUIj09PW4uc3Vic3RyKDAsNikpbD1wKGUubGF5b3V0LG4ucmVwbGFjZSgiTEFZT1VUIiwiIikpO2Vsc2V7dmFyIHU9cltvXTtsPUgoYS5fdHJhY2VQcmVHVUlbQSh1KS5fZnVsbElucHV0LnVpZF0sYykoc1t1XSxuKX1uIGluIHh8fCh4W25dPWIoKSksdm9pZCAwPT09eFtuXVtvXSYmKHhbbl1bb109TihsLmdldCgpKSksdm9pZCAwIT09aSYmbC5zZXQoaSl9fWZ1bmN0aW9uIFMoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpW3RdW2VdfX1mdW5jdGlvbiBDKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe3JldHVybiExPT09dD9pW3Jbbl1dW2VdOm51bGx9fWZvcih2YXIgTyBpbiB0KXtpZihULmhhc1BhcmVudCh0LE8pKXRocm93IG5ldyBFcnJvcigiY2Fubm90IHNldCAiK08rIiBhbmQgYSBwYXJlbnQgYXR0cmlidXRlIHNpbXVsdGFuZW91c2x5Iik7dmFyIEQsUCx6LFIsRSxJLEY9dFtPXTtpZigiYXV0b2JpbngiIT09TyYmImF1dG9iaW55IiE9PU98fChPPU8uY2hhckF0KE8ubGVuZ3RoLTEpKyJiaW5zIixGPUFycmF5LmlzQXJyYXkoRik/Ri5tYXAoQyhPKSk6ITE9PT1GP3IubWFwKFMoTykpOm51bGwpLHlbT109RiwiTEFZT1VUIiE9PU8uc3Vic3RyKDAsNikpe2Zvcih4W09dPWIoKSxuPTA7bjxyLmxlbmd0aDtuKyspe2lmKEQ9c1tyW25dXSxQPUEocltuXSksUj0oej1IKGEuX3RyYWNlUHJlR1VJW1AuX2Z1bGxJbnB1dC51aWRdLGMpKEQsTykpLmdldCgpLHZvaWQgMCE9PShFPUFycmF5LmlzQXJyYXkoRik/RltuJUYubGVuZ3RoXTpGKSl7dmFyIGo9ei5wYXJ0c1t6LnBhcnRzLmxlbmd0aC0xXSxCPU8uc3Vic3RyKDAsTy5sZW5ndGgtai5sZW5ndGgtMSksVT1CP0IrIi4iOiIiLHE9Qj9sKFAsQikuZ2V0KCk6UDtpZigoST1mLmdldFRyYWNlVmFsT2JqZWN0KFAsei5wYXJ0cykpJiZJLmltcGxpZWRFZGl0cyYmbnVsbCE9PUUpZm9yKHZhciBHIGluIEkuaW1wbGllZEVkaXRzKUwoby5yZWxhdGl2ZUF0dHIoTyxHKSxJLmltcGxpZWRFZGl0c1tHXSxuKTtlbHNlIGlmKCJ0aGlja25lc3Ntb2RlIiE9PWomJiJsZW5tb2RlIiE9PWp8fFI9PT1FfHwiZnJhY3Rpb24iIT09RSYmInBpeGVscyIhPT1FfHwhcSl7aWYoInR5cGUiPT09TyYmKCJwaWUiPT09RSE9KCJwaWUiPT09Uil8fCJmdW5uZWxhcmVhIj09PUUhPSgiZnVubmVsYXJlYSI9PT1SKSkpe3ZhciBaPSJ4IixZPSJ5IjsiYmFyIiE9PUUmJiJiYXIiIT09Unx8ImgiIT09RC5vcmllbnRhdGlvbnx8KFo9InkiLFk9IngiKSxvLnN3YXBBdHRycyhELFsiPyIsIj9zcmMiXSwibGFiZWxzIixaKSxvLnN3YXBBdHRycyhELFsiZD8iLCI/MCJdLCJsYWJlbCIsWiksby5zd2FwQXR0cnMoRCxbIj8iLCI/c3JjIl0sInZhbHVlcyIsWSksInBpZSI9PT1SfHwiZnVubmVsYXJlYSI9PT1SPyhsKEQsIm1hcmtlci5jb2xvciIpLnNldChsKEQsIm1hcmtlci5jb2xvcnMiKS5nZXQoKSksYS5fcGllbGF5ZXIuc2VsZWN0QWxsKCJnLnRyYWNlIikucmVtb3ZlKCkpOnUudHJhY2VJcyhELCJjYXJ0ZXNpYW4iKSYmbChELCJtYXJrZXIuY29sb3JzIikuc2V0KGwoRCwibWFya2VyLmNvbG9yIikuZ2V0KCkpfX1lbHNle3ZhciBYPWEuX3NpemUsVz1xLm9yaWVudCxRPSJ0b3AiPT09V3x8ImJvdHRvbSI9PT1XO2lmKCJ0aGlja25lc3Ntb2RlIj09PWope3ZhciBKPVE/WC5oOlgudztMKFUrInRoaWNrbmVzcyIscS50aGlja25lc3MqKCJmcmFjdGlvbiI9PT1FPzEvSjpKKSxuKX1lbHNle3ZhciAkPVE/WC53OlguaDtMKFUrImxlbiIscS5sZW4qKCJmcmFjdGlvbiI9PT1FPzEvJDokKSxuKX19eFtPXVtuXT1OKFIpO2lmKC0xIT09WyJzd2FweHkiLCJzd2FweHlheGVzIiwib3JpZW50YXRpb24iLCJvcmllbnRhdGlvbmF4ZXMiXS5pbmRleE9mKE8pKXtpZigib3JpZW50YXRpb24iPT09Tyl7ei5zZXQoRSk7dmFyIEs9RC54JiYhRC55PyJoIjoidiI7aWYoKHouZ2V0KCl8fEspPT09UC5vcmllbnRhdGlvbiljb250aW51ZX1lbHNlIm9yaWVudGF0aW9uYXhlcyI9PT1PJiYoRC5vcmllbnRhdGlvbj17djoiaCIsaDoidiJ9W1Aub3JpZW50YXRpb25dKTtULnN3YXBYWURhdGEoRCksbS5jYWxjPW0uY2xlYXJBeGlzVHlwZXM9ITB9ZWxzZS0xIT09ZC5kYXRhQXJyYXlDb250YWluZXJzLmluZGV4T2Yoei5wYXJ0c1swXSk/KFQubWFuYWdlQXJyYXlDb250YWluZXJzKHosRSx4KSxtLmNhbGM9ITApOihJP0kuYXJyYXlPayYmIXUudHJhY2VJcyhQLCJyZWdsIikmJihvLmlzQXJyYXlPclR5cGVkQXJyYXkoRSl8fG8uaXNBcnJheU9yVHlwZWRBcnJheShSKSk/bS5jYWxjPSEwOk0udXBkYXRlKG0sSSk6bS5jYWxjPSEwLHouc2V0KEUpKX19aWYoLTEhPT1bInN3YXB4eWF4ZXMiLCJvcmllbnRhdGlvbmF4ZXMiXS5pbmRleE9mKE8pJiZoLnN3YXAoZSxyKSwib3JpZW50YXRpb25heGVzIj09PU8pe3ZhciBlZT1sKGUubGF5b3V0LCJob3Zlcm1vZGUiKSx0ZT1lZS5nZXQoKTsieCI9PT10ZT9lZS5zZXQoInkiKToieSI9PT10ZT9lZS5zZXQoIngiKToieCB1bmlmaWVkIj09PXRlP2VlLnNldCgieSB1bmlmaWVkIik6InkgdW5pZmllZCI9PT10ZSYmZWUuc2V0KCJ4IHVuaWZpZWQiKX1pZigtMSE9PVsib3JpZW50YXRpb24iLCJ0eXBlIl0uaW5kZXhPZihPKSl7Zm9yKHY9W10sbj0wO248ci5sZW5ndGg7bisrKXt2YXIgcmU9c1tyW25dXTt1LnRyYWNlSXMocmUsImNhcnRlc2lhbiIpJiYoXyhyZS54YXhpc3x8IngiKSxfKHJlLnlheGlzfHwieSIpKX1MKHYubWFwKHcpLCEwLDApLEwodi5tYXAoayksWzAsMV0sMCl9fWVsc2Ugej1wKGUubGF5b3V0LE8ucmVwbGFjZSgiTEFZT1VUIiwiIikpLHhbT109W04oei5nZXQoKSldLHouc2V0KEFycmF5LmlzQXJyYXkoRik/RlswXTpGKSxtLmNhbGM9ITB9cmV0dXJuKG0uY2FsY3x8bS5wbG90KSYmKG0uZnVsbFJlcGxvdD0hMCkse2ZsYWdzOm0sdW5kb2l0OngscmVkb2l0OnksdHJhY2VzOnIsZXZlbnREYXRhOm8uZXh0ZW5kRGVlcE5vQXJyYXlzKFtdLFtnLHJdKX19ZnVuY3Rpb24gVihlKXt2YXIgdCxyLG4sYT1vLmNvdW50ZXJSZWdleCgiYXhpcyIsIi50aXRsZSIsITEsITEpLGk9L2NvbG9yYmFyXC50aXRsZSQvLGw9T2JqZWN0LmtleXMoZSk7Zm9yKHQ9MDt0PGwubGVuZ3RoO3QrKylyPWxbdF0sbj1lW3JdLCJ0aXRsZSIhPT1yJiYhYS50ZXN0KHIpJiYhaS50ZXN0KHIpfHwic3RyaW5nIiE9dHlwZW9mIG4mJiJudW1iZXIiIT10eXBlb2Ygbj9yLmluZGV4T2YoInRpdGxlZm9udCIpPi0xP3MocixyLnJlcGxhY2UoInRpdGxlZm9udCIsInRpdGxlLmZvbnQiKSk6ci5pbmRleE9mKCJ0aXRsZXBvc2l0aW9uIik+LTE/cyhyLHIucmVwbGFjZSgidGl0bGVwb3NpdGlvbiIsInRpdGxlLnBvc2l0aW9uIikpOnIuaW5kZXhPZigidGl0bGVzaWRlIik+LTE/cyhyLHIucmVwbGFjZSgidGl0bGVzaWRlIiwidGl0bGUuc2lkZSIpKTpyLmluZGV4T2YoInRpdGxlb2Zmc2V0Iik+LTEmJnMocixyLnJlcGxhY2UoInRpdGxlb2Zmc2V0IiwidGl0bGUub2Zmc2V0IikpOnMocixyLnJlcGxhY2UoInRpdGxlIiwidGl0bGUudGV4dCIpKTtmdW5jdGlvbiBzKHQscil7ZVtyXT1lW3RdLGRlbGV0ZSBlW3RdfX1mdW5jdGlvbiBVKGUsdCxyKXtpZihlPW8uZ2V0R3JhcGhEaXYoZSksVC5jbGVhclByb21pc2VRdWV1ZShlKSxlLmZyYW1ld29yayYmZS5mcmFtZXdvcmsuaXNQb2xhcilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGUpO3ZhciBuPXt9O2lmKCJzdHJpbmciPT10eXBlb2YgdCluW3RdPXI7ZWxzZXtpZighby5pc1BsYWluT2JqZWN0KHQpKXJldHVybiBvLndhcm4oIlJlbGF5b3V0IGZhaWwuIix0LHIpLFByb21pc2UucmVqZWN0KCk7bj1vLmV4dGVuZEZsYXQoe30sdCl9T2JqZWN0LmtleXMobikubGVuZ3RoJiYoZS5jaGFuZ2VkPSEwKTt2YXIgYT1XKGUsbiksaT1hLmZsYWdzO2kuY2FsYyYmKGUuY2FsY2RhdGE9dm9pZCAwKTt2YXIgbD1bZC5wcmV2aW91c1Byb21pc2VzXTtpLmxheW91dFJlcGxvdD9sLnB1c2goay5sYXlvdXRSZXBsb3QpOk9iamVjdC5rZXlzKG4pLmxlbmd0aCYmKHEoZSxpLGEpfHxkLnN1cHBseURlZmF1bHRzKGUpLGkubGVnZW5kJiZsLnB1c2goay5kb0xlZ2VuZCksaS5sYXlvdXRzdHlsZSYmbC5wdXNoKGsubGF5b3V0U3R5bGVzKSxpLmF4cmFuZ2UmJkcobCxhLnJhbmdlc0FsdGVyZWQpLGkudGlja3MmJmwucHVzaChrLmRvVGlja3NSZWxheW91dCksaS5tb2RlYmFyJiZsLnB1c2goay5kb01vZGVCYXIpLGkuY2FtZXJhJiZsLnB1c2goay5kb0NhbWVyYSksaS5jb2xvcmJhcnMmJmwucHVzaChrLmRvQ29sb3JCYXJzKSxsLnB1c2goUykpLGwucHVzaChkLnJlaG92ZXIsZC5yZWRyYWcpLGMuYWRkKGUsVSxbZSxhLnVuZG9pdF0sVSxbZSxhLnJlZG9pdF0pO3ZhciBzPW8uc3luY09yQXN5bmMobCxlKTtyZXR1cm4gcyYmcy50aGVufHwocz1Qcm9taXNlLnJlc29sdmUoZSkpLHMudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gZS5lbWl0KCJwbG90bHlfcmVsYXlvdXQiLGEuZXZlbnREYXRhKSxlfSkpfWZ1bmN0aW9uIHEoZSx0LHIpe3ZhciBuPWUuX2Z1bGxMYXlvdXQ7aWYoIXQuYXhyYW5nZSlyZXR1cm4hMTtmb3IodmFyIGEgaW4gdClpZigiYXhyYW5nZSIhPT1hJiZ0W2FdKXJldHVybiExO2Zvcih2YXIgaSBpbiByLnJhbmdlc0FsdGVyZWQpe3ZhciBvPWguaWQybmFtZShpKSxsPWUubGF5b3V0W29dLHM9bltvXTtpZihzLmF1dG9yYW5nZT1sLmF1dG9yYW5nZSxsLnJhbmdlJiYocy5yYW5nZT1sLnJhbmdlLnNsaWNlKCkpLHMuY2xlYW5SYW5nZSgpLHMuX21hdGNoR3JvdXApZm9yKHZhciBjIGluIHMuX21hdGNoR3JvdXApaWYoYyE9PWkpe3ZhciB1PW5baC5pZDJuYW1lKGMpXTt1LmF1dG9yYW5nZT1zLmF1dG9yYW5nZSx1LnJhbmdlPXMucmFuZ2Uuc2xpY2UoKSx1Ll9pbnB1dC5yYW5nZT1zLnJhbmdlLnNsaWNlKCl9fXJldHVybiEwfWZ1bmN0aW9uIEcoZSx0KXt2YXIgcj10P2Z1bmN0aW9uKGUpe3ZhciByPVtdLG49ITA7Zm9yKHZhciBhIGluIHQpe3ZhciBpPWguZ2V0RnJvbUlkKGUsYSk7aWYoci5wdXNoKGEpLC0xIT09KGkudGlja2xhYmVscG9zaXRpb258fCIiKS5pbmRleE9mKCJpbnNpZGUiKSYmaS5fYW5jaG9yQXhpcyYmci5wdXNoKGkuX2FuY2hvckF4aXMuX2lkKSxpLl9tYXRjaEdyb3VwKWZvcih2YXIgbyBpbiBpLl9tYXRjaEdyb3VwKXRbb118fHIucHVzaChvKTtpLmF1dG9tYXJnaW4mJihuPSExKX1yZXR1cm4gaC5kcmF3KGUscix7c2tpcFRpdGxlOm59KX06ZnVuY3Rpb24oZSl7cmV0dXJuIGguZHJhdyhlLCJyZWRyYXciKX07ZS5wdXNoKGIsay5kb0F1dG9SYW5nZUFuZENvbnN0cmFpbnRzLHIsay5kcmF3RGF0YSxrLmZpbmFsRHJhdyl9dmFyIFo9L15beHl6XWF4aXNbMC05XSpcLnJhbmdlKFxbWzB8MV1cXSk/JC8sWT0vXlt4eXpdYXhpc1swLTldKlwuYXV0b3JhbmdlJC8sWD0vXlt4eXpdYXhpc1swLTldKlwuZG9tYWluKFxbWzB8MV1cXSk/JC87ZnVuY3Rpb24gVyhlLHQpe3ZhciByLG4sYSxpPWUubGF5b3V0LHM9ZS5fZnVsbExheW91dCxjPXMuX2d1aUVkaXRpbmcsZD1IKHMuX3ByZUdVSSxjKSxwPU9iamVjdC5rZXlzKHQpLGc9aC5saXN0KGUpLHY9by5leHRlbmREZWVwQWxsKHt9LHQpLG09e307Zm9yKFYodCkscD1PYmplY3Qua2V5cyh0KSxuPTA7bjxwLmxlbmd0aDtuKyspaWYoMD09PXBbbl0uaW5kZXhPZigiYWxsYXhlcyIpKXtmb3IoYT0wO2E8Zy5sZW5ndGg7YSsrKXt2YXIgeT1nW2FdLl9pZC5zdWJzdHIoMSkseD0tMSE9PXkuaW5kZXhPZigic2NlbmUiKT95KyIuIjoiIixiPXBbbl0ucmVwbGFjZSgiYWxsYXhlcyIseCtnW2FdLl9uYW1lKTt0W2JdfHwodFtiXT10W3Bbbl1dKX1kZWxldGUgdFtwW25dXX12YXIgXz1NLmxheW91dEZsYWdzKCksaz17fSxMPXt9O2Z1bmN0aW9uIFMoZSxyKXtpZihBcnJheS5pc0FycmF5KGUpKWUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7UyhlLHIpfSkpO2Vsc2UgaWYoIShlIGluIHQpJiYhVC5oYXNQYXJlbnQodCxlKSl7dmFyIG49ZChpLGUpO2UgaW4gTHx8KExbZV09TihuLmdldCgpKSksdm9pZCAwIT09ciYmbi5zZXQocil9fXZhciBDLE89e307ZnVuY3Rpb24gRChlKXt2YXIgdD1oLm5hbWUyaWQoZS5zcGxpdCgiLiIpWzBdKTtyZXR1cm4gT1t0XT0xLHR9Zm9yKHZhciBQIGluIHQpe2lmKFQuaGFzUGFyZW50KHQsUCkpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3Qgc2V0ICIrUCsiIGFuZCBhIHBhcmVudCBhdHRyaWJ1dGUgc2ltdWx0YW5lb3VzbHkiKTtmb3IodmFyIHo9ZChpLFApLFI9dFtQXSxFPXoucGFydHMubGVuZ3RoLTE7RT4wJiYic3RyaW5nIiE9dHlwZW9mIHoucGFydHNbRV07KUUtLTt2YXIgST16LnBhcnRzW0VdLEY9ei5wYXJ0c1tFLTFdKyIuIitJLGo9ei5wYXJ0cy5zbGljZSgwLEUpLmpvaW4oIi4iKSxCPWwoZS5sYXlvdXQsaikuZ2V0KCksVT1sKHMsaikuZ2V0KCkscT16LmdldCgpO2lmKHZvaWQgMCE9PVIpe2tbUF09UixMW1BdPSJyZXZlcnNlIj09PUk/UjpOKHEpO3ZhciBHPWYuZ2V0TGF5b3V0VmFsT2JqZWN0KHMsei5wYXJ0cyk7aWYoRyYmRy5pbXBsaWVkRWRpdHMmJm51bGwhPT1SKWZvcih2YXIgVyBpbiBHLmltcGxpZWRFZGl0cylTKG8ucmVsYXRpdmVBdHRyKFAsVyksRy5pbXBsaWVkRWRpdHNbV10pO2lmKC0xIT09WyJ3aWR0aCIsImhlaWdodCJdLmluZGV4T2YoUCkpaWYoUil7UygiYXV0b3NpemUiLG51bGwpO3ZhciBKPSJoZWlnaHQiPT09UD8id2lkdGgiOiJoZWlnaHQiO1MoSixzW0pdKX1lbHNlIHNbUF09ZS5faW5pdGlhbEF1dG9TaXplW1BdO2Vsc2UgaWYoImF1dG9zaXplIj09PVApUygid2lkdGgiLFI/bnVsbDpzLndpZHRoKSxTKCJoZWlnaHQiLFI/bnVsbDpzLmhlaWdodCk7ZWxzZSBpZihGLm1hdGNoKFopKUQoRiksbChzLGorIi5faW5wdXRSYW5nZSIpLnNldChudWxsKTtlbHNlIGlmKEYubWF0Y2goWSkpe0QoRiksbChzLGorIi5faW5wdXRSYW5nZSIpLnNldChudWxsKTt2YXIgJD1sKHMsaikuZ2V0KCk7JC5faW5wdXREb21haW4mJigkLl9pbnB1dC5kb21haW49JC5faW5wdXREb21haW4uc2xpY2UoKSl9ZWxzZSBGLm1hdGNoKFgpJiZsKHMsaisiLl9pbnB1dERvbWFpbiIpLnNldChudWxsKTtpZigidHlwZSI9PT1JKXtDPUI7dmFyIEs9ImxpbmVhciI9PT1VLnR5cGUmJiJsb2ciPT09UixlZT0ibG9nIj09PVUudHlwZSYmImxpbmVhciI9PT1SO2lmKEt8fGVlKXtpZihDJiZDLnJhbmdlKWlmKFUuYXV0b3JhbmdlKUsmJihDLnJhbmdlPUMucmFuZ2VbMV0+Qy5yYW5nZVswXT9bMSwyXTpbMiwxXSk7ZWxzZXt2YXIgdGU9Qy5yYW5nZVswXSxyZT1DLnJhbmdlWzFdO0s/KHRlPD0wJiZyZTw9MCYmUyhqKyIuYXV0b3JhbmdlIiwhMCksdGU8PTA/dGU9cmUvMWU2OnJlPD0wJiYocmU9dGUvMWU2KSxTKGorIi5yYW5nZVswXSIsTWF0aC5sb2codGUpL01hdGguTE4xMCksUyhqKyIucmFuZ2VbMV0iLE1hdGgubG9nKHJlKS9NYXRoLkxOMTApKTooUyhqKyIucmFuZ2VbMF0iLE1hdGgucG93KDEwLHRlKSksUyhqKyIucmFuZ2VbMV0iLE1hdGgucG93KDEwLHJlKSkpfWVsc2UgUyhqKyIuYXV0b3JhbmdlIiwhMCk7QXJyYXkuaXNBcnJheShzLl9zdWJwbG90cy5wb2xhcikmJnMuX3N1YnBsb3RzLnBvbGFyLmxlbmd0aCYmc1t6LnBhcnRzWzBdXSYmInJhZGlhbGF4aXMiPT09ei5wYXJ0c1sxXSYmZGVsZXRlIHNbei5wYXJ0c1swXV0uX3N1YnBsb3Qudmlld0luaXRpYWxbInJhZGlhbGF4aXMucmFuZ2UiXSx1LmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMiLCJjb252ZXJ0Q29vcmRzIikoZSxVLFIsUyksdS5nZXRDb21wb25lbnRNZXRob2QoImltYWdlcyIsImNvbnZlcnRDb29yZHMiKShlLFUsUixTKX1lbHNlIFMoaisiLmF1dG9yYW5nZSIsITApLFMoaisiLnJhbmdlIixudWxsKTtsKHMsaisiLl9pbnB1dFJhbmdlIikuc2V0KG51bGwpfWVsc2UgaWYoSS5tYXRjaChBKSl7dmFyIG5lPWwocyxQKS5nZXQoKSxhZT0oUnx8e30pLnR5cGU7YWUmJiItIiE9PWFlfHwoYWU9ImxpbmVhciIpLHUuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImNvbnZlcnRDb29yZHMiKShlLG5lLGFlLFMpLHUuZ2V0Q29tcG9uZW50TWV0aG9kKCJpbWFnZXMiLCJjb252ZXJ0Q29vcmRzIikoZSxuZSxhZSxTKX12YXIgaWU9dy5jb250YWluZXJBcnJheU1hdGNoKFApO2lmKGllKXtyPWllLmFycmF5LG49aWUuaW5kZXg7dmFyIG9lPWllLnByb3BlcnR5LGxlPUd8fHtlZGl0VHlwZToiY2FsYyJ9OyIiIT09biYmIiI9PT1vZSYmKHcuaXNBZGRWYWwoUik/TFtQXT1udWxsOncuaXNSZW1vdmVWYWwoUik/TFtQXT0obChpLHIpLmdldCgpfHxbXSlbbl06by53YXJuKCJ1bnJlY29nbml6ZWQgZnVsbCBvYmplY3QgdmFsdWUiLHQpKSxNLnVwZGF0ZShfLGxlKSxtW3JdfHwobVtyXT17fSk7dmFyIHNlPW1bcl1bbl07c2V8fChzZT1tW3JdW25dPXt9KSxzZVtvZV09UixkZWxldGUgdFtQXX1lbHNlInJldmVyc2UiPT09ST8oQi5yYW5nZT9CLnJhbmdlLnJldmVyc2UoKTooUyhqKyIuYXV0b3JhbmdlIiwhMCksQi5yYW5nZT1bMSwwXSksVS5hdXRvcmFuZ2U/Xy5jYWxjPSEwOl8ucGxvdD0hMCk6KHMuX2hhcygic2NhdHRlci1saWtlIikmJnMuX2hhcygicmVnbCIpJiYiZHJhZ21vZGUiPT09UCYmKCJsYXNzbyI9PT1SfHwic2VsZWN0Ij09PVIpJiYibGFzc28iIT09cSYmInNlbGVjdCIhPT1xfHxzLl9oYXMoImdsMmQiKT9fLnBsb3Q9ITA6Rz9NLnVwZGF0ZShfLEcpOl8uY2FsYz0hMCx6LnNldChSKSl9fWZvcihyIGluIG0pe3cuYXBwbHlDb250YWluZXJBcnJheUNoYW5nZXMoZSxkKGksciksbVtyXSxfLGQpfHwoXy5wbG90PSEwKX1mb3IodmFyIGNlIGluIE8pe3ZhciB1ZT0oQz1oLmdldEZyb21JZChlLGNlKSkmJkMuX2NvbnN0cmFpbnRHcm91cDtpZih1ZSlmb3IodmFyIGZlIGluIF8uY2FsYz0hMCx1ZSlPW2ZlXXx8KGguZ2V0RnJvbUlkKGUsZmUpLl9jb25zdHJhaW50U2hyaW5rYWJsZT0hMCl9cmV0dXJuKFEoZSl8fHQuaGVpZ2h0fHx0LndpZHRoKSYmKF8ucGxvdD0hMCksKF8ucGxvdHx8Xy5jYWxjKSYmKF8ubGF5b3V0UmVwbG90PSEwKSx7ZmxhZ3M6XyxyYW5nZXNBbHRlcmVkOk8sdW5kb2l0OkwscmVkb2l0OmssZXZlbnREYXRhOnZ9fWZ1bmN0aW9uIFEoZSl7dmFyIHQ9ZS5fZnVsbExheW91dCxyPXQud2lkdGgsbj10LmhlaWdodDtyZXR1cm4gZS5sYXlvdXQuYXV0b3NpemUmJmQucGxvdEF1dG9TaXplKGUsZS5sYXlvdXQsdCksdC53aWR0aCE9PXJ8fHQuaGVpZ2h0IT09bn1mdW5jdGlvbiBKKGUsdCxuLGEpe2lmKGU9by5nZXRHcmFwaERpdihlKSxULmNsZWFyUHJvbWlzZVF1ZXVlKGUpLGUuZnJhbWV3b3JrJiZlLmZyYW1ld29yay5pc1BvbGFyKXJldHVybiBQcm9taXNlLnJlc29sdmUoZSk7by5pc1BsYWluT2JqZWN0KHQpfHwodD17fSksby5pc1BsYWluT2JqZWN0KG4pfHwobj17fSksT2JqZWN0LmtleXModCkubGVuZ3RoJiYoZS5jaGFuZ2VkPSEwKSxPYmplY3Qua2V5cyhuKS5sZW5ndGgmJihlLmNoYW5nZWQ9ITApO3ZhciBpPVQuY29lcmNlVHJhY2VJbmRpY2VzKGUsYSksbD1CKGUsby5leHRlbmRGbGF0KHt9LHQpLGkpLHM9bC5mbGFncyx1PVcoZSxvLmV4dGVuZEZsYXQoe30sbikpLGY9dS5mbGFnczsocy5jYWxjfHxmLmNhbGMpJiYoZS5jYWxjZGF0YT12b2lkIDApLHMuY2xlYXJBeGlzVHlwZXMmJlQuY2xlYXJBeGlzVHlwZXMoZSxpLG4pO3ZhciBwPVtdO2YubGF5b3V0UmVwbG90P3AucHVzaChrLmxheW91dFJlcGxvdCk6cy5mdWxsUmVwbG90P3AucHVzaChyLnBsb3QpOihwLnB1c2goZC5wcmV2aW91c1Byb21pc2VzKSxxKGUsZix1KXx8ZC5zdXBwbHlEZWZhdWx0cyhlKSxzLnN0eWxlJiZwLnB1c2goay5kb1RyYWNlU3R5bGUpLChzLmNvbG9yYmFyc3x8Zi5jb2xvcmJhcnMpJiZwLnB1c2goay5kb0NvbG9yQmFycyksZi5sZWdlbmQmJnAucHVzaChrLmRvTGVnZW5kKSxmLmxheW91dHN0eWxlJiZwLnB1c2goay5sYXlvdXRTdHlsZXMpLGYuYXhyYW5nZSYmRyhwLHUucmFuZ2VzQWx0ZXJlZCksZi50aWNrcyYmcC5wdXNoKGsuZG9UaWNrc1JlbGF5b3V0KSxmLm1vZGViYXImJnAucHVzaChrLmRvTW9kZUJhciksZi5jYW1lcmEmJnAucHVzaChrLmRvQ2FtZXJhKSxwLnB1c2goUykpLHAucHVzaChkLnJlaG92ZXIsZC5yZWRyYWcpLGMuYWRkKGUsSixbZSxsLnVuZG9pdCx1LnVuZG9pdCxsLnRyYWNlc10sSixbZSxsLnJlZG9pdCx1LnJlZG9pdCxsLnRyYWNlc10pO3ZhciBoPW8uc3luY09yQXN5bmMocCxlKTtyZXR1cm4gaCYmaC50aGVufHwoaD1Qcm9taXNlLnJlc29sdmUoZSkpLGgudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gZS5lbWl0KCJwbG90bHlfdXBkYXRlIix7ZGF0YTpsLmV2ZW50RGF0YSxsYXlvdXQ6dS5ldmVudERhdGF9KSxlfSkpfWZ1bmN0aW9uICQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3QuX2Z1bGxMYXlvdXQuX2d1aUVkaXRpbmc9ITA7dmFyIHI9ZS5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuIHQuX2Z1bGxMYXlvdXQuX2d1aUVkaXRpbmc9ITEscn19dmFyIEs9W3twYXR0ZXJuOi9eaGlkZGVubGFiZWxzLyxhdHRyOiJsZWdlbmQudWlyZXZpc2lvbiJ9LHtwYXR0ZXJuOi9eKCh4fHkpYXhpc1xkKilcLigoYXV0byk/cmFuZ2V8dGl0bGVcLnRleHQpL30se3BhdHRlcm46L2F4aXNcZCpcLnNob3dzcGlrZXMkLyxhdHRyOiJtb2RlYmFyLnVpcmV2aXNpb24ifSx7cGF0dGVybjovKGhvdmVyfGRyYWcpbW9kZSQvLGF0dHI6Im1vZGViYXIudWlyZXZpc2lvbiJ9LHtwYXR0ZXJuOi9eKHNjZW5lXGQqKVwuY2FtZXJhL30se3BhdHRlcm46L14oZ2VvXGQqKVwuKHByb2plY3Rpb258Y2VudGVyfGZpdGJvdW5kcykvfSx7cGF0dGVybjovXih0ZXJuYXJ5XGQqXC5bYWJjXWF4aXMpXC4obWlufHRpdGxlXC50ZXh0KSQvfSx7cGF0dGVybjovXihwb2xhclxkKlwucmFkaWFsYXhpcylcLigoYXV0byk/cmFuZ2V8YW5nbGV8dGl0bGVcLnRleHQpL30se3BhdHRlcm46L14ocG9sYXJcZCpcLmFuZ3VsYXJheGlzKVwucm90YXRpb24vfSx7cGF0dGVybjovXihtYXBib3hcZCopXC4oY2VudGVyfHpvb218YmVhcmluZ3xwaXRjaCkvfSx7cGF0dGVybjovXmxlZ2VuZFwuKHh8eSkkLyxhdHRyOiJlZGl0cmV2aXNpb24ifSx7cGF0dGVybjovXihzaGFwZXN8YW5ub3RhdGlvbnMpLyxhdHRyOiJlZGl0cmV2aXNpb24ifSx7cGF0dGVybjovXnRpdGxlXC50ZXh0JC8sYXR0cjoiZWRpdHJldmlzaW9uIn1dLGVlPVt7cGF0dGVybjovXnNlbGVjdGVkcG9pbnRzJC8sYXR0cjoic2VsZWN0aW9ucmV2aXNpb24ifSx7cGF0dGVybjovKF58dmFsdWVcLil2aXNpYmxlJC8sYXR0cjoibGVnZW5kLnVpcmV2aXNpb24ifSx7cGF0dGVybjovXmRpbWVuc2lvbnNcW1xkK1xdXC5jb25zdHJhaW50cmFuZ2UvfSx7cGF0dGVybjovXm5vZGVcLih4fHl8Z3JvdXBzKS99LHtwYXR0ZXJuOi9ebGV2ZWwkL30se3BhdHRlcm46LyhefHZhbHVlXC4pbmFtZSQvfSx7cGF0dGVybjovY29sb3JiYXJcLnRpdGxlXC50ZXh0JC99LHtwYXR0ZXJuOi9jb2xvcmJhclwuKHh8eSkkLyxhdHRyOiJlZGl0cmV2aXNpb24ifV07ZnVuY3Rpb24gdGUoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXSxhPWUubWF0Y2gobi5wYXR0ZXJuKTtpZihhKXJldHVybntoZWFkOmFbMV0sYXR0cjpuLmF0dHJ9fX1mdW5jdGlvbiByZShlLHQpe3ZhciByPWwodCxlKS5nZXQoKTtpZih2b2lkIDAhPT1yKXJldHVybiByO3ZhciBuPWUuc3BsaXQoIi4iKTtmb3Iobi5wb3AoKTtuLmxlbmd0aD4xOylpZihuLnBvcCgpLHZvaWQgMCE9PShyPWwodCxuLmpvaW4oIi4iKSsiLnVpcmV2aXNpb24iKS5nZXQoKSkpcmV0dXJuIHI7cmV0dXJuIHQudWlyZXZpc2lvbn1mdW5jdGlvbiBuZShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWlmKHRbcl0uX2Z1bGxJbnB1dC51aWQ9PT1lKXJldHVybiByO3JldHVybi0xfWZ1bmN0aW9uIGFlKGUsdCxyKXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKylpZih0W25dLnVpZD09PWUpcmV0dXJuIG47cmV0dXJuIXRbcl18fHRbcl0udWlkPy0xOnJ9ZnVuY3Rpb24gaWUoZSx0KXt2YXIgcj1vLmlzUGxhaW5PYmplY3QoZSksbj1BcnJheS5pc0FycmF5KGUpO3JldHVybiByfHxuPyhyJiZvLmlzUGxhaW5PYmplY3QodCl8fG4mJkFycmF5LmlzQXJyYXkodCkpJiZKU09OLnN0cmluZ2lmeShlKT09PUpTT04uc3RyaW5naWZ5KHQpOmU9PT10fWZ1bmN0aW9uIG9lKGUsdCxyLG4pe3ZhciBhLGkscyxjPW4uZ2V0VmFsT2JqZWN0LHU9bi5mbGFncyxmPW4uaW1tdXRhYmxlLGQ9bi5pbkFycmF5LHA9bi5hcnJheUluZGV4O2Z1bmN0aW9uIGgoKXt2YXIgZT1hLmVkaXRUeXBlO2QmJi0xIT09ZS5pbmRleE9mKCJhcnJheWRyYXciKT9vLnB1c2hVbmlxdWUodS5hcnJheXNbZF0scCk6KE0udXBkYXRlKHUsYSksIm5vbmUiIT09ZSYmdS5uQ2hhbmdlcysrLG4udHJhbnNpdGlvbiYmYS5hbmltJiZ1Lm5DaGFuZ2VzQW5pbSsrLChaLnRlc3Qocyl8fFkudGVzdChzKSkmJih1LnJhbmdlc0FsdGVyZWRbclswXV09MSksWC50ZXN0KHMpJiZsKHQsIl9pbnB1dERvbWFpbiIpLnNldChudWxsKSwiZGF0YXJldmlzaW9uIj09PWkmJih1Lm5ld0RhdGFSZXZpc2lvbj0xKSl9ZnVuY3Rpb24gZyhlKXtyZXR1cm4iZGF0YV9hcnJheSI9PT1lLnZhbFR5cGV8fGUuYXJyYXlPa31mb3IoaSBpbiBlKXtpZih1LmNhbGMmJiFuLnRyYW5zaXRpb24pcmV0dXJuO3ZhciB2PWVbaV0sbT10W2ldLHk9ci5jb25jYXQoaSk7aWYocz15LmpvaW4oIi4iKSwiXyIhPT1pLmNoYXJBdCgwKSYmImZ1bmN0aW9uIiE9dHlwZW9mIHYmJnYhPT1tKXtpZigoInRpY2swIj09PWl8fCJkdGljayI9PT1pKSYmImdlbyIhPT1yWzBdKXt2YXIgeD10LnRpY2ttb2RlO2lmKCJhdXRvIj09PXh8fCJhcnJheSI9PT14fHwheCljb250aW51ZX1pZigoInJhbmdlIiE9PWl8fCF0LmF1dG9yYW5nZSkmJigiem1pbiIhPT1pJiYiem1heCIhPT1pfHwiY29udG91cmNhcnBldCIhPT10LnR5cGUpJiYoYT1jKHkpKSYmKCFhLl9jb21wYXJlQXNKU09OfHxKU09OLnN0cmluZ2lmeSh2KSE9PUpTT04uc3RyaW5naWZ5KG0pKSl7dmFyIGIsXz1hLnZhbFR5cGUsdz1nKGEpLFQ9QXJyYXkuaXNBcnJheSh2KSxrPUFycmF5LmlzQXJyYXkobSk7aWYoVCYmayl7dmFyIEE9Il9pbnB1dF8iK2ksTD1lW0FdLFM9dFtBXTtpZihBcnJheS5pc0FycmF5KEwpJiZMPT09Uyljb250aW51ZX1pZih2b2lkIDA9PT1tKXcmJlQ/dS5jYWxjPSEwOmgoKTtlbHNlIGlmKGEuX2lzTGlua2VkVG9BcnJheSl7dmFyIEM9W10sTz0hMTtkfHwodS5hcnJheXNbaV09Qyk7dmFyIEQ9TWF0aC5taW4odi5sZW5ndGgsbS5sZW5ndGgpLFA9TWF0aC5tYXgodi5sZW5ndGgsbS5sZW5ndGgpO2lmKEQhPT1QKXtpZigiYXJyYXlkcmF3IiE9PWEuZWRpdFR5cGUpe2goKTtjb250aW51ZX1PPSEwfWZvcihiPTA7YjxEO2IrKylvZSh2W2JdLG1bYl0seS5jb25jYXQoYiksby5leHRlbmRGbGF0KHtpbkFycmF5OmksYXJyYXlJbmRleDpifSxuKSk7aWYoTylmb3IoYj1EO2I8UDtiKyspQy5wdXNoKGIpfWVsc2UhXyYmby5pc1BsYWluT2JqZWN0KHYpP29lKHYsbSx5LG4pOnc/VCYmaz8oZiYmKHUuY2FsYz0hMCksKGZ8fG4ubmV3RGF0YVJldmlzaW9uKSYmaCgpKTpUIT09az91LmNhbGM9ITA6aCgpOlQmJmsmJnYubGVuZ3RoPT09bS5sZW5ndGgmJlN0cmluZyh2KT09PVN0cmluZyhtKXx8aCgpfX19Zm9yKGkgaW4gdClpZighKGkgaW4gZSkmJiJfIiE9PWkuY2hhckF0KDApJiYiZnVuY3Rpb24iIT10eXBlb2YgdFtpXSl7aWYoZyhhPWMoci5jb25jYXQoaSkpKSYmQXJyYXkuaXNBcnJheSh0W2ldKSlyZXR1cm4gdm9pZCh1LmNhbGM9ITApO2goKX19ZnVuY3Rpb24gbGUoZSl7dmFyIHQ9ZS5fZnVsbExheW91dCxyPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoIW8uZXF1YWxEb21SZWN0cyhyLHQuX2xhc3RCQm94KSl7dmFyIG49dC5faW52VHJhbnNmb3JtPW8uaW52ZXJzZVRyYW5zZm9ybU1hdHJpeChvLmdldEZ1bGxUcmFuc2Zvcm1NYXRyaXgoZSkpO3QuX2ludlNjYWxlWD1NYXRoLnNxcnQoblswXVswXSpuWzBdWzBdK25bMF1bMV0qblswXVsxXStuWzBdWzJdKm5bMF1bMl0pLHQuX2ludlNjYWxlWT1NYXRoLnNxcnQoblsxXVswXSpuWzFdWzBdK25bMV1bMV0qblsxXVsxXStuWzFdWzJdKm5bMV1bMl0pLHQuX2xhc3RCQm94PXJ9fWZ1bmN0aW9uIHNlKGUpe3ZhciB0PW4uc2VsZWN0KGUpLHI9ZS5fZnVsbExheW91dDtpZihyLl9jYWxjSW52ZXJzZVRyYW5zZm9ybT1sZSxyLl9jYWxjSW52ZXJzZVRyYW5zZm9ybShlKSxyLl9jb250YWluZXI9dC5zZWxlY3RBbGwoIi5wbG90LWNvbnRhaW5lciIpLmRhdGEoWzBdKSxyLl9jb250YWluZXIuZW50ZXIoKS5pbnNlcnQoImRpdiIsIjpmaXJzdC1jaGlsZCIpLmNsYXNzZWQoInBsb3QtY29udGFpbmVyIiwhMCkuY2xhc3NlZCgicGxvdGx5IiwhMCksci5fcGFwZXJkaXY9ci5fY29udGFpbmVyLnNlbGVjdEFsbCgiLnN2Zy1jb250YWluZXIiKS5kYXRhKFswXSksci5fcGFwZXJkaXYuZW50ZXIoKS5hcHBlbmQoImRpdiIpLmNsYXNzZWQoInVzZXItc2VsZWN0LW5vbmUiLCEwKS5jbGFzc2VkKCJzdmctY29udGFpbmVyIiwhMCkuc3R5bGUoInBvc2l0aW9uIiwicmVsYXRpdmUiKSxyLl9nbGNvbnRhaW5lcj1yLl9wYXBlcmRpdi5zZWxlY3RBbGwoIi5nbC1jb250YWluZXIiKS5kYXRhKFt7fV0pLHIuX2dsY29udGFpbmVyLmVudGVyKCkuYXBwZW5kKCJkaXYiKS5jbGFzc2VkKCJnbC1jb250YWluZXIiLCEwKSxyLl9wYXBlcmRpdi5zZWxlY3RBbGwoIi5tYWluLXN2ZyIpLnJlbW92ZSgpLHIuX3BhcGVyZGl2LnNlbGVjdCgiLm1vZGViYXItY29udGFpbmVyIikucmVtb3ZlKCksci5fcGFwZXI9ci5fcGFwZXJkaXYuaW5zZXJ0KCJzdmciLCI6Zmlyc3QtY2hpbGQiKS5jbGFzc2VkKCJtYWluLXN2ZyIsITApLHIuX3RvcHBhcGVyPXIuX3BhcGVyZGl2LmFwcGVuZCgic3ZnIikuY2xhc3NlZCgibWFpbi1zdmciLCEwKSxyLl9tb2RlYmFyZGl2PXIuX3BhcGVyZGl2LmFwcGVuZCgiZGl2IiksZGVsZXRlIHIuX21vZGVCYXIsci5faG92ZXJwYXBlcj1yLl9wYXBlcmRpdi5hcHBlbmQoInN2ZyIpLmNsYXNzZWQoIm1haW4tc3ZnIiwhMCksIXIuX3VpZCl7dmFyIGE9e307bi5zZWxlY3RBbGwoImRlZnMiKS5lYWNoKChmdW5jdGlvbigpe3RoaXMuaWQmJihhW3RoaXMuaWQuc3BsaXQoIi0iKVsxXV09MSl9KSksci5fdWlkPW8ucmFuZHN0cihhKX1yLl9wYXBlcmRpdi5zZWxlY3RBbGwoIi5tYWluLXN2ZyIpLmF0dHIoeS5zdmdBdHRycyksci5fZGVmcz1yLl9wYXBlci5hcHBlbmQoImRlZnMiKS5hdHRyKCJpZCIsImRlZnMtIityLl91aWQpLHIuX2NsaXBzPXIuX2RlZnMuYXBwZW5kKCJnIikuY2xhc3NlZCgiY2xpcHMiLCEwKSxyLl90b3BkZWZzPXIuX3RvcHBhcGVyLmFwcGVuZCgiZGVmcyIpLmF0dHIoImlkIiwidG9wZGVmcy0iK3IuX3VpZCksci5fdG9wY2xpcHM9ci5fdG9wZGVmcy5hcHBlbmQoImciKS5jbGFzc2VkKCJjbGlwcyIsITApLHIuX2JnTGF5ZXI9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiYmdsYXllciIsITApLHIuX2RyYWdnZXJzPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImRyYWdsYXllciIsITApO3ZhciBpPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxheWVyLWJlbG93IiwhMCk7ci5faW1hZ2VMb3dlckxheWVyPWkuYXBwZW5kKCJnIikuY2xhc3NlZCgiaW1hZ2VsYXllciIsITApLHIuX3NoYXBlTG93ZXJMYXllcj1pLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNoYXBlbGF5ZXIiLCEwKSxyLl9jYXJ0ZXNpYW5sYXllcj1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJjYXJ0ZXNpYW5sYXllciIsITApLHIuX3BvbGFybGF5ZXI9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgicG9sYXJsYXllciIsITApLHIuX3Rlcm5hcnlsYXllcj1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJ0ZXJuYXJ5bGF5ZXIiLCEwKSxyLl9nZW9sYXllcj1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJnZW9sYXllciIsITApLHIuX2Z1bm5lbGFyZWFsYXllcj1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJmdW5uZWxhcmVhbGF5ZXIiLCEwKSxyLl9waWVsYXllcj1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJwaWVsYXllciIsITApLHIuX3RyZWVtYXBsYXllcj1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJ0cmVlbWFwbGF5ZXIiLCEwKSxyLl9zdW5idXJzdGxheWVyPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoInN1bmJ1cnN0bGF5ZXIiLCEwKSxyLl9pbmRpY2F0b3JsYXllcj1yLl90b3BwYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJpbmRpY2F0b3JsYXllciIsITApLHIuX2dsaW1hZ2VzPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImdsaW1hZ2VzIiwhMCk7dmFyIGw9ci5fdG9wcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgibGF5ZXItYWJvdmUiLCEwKTtyLl9pbWFnZVVwcGVyTGF5ZXI9bC5hcHBlbmQoImciKS5jbGFzc2VkKCJpbWFnZWxheWVyIiwhMCksci5fc2hhcGVVcHBlckxheWVyPWwuYXBwZW5kKCJnIikuY2xhc3NlZCgic2hhcGVsYXllciIsITApLHIuX2luZm9sYXllcj1yLl90b3BwYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJpbmZvbGF5ZXIiLCEwKSxyLl9tZW51bGF5ZXI9ci5fdG9wcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgibWVudWxheWVyIiwhMCksci5fem9vbWxheWVyPXIuX3RvcHBhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoInpvb21sYXllciIsITApLHIuX2hvdmVybGF5ZXI9ci5faG92ZXJwYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJob3ZlcmxheWVyIiwhMCksci5fbW9kZWJhcmRpdi5jbGFzc2VkKCJtb2RlYmFyLWNvbnRhaW5lciIsITApLnN0eWxlKCJwb3NpdGlvbiIsImFic29sdXRlIikuc3R5bGUoInRvcCIsIjBweCIpLnN0eWxlKCJyaWdodCIsIjBweCIpLGUuZW1pdCgicGxvdGx5X2ZyYW1ld29yayIpfXIuYW5pbWF0ZT1mdW5jdGlvbihlLHQscil7aWYoZT1vLmdldEdyYXBoRGl2KGUpLCFvLmlzUGxvdERpdihlKSl0aHJvdyBuZXcgRXJyb3IoIlRoaXMgZWxlbWVudCBpcyBub3QgYSBQbG90bHkgcGxvdDogIitlKyIuIEl0J3MgbGlrZWx5IHRoYXQgeW91J3ZlIGZhaWxlZCB0byBjcmVhdGUgYSBwbG90IGJlZm9yZSBhbmltYXRpbmcgaXQuIEZvciBtb3JlIGRldGFpbHMsIHNlZSBodHRwczovL3Bsb3RseS5jb20vamF2YXNjcmlwdC9hbmltYXRpb25zLyIpO3ZhciBuPWUuX3RyYW5zaXRpb25EYXRhO24uX2ZyYW1lUXVldWV8fChuLl9mcmFtZVF1ZXVlPVtdKTt2YXIgYT0ocj1kLnN1cHBseUFuaW1hdGlvbkRlZmF1bHRzKHIpKS50cmFuc2l0aW9uLGk9ci5mcmFtZTtmdW5jdGlvbiBsKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGEpP2U+PWEubGVuZ3RoP2FbMF06YVtlXTphfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoaSk/ZT49aS5sZW5ndGg/aVswXTppW2VdOml9ZnVuY3Rpb24gYyhlLHQpe3ZhciByPTA7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoZSYmKytyPT09dClyZXR1cm4gZSgpfX1yZXR1cm4gdm9pZCAwPT09bi5fZnJhbWVXYWl0aW5nQ250JiYobi5fZnJhbWVXYWl0aW5nQ250PTApLG5ldyBQcm9taXNlKChmdW5jdGlvbihpLHUpe2Z1bmN0aW9uIGYoKXtuLl9jdXJyZW50RnJhbWUmJm4uX2N1cnJlbnRGcmFtZS5vbkNvbXBsZXRlJiZuLl9jdXJyZW50RnJhbWUub25Db21wbGV0ZSgpO3ZhciB0PW4uX2N1cnJlbnRGcmFtZT1uLl9mcmFtZVF1ZXVlLnNoaWZ0KCk7aWYodCl7dmFyIHI9dC5uYW1lP3QubmFtZS50b1N0cmluZygpOm51bGw7ZS5fZnVsbExheW91dC5fY3VycmVudEZyYW1lPXIsbi5fbGFzdEZyYW1lQXQ9RGF0ZS5ub3coKSxuLl90aW1lVG9OZXh0PXQuZnJhbWVPcHRzLmR1cmF0aW9uLGQudHJhbnNpdGlvbihlLHQuZnJhbWUuZGF0YSx0LmZyYW1lLmxheW91dCxULmNvZXJjZVRyYWNlSW5kaWNlcyhlLHQuZnJhbWUudHJhY2VzKSx0LmZyYW1lT3B0cyx0LnRyYW5zaXRpb25PcHRzKS50aGVuKChmdW5jdGlvbigpe3Qub25Db21wbGV0ZSYmdC5vbkNvbXBsZXRlKCl9KSksZS5lbWl0KCJwbG90bHlfYW5pbWF0aW5nZnJhbWUiLHtuYW1lOnIsZnJhbWU6dC5mcmFtZSxhbmltYXRpb246e2ZyYW1lOnQuZnJhbWVPcHRzLHRyYW5zaXRpb246dC50cmFuc2l0aW9uT3B0c319KX1lbHNlIGUuZW1pdCgicGxvdGx5X2FuaW1hdGVkIiksd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKG4uX2FuaW1hdGlvblJhZiksbi5fYW5pbWF0aW9uUmFmPW51bGx9ZnVuY3Rpb24gcCgpe2UuZW1pdCgicGxvdGx5X2FuaW1hdGluZyIpLG4uX2xhc3RGcmFtZUF0PS0xLzAsbi5fdGltZVRvTmV4dD0wLG4uX3J1bm5pbmdUcmFuc2l0aW9ucz0wLG4uX2N1cnJlbnRGcmFtZT1udWxsO3ZhciB0PWZ1bmN0aW9uKCl7bi5fYW5pbWF0aW9uUmFmPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodCksRGF0ZS5ub3coKS1uLl9sYXN0RnJhbWVBdD5uLl90aW1lVG9OZXh0JiZmKCl9O3QoKX12YXIgaCxnLHY9MDtmdW5jdGlvbiBtKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGEpP3Y+PWEubGVuZ3RoP2UudHJhbnNpdGlvbk9wdHM9YVt2XTplLnRyYW5zaXRpb25PcHRzPWFbMF06ZS50cmFuc2l0aW9uT3B0cz1hLHYrKyxlfXZhciB5PVtdLHg9bnVsbD09dCxiPUFycmF5LmlzQXJyYXkodCk7aWYoIXgmJiFiJiZvLmlzUGxhaW5PYmplY3QodCkpeS5wdXNoKHt0eXBlOiJvYmplY3QiLGRhdGE6bShvLmV4dGVuZEZsYXQoe30sdCkpfSk7ZWxzZSBpZih4fHwtMSE9PVsic3RyaW5nIiwibnVtYmVyIl0uaW5kZXhPZih0eXBlb2YgdCkpZm9yKGg9MDtoPG4uX2ZyYW1lcy5sZW5ndGg7aCsrKShnPW4uX2ZyYW1lc1toXSkmJih4fHxTdHJpbmcoZy5ncm91cCk9PT1TdHJpbmcodCkpJiZ5LnB1c2goe3R5cGU6ImJ5bmFtZSIsbmFtZTpTdHJpbmcoZy5uYW1lKSxkYXRhOm0oe25hbWU6Zy5uYW1lfSl9KTtlbHNlIGlmKGIpZm9yKGg9MDtoPHQubGVuZ3RoO2grKyl7dmFyIF89dFtoXTstMSE9PVsibnVtYmVyIiwic3RyaW5nIl0uaW5kZXhPZih0eXBlb2YgXyk/KF89U3RyaW5nKF8pLHkucHVzaCh7dHlwZToiYnluYW1lIixuYW1lOl8sZGF0YTptKHtuYW1lOl99KX0pKTpvLmlzUGxhaW5PYmplY3QoXykmJnkucHVzaCh7dHlwZToib2JqZWN0IixkYXRhOm0oby5leHRlbmRGbGF0KHt9LF8pKX0pfWZvcihoPTA7aDx5Lmxlbmd0aDtoKyspaWYoImJ5bmFtZSI9PT0oZz15W2hdKS50eXBlJiYhbi5fZnJhbWVIYXNoW2cuZGF0YS5uYW1lXSlyZXR1cm4gby53YXJuKCdhbmltYXRlIGZhaWx1cmU6IGZyYW1lIG5vdCBmb3VuZDogIicrZy5kYXRhLm5hbWUrJyInKSx2b2lkIHUoKTstMSE9PVsibmV4dCIsImltbWVkaWF0ZSJdLmluZGV4T2Yoci5tb2RlKSYmZnVuY3Rpb24oKXtpZigwIT09bi5fZnJhbWVRdWV1ZS5sZW5ndGgpe2Zvcig7bi5fZnJhbWVRdWV1ZS5sZW5ndGg7KXt2YXIgdD1uLl9mcmFtZVF1ZXVlLnBvcCgpO3Qub25JbnRlcnJ1cHQmJnQub25JbnRlcnJ1cHQoKX1lLmVtaXQoInBsb3RseV9hbmltYXRpb25pbnRlcnJ1cHRlZCIsW10pfX0oKSwicmV2ZXJzZSI9PT1yLmRpcmVjdGlvbiYmeS5yZXZlcnNlKCk7dmFyIHc9ZS5fZnVsbExheW91dC5fY3VycmVudEZyYW1lO2lmKHcmJnIuZnJvbWN1cnJlbnQpe3ZhciBrPS0xO2ZvcihoPTA7aDx5Lmxlbmd0aDtoKyspaWYoImJ5bmFtZSI9PT0oZz15W2hdKS50eXBlJiZnLm5hbWU9PT13KXtrPWg7YnJlYWt9aWYoaz4wJiZrPHkubGVuZ3RoLTEpe3ZhciBNPVtdO2ZvcihoPTA7aDx5Lmxlbmd0aDtoKyspZz15W2hdLCgiYnluYW1lIiE9PXlbaF0udHlwZXx8aD5rKSYmTS5wdXNoKGcpO3k9TX19eS5sZW5ndGg+MD9mdW5jdGlvbih0KXtpZigwIT09dC5sZW5ndGgpe2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgbztvPSJieW5hbWUiPT09dFthXS50eXBlP2QuY29tcHV0ZUZyYW1lKGUsdFthXS5uYW1lKTp0W2FdLmRhdGE7dmFyIGY9cyhhKSxoPWwoYSk7aC5kdXJhdGlvbj1NYXRoLm1pbihoLmR1cmF0aW9uLGYuZHVyYXRpb24pO3ZhciBnPXtmcmFtZTpvLG5hbWU6dFthXS5uYW1lLGZyYW1lT3B0czpmLHRyYW5zaXRpb25PcHRzOmh9O2E9PT10Lmxlbmd0aC0xJiYoZy5vbkNvbXBsZXRlPWMoaSwyKSxnLm9uSW50ZXJydXB0PXUpLG4uX2ZyYW1lUXVldWUucHVzaChnKX0iaW1tZWRpYXRlIj09PXIubW9kZSYmKG4uX2xhc3RGcmFtZUF0PS0xLzApLG4uX2FuaW1hdGlvblJhZnx8cCgpfX0oeSk6KGUuZW1pdCgicGxvdGx5X2FuaW1hdGVkIiksaSgpKX0pKX0sci5hZGRGcmFtZXM9ZnVuY3Rpb24oZSx0LHIpe2lmKGU9by5nZXRHcmFwaERpdihlKSxudWxsPT10KXJldHVybiBQcm9taXNlLnJlc29sdmUoKTtpZighby5pc1Bsb3REaXYoZSkpdGhyb3cgbmV3IEVycm9yKCJUaGlzIGVsZW1lbnQgaXMgbm90IGEgUGxvdGx5IHBsb3Q6ICIrZSsiLiBJdCdzIGxpa2VseSB0aGF0IHlvdSd2ZSBmYWlsZWQgdG8gY3JlYXRlIGEgcGxvdCBiZWZvcmUgYWRkaW5nIGZyYW1lcy4gRm9yIG1vcmUgZGV0YWlscywgc2VlIGh0dHBzOi8vcGxvdGx5LmNvbS9qYXZhc2NyaXB0L2FuaW1hdGlvbnMvIik7dmFyIG4sYSxpLGwscz1lLl90cmFuc2l0aW9uRGF0YS5fZnJhbWVzLHU9ZS5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaDtpZighQXJyYXkuaXNBcnJheSh0KSl0aHJvdyBuZXcgRXJyb3IoImFkZEZyYW1lcyBmYWlsdXJlOiBmcmFtZUxpc3QgbXVzdCBiZSBhbiBBcnJheSBvZiBmcmFtZSBkZWZpbml0aW9ucyIrdCk7dmFyIGY9cy5sZW5ndGgrMip0Lmxlbmd0aCxwPVtdLGg9e307Zm9yKG49dC5sZW5ndGgtMTtuPj0wO24tLSlpZihvLmlzUGxhaW5PYmplY3QodFtuXSkpe3ZhciBnPXRbbl0ubmFtZSx2PSh1W2ddfHxoW2ddfHx7fSkubmFtZSxtPXRbbl0ubmFtZSx5PXVbdl18fGhbdl07diYmbSYmIm51bWJlciI9PXR5cGVvZiBtJiZ5JiZMPDUmJihMKyssby53YXJuKCdhZGRGcmFtZXM6IG92ZXJ3cml0aW5nIGZyYW1lICInKyh1W3ZdfHxoW3ZdKS5uYW1lKyciIHdpdGggYSBmcmFtZSB3aG9zZSBuYW1lIG9mIHR5cGUgIm51bWJlciIgYWxzbyBlcXVhdGVzIHRvICInK3YrJyIuIFRoaXMgaXMgdmFsaWQgYnV0IG1heSBwb3RlbnRpYWxseSBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3Igc2luY2UgYWxsIHBsb3RseS5qcyBmcmFtZSBuYW1lcyBhcmUgc3RvcmVkIGludGVybmFsbHkgYXMgc3RyaW5ncy4nKSw1PT09TCYmby53YXJuKCJhZGRGcmFtZXM6IFRoaXMgQVBJIGNhbGwgaGFzIHlpZWxkZWQgdG9vIG1hbnkgb2YgdGhlc2Ugd2FybmluZ3MuIEZvciB0aGUgcmVzdCBvZiB0aGlzIGNhbGwsIGZ1cnRoZXIgd2FybmluZ3MgYWJvdXQgbnVtZXJpYyBmcmFtZSBuYW1lcyB3aWxsIGJlIHN1cHByZXNzZWQuIikpLGhbZ109e25hbWU6Z30scC5wdXNoKHtmcmFtZTpkLnN1cHBseUZyYW1lRGVmYXVsdHModFtuXSksaW5kZXg6ciYmdm9pZCAwIT09cltuXSYmbnVsbCE9PXJbbl0/cltuXTpmK259KX1wLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuaW5kZXg+dC5pbmRleD8tMTplLmluZGV4PHQuaW5kZXg/MTowfSkpO3ZhciB4PVtdLGI9W10sXz1zLmxlbmd0aDtmb3Iobj1wLmxlbmd0aC0xO24+PTA7bi0tKXtpZigibnVtYmVyIj09dHlwZW9mKGE9cFtuXS5mcmFtZSkubmFtZSYmby53YXJuKCJXYXJuaW5nOiBhZGRGcmFtZXMgYWNjZXB0cyBmcmFtZXMgd2l0aCBudW1lcmljIG5hbWVzLCBidXQgdGhlIG51bWJlcnMgYXJlaW1wbGljaXRseSBjYXN0IHRvIHN0cmluZ3MiKSwhYS5uYW1lKWZvcig7dVthLm5hbWU9ImZyYW1lICIrZS5fdHJhbnNpdGlvbkRhdGEuX2NvdW50ZXIrK107KTtpZih1W2EubmFtZV0pe2ZvcihpPTA7aTxzLmxlbmd0aCYmKHNbaV18fHt9KS5uYW1lIT09YS5uYW1lO2krKyk7eC5wdXNoKHt0eXBlOiJyZXBsYWNlIixpbmRleDppLHZhbHVlOmF9KSxiLnVuc2hpZnQoe3R5cGU6InJlcGxhY2UiLGluZGV4OmksdmFsdWU6c1tpXX0pfWVsc2UgbD1NYXRoLm1heCgwLE1hdGgubWluKHBbbl0uaW5kZXgsXykpLHgucHVzaCh7dHlwZToiaW5zZXJ0IixpbmRleDpsLHZhbHVlOmF9KSxiLnVuc2hpZnQoe3R5cGU6ImRlbGV0ZSIsaW5kZXg6bH0pLF8rK312YXIgdz1kLm1vZGlmeUZyYW1lcyxUPWQubW9kaWZ5RnJhbWVzLGs9W2UsYl0sTT1bZSx4XTtyZXR1cm4gYyYmYy5hZGQoZSx3LGssVCxNKSxkLm1vZGlmeUZyYW1lcyhlLHgpfSxyLmRlbGV0ZUZyYW1lcz1mdW5jdGlvbihlLHQpe2lmKGU9by5nZXRHcmFwaERpdihlKSwhby5pc1Bsb3REaXYoZSkpdGhyb3cgbmV3IEVycm9yKCJUaGlzIGVsZW1lbnQgaXMgbm90IGEgUGxvdGx5IHBsb3Q6ICIrZSk7dmFyIHIsbixhPWUuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXMsaT1bXSxsPVtdO2lmKCF0KWZvcih0PVtdLHI9MDtyPGEubGVuZ3RoO3IrKyl0LnB1c2gocik7Zm9yKCh0PXQuc2xpY2UoKSkuc29ydCgpLHI9dC5sZW5ndGgtMTtyPj0wO3ItLSluPXRbcl0saS5wdXNoKHt0eXBlOiJkZWxldGUiLGluZGV4Om59KSxsLnVuc2hpZnQoe3R5cGU6Imluc2VydCIsaW5kZXg6bix2YWx1ZTphW25dfSk7dmFyIHM9ZC5tb2RpZnlGcmFtZXMsdT1kLm1vZGlmeUZyYW1lcyxmPVtlLGxdLHA9W2UsaV07cmV0dXJuIGMmJmMuYWRkKGUscyxmLHUscCksZC5tb2RpZnlGcmFtZXMoZSxpKX0sci5hZGRUcmFjZXM9ZnVuY3Rpb24gZSh0LG4sYSl7dD1vLmdldEdyYXBoRGl2KHQpO3ZhciBpLGwscz1bXSx1PXIuZGVsZXRlVHJhY2VzLGY9ZSxkPVt0LHNdLHA9W3Qsbl07Zm9yKGZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhO2lmKCFBcnJheS5pc0FycmF5KGUuZGF0YSkpdGhyb3cgbmV3IEVycm9yKCJnZC5kYXRhIG11c3QgYmUgYW4gYXJyYXkuIik7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigidHJhY2VzIG11c3QgYmUgZGVmaW5lZC4iKTtmb3IoQXJyYXkuaXNBcnJheSh0KXx8KHQ9W3RdKSxuPTA7bjx0Lmxlbmd0aDtuKyspaWYoIm9iamVjdCIhPXR5cGVvZihhPXRbbl0pfHxBcnJheS5pc0FycmF5KGEpfHxudWxsPT09YSl0aHJvdyBuZXcgRXJyb3IoImFsbCB2YWx1ZXMgaW4gdHJhY2VzIGFycmF5IG11c3QgYmUgbm9uLWFycmF5IG9iamVjdHMiKTtpZigidW5kZWZpbmVkIj09dHlwZW9mIHJ8fEFycmF5LmlzQXJyYXkocil8fChyPVtyXSksInVuZGVmaW5lZCIhPXR5cGVvZiByJiZyLmxlbmd0aCE9PXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiaWYgaW5kaWNlcyBpcyBzcGVjaWZpZWQsIHRyYWNlcy5sZW5ndGggbXVzdCBlcXVhbCBpbmRpY2VzLmxlbmd0aCIpfSh0LG4sYSksQXJyYXkuaXNBcnJheShuKXx8KG49W25dKSxuPW4ubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gby5leHRlbmRGbGF0KHt9LGUpfSkpLFQuY2xlYW5EYXRhKG4pLGk9MDtpPG4ubGVuZ3RoO2krKyl0LmRhdGEucHVzaChuW2ldKTtmb3IoaT0wO2k8bi5sZW5ndGg7aSsrKXMucHVzaCgtbi5sZW5ndGgraSk7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBhKXJldHVybiBsPXIucmVkcmF3KHQpLGMuYWRkKHQsdSxkLGYscCksbDtBcnJheS5pc0FycmF5KGEpfHwoYT1bYV0pO3RyeXtSKHQscyxhKX1jYXRjaChlKXt0aHJvdyB0LmRhdGEuc3BsaWNlKHQuZGF0YS5sZW5ndGgtbi5sZW5ndGgsbi5sZW5ndGgpLGV9cmV0dXJuIGMuc3RhcnRTZXF1ZW5jZSh0KSxjLmFkZCh0LHUsZCxmLHApLGw9ci5tb3ZlVHJhY2VzKHQscyxhKSxjLnN0b3BTZXF1ZW5jZSh0KSxsfSxyLmRlbGV0ZVRyYWNlcz1mdW5jdGlvbiBlKHQsbil7dD1vLmdldEdyYXBoRGl2KHQpO3ZhciBhLGksbD1bXSxzPXIuYWRkVHJhY2VzLHU9ZSxmPVt0LGwsbl0sZD1bdCxuXTtpZigidW5kZWZpbmVkIj09dHlwZW9mIG4pdGhyb3cgbmV3IEVycm9yKCJpbmRpY2VzIG11c3QgYmUgYW4gaW50ZWdlciBvciBhcnJheSBvZiBpbnRlZ2Vycy4iKTtmb3IoQXJyYXkuaXNBcnJheShuKXx8KG49W25dKSx6KHQsbiwiaW5kaWNlcyIpLChuPVAobix0LmRhdGEubGVuZ3RoLTEpKS5zb3J0KG8uc29ydGVyRGVzKSxhPTA7YTxuLmxlbmd0aDthKz0xKWk9dC5kYXRhLnNwbGljZShuW2FdLDEpWzBdLGwucHVzaChpKTt2YXIgcD1yLnJlZHJhdyh0KTtyZXR1cm4gYy5hZGQodCxzLGYsdSxkKSxwfSxyLmV4dGVuZFRyYWNlcz1mdW5jdGlvbiBlKHQsbixhLGkpe2Z1bmN0aW9uIGwoZSx0LHIpe3ZhciBuLGE7aWYoby5pc1R5cGVkQXJyYXkoZSkpaWYocjwwKXt2YXIgaT1uZXcgZS5jb25zdHJ1Y3RvcigwKSxsPUkoZSx0KTtyPDA/KG49bCxhPWkpOihuPWksYT1sKX1lbHNlIGlmKG49bmV3IGUuY29uc3RydWN0b3IociksYT1uZXcgZS5jb25zdHJ1Y3RvcihlLmxlbmd0aCt0Lmxlbmd0aC1yKSxyPT09dC5sZW5ndGgpbi5zZXQodCksYS5zZXQoZSk7ZWxzZSBpZihyPHQubGVuZ3RoKXt2YXIgcz10Lmxlbmd0aC1yO24uc2V0KHQuc3ViYXJyYXkocykpLGEuc2V0KGUpLGEuc2V0KHQuc3ViYXJyYXkoMCxzKSxlLmxlbmd0aCl9ZWxzZXt2YXIgYz1yLXQubGVuZ3RoLHU9ZS5sZW5ndGgtYztuLnNldChlLnN1YmFycmF5KHUpKSxuLnNldCh0LGMpLGEuc2V0KGUuc3ViYXJyYXkoMCx1KSl9ZWxzZSBuPWUuY29uY2F0KHQpLGE9cj49MCYmcjxuLmxlbmd0aD9uLnNwbGljZSgwLG4ubGVuZ3RoLXIpOltdO3JldHVybltuLGFdfXZhciBzPUUodD1vLmdldEdyYXBoRGl2KHQpLG4sYSxpLGwpLHU9ci5yZWRyYXcodCksZj1bdCxzLnVwZGF0ZSxhLHMubWF4UG9pbnRzXTtyZXR1cm4gYy5hZGQodCxyLnByZXBlbmRUcmFjZXMsZixlLGFyZ3VtZW50cyksdX0sci5tb3ZlVHJhY2VzPWZ1bmN0aW9uIGUodCxuLGEpe3ZhciBpLGw9W10scz1bXSx1PWUsZj1lLGQ9W3Q9by5nZXRHcmFwaERpdih0KSxhLG5dLHA9W3QsbixhXTtpZihSKHQsbixhKSxuPUFycmF5LmlzQXJyYXkobik/bjpbbl0sInVuZGVmaW5lZCI9PXR5cGVvZiBhKWZvcihhPVtdLGk9MDtpPG4ubGVuZ3RoO2krKylhLnB1c2goLW4ubGVuZ3RoK2kpO2ZvcihhPUFycmF5LmlzQXJyYXkoYSk/YTpbYV0sbj1QKG4sdC5kYXRhLmxlbmd0aC0xKSxhPVAoYSx0LmRhdGEubGVuZ3RoLTEpLGk9MDtpPHQuZGF0YS5sZW5ndGg7aSsrKS0xPT09bi5pbmRleE9mKGkpJiZsLnB1c2godC5kYXRhW2ldKTtmb3IoaT0wO2k8bi5sZW5ndGg7aSsrKXMucHVzaCh7bmV3SW5kZXg6YVtpXSx0cmFjZTp0LmRhdGFbbltpXV19KTtmb3Iocy5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiBlLm5ld0luZGV4LXQubmV3SW5kZXh9KSksaT0wO2k8cy5sZW5ndGg7aSs9MSlsLnNwbGljZShzW2ldLm5ld0luZGV4LDAsc1tpXS50cmFjZSk7dC5kYXRhPWw7dmFyIGg9ci5yZWRyYXcodCk7cmV0dXJuIGMuYWRkKHQsdSxkLGYscCksaH0sci5wcmVwZW5kVHJhY2VzPWZ1bmN0aW9uIGUodCxuLGEsaSl7ZnVuY3Rpb24gbChlLHQscil7dmFyIG4sYTtpZihvLmlzVHlwZWRBcnJheShlKSlpZihyPD0wKXt2YXIgaT1uZXcgZS5jb25zdHJ1Y3RvcigwKSxsPUkodCxlKTtyPDA/KG49bCxhPWkpOihuPWksYT1sKX1lbHNlIGlmKG49bmV3IGUuY29uc3RydWN0b3IociksYT1uZXcgZS5jb25zdHJ1Y3RvcihlLmxlbmd0aCt0Lmxlbmd0aC1yKSxyPT09dC5sZW5ndGgpbi5zZXQodCksYS5zZXQoZSk7ZWxzZSBpZihyPHQubGVuZ3RoKXt2YXIgcz10Lmxlbmd0aC1yO24uc2V0KHQuc3ViYXJyYXkoMCxzKSksYS5zZXQodC5zdWJhcnJheShzKSksYS5zZXQoZSxzKX1lbHNle3ZhciBjPXItdC5sZW5ndGg7bi5zZXQodCksbi5zZXQoZS5zdWJhcnJheSgwLGMpLHQubGVuZ3RoKSxhLnNldChlLnN1YmFycmF5KGMpKX1lbHNlIG49dC5jb25jYXQoZSksYT1yPj0wJiZyPG4ubGVuZ3RoP24uc3BsaWNlKHIsbi5sZW5ndGgpOltdO3JldHVybltuLGFdfXZhciBzPUUodD1vLmdldEdyYXBoRGl2KHQpLG4sYSxpLGwpLHU9ci5yZWRyYXcodCksZj1bdCxzLnVwZGF0ZSxhLHMubWF4UG9pbnRzXTtyZXR1cm4gYy5hZGQodCxyLmV4dGVuZFRyYWNlcyxmLGUsYXJndW1lbnRzKSx1fSxyLm5ld1Bsb3Q9ZnVuY3Rpb24oZSx0LG4sYSl7cmV0dXJuIGU9by5nZXRHcmFwaERpdihlKSxkLmNsZWFuUGxvdChbXSx7fSxlLl9mdWxsRGF0YXx8W10sZS5fZnVsbExheW91dHx8e30pLGQucHVyZ2UoZSksci5wbG90KGUsdCxuLGEpfSxyLnBsb3Q9ZnVuY3Rpb24oZSx0LGEsaSl7dmFyIGw7aWYoZT1vLmdldEdyYXBoRGl2KGUpLHMuaW5pdChlKSxvLmlzUGxhaW5PYmplY3QodCkpe3ZhciBjPXQ7dD1jLmRhdGEsYT1jLmxheW91dCxpPWMuY29uZmlnLGw9Yy5mcmFtZXN9aWYoITE9PT1zLnRyaWdnZXJIYW5kbGVyKGUsInBsb3RseV9iZWZvcmVwbG90IixbdCxhLGldKSlyZXR1cm4gUHJvbWlzZS5yZWplY3QoKTt0fHxhfHxvLmlzUGxvdERpdihlKXx8by53YXJuKCJDYWxsaW5nIFBsb3RseS5wbG90IGFzIGlmIHJlZHJhd2luZyBidXQgdGhpcyBjb250YWluZXIgZG9lc24ndCB5ZXQgaGF2ZSBhIHBsb3QuIixlKSxEKGUsaSksYXx8KGE9e30pLG4uc2VsZWN0KGUpLmNsYXNzZWQoImpzLXBsb3RseS1wbG90IiwhMCksZy5tYWtlVGVzdGVyKCksQXJyYXkuaXNBcnJheShlLl9wcm9taXNlcyl8fChlLl9wcm9taXNlcz1bXSk7dmFyIGY9MD09PShlLmRhdGF8fFtdKS5sZW5ndGgmJkFycmF5LmlzQXJyYXkodCk7QXJyYXkuaXNBcnJheSh0KSYmKFQuY2xlYW5EYXRhKHQpLGY/ZS5kYXRhPXQ6ZS5kYXRhLnB1c2guYXBwbHkoZS5kYXRhLHQpLGUuZW1wdHk9ITEpLGUubGF5b3V0JiYhZnx8KGUubGF5b3V0PVQuY2xlYW5MYXlvdXQoYSkpLGQuc3VwcGx5RGVmYXVsdHMoZSk7dmFyIHY9ZS5fZnVsbExheW91dCx5PXYuX2hhcygiY2FydGVzaWFuIik7aWYoIXYuX2hhcygicG9sYXIiKSYmdCYmdFswXSYmdFswXS5yKXJldHVybiBvLmxvZygiTGVnYWN5IHBvbGFyIGNoYXJ0cyBhcmUgZGVwcmVjYXRlZCEiKSxmdW5jdGlvbihlLHQscil7dmFyIGE9bi5zZWxlY3QoZSkuc2VsZWN0QWxsKCIucGxvdC1jb250YWluZXIiKS5kYXRhKFswXSk7YS5lbnRlcigpLmluc2VydCgiZGl2IiwiOmZpcnN0LWNoaWxkIikuY2xhc3NlZCgicGxvdC1jb250YWluZXIgcGxvdGx5IiwhMCk7dmFyIGk9YS5zZWxlY3RBbGwoIi5zdmctY29udGFpbmVyIikuZGF0YShbMF0pO2kuZW50ZXIoKS5hcHBlbmQoImRpdiIpLmNsYXNzZWQoInN2Zy1jb250YWluZXIiLCEwKS5zdHlsZSgicG9zaXRpb24iLCJyZWxhdGl2ZSIpLGkuaHRtbCgiIiksdCYmKGUuZGF0YT10KTtyJiYoZS5sYXlvdXQ9cik7cC5tYW5hZ2VyLmZpbGxMYXlvdXQoZSksaS5zdHlsZSh7d2lkdGg6ZS5fZnVsbExheW91dC53aWR0aCsicHgiLGhlaWdodDplLl9mdWxsTGF5b3V0LmhlaWdodCsicHgifSksZS5mcmFtZXdvcms9cC5tYW5hZ2VyLmZyYW1ld29yayhlKSxlLmZyYW1ld29yayh7ZGF0YTplLmRhdGEsbGF5b3V0OmUubGF5b3V0fSxpLm5vZGUoKSksZS5mcmFtZXdvcmsuc2V0VW5kb1BvaW50KCk7dmFyIGw9ZS5mcmFtZXdvcmsuc3ZnKCkscz0xLGM9ZS5fZnVsbExheW91dC50aXRsZT9lLl9mdWxsTGF5b3V0LnRpdGxlLnRleHQ6IiI7IiIhPT1jJiZjfHwocz0wKTt2YXIgdT1mdW5jdGlvbigpe3RoaXMuY2FsbCh4LmNvbnZlcnRUb1RzcGFucyxlKX0sZj1sLnNlbGVjdCgiLnRpdGxlLWdyb3VwIHRleHQiKS5jYWxsKHUpO2lmKGUuX2NvbnRleHQuZWRpdHMudGl0bGVUZXh0KXt2YXIgaD1vLl8oZSwiQ2xpY2sgdG8gZW50ZXIgUGxvdCB0aXRsZSIpO2MmJmMhPT1ofHwocz0uMixmLmF0dHIoeyJkYXRhLXVuZm9ybWF0dGVkIjpofSkudGV4dChoKS5zdHlsZSh7b3BhY2l0eTpzfSkub24oIm1vdXNlb3Zlci5vcGFjaXR5IiwoZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMTAwKS5zdHlsZSgib3BhY2l0eSIsMSl9KSkub24oIm1vdXNlb3V0Lm9wYWNpdHkiLChmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigxZTMpLnN0eWxlKCJvcGFjaXR5IiwwKX0pKSk7dmFyIGc9ZnVuY3Rpb24oKXt0aGlzLmNhbGwoeC5tYWtlRWRpdGFibGUse2dkOmV9KS5vbigiZWRpdCIsKGZ1bmN0aW9uKHQpe2UuZnJhbWV3b3JrKHtsYXlvdXQ6e3RpdGxlOnt0ZXh0OnR9fX0pLHRoaXMudGV4dCh0KS5jYWxsKHUpLHRoaXMuY2FsbChnKX0pKS5vbigiY2FuY2VsIiwoZnVuY3Rpb24oKXt2YXIgZT10aGlzLmF0dHIoImRhdGEtdW5mb3JtYXR0ZWQiKTt0aGlzLnRleHQoZSkuY2FsbCh1KX0pKX07Zi5jYWxsKGcpfXJldHVybiBlLl9jb250ZXh0LnNldEJhY2tncm91bmQoZSxlLl9mdWxsTGF5b3V0LnBhcGVyX2JnY29sb3IpLGQuYWRkTGlua3MoZSksUHJvbWlzZS5yZXNvbHZlKCl9KGUsdCxhKTt2Ll9yZXBsb3R0aW5nPSEwLChmfHx2Ll9zaG91bGRDcmVhdGVCZ0xheWVyKSYmKHNlKGUpLHYuX3Nob3VsZENyZWF0ZUJnTGF5ZXImJmRlbGV0ZSB2Ll9zaG91bGRDcmVhdGVCZ0xheWVyKSxlLmZyYW1ld29yayE9PXNlJiYoZS5mcmFtZXdvcms9c2Usc2UoZSkpLGcuaW5pdEdyYWRpZW50cyhlKSxmJiZoLnNhdmVTaG93U3Bpa2VJbml0aWFsKGUpO3ZhciBiPSFlLmNhbGNkYXRhfHxlLmNhbGNkYXRhLmxlbmd0aCE9PShlLl9mdWxsRGF0YXx8W10pLmxlbmd0aDtiJiZkLmRvQ2FsY2RhdGEoZSk7Zm9yKHZhciBfPTA7XzxlLmNhbGNkYXRhLmxlbmd0aDtfKyspZS5jYWxjZGF0YVtfXVswXS50cmFjZT1lLl9mdWxsRGF0YVtfXTtlLl9jb250ZXh0LnJlc3BvbnNpdmU/ZS5fcmVzcG9uc2l2ZUNoYXJ0SGFuZGxlcnx8KGUuX3Jlc3BvbnNpdmVDaGFydEhhbmRsZXI9ZnVuY3Rpb24oKXtvLmlzSGlkZGVuKGUpfHxkLnJlc2l6ZShlKX0sd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsZS5fcmVzcG9uc2l2ZUNoYXJ0SGFuZGxlcikpOm8uY2xlYXJSZXNwb25zaXZlKGUpO3ZhciB3PW8uZXh0ZW5kRmxhdCh7fSx2Ll9zaXplKSxNPTA7ZnVuY3Rpb24gQSgpe2lmKGQuY2xlYXJBdXRvTWFyZ2luSWRzKGUpLGsuZHJhd01hcmdpblB1c2hlcnMoZSksaC5hbGxvd0F1dG9NYXJnaW4oZSksdi5faGFzKCJwaWUiKSlmb3IodmFyIHQ9ZS5fZnVsbERhdGEscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdOyJwaWUiPT09bi50eXBlJiZuLmF1dG9tYXJnaW4mJmQuYWxsb3dBdXRvTWFyZ2luKGUsInBpZS4iK24udWlkKyIuYXV0b21hcmdpbiIpfXJldHVybiBkLmRvQXV0b01hcmdpbihlKSxkLnByZXZpb3VzUHJvbWlzZXMoZSl9ZnVuY3Rpb24gTCgpe2UuX3RyYW5zaXRpb25pbmd8fChrLmRvQXV0b1JhbmdlQW5kQ29uc3RyYWludHMoZSksZiYmaC5zYXZlUmFuZ2VJbml0aWFsKGUpLHUuZ2V0Q29tcG9uZW50TWV0aG9kKCJyYW5nZXNsaWRlciIsImNhbGNBdXRvcmFuZ2UiKShlKSl9dmFyIEM9W2QucHJldmlvdXNQcm9taXNlcyxmdW5jdGlvbigpe2lmKGwpcmV0dXJuIHIuYWRkRnJhbWVzKGUsbCl9LGZ1bmN0aW9uIHQoKXtmb3IodmFyIHI9di5fYmFzZVBsb3RNb2R1bGVzLG49MDtuPHIubGVuZ3RoO24rKylyW25dLmRyYXdGcmFtZXdvcmsmJnJbbl0uZHJhd0ZyYW1ld29yayhlKTtpZighdi5fZ2xjYW52YXMmJnYuX2hhcygiZ2wiKSYmKHYuX2dsY2FudmFzPXYuX2dsY29udGFpbmVyLnNlbGVjdEFsbCgiLmdsLWNhbnZhcyIpLmRhdGEoW3trZXk6ImNvbnRleHRMYXllciIsY29udGV4dDohMCxwaWNrOiExfSx7a2V5OiJmb2N1c0xheWVyIixjb250ZXh0OiExLHBpY2s6ITF9LHtrZXk6InBpY2tMYXllciIsY29udGV4dDohMSxwaWNrOiEwfV0sKGZ1bmN0aW9uKGUpe3JldHVybiBlLmtleX0pKSx2Ll9nbGNhbnZhcy5lbnRlcigpLmFwcGVuZCgiY2FudmFzIikuYXR0cigiY2xhc3MiLChmdW5jdGlvbihlKXtyZXR1cm4iZ2wtY2FudmFzIGdsLWNhbnZhcy0iK2Uua2V5LnJlcGxhY2UoIkxheWVyIiwiIil9KSkuc3R5bGUoe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOjAsbGVmdDowLG92ZXJmbG93OiJ2aXNpYmxlIiwicG9pbnRlci1ldmVudHMiOiJub25lIn0pKSx2Ll9nbGNhbnZhcyl7di5fZ2xjYW52YXMuYXR0cigid2lkdGgiLHYud2lkdGgpLmF0dHIoImhlaWdodCIsdi5oZWlnaHQpO3ZhciBhPXYuX2dsY2FudmFzLmRhdGEoKVswXS5yZWdsO2lmKGEmJihNYXRoLmZsb29yKHYud2lkdGgpIT09YS5fZ2wuZHJhd2luZ0J1ZmZlcldpZHRofHxNYXRoLmZsb29yKHYuaGVpZ2h0KSE9PWEuX2dsLmRyYXdpbmdCdWZmZXJIZWlnaHQpKXt2YXIgaT0iV2ViR0wgY29udGV4dCBidWZmZXIgYW5kIGNhbnZhcyBkaW1lbnNpb25zIGRvIG5vdCBtYXRjaCBkdWUgdG8gYnJvd3Nlci9XZWJHTCBidWcuIjtpZighTSlyZXR1cm4gby5sb2coaSsiIENsZWFyaW5nIGdyYXBoIGFuZCBwbG90dGluZyBhZ2Fpbi4iKSxkLmNsZWFuUGxvdChbXSx7fSxlLl9mdWxsRGF0YSx2KSxkLnN1cHBseURlZmF1bHRzKGUpLHY9ZS5fZnVsbExheW91dCxkLmRvQ2FsY2RhdGEoZSksTSsrLHQoKTtvLmVycm9yKGkpfX1yZXR1cm4iaCI9PT12Lm1vZGViYXIub3JpZW50YXRpb24/di5fbW9kZWJhcmRpdi5zdHlsZSgiaGVpZ2h0IixudWxsKS5zdHlsZSgid2lkdGgiLCIxMDAlIik6di5fbW9kZWJhcmRpdi5zdHlsZSgid2lkdGgiLG51bGwpLnN0eWxlKCJoZWlnaHQiLHYuaGVpZ2h0KyJweCIpLGQucHJldmlvdXNQcm9taXNlcyhlKX0sQSxmdW5jdGlvbigpe2lmKGQuZGlkTWFyZ2luQ2hhbmdlKHcsdi5fc2l6ZSkpcmV0dXJuIG8uc3luY09yQXN5bmMoW0Esay5sYXlvdXRTdHlsZXNdLGUpfV07eSYmQy5wdXNoKChmdW5jdGlvbigpe2lmKGIpcmV0dXJuIG8uc3luY09yQXN5bmMoW3UuZ2V0Q29tcG9uZW50TWV0aG9kKCJzaGFwZXMiLCJjYWxjQXV0b3JhbmdlIiksdS5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiY2FsY0F1dG9yYW5nZSIpLExdLGUpO0woKX0pKSxDLnB1c2goay5sYXlvdXRTdHlsZXMpLHkmJkMucHVzaCgoZnVuY3Rpb24oKXtyZXR1cm4gaC5kcmF3KGUsZj8iIjoicmVkcmF3Iil9KSwoZnVuY3Rpb24oZSl7ZS5fZnVsbExheW91dC5faW5zaWRlVGlja0xhYmVsc0F1dG9yYW5nZSYmVShlLGUuX2Z1bGxMYXlvdXQuX2luc2lkZVRpY2tMYWJlbHNBdXRvcmFuZ2UpLnRoZW4oKGZ1bmN0aW9uKCl7ZS5fZnVsbExheW91dC5faW5zaWRlVGlja0xhYmVsc0F1dG9yYW5nZT12b2lkIDB9KSl9KSksQy5wdXNoKGsuZHJhd0RhdGEsay5maW5hbERyYXcsbSxkLmFkZExpbmtzLGQucmVob3ZlcixkLnJlZHJhZyxkLmRvQXV0b01hcmdpbiwoZnVuY3Rpb24oZSl7ZS5fZnVsbExheW91dC5faW5zaWRlVGlja0xhYmVsc0F1dG9yYW5nZSYmZiYmaC5zYXZlUmFuZ2VJbml0aWFsKGUsITApfSksZC5wcmV2aW91c1Byb21pc2VzKTt2YXIgTz1vLnN5bmNPckFzeW5jKEMsZSk7cmV0dXJuIE8mJk8udGhlbnx8KE89UHJvbWlzZS5yZXNvbHZlKCkpLE8udGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gUyhlKSxlfSkpfSxyLnB1cmdlPWZ1bmN0aW9uKGUpe3ZhciB0PShlPW8uZ2V0R3JhcGhEaXYoZSkpLl9mdWxsTGF5b3V0fHx7fSxyPWUuX2Z1bGxEYXRhfHxbXTtyZXR1cm4gZC5jbGVhblBsb3QoW10se30scix0KSxkLnB1cmdlKGUpLHMucHVyZ2UoZSksdC5fY29udGFpbmVyJiZ0Ll9jb250YWluZXIucmVtb3ZlKCksZGVsZXRlIGUuX2NvbnRleHQsZX0sci5yZWFjdD1mdW5jdGlvbihlLHQsbixhKXt2YXIgaSxzO2U9by5nZXRHcmFwaERpdihlKSxULmNsZWFyUHJvbWlzZVF1ZXVlKGUpO3ZhciBjPWUuX2Z1bGxEYXRhLHA9ZS5fZnVsbExheW91dDtpZihvLmlzUGxvdERpdihlKSYmYyYmcCl7aWYoby5pc1BsYWluT2JqZWN0KHQpKXt2YXIgaD10O3Q9aC5kYXRhLG49aC5sYXlvdXQsYT1oLmNvbmZpZyxpPWguZnJhbWVzfXZhciBnPSExO2lmKGEpe3ZhciB2PW8uZXh0ZW5kRGVlcCh7fSxlLl9jb250ZXh0KTtlLl9jb250ZXh0PXZvaWQgMCxEKGUsYSksZz1mdW5jdGlvbiBlKHQscil7dmFyIG47Zm9yKG4gaW4gdClpZigiXyIhPT1uLmNoYXJBdCgwKSl7dmFyIGE9dFtuXSxpPXJbbl07aWYoYSE9PWkpaWYoby5pc1BsYWluT2JqZWN0KGEpJiZvLmlzUGxhaW5PYmplY3QoaSkpe2lmKGUoYSxpKSlyZXR1cm4hMH1lbHNle2lmKCFBcnJheS5pc0FycmF5KGEpfHwhQXJyYXkuaXNBcnJheShpKSlyZXR1cm4hMDtpZihhLmxlbmd0aCE9PWkubGVuZ3RoKXJldHVybiEwO2Zvcih2YXIgbD0wO2w8YS5sZW5ndGg7bCsrKWlmKGFbbF0hPT1pW2xdKXtpZighby5pc1BsYWluT2JqZWN0KGFbbF0pfHwhby5pc1BsYWluT2JqZWN0KGlbbF0pKXJldHVybiEwO2lmKGUoYVtsXSxpW2xdKSlyZXR1cm4hMH19fX0odixlLl9jb250ZXh0KX1lLmRhdGE9dHx8W10sVC5jbGVhbkRhdGEoZS5kYXRhKSxlLmxheW91dD1ufHx7fSxULmNsZWFuTGF5b3V0KGUubGF5b3V0KSxmdW5jdGlvbihlLHQscixuKXt2YXIgYSxpLHMsYyx1LGYsZCxwLGg9bi5fcHJlR1VJLGc9W10sdj17fTtmb3IoYSBpbiBoKXtpZih1PXRlKGEsSykpe2lmKGk9dS5hdHRyfHx1LmhlYWQrIi51aXJldmlzaW9uIiwoYz0ocz1sKG4saSkuZ2V0KCkpJiZyZShpLHQpKSYmYz09PXMmJihudWxsPT09KGY9aFthXSkmJihmPXZvaWQgMCksaWUocD0oZD1sKHQsYSkpLmdldCgpLGYpKSl7dm9pZCAwPT09cCYmImF1dG9yYW5nZSI9PT1hLnN1YnN0cihhLmxlbmd0aC05KSYmZy5wdXNoKGEuc3Vic3RyKDAsYS5sZW5ndGgtMTApKSxkLnNldChOKGwobixhKS5nZXQoKSkpO2NvbnRpbnVlfX1lbHNlIG8ud2FybigidW5yZWNvZ25pemVkIEdVSSBlZGl0OiAiK2EpO2RlbGV0ZSBoW2FdLCJyYW5nZVsiPT09YS5zdWJzdHIoYS5sZW5ndGgtOCw2KSYmKHZbYS5zdWJzdHIoMCxhLmxlbmd0aC05KV09MSl9Zm9yKHZhciBtPTA7bTxnLmxlbmd0aDttKyspe3ZhciB5PWdbbV07aWYodlt5XSl7dmFyIHg9bCh0LHkpLmdldCgpO3gmJmRlbGV0ZSB4LmF1dG9yYW5nZX19dmFyIGI9bi5fdHJhY2VQcmVHVUk7Zm9yKHZhciBfIGluIGIpe3ZhciB3LFQ9YltfXSxrPW51bGw7Zm9yKGEgaW4gVCl7aWYoIWspe3ZhciBNPW5lKF8scik7aWYoTTwwKXtkZWxldGUgYltfXTticmVha312YXIgQT1hZShfLGUsKHc9cltNXS5fZnVsbElucHV0KS5pbmRleCk7aWYoQTwwKXtkZWxldGUgYltfXTticmVha31rPWVbQV19aWYodT10ZShhLGVlKSl7aWYodS5hdHRyP2M9KHM9bChuLHUuYXR0cikuZ2V0KCkpJiZyZSh1LmF0dHIsdCk6KHM9dy51aXJldmlzaW9uLHZvaWQgMD09PShjPWsudWlyZXZpc2lvbikmJihjPXQudWlyZXZpc2lvbikpLGMmJmM9PT1zJiYobnVsbD09PShmPVRbYV0pJiYoZj12b2lkIDApLGllKHA9KGQ9bChrLGEpKS5nZXQoKSxmKSkpe2Quc2V0KE4obCh3LGEpLmdldCgpKSk7Y29udGludWV9fWVsc2Ugby53YXJuKCJ1bnJlY29nbml6ZWQgR1VJIGVkaXQ6ICIrYSsiIGluIHRyYWNlIHVpZCAiK18pO2RlbGV0ZSBUW2FdfX19KGUuZGF0YSxlLmxheW91dCxjLHApLGQuc3VwcGx5RGVmYXVsdHMoZSx7c2tpcFVwZGF0ZUNhbGM6ITB9KTt2YXIgbT1lLl9mdWxsRGF0YSx5PWUuX2Z1bGxMYXlvdXQseD12b2lkIDA9PT15LmRhdGFyZXZpc2lvbixiPXkudHJhbnNpdGlvbixfPWZ1bmN0aW9uKGUsdCxyLG4sYSl7dmFyIGk9TS5sYXlvdXRGbGFncygpO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIGYuZ2V0TGF5b3V0VmFsT2JqZWN0KHIsZSl9aS5hcnJheXM9e30saS5yYW5nZXNBbHRlcmVkPXt9LGkubkNoYW5nZXM9MCxpLm5DaGFuZ2VzQW5pbT0wLG9lKHQscixbXSx7Z2V0VmFsT2JqZWN0Om8sZmxhZ3M6aSxpbW11dGFibGU6bix0cmFuc2l0aW9uOmEsZ2Q6ZX0pLChpLnBsb3R8fGkuY2FsYykmJihpLmxheW91dFJlcGxvdD0hMCk7YSYmaS5uQ2hhbmdlcyYmaS5uQ2hhbmdlc0FuaW0mJihpLmFuaW09aS5uQ2hhbmdlcz09PWkubkNoYW5nZXNBbmltPyJhbGwiOiJzb21lIik7cmV0dXJuIGl9KGUscCx5LHgsYiksdz1fLm5ld0RhdGFSZXZpc2lvbixBPWZ1bmN0aW9uKGUsdCxyLG4sYSxpKXt2YXIgbz10Lmxlbmd0aD09PXIubGVuZ3RoO2lmKCFhJiYhbylyZXR1cm57ZnVsbFJlcGxvdDohMCxjYWxjOiEwfTt2YXIgbCxzLGM9TS50cmFjZUZsYWdzKCk7Yy5hcnJheXM9e30sYy5uQ2hhbmdlcz0wLGMubkNoYW5nZXNBbmltPTA7dmFyIHU9e2dldFZhbE9iamVjdDpmdW5jdGlvbihlKXt2YXIgdD1mLmdldFRyYWNlVmFsT2JqZWN0KHMsZSk7cmV0dXJuIXMuX21vZHVsZS5hbmltYXRhYmxlJiZ0LmFuaW0mJih0LmFuaW09ITEpLHR9LGZsYWdzOmMsaW1tdXRhYmxlOm4sdHJhbnNpdGlvbjphLG5ld0RhdGFSZXZpc2lvbjppLGdkOmV9LHA9e307Zm9yKGw9MDtsPHQubGVuZ3RoO2wrKylpZihyW2xdKXtpZihzPXJbbF0uX2Z1bGxJbnB1dCxkLmhhc01ha2VzRGF0YVRyYW5zZm9ybShzKSYmKHM9cltsXSkscFtzLnVpZF0pY29udGludWU7cFtzLnVpZF09MSxvZSh0W2xdLl9mdWxsSW5wdXQscyxbXSx1KX0oYy5jYWxjfHxjLnBsb3QpJiYoYy5mdWxsUmVwbG90PSEwKTthJiZjLm5DaGFuZ2VzJiZjLm5DaGFuZ2VzQW5pbSYmKGMuYW5pbT1jLm5DaGFuZ2VzPT09Yy5uQ2hhbmdlc0FuaW0mJm8/ImFsbCI6InNvbWUiKTtyZXR1cm4gY30oZSxjLG0seCxiLHcpO2lmKFEoZSkmJihfLmxheW91dFJlcGxvdD0hMCksQS5jYWxjfHxfLmNhbGMpe2UuY2FsY2RhdGE9dm9pZCAwO2Zvcih2YXIgTD1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh5KSxDPTA7QzxMLmxlbmd0aDtDKyspe3ZhciBPPUxbQ10sUD1PLnN1YnN0cmluZygwLDUpO2lmKCJ4YXhpcyI9PT1QfHwieWF4aXMiPT09UCl7dmFyIHo9eVtPXS5fZW1wdHlDYXRlZ29yaWVzO3omJnooKX19fWVsc2UgZC5zdXBwbHlEZWZhdWx0c1VwZGF0ZUNhbGMoZS5jYWxjZGF0YSxtKTt2YXIgUj1bXTtpZihpJiYoZS5fdHJhbnNpdGlvbkRhdGE9e30sZC5jcmVhdGVUcmFuc2l0aW9uRGF0YShlKSxSLnB1c2goKGZ1bmN0aW9uKCl7cmV0dXJuIHIuYWRkRnJhbWVzKGUsaSl9KSkpLHkudHJhbnNpdGlvbiYmIWcmJihBLmFuaW18fF8uYW5pbSkpXy50aWNrcyYmUi5wdXNoKGsuZG9UaWNrc1JlbGF5b3V0KSxkLmRvQ2FsY2RhdGEoZSksay5kb0F1dG9SYW5nZUFuZENvbnN0cmFpbnRzKGUpLFIucHVzaCgoZnVuY3Rpb24oKXtyZXR1cm4gZC50cmFuc2l0aW9uRnJvbVJlYWN0KGUsQSxfLHApfSkpO2Vsc2UgaWYoQS5mdWxsUmVwbG90fHxfLmxheW91dFJlcGxvdHx8ZyllLl9mdWxsTGF5b3V0Ll9za2lwRGVmYXVsdHM9ITAsUi5wdXNoKHIucGxvdCk7ZWxzZXtmb3IodmFyIEUgaW4gXy5hcnJheXMpe3ZhciBJPV8uYXJyYXlzW0VdO2lmKEkubGVuZ3RoKXt2YXIgRj11LmdldENvbXBvbmVudE1ldGhvZChFLCJkcmF3T25lIik7aWYoRiE9PW8ubm9vcClmb3IodmFyIEg9MDtIPEkubGVuZ3RoO0grKylGKGUsSVtIXSk7ZWxzZXt2YXIgaj11LmdldENvbXBvbmVudE1ldGhvZChFLCJkcmF3Iik7aWYoaj09PW8ubm9vcCl0aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBkcmF3IGNvbXBvbmVudHM6ICIrRSk7aihlKX19fVIucHVzaChkLnByZXZpb3VzUHJvbWlzZXMpLEEuc3R5bGUmJlIucHVzaChrLmRvVHJhY2VTdHlsZSksKEEuY29sb3JiYXJzfHxfLmNvbG9yYmFycykmJlIucHVzaChrLmRvQ29sb3JCYXJzKSxfLmxlZ2VuZCYmUi5wdXNoKGsuZG9MZWdlbmQpLF8ubGF5b3V0c3R5bGUmJlIucHVzaChrLmxheW91dFN0eWxlcyksXy5heHJhbmdlJiZHKFIpLF8udGlja3MmJlIucHVzaChrLmRvVGlja3NSZWxheW91dCksXy5tb2RlYmFyJiZSLnB1c2goay5kb01vZGVCYXIpLF8uY2FtZXJhJiZSLnB1c2goay5kb0NhbWVyYSksUi5wdXNoKFMpfVIucHVzaChkLnJlaG92ZXIsZC5yZWRyYWcpLChzPW8uc3luY09yQXN5bmMoUixlKSkmJnMudGhlbnx8KHM9UHJvbWlzZS5yZXNvbHZlKGUpKX1lbHNlIHM9ci5uZXdQbG90KGUsdCxuLGEpO3JldHVybiBzLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIGUuZW1pdCgicGxvdGx5X3JlYWN0Iix7ZGF0YTp0LGxheW91dDpufSksZX0pKX0sci5yZWRyYXc9ZnVuY3Rpb24oZSl7aWYoZT1vLmdldEdyYXBoRGl2KGUpLCFvLmlzUGxvdERpdihlKSl0aHJvdyBuZXcgRXJyb3IoIlRoaXMgZWxlbWVudCBpcyBub3QgYSBQbG90bHkgcGxvdDogIitlKTtyZXR1cm4gVC5jbGVhbkRhdGEoZS5kYXRhKSxULmNsZWFuTGF5b3V0KGUubGF5b3V0KSxlLmNhbGNkYXRhPXZvaWQgMCxyLnBsb3QoZSkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gZS5lbWl0KCJwbG90bHlfcmVkcmF3IiksZX0pKX0sci5yZWxheW91dD1VLHIucmVzdHlsZT1GLHIuc2V0UGxvdENvbmZpZz1mdW5jdGlvbihlKXtyZXR1cm4gby5leHRlbmRGbGF0KF8sZSl9LHIudXBkYXRlPUosci5fZ3VpUmVsYXlvdXQ9JChVKSxyLl9ndWlSZXN0eWxlPSQoRiksci5fZ3VpVXBkYXRlPSQoSiksci5fc3RvcmVEaXJlY3RHVUlFZGl0PWZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIG4gaW4gcil7aihuLGwoZSxuKS5nZXQoKSxyW25dLHQpfX19LHsiLi4vY29tcG9uZW50cy9jb2xvciI6NzUsIi4uL2NvbXBvbmVudHMvZHJhd2luZyI6OTcsIi4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjoxODIsIi4uL2xpYiI6MjAyLCIuLi9saWIvZXZlbnRzIjoxOTUsIi4uL2xpYi9xdWV1ZSI6MjE3LCIuLi9saWIvc3ZnX3RleHRfdXRpbHMiOjIyNCwiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjI0OCwiLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyI6MjU0LCIuLi9wbG90cy9jYXJ0ZXNpYW4vZ3JhcGhfaW50ZXJhY3QiOjI1NywiLi4vcGxvdHMvY2FydGVzaWFuL3NlbGVjdCI6MjY3LCIuLi9wbG90cy9wbG90cyI6MjgyLCIuLi9wbG90cy9wb2xhci9sZWdhY3kiOjI4NSwiLi4vcmVnaXN0cnkiOjI5MCwiLi9lZGl0X3R5cGVzIjoyMzAsIi4vaGVscGVycyI6MjMxLCIuL21hbmFnZV9hcnJheXMiOjIzMywiLi9wbG90X2NvbmZpZyI6MjM1LCIuL3Bsb3Rfc2NoZW1hIjoyMzYsIi4vc3Vicm91dGluZXMiOjIzOCxkMzo5LCJmYXN0LWlzbnVtZXJpYyI6MTEsImhhcy1ob3ZlciI6NDJ9XSwyMzU6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49e3N0YXRpY1Bsb3Q6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LHBsb3RseVNlcnZlclVSTDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIifSxlZGl0YWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sZWRpdHM6e2Fubm90YXRpb25Qb3NpdGlvbjp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sYW5ub3RhdGlvblRhaWw6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGFubm90YXRpb25UZXh0Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxheGlzVGl0bGVUZXh0Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxjb2xvcmJhclBvc2l0aW9uOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxjb2xvcmJhclRpdGxlVGV4dDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sbGVnZW5kUG9zaXRpb246e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGxlZ2VuZFRleHQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LHNoYXBlUG9zaXRpb246e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LHRpdGxlVGV4dDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX19LGF1dG9zaXphYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxyZXNwb25zaXZlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxmaWxsRnJhbWU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGZyYW1lTWFyZ2luczp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsbWluOjAsbWF4Oi41fSxzY3JvbGxab29tOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJjYXJ0ZXNpYW4iLCJnbDNkIiwiZ2VvIiwibWFwYm94Il0sZXh0cmFzOlshMCwhMV0sZGZsdDoiZ2wzZCtnZW8rbWFwYm94In0sZG91YmxlQ2xpY2s6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITEsInJlc2V0IiwiYXV0b3NpemUiLCJyZXNldCthdXRvc2l6ZSJdLGRmbHQ6InJlc2V0K2F1dG9zaXplIn0sZG91YmxlQ2xpY2tEZWxheTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjMwMCxtaW46MH0sc2hvd0F4aXNEcmFnSGFuZGxlczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sc2hvd0F4aXNSYW5nZUVudHJ5Qm94ZXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHNob3dUaXBzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxzaG93TGluazp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sbGlua1RleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiRWRpdCBjaGFydCIsbm9CbGFuazohMH0sc2VuZERhdGE6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHNob3dTb3VyY2VzOnt2YWxUeXBlOiJhbnkiLGRmbHQ6ITF9LGRpc3BsYXlNb2RlQmFyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJob3ZlciIsITAsITFdLGRmbHQ6ImhvdmVyIn0sc2hvd1NlbmRUb0Nsb3VkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxzaG93RWRpdEluQ2hhcnRTdHVkaW86e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LG1vZGVCYXJCdXR0b25zVG9SZW1vdmU6e3ZhbFR5cGU6ImFueSIsZGZsdDpbXX0sbW9kZUJhckJ1dHRvbnNUb0FkZDp7dmFsVHlwZToiYW55IixkZmx0OltdfSxtb2RlQmFyQnV0dG9uczp7dmFsVHlwZToiYW55IixkZmx0OiExfSx0b0ltYWdlQnV0dG9uT3B0aW9uczp7dmFsVHlwZToiYW55IixkZmx0Ont9fSxkaXNwbGF5bG9nbzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sd2F0ZXJtYXJrOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxwbG90R2xQaXhlbFJhdGlvOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MixtaW46MSxtYXg6NH0sc2V0QmFja2dyb3VuZDp7dmFsVHlwZToiYW55IixkZmx0OiJ0cmFuc3BhcmVudCJ9LHRvcG9qc29uVVJMOnt2YWxUeXBlOiJzdHJpbmciLG5vQmxhbms6ITAsZGZsdDoiaHR0cHM6Ly9jZG4ucGxvdC5seS8ifSxtYXBib3hBY2Nlc3NUb2tlbjp7dmFsVHlwZToic3RyaW5nIixkZmx0Om51bGx9LGxvZ2dpbmc6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLG1heDoyLGRmbHQ6MX0sbm90aWZ5T25Mb2dnaW5nOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxtYXg6MixkZmx0OjB9LHF1ZXVlTGVuZ3RoOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjB9LGdsb2JhbFRyYW5zZm9ybXM6e3ZhbFR5cGU6ImFueSIsZGZsdDpbXX0sbG9jYWxlOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6ImVuLVVTIn0sbG9jYWxlczp7dmFsVHlwZToiYW55IixkZmx0Ont9fX0sYT17fTshZnVuY3Rpb24gZSh0LHIpe2Zvcih2YXIgbiBpbiB0KXt2YXIgYT10W25dO2EudmFsVHlwZT9yW25dPWEuZGZsdDoocltuXXx8KHJbbl09e30pLGUoYSxyW25dKSl9fShuLGEpLHQuZXhwb3J0cz17Y29uZmlnQXR0cmlidXRlczpuLGRmbHRDb25maWc6YX19LHt9XSwyMzY6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vcmVnaXN0cnkiKSxhPWUoIi4uL2xpYiIpLGk9ZSgiLi4vcGxvdHMvYXR0cmlidXRlcyIpLG89ZSgiLi4vcGxvdHMvbGF5b3V0X2F0dHJpYnV0ZXMiKSxsPWUoIi4uL3Bsb3RzL2ZyYW1lX2F0dHJpYnV0ZXMiKSxzPWUoIi4uL3Bsb3RzL2FuaW1hdGlvbl9hdHRyaWJ1dGVzIiksYz1lKCIuL3Bsb3RfY29uZmlnIikuY29uZmlnQXR0cmlidXRlcyx1PWUoIi4uL3Bsb3RzL3BvbGFyL2xlZ2FjeS9hcmVhX2F0dHJpYnV0ZXMiKSxmPWUoIi4uL3Bsb3RzL3BvbGFyL2xlZ2FjeS9heGlzX2F0dHJpYnV0ZXMiKSxkPWUoIi4vZWRpdF90eXBlcyIpLHA9YS5leHRlbmRGbGF0LGg9YS5leHRlbmREZWVwQWxsLGc9YS5pc1BsYWluT2JqZWN0LHY9YS5pc0FycmF5T3JUeXBlZEFycmF5LG09YS5uZXN0ZWRQcm9wZXJ0eSx5PWEudmFsT2JqZWN0TWV0YSx4PVsiX2lzU3VicGxvdE9iaiIsIl9pc0xpbmtlZFRvQXJyYXkiLCJfYXJyYXlBdHRyUmVnZXhwcyIsIl9kZXByZWNhdGVkIl07ZnVuY3Rpb24gYihlLHQscil7aWYoIWUpcmV0dXJuITE7aWYoZS5faXNMaW5rZWRUb0FycmF5KWlmKF8odFtyXSkpcisrO2Vsc2UgaWYocjx0Lmxlbmd0aClyZXR1cm4hMTtmb3IoO3I8dC5sZW5ndGg7cisrKXt2YXIgbj1lW3Rbcl1dO2lmKCFnKG4pKWJyZWFrO2lmKGU9bixyPT09dC5sZW5ndGgtMSlicmVhaztpZihlLl9pc0xpbmtlZFRvQXJyYXkpe2lmKCFfKHRbKytyXSkpcmV0dXJuITF9ZWxzZSBpZigiaW5mb19hcnJheSI9PT1lLnZhbFR5cGUpe3ZhciBhPXRbKytyXTtpZighXyhhKSlyZXR1cm4hMTt2YXIgaT1lLml0ZW1zO2lmKEFycmF5LmlzQXJyYXkoaSkpe2lmKGE+PWkubGVuZ3RoKXJldHVybiExO2lmKDI9PT1lLmRpbWVuc2lvbnMpe2lmKHIrKyx0Lmxlbmd0aD09PXIpcmV0dXJuIGU7dmFyIG89dFtyXTtpZighXyhvKSlyZXR1cm4hMTtlPWlbYV1bb119ZWxzZSBlPWlbYV19ZWxzZSBlPWl9fXJldHVybiBlfWZ1bmN0aW9uIF8oZSl7cmV0dXJuIGU9PT1NYXRoLnJvdW5kKGUpJiZlPj0wfWZ1bmN0aW9uIHcoKXt2YXIgZSx0LHI9e307Zm9yKGUgaW4gaChyLG8pLG4uc3VicGxvdHNSZWdpc3RyeSl7aWYoKHQ9bi5zdWJwbG90c1JlZ2lzdHJ5W2VdKS5sYXlvdXRBdHRyaWJ1dGVzKWlmKEFycmF5LmlzQXJyYXkodC5hdHRyKSlmb3IodmFyIGE9MDthPHQuYXR0ci5sZW5ndGg7YSsrKU0ocix0LHQuYXR0clthXSk7ZWxzZSBNKHIsdCwic3VicGxvdCI9PT10LmF0dHI/dC5uYW1lOnQuYXR0cil9Zm9yKGUgaW4gcj1mdW5jdGlvbihlKXtyZXR1cm4gcChlLHtyYWRpYWxheGlzOmYucmFkaWFsYXhpcyxhbmd1bGFyYXhpczpmLmFuZ3VsYXJheGlzfSkscChlLGYubGF5b3V0KSxlfShyKSxuLmNvbXBvbmVudHNSZWdpc3RyeSl7dmFyIGk9KHQ9bi5jb21wb25lbnRzUmVnaXN0cnlbZV0pLnNjaGVtYTtpZihpJiYoaS5zdWJwbG90c3x8aS5sYXlvdXQpKXt2YXIgbD1pLnN1YnBsb3RzO2lmKGwmJmwueGF4aXMmJiFsLnlheGlzKWZvcih2YXIgcyBpbiBsLnhheGlzKWRlbGV0ZSByLnlheGlzW3NdfWVsc2UiY29sb3JzY2FsZSI9PT10Lm5hbWU/aChyLHQubGF5b3V0QXR0cmlidXRlcyk6dC5sYXlvdXRBdHRyaWJ1dGVzJiZBKHIsdC5sYXlvdXRBdHRyaWJ1dGVzLHQubmFtZSl9cmV0dXJue2xheW91dEF0dHJpYnV0ZXM6ayhyKX19ZnVuY3Rpb24gVCgpe3ZhciBlPXtmcmFtZXM6aCh7fSxsKX07cmV0dXJuIGsoZSksZS5mcmFtZXN9ZnVuY3Rpb24gayhlKXtyZXR1cm4gZnVuY3Rpb24oZSl7ci5jcmF3bChlLChmdW5jdGlvbihlLHQsbil7ci5pc1ZhbE9iamVjdChlKT8iZGF0YV9hcnJheSI9PT1lLnZhbFR5cGU/KGUucm9sZT0iZGF0YSIsblt0KyJzcmMiXT17dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToibm9uZSJ9KTohMD09PWUuYXJyYXlPayYmKG5bdCsic3JjIl09e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6Im5vbmUifSk6ZyhlKSYmKGUucm9sZT0ib2JqZWN0Iil9KSl9KGUpLGZ1bmN0aW9uKGUpe3IuY3Jhd2woZSwoZnVuY3Rpb24oZSx0LHIpe2lmKGUpe3ZhciBuPWUuX2lzTGlua2VkVG9BcnJheTtuJiYoZGVsZXRlIGUuX2lzTGlua2VkVG9BcnJheSxyW3RdPXtpdGVtczp7fX0sclt0XS5pdGVtc1tuXT1lLHJbdF0ucm9sZT0ib2JqZWN0Iil9fSkpfShlKSxmdW5jdGlvbihlKXshZnVuY3Rpb24gZSh0KXtmb3IodmFyIHIgaW4gdClpZihnKHRbcl0pKWUodFtyXSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KHRbcl0pKWZvcih2YXIgbj0wO248dFtyXS5sZW5ndGg7bisrKWUodFtyXVtuXSk7ZWxzZSB0W3JdaW5zdGFuY2VvZiBSZWdFeHAmJih0W3JdPXRbcl0udG9TdHJpbmcoKSl9KGUpfShlKSxlfWZ1bmN0aW9uIE0oZSx0LHIpe3ZhciBuPW0oZSxyKSxhPWgoe30sdC5sYXlvdXRBdHRyaWJ1dGVzKTthLl9pc1N1YnBsb3RPYmo9ITAsbi5zZXQoYSl9ZnVuY3Rpb24gQShlLHQscil7dmFyIG49bShlLHIpO24uc2V0KGgobi5nZXQoKXx8e30sdCkpfXIuSVNfU1VCUExPVF9PQko9Il9pc1N1YnBsb3RPYmoiLHIuSVNfTElOS0VEX1RPX0FSUkFZPSJfaXNMaW5rZWRUb0FycmF5IixyLkRFUFJFQ0FURUQ9Il9kZXByZWNhdGVkIixyLlVOREVSU0NPUkVfQVRUUlM9eCxyLmdldD1mdW5jdGlvbigpe3ZhciBlPXt9O24uYWxsVHlwZXMuY29uY2F0KCJhcmVhIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7ZVt0XT1mdW5jdGlvbihlKXt2YXIgdCxhOyJhcmVhIj09PWU/KHQ9e2F0dHJpYnV0ZXM6dX0sYT17fSk6KHQ9bi5tb2R1bGVzW2VdLl9tb2R1bGUsYT10LmJhc2VQbG90TW9kdWxlKTt2YXIgbz17dHlwZTpudWxsfSxsPWgoe30saSkscz1oKHt9LHQuYXR0cmlidXRlcyk7ci5jcmF3bChzLChmdW5jdGlvbihlLHQscixuLGEpe20obCxhKS5zZXQodm9pZCAwKSx2b2lkIDA9PT1lJiZtKHMsYSkuc2V0KHZvaWQgMCl9KSksaChvLGwpLG4udHJhY2VJcyhlLCJub09wYWNpdHkiKSYmZGVsZXRlIG8ub3BhY2l0eTtuLnRyYWNlSXMoZSwic2hvd0xlZ2VuZCIpfHwoZGVsZXRlIG8uc2hvd2xlZ2VuZCxkZWxldGUgby5sZWdlbmRncm91cCk7bi50cmFjZUlzKGUsIm5vSG92ZXIiKSYmKGRlbGV0ZSBvLmhvdmVyaW5mbyxkZWxldGUgby5ob3ZlcmxhYmVsKTt0LnNlbGVjdFBvaW50c3x8ZGVsZXRlIG8uc2VsZWN0ZWRwb2ludHM7aChvLHMpLGEuYXR0cmlidXRlcyYmaChvLGEuYXR0cmlidXRlcyk7by50eXBlPWU7dmFyIGM9e21ldGE6dC5tZXRhfHx7fSxjYXRlZ29yaWVzOnQuY2F0ZWdvcmllc3x8e30sYW5pbWF0YWJsZTpCb29sZWFuKHQuYW5pbWF0YWJsZSksdHlwZTplLGF0dHJpYnV0ZXM6ayhvKX07aWYodC5sYXlvdXRBdHRyaWJ1dGVzKXt2YXIgZj17fTtoKGYsdC5sYXlvdXRBdHRyaWJ1dGVzKSxjLmxheW91dEF0dHJpYnV0ZXM9ayhmKX10LmFuaW1hdGFibGV8fHIuY3Jhd2woYywoZnVuY3Rpb24oZSl7ci5pc1ZhbE9iamVjdChlKSYmImFuaW0iaW4gZSYmZGVsZXRlIGUuYW5pbX0pKTtyZXR1cm4gY30odCl9KSk7dmFyIHQ9e307cmV0dXJuIE9iamVjdC5rZXlzKG4udHJhbnNmb3Jtc1JlZ2lzdHJ5KS5mb3JFYWNoKChmdW5jdGlvbihlKXt0W2VdPWZ1bmN0aW9uKGUpe3ZhciB0PW4udHJhbnNmb3Jtc1JlZ2lzdHJ5W2VdLHI9aCh7fSx0LmF0dHJpYnV0ZXMpO3JldHVybiBPYmplY3Qua2V5cyhuLmNvbXBvbmVudHNSZWdpc3RyeSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGE9bi5jb21wb25lbnRzUmVnaXN0cnlbdF07YS5zY2hlbWEmJmEuc2NoZW1hLnRyYW5zZm9ybXMmJmEuc2NoZW1hLnRyYW5zZm9ybXNbZV0mJk9iamVjdC5rZXlzKGEuc2NoZW1hLnRyYW5zZm9ybXNbZV0pLmZvckVhY2goKGZ1bmN0aW9uKHQpe0EocixhLnNjaGVtYS50cmFuc2Zvcm1zW2VdW3RdLHQpfSkpfSkpLHthdHRyaWJ1dGVzOmsocil9fShlKX0pKSx7ZGVmczp7dmFsT2JqZWN0czp5LG1ldGFLZXlzOnguY29uY2F0KFsiZGVzY3JpcHRpb24iLCJyb2xlIiwiZWRpdFR5cGUiLCJpbXBsaWVkRWRpdHMiXSksZWRpdFR5cGU6e3RyYWNlczpkLnRyYWNlcyxsYXlvdXQ6ZC5sYXlvdXR9LGltcGxpZWRFZGl0czp7fX0sdHJhY2VzOmUsbGF5b3V0OncoKSx0cmFuc2Zvcm1zOnQsZnJhbWVzOlQoKSxhbmltYXRpb246ayhzKSxjb25maWc6ayhjKX19LHIuY3Jhd2w9ZnVuY3Rpb24oZSx0LG4sYSl7dmFyIGk9bnx8MDthPWF8fCIiLE9iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBvPWVbbl07aWYoLTE9PT14LmluZGV4T2Yobikpe3ZhciBsPShhP2ErIi4iOiIiKStuO3QobyxuLGUsaSxsKSxyLmlzVmFsT2JqZWN0KG8pfHxnKG8pJiYiaW1wbGllZEVkaXRzIiE9PW4mJnIuY3Jhd2wobyx0LGkrMSxsKX19KSl9LHIuaXNWYWxPYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJnZvaWQgMCE9PWUudmFsVHlwZX0sci5maW5kQXJyYXlBdHRyaWJ1dGVzPWZ1bmN0aW9uKGUpe3ZhciB0LG4sYT1bXSxvPVtdLGw9W107ZnVuY3Rpb24gcyhlLHIsaSxzKXtvPW8uc2xpY2UoMCxzKS5jb25jYXQoW3JdKSxsPWwuc2xpY2UoMCxzKS5jb25jYXQoW2UmJmUuX2lzTGlua2VkVG9BcnJheV0pLGUmJigiZGF0YV9hcnJheSI9PT1lLnZhbFR5cGV8fCEwPT09ZS5hcnJheU9rKSYmISgiY29sb3JiYXIiPT09b1tzLTFdJiYoInRpY2t0ZXh0Ij09PXJ8fCJ0aWNrdmFscyI9PT1yKSkmJmZ1bmN0aW9uIGUodCxyLGkpe3ZhciBzPXRbb1tyXV0sYz1pK29bcl07aWYocj09PW8ubGVuZ3RoLTEpdihzKSYmYS5wdXNoKG4rYyk7ZWxzZSBpZihsW3JdKXtpZihBcnJheS5pc0FycmF5KHMpKWZvcih2YXIgdT0wO3U8cy5sZW5ndGg7dSsrKWcoc1t1XSkmJmUoc1t1XSxyKzEsYysiWyIrdSsiXS4iKX1lbHNlIGcocykmJmUocyxyKzEsYysiLiIpfSh0LDAsIiIpfXQ9ZSxuPSIiLHIuY3Jhd2woaSxzKSxlLl9tb2R1bGUmJmUuX21vZHVsZS5hdHRyaWJ1dGVzJiZyLmNyYXdsKGUuX21vZHVsZS5hdHRyaWJ1dGVzLHMpO3ZhciBjPWUudHJhbnNmb3JtcztpZihjKWZvcih2YXIgdT0wO3U8Yy5sZW5ndGg7dSsrKXt2YXIgZj1jW3VdLGQ9Zi5fbW9kdWxlO2QmJihuPSJ0cmFuc2Zvcm1zWyIrdSsiXS4iLHQ9ZixyLmNyYXdsKGQuYXR0cmlidXRlcyxzKSl9cmV0dXJuIGF9LHIuZ2V0VHJhY2VWYWxPYmplY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgcixhLG89dFswXSxsPTE7aWYoInRyYW5zZm9ybXMiPT09byl7aWYoMT09PXQubGVuZ3RoKXJldHVybiBpLnRyYW5zZm9ybXM7dmFyIHM9ZS50cmFuc2Zvcm1zO2lmKCFBcnJheS5pc0FycmF5KHMpfHwhcy5sZW5ndGgpcmV0dXJuITE7dmFyIGM9dFsxXTtpZighXyhjKXx8Yz49cy5sZW5ndGgpcmV0dXJuITE7YT0ocj0obi50cmFuc2Zvcm1zUmVnaXN0cnlbc1tjXS50eXBlXXx8e30pLmF0dHJpYnV0ZXMpJiZyW3RbMl1dLGw9M31lbHNlIGlmKCJhcmVhIj09PWUudHlwZSlhPXVbb107ZWxzZXt2YXIgZj1lLl9tb2R1bGU7aWYoZnx8KGY9KG4ubW9kdWxlc1tlLnR5cGV8fGkudHlwZS5kZmx0XXx8e30pLl9tb2R1bGUpLCFmKXJldHVybiExO2lmKCEoYT0ocj1mLmF0dHJpYnV0ZXMpJiZyW29dKSl7dmFyIGQ9Zi5iYXNlUGxvdE1vZHVsZTtkJiZkLmF0dHJpYnV0ZXMmJihhPWQuYXR0cmlidXRlc1tvXSl9YXx8KGE9aVtvXSl9cmV0dXJuIGIoYSx0LGwpfSxyLmdldExheW91dFZhbE9iamVjdD1mdW5jdGlvbihlLHQpe3JldHVybiBiKGZ1bmN0aW9uKGUsdCl7dmFyIHIsYSxpLGwscz1lLl9iYXNlUGxvdE1vZHVsZXM7aWYocyl7dmFyIGM7Zm9yKHI9MDtyPHMubGVuZ3RoO3IrKyl7aWYoKGk9c1tyXSkuYXR0clJlZ2V4JiZpLmF0dHJSZWdleC50ZXN0KHQpKXtpZihpLmxheW91dEF0dHJPdmVycmlkZXMpcmV0dXJuIGkubGF5b3V0QXR0ck92ZXJyaWRlczshYyYmaS5sYXlvdXRBdHRyaWJ1dGVzJiYoYz1pLmxheW91dEF0dHJpYnV0ZXMpfXZhciB1PWkuYmFzZUxheW91dEF0dHJPdmVycmlkZXM7aWYodSYmdCBpbiB1KXJldHVybiB1W3RdfWlmKGMpcmV0dXJuIGN9dmFyIGQ9ZS5fbW9kdWxlcztpZihkKWZvcihyPTA7cjxkLmxlbmd0aDtyKyspaWYoKGw9ZFtyXS5sYXlvdXRBdHRyaWJ1dGVzKSYmdCBpbiBsKXJldHVybiBsW3RdO2ZvcihhIGluIG4uY29tcG9uZW50c1JlZ2lzdHJ5KXtpZigiY29sb3JzY2FsZSI9PT0oaT1uLmNvbXBvbmVudHNSZWdpc3RyeVthXSkubmFtZSYmMD09PXQuaW5kZXhPZigiY29sb3JheGlzIikpcmV0dXJuIGkubGF5b3V0QXR0cmlidXRlc1t0XTtpZighaS5zY2hlbWEmJnQ9PT1pLm5hbWUpcmV0dXJuIGkubGF5b3V0QXR0cmlidXRlc31pZih0IGluIG8pcmV0dXJuIG9bdF07aWYoInJhZGlhbGF4aXMiPT09dHx8ImFuZ3VsYXJheGlzIj09PXQpcmV0dXJuIGZbdF07cmV0dXJuIGYubGF5b3V0W3RdfHwhMX0oZSx0WzBdKSx0LDEpfX0seyIuLi9saWIiOjIwMiwiLi4vcGxvdHMvYW5pbWF0aW9uX2F0dHJpYnV0ZXMiOjI0MiwiLi4vcGxvdHMvYXR0cmlidXRlcyI6MjQ0LCIuLi9wbG90cy9mcmFtZV9hdHRyaWJ1dGVzIjoyNzcsIi4uL3Bsb3RzL2xheW91dF9hdHRyaWJ1dGVzIjoyODAsIi4uL3Bsb3RzL3BvbGFyL2xlZ2FjeS9hcmVhX2F0dHJpYnV0ZXMiOjI4MywiLi4vcGxvdHMvcG9sYXIvbGVnYWN5L2F4aXNfYXR0cmlidXRlcyI6Mjg0LCIuLi9yZWdpc3RyeSI6MjkwLCIuL2VkaXRfdHlwZXMiOjIzMCwiLi9wbG90X2NvbmZpZyI6MjM1fV0sMjM3OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uL2xpYiIpLGE9ZSgiLi4vcGxvdHMvYXR0cmlidXRlcyIpLGk9e25hbWU6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6Im5vbmUifX07ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZSYmInN0cmluZyI9PXR5cGVvZiBlfWZ1bmN0aW9uIGwoZSl7dmFyIHQ9ZS5sZW5ndGgtMTtyZXR1cm4icyIhPT1lLmNoYXJBdCh0KSYmbi53YXJuKCJiYWQgYXJndW1lbnQgdG8gYXJyYXlEZWZhdWx0S2V5OiAiK2UpLGUuc3Vic3RyKDAsZS5sZW5ndGgtMSkrImRlZmF1bHRzIn1pLnRlbXBsYXRlaXRlbW5hbWU9e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSxyLnRlbXBsYXRlZEFycmF5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuX2lzTGlua2VkVG9BcnJheT1lLHQubmFtZT1pLm5hbWUsdC50ZW1wbGF0ZWl0ZW1uYW1lPWkudGVtcGxhdGVpdGVtbmFtZSx0fSxyLnRyYWNlVGVtcGxhdGVyPWZ1bmN0aW9uKGUpe3ZhciB0LHIsaT17fTtmb3IodCBpbiBlKXI9ZVt0XSxBcnJheS5pc0FycmF5KHIpJiZyLmxlbmd0aCYmKGlbdF09MCk7cmV0dXJue25ld1RyYWNlOmZ1bmN0aW9uKG8pe3ZhciBsPXt0eXBlOnQ9bi5jb2VyY2Uobyx7fSxhLCJ0eXBlIiksX3RlbXBsYXRlOm51bGx9O2lmKHQgaW4gaSl7cj1lW3RdO3ZhciBzPWlbdF0lci5sZW5ndGg7aVt0XSsrLGwuX3RlbXBsYXRlPXJbc119cmV0dXJuIGx9fX0sci5uZXdDb250YWluZXI9ZnVuY3Rpb24oZSx0LHIpe3ZhciBhPWUuX3RlbXBsYXRlLGk9YSYmKGFbdF18fHImJmFbcl0pO3JldHVybiBuLmlzUGxhaW5PYmplY3QoaSl8fChpPW51bGwpLGVbdF09e190ZW1wbGF0ZTppfX0sci5hcnJheVRlbXBsYXRlcj1mdW5jdGlvbihlLHQscil7dmFyIG49ZS5fdGVtcGxhdGUsYT1uJiZuW2wodCldLGk9biYmblt0XTtBcnJheS5pc0FycmF5KGkpJiZpLmxlbmd0aHx8KGk9W10pO3ZhciBzPXt9O3JldHVybntuZXdJdGVtOmZ1bmN0aW9uKGUpe3ZhciB0PXtuYW1lOmUubmFtZSxfaW5wdXQ6ZX0sbj10LnRlbXBsYXRlaXRlbW5hbWU9ZS50ZW1wbGF0ZWl0ZW1uYW1lO2lmKCFvKG4pKXJldHVybiB0Ll90ZW1wbGF0ZT1hLHQ7Zm9yKHZhciBsPTA7bDxpLmxlbmd0aDtsKyspe3ZhciBjPWlbbF07aWYoYy5uYW1lPT09bilyZXR1cm4gc1tuXT0xLHQuX3RlbXBsYXRlPWMsdH1yZXR1cm4gdFtyXT1lW3JdfHwhMSx0Ll90ZW1wbGF0ZT0hMSx0fSxkZWZhdWx0SXRlbXM6ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD0wO3Q8aS5sZW5ndGg7dCsrKXt2YXIgcj1pW3RdLG49ci5uYW1lO2lmKG8obikmJiFzW25dKXt2YXIgYT17X3RlbXBsYXRlOnIsbmFtZTpuLF9pbnB1dDp7X3RlbXBsYXRlaXRlbW5hbWU6bn19O2EudGVtcGxhdGVpdGVtbmFtZT1yLnRlbXBsYXRlaXRlbW5hbWUsZS5wdXNoKGEpLHNbbl09MX19cmV0dXJuIGV9fX0sci5hcnJheURlZmF1bHRLZXk9bCxyLmFycmF5RWRpdG9yPWZ1bmN0aW9uKGUsdCxyKXt2YXIgYT0obi5uZXN0ZWRQcm9wZXJ0eShlLHQpLmdldCgpfHxbXSkubGVuZ3RoLGk9ci5faW5kZXgsbz1pPj1hJiYoci5faW5wdXR8fHt9KS5fdGVtcGxhdGVpdGVtbmFtZTtvJiYoaT1hKTt2YXIgbCxzPXQrIlsiK2krIl0iO2Z1bmN0aW9uIGMoKXtsPXt9LG8mJihsW3NdPXt9LGxbc10udGVtcGxhdGVpdGVtbmFtZT1vKX1mdW5jdGlvbiB1KGUsdCl7bz9uLm5lc3RlZFByb3BlcnR5KGxbc10sZSkuc2V0KHQpOmxbcysiLiIrZV09dH1mdW5jdGlvbiBmKCl7dmFyIGU9bDtyZXR1cm4gYygpLGV9cmV0dXJuIGMoKSx7bW9kaWZ5QmFzZTpmdW5jdGlvbihlLHQpe2xbZV09dH0sbW9kaWZ5SXRlbTp1LGdldFVwZGF0ZU9iajpmLGFwcGx5VXBkYXRlOmZ1bmN0aW9uKHQscil7dCYmdSh0LHIpO3ZhciBhPWYoKTtmb3IodmFyIGkgaW4gYSluLm5lc3RlZFByb3BlcnR5KGUsaSkuc2V0KGFbaV0pfX19fSx7Ii4uL2xpYiI6MjAyLCIuLi9wbG90cy9hdHRyaWJ1dGVzIjoyNDR9XSwyMzg6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiZDMiKSxhPWUoIi4uL3JlZ2lzdHJ5IiksaT1lKCIuLi9wbG90cy9wbG90cyIpLG89ZSgiLi4vbGliIiksbD1lKCIuLi9saWIvY2xlYXJfZ2xfY2FudmFzZXMiKSxzPWUoIi4uL2NvbXBvbmVudHMvY29sb3IiKSxjPWUoIi4uL2NvbXBvbmVudHMvZHJhd2luZyIpLHU9ZSgiLi4vY29tcG9uZW50cy90aXRsZXMiKSxmPWUoIi4uL2NvbXBvbmVudHMvbW9kZWJhciIpLGQ9ZSgiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxwPWUoIi4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKSxoPWUoIi4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdHJhaW50cyIpLGc9aC5lbmZvcmNlLHY9aC5jbGVhbixtPWUoIi4uL3Bsb3RzL2NhcnRlc2lhbi9hdXRvcmFuZ2UiKS5kb0F1dG9SYW5nZTtmdW5jdGlvbiB5KGUsdCxyKXtmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGE9cltuXVswXSxpPXJbbl1bMV07aWYoIShhWzBdPj1lWzFdfHxhWzFdPD1lWzBdKSYmKGlbMF08dFsxXSYmaVsxXT50WzBdKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiB4KGUpe3ZhciB0LGEsbCx1LGgsZyx2PWUuX2Z1bGxMYXlvdXQsbT12Ll9zaXplLHg9bS5wLF89ZC5saXN0KGUsIiIsITApO2lmKHYuX3BhcGVyZGl2LnN0eWxlKHt3aWR0aDplLl9jb250ZXh0LnJlc3BvbnNpdmUmJnYuYXV0b3NpemUmJiFlLl9jb250ZXh0Ll9oYXNaZXJvV2lkdGgmJiFlLmxheW91dC53aWR0aD8iMTAwJSI6di53aWR0aCsicHgiLGhlaWdodDplLl9jb250ZXh0LnJlc3BvbnNpdmUmJnYuYXV0b3NpemUmJiFlLl9jb250ZXh0Ll9oYXNaZXJvSGVpZ2h0JiYhZS5sYXlvdXQuaGVpZ2h0PyIxMDAlIjp2LmhlaWdodCsicHgifSkuc2VsZWN0QWxsKCIubWFpbi1zdmciKS5jYWxsKGMuc2V0U2l6ZSx2LndpZHRoLHYuaGVpZ2h0KSxlLl9jb250ZXh0LnNldEJhY2tncm91bmQoZSx2LnBhcGVyX2JnY29sb3IpLHIuZHJhd01haW5UaXRsZShlKSxmLm1hbmFnZShlKSwhdi5faGFzKCJjYXJ0ZXNpYW4iKSlyZXR1cm4gaS5wcmV2aW91c1Byb21pc2VzKGUpO2Z1bmN0aW9uIFQoZSx0LHIpe3ZhciBuPWUuX2x3LzI7cmV0dXJuIngiPT09ZS5faWQuY2hhckF0KDApP3Q/InRvcCI9PT1yP3QuX29mZnNldC14LW46dC5fb2Zmc2V0K3QuX2xlbmd0aCt4K246bS50K20uaCooMS0oZS5wb3NpdGlvbnx8MCkpK24lMTp0PyJyaWdodCI9PT1yP3QuX29mZnNldCt0Ll9sZW5ndGgreCtuOnQuX29mZnNldC14LW46bS5sK20udyooZS5wb3NpdGlvbnx8MCkrbiUxfWZvcih0PTA7dDxfLmxlbmd0aDt0Kyspe3ZhciBrPSh1PV9bdF0pLl9hbmNob3JBeGlzO3UuX2xpbmVwb3NpdGlvbnM9e30sdS5fbHc9Yy5jcmlzcFJvdW5kKGUsdS5saW5ld2lkdGgsMSksdS5fbWFpbkxpbmVQb3NpdGlvbj1UKHUsayx1LnNpZGUpLHUuX21haW5NaXJyb3JQb3NpdGlvbj11Lm1pcnJvciYmaz9UKHUsayxwLk9QUE9TSVRFX1NJREVbdS5zaWRlXSk6bnVsbH12YXIgTT1bXSxBPVtdLEw9W10sUz0xPT09cy5vcGFjaXR5KHYucGFwZXJfYmdjb2xvcikmJjE9PT1zLm9wYWNpdHkodi5wbG90X2JnY29sb3IpJiZ2LnBhcGVyX2JnY29sb3I9PT12LnBsb3RfYmdjb2xvcjtmb3IoYSBpbiB2Ll9wbG90cylpZigobD12Ll9wbG90c1thXSkubWFpbnBsb3QpbC5iZyYmbC5iZy5yZW1vdmUoKSxsLmJnPXZvaWQgMDtlbHNle3ZhciBDPWwueGF4aXMuZG9tYWluLE89bC55YXhpcy5kb21haW4sRD1sLnBsb3Rncm91cDtpZih5KEMsTyxMKSl7dmFyIFA9RC5ub2RlKCksej1sLmJnPW8uZW5zdXJlU2luZ2xlKEQsInJlY3QiLCJiZyIpO1AuaW5zZXJ0QmVmb3JlKHoubm9kZSgpLFAuY2hpbGROb2Rlc1swXSksQS5wdXNoKGEpfWVsc2UgRC5zZWxlY3QoInJlY3QuYmciKS5yZW1vdmUoKSxMLnB1c2goW0MsT10pLFN8fChNLnB1c2goYSksQS5wdXNoKGEpKX12YXIgUixFLEksRixOLEgsaixCLFYsVSxxLEcsWixZPXYuX2JnTGF5ZXIuc2VsZWN0QWxsKCIuYmciKS5kYXRhKE0pO2ZvcihZLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgiYmciLCEwKSxZLmV4aXQoKS5yZW1vdmUoKSxZLmVhY2goKGZ1bmN0aW9uKGUpe3YuX3Bsb3RzW2VdLmJnPW4uc2VsZWN0KHRoaXMpfSkpLHQ9MDt0PEEubGVuZ3RoO3QrKylsPXYuX3Bsb3RzW0FbdF1dLGg9bC54YXhpcyxnPWwueWF4aXMsbC5iZyYmdm9pZCAwIT09aC5fb2Zmc2V0JiZ2b2lkIDAhPT1nLl9vZmZzZXQmJmwuYmcuY2FsbChjLnNldFJlY3QsaC5fb2Zmc2V0LXgsZy5fb2Zmc2V0LXgsaC5fbGVuZ3RoKzIqeCxnLl9sZW5ndGgrMip4KS5jYWxsKHMuZmlsbCx2LnBsb3RfYmdjb2xvcikuc3R5bGUoInN0cm9rZS13aWR0aCIsMCk7aWYoIXYuX2hhc09ubHlMYXJnZVNwbG9tcylmb3IoYSBpbiB2Ll9wbG90cyl7bD12Ll9wbG90c1thXSxoPWwueGF4aXMsZz1sLnlheGlzO3ZhciBYLFcsUT1sLmNsaXBJZD0iY2xpcCIrdi5fdWlkK2ErInBsb3QiLEo9by5lbnN1cmVTaW5nbGVCeUlkKHYuX2NsaXBzLCJjbGlwUGF0aCIsUSwoZnVuY3Rpb24oZSl7ZS5jbGFzc2VkKCJwbG90Y2xpcCIsITApLmFwcGVuZCgicmVjdCIpfSkpO2wuY2xpcFJlY3Q9Si5zZWxlY3QoInJlY3QiKS5hdHRyKHt3aWR0aDpoLl9sZW5ndGgsaGVpZ2h0OmcuX2xlbmd0aH0pLGMuc2V0VHJhbnNsYXRlKGwucGxvdCxoLl9vZmZzZXQsZy5fb2Zmc2V0KSxsLl9oYXNDbGlwT25BeGlzRmFsc2U/KFg9bnVsbCxXPVEpOihYPVEsVz1udWxsKSxjLnNldENsaXBVcmwobC5wbG90LFgsZSksbC5sYXllckNsaXBJZD1XfWZ1bmN0aW9uICQoZSl7cmV0dXJuIk0iK1IrIiwiK2UrIkgiK0V9ZnVuY3Rpb24gSyhlKXtyZXR1cm4iTSIraC5fb2Zmc2V0KyIsIitlKyJoIitoLl9sZW5ndGh9ZnVuY3Rpb24gZWUoZSl7cmV0dXJuIk0iK2UrIiwiK0IrIlYiK2p9ZnVuY3Rpb24gdGUoZSl7cmV0dXJuIk0iK2UrIiwiK2cuX29mZnNldCsidiIrZy5fbGVuZ3RofWZ1bmN0aW9uIHJlKGUsdCxyKXtpZighZS5zaG93bGluZXx8YSE9PWUuX21haW5TdWJwbG90KXJldHVybiIiO2lmKCFlLl9hbmNob3JBeGlzKXJldHVybiByKGUuX21haW5MaW5lUG9zaXRpb24pO3ZhciBuPXQoZS5fbWFpbkxpbmVQb3NpdGlvbik7cmV0dXJuIGUubWlycm9yJiYobis9dChlLl9tYWluTWlycm9yUG9zaXRpb24pKSxufWZvcihhIGluIHYuX3Bsb3RzKXtsPXYuX3Bsb3RzW2FdLGg9bC54YXhpcyxnPWwueWF4aXM7dmFyIG5lPSJNMCwwIjtiKGgsYSkmJihOPXcoaCwibGVmdCIsZyxfKSxSPWguX29mZnNldC0oTj94K046MCksSD13KGgsInJpZ2h0IixnLF8pLEU9aC5fb2Zmc2V0K2guX2xlbmd0aCsoSD94K0g6MCksST1UKGgsZywiYm90dG9tIiksRj1UKGgsZywidG9wIiksIShaPSFoLl9hbmNob3JBeGlzfHxhIT09aC5fbWFpblN1YnBsb3QpfHwiYWxsdGlja3MiIT09aC5taXJyb3ImJiJhbGwiIT09aC5taXJyb3J8fChoLl9saW5lcG9zaXRpb25zW2FdPVtJLEZdKSxuZT1yZShoLCQsSyksWiYmaC5zaG93bGluZSYmKCJhbGwiPT09aC5taXJyb3J8fCJhbGx0aWNrcyI9PT1oLm1pcnJvcikmJihuZSs9JChJKSskKEYpKSxsLnhsaW5lcy5zdHlsZSgic3Ryb2tlLXdpZHRoIixoLl9sdysicHgiKS5jYWxsKHMuc3Ryb2tlLGguc2hvd2xpbmU/aC5saW5lY29sb3I6InJnYmEoMCwwLDAsMCkiKSksbC54bGluZXMuYXR0cigiZCIsbmUpO3ZhciBhZT0iTTAsMCI7YihnLGEpJiYocT13KGcsImJvdHRvbSIsaCxfKSxqPWcuX29mZnNldCtnLl9sZW5ndGgrKHE/eDowKSxHPXcoZywidG9wIixoLF8pLEI9Zy5fb2Zmc2V0LShHP3g6MCksVj1UKGcsaCwibGVmdCIpLFU9VChnLGgsInJpZ2h0IiksIShaPSFnLl9hbmNob3JBeGlzfHxhIT09Zy5fbWFpblN1YnBsb3QpfHwiYWxsdGlja3MiIT09Zy5taXJyb3ImJiJhbGwiIT09Zy5taXJyb3J8fChnLl9saW5lcG9zaXRpb25zW2FdPVtWLFVdKSxhZT1yZShnLGVlLHRlKSxaJiZnLnNob3dsaW5lJiYoImFsbCI9PT1nLm1pcnJvcnx8ImFsbHRpY2tzIj09PWcubWlycm9yKSYmKGFlKz1lZShWKStlZShVKSksbC55bGluZXMuc3R5bGUoInN0cm9rZS13aWR0aCIsZy5fbHcrInB4IikuY2FsbChzLnN0cm9rZSxnLnNob3dsaW5lP2cubGluZWNvbG9yOiJyZ2JhKDAsMCwwLDApIikpLGwueWxpbmVzLmF0dHIoImQiLGFlKX1yZXR1cm4gZC5tYWtlQ2xpcFBhdGhzKGUpLGkucHJldmlvdXNQcm9taXNlcyhlKX1mdW5jdGlvbiBiKGUsdCl7cmV0dXJuKGUudGlja3N8fGUuc2hvd2xpbmUpJiYodD09PWUuX21haW5TdWJwbG90fHwiYWxsIj09PWUubWlycm9yfHwiYWxsdGlja3MiPT09ZS5taXJyb3IpfWZ1bmN0aW9uIF8oZSx0LHIpe2lmKCFyLnNob3dsaW5lfHwhci5fbHcpcmV0dXJuITE7aWYoImFsbCI9PT1yLm1pcnJvcnx8ImFsbHRpY2tzIj09PXIubWlycm9yKXJldHVybiEwO3ZhciBuPXIuX2FuY2hvckF4aXM7aWYoIW4pcmV0dXJuITE7dmFyIGE9cC5GUk9NX0JMW3RdO3JldHVybiByLnNpZGU9PT10P24uZG9tYWluW2FdPT09ZS5kb21haW5bYV06ci5taXJyb3ImJm4uZG9tYWluWzEtYV09PT1lLmRvbWFpblsxLWFdfWZ1bmN0aW9uIHcoZSx0LHIsbil7aWYoXyhlLHQscikpcmV0dXJuIHIuX2x3O2Zvcih2YXIgYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgaT1uW2FdO2lmKGkuX21haW5BeGlzPT09ci5fbWFpbkF4aXMmJl8oZSx0LGkpKXJldHVybiBpLl9sd31yZXR1cm4gMH1mdW5jdGlvbiBUKGUsdCl7dmFyIHI9ZS50aXRsZSxuPWUuX3NpemUsYT0wO3N3aXRjaCgic3RhcnQiPT09dD9hPXIucGFkLmw6ImVuZCI9PT10JiYoYT0tci5wYWQuciksci54cmVmKXtjYXNlInBhcGVyIjpyZXR1cm4gbi5sK24udypyLngrYTtjYXNlImNvbnRhaW5lciI6ZGVmYXVsdDpyZXR1cm4gZS53aWR0aCpyLngrYX19ZnVuY3Rpb24gayhlLHQpe3ZhciByPWUudGl0bGUsbj1lLl9zaXplLGE9MDtpZigiMGVtIiE9PXQmJnQ/dD09PXAuQ0FQX1NISUZUKyJlbSImJihhPXIucGFkLnQpOmE9LXIucGFkLmIsImF1dG8iPT09ci55KXJldHVybiBuLnQvMjtzd2l0Y2goci55cmVmKXtjYXNlInBhcGVyIjpyZXR1cm4gbi50K24uaC1uLmgqci55K2E7Y2FzZSJjb250YWluZXIiOmRlZmF1bHQ6cmV0dXJuIGUuaGVpZ2h0LWUuaGVpZ2h0KnIueSthfX1yLmxheW91dFN0eWxlcz1mdW5jdGlvbihlKXtyZXR1cm4gby5zeW5jT3JBc3luYyhbaS5kb0F1dG9NYXJnaW4seF0sZSl9LHIuZHJhd01haW5UaXRsZT1mdW5jdGlvbihlKXt2YXIgdD1lLl9mdWxsTGF5b3V0LHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50aXRsZSxyPSJtaWRkbGUiO28uaXNSaWdodEFuY2hvcih0KT9yPSJlbmQiOm8uaXNMZWZ0QW5jaG9yKHQpJiYocj0ic3RhcnQiKTtyZXR1cm4gcn0odCksbj1mdW5jdGlvbihlKXt2YXIgdD1lLnRpdGxlLHI9IjBlbSI7by5pc1RvcEFuY2hvcih0KT9yPXAuQ0FQX1NISUZUKyJlbSI6by5pc01pZGRsZUFuY2hvcih0KSYmKHI9cC5NSURfU0hJRlQrImVtIik7cmV0dXJuIHJ9KHQpO3UuZHJhdyhlLCJndGl0bGUiLHtwcm9wQ29udGFpbmVyOnQscHJvcE5hbWU6InRpdGxlLnRleHQiLHBsYWNlaG9sZGVyOnQuX2RmbHRUaXRsZS5wbG90LGF0dHJpYnV0ZXM6e3g6VCh0LHIpLHk6ayh0LG4pLCJ0ZXh0LWFuY2hvciI6cixkeTpufX0pfSxyLmRvVHJhY2VTdHlsZT1mdW5jdGlvbihlKXt2YXIgdCxuPWUuY2FsY2RhdGEsbz1bXTtmb3IodD0wO3Q8bi5sZW5ndGg7dCsrKXt2YXIgcz1uW3RdLGM9c1swXXx8e30sdT1jLnRyYWNlfHx7fSxmPXUuX21vZHVsZXx8e30sZD1mLmFycmF5c1RvQ2FsY2RhdGE7ZCYmZChzLHUpO3ZhciBwPWYuZWRpdFN0eWxlO3AmJm8ucHVzaCh7Zm46cCxjZDA6Y30pfWlmKG8ubGVuZ3RoKXtmb3IodD0wO3Q8by5sZW5ndGg7dCsrKXt2YXIgaD1vW3RdO2guZm4oZSxoLmNkMCl9bChlKSxyLnJlZHJhd1JlZ2xUcmFjZXMoZSl9cmV0dXJuIGkuc3R5bGUoZSksYS5nZXRDb21wb25lbnRNZXRob2QoImxlZ2VuZCIsImRyYXciKShlKSxpLnByZXZpb3VzUHJvbWlzZXMoZSl9LHIuZG9Db2xvckJhcnM9ZnVuY3Rpb24oZSl7cmV0dXJuIGEuZ2V0Q29tcG9uZW50TWV0aG9kKCJjb2xvcmJhciIsImRyYXciKShlKSxpLnByZXZpb3VzUHJvbWlzZXMoZSl9LHIubGF5b3V0UmVwbG90PWZ1bmN0aW9uKGUpe3ZhciB0PWUubGF5b3V0O3JldHVybiBlLmxheW91dD12b2lkIDAsYS5jYWxsKCJwbG90IixlLCIiLHQpfSxyLmRvTGVnZW5kPWZ1bmN0aW9uKGUpe3JldHVybiBhLmdldENvbXBvbmVudE1ldGhvZCgibGVnZW5kIiwiZHJhdyIpKGUpLGkucHJldmlvdXNQcm9taXNlcyhlKX0sci5kb1RpY2tzUmVsYXlvdXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGQuZHJhdyhlLCJyZWRyYXciKSxlLl9mdWxsTGF5b3V0Ll9oYXNPbmx5TGFyZ2VTcGxvbXMmJihhLnN1YnBsb3RzUmVnaXN0cnkuc3Bsb20udXBkYXRlR3JpZChlKSxsKGUpLHIucmVkcmF3UmVnbFRyYWNlcyhlKSksci5kcmF3TWFpblRpdGxlKGUpLGkucHJldmlvdXNQcm9taXNlcyhlKX0sci5kb01vZGVCYXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fZnVsbExheW91dDtmLm1hbmFnZShlKTtmb3IodmFyIHI9MDtyPHQuX2Jhc2VQbG90TW9kdWxlcy5sZW5ndGg7cisrKXt2YXIgbj10Ll9iYXNlUGxvdE1vZHVsZXNbcl0udXBkYXRlRng7biYmbihlKX1yZXR1cm4gaS5wcmV2aW91c1Byb21pc2VzKGUpfSxyLmRvQ2FtZXJhPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLl9mdWxsTGF5b3V0LHI9dC5fc3VicGxvdHMuZ2wzZCxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBhPXRbcltuXV07YS5fc2NlbmUuc2V0Vmlld3BvcnQoYSl9fSxyLmRyYXdEYXRhPWZ1bmN0aW9uKGUpe3ZhciB0PWUuX2Z1bGxMYXlvdXQ7bChlKTtmb3IodmFyIG49dC5fYmFzZVBsb3RNb2R1bGVzLG89MDtvPG4ubGVuZ3RoO28rKyluW29dLnBsb3QoZSk7cmV0dXJuIHIucmVkcmF3UmVnbFRyYWNlcyhlKSxpLnN0eWxlKGUpLGEuZ2V0Q29tcG9uZW50TWV0aG9kKCJzaGFwZXMiLCJkcmF3IikoZSksYS5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiZHJhdyIpKGUpLGEuZ2V0Q29tcG9uZW50TWV0aG9kKCJpbWFnZXMiLCJkcmF3IikoZSksdC5fcmVwbG90dGluZz0hMSxpLnByZXZpb3VzUHJvbWlzZXMoZSl9LHIucmVkcmF3UmVnbFRyYWNlcz1mdW5jdGlvbihlKXt2YXIgdD1lLl9mdWxsTGF5b3V0O2lmKHQuX2hhcygicmVnbCIpKXt2YXIgcixuLGE9ZS5fZnVsbERhdGEsaT1bXSxsPVtdO2Zvcih0Ll9oYXNPbmx5TGFyZ2VTcGxvbXMmJnQuX3NwbG9tR3JpZC5kcmF3KCkscj0wO3I8YS5sZW5ndGg7cisrKXt2YXIgcz1hW3JdOyEwPT09cy52aXNpYmxlJiYwIT09cy5fbGVuZ3RoJiYoInNwbG9tIj09PXMudHlwZT90Ll9zcGxvbVNjZW5lc1tzLnVpZF0uZHJhdygpOiJzY2F0dGVyZ2wiPT09cy50eXBlP28ucHVzaFVuaXF1ZShpLHMueGF4aXMrcy55YXhpcyk6InNjYXR0ZXJwb2xhcmdsIj09PXMudHlwZSYmby5wdXNoVW5pcXVlKGwscy5zdWJwbG90KSl9Zm9yKHI9MDtyPGkubGVuZ3RoO3IrKykobj10Ll9wbG90c1tpW3JdXSkuX3NjZW5lJiZuLl9zY2VuZS5kcmF3KCk7Zm9yKHI9MDtyPGwubGVuZ3RoO3IrKykobj10W2xbcl1dLl9zdWJwbG90KS5fc2NlbmUmJm4uX3NjZW5lLmRyYXcoKX19LHIuZG9BdXRvUmFuZ2VBbmRDb25zdHJhaW50cz1mdW5jdGlvbihlKXtmb3IodmFyIHQscj1kLmxpc3QoZSwiIiwhMCksbj17fSxhPTA7YTxyLmxlbmd0aDthKyspaWYoIW5bKHQ9clthXSkuX2lkXSl7blt0Ll9pZF09MSx2KGUsdCksbShlLHQpO3ZhciBpPXQuX21hdGNoR3JvdXA7aWYoaSlmb3IodmFyIG8gaW4gaSl7dmFyIGw9ZC5nZXRGcm9tSWQoZSxvKTttKGUsbCx0LnJhbmdlKSxuW29dPTF9fWcoZSl9LHIuZmluYWxEcmF3PWZ1bmN0aW9uKGUpe2EuZ2V0Q29tcG9uZW50TWV0aG9kKCJyYW5nZXNsaWRlciIsImRyYXciKShlKSxhLmdldENvbXBvbmVudE1ldGhvZCgicmFuZ2VzZWxlY3RvciIsImRyYXciKShlKX0sci5kcmF3TWFyZ2luUHVzaGVycz1mdW5jdGlvbihlKXthLmdldENvbXBvbmVudE1ldGhvZCgibGVnZW5kIiwiZHJhdyIpKGUpLGEuZ2V0Q29tcG9uZW50TWV0aG9kKCJyYW5nZXNlbGVjdG9yIiwiZHJhdyIpKGUpLGEuZ2V0Q29tcG9uZW50TWV0aG9kKCJzbGlkZXJzIiwiZHJhdyIpKGUpLGEuZ2V0Q29tcG9uZW50TWV0aG9kKCJ1cGRhdGVtZW51cyIsImRyYXciKShlKSxhLmdldENvbXBvbmVudE1ldGhvZCgiY29sb3JiYXIiLCJkcmF3IikoZSl9fSx7Ii4uL2NvbXBvbmVudHMvY29sb3IiOjc1LCIuLi9jb21wb25lbnRzL2RyYXdpbmciOjk3LCIuLi9jb21wb25lbnRzL21vZGViYXIiOjEzNSwiLi4vY29tcG9uZW50cy90aXRsZXMiOjE3MCwiLi4vY29uc3RhbnRzL2FsaWdubWVudCI6MTc3LCIuLi9saWIiOjIwMiwiLi4vbGliL2NsZWFyX2dsX2NhbnZhc2VzIjoxOTAsIi4uL3Bsb3RzL2NhcnRlc2lhbi9hdXRvcmFuZ2UiOjI0NywiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjI0OCwiLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0cmFpbnRzIjoyNTUsIi4uL3Bsb3RzL3Bsb3RzIjoyODIsIi4uL3JlZ2lzdHJ5IjoyOTAsZDM6OX1dLDIzOTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi9saWIiKSxhPW4uaXNQbGFpbk9iamVjdCxpPWUoIi4vcGxvdF9zY2hlbWEiKSxvPWUoIi4uL3Bsb3RzL3Bsb3RzIiksbD1lKCIuLi9wbG90cy9hdHRyaWJ1dGVzIikscz1lKCIuL3Bsb3RfdGVtcGxhdGUiKSxjPWUoIi4vcGxvdF9jb25maWciKS5kZmx0Q29uZmlnO2Z1bmN0aW9uIHUoZSx0KXtlPW4uZXh0ZW5kRGVlcCh7fSxlKTt2YXIgcixpLG89T2JqZWN0LmtleXMoZSkuc29ydCgpO2Z1bmN0aW9uIGwodCxyLG4pe2lmKGEocikmJmEodCkpdSh0LHIpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShyKSYmQXJyYXkuaXNBcnJheSh0KSl7dmFyIG89cy5hcnJheVRlbXBsYXRlcih7X3RlbXBsYXRlOmV9LG4pO2ZvcihpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBsPXJbaV0sYz1vLm5ld0l0ZW0obCkuX3RlbXBsYXRlO2MmJnUoYyxsKX12YXIgZj1vLmRlZmF1bHRJdGVtcygpO2ZvcihpPTA7aTxmLmxlbmd0aDtpKyspci5wdXNoKGZbaV0uX3RlbXBsYXRlKTtmb3IoaT0wO2k8ci5sZW5ndGg7aSsrKWRlbGV0ZSByW2ldLnRlbXBsYXRlaXRlbW5hbWV9fWZvcihyPTA7cjxvLmxlbmd0aDtyKyspe3ZhciBjPW9bcl0sZD1lW2NdO2lmKGMgaW4gdD9sKGQsdFtjXSxjKTp0W2NdPWQsZihjKT09PWMpZm9yKHZhciBwIGluIHQpe3ZhciBoPWYocCk7cD09PWh8fGghPT1jfHxwIGluIGV8fGwoZCx0W3BdLGMpfX19ZnVuY3Rpb24gZihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bMC05XSskLywiIil9ZnVuY3Rpb24gZChlLHQscixpLG8pe3ZhciBsPW8mJnIobyk7Zm9yKHZhciBjIGluIGUpe3ZhciB1PWVbY10scD1nKGUsYyxpKSxoPWcoZSxjLG8pLHY9cihoKTtpZighdil7dmFyIG09ZihjKTttIT09YyYmKHY9cihoPWcoZSxtLG8pKSl9aWYoKCFsfHxsIT09dikmJiEoIXZ8fHYuX25vVGVtcGxhdGluZ3x8ImRhdGFfYXJyYXkiPT09di52YWxUeXBlfHx2LmFycmF5T2smJkFycmF5LmlzQXJyYXkodSkpKWlmKCF2LnZhbFR5cGUmJmEodSkpZCh1LHQscixwLGgpO2Vsc2UgaWYodi5faXNMaW5rZWRUb0FycmF5JiZBcnJheS5pc0FycmF5KHUpKWZvcih2YXIgeT0hMSx4PTAsYj17fSxfPTA7Xzx1Lmxlbmd0aDtfKyspe3ZhciB3PXVbX107aWYoYSh3KSl7dmFyIFQ9dy5uYW1lO2lmKFQpYltUXXx8KGQodyx0LHIsZyh1LHgscCksZyh1LHgsaCkpLHgrKyxiW1RdPTEpO2Vsc2UgaWYoIXkpe3ZhciBrPWcoZSxzLmFycmF5RGVmYXVsdEtleShjKSxpKSxNPWcodSx4LHApO2Qodyx0LHIsTSxnKHUseCxoKSk7dmFyIEE9bi5uZXN0ZWRQcm9wZXJ0eSh0LE0pO24ubmVzdGVkUHJvcGVydHkodCxrKS5zZXQoQS5nZXQoKSksQS5zZXQobnVsbCkseT0hMH19fWVsc2V7bi5uZXN0ZWRQcm9wZXJ0eSh0LHApLnNldCh1KX19fWZ1bmN0aW9uIHAoZSx0KXtyZXR1cm4gaS5nZXRMYXlvdXRWYWxPYmplY3QoZSxuLm5lc3RlZFByb3BlcnR5KHt9LHQpLnBhcnRzKX1mdW5jdGlvbiBoKGUsdCl7cmV0dXJuIGkuZ2V0VHJhY2VWYWxPYmplY3QoZSxuLm5lc3RlZFByb3BlcnR5KHt9LHQpLnBhcnRzKX1mdW5jdGlvbiBnKGUsdCxyKXtyZXR1cm4gcj9BcnJheS5pc0FycmF5KGUpP3IrIlsiK3QrIl0iOnIrIi4iK3Q6dH1mdW5jdGlvbiB2KGUpe2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKWlmKGEoZVt0XSkpcmV0dXJuITB9ZnVuY3Rpb24gbShlKXt2YXIgdDtzd2l0Y2goZS5jb2RlKXtjYXNlImRhdGEiOnQ9IlRoZSB0ZW1wbGF0ZSBoYXMgbm8ga2V5IGRhdGEuIjticmVhaztjYXNlImxheW91dCI6dD0iVGhlIHRlbXBsYXRlIGhhcyBubyBrZXkgbGF5b3V0LiI7YnJlYWs7Y2FzZSJtaXNzaW5nIjp0PWUucGF0aD8iVGhlcmUgYXJlIG5vIHRlbXBsYXRlcyBmb3IgaXRlbSAiK2UucGF0aCsiIHdpdGggbmFtZSAiK2UudGVtcGxhdGVpdGVtbmFtZToiVGhlcmUgYXJlIG5vIHRlbXBsYXRlcyBmb3IgdHJhY2UgIitlLmluZGV4KyIsIG9mIHR5cGUgIitlLnRyYWNlVHlwZSsiLiI7YnJlYWs7Y2FzZSJ1bnVzZWQiOnQ9ZS5wYXRoPyJUaGUgdGVtcGxhdGUgaXRlbSBhdCAiK2UucGF0aCsiIHdhcyBub3QgdXNlZCBpbiBjb25zdHJ1Y3RpbmcgdGhlIHBsb3QuIjplLmRhdGFDb3VudD8iU29tZSBvZiB0aGUgdGVtcGxhdGVzIG9mIHR5cGUgIitlLnRyYWNlVHlwZSsiIHdlcmUgbm90IHVzZWQuIFRoZSB0ZW1wbGF0ZSBoYXMgIitlLnRlbXBsYXRlQ291bnQrIiB0cmFjZXMsIHRoZSBkYXRhIG9ubHkgaGFzICIrZS5kYXRhQ291bnQrIiBvZiB0aGlzIHR5cGUuIjoiVGhlIHRlbXBsYXRlIGhhcyAiK2UudGVtcGxhdGVDb3VudCsiIHRyYWNlcyBvZiB0eXBlICIrZS50cmFjZVR5cGUrIiBidXQgdGhlcmUgYXJlIG5vbmUgaW4gdGhlIGRhdGEuIjticmVhaztjYXNlInJldXNlZCI6dD0iU29tZSBvZiB0aGUgdGVtcGxhdGVzIG9mIHR5cGUgIitlLnRyYWNlVHlwZSsiIHdlcmUgdXNlZCBtb3JlIHRoYW4gb25jZS4gVGhlIHRlbXBsYXRlIGhhcyAiK2UudGVtcGxhdGVDb3VudCsiIHRyYWNlcywgdGhlIGRhdGEgaGFzICIrZS5kYXRhQ291bnQrIiBvZiB0aGlzIHR5cGUuIn1yZXR1cm4gZS5tc2c9dCxlfXIubWFrZVRlbXBsYXRlPWZ1bmN0aW9uKGUpe2U9bi5pc1BsYWluT2JqZWN0KGUpP2U6bi5nZXRHcmFwaERpdihlKSxlPW4uZXh0ZW5kRGVlcCh7X2NvbnRleHQ6Y30se2RhdGE6ZS5kYXRhLGxheW91dDplLmxheW91dH0pLG8uc3VwcGx5RGVmYXVsdHMoZSk7dmFyIHQ9ZS5kYXRhfHxbXSxyPWUubGF5b3V0fHx7fTtyLl9iYXNlUGxvdE1vZHVsZXM9ZS5fZnVsbExheW91dC5fYmFzZVBsb3RNb2R1bGVzLHIuX21vZHVsZXM9ZS5fZnVsbExheW91dC5fbW9kdWxlczt2YXIgaT17ZGF0YTp7fSxsYXlvdXQ6e319O3QuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9e307ZChlLHQsaC5iaW5kKG51bGwsZSkpO3ZhciByPW4uY29lcmNlKGUse30sbCwidHlwZSIpLGE9aS5kYXRhW3JdO2F8fChhPWkuZGF0YVtyXT1bXSksYS5wdXNoKHQpfSkpLGQocixpLmxheW91dCxwLmJpbmQobnVsbCxyKSksZGVsZXRlIGkubGF5b3V0LnRlbXBsYXRlO3ZhciBzPXIudGVtcGxhdGU7aWYoYShzKSl7dmFyIGYsZyx2LG0seSx4LGI9cy5sYXlvdXQ7YShiKSYmdShiLGkubGF5b3V0KTt2YXIgXz1zLmRhdGE7aWYoYShfKSl7Zm9yKGcgaW4gaS5kYXRhKWlmKHY9X1tnXSxBcnJheS5pc0FycmF5KHYpKXtmb3IoeD0oeT1pLmRhdGFbZ10pLmxlbmd0aCxtPXYubGVuZ3RoLGY9MDtmPHg7ZisrKXUodltmJW1dLHlbZl0pO2ZvcihmPXg7ZjxtO2YrKyl5LnB1c2gobi5leHRlbmREZWVwKHt9LHZbZl0pKX1mb3IoZyBpbiBfKWcgaW4gaS5kYXRhfHwoaS5kYXRhW2ddPW4uZXh0ZW5kRGVlcChbXSxfW2ddKSl9fXJldHVybiBpfSxyLnZhbGlkYXRlVGVtcGxhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgcj1uLmV4dGVuZERlZXAoe30se19jb250ZXh0OmMsZGF0YTplLmRhdGEsbGF5b3V0OmUubGF5b3V0fSksaT1yLmxheW91dHx8e307YSh0KXx8KHQ9aS50ZW1wbGF0ZXx8e30pO3ZhciBsPXQubGF5b3V0LHM9dC5kYXRhLHU9W107ci5sYXlvdXQ9aSxyLmxheW91dC50ZW1wbGF0ZT10LG8uc3VwcGx5RGVmYXVsdHMocik7dmFyIGQ9ci5fZnVsbExheW91dCxwPXIuX2Z1bGxEYXRhLGg9e307aWYoYShsKT8oIWZ1bmN0aW9uIGUodCxyKXtmb3IodmFyIG4gaW4gdClpZigiXyIhPT1uLmNoYXJBdCgwKSYmYSh0W25dKSl7dmFyIGksbz1mKG4pLGw9W107Zm9yKGk9MDtpPHIubGVuZ3RoO2krKylsLnB1c2goZyh0LG4scltpXSkpLG8hPT1uJiZsLnB1c2goZyh0LG8scltpXSkpO2ZvcihpPTA7aTxsLmxlbmd0aDtpKyspaFtsW2ldXT0xO2UodFtuXSxsKX19KGQsWyJsYXlvdXQiXSksZnVuY3Rpb24gZSh0LHIpe2Zvcih2YXIgbiBpbiB0KWlmKC0xPT09bi5pbmRleE9mKCJkZWZhdWx0cyIpJiZhKHRbbl0pKXt2YXIgaT1nKHQsbixyKTtoW2ldP2UodFtuXSxpKTp1LnB1c2goe2NvZGU6InVudXNlZCIscGF0aDppfSl9fShsLCJsYXlvdXQiKSk6dS5wdXNoKHtjb2RlOiJsYXlvdXQifSksYShzKSl7Zm9yKHZhciB5LHg9e30sYj0wO2I8cC5sZW5ndGg7YisrKXt2YXIgXz1wW2JdO3hbeT1fLnR5cGVdPSh4W3ldfHwwKSsxLF8uX2Z1bGxJbnB1dC5fdGVtcGxhdGV8fHUucHVzaCh7Y29kZToibWlzc2luZyIsaW5kZXg6Xy5fZnVsbElucHV0LmluZGV4LHRyYWNlVHlwZTp5fSl9Zm9yKHkgaW4gcyl7dmFyIHc9c1t5XS5sZW5ndGgsVD14W3ldfHwwO3c+VD91LnB1c2goe2NvZGU6InVudXNlZCIsdHJhY2VUeXBlOnksdGVtcGxhdGVDb3VudDp3LGRhdGFDb3VudDpUfSk6VD53JiZ1LnB1c2goe2NvZGU6InJldXNlZCIsdHJhY2VUeXBlOnksdGVtcGxhdGVDb3VudDp3LGRhdGFDb3VudDpUfSl9fWVsc2UgdS5wdXNoKHtjb2RlOiJkYXRhIn0pO2lmKGZ1bmN0aW9uIGUodCxyKXtmb3IodmFyIG4gaW4gdClpZigiXyIhPT1uLmNoYXJBdCgwKSl7dmFyIGk9dFtuXSxvPWcodCxuLHIpO2EoaSk/KEFycmF5LmlzQXJyYXkodCkmJiExPT09aS5fdGVtcGxhdGUmJmkudGVtcGxhdGVpdGVtbmFtZSYmdS5wdXNoKHtjb2RlOiJtaXNzaW5nIixwYXRoOm8sdGVtcGxhdGVpdGVtbmFtZTppLnRlbXBsYXRlaXRlbW5hbWV9KSxlKGksbykpOkFycmF5LmlzQXJyYXkoaSkmJnYoaSkmJmUoaSxvKX19KHtkYXRhOnAsbGF5b3V0OmR9LCIiKSx1Lmxlbmd0aClyZXR1cm4gdS5tYXAobSl9fSx7Ii4uL2xpYiI6MjAyLCIuLi9wbG90cy9hdHRyaWJ1dGVzIjoyNDQsIi4uL3Bsb3RzL3Bsb3RzIjoyODIsIi4vcGxvdF9jb25maWciOjIzNSwiLi9wbG90X3NjaGVtYSI6MjM2LCIuL3Bsb3RfdGVtcGxhdGUiOjIzN31dLDI0MDpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJmYXN0LWlzbnVtZXJpYyIpLGE9ZSgiLi9wbG90X2FwaSIpLGk9ZSgiLi4vcGxvdHMvcGxvdHMiKSxvPWUoIi4uL2xpYiIpLGw9ZSgiLi4vc25hcHNob3QvaGVscGVycyIpLHM9ZSgiLi4vc25hcHNob3QvdG9zdmciKSxjPWUoIi4uL3NuYXBzaG90L3N2Z3RvaW1nIiksdT1lKCIuLi92ZXJzaW9uIikudmVyc2lvbixmPXtmb3JtYXQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBuZyIsImpwZWciLCJ3ZWJwIiwic3ZnIiwiZnVsbC1qc29uIl0sZGZsdDoicG5nIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjF9LGhlaWdodDp7dmFsVHlwZToibnVtYmVyIixtaW46MX0sc2NhbGU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSxzZXRCYWNrZ3JvdW5kOnt2YWxUeXBlOiJhbnkiLGRmbHQ6ITF9LGltYWdlRGF0YU9ubHk6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9fTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcixkLHAsaDtmdW5jdGlvbiBnKGUpe3JldHVybiEoZSBpbiB0KXx8by52YWxpZGF0ZSh0W2VdLGZbZV0pfWlmKHQ9dHx8e30sby5pc1BsYWluT2JqZWN0KGUpPyhyPWUuZGF0YXx8W10sZD1lLmxheW91dHx8e30scD1lLmNvbmZpZ3x8e30saD17fSk6KGU9by5nZXRHcmFwaERpdihlKSxyPW8uZXh0ZW5kRGVlcChbXSxlLmRhdGEpLGQ9by5leHRlbmREZWVwKHt9LGUubGF5b3V0KSxwPWUuX2NvbnRleHQsaD1lLl9mdWxsTGF5b3V0fHx7fSksIWcoIndpZHRoIikmJm51bGwhPT10LndpZHRofHwhZygiaGVpZ2h0IikmJm51bGwhPT10LmhlaWdodCl0aHJvdyBuZXcgRXJyb3IoIkhlaWdodCBhbmQgd2lkdGggc2hvdWxkIGJlIHBpeGVsIHZhbHVlcy4iKTtpZighZygiZm9ybWF0IikpdGhyb3cgbmV3IEVycm9yKCJFeHBvcnQgZm9ybWF0IGlzIG5vdCAiK28uam9pbjIoZi5mb3JtYXQudmFsdWVzLCIsICIsIiBvciAiKSsiLiIpO3ZhciB2PXt9O2Z1bmN0aW9uIG0oZSxyKXtyZXR1cm4gby5jb2VyY2UodCx2LGYsZSxyKX12YXIgeT1tKCJmb3JtYXQiKSx4PW0oIndpZHRoIiksYj1tKCJoZWlnaHQiKSxfPW0oInNjYWxlIiksdz1tKCJzZXRCYWNrZ3JvdW5kIiksVD1tKCJpbWFnZURhdGFPbmx5Iiksaz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtrLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsay5zdHlsZS5sZWZ0PSItNTAwMHB4Iixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGspO3ZhciBNPW8uZXh0ZW5kRmxhdCh7fSxkKTt4P00ud2lkdGg9eDpudWxsPT09dC53aWR0aCYmbihoLndpZHRoKSYmKE0ud2lkdGg9aC53aWR0aCksYj9NLmhlaWdodD1iOm51bGw9PT10LmhlaWdodCYmbihoLmhlaWdodCkmJihNLmhlaWdodD1oLmhlaWdodCk7dmFyIEE9by5leHRlbmRGbGF0KHt9LHAse19leHBvcnRlZFBsb3Q6ITAsc3RhdGljUGxvdDohMCxzZXRCYWNrZ3JvdW5kOnd9KSxMPWwuZ2V0UmVkcmF3RnVuYyhrKTtmdW5jdGlvbiBTKCl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihlKXtzZXRUaW1lb3V0KGUsbC5nZXREZWxheShrLl9mdWxsTGF5b3V0KSl9KSl9ZnVuY3Rpb24gQygpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSx0KXt2YXIgcj1zKGsseSxfKSxuPWsuX2Z1bGxMYXlvdXQud2lkdGgsZj1rLl9mdWxsTGF5b3V0LmhlaWdodDtmdW5jdGlvbiBkKCl7YS5wdXJnZShrKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGspfWlmKCJmdWxsLWpzb24iPT09eSl7dmFyIHA9aS5ncmFwaEpzb24oaywhMSwia2VlcGRhdGEiLCJvYmplY3QiLCEwLCEwKTtyZXR1cm4gcC52ZXJzaW9uPXUscD1KU09OLnN0cmluZ2lmeShwKSxkKCksZShUP3A6bC5lbmNvZGVKU09OKHApKX1pZihkKCksInN2ZyI9PT15KXJldHVybiBlKFQ/cjpsLmVuY29kZVNWRyhyKSk7dmFyIGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7aC5pZD1vLnJhbmRzdHIoKSxjKHtmb3JtYXQ6eSx3aWR0aDpuLGhlaWdodDpmLHNjYWxlOl8sY2FudmFzOmgsc3ZnOnIscHJvbWlzZTohMH0pLnRoZW4oZSkuY2F0Y2godCl9KSl9cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihlLHQpe2EucGxvdChrLHIsTSxBKS50aGVuKEwpLnRoZW4oUykudGhlbihDKS50aGVuKChmdW5jdGlvbih0KXtlKGZ1bmN0aW9uKGUpe3JldHVybiBUP2UucmVwbGFjZShsLklNQUdFX1VSTF9QUkVGSVgsIiIpOmV9KHQpKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7dChlKX0pKX0pKX19LHsiLi4vbGliIjoyMDIsIi4uL3Bsb3RzL3Bsb3RzIjoyODIsIi4uL3NuYXBzaG90L2hlbHBlcnMiOjI5NCwiLi4vc25hcHNob3Qvc3ZndG9pbWciOjI5NiwiLi4vc25hcHNob3QvdG9zdmciOjI5OCwiLi4vdmVyc2lvbiI6MzU4LCIuL3Bsb3RfYXBpIjoyMzQsImZhc3QtaXNudW1lcmljIjoxMX1dLDI0MTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi9saWIiKSxhPWUoIi4uL3Bsb3RzL3Bsb3RzIiksaT1lKCIuL3Bsb3Rfc2NoZW1hIiksbz1lKCIuL3Bsb3RfY29uZmlnIikuZGZsdENvbmZpZyxsPW4uaXNQbGFpbk9iamVjdCxzPUFycmF5LmlzQXJyYXksYz1uLmlzQXJyYXlPclR5cGVkQXJyYXk7ZnVuY3Rpb24gdShlLHQscixhLGksbyl7bz1vfHxbXTtmb3IodmFyIGY9T2JqZWN0LmtleXMoZSksZD0wO2Q8Zi5sZW5ndGg7ZCsrKXt2YXIgcD1mW2RdO2lmKCJ0cmFuc2Zvcm1zIiE9PXApe3ZhciBtPW8uc2xpY2UoKTttLnB1c2gocCk7dmFyIHk9ZVtwXSx4PXRbcF0sYj12KHIscCksXz0oYnx8e30pLnZhbFR5cGUsdz0iaW5mb19hcnJheSI9PT1fLFQ9ImNvbG9yc2NhbGUiPT09XyxrPShifHx7fSkuaXRlbXM7aWYoZyhyLHApKWlmKGwoeSkmJmwoeCkmJiJhbnkiIT09Xyl1KHkseCxiLGEsaSxtKTtlbHNlIGlmKHcmJnMoeSkpe3kubGVuZ3RoPngubGVuZ3RoJiZhLnB1c2goaCgidW51c2VkIixpLG0uY29uY2F0KHgubGVuZ3RoKSkpO3ZhciBNLEEsTCxTLEMsTz14Lmxlbmd0aCxEPUFycmF5LmlzQXJyYXkoayk7aWYoRCYmKE89TWF0aC5taW4oTyxrLmxlbmd0aCkpLDI9PT1iLmRpbWVuc2lvbnMpZm9yKEE9MDtBPE87QSsrKWlmKHMoeVtBXSkpe3lbQV0ubGVuZ3RoPnhbQV0ubGVuZ3RoJiZhLnB1c2goaCgidW51c2VkIixpLG0uY29uY2F0KEEseFtBXS5sZW5ndGgpKSk7dmFyIFA9eFtBXS5sZW5ndGg7Zm9yKE09MDtNPChEP01hdGgubWluKFAsa1tBXS5sZW5ndGgpOlApO00rKylMPUQ/a1tBXVtNXTprLFM9eVtBXVtNXSxDPXhbQV1bTV0sbi52YWxpZGF0ZShTLEwpP0MhPT1TJiZDIT09K1MmJmEucHVzaChoKCJkeW5hbWljIixpLG0uY29uY2F0KEEsTSksUyxDKSk6YS5wdXNoKGgoInZhbHVlIixpLG0uY29uY2F0KEEsTSksUykpfWVsc2UgYS5wdXNoKGgoImFycmF5IixpLG0uY29uY2F0KEEpLHlbQV0pKTtlbHNlIGZvcihBPTA7QTxPO0ErKylMPUQ/a1tBXTprLFM9eVtBXSxDPXhbQV0sbi52YWxpZGF0ZShTLEwpP0MhPT1TJiZDIT09K1MmJmEucHVzaChoKCJkeW5hbWljIixpLG0uY29uY2F0KEEpLFMsQykpOmEucHVzaChoKCJ2YWx1ZSIsaSxtLmNvbmNhdChBKSxTKSl9ZWxzZSBpZihiLml0ZW1zJiYhdyYmcyh5KSl7dmFyIHosUixFPWtbT2JqZWN0LmtleXMoaylbMF1dLEk9W107Zm9yKHo9MDt6PHgubGVuZ3RoO3orKyl7dmFyIEY9eFt6XS5faW5kZXh8fHo7aWYoKFI9bS5zbGljZSgpKS5wdXNoKEYpLGwoeVtGXSkmJmwoeFt6XSkpe0kucHVzaChGKTt2YXIgTj15W0ZdLEg9eFt6XTtsKE4pJiYhMSE9PU4udmlzaWJsZSYmITE9PT1ILnZpc2libGU/YS5wdXNoKGgoImludmlzaWJsZSIsaSxSKSk6dShOLEgsRSxhLGksUil9fWZvcih6PTA7ejx5Lmxlbmd0aDt6KyspKFI9bS5zbGljZSgpKS5wdXNoKHopLGwoeVt6XSk/LTE9PT1JLmluZGV4T2YoeikmJmEucHVzaChoKCJ1bnVzZWQiLGksUikpOmEucHVzaChoKCJvYmplY3QiLGksUix5W3pdKSl9ZWxzZSFsKHkpJiZsKHgpP2EucHVzaChoKCJvYmplY3QiLGksbSx5KSk6Yyh5KXx8IWMoeCl8fHd8fFQ/cCBpbiB0P24udmFsaWRhdGUoeSxiKT8iZW51bWVyYXRlZCI9PT1iLnZhbFR5cGUmJihiLmNvZXJjZU51bWJlciYmeSE9PSt4fHx5IT09eCkmJmEucHVzaChoKCJkeW5hbWljIixpLG0seSx4KSk6YS5wdXNoKGgoInZhbHVlIixpLG0seSkpOmEucHVzaChoKCJ1bnVzZWQiLGksbSx5KSk6YS5wdXNoKGgoImFycmF5IixpLG0seSkpO2Vsc2UgYS5wdXNoKGgoInNjaGVtYSIsaSxtKSl9fXJldHVybiBhfWZ1bmN0aW9uIGYoZSx0KXtmb3IodmFyIHI9ZS5sYXlvdXQubGF5b3V0QXR0cmlidXRlcyxhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBpPXRbYV0sbz1lLnRyYWNlc1tpLnR5cGVdLGw9by5sYXlvdXRBdHRyaWJ1dGVzO2wmJihpLnN1YnBsb3Q/bi5leHRlbmRGbGF0KHJbby5hdHRyaWJ1dGVzLnN1YnBsb3QuZGZsdF0sbCk6bi5leHRlbmRGbGF0KHIsbCkpfXJldHVybiByfXQuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PWUmJihlPVtdKSx2b2lkIDA9PT10JiYodD17fSk7dmFyIHIsYyxkPWkuZ2V0KCkscD1bXSxnPXtfY29udGV4dDpuLmV4dGVuZEZsYXQoe30sbyl9O3MoZSk/KGcuZGF0YT1uLmV4dGVuZERlZXAoW10sZSkscj1lKTooZy5kYXRhPVtdLHI9W10scC5wdXNoKGgoImFycmF5IiwiZGF0YSIpKSksbCh0KT8oZy5sYXlvdXQ9bi5leHRlbmREZWVwKHt9LHQpLGM9dCk6KGcubGF5b3V0PXt9LGM9e30sYXJndW1lbnRzLmxlbmd0aD4xJiZwLnB1c2goaCgib2JqZWN0IiwibGF5b3V0IikpKSxhLnN1cHBseURlZmF1bHRzKGcpO2Zvcih2YXIgdj1nLl9mdWxsRGF0YSxtPXIubGVuZ3RoLHk9MDt5PG07eSsrKXt2YXIgeD1yW3ldLGI9WyJkYXRhIix5XTtpZihsKHgpKXt2YXIgXz12W3ldLHc9Xy50eXBlLFQ9ZC50cmFjZXNbd10uYXR0cmlidXRlcztULnR5cGU9e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbd119LCExPT09Xy52aXNpYmxlJiYhMSE9PXgudmlzaWJsZSYmcC5wdXNoKGgoImludmlzaWJsZSIsYikpLHUoeCxfLFQscCxiKTt2YXIgaz14LnRyYW5zZm9ybXMsTT1fLnRyYW5zZm9ybXM7aWYoayl7cyhrKXx8cC5wdXNoKGgoImFycmF5IixiLFsidHJhbnNmb3JtcyJdKSksYi5wdXNoKCJ0cmFuc2Zvcm1zIik7Zm9yKHZhciBBPTA7QTxrLmxlbmd0aDtBKyspe3ZhciBMPVsidHJhbnNmb3JtcyIsQV0sUz1rW0FdLnR5cGU7aWYobChrW0FdKSl7dmFyIEM9ZC50cmFuc2Zvcm1zW1NdP2QudHJhbnNmb3Jtc1tTXS5hdHRyaWJ1dGVzOnt9O0MudHlwZT17dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOk9iamVjdC5rZXlzKGQudHJhbnNmb3Jtcyl9LHUoa1tBXSxNW0FdLEMscCxiLEwpfWVsc2UgcC5wdXNoKGgoIm9iamVjdCIsYixMKSl9fX1lbHNlIHAucHVzaChoKCJvYmplY3QiLGIpKX12YXIgTz1nLl9mdWxsTGF5b3V0LEQ9ZihkLHYpO3JldHVybiB1KGMsTyxELHAsImxheW91dCIpLDA9PT1wLmxlbmd0aD92b2lkIDA6cH07dmFyIGQ9e29iamVjdDpmdW5jdGlvbihlLHQpe3JldHVybigibGF5b3V0Ij09PWUmJiIiPT09dD8iVGhlIGxheW91dCBhcmd1bWVudCI6ImRhdGEiPT09ZVswXSYmIiI9PT10PyJUcmFjZSAiK2VbMV0rIiBpbiB0aGUgZGF0YSBhcmd1bWVudCI6cChlKSsia2V5ICIrdCkrIiBtdXN0IGJlIGxpbmtlZCB0byBhbiBvYmplY3QgY29udGFpbmVyIn0sYXJyYXk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4oImRhdGEiPT09ZT8iVGhlIGRhdGEgYXJndW1lbnQiOnAoZSkrImtleSAiK3QpKyIgbXVzdCBiZSBsaW5rZWQgdG8gYW4gYXJyYXkgY29udGFpbmVyIn0sc2NoZW1hOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHAoZSkrImtleSAiK3QrIiBpcyBub3QgcGFydCBvZiB0aGUgc2NoZW1hIn0sdW51c2VkOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1sKHIpPyJjb250YWluZXIiOiJrZXkiO3JldHVybiBwKGUpK24rIiAiK3QrIiBkaWQgbm90IGdldCBjb2VyY2VkIn0sZHluYW1pYzpmdW5jdGlvbihlLHQscixuKXtyZXR1cm5bcChlKSsia2V5Iix0LCIoc2V0IHRvICciK3IrIicpIiwiZ290IHJlc2V0IHRvIiwiJyIrbisiJyIsImR1cmluZyBkZWZhdWx0cy4iXS5qb2luKCIgIil9LGludmlzaWJsZTpmdW5jdGlvbihlLHQpe3JldHVybih0P3AoZSkrIml0ZW0gIit0OiJUcmFjZSAiK2VbMV0pKyIgZ290IGRlZmF1bHRlZCB0byBiZSBub3QgdmlzaWJsZSJ9LHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm5bcChlKSsia2V5ICIrdCwiaXMgc2V0IHRvIGFuIGludmFsaWQgdmFsdWUgKCIrcisiKSJdLmpvaW4oIiAiKX19O2Z1bmN0aW9uIHAoZSl7cmV0dXJuIHMoZSk/IkluIGRhdGEgdHJhY2UgIitlWzFdKyIsICI6IkluICIrZSsiLCAifWZ1bmN0aW9uIGgoZSx0LHIsYSxpKXt2YXIgbyxsO3I9cnx8IiIscyh0KT8obz10WzBdLGw9dFsxXSk6KG89dCxsPW51bGwpO3ZhciBjPWZ1bmN0aW9uKGUpe2lmKCFzKGUpKXJldHVybiBTdHJpbmcoZSk7Zm9yKHZhciB0PSIiLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTsibnVtYmVyIj09dHlwZW9mIG4/dD10LnN1YnN0cigwLHQubGVuZ3RoLTEpKyJbIituKyJdIjp0Kz1uLHI8ZS5sZW5ndGgtMSYmKHQrPSIuIil9cmV0dXJuIHR9KHIpLHU9ZFtlXSh0LGMsYSxpKTtyZXR1cm4gbi5sb2codSkse2NvZGU6ZSxjb250YWluZXI6byx0cmFjZTpsLHBhdGg6cixhc3RyOmMsbXNnOnV9fWZ1bmN0aW9uIGcoZSx0KXt2YXIgcj15KHQpLG49ci5rZXlNaW51c0lkLGE9ci5pZDtyZXR1cm4hIShuIGluIGUmJmVbbl0uX2lzU3VicGxvdE9iaiYmYSl8fHQgaW4gZX1mdW5jdGlvbiB2KGUsdCl7cmV0dXJuIHQgaW4gZT9lW3RdOmVbeSh0KS5rZXlNaW51c0lkXX12YXIgbT1uLmNvdW50ZXJSZWdleCgiKFthLXpdKykiKTtmdW5jdGlvbiB5KGUpe3ZhciB0PWUubWF0Y2gobSk7cmV0dXJue2tleU1pbnVzSWQ6dCYmdFsxXSxpZDp0JiZ0WzJdfX19LHsiLi4vbGliIjoyMDIsIi4uL3Bsb3RzL3Bsb3RzIjoyODIsIi4vcGxvdF9jb25maWciOjIzNSwiLi9wbG90X3NjaGVtYSI6MjM2fV0sMjQyOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz17bW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsZGZsdDoiYWZ0ZXJhbGwiLHZhbHVlczpbImltbWVkaWF0ZSIsIm5leHQiLCJhZnRlcmFsbCJdfSxkaXJlY3Rpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZvcndhcmQiLCJyZXZlcnNlIl0sZGZsdDoiZm9yd2FyZCJ9LGZyb21jdXJyZW50Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxmcmFtZTp7ZHVyYXRpb246e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDo1MDB9LHJlZHJhdzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH19LHRyYW5zaXRpb246e2R1cmF0aW9uOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6NTAwLGVkaXRUeXBlOiJub25lIn0sZWFzaW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixkZmx0OiJjdWJpYy1pbi1vdXQiLHZhbHVlczpbImxpbmVhciIsInF1YWQiLCJjdWJpYyIsInNpbiIsImV4cCIsImNpcmNsZSIsImVsYXN0aWMiLCJiYWNrIiwiYm91bmNlIiwibGluZWFyLWluIiwicXVhZC1pbiIsImN1YmljLWluIiwic2luLWluIiwiZXhwLWluIiwiY2lyY2xlLWluIiwiZWxhc3RpYy1pbiIsImJhY2staW4iLCJib3VuY2UtaW4iLCJsaW5lYXItb3V0IiwicXVhZC1vdXQiLCJjdWJpYy1vdXQiLCJzaW4tb3V0IiwiZXhwLW91dCIsImNpcmNsZS1vdXQiLCJlbGFzdGljLW91dCIsImJhY2stb3V0IiwiYm91bmNlLW91dCIsImxpbmVhci1pbi1vdXQiLCJxdWFkLWluLW91dCIsImN1YmljLWluLW91dCIsInNpbi1pbi1vdXQiLCJleHAtaW4tb3V0IiwiY2lyY2xlLWluLW91dCIsImVsYXN0aWMtaW4tb3V0IiwiYmFjay1pbi1vdXQiLCJib3VuY2UtaW4tb3V0Il0sZWRpdFR5cGU6Im5vbmUifSxvcmRlcmluZzp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGF5b3V0IGZpcnN0IiwidHJhY2VzIGZpcnN0Il0sZGZsdDoibGF5b3V0IGZpcnN0IixlZGl0VHlwZToibm9uZSJ9fX19LHt9XSwyNDM6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vbGliIiksYT1lKCIuLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgaSxvLGw9ci5uYW1lLHM9ci5pbmNsdXNpb25BdHRyfHwidmlzaWJsZSIsYz10W2xdLHU9bi5pc0FycmF5T3JUeXBlZEFycmF5KGVbbF0pP2VbbF06W10sZj10W2xdPVtdLGQ9YS5hcnJheVRlbXBsYXRlcih0LGwscyk7Zm9yKGk9MDtpPHUubGVuZ3RoO2krKyl7dmFyIHA9dVtpXTtuLmlzUGxhaW5PYmplY3QocCk/bz1kLm5ld0l0ZW0ocCk6KG89ZC5uZXdJdGVtKHt9KSlbc109ITEsby5faW5kZXg9aSwhMSE9PW9bc10mJnIuaGFuZGxlSXRlbURlZmF1bHRzKHAsbyx0LHIpLGYucHVzaChvKX12YXIgaD1kLmRlZmF1bHRJdGVtcygpO2ZvcihpPTA7aTxoLmxlbmd0aDtpKyspKG89aFtpXSkuX2luZGV4PWYubGVuZ3RoLHIuaGFuZGxlSXRlbURlZmF1bHRzKHt9LG8sdCxyLHt9KSxmLnB1c2gobyk7aWYobi5pc0FycmF5T3JUeXBlZEFycmF5KGMpKXt2YXIgZz1NYXRoLm1pbihjLmxlbmd0aCxmLmxlbmd0aCk7Zm9yKGk9MDtpPGc7aSsrKW4ucmVsaW5rUHJpdmF0ZUtleXMoZltpXSxjW2ldKX1yZXR1cm4gZn19LHsiLi4vbGliIjoyMDIsIi4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjIzN31dLDI0NDpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi9jb21wb25lbnRzL2Z4L2F0dHJpYnV0ZXMiKTt0LmV4cG9ydHM9e3R5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbXSxkZmx0OiJzY2F0dGVyIixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyIsX25vVGVtcGxhdGluZzohMH0sdmlzaWJsZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMCwhMSwibGVnZW5kb25seSJdLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSxzaG93bGVnZW5kOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJzdHlsZSJ9LGxlZ2VuZGdyb3VwOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6InN0eWxlIn0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjEsZWRpdFR5cGU6InN0eWxlIn0sbmFtZTp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToic3R5bGUifSx1aWQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6InBsb3QiLGFuaW06ITB9LGlkczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMiLGFuaW06ITB9LGN1c3RvbWRhdGE6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sbWV0YTp7dmFsVHlwZToiYW55IixhcnJheU9rOiEwLGVkaXRUeXBlOiJwbG90In0sc2VsZWN0ZWRwb2ludHM6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSxob3ZlcmluZm86e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbIngiLCJ5IiwieiIsInRleHQiLCJuYW1lIl0sZXh0cmFzOlsiYWxsIiwibm9uZSIsInNraXAiXSxhcnJheU9rOiEwLGRmbHQ6ImFsbCIsZWRpdFR5cGU6Im5vbmUifSxob3ZlcmxhYmVsOm4uaG92ZXJsYWJlbCxzdHJlYW06e3Rva2VuOnt2YWxUeXBlOiJzdHJpbmciLG5vQmxhbms6ITAsc3RyaWN0OiEwLGVkaXRUeXBlOiJjYWxjIn0sbWF4cG9pbnRzOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxZTQsZGZsdDo1MDAsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LHRyYW5zZm9ybXM6e19pc0xpbmtlZFRvQXJyYXk6InRyYW5zZm9ybSIsZWRpdFR5cGU6ImNhbGMifSx1aXJldmlzaW9uOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn19fSx7Ii4uL2NvbXBvbmVudHMvZngvYXR0cmlidXRlcyI6MTA2fV0sMjQ1OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoImZhc3QtaXNudW1lcmljIiksYT1lKCIuLi8uLi9saWIiKSxpPWEuZGF0ZVRpbWUybXMsbz1hLmluY3JlbWVudE1vbnRoLGw9ZSgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLk9ORUFWR01PTlRIO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscixhKXtpZigiZGF0ZSIhPT10LnR5cGUpcmV0dXJuIGE7dmFyIHM9ZVtyKyJwZXJpb2RhbGlnbm1lbnQiXTtpZighcylyZXR1cm4gYTt2YXIgYyx1PWVbcisicGVyaW9kIl07aWYobih1KSl7aWYoKHU9K3UpPD0wKXJldHVybiBhfWVsc2UgaWYoInN0cmluZyI9PXR5cGVvZiB1JiYiTSI9PT11LmNoYXJBdCgwKSl7dmFyIGY9K3Uuc3Vic3RyaW5nKDEpO2lmKCEoZj4wJiZNYXRoLnJvdW5kKGYpPT09ZikpcmV0dXJuIGE7Yz1mfWZvcih2YXIgZD10LmNhbGVuZGFyLHA9InN0YXJ0Ij09PXMsaD0iZW5kIj09PXMsZz1lW3IrInBlcmlvZDAiXSx2PWkoZyxkKXx8MCxtPVtdLHk9YS5sZW5ndGgseD0wO3g8eTt4Kyspe3ZhciBiLF8sdyxUPWFbeF07aWYoYyl7Zm9yKGI9TWF0aC5yb3VuZCgoVC12KS8oYypsKSksdz1vKHYsYypiLGQpO3c+VDspdz1vKHcsLWMsZCk7Zm9yKDt3PD1UOyl3PW8odyxjLGQpO189byh3LC1jLGQpfWVsc2V7Zm9yKHc9disoYj1NYXRoLnJvdW5kKChULXYpL3UpKSp1O3c+VDspdy09dTtmb3IoO3c8PVQ7KXcrPXU7Xz13LXV9bVt4XT1wP186aD93OihfK3cpLzJ9cmV0dXJuIG19fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjE4MSwiLi4vLi4vbGliIjoyMDIsImZhc3QtaXNudW1lcmljIjoxMX1dLDI0NjpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9e3hheGlzOnt2YWxUeXBlOiJzdWJwbG90aWQiLGRmbHQ6IngiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seWF4aXM6e3ZhbFR5cGU6InN1YnBsb3RpZCIsZGZsdDoieSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifX19LHt9XSwyNDc6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiZmFzdC1pc251bWVyaWMiKSxhPWUoIi4uLy4uL2xpYiIpLGk9ZSgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkZQX1NBRkUsbz1lKCIuLi8uLi9yZWdpc3RyeSIpLGw9ZSgiLi9heGlzX2lkcyIpLHM9bC5nZXRGcm9tSWQsYz1sLmlzTGlua2VkO2Z1bmN0aW9uIHUoZSx0KXt2YXIgcixuLGk9W10sbz1lLl9mdWxsTGF5b3V0LGw9ZChvLHQsMCkscz1kKG8sdCwxKSxjPXAoZSx0KSx1PWMubWluLGg9Yy5tYXg7aWYoMD09PXUubGVuZ3RofHwwPT09aC5sZW5ndGgpcmV0dXJuIGEuc2ltcGxlTWFwKHQucmFuZ2UsdC5yMmwpO3ZhciBnPXVbMF0udmFsLHY9aFswXS52YWw7Zm9yKHI9MTtyPHUubGVuZ3RoJiZnPT09djtyKyspZz1NYXRoLm1pbihnLHVbcl0udmFsKTtmb3Iocj0xO3I8aC5sZW5ndGgmJmc9PT12O3IrKyl2PU1hdGgubWF4KHYsaFtyXS52YWwpO3ZhciBtPSExO2lmKHQucmFuZ2Upe3ZhciB5PWEuc2ltcGxlTWFwKHQucmFuZ2UsdC5yMmwpO209eVsxXTx5WzBdfSJyZXZlcnNlZCI9PT10LmF1dG9yYW5nZSYmKG09ITAsdC5hdXRvcmFuZ2U9ITApO3ZhciB4LGIsXyx3LFQsayxNPXQucmFuZ2Vtb2RlLEE9InRvemVybyI9PT1NLEw9Im5vbm5lZ2F0aXZlIj09PU0sUz10Ll9sZW5ndGgsQz1TLzEwLE89MDtmb3Iocj0wO3I8dS5sZW5ndGg7cisrKWZvcih4PXVbcl0sbj0wO248aC5sZW5ndGg7bisrKShrPShiPWhbbl0pLnZhbC14LnZhbC1mKHQseC52YWwsYi52YWwpKT4wJiYoKFQ9Uy1sKHgpLXMoYikpPkM/ay9UPk8mJihfPXgsdz1iLE89ay9UKTprL1M+TyYmKF89e3ZhbDp4LnZhbCxub3BhZDoxfSx3PXt2YWw6Yi52YWwsbm9wYWQ6MX0sTz1rL1MpKTtpZihnPT09dil7dmFyIEQ9Zy0xLFA9ZysxO2lmKEEpaWYoMD09PWcpaT1bMCwxXTtlbHNle3ZhciB6PShnPjA/aDp1KS5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIE1hdGgubWF4KGUscyh0KSl9KSwwKSxSPWcvKDEtTWF0aC5taW4oLjUsei9TKSk7aT1nPjA/WzAsUl06W1IsMF19ZWxzZSBpPUw/W01hdGgubWF4KDAsRCksTWF0aC5tYXgoMSxQKV06W0QsUF19ZWxzZSBBPyhfLnZhbD49MCYmKF89e3ZhbDowLG5vcGFkOjF9KSx3LnZhbDw9MCYmKHc9e3ZhbDowLG5vcGFkOjF9KSk6TCYmKF8udmFsLU8qbChfKTwwJiYoXz17dmFsOjAsbm9wYWQ6MX0pLHcudmFsPD0wJiYodz17dmFsOjEsbm9wYWQ6MX0pKSxPPSh3LnZhbC1fLnZhbC1mKHQseC52YWwsYi52YWwpKS8oUy1sKF8pLXModykpLGk9W18udmFsLU8qbChfKSx3LnZhbCtPKnModyldO3JldHVybiBtJiZpLnJldmVyc2UoKSxhLnNpbXBsZU1hcChpLHQubDJyfHxOdW1iZXIpfWZ1bmN0aW9uIGYoZSx0LHIpe3ZhciBuPTA7aWYoZS5yYW5nZWJyZWFrcylmb3IodmFyIGE9ZS5sb2NhdGVCcmVha3ModCxyKSxpPTA7aTxhLmxlbmd0aDtpKyspe3ZhciBvPWFbaV07bis9by5tYXgtby5taW59cmV0dXJuIG59ZnVuY3Rpb24gZChlLHQscil7dmFyIG49LjA1KnQuX2xlbmd0aCxpPXQuX2FuY2hvckF4aXN8fHt9O2lmKC0xIT09KHQudGlja2xhYmVscG9zaXRpb258fCIiKS5pbmRleE9mKCJpbnNpZGUiKXx8LTEhPT0oaS50aWNrbGFiZWxwb3NpdGlvbnx8IiIpLmluZGV4T2YoImluc2lkZSIpKXt2YXIgbz0icmV2ZXJzZWQiPT09dC5hdXRvcmFuZ2U7aWYoIW8pe3ZhciBsPWEuc2ltcGxlTWFwKHQucmFuZ2UsdC5yMmwpO289bFsxXTxsWzBdfW8mJihyPSFyKX12YXIgcz0wO3JldHVybiBjKGUsdC5faWQpfHwocz1mdW5jdGlvbihlLHQpe3ZhciByPTAsbj1lLl9hbmNob3JBeGlzfHx7fTtpZigtMSE9PShuLnRpY2tsYWJlbHBvc2l0aW9ufHwiIikuaW5kZXhPZigiaW5zaWRlIikmJighdCYmKCJsZWZ0Ij09PW4uc2lkZXx8ImJvdHRvbSI9PT1uLnNpZGUpfHx0JiYoInRvcCI9PT1uLnNpZGV8fCJyaWdodCI9PT1uLnNpZGUpKSl7dmFyIGk9IngiPT09ZS5faWQuY2hhckF0KDApO2lmKG4uX3ZhbHMpe3ZhciBvPWEuZGVnMnJhZChuLl90aWNrQW5nbGVzW24uX2lkKyJ0aWNrIl18fDApLGw9TWF0aC5hYnMoTWF0aC5jb3MobykpLHM9TWF0aC5hYnMoTWF0aC5zaW4obykpO24uX3ZhbHMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aWYoZS5iYil7dmFyIHQ9NitlLmJiLndpZHRoLG49NitlLmJiLmhlaWdodDtyPU1hdGgubWF4KHIsaT9NYXRoLm1heCh0KmwsbipzKTpNYXRoLm1heChuKmwsdCpzKSl9fSkpfSJpbnNpZGUiPT09bi50aWNrcyYmImluc2lkZSI9PT1uLnRpY2tsYWJlbHBvc2l0aW9uJiYocis9bi50aWNrbGVufHwwKX1yZXR1cm4gcn0odCxyKSksbj1NYXRoLm1heChzLG4pLCJkb21haW4iPT09dC5jb25zdHJhaW4mJnQuX2lucHV0RG9tYWluJiYobio9KHQuX2lucHV0RG9tYWluWzFdLXQuX2lucHV0RG9tYWluWzBdKS8odC5kb21haW5bMV0tdC5kb21haW5bMF0pKSxmdW5jdGlvbihlKXtyZXR1cm4gZS5ub3BhZD8wOmUucGFkKyhlLmV4dHJhcGFkP246cyl9fXQuZXhwb3J0cz17Z2V0QXV0b1JhbmdlOnUsbWFrZVBhZEZuOmQsZG9BdXRvUmFuZ2U6ZnVuY3Rpb24oZSx0LHIpe2lmKHQuc2V0U2NhbGUoKSx0LmF1dG9yYW5nZSl7dC5yYW5nZT1yP3Iuc2xpY2UoKTp1KGUsdCksdC5fcj10LnJhbmdlLnNsaWNlKCksdC5fcmw9YS5zaW1wbGVNYXAodC5fcix0LnIybCk7dmFyIG49dC5faW5wdXQsaT17fTtpW3QuX2F0dHIrIi5yYW5nZSJdPXQucmFuZ2UsaVt0Ll9hdHRyKyIuYXV0b3JhbmdlIl09dC5hdXRvcmFuZ2Usby5jYWxsKCJfc3RvcmVEaXJlY3RHVUlFZGl0IixlLmxheW91dCxlLl9mdWxsTGF5b3V0Ll9wcmVHVUksaSksbi5yYW5nZT10LnJhbmdlLnNsaWNlKCksbi5hdXRvcmFuZ2U9dC5hdXRvcmFuZ2V9dmFyIGw9dC5fYW5jaG9yQXhpcztpZihsJiZsLnJhbmdlc2xpZGVyKXt2YXIgcz1sLnJhbmdlc2xpZGVyW3QuX25hbWVdO3MmJiJhdXRvIj09PXMucmFuZ2Vtb2RlJiYocy5yYW5nZT11KGUsdCkpLGwuX2lucHV0LnJhbmdlc2xpZGVyW3QuX25hbWVdPWEuZXh0ZW5kRmxhdCh7fSxzKX19LGZpbmRFeHRyZW1lczpmdW5jdGlvbihlLHQscil7cnx8KHI9e30pO2UuX218fGUuc2V0U2NhbGUoKTt2YXIgYSxvLGwscyxjLHUsZixkLHAsdj1bXSx5PVtdLHg9dC5sZW5ndGgsYj1yLnBhZGRlZHx8ITEsXz1yLnRvemVybyYmKCJsaW5lYXIiPT09ZS50eXBlfHwiLSI9PT1lLnR5cGUpLHc9ImxvZyI9PT1lLnR5cGUsVD0hMSxrPXIudnBhZExpbmVhcml6ZWR8fCExO2Z1bmN0aW9uIE0oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gVD0hMCxmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoTnVtYmVyKGVbdF18fDApLDApfTt2YXIgdD1NYXRoLm1heChOdW1iZXIoZXx8MCksMCk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fXZhciBBPU0oKGUuX20+MD9yLnBwYWRwbHVzOnIucHBhZG1pbnVzKXx8ci5wcGFkfHwwKSxMPU0oKGUuX20+MD9yLnBwYWRtaW51czpyLnBwYWRwbHVzKXx8ci5wcGFkfHwwKSxTPU0oci52cGFkcGx1c3x8ci52cGFkKSxDPU0oci52cGFkbWludXN8fHIudnBhZCk7aWYoIVQpe2lmKGQ9MS8wLHA9LTEvMCx3KWZvcihhPTA7YTx4O2ErKykobz10W2FdKTxkJiZvPjAmJihkPW8pLG8+cCYmbzxpJiYocD1vKTtlbHNlIGZvcihhPTA7YTx4O2ErKykobz10W2FdKTxkJiZvPi1pJiYoZD1vKSxvPnAmJm88aSYmKHA9byk7dD1bZCxwXSx4PTJ9dmFyIE89e3RvemVybzpfLGV4dHJhcGFkOmJ9O2Z1bmN0aW9uIEQocil7bD10W3JdLG4obCkmJih1PUEociksZj1MKHIpLGs/KHM9ZS5jMmwobCktQyhyKSxjPWUuYzJsKGwpK1MocikpOihkPWwtQyhyKSxwPWwrUyhyKSx3JiZkPHAvMTAmJihkPXAvMTApLHM9ZS5jMmwoZCksYz1lLmMybChwKSksXyYmKHM9TWF0aC5taW4oMCxzKSxjPU1hdGgubWF4KDAsYykpLG0ocykmJmgodixzLGYsTyksbShjKSYmZyh5LGMsdSxPKSl9dmFyIFA9TWF0aC5taW4oNix4KTtmb3IoYT0wO2E8UDthKyspRChhKTtmb3IoYT14LTE7YT49UDthLS0pRChhKTtyZXR1cm57bWluOnYsbWF4Onksb3B0czpyfX0sY29uY2F0RXh0cmVtZXM6cH07ZnVuY3Rpb24gcChlLHQscil7dmFyIG4sYSxpLG89dC5faWQsbD1lLl9mdWxsRGF0YSxjPWUuX2Z1bGxMYXlvdXQsdT1bXSxmPVtdO2Z1bmN0aW9uIGQoZSx0KXtmb3Iobj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj1lW3Rbbl1dLGw9KHIuX2V4dHJlbWVzfHx7fSlbb107aWYoITA9PT1yLnZpc2libGUmJmwpe2ZvcihhPTA7YTxsLm1pbi5sZW5ndGg7YSsrKWk9bC5taW5bYV0saCh1LGkudmFsLGkucGFkLHtleHRyYXBhZDppLmV4dHJhcGFkfSk7Zm9yKGE9MDthPGwubWF4Lmxlbmd0aDthKyspaT1sLm1heFthXSxnKGYsaS52YWwsaS5wYWQse2V4dHJhcGFkOmkuZXh0cmFwYWR9KX19fWlmKGQobCx0Ll90cmFjZUluZGljZXMpLGQoYy5hbm5vdGF0aW9uc3x8W10sdC5fYW5uSW5kaWNlc3x8W10pLGQoYy5zaGFwZXN8fFtdLHQuX3NoYXBlSW5kaWNlc3x8W10pLHQuX21hdGNoR3JvdXAmJiFyKWZvcih2YXIgdiBpbiB0Ll9tYXRjaEdyb3VwKWlmKHYhPT10Ll9pZCl7dmFyIG09cyhlLHYpLHk9cChlLG0sITApLHg9dC5fbGVuZ3RoL20uX2xlbmd0aDtmb3IoYT0wO2E8eS5taW4ubGVuZ3RoO2ErKylpPXkubWluW2FdLGgodSxpLnZhbCxpLnBhZCp4LHtleHRyYXBhZDppLmV4dHJhcGFkfSk7Zm9yKGE9MDthPHkubWF4Lmxlbmd0aDthKyspaT15Lm1heFthXSxnKGYsaS52YWwsaS5wYWQqeCx7ZXh0cmFwYWQ6aS5leHRyYXBhZH0pfXJldHVybnttaW46dSxtYXg6Zn19ZnVuY3Rpb24gaChlLHQscixuKXt2KGUsdCxyLG4seSl9ZnVuY3Rpb24gZyhlLHQscixuKXt2KGUsdCxyLG4seCl9ZnVuY3Rpb24gdihlLHQscixuLGEpe2Zvcih2YXIgaT1uLnRvemVybyxvPW4uZXh0cmFwYWQsbD0hMCxzPTA7czxlLmxlbmd0aCYmbDtzKyspe3ZhciBjPWVbc107aWYoYShjLnZhbCx0KSYmYy5wYWQ+PXImJihjLmV4dHJhcGFkfHwhbykpe2w9ITE7YnJlYWt9YSh0LGMudmFsKSYmYy5wYWQ8PXImJihvfHwhYy5leHRyYXBhZCkmJihlLnNwbGljZShzLDEpLHMtLSl9aWYobCl7dmFyIHU9aSYmMD09PXQ7ZS5wdXNoKHt2YWw6dCxwYWQ6dT8wOnIsZXh0cmFwYWQ6IXUmJm99KX19ZnVuY3Rpb24gbShlKXtyZXR1cm4gbihlKSYmTWF0aC5hYnMoZSk8aX1mdW5jdGlvbiB5KGUsdCl7cmV0dXJuIGU8PXR9ZnVuY3Rpb24geChlLHQpe3JldHVybiBlPj10fX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjoxODEsIi4uLy4uL2xpYiI6MjAyLCIuLi8uLi9yZWdpc3RyeSI6MjkwLCIuL2F4aXNfaWRzIjoyNTEsImZhc3QtaXNudW1lcmljIjoxMX1dLDI0ODpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJkMyIpLGE9ZSgiZmFzdC1pc251bWVyaWMiKSxpPWUoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksbz1lKCIuLi8uLi9yZWdpc3RyeSIpLGw9ZSgiLi4vLi4vbGliIikscz1sLnN0clRyYW5zbGF0ZSxjPWUoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLHU9ZSgiLi4vLi4vY29tcG9uZW50cy90aXRsZXMiKSxmPWUoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxkPWUoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLHA9ZSgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLGg9ZSgiLi9jbGVhbl90aWNrcyIpLGc9ZSgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLHY9Zy5PTkVNQVhZRUFSLG09Zy5PTkVBVkdZRUFSLHk9Zy5PTkVNSU5ZRUFSLHg9Zy5PTkVNQVhRVUFSVEVSLGI9Zy5PTkVBVkdRVUFSVEVSLF89Zy5PTkVNSU5RVUFSVEVSLHc9Zy5PTkVNQVhNT05USCxUPWcuT05FQVZHTU9OVEgsaz1nLk9ORU1JTk1PTlRILE09Zy5PTkVXRUVLLEE9Zy5PTkVEQVksTD1BLzIsUz1nLk9ORUhPVVIsQz1nLk9ORU1JTixPPWcuT05FU0VDLEQ9Zy5NSU5VU19TSUdOLFA9Zy5CQUROVU0sej1lKCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IiksUj16Lk1JRF9TSElGVCxFPXouQ0FQX1NISUZULEk9ei5MSU5FX1NQQUNJTkcsRj16Lk9QUE9TSVRFX1NJREUsTj10LmV4cG9ydHM9e307Ti5zZXRDb252ZXJ0PWUoIi4vc2V0X2NvbnZlcnQiKTt2YXIgSD1lKCIuL2F4aXNfYXV0b3R5cGUiKSxqPWUoIi4vYXhpc19pZHMiKSxCPWouaWRTb3J0LFY9ai5pc0xpbmtlZDtOLmlkMm5hbWU9ai5pZDJuYW1lLE4ubmFtZTJpZD1qLm5hbWUyaWQsTi5jbGVhbklkPWouY2xlYW5JZCxOLmxpc3Q9ai5saXN0LE4ubGlzdElkcz1qLmxpc3RJZHMsTi5nZXRGcm9tSWQ9ai5nZXRGcm9tSWQsTi5nZXRGcm9tVHJhY2U9ai5nZXRGcm9tVHJhY2U7dmFyIFU9ZSgiLi9hdXRvcmFuZ2UiKTtOLmdldEF1dG9SYW5nZT1VLmdldEF1dG9SYW5nZSxOLmZpbmRFeHRyZW1lcz1VLmZpbmRFeHRyZW1lcztmdW5jdGlvbiBxKGUpe3ZhciB0PTFlLTQqKGVbMV0tZVswXSk7cmV0dXJuW2VbMF0tdCxlWzFdK3RdfU4uY29lcmNlUmVmPWZ1bmN0aW9uKGUsdCxyLG4sYSxpKXt2YXIgbz1uLmNoYXJBdChuLmxlbmd0aC0xKSxzPXIuX2Z1bGxMYXlvdXQuX3N1YnBsb3RzW28rImF4aXMiXSxjPW4rInJlZiIsdT17fTtyZXR1cm4gYXx8KGE9c1swXXx8KCJzdHJpbmciPT10eXBlb2YgaT9pOmlbMF0pKSxpfHwoaT1hKSxzPXMuY29uY2F0KHMubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZSsiIGRvbWFpbiJ9KSkpLHVbY109e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpzLmNvbmNhdChpPyJzdHJpbmciPT10eXBlb2YgaT9baV06aTpbXSksZGZsdDphfSxsLmNvZXJjZShlLHQsdSxjKX0sTi5nZXRSZWZUeXBlPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lP2U6InBhcGVyIj09PWU/InBhcGVyIjoicGl4ZWwiPT09ZT8icGl4ZWwiOi8oIGRvbWFpbikkLy50ZXN0KGUpPyJkb21haW4iOiJyYW5nZSJ9LE4uY29lcmNlUG9zaXRpb249ZnVuY3Rpb24oZSx0LHIsbixhLGkpe3ZhciBvLHM7aWYoInJhbmdlIiE9PU4uZ2V0UmVmVHlwZShuKSlvPWwuZW5zdXJlTnVtYmVyLHM9cihhLGkpO2Vsc2V7dmFyIGM9Ti5nZXRGcm9tSWQodCxuKTtzPXIoYSxpPWMuZnJhY3Rpb24ycihpKSksbz1jLmNsZWFuUG9zfWVbYV09byhzKX0sTi5jbGVhblBvc2l0aW9uPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4oInBhcGVyIj09PXJ8fCJwaXhlbCI9PT1yP2wuZW5zdXJlTnVtYmVyOk4uZ2V0RnJvbUlkKHQscikuY2xlYW5Qb3MpKGUpfSxOLnJlZHJhd0NvbXBvbmVudHM9ZnVuY3Rpb24oZSx0KXt0PXR8fE4ubGlzdElkcyhlKTt2YXIgcj1lLl9mdWxsTGF5b3V0O2Z1bmN0aW9uIG4obixhLGksbCl7Zm9yKHZhciBzPW8uZ2V0Q29tcG9uZW50TWV0aG9kKG4sYSksYz17fSx1PTA7dTx0Lmxlbmd0aDt1KyspZm9yKHZhciBmPXJbTi5pZDJuYW1lKHRbdV0pXVtpXSxkPTA7ZDxmLmxlbmd0aDtkKyspe3ZhciBwPWZbZF07aWYoIWNbcF0mJihzKGUscCksY1twXT0xLGwpKXJldHVybn19bigiYW5ub3RhdGlvbnMiLCJkcmF3T25lIiwiX2FubkluZGljZXMiKSxuKCJzaGFwZXMiLCJkcmF3T25lIiwiX3NoYXBlSW5kaWNlcyIpLG4oImltYWdlcyIsImRyYXciLCJfaW1nSW5kaWNlcyIsITApfTt2YXIgRz1OLmdldERhdGFDb252ZXJzaW9ucz1mdW5jdGlvbihlLHQscixuKXt2YXIgYSxpPSJ4Ij09PXJ8fCJ5Ij09PXJ8fCJ6Ij09PXI/cjpuO2lmKEFycmF5LmlzQXJyYXkoaSkpe2lmKGE9e3R5cGU6SChuLHZvaWQgMCx7YXV0b3R5cGVudW1iZXJzOmUuX2Z1bGxMYXlvdXQuYXV0b3R5cGVudW1iZXJzfSksX2NhdGVnb3JpZXM6W119LE4uc2V0Q29udmVydChhKSwiY2F0ZWdvcnkiPT09YS50eXBlKWZvcih2YXIgbz0wO288bi5sZW5ndGg7bysrKWEuZDJjKG5bb10pfWVsc2UgYT1OLmdldEZyb21UcmFjZShlLHQsaSk7cmV0dXJuIGE/e2QyYzphLmQyYyxjMmQ6YS5jMmR9OiJpZHMiPT09aT97ZDJjOlksYzJkOll9OntkMmM6WixjMmQ6Wn19O2Z1bmN0aW9uIFooZSl7cmV0dXJuK2V9ZnVuY3Rpb24gWShlKXtyZXR1cm4gU3RyaW5nKGUpfWZ1bmN0aW9uIFgoZSl7cmV0dXJuK2Uuc3Vic3RyaW5nKDEpfU4uZ2V0RGF0YVRvQ29vcmRGdW5jPWZ1bmN0aW9uKGUsdCxyLG4pe3JldHVybiBHKGUsdCxyLG4pLmQyY30sTi5jb3VudGVyTGV0dGVyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2hhckF0KDApO3JldHVybiJ4Ij09PXQ/InkiOiJ5Ij09PXQ/IngiOnZvaWQgMH0sTi5taW5EdGljaz1mdW5jdGlvbihlLHQscixuKXstMT09PVsibG9nIiwiY2F0ZWdvcnkiLCJtdWx0aWNhdGVnb3J5Il0uaW5kZXhPZihlLnR5cGUpJiZuP3ZvaWQgMD09PWUuX21pbkR0aWNrPyhlLl9taW5EdGljaz10LGUuX2ZvcmNlVGljazA9cik6ZS5fbWluRHRpY2smJigoZS5fbWluRHRpY2svdCsxZS02KSUxPDJlLTYmJigoci1lLl9mb3JjZVRpY2swKS90JTErMS4wMDAwMDEpJTE8MmUtNj8oZS5fbWluRHRpY2s9dCxlLl9mb3JjZVRpY2swPXIpOigodC9lLl9taW5EdGljaysxZS02KSUxPjJlLTZ8fCgoci1lLl9mb3JjZVRpY2swKS9lLl9taW5EdGljayUxKzEuMDAwMDAxKSUxPjJlLTYpJiYoZS5fbWluRHRpY2s9MCkpOmUuX21pbkR0aWNrPTB9LE4uc2F2ZVJhbmdlSW5pdGlhbD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1OLmxpc3QoZSwiIiwhMCksbj0hMSxhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBpPXJbYV0sbz12b2lkIDA9PT1pLl9yYW5nZUluaXRpYWwsbD1vfHwhKGkucmFuZ2VbMF09PT1pLl9yYW5nZUluaXRpYWxbMF0mJmkucmFuZ2VbMV09PT1pLl9yYW5nZUluaXRpYWxbMV0pOyhvJiYhMT09PWkuYXV0b3JhbmdlfHx0JiZsKSYmKGkuX3JhbmdlSW5pdGlhbD1pLnJhbmdlLnNsaWNlKCksbj0hMCl9cmV0dXJuIG59LE4uc2F2ZVNob3dTcGlrZUluaXRpYWw9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9Ti5saXN0KGUsIiIsITApLG49ITEsYT0ib24iLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIG89cltpXSxsPXZvaWQgMD09PW8uX3Nob3dTcGlrZUluaXRpYWwscz1sfHwhKG8uc2hvd3NwaWtlcz09PW8uX3Nob3dzcGlrZXMpOyhsfHx0JiZzKSYmKG8uX3Nob3dTcGlrZUluaXRpYWw9by5zaG93c3Bpa2VzLG49ITApLCJvbiIhPT1hfHxvLnNob3dzcGlrZXN8fChhPSJvZmYiKX1yZXR1cm4gZS5fZnVsbExheW91dC5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZD1hLG59LE4uYXV0b0Jpbj1mdW5jdGlvbihlLHQscixuLGksbyl7dmFyIHMsYz1sLmFnZ051bXMoTWF0aC5taW4sbnVsbCxlKSx1PWwuYWdnTnVtcyhNYXRoLm1heCxudWxsLGUpO2lmKCJjYXRlZ29yeSI9PT10LnR5cGV8fCJtdWx0aWNhdGVnb3J5Ij09PXQudHlwZSlyZXR1cm57c3RhcnQ6Yy0uNSxlbmQ6dSsuNSxzaXplOk1hdGgubWF4KDEsTWF0aC5yb3VuZChvKXx8MSksX2RhdGFTcGFuOnUtY307aWYoaXx8KGk9dC5jYWxlbmRhcikscz0ibG9nIj09PXQudHlwZT97dHlwZToibGluZWFyIixyYW5nZTpbYyx1XX06e3R5cGU6dC50eXBlLHJhbmdlOmwuc2ltcGxlTWFwKFtjLHVdLHQuYzJyLDAsaSksY2FsZW5kYXI6aX0sTi5zZXRDb252ZXJ0KHMpLG89byYmaC5kdGljayhvLHMudHlwZSkpcy5kdGljaz1vLHMudGljazA9aC50aWNrMCh2b2lkIDAscy50eXBlLGkpO2Vsc2V7dmFyIGY7aWYocilmPSh1LWMpL3I7ZWxzZXt2YXIgZD1sLmRpc3RpbmN0VmFscyhlKSxwPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2coZC5taW5EaWZmKS9NYXRoLkxOMTApKSxnPXAqbC5yb3VuZFVwKGQubWluRGlmZi9wLFsuOSwxLjksNC45LDkuOV0sITApO2Y9TWF0aC5tYXgoZywyKmwuc3RkZXYoZSkvTWF0aC5wb3coZS5sZW5ndGgsbj8uMjU6LjQpKSxhKGYpfHwoZj0xKX1OLmF1dG9UaWNrcyhzLGYpfXZhciB2LG09cy5kdGljayx5PU4udGlja0luY3JlbWVudChOLnRpY2tGaXJzdChzKSxtLCJyZXZlcnNlIixpKTtpZigibnVtYmVyIj09dHlwZW9mIG0pdj0oeT1mdW5jdGlvbihlLHQscixuLGkpe3ZhciBvPTAsbD0wLHM9MCxjPTA7ZnVuY3Rpb24gdSh0KXtyZXR1cm4oMSsxMDAqKHQtZSkvci5kdGljayklMTAwPDJ9Zm9yKHZhciBmPTA7Zjx0Lmxlbmd0aDtmKyspdFtmXSUxPT0wP3MrKzphKHRbZl0pfHxjKyssdSh0W2ZdKSYmbysrLHUodFtmXStyLmR0aWNrLzIpJiZsKys7dmFyIGQ9dC5sZW5ndGgtYztpZihzPT09ZCYmImRhdGUiIT09ci50eXBlKXIuZHRpY2s8MT9lPW4tLjUqci5kdGljazooZS09LjUpK3IuZHRpY2s8biYmKGUrPXIuZHRpY2spO2Vsc2UgaWYobDwuMSpkJiYobz4uMypkfHx1KG4pfHx1KGkpKSl7dmFyIHA9ci5kdGljay8yO2UrPWUrcDxuP3A6LXB9cmV0dXJuIGV9KHksZSxzLGMsdSkpKygxK01hdGguZmxvb3IoKHUteSkvbSkpKm07ZWxzZSBmb3IoIk0iPT09cy5kdGljay5jaGFyQXQoMCkmJih5PWZ1bmN0aW9uKGUsdCxyLG4sYSl7dmFyIGk9bC5maW5kRXhhY3REYXRlcyh0LGEpO2lmKGkuZXhhY3REYXlzPi44KXt2YXIgbz1OdW1iZXIoci5zdWJzdHIoMSkpO2kuZXhhY3RZZWFycz4uOCYmbyUxMj09MD9lPU4udGlja0luY3JlbWVudChlLCJNNiIsInJldmVyc2UiKSsxLjUqQTppLmV4YWN0TW9udGhzPi44P2U9Ti50aWNrSW5jcmVtZW50KGUsIk0xIiwicmV2ZXJzZSIpKzE1LjUqQTplLT1MO3ZhciBzPU4udGlja0luY3JlbWVudChlLHIpO2lmKHM8PW4pcmV0dXJuIHN9cmV0dXJuIGV9KHksZSxtLGMsaSkpLHY9eSwwO3Y8PXU7KXY9Ti50aWNrSW5jcmVtZW50KHYsbSwhMSxpKTtyZXR1cm57c3RhcnQ6dC5jMnIoeSwwLGkpLGVuZDp0LmMycih2LDAsaSksc2l6ZTptLF9kYXRhU3Bhbjp1LWN9fSxOLnByZXBUaWNrcz1mdW5jdGlvbihlLHQpe3ZhciByPWwuc2ltcGxlTWFwKGUucmFuZ2UsZS5yMmwsdm9pZCAwLHZvaWQgMCx0KTtpZihlLl9kdGlja0luaXQ9ZS5kdGljayxlLl90aWNrMEluaXQ9ZS50aWNrMCwiYXV0byI9PT1lLnRpY2ttb2RlfHwhZS5kdGljayl7dmFyIG4saT1lLm50aWNrcztpfHwoImNhdGVnb3J5Ij09PWUudHlwZXx8Im11bHRpY2F0ZWdvcnkiPT09ZS50eXBlPyhuPWUudGlja2ZvbnQ/MS4yKihlLnRpY2tmb250LnNpemV8fDEyKToxNSxpPWUuX2xlbmd0aC9uKToobj0ieSI9PT1lLl9pZC5jaGFyQXQoMCk/NDA6ODAsaT1sLmNvbnN0cmFpbihlLl9sZW5ndGgvbiw0LDkpKzEpLCJyYWRpYWxheGlzIj09PWUuX25hbWUmJihpKj0yKSksImFycmF5Ij09PWUudGlja21vZGUmJihpKj0xMDApLGUuX3JvdWdoRFRpY2s9TWF0aC5hYnMoclsxXS1yWzBdKS9pLE4uYXV0b1RpY2tzKGUsZS5fcm91Z2hEVGljayksZS5fbWluRHRpY2s+MCYmZS5kdGljazwyKmUuX21pbkR0aWNrJiYoZS5kdGljaz1lLl9taW5EdGljayxlLnRpY2swPWUubDJyKGUuX2ZvcmNlVGljazApKX0icGVyaW9kIj09PWUudGlja2xhYmVsbW9kZSYmZnVuY3Rpb24oZSl7dmFyIHQ7ZnVuY3Rpb24gcigpe3JldHVybiEoYShlLmR0aWNrKXx8Ik0iIT09ZS5kdGljay5jaGFyQXQoMCkpfXZhciBuPXIoKSxpPU4uZ2V0VGlja0Zvcm1hdChlKTtpZihpKXt2YXIgbz1lLl9kdGlja0luaXQhPT1lLmR0aWNrOy8lW2ZMUXNTTVhdLy50ZXN0KGkpfHwoLyVbSEldLy50ZXN0KGkpPyh0PVMsbyYmIW4mJmUuZHRpY2s8UyYmKGUuZHRpY2s9UykpOi8lcC8udGVzdChpKT8odD1MLG8mJiFuJiZlLmR0aWNrPEwmJihlLmR0aWNrPUwpKTovJVtBYWRlanV3eF0vLnRlc3QoaSk/KHQ9QSxvJiYhbiYmZS5kdGljazxBJiYoZS5kdGljaz1BKSk6LyVbVVZXXS8udGVzdChpKT8odD1NLG8mJiFuJiZlLmR0aWNrPE0mJihlLmR0aWNrPU0pKTovJVtCYm1dLy50ZXN0KGkpPyh0PVQsbyYmKG4/WChlLmR0aWNrKTwxOmUuZHRpY2s8aykmJihlLmR0aWNrPSJNMSIpKTovJVtxXS8udGVzdChpKT8odD1iLG8mJihuP1goZS5kdGljayk8MzplLmR0aWNrPF8pJiYoZS5kdGljaz0iTTMiKSk6LyVbWXldLy50ZXN0KGkpJiYodD1tLG8mJihuP1goZS5kdGljayk8MTI6ZS5kdGljazx5KSYmKGUuZHRpY2s9Ik0xMiIpKSl9KG49cigpKSYmZS50aWNrMD09PWUuX2Rvd1RpY2swJiYoZS50aWNrMD1lLl9yYXdUaWNrMCk7ZS5fZGVmaW5lZERlbHRhPXR9KGUpLGUudGljazB8fChlLnRpY2swPSJkYXRlIj09PWUudHlwZT8iMjAwMC0wMS0wMSI6MCksImRhdGUiPT09ZS50eXBlJiZlLmR0aWNrPC4xJiYoZS5kdGljaz0uMSksbmUoZSl9LE4uY2FsY1RpY2tzPWZ1bmN0aW9uKGUsdCl7Ti5wcmVwVGlja3MoZSx0KTt2YXIgcj1sLnNpbXBsZU1hcChlLnJhbmdlLGUucjJsLHZvaWQgMCx2b2lkIDAsdCk7aWYoImFycmF5Ij09PWUudGlja21vZGUpcmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUudGlja3ZhbHMscj1lLnRpY2t0ZXh0LG49bmV3IEFycmF5KHQubGVuZ3RoKSxhPXEobC5zaW1wbGVNYXAoZS5yYW5nZSxlLnIybCkpLGk9TWF0aC5taW4oYVswXSxhWzFdKSxvPU1hdGgubWF4KGFbMF0sYVsxXSkscz0wO0FycmF5LmlzQXJyYXkocil8fChyPVtdKTt2YXIgYz0iY2F0ZWdvcnkiPT09ZS50eXBlP2UuZDJsX25vYWRkOmUuZDJsOyJsb2ciPT09ZS50eXBlJiYiTCIhPT1TdHJpbmcoZS5kdGljaykuY2hhckF0KDApJiYoZS5kdGljaz0iTCIrTWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLm1pbihlLnJhbmdlWzBdLGUucmFuZ2VbMV0pKS0xKSk7Zm9yKHZhciB1PTA7dTx0Lmxlbmd0aDt1Kyspe3ZhciBmPWModFt1XSk7Zj5pJiZmPG8mJih2b2lkIDA9PT1yW3VdP25bc109Ti50aWNrVGV4dChlLGYpOm5bc109YWUoZSxmLFN0cmluZyhyW3VdKSkscysrKX1zPHQubGVuZ3RoJiZuLnNwbGljZShzLHQubGVuZ3RoLXMpO2UucmFuZ2VicmVha3MmJihuPW4uZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gZS5tYXNrQnJlYWtzKHQueCkhPT1QfSkpKTtyZXR1cm4gbn0oZSk7dmFyIG49cShyKSxpPW5bMF0sbz1uWzFdLHM9clsxXTxyWzBdLGM9TWF0aC5taW4oclswXSxyWzFdKSx1PU1hdGgubWF4KHJbMF0sclsxXSksZj0ibG9nIj09PWUudHlwZSYmIShhKGUuZHRpY2spfHwiTCI9PT1lLmR0aWNrLmNoYXJBdCgwKSksZD0icGVyaW9kIj09PWUudGlja2xhYmVsbW9kZTtpZihlLl90bWluPU4udGlja0ZpcnN0KGUsdCksZS5fdG1pbjxpIT09cylyZXR1cm5bXTsiY2F0ZWdvcnkiIT09ZS50eXBlJiYibXVsdGljYXRlZ29yeSIhPT1lLnR5cGV8fChvPXM/TWF0aC5tYXgoLS41LG8pOk1hdGgubWluKGUuX2NhdGVnb3JpZXMubGVuZ3RoLS41LG8pKTt2YXIgcD1lLl90bWluO2UucmFuZ2VicmVha3MmJmUuX3RpY2swSW5pdCE9PWUudGljazAmJihwPXdlKHAsZSksc3x8KHA9Ti50aWNrSW5jcmVtZW50KHAsZS5kdGljaywhcyxlLmNhbGVuZGFyKSkpLGQmJihwPU4udGlja0luY3JlbWVudChwLGUuZHRpY2ssIXMsZS5jYWxlbmRhcikpO2Zvcih2YXIgaCxnPU1hdGgubWF4KDFlMyxlLl9sZW5ndGh8fDApLEM9W10sTz1udWxsO3M/cD49bzpwPD1vO3A9Ti50aWNrSW5jcmVtZW50KHAsZS5kdGljayxzLGUuY2FsZW5kYXIpKXtpZihlLnJhbmdlYnJlYWtzJiYhcyl7aWYocDxpKWNvbnRpbnVlO2lmKGUubWFza0JyZWFrcyhwKT09PVAmJndlKHAsZSk+PXUpYnJlYWt9aWYoQy5sZW5ndGg+Z3x8cD09PU8pYnJlYWs7Tz1wO3ZhciBEPSExO2YmJnAhPT0oMHxwKSYmKEQ9ITApLEMucHVzaCh7bWlub3I6RCx2YWx1ZTpwfSl9aWYoZCYmZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgYT1lW25dLnZhbHVlLGk9bixvPW4rMTtuPGUubGVuZ3RoLTE/KGk9bixvPW4rMSk6bj4wPyhpPW4tMSxvPW4pOihpPW4sbz1uKTt2YXIgbCxzPWVbaV0udmFsdWUsYz1lW29dLnZhbHVlLHU9TWF0aC5hYnMoYy1zKSxmPXJ8fHUsZD0wO2Y+PXk/ZD11Pj15JiZ1PD12P3U6bTpyPT09YiYmZj49Xz9kPXU+PV8mJnU8PXg/dTpiOmY+PWs/ZD11Pj1rJiZ1PD13P3U6VDpyPT09TSYmZj49TT9kPU06Zj49QT9kPUE6cj09PUwmJmY+PUw/ZD1MOnI9PT1TJiZmPj1TJiYoZD1TKSxkPj11JiYoZD11LGw9ITApO3ZhciBwPWErZDtpZih0LnJhbmdlYnJlYWtzJiZkPjApe2Zvcih2YXIgaD0wLGc9MDtnPDg0O2crKyl7dmFyIEM9KGcrLjUpLzg0O3QubWFza0JyZWFrcyhhKigxLUMpK0MqcCkhPT1QJiZoKyt9KGQqPWgvODQpfHwoZVtuXS5kcm9wPSEwKSxsJiZ1Pk0mJihkPXUpfShkPjB8fDA9PT1uKSYmKGVbbl0ucGVyaW9kWD1hK2QvMil9fShDLGUsZS5fZGVmaW5lZERlbHRhKSxlLnJhbmdlYnJlYWtzKXt2YXIgej0ieSI9PT1lLl9pZC5jaGFyQXQoMCksUj0xOyJhdXRvIj09PWUudGlja21vZGUmJihSPWUudGlja2ZvbnQ/ZS50aWNrZm9udC5zaXplOjEyKTt2YXIgRT1OYU47Zm9yKGg9Qy5sZW5ndGgtMTtoPi0xO2gtLSlpZihDW2hdLmRyb3ApQy5zcGxpY2UoaCwxKTtlbHNle0NbaF0udmFsdWU9d2UoQ1toXS52YWx1ZSxlKTt2YXIgST1lLmMycChDW2hdLnZhbHVlKTsoej9FPkktUjpFPEkrUik/Qy5zcGxpY2Uocz9oKzE6aCwxKTpFPUl9fV9lKGUpJiYzNjA9PT1NYXRoLmFicyhyWzFdLXJbMF0pJiZDLnBvcCgpLGUuX3RtYXg9KENbQy5sZW5ndGgtMV18fHt9KS52YWx1ZSxlLl9wcmV2RGF0ZUhlYWQ9IiIsZS5faW5DYWxjVGlja3M9ITA7dmFyIEYsSCxqPVtdO2ZvcihoPTA7aDxDLmxlbmd0aDtoKyspe3ZhciBCPUNbaF0ubWlub3IsVj1DW2hdLnZhbHVlO0Y9Ti50aWNrVGV4dChlLFYsITEsQiksdm9pZCAwIT09KEg9Q1toXS5wZXJpb2RYKSYmKEYucGVyaW9kWD1ILChIPnV8fEg8YykmJihIPnUmJihGLnBlcmlvZFg9dSksSDxjJiYoRi5wZXJpb2RYPWMpLEYudGV4dD0iICIsZS5fcHJldkRhdGVIZWFkPSIiKSksai5wdXNoKEYpfXJldHVybiBlLl9pbkNhbGNUaWNrcz0hMSxqfTt2YXIgVz1bMiw1LDEwXSxRPVsxLDIsMyw2LDEyXSxKPVsxLDIsNSwxMCwxNSwzMF0sJD1bMSwyLDMsNywxNF0sSz1bLS4wNDYsMCwuMzAxLC40NzcsLjYwMiwuNjk5LC43NzgsLjg0NSwuOTAzLC45NTQsMV0sZWU9Wy0uMzAxLDAsLjMwMSwuNjk5LDFdLHRlPVsxNSwzMCw0NSw5MCwxODBdO2Z1bmN0aW9uIHJlKGUsdCxyKXtyZXR1cm4gdCpsLnJvdW5kVXAoZS90LHIpfWZ1bmN0aW9uIG5lKGUpe3ZhciB0PWUuZHRpY2s7aWYoZS5fdGlja2V4cG9uZW50PTAsYSh0KXx8InN0cmluZyI9PXR5cGVvZiB0fHwodD0xKSwiY2F0ZWdvcnkiIT09ZS50eXBlJiYibXVsdGljYXRlZ29yeSIhPT1lLnR5cGV8fChlLl90aWNrcm91bmQ9bnVsbCksImRhdGUiPT09ZS50eXBlKXt2YXIgcj1lLnIybChlLnRpY2swKSxuPWUubDJyKHIpLnJlcGxhY2UoLyheLXxpKS9nLCIiKSxpPW4ubGVuZ3RoO2lmKCJNIj09PVN0cmluZyh0KS5jaGFyQXQoMCkpaT4xMHx8IjAxLTAxIiE9PW4uc3Vic3RyKDUpP2UuX3RpY2tyb3VuZD0iZCI6ZS5fdGlja3JvdW5kPSt0LnN1YnN0cigxKSUxMj09MD8ieSI6Im0iO2Vsc2UgaWYodD49QSYmaTw9MTB8fHQ+PTE1KkEpZS5fdGlja3JvdW5kPSJkIjtlbHNlIGlmKHQ+PUMmJmk8PTE2fHx0Pj1TKWUuX3RpY2tyb3VuZD0iTSI7ZWxzZSBpZih0Pj1PJiZpPD0xOXx8dD49QyllLl90aWNrcm91bmQ9IlMiO2Vsc2V7dmFyIG89ZS5sMnIocit0KS5yZXBsYWNlKC9eLS8sIiIpLmxlbmd0aDtlLl90aWNrcm91bmQ9TWF0aC5tYXgoaSxvKS0yMCxlLl90aWNrcm91bmQ8MCYmKGUuX3RpY2tyb3VuZD00KX19ZWxzZSBpZihhKHQpfHwiTCI9PT10LmNoYXJBdCgwKSl7dmFyIGw9ZS5yYW5nZS5tYXAoZS5yMmR8fE51bWJlcik7YSh0KXx8KHQ9TnVtYmVyKHQuc3Vic3RyKDEpKSksZS5fdGlja3JvdW5kPTItTWF0aC5mbG9vcihNYXRoLmxvZyh0KS9NYXRoLkxOMTArLjAxKTt2YXIgcz1NYXRoLm1heChNYXRoLmFicyhsWzBdKSxNYXRoLmFicyhsWzFdKSksYz1NYXRoLmZsb29yKE1hdGgubG9nKHMpL01hdGguTE4xMCsuMDEpLHU9dm9pZCAwPT09ZS5taW5leHBvbmVudD8zOmUubWluZXhwb25lbnQ7TWF0aC5hYnMoYyk+dSYmKG9lKGUuZXhwb25lbnRmb3JtYXQpJiYhbGUoYyk/ZS5fdGlja2V4cG9uZW50PTMqTWF0aC5yb3VuZCgoYy0xKS8zKTplLl90aWNrZXhwb25lbnQ9Yyl9ZWxzZSBlLl90aWNrcm91bmQ9bnVsbH1mdW5jdGlvbiBhZShlLHQscil7dmFyIG49ZS50aWNrZm9udHx8e307cmV0dXJue3g6dCxkeDowLGR5OjAsdGV4dDpyfHwiIixmb250U2l6ZTpuLnNpemUsZm9udDpuLmZhbWlseSxmb250Q29sb3I6bi5jb2xvcn19Ti5hdXRvVGlja3M9ZnVuY3Rpb24oZSx0KXt2YXIgcjtmdW5jdGlvbiBuKGUpe3JldHVybiBNYXRoLnBvdyhlLE1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5MTjEwKSl9aWYoImRhdGUiPT09ZS50eXBlKXtlLnRpY2swPWwuZGF0ZVRpY2swKGUuY2FsZW5kYXIsMCk7dmFyIGk9Mip0O2lmKGk+bSl0Lz1tLHI9bigxMCksZS5kdGljaz0iTSIrMTIqcmUodCxyLFcpO2Vsc2UgaWYoaT5UKXQvPVQsZS5kdGljaz0iTSIrcmUodCwxLFEpO2Vsc2UgaWYoaT5BKXtlLmR0aWNrPXJlKHQsQSxlLl9oYXNEYXlPZldlZWtCcmVha3M/WzEsMiw3LDE0XTokKTt2YXIgbz1OLmdldFRpY2tGb3JtYXQoZSkscz0icGVyaW9kIj09PWUudGlja2xhYmVsbW9kZTtzJiYoZS5fcmF3VGljazA9ZS50aWNrMCksLyVbdVZXXS8udGVzdChvKT9lLnRpY2swPWwuZGF0ZVRpY2swKGUuY2FsZW5kYXIsMik6ZS50aWNrMD1sLmRhdGVUaWNrMChlLmNhbGVuZGFyLDEpLHMmJihlLl9kb3dUaWNrMD1lLnRpY2swKX1lbHNlIGk+Uz9lLmR0aWNrPXJlKHQsUyxRKTppPkM/ZS5kdGljaz1yZSh0LEMsSik6aT5PP2UuZHRpY2s9cmUodCxPLEopOihyPW4oMTApLGUuZHRpY2s9cmUodCxyLFcpKX1lbHNlIGlmKCJsb2ciPT09ZS50eXBlKXtlLnRpY2swPTA7dmFyIGM9bC5zaW1wbGVNYXAoZS5yYW5nZSxlLnIybCk7aWYodD4uNyllLmR0aWNrPU1hdGguY2VpbCh0KTtlbHNlIGlmKE1hdGguYWJzKGNbMV0tY1swXSk8MSl7dmFyIHU9MS41Kk1hdGguYWJzKChjWzFdLWNbMF0pL3QpO3Q9TWF0aC5hYnMoTWF0aC5wb3coMTAsY1sxXSktTWF0aC5wb3coMTAsY1swXSkpL3Uscj1uKDEwKSxlLmR0aWNrPSJMIityZSh0LHIsVyl9ZWxzZSBlLmR0aWNrPXQ+LjM/IkQyIjoiRDEifWVsc2UiY2F0ZWdvcnkiPT09ZS50eXBlfHwibXVsdGljYXRlZ29yeSI9PT1lLnR5cGU/KGUudGljazA9MCxlLmR0aWNrPU1hdGguY2VpbChNYXRoLm1heCh0LDEpKSk6X2UoZSk/KGUudGljazA9MCxyPTEsZS5kdGljaz1yZSh0LHIsdGUpKTooZS50aWNrMD0wLHI9bigxMCksZS5kdGljaz1yZSh0LHIsVykpO2lmKDA9PT1lLmR0aWNrJiYoZS5kdGljaz0xKSwhYShlLmR0aWNrKSYmInN0cmluZyIhPXR5cGVvZiBlLmR0aWNrKXt2YXIgZj1lLmR0aWNrO3Rocm93IGUuZHRpY2s9MSwiYXguZHRpY2sgZXJyb3I6ICIrU3RyaW5nKGYpfX0sTi50aWNrSW5jcmVtZW50PWZ1bmN0aW9uKGUsdCxyLGkpe3ZhciBvPXI/LTE6MTtpZihhKHQpKXJldHVybiBsLmluY3JlbWVudChlLG8qdCk7dmFyIHM9dC5jaGFyQXQoMCksYz1vKk51bWJlcih0LnN1YnN0cigxKSk7aWYoIk0iPT09cylyZXR1cm4gbC5pbmNyZW1lbnRNb250aChlLGMsaSk7aWYoIkwiPT09cylyZXR1cm4gTWF0aC5sb2coTWF0aC5wb3coMTAsZSkrYykvTWF0aC5MTjEwO2lmKCJEIj09PXMpe3ZhciB1PSJEMiI9PT10P2VlOkssZj1lKy4wMSpvLGQ9bC5yb3VuZFVwKGwubW9kKGYsMSksdSxyKTtyZXR1cm4gTWF0aC5mbG9vcihmKStNYXRoLmxvZyhuLnJvdW5kKE1hdGgucG93KDEwLGQpLDEpKS9NYXRoLkxOMTB9dGhyb3cidW5yZWNvZ25pemVkIGR0aWNrICIrU3RyaW5nKHQpfSxOLnRpY2tGaXJzdD1mdW5jdGlvbihlLHQpe3ZhciByPWUucjJsfHxOdW1iZXIsaT1sLnNpbXBsZU1hcChlLnJhbmdlLHIsdm9pZCAwLHZvaWQgMCx0KSxvPWlbMV08aVswXSxzPW8/TWF0aC5mbG9vcjpNYXRoLmNlaWwsYz1xKGkpWzBdLHU9ZS5kdGljayxmPXIoZS50aWNrMCk7aWYoYSh1KSl7dmFyIGQ9cygoYy1mKS91KSp1K2Y7cmV0dXJuImNhdGVnb3J5IiE9PWUudHlwZSYmIm11bHRpY2F0ZWdvcnkiIT09ZS50eXBlfHwoZD1sLmNvbnN0cmFpbihkLDAsZS5fY2F0ZWdvcmllcy5sZW5ndGgtMSkpLGR9dmFyIHA9dS5jaGFyQXQoMCksaD1OdW1iZXIodS5zdWJzdHIoMSkpO2lmKCJNIj09PXApe2Zvcih2YXIgZyx2LG0seT0wLHg9Zjt5PDEwOyl7aWYoKChnPU4udGlja0luY3JlbWVudCh4LHUsbyxlLmNhbGVuZGFyKSktYykqKHgtYyk8PTApcmV0dXJuIG8/TWF0aC5taW4oeCxnKTpNYXRoLm1heCh4LGcpO3Y9KGMtKHgrZykvMikvKGcteCksbT1wKyhNYXRoLmFicyhNYXRoLnJvdW5kKHYpKXx8MSkqaCx4PU4udGlja0luY3JlbWVudCh4LG0sdjwwPyFvOm8sZS5jYWxlbmRhcikseSsrfXJldHVybiBsLmVycm9yKCJ0aWNrRmlyc3QgZGlkIG5vdCBjb252ZXJnZSIsZSkseH1pZigiTCI9PT1wKXJldHVybiBNYXRoLmxvZyhzKChNYXRoLnBvdygxMCxjKS1mKS9oKSpoK2YpL01hdGguTE4xMDtpZigiRCI9PT1wKXt2YXIgYj0iRDIiPT09dT9lZTpLLF89bC5yb3VuZFVwKGwubW9kKGMsMSksYixvKTtyZXR1cm4gTWF0aC5mbG9vcihjKStNYXRoLmxvZyhuLnJvdW5kKE1hdGgucG93KDEwLF8pLDEpKS9NYXRoLkxOMTB9dGhyb3cidW5yZWNvZ25pemVkIGR0aWNrICIrU3RyaW5nKHUpfSxOLnRpY2tUZXh0PWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBpLG89YWUoZSx0KSxzPSJhcnJheSI9PT1lLnRpY2ttb2RlLGM9cnx8cyx1PWUudHlwZSxmPSJjYXRlZ29yeSI9PT11P2UuZDJsX25vYWRkOmUuZDJsO2lmKHMmJkFycmF5LmlzQXJyYXkoZS50aWNrdGV4dCkpe3ZhciBkPWwuc2ltcGxlTWFwKGUucmFuZ2UsZS5yMmwpLHA9KE1hdGguYWJzKGRbMV0tZFswXSktKGUuX2xCcmVha3N8fDApKS8xZTQ7Zm9yKGk9MDtpPGUudGlja3RleHQubGVuZ3RoJiYhKE1hdGguYWJzKHQtZihlLnRpY2t2YWxzW2ldKSk8cCk7aSsrKTtpZihpPGUudGlja3RleHQubGVuZ3RoKXJldHVybiBvLnRleHQ9U3RyaW5nKGUudGlja3RleHRbaV0pLG99ZnVuY3Rpb24gaChuKXtpZih2b2lkIDA9PT1uKXJldHVybiEwO2lmKHIpcmV0dXJuIm5vbmUiPT09bjt2YXIgYT17Zmlyc3Q6ZS5fdG1pbixsYXN0OmUuX3RtYXh9W25dO3JldHVybiJhbGwiIT09biYmdCE9PWF9dmFyIGc9cj8ibmV2ZXIiOiJub25lIiE9PWUuZXhwb25lbnRmb3JtYXQmJmgoZS5zaG93ZXhwb25lbnQpPyJoaWRlIjoiIjtpZigiZGF0ZSI9PT11P2Z1bmN0aW9uKGUsdCxyLG4pe3ZhciBpPWUuX3RpY2tyb3VuZCxvPXImJmUuaG92ZXJmb3JtYXR8fE4uZ2V0VGlja0Zvcm1hdChlKTtuJiYoaT1hKGkpPzQ6e3k6Im0iLG06ImQiLGQ6Ik0iLE06IlMiLFM6NH1baV0pO3ZhciBzLGM9bC5mb3JtYXREYXRlKHQueCxvLGksZS5fZGF0ZUZvcm1hdCxlLmNhbGVuZGFyLGUuX2V4dHJhRm9ybWF0KSx1PWMuaW5kZXhPZigiXG4iKTstMSE9PXUmJihzPWMuc3Vic3RyKHUrMSksYz1jLnN1YnN0cigwLHUpKTtuJiYoIjAwOjAwOjAwIj09PWN8fCIwMDowMCI9PT1jPyhjPXMscz0iIik6OD09PWMubGVuZ3RoJiYoYz1jLnJlcGxhY2UoLzowMCQvLCIiKSkpO2lmKHMpaWYocikiZCI9PT1pP2MrPSIsICIrczpjPXMrKGM/IiwgIitjOiIiKTtlbHNlIGlmKGUuX2luQ2FsY1RpY2tzJiZlLl9wcmV2RGF0ZUhlYWQ9PT1zKXt2YXIgZj0tMSE9PShlLnRpY2tsYWJlbHBvc2l0aW9ufHwiIikuaW5kZXhPZigiaW5zaWRlIiksZD1lLl9yZWFsU2lkZXx8ZS5zaWRlOyghZiYmInRvcCI9PT1kfHxmJiYiYm90dG9tIj09PWQpJiYoYys9Ijxicj4gIil9ZWxzZSBlLl9wcmV2RGF0ZUhlYWQ9cyxjKz0iPGJyPiIrczt0LnRleHQ9Y30oZSxvLHIsYyk6ImxvZyI9PT11P2Z1bmN0aW9uKGUsdCxyLG4saSl7dmFyIG89ZS5kdGljayxzPXQueCxjPWUudGlja2Zvcm1hdCx1PSJzdHJpbmciPT10eXBlb2YgbyYmby5jaGFyQXQoMCk7Im5ldmVyIj09PWkmJihpPSIiKTtuJiYiTCIhPT11JiYobz0iTDMiLHU9IkwiKTtpZihjfHwiTCI9PT11KXQudGV4dD1zZShNYXRoLnBvdygxMCxzKSxlLGksbik7ZWxzZSBpZihhKG8pfHwiRCI9PT11JiZsLm1vZChzKy4wMSwxKTwuMSl7dmFyIGY9TWF0aC5yb3VuZChzKSxkPU1hdGguYWJzKGYpLHA9ZS5leHBvbmVudGZvcm1hdDsicG93ZXIiPT09cHx8b2UocCkmJmxlKGYpPyh0LnRleHQ9MD09PWY/MToxPT09Zj8iMTAiOiIxMDxzdXA+IisoZj4xPyIiOkQpK2QrIjwvc3VwPiIsdC5mb250U2l6ZSo9MS4yNSk6KCJlIj09PXB8fCJFIj09PXApJiZkPjI/dC50ZXh0PSIxIitwKyhmPjA/IisiOkQpK2Q6KHQudGV4dD1zZShNYXRoLnBvdygxMCxzKSxlLCIiLCJmYWtlaG92ZXIiKSwiRDEiPT09byYmInkiPT09ZS5faWQuY2hhckF0KDApJiYodC5keS09dC5mb250U2l6ZS82KSl9ZWxzZXtpZigiRCIhPT11KXRocm93InVucmVjb2duaXplZCBkdGljayAiK1N0cmluZyhvKTt0LnRleHQ9U3RyaW5nKE1hdGgucm91bmQoTWF0aC5wb3coMTAsbC5tb2QocywxKSkpKSx0LmZvbnRTaXplKj0uNzV9aWYoIkQxIj09PWUuZHRpY2spe3ZhciBoPVN0cmluZyh0LnRleHQpLmNoYXJBdCgwKTsiMCIhPT1oJiYiMSIhPT1ofHwoInkiPT09ZS5faWQuY2hhckF0KDApP3QuZHgtPXQuZm9udFNpemUvNDoodC5keSs9dC5mb250U2l6ZS8yLHQuZHgrPShlLnJhbmdlWzFdPmUucmFuZ2VbMF0/MTotMSkqdC5mb250U2l6ZSooczwwPy41Oi4yNSkpKX19KGUsbywwLGMsZyk6ImNhdGVnb3J5Ij09PXU/ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLl9jYXRlZ29yaWVzW01hdGgucm91bmQodC54KV07dm9pZCAwPT09ciYmKHI9IiIpO3QudGV4dD1TdHJpbmcocil9KGUsbyk6Im11bHRpY2F0ZWdvcnkiPT09dT9mdW5jdGlvbihlLHQscil7dmFyIG49TWF0aC5yb3VuZCh0LngpLGE9ZS5fY2F0ZWdvcmllc1tuXXx8W10saT12b2lkIDA9PT1hWzFdPyIiOlN0cmluZyhhWzFdKSxvPXZvaWQgMD09PWFbMF0/IiI6U3RyaW5nKGFbMF0pO3I/dC50ZXh0PW8rIiAtICIraToodC50ZXh0PWksdC50ZXh0Mj1vKX0oZSxvLHIpOl9lKGUpP2Z1bmN0aW9uKGUsdCxyLG4sYSl7aWYoInJhZGlhbnMiIT09ZS50aGV0YXVuaXR8fHIpdC50ZXh0PXNlKHQueCxlLGEsbik7ZWxzZXt2YXIgaT10LngvMTgwO2lmKDA9PT1pKXQudGV4dD0iMCI7ZWxzZXt2YXIgbz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsdCl7cmV0dXJuIE1hdGguYWJzKGUtdCk8PTFlLTZ9dmFyIHI9ZnVuY3Rpb24oZSl7Zm9yKHZhciByPTE7IXQoTWF0aC5yb3VuZChlKnIpL3IsZSk7KXIqPTEwO3JldHVybiByfShlKSxuPWUqcixhPU1hdGguYWJzKGZ1bmN0aW9uIGUocixuKXtyZXR1cm4gdChuLDApP3I6ZShuLHIlbil9KG4scikpO3JldHVybltNYXRoLnJvdW5kKG4vYSksTWF0aC5yb3VuZChyL2EpXX0oaSk7aWYob1sxXT49MTAwKXQudGV4dD1zZShsLmRlZzJyYWQodC54KSxlLGEsbik7ZWxzZXt2YXIgcz10Lng8MDsxPT09b1sxXT8xPT09b1swXT90LnRleHQ9Ilx1MDNjMCI6dC50ZXh0PW9bMF0rIlx1MDNjMCI6dC50ZXh0PVsiPHN1cD4iLG9bMF0sIjwvc3VwPiIsIlx1MjA0NCIsIjxzdWI+IixvWzFdLCI8L3N1Yj4iLCJcdTAzYzAiXS5qb2luKCIiKSxzJiYodC50ZXh0PUQrdC50ZXh0KX19fX0oZSxvLHIsYyxnKTpmdW5jdGlvbihlLHQscixuLGEpeyJuZXZlciI9PT1hP2E9IiI6ImFsbCI9PT1lLnNob3dleHBvbmVudCYmTWF0aC5hYnModC54L2UuZHRpY2spPDFlLTYmJihhPSJoaWRlIik7dC50ZXh0PXNlKHQueCxlLGEsbil9KGUsbywwLGMsZyksbnx8KGUudGlja3ByZWZpeCYmIWgoZS5zaG93dGlja3ByZWZpeCkmJihvLnRleHQ9ZS50aWNrcHJlZml4K28udGV4dCksZS50aWNrc3VmZml4JiYhaChlLnNob3d0aWNrc3VmZml4KSYmKG8udGV4dCs9ZS50aWNrc3VmZml4KSksImJvdW5kYXJpZXMiPT09ZS50aWNrc29ufHxlLnNob3dkaXZpZGVycyl7dmFyIHY9ZnVuY3Rpb24odCl7dmFyIHI9ZS5sMnAodCk7cmV0dXJuIHI+PTAmJnI8PWUuX2xlbmd0aD90Om51bGx9O28ueGJuZD1bdihvLngtLjUpLHYoby54K2UuZHRpY2stLjUpXX1yZXR1cm4gb30sTi5ob3ZlckxhYmVsVGV4dD1mdW5jdGlvbihlLHQscil7aWYociE9PVAmJnIhPT10KXJldHVybiBOLmhvdmVyTGFiZWxUZXh0KGUsdCkrIiAtICIrTi5ob3ZlckxhYmVsVGV4dChlLHIpO3ZhciBuPSJsb2ciPT09ZS50eXBlJiZ0PD0wLGE9Ti50aWNrVGV4dChlLGUuYzJsKG4/LXQ6dCksImhvdmVyIikudGV4dDtyZXR1cm4gbj8wPT09dD8iMCI6RCthOmF9O3ZhciBpZT1bImYiLCJwIiwibiIsIlx1MDNiYyIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIl07ZnVuY3Rpb24gb2UoZSl7cmV0dXJuIlNJIj09PWV8fCJCIj09PWV9ZnVuY3Rpb24gbGUoZSl7cmV0dXJuIGU+MTR8fGU8LTE1fWZ1bmN0aW9uIHNlKGUsdCxyLG4pe3ZhciBpPWU8MCxvPXQuX3RpY2tyb3VuZCxzPXJ8fHQuZXhwb25lbnRmb3JtYXR8fCJCIixjPXQuX3RpY2tleHBvbmVudCx1PU4uZ2V0VGlja0Zvcm1hdCh0KSxmPXQuc2VwYXJhdGV0aG91c2FuZHM7aWYobil7dmFyIGQ9e2V4cG9uZW50Zm9ybWF0OnMsbWluZXhwb25lbnQ6dC5taW5leHBvbmVudCxkdGljazoibm9uZSI9PT10LnNob3dleHBvbmVudD90LmR0aWNrOmEoZSkmJk1hdGguYWJzKGUpfHwxLHJhbmdlOiJub25lIj09PXQuc2hvd2V4cG9uZW50P3QucmFuZ2UubWFwKHQucjJkKTpbMCxlfHwxXX07bmUoZCksbz0oTnVtYmVyKGQuX3RpY2tyb3VuZCl8fDApKzQsYz1kLl90aWNrZXhwb25lbnQsdC5ob3ZlcmZvcm1hdCYmKHU9dC5ob3ZlcmZvcm1hdCl9aWYodSlyZXR1cm4gdC5fbnVtRm9ybWF0KHUpKGUpLnJlcGxhY2UoLy0vZyxEKTt2YXIgcCxoPU1hdGgucG93KDEwLC1vKS8yO2lmKCJub25lIj09PXMmJihjPTApLChlPU1hdGguYWJzKGUpKTxoKWU9IjAiLGk9ITE7ZWxzZXtpZihlKz1oLGMmJihlKj1NYXRoLnBvdygxMCwtYyksbys9YyksMD09PW8pZT1TdHJpbmcoTWF0aC5mbG9vcihlKSk7ZWxzZSBpZihvPDApe2U9KGU9U3RyaW5nKE1hdGgucm91bmQoZSkpKS5zdWJzdHIoMCxlLmxlbmd0aCtvKTtmb3IodmFyIGc9bztnPDA7ZysrKWUrPSIwIn1lbHNle3ZhciB2PShlPVN0cmluZyhlKSkuaW5kZXhPZigiLiIpKzE7diYmKGU9ZS5zdWJzdHIoMCx2K28pLnJlcGxhY2UoL1wuPzArJC8sIiIpKX1lPWwubnVtU2VwYXJhdGUoZSx0Ll9zZXBhcmF0b3JzLGYpfWMmJiJoaWRlIiE9PXMmJihvZShzKSYmbGUoYykmJihzPSJwb3dlciIpLHA9YzwwP0QrLWM6InBvd2VyIiE9PXM/IisiK2M6U3RyaW5nKGMpLCJlIj09PXN8fCJFIj09PXM/ZSs9cytwOiJwb3dlciI9PT1zP2UrPSJceGQ3MTA8c3VwPiIrcCsiPC9zdXA+IjoiQiI9PT1zJiY5PT09Yz9lKz0iQiI6b2UocykmJihlKz1pZVtjLzMrNV0pKTtyZXR1cm4gaT9EK2U6ZX1mdW5jdGlvbiBjZShlLHQpe2Zvcih2YXIgcj1bXSxuPXt9LGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIGk9dFthXTtuW2kudGV4dDJdP25baS50ZXh0Ml0ucHVzaChpLngpOm5baS50ZXh0Ml09W2kueF19Zm9yKHZhciBvIGluIG4pci5wdXNoKGFlKGUsbC5pbnRlcnAobltvXSwuNSksbykpO3JldHVybiByfWZ1bmN0aW9uIHVlKGUpe3JldHVybiB2b2lkIDAhPT1lLnBlcmlvZFg/ZS5wZXJpb2RYOmUueH1mdW5jdGlvbiBmZShlKXtyZXR1cm5bZS50ZXh0LGUueCxlLmF4SW5mbyxlLmZvbnQsZS5mb250U2l6ZSxlLmZvbnRDb2xvcl0uam9pbigiXyIpfWZ1bmN0aW9uIGRlKGUpe3ZhciB0PWUudGl0bGUuZm9udC5zaXplLHI9KGUudGl0bGUudGV4dC5tYXRjaChjLkJSX1RBR19BTEwpfHxbXSkubGVuZ3RoO3JldHVybiBlLnRpdGxlLmhhc093blByb3BlcnR5KCJzdGFuZG9mZiIpP3I/dCooRStyKkkpOnQqRTpyP3QqKHIrMSkqSTp0fWZ1bmN0aW9uIHBlKGUsdCl7dmFyIHI9ZS5sMnAodCk7cmV0dXJuIHI+MSYmcjxlLl9sZW5ndGgtMX1mdW5jdGlvbiBoZShlKXt2YXIgdD1uLnNlbGVjdChlKSxyPXQuc2VsZWN0KCIudGV4dC1tYXRoLWdyb3VwIik7cmV0dXJuIHIuZW1wdHkoKT90LnNlbGVjdCgidGV4dCIpOnJ9ZnVuY3Rpb24gZ2UoZSl7cmV0dXJuIGUuX2lkKyIuYXV0b21hcmdpbiJ9ZnVuY3Rpb24gdmUoZSl7cmV0dXJuIGdlKGUpKyIubWlycm9yIn1mdW5jdGlvbiBtZShlKXtyZXR1cm4gZS5faWQrIi5yYW5nZXNsaWRlciJ9ZnVuY3Rpb24geWUoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyktMT09PWUuaW5kZXhPZih0W3JdKSYmZS5wdXNoKHRbcl0pfWZ1bmN0aW9uIHhlKGUsdCxyKXt2YXIgbixhLGk9W10sbz1bXSxzPWUubGF5b3V0O2ZvcihuPTA7bjx0Lmxlbmd0aDtuKyspaS5wdXNoKE4uZ2V0RnJvbUlkKGUsdFtuXSkpO2ZvcihuPTA7bjxyLmxlbmd0aDtuKyspby5wdXNoKE4uZ2V0RnJvbUlkKGUscltuXSkpO3ZhciBjPU9iamVjdC5rZXlzKHApLHU9WyJhbmNob3IiLCJkb21haW4iLCJvdmVybGF5aW5nIiwicG9zaXRpb24iLCJzaWRlIiwidGlja2FuZ2xlIiwiZWRpdFR5cGUiXSxmPVsibGluZWFyIiwibG9nIl07Zm9yKG49MDtuPGMubGVuZ3RoO24rKyl7dmFyIGQ9Y1tuXSxoPWlbMF1bZF0sZz1vWzBdW2RdLHY9ITAsbT0hMSx5PSExO2lmKCJfIiE9PWQuY2hhckF0KDApJiYiZnVuY3Rpb24iIT10eXBlb2YgaCYmLTE9PT11LmluZGV4T2YoZCkpe2ZvcihhPTE7YTxpLmxlbmd0aCYmdjthKyspe3ZhciB4PWlbYV1bZF07InR5cGUiPT09ZCYmLTEhPT1mLmluZGV4T2YoaCkmJi0xIT09Zi5pbmRleE9mKHgpJiZoIT09eD9tPSEwOnghPT1oJiYodj0hMSl9Zm9yKGE9MTthPG8ubGVuZ3RoJiZ2O2ErKyl7dmFyIGI9b1thXVtkXTsidHlwZSI9PT1kJiYtMSE9PWYuaW5kZXhPZihnKSYmLTEhPT1mLmluZGV4T2YoYikmJmchPT1iP3k9ITA6b1thXVtkXSE9PWcmJih2PSExKX12JiYobSYmKHNbaVswXS5fbmFtZV0udHlwZT0ibGluZWFyIikseSYmKHNbb1swXS5fbmFtZV0udHlwZT0ibGluZWFyIiksYmUocyxkLGksbyxlLl9mdWxsTGF5b3V0Ll9kZmx0VGl0bGUpKX19Zm9yKG49MDtuPGUuX2Z1bGxMYXlvdXQuYW5ub3RhdGlvbnMubGVuZ3RoO24rKyl7dmFyIF89ZS5fZnVsbExheW91dC5hbm5vdGF0aW9uc1tuXTstMSE9PXQuaW5kZXhPZihfLnhyZWYpJiYtMSE9PXIuaW5kZXhPZihfLnlyZWYpJiZsLnN3YXBBdHRycyhzLmFubm90YXRpb25zW25dLFsiPyJdKX19ZnVuY3Rpb24gYmUoZSx0LHIsbixhKXt2YXIgaSxvPWwubmVzdGVkUHJvcGVydHkscz1vKGVbclswXS5fbmFtZV0sdCkuZ2V0KCksYz1vKGVbblswXS5fbmFtZV0sdCkuZ2V0KCk7Zm9yKCJ0aXRsZSI9PT10JiYocyYmcy50ZXh0PT09YS54JiYocy50ZXh0PWEueSksYyYmYy50ZXh0PT09YS55JiYoYy50ZXh0PWEueCkpLGk9MDtpPHIubGVuZ3RoO2krKylvKGUscltpXS5fbmFtZSsiLiIrdCkuc2V0KGMpO2ZvcihpPTA7aTxuLmxlbmd0aDtpKyspbyhlLG5baV0uX25hbWUrIi4iK3QpLnNldChzKX1mdW5jdGlvbiBfZShlKXtyZXR1cm4iYW5ndWxhcmF4aXMiPT09ZS5faWR9ZnVuY3Rpb24gd2UoZSx0KXtmb3IodmFyIHI9dC5fcmFuZ2VicmVha3MubGVuZ3RoLG49MDtuPHI7bisrKXt2YXIgYT10Ll9yYW5nZWJyZWFrc1tuXTtpZihlPj1hLm1pbiYmZTxhLm1heClyZXR1cm4gYS5tYXh9cmV0dXJuIGV9Ti5nZXRUaWNrRm9ybWF0PWZ1bmN0aW9uKGUpe3ZhciB0LHIsbixhLGksbyxsLHM7ZnVuY3Rpb24gYyhlKXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGU/ZTpOdW1iZXIoZS5yZXBsYWNlKCJNIiwiIikpKlR9ZnVuY3Rpb24gdShlLHQpe3ZhciByPVsiTCIsIkQiXTtpZih0eXBlb2YgZT09dHlwZW9mIHQpe2lmKCJudW1iZXIiPT10eXBlb2YgZSlyZXR1cm4gZS10O3ZhciBuPXIuaW5kZXhPZihlLmNoYXJBdCgwKSksYT1yLmluZGV4T2YodC5jaGFyQXQoMCkpO3JldHVybiBuPT09YT9OdW1iZXIoZS5yZXBsYWNlKC8oTHxEKS9nLCIiKSktTnVtYmVyKHQucmVwbGFjZSgvKEx8RCkvZywiIikpOm4tYX1yZXR1cm4ibnVtYmVyIj09dHlwZW9mIGU/MTotMX1mdW5jdGlvbiBmKGUsdCl7dmFyIHI9bnVsbD09PXRbMF0sbj1udWxsPT09dFsxXSxhPXUoZSx0WzBdKT49MCxpPXUoZSx0WzFdKTw9MDtyZXR1cm4ocnx8YSkmJihufHxpKX1pZihlLnRpY2tmb3JtYXRzdG9wcyYmZS50aWNrZm9ybWF0c3RvcHMubGVuZ3RoPjApc3dpdGNoKGUudHlwZSl7Y2FzZSJkYXRlIjpjYXNlImxpbmVhciI6Zm9yKHQ9MDt0PGUudGlja2Zvcm1hdHN0b3BzLmxlbmd0aDt0KyspaWYoKG49ZS50aWNrZm9ybWF0c3RvcHNbdF0pLmVuYWJsZWQmJihhPWUuZHRpY2ssaT1uLmR0aWNrcmFuZ2Usbz12b2lkIDAsbD12b2lkIDAscz12b2lkIDAsbz1jfHxmdW5jdGlvbihlKXtyZXR1cm4gZX0sbD1pWzBdLHM9aVsxXSwoIWwmJiJudW1iZXIiIT10eXBlb2YgbHx8byhsKTw9byhhKSkmJighcyYmIm51bWJlciIhPXR5cGVvZiBzfHxvKHMpPj1vKGEpKSkpe3I9bjticmVha31icmVhaztjYXNlImxvZyI6Zm9yKHQ9MDt0PGUudGlja2Zvcm1hdHN0b3BzLmxlbmd0aDt0KyspaWYoKG49ZS50aWNrZm9ybWF0c3RvcHNbdF0pLmVuYWJsZWQmJmYoZS5kdGljayxuLmR0aWNrcmFuZ2UpKXtyPW47YnJlYWt9fXJldHVybiByP3IudmFsdWU6ZS50aWNrZm9ybWF0fSxOLmdldFN1YnBsb3RzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5fZnVsbExheW91dC5fc3VicGxvdHMsbj1yLmNhcnRlc2lhbi5jb25jYXQoci5nbDJkfHxbXSksYT10P04uZmluZFN1YnBsb3RzV2l0aEF4aXMobix0KTpuO3JldHVybiBhLnNvcnQoKGZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5zdWJzdHIoMSkuc3BsaXQoInkiKSxuPXQuc3Vic3RyKDEpLnNwbGl0KCJ5Iik7cmV0dXJuIHJbMF09PT1uWzBdPytyWzFdLStuWzFdOityWzBdLStuWzBdfSkpLGF9LE4uZmluZFN1YnBsb3RzV2l0aEF4aXM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9bmV3IFJlZ0V4cCgieCI9PT10Ll9pZC5jaGFyQXQoMCk/Il4iK3QuX2lkKyJ5Ijp0Ll9pZCsiJCIpLG49W10sYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgaT1lW2FdO3IudGVzdChpKSYmbi5wdXNoKGkpfXJldHVybiBufSxOLm1ha2VDbGlwUGF0aHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fZnVsbExheW91dDtpZighdC5faGFzT25seUxhcmdlU3Bsb21zKXt2YXIgcixhLGk9e19vZmZzZXQ6MCxfbGVuZ3RoOnQud2lkdGgsX2lkOiIifSxvPXtfb2Zmc2V0OjAsX2xlbmd0aDp0LmhlaWdodCxfaWQ6IiJ9LGw9Ti5saXN0KGUsIngiLCEwKSxzPU4ubGlzdChlLCJ5IiwhMCksYz1bXTtmb3Iocj0wO3I8bC5sZW5ndGg7cisrKWZvcihjLnB1c2goe3g6bFtyXSx5Om99KSxhPTA7YTxzLmxlbmd0aDthKyspMD09PXImJmMucHVzaCh7eDppLHk6c1thXX0pLGMucHVzaCh7eDpsW3JdLHk6c1thXX0pO3ZhciB1PXQuX2NsaXBzLnNlbGVjdEFsbCgiLmF4ZXNjbGlwIikuZGF0YShjLChmdW5jdGlvbihlKXtyZXR1cm4gZS54Ll9pZCtlLnkuX2lkfSkpO3UuZW50ZXIoKS5hcHBlbmQoImNsaXBQYXRoIikuY2xhc3NlZCgiYXhlc2NsaXAiLCEwKS5hdHRyKCJpZCIsKGZ1bmN0aW9uKGUpe3JldHVybiJjbGlwIit0Ll91aWQrZS54Ll9pZCtlLnkuX2lkfSkpLmFwcGVuZCgicmVjdCIpLHUuZXhpdCgpLnJlbW92ZSgpLHUuZWFjaCgoZnVuY3Rpb24oZSl7bi5zZWxlY3QodGhpcykuc2VsZWN0KCJyZWN0IikuYXR0cih7eDplLnguX29mZnNldHx8MCx5OmUueS5fb2Zmc2V0fHwwLHdpZHRoOmUueC5fbGVuZ3RofHwxLGhlaWdodDplLnkuX2xlbmd0aHx8MX0pfSkpfX0sTi5kcmF3PWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1lLl9mdWxsTGF5b3V0OyJyZWRyYXciPT09dCYmbi5fcGFwZXIuc2VsZWN0QWxsKCJnLnN1YnBsb3QiKS5lYWNoKChmdW5jdGlvbihlKXt2YXIgdD1lWzBdLHI9bi5fcGxvdHNbdF07aWYocil7dmFyIGE9ci54YXhpcyxpPXIueWF4aXM7ci54YXhpc2xheWVyLnNlbGVjdEFsbCgiLiIrYS5faWQrInRpY2siKS5yZW1vdmUoKSxyLnlheGlzbGF5ZXIuc2VsZWN0QWxsKCIuIitpLl9pZCsidGljayIpLnJlbW92ZSgpLHIueGF4aXNsYXllci5zZWxlY3RBbGwoIi4iK2EuX2lkKyJ0aWNrMiIpLnJlbW92ZSgpLHIueWF4aXNsYXllci5zZWxlY3RBbGwoIi4iK2kuX2lkKyJ0aWNrMiIpLnJlbW92ZSgpLHIueGF4aXNsYXllci5zZWxlY3RBbGwoIi4iK2EuX2lkKyJkaXZpZGVyIikucmVtb3ZlKCksci55YXhpc2xheWVyLnNlbGVjdEFsbCgiLiIraS5faWQrImRpdmlkZXIiKS5yZW1vdmUoKSxyLmdyaWRsYXllciYmci5ncmlkbGF5ZXIuc2VsZWN0QWxsKCJwYXRoIikucmVtb3ZlKCksci56ZXJvbGluZWxheWVyJiZyLnplcm9saW5lbGF5ZXIuc2VsZWN0QWxsKCJwYXRoIikucmVtb3ZlKCksbi5faW5mb2xheWVyLnNlbGVjdCgiLmctIithLl9pZCsidGl0bGUiKS5yZW1vdmUoKSxuLl9pbmZvbGF5ZXIuc2VsZWN0KCIuZy0iK2kuX2lkKyJ0aXRsZSIpLnJlbW92ZSgpfX0pKTt2YXIgYT10JiYicmVkcmF3IiE9PXQ/dDpOLmxpc3RJZHMoZSk7cmV0dXJuIGwuc3luY09yQXN5bmMoYS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe2lmKHQpe3ZhciBuPU4uZ2V0RnJvbUlkKGUsdCksYT1OLmRyYXdPbmUoZSxuLHIpO3JldHVybiBuLl9yPW4ucmFuZ2Uuc2xpY2UoKSxuLl9ybD1sLnNpbXBsZU1hcChuLl9yLG4ucjJsKSxhfX19KSkpfSxOLmRyYXdPbmU9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGEscztyPXJ8fHt9LHQuc2V0U2NhbGUoKTt2YXIgYz1lLl9mdWxsTGF5b3V0LHA9dC5faWQsaD1wLmNoYXJBdCgwKSxnPU4uY291bnRlckxldHRlcihwKSx2PWMuX3Bsb3RzW3QuX21haW5TdWJwbG90XTtpZih2KXt2YXIgbT12W2grImF4aXNsYXllciJdLHk9dC5fbWFpbkxpbmVQb3NpdGlvbix4PXQuX21haW5NaXJyb3JQb3NpdGlvbixiPXQuX3ZhbHM9Ti5jYWxjVGlja3ModCksXz1bdC5taXJyb3IseSx4XS5qb2luKCJfIik7Zm9yKG49MDtuPGIubGVuZ3RoO24rKyliW25dLmF4SW5mbz1fO3QuX3NlbGVjdGlvbnM9e30sdC5fdGlja0FuZ2xlcyYmKHQuX3ByZXZUaWNrQW5nbGVzPXQuX3RpY2tBbmdsZXMpLHQuX3RpY2tBbmdsZXM9e30sdC5fZGVwdGg9bnVsbDt2YXIgdz17fTtpZih0LnZpc2libGUpe3ZhciBULGssTT1OLm1ha2VUcmFuc1RpY2tGbih0KSxBPU4ubWFrZVRyYW5zVGlja0xhYmVsRm4odCksTD0iaW5zaWRlIj09PXQudGlja3MsUz0ib3V0c2lkZSI9PT10LnRpY2tzO2lmKCJib3VuZGFyaWVzIj09PXQudGlja3Nvbil7dmFyIEM9ZnVuY3Rpb24oZSx0KXt2YXIgcixuPVtdLGE9ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLnhibmRbdF07bnVsbCE9PXImJm4ucHVzaChsLmV4dGVuZEZsYXQoe30sZSx7eDpyfSkpfTtpZih0Lmxlbmd0aCl7Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKylhKHRbcl0sMCk7YSh0W3ItMV0sMSl9cmV0dXJuIG59KDAsYik7az1OLmNsaXBFbmRzKHQsQyksVD1MP2s6Q31lbHNlIGs9Ti5jbGlwRW5kcyh0LGIpLFQ9TCYmInBlcmlvZCIhPT10LnRpY2tsYWJlbG1vZGU/azpiO3ZhciBPPXQuX2dyaWRWYWxzPWssRD1mdW5jdGlvbihlLHQpe3ZhciByLG4sYT1bXSxpPXQubGVuZ3RoJiZ0W3QubGVuZ3RoLTFdLng8dFswXS54LG89ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLnhibmRbdF07bnVsbCE9PXImJmEucHVzaChsLmV4dGVuZEZsYXQoe30sZSx7eDpyfSkpfTtpZihlLnNob3dkaXZpZGVycyYmdC5sZW5ndGgpe2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBzPXRbcl07cy50ZXh0MiE9PW4mJm8ocyxpPzE6MCksbj1zLnRleHQyfW8odFtyLTFdLGk/MDoxKX1yZXR1cm4gYX0odCxiKTtpZighYy5faGFzT25seUxhcmdlU3Bsb21zKXt2YXIgUD10Ll9zdWJwbG90c1dpdGgsej17fTtmb3Iobj0wO248UC5sZW5ndGg7bisrKXthPVBbbl07dmFyIFI9KHM9Yy5fcGxvdHNbYV0pW2crImF4aXMiXSxFPVIuX21haW5BeGlzLl9pZDtpZigheltFXSl7eltFXT0xO3ZhciBIPSJ4Ij09PWg/Ik0wLCIrUi5fb2Zmc2V0KyJ2IitSLl9sZW5ndGg6Ik0iK1IuX29mZnNldCsiLDBoIitSLl9sZW5ndGg7Ti5kcmF3R3JpZChlLHQse3ZhbHM6Tyxjb3VudGVyQXhpczpSLGxheWVyOnMuZ3JpZGxheWVyLnNlbGVjdCgiLiIrcCkscGF0aDpILHRyYW5zRm46TX0pLE4uZHJhd1plcm9MaW5lKGUsdCx7Y291bnRlckF4aXM6UixsYXllcjpzLnplcm9saW5lbGF5ZXIscGF0aDpILHRyYW5zRm46TX0pfX19dmFyIGo9Ti5nZXRUaWNrU2lnbnModCksQj1bXTtpZih0LnRpY2tzKXt2YXIgVixVLHEsRz1OLm1ha2VUaWNrUGF0aCh0LHksalsyXSk7aWYodC5fYW5jaG9yQXhpcyYmdC5taXJyb3ImJiEwIT09dC5taXJyb3I/KFY9Ti5tYWtlVGlja1BhdGgodCx4LGpbM10pLFU9RytWKTooVj0iIixVPUcpLHQuc2hvd2RpdmlkZXJzJiZTJiYiYm91bmRhcmllcyI9PT10LnRpY2tzb24pe3ZhciBaPXt9O2ZvcihuPTA7bjxELmxlbmd0aDtuKyspWltEW25dLnhdPTE7cT1mdW5jdGlvbihlKXtyZXR1cm4gWltlLnhdP1Y6VX19ZWxzZSBxPVU7Ti5kcmF3VGlja3MoZSx0LHt2YWxzOlQsbGF5ZXI6bSxwYXRoOnEsdHJhbnNGbjpNfSksImFsbHRpY2tzIj09PXQubWlycm9yJiYoQj1PYmplY3Qua2V5cyh0Ll9saW5lcG9zaXRpb25zfHx7fSkpfWZvcihuPTA7bjxCLmxlbmd0aDtuKyspe2E9QltuXSxzPWMuX3Bsb3RzW2FdO3ZhciBZPXQuX2xpbmVwb3NpdGlvbnNbYV18fFtdLFg9Ti5tYWtlVGlja1BhdGgodCxZWzBdLGpbMF0pK04ubWFrZVRpY2tQYXRoKHQsWVsxXSxqWzFdKTtOLmRyYXdUaWNrcyhlLHQse3ZhbHM6VCxsYXllcjpzW2grImF4aXNsYXllciJdLHBhdGg6WCx0cmFuc0ZuOk19KX12YXIgVz1bXTtpZihXLnB1c2goKGZ1bmN0aW9uKCl7cmV0dXJuIE4uZHJhd0xhYmVscyhlLHQse3ZhbHM6YixsYXllcjptLHRyYW5zRm46QSxsYWJlbEZuczpOLm1ha2VMYWJlbEZucyh0LHkpfSl9KSksIm11bHRpY2F0ZWdvcnkiPT09dC50eXBlKXt2YXIgUT17eDoyLHk6MTB9W2hdO1cucHVzaCgoZnVuY3Rpb24oKXt2YXIgcj17eDoiaGVpZ2h0Iix5OiJ3aWR0aCJ9W2hdLG49JCgpW3JdK1ErKHQuX3RpY2tBbmdsZXNbcCsidGljayJdP3QudGlja2ZvbnQuc2l6ZSpJOjApO3JldHVybiBOLmRyYXdMYWJlbHMoZSx0LHt2YWxzOmNlKHQsYiksbGF5ZXI6bSxjbHM6cCsidGljazIiLHJlcG9zaXRpb25PblVwZGF0ZTohMCxzZWNvbmRhcnk6ITAsdHJhbnNGbjpNLGxhYmVsRm5zOk4ubWFrZUxhYmVsRm5zKHQseStuKmpbNF0pfSl9KSksVy5wdXNoKChmdW5jdGlvbigpe3JldHVybiB0Ll9kZXB0aD1qWzRdKigkKCJ0aWNrMiIpW3Quc2lkZV0teSksZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXQuX2lkKyJkaXZpZGVyIixhPXIudmFscyxpPXIubGF5ZXIuc2VsZWN0QWxsKCJwYXRoLiIrbikuZGF0YShhLGZlKTtpLmV4aXQoKS5yZW1vdmUoKSxpLmVudGVyKCkuaW5zZXJ0KCJwYXRoIiwiOmZpcnN0LWNoaWxkIikuY2xhc3NlZChuLDEpLmNsYXNzZWQoImNyaXNwIiwxKS5jYWxsKGYuc3Ryb2tlLHQuZGl2aWRlcmNvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixkLmNyaXNwUm91bmQoZSx0LmRpdmlkZXJ3aWR0aCwxKSsicHgiKSxpLmF0dHIoInRyYW5zZm9ybSIsci50cmFuc0ZuKS5hdHRyKCJkIixyLnBhdGgpfShlLHQse3ZhbHM6RCxsYXllcjptLHBhdGg6Ti5tYWtlVGlja1BhdGgodCx5LGpbNF0sdC5fZGVwdGgpLHRyYW5zRm46TX0pfSkpfWVsc2UgdC50aXRsZS5oYXNPd25Qcm9wZXJ0eSgic3RhbmRvZmYiKSYmVy5wdXNoKChmdW5jdGlvbigpe3QuX2RlcHRoPWpbNF0qKCQoKVt0LnNpZGVdLXkpfSkpO3ZhciBKPW8uZ2V0Q29tcG9uZW50TWV0aG9kKCJyYW5nZXNsaWRlciIsImlzVmlzaWJsZSIpKHQpO3JldHVybiBXLnB1c2goKGZ1bmN0aW9uKCl7dmFyIHIsbixhLGwscz10LnNpZGUuY2hhckF0KDApLHU9Rlt0LnNpZGVdLmNoYXJBdCgwKSxmPU4uZ2V0UHhQb3NpdGlvbihlLHQpLGQ9Uz90LnRpY2tsZW46MDtpZigodC5hdXRvbWFyZ2lufHxKKSYmKCJtdWx0aWNhdGVnb3J5Ij09PXQudHlwZT9yPSQoInRpY2syIik6KHI9JCgpLCJ4Ij09PWgmJiJiIj09PXMmJih0Ll9kZXB0aD1NYXRoLm1heChyLndpZHRoPjA/ci5ib3R0b20tZjowLGQpKSkpLHQuYXV0b21hcmdpbil7bj17eDowLHk6MCxyOjAsbDowLHQ6MCxiOjB9O3ZhciBwPVswLDFdO2lmKCJ4Ij09PWgpe2lmKCJiIj09PXM/bltzXT10Ll9kZXB0aDoobltzXT10Ll9kZXB0aD1NYXRoLm1heChyLndpZHRoPjA/Zi1yLnRvcDowLGQpLHAucmV2ZXJzZSgpKSxyLndpZHRoPjApe3ZhciB2PXIucmlnaHQtKHQuX29mZnNldCt0Ll9sZW5ndGgpO3Y+MCYmKG4ueHI9MSxuLnI9dik7dmFyIG09dC5fb2Zmc2V0LXIubGVmdDttPjAmJihuLnhsPTAsbi5sPW0pfX1lbHNlIGlmKCJsIj09PXM/bltzXT10Ll9kZXB0aD1NYXRoLm1heChyLmhlaWdodD4wP2Ytci5sZWZ0OjAsZCk6KG5bc109dC5fZGVwdGg9TWF0aC5tYXgoci5oZWlnaHQ+MD9yLnJpZ2h0LWY6MCxkKSxwLnJldmVyc2UoKSksci5oZWlnaHQ+MCl7dmFyIHk9ci5ib3R0b20tKHQuX29mZnNldCt0Ll9sZW5ndGgpO3k+MCYmKG4ueWI9MCxuLmI9eSk7dmFyIHg9dC5fb2Zmc2V0LXIudG9wO3g+MCYmKG4ueXQ9MSxuLnQ9eCl9bltnXT0iZnJlZSI9PT10LmFuY2hvcj90LnBvc2l0aW9uOnQuX2FuY2hvckF4aXMuZG9tYWluW3BbMF1dLHQudGl0bGUudGV4dCE9PWMuX2RmbHRUaXRsZVtoXSYmKG5bc10rPWRlKHQpKyh0LnRpdGxlLnN0YW5kb2ZmfHwwKSksdC5taXJyb3ImJiJmcmVlIiE9PXQuYW5jaG9yJiYoKGE9e3g6MCx5OjAscjowLGw6MCx0OjAsYjowfSlbdV09dC5saW5ld2lkdGgsdC5taXJyb3ImJiEwIT09dC5taXJyb3ImJihhW3VdKz1kKSwhMD09PXQubWlycm9yfHwidGlja3MiPT09dC5taXJyb3I/YVtnXT10Ll9hbmNob3JBeGlzLmRvbWFpbltwWzFdXToiYWxsIiE9PXQubWlycm9yJiYiYWxsdGlja3MiIT09dC5taXJyb3J8fChhW2ddPVt0Ll9jb3VudGVyRG9tYWluTWluLHQuX2NvdW50ZXJEb21haW5NYXhdW3BbMV1dKSl9SiYmKGw9by5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2xpZGVyIiwiYXV0b01hcmdpbk9wdHMiKShlLHQpKSxpLmF1dG9NYXJnaW4oZSxnZSh0KSxuKSxpLmF1dG9NYXJnaW4oZSx2ZSh0KSxhKSxpLmF1dG9NYXJnaW4oZSxtZSh0KSxsKX0pKSxyLnNraXBUaXRsZXx8SiYmImJvdHRvbSI9PT10LnNpZGV8fFcucHVzaCgoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXt2YXIgcixuPWUuX2Z1bGxMYXlvdXQsYT10Ll9pZCxpPWEuY2hhckF0KDApLG89dC50aXRsZS5mb250LnNpemU7aWYodC50aXRsZS5oYXNPd25Qcm9wZXJ0eSgic3RhbmRvZmYiKSlyPXQuX2RlcHRoK3QudGl0bGUuc3RhbmRvZmYrZGUodCk7ZWxzZXt2YXIgbD0tMSE9PSh0LnRpY2tsYWJlbHBvc2l0aW9ufHwiIikuaW5kZXhPZigiaW5zaWRlIik7aWYoIm11bHRpY2F0ZWdvcnkiPT09dC50eXBlKXI9dC5fZGVwdGg7ZWxzZXt2YXIgcz0xLjUqbztsJiYocz0uNSpvLCJvdXRzaWRlIj09PXQudGlja3MmJihzKz10LnRpY2tsZW4pKSxyPTEwK3MrKHQubGluZXdpZHRoP3QubGluZXdpZHRoLTE6MCl9bHx8KHIrPSJ4Ij09PWk/InRvcCI9PT10LnNpZGU/byoodC5zaG93dGlja2xhYmVscz8xOjApOm8qKHQuc2hvd3RpY2tsYWJlbHM/MS41Oi41KToicmlnaHQiPT09dC5zaWRlP28qKHQuc2hvd3RpY2tsYWJlbHM/MTouNSk6byoodC5zaG93dGlja2xhYmVscz8uNTowKSl9dmFyIGMsZixwLGgsZz1OLmdldFB4UG9zaXRpb24oZSx0KTsieCI9PT1pPyhmPXQuX29mZnNldCt0Ll9sZW5ndGgvMixwPSJ0b3AiPT09dC5zaWRlP2ctcjpnK3IpOihwPXQuX29mZnNldCt0Ll9sZW5ndGgvMixmPSJyaWdodCI9PT10LnNpZGU/ZytyOmctcixjPXtyb3RhdGU6Ii05MCIsb2Zmc2V0OjB9KTtpZigibXVsdGljYXRlZ29yeSIhPT10LnR5cGUpe3ZhciB2PXQuX3NlbGVjdGlvbnNbdC5faWQrInRpY2siXTtpZihoPXtzZWxlY3Rpb246dixzaWRlOnQuc2lkZX0sdiYmdi5ub2RlKCkmJnYubm9kZSgpLnBhcmVudE5vZGUpe3ZhciBtPWQuZ2V0VHJhbnNsYXRlKHYubm9kZSgpLnBhcmVudE5vZGUpO2gub2Zmc2V0TGVmdD1tLngsaC5vZmZzZXRUb3A9bS55fXQudGl0bGUuaGFzT3duUHJvcGVydHkoInN0YW5kb2ZmIikmJihoLnBhZD0wKX1yZXR1cm4gdS5kcmF3KGUsYSsidGl0bGUiLHtwcm9wQ29udGFpbmVyOnQscHJvcE5hbWU6dC5fbmFtZSsiLnRpdGxlLnRleHQiLHBsYWNlaG9sZGVyOm4uX2RmbHRUaXRsZVtpXSxhdm9pZDpoLHRyYW5zZm9ybTpjLGF0dHJpYnV0ZXM6e3g6Zix5OnAsInRleHQtYW5jaG9yIjoibWlkZGxlIn19KX0oZSx0KX0pKSxsLnN5bmNPckFzeW5jKFcpfX1mdW5jdGlvbiAkKGUpe3ZhciByPXArKGV8fCJ0aWNrIik7cmV0dXJuIHdbcl18fCh3W3JdPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbixhLGk7ZS5fc2VsZWN0aW9uc1t0XS5zaXplKCk/KHI9MS8wLG49LTEvMCxhPTEvMCxpPS0xLzAsZS5fc2VsZWN0aW9uc1t0XS5lYWNoKChmdW5jdGlvbigpe3ZhciBlPWhlKHRoaXMpLHQ9ZC5iQm94KGUubm9kZSgpLnBhcmVudE5vZGUpO3I9TWF0aC5taW4ocix0LnRvcCksbj1NYXRoLm1heChuLHQuYm90dG9tKSxhPU1hdGgubWluKGEsdC5sZWZ0KSxpPU1hdGgubWF4KGksdC5yaWdodCl9KSkpOihyPTAsbj0wLGE9MCxpPTApO3JldHVybnt0b3A6cixib3R0b206bixsZWZ0OmEscmlnaHQ6aSxoZWlnaHQ6bi1yLHdpZHRoOmktYX19KHQscikpLHdbcl19fSxOLmdldFRpY2tTaWducz1mdW5jdGlvbihlKXt2YXIgdD1lLl9pZC5jaGFyQXQoMCkscj17eDoidG9wIix5OiJyaWdodCJ9W3RdLG49ZS5zaWRlPT09cj8xOi0xLGE9Wy0xLDEsbiwtbl07cmV0dXJuImluc2lkZSIhPT1lLnRpY2tzPT0oIngiPT09dCkmJihhPWEubWFwKChmdW5jdGlvbihlKXtyZXR1cm4tZX0pKSksZS5zaWRlJiZhLnB1c2goe2w6LTEsdDotMSxyOjEsYjoxfVtlLnNpZGUuY2hhckF0KDApXSksYX0sTi5tYWtlVHJhbnNUaWNrRm49ZnVuY3Rpb24oZSl7cmV0dXJuIngiPT09ZS5faWQuY2hhckF0KDApP2Z1bmN0aW9uKHQpe3JldHVybiBzKGUuX29mZnNldCtlLmwycCh0LngpLDApfTpmdW5jdGlvbih0KXtyZXR1cm4gcygwLGUuX29mZnNldCtlLmwycCh0LngpKX19LE4ubWFrZVRyYW5zVGlja0xhYmVsRm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50aWNrbGFiZWxwb3NpdGlvbnx8IiIscj1mdW5jdGlvbihlKXtyZXR1cm4tMSE9PXQuaW5kZXhPZihlKX0sbj1yKCJ0b3AiKSxhPXIoImxlZnQiKSxpPXIoInJpZ2h0Iiksbz1yKCJib3R0b20iKSxsPXIoImluc2lkZSIpLHM9b3x8YXx8bnx8aTtpZighcyYmIWwpcmV0dXJuWzAsMF07dmFyIGM9ZS5zaWRlLHU9cz8oZS50aWNrd2lkdGh8fDApLzI6MCxmPTMsZD1lLnRpY2tmb250P2UudGlja2ZvbnQuc2l6ZToxMjsob3x8bikmJih1Kz1kKkUsZis9KGUubGluZXdpZHRofHwwKS8yKTsoYXx8aSkmJih1Kz0oZS5saW5ld2lkdGh8fDApLzIsZis9Myk7bCYmInRvcCI9PT1jJiYoZi09ZCooMS1FKSk7KGF8fG4pJiYodT0tdSk7ImJvdHRvbSIhPT1jJiYicmlnaHQiIT09Y3x8KGY9LWYpO3JldHVybltzP3U6MCxsP2Y6MF19KGUpLHI9dFswXSxuPXRbMV07cmV0dXJuIngiPT09ZS5faWQuY2hhckF0KDApP2Z1bmN0aW9uKHQpe3JldHVybiBzKHIrZS5fb2Zmc2V0K2UubDJwKHVlKHQpKSxuKX06ZnVuY3Rpb24odCl7cmV0dXJuIHMobixyK2UuX29mZnNldCtlLmwycCh1ZSh0KSkpfX0sTi5tYWtlVGlja1BhdGg9ZnVuY3Rpb24oZSx0LHIsbil7bj12b2lkIDAhPT1uP246ZS50aWNrbGVuO3ZhciBhPWUuX2lkLmNoYXJBdCgwKSxpPShlLmxpbmV3aWR0aHx8MSkvMjtyZXR1cm4ieCI9PT1hPyJNMCwiKyh0K2kqcikrInYiK24qcjoiTSIrKHQraSpyKSsiLDBoIituKnJ9LE4ubWFrZUxhYmVsRm5zPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1lLnRpY2tsYWJlbHBvc2l0aW9ufHwiIixpPWZ1bmN0aW9uKGUpe3JldHVybi0xIT09bi5pbmRleE9mKGUpfSxvPWkoInRvcCIpLHM9aSgibGVmdCIpLGM9aSgicmlnaHQiKSx1PWkoImJvdHRvbSIpfHxzfHxvfHxjLGY9aSgiaW5zaWRlIiksZD0iaW5zaWRlIj09PW4mJiJpbnNpZGUiPT09ZS50aWNrc3x8IWYmJiJvdXRzaWRlIj09PWUudGlja3MmJiJib3VuZGFyaWVzIiE9PWUudGlja3NvbixwPTAsaD0wLGc9ZD9lLnRpY2tsZW46MDtpZihmP2cqPS0xOnUmJihnPTApLGQmJihwKz1nLHIpKXt2YXIgdj1sLmRlZzJyYWQocik7cD1nKk1hdGguY29zKHYpKzEsaD1nKk1hdGguc2luKHYpfWUuc2hvd3RpY2tsYWJlbHMmJihkfHxlLnNob3dsaW5lKSYmKHArPS4yKmUudGlja2ZvbnQuc2l6ZSk7dmFyIG0seSx4LGIsXyx3PXtsYWJlbFN0YW5kb2ZmOnArPShlLmxpbmV3aWR0aHx8MSkvMiooZj8tMToxKSxsYWJlbFNoaWZ0Omh9LFQ9MCxrPWUuc2lkZSxNPWUuX2lkLmNoYXJBdCgwKSxBPWUudGlja2FuZ2xlO2lmKCJ4Ij09PU0pYj0oXz0hZiYmImJvdHRvbSI9PT1rfHxmJiYidG9wIj09PWspPzE6LTEsZiYmKGIqPS0xKSxtPWgqYix5PXQrcCpiLHg9Xz8xOi0uMiw5MD09PU1hdGguYWJzKEEpJiYoZj94Kz1SOng9LTkwPT09QSYmImJvdHRvbSI9PT1rP0U6OTA9PT1BJiYidG9wIj09PWs/UjouNSxUPVIvMiooQS85MCkpLHcueEZuPWZ1bmN0aW9uKGUpe3JldHVybiBlLmR4K20rVCplLmZvbnRTaXplfSx3LnlGbj1mdW5jdGlvbihlKXtyZXR1cm4gZS5keSt5K2UuZm9udFNpemUqeH0sdy5hbmNob3JGbj1mdW5jdGlvbihlLHQpe2lmKHUpe2lmKHMpcmV0dXJuImVuZCI7aWYoYylyZXR1cm4ic3RhcnQifXJldHVybiBhKHQpJiYwIT09dCYmMTgwIT09dD90KmI8MCE9PWY/ImVuZCI6InN0YXJ0IjoibWlkZGxlIn0sdy5oZWlnaHRGbj1mdW5jdGlvbih0LHIsbil7cmV0dXJuIHI8LTYwfHxyPjYwPy0uNSpuOiJ0b3AiPT09ZS5zaWRlIT09Zj8tbjowfTtlbHNlIGlmKCJ5Ij09PU0pe2lmKGI9KF89IWYmJiJsZWZ0Ij09PWt8fGYmJiJyaWdodCI9PT1rKT8xOi0xLGYmJihiKj0tMSksbT1wLHk9aCpiLHg9MCxmfHw5MCE9PU1hdGguYWJzKEEpfHwoeD0tOTA9PT1BJiYibGVmdCI9PT1rfHw5MD09PUEmJiJyaWdodCI9PT1rP0U6LjUpLGYpe3ZhciBMPWEoQSk/K0E6MDtpZigwIT09TCl7dmFyIFM9bC5kZWcycmFkKEwpO1Q9TWF0aC5hYnMoTWF0aC5zaW4oUykpKkUqYix4PTB9fXcueEZuPWZ1bmN0aW9uKGUpe3JldHVybiBlLmR4K3QtKG0rZS5mb250U2l6ZSp4KSpiK1QqZS5mb250U2l6ZX0sdy55Rm49ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZHkreStlLmZvbnRTaXplKlJ9LHcuYW5jaG9yRm49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYSh0KSYmOTA9PT1NYXRoLmFicyh0KT8ibWlkZGxlIjpfPyJlbmQiOiJzdGFydCJ9LHcuaGVpZ2h0Rm49ZnVuY3Rpb24odCxyLG4pe3JldHVybiJyaWdodCI9PT1lLnNpZGUmJihyKj0tMSkscjwtMzA/LW46cjwzMD8tLjUqbjowfX1yZXR1cm4gd30sTi5kcmF3VGlja3M9ZnVuY3Rpb24oZSx0LHIpe3I9cnx8e307dmFyIG49dC5faWQrInRpY2siLGE9ci52YWxzOyJwZXJpb2QiPT09dC50aWNrbGFiZWxtb2RlJiYoYT1hLnNsaWNlKCkpLnNoaWZ0KCk7dmFyIGk9ci5sYXllci5zZWxlY3RBbGwoInBhdGguIituKS5kYXRhKHQudGlja3M/YTpbXSxmZSk7aS5leGl0KCkucmVtb3ZlKCksaS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQobiwxKS5jbGFzc2VkKCJ0aWNrcyIsMSkuY2xhc3NlZCgiY3Jpc3AiLCExIT09ci5jcmlzcCkuY2FsbChmLnN0cm9rZSx0LnRpY2tjb2xvcikuc3R5bGUoInN0cm9rZS13aWR0aCIsZC5jcmlzcFJvdW5kKGUsdC50aWNrd2lkdGgsMSkrInB4IikuYXR0cigiZCIsci5wYXRoKSxpLmF0dHIoInRyYW5zZm9ybSIsci50cmFuc0ZuKX0sTi5kcmF3R3JpZD1mdW5jdGlvbihlLHQscil7cj1yfHx7fTt2YXIgbj10Ll9pZCsiZ3JpZCIsYT1yLnZhbHMsaT1yLmNvdW50ZXJBeGlzO2lmKCExPT09dC5zaG93Z3JpZClhPVtdO2Vsc2UgaWYoaSYmTi5zaG91bGRTaG93WmVyb0xpbmUoZSx0LGkpKWZvcih2YXIgbz0iYXJyYXkiPT09dC50aWNrbW9kZSxsPTA7bDxhLmxlbmd0aDtsKyspe3ZhciBzPWFbbF0ueDtpZihvPyFzOk1hdGguYWJzKHMpPHQuZHRpY2svMTAwKXtpZihhPWEuc2xpY2UoMCxsKS5jb25jYXQoYS5zbGljZShsKzEpKSwhbylicmVhaztsLS19fXZhciBjPXIubGF5ZXIuc2VsZWN0QWxsKCJwYXRoLiIrbikuZGF0YShhLGZlKTtjLmV4aXQoKS5yZW1vdmUoKSxjLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZChuLDEpLmNsYXNzZWQoImNyaXNwIiwhMSE9PXIuY3Jpc3ApLHQuX2d3PWQuY3Jpc3BSb3VuZChlLHQuZ3JpZHdpZHRoLDEpLGMuYXR0cigidHJhbnNmb3JtIixyLnRyYW5zRm4pLmF0dHIoImQiLHIucGF0aCkuY2FsbChmLnN0cm9rZSx0LmdyaWRjb2xvcnx8IiNkZGQiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIix0Ll9ndysicHgiKSwiZnVuY3Rpb24iPT10eXBlb2Ygci5wYXRoJiZjLmF0dHIoImQiLHIucGF0aCl9LE4uZHJhd1plcm9MaW5lPWZ1bmN0aW9uKGUsdCxyKXtyPXJ8fHI7dmFyIG49dC5faWQrInpsIixhPU4uc2hvdWxkU2hvd1plcm9MaW5lKGUsdCxyLmNvdW50ZXJBeGlzKSxpPXIubGF5ZXIuc2VsZWN0QWxsKCJwYXRoLiIrbikuZGF0YShhP1t7eDowLGlkOnQuX2lkfV06W10pO2kuZXhpdCgpLnJlbW92ZSgpLGkuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKG4sMSkuY2xhc3NlZCgiemwiLDEpLmNsYXNzZWQoImNyaXNwIiwhMSE9PXIuY3Jpc3ApLmVhY2goKGZ1bmN0aW9uKCl7ci5sYXllci5zZWxlY3RBbGwoInBhdGgiKS5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiBCKGUuaWQsdC5pZCl9KSl9KSksaS5hdHRyKCJ0cmFuc2Zvcm0iLHIudHJhbnNGbikuYXR0cigiZCIsci5wYXRoKS5jYWxsKGYuc3Ryb2tlLHQuemVyb2xpbmVjb2xvcnx8Zi5kZWZhdWx0TGluZSkuc3R5bGUoInN0cm9rZS13aWR0aCIsZC5jcmlzcFJvdW5kKGUsdC56ZXJvbGluZXdpZHRoLHQuX2d3fHwxKSsicHgiKX0sTi5kcmF3TGFiZWxzPWZ1bmN0aW9uKGUsdCxyKXtyPXJ8fHt9O3ZhciBpPWUuX2Z1bGxMYXlvdXQsbz10Ll9pZCx1PW8uY2hhckF0KDApLGY9ci5jbHN8fG8rInRpY2siLHA9ci52YWxzLGg9ci5sYWJlbEZucyxnPXIuc2Vjb25kYXJ5PzA6dC50aWNrYW5nbGUsdj0odC5fcHJldlRpY2tBbmdsZXN8fHt9KVtmXSxtPXIubGF5ZXIuc2VsZWN0QWxsKCJnLiIrZikuZGF0YSh0LnNob3d0aWNrbGFiZWxzP3A6W10sZmUpLHk9W107ZnVuY3Rpb24geChlLGkpe3ZhciBvPS0xIT09KHQudGlja2xhYmVscG9zaXRpb258fCIiKS5pbmRleE9mKCJpbnNpZGUiKTtlLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciBsPW4uc2VsZWN0KHRoaXMpLHU9bC5zZWxlY3QoIi50ZXh0LW1hdGgtZ3JvdXAiKSxmPWguYW5jaG9yRm4oZSxpKSxwPXIudHJhbnNGbi5jYWxsKGwubm9kZSgpLGUpKyhhKGkpJiYwIT0raT8iIHJvdGF0ZSgiK2krIiwiK2gueEZuKGUpKyIsIisoaC55Rm4oZSktZS5mb250U2l6ZS8yKSsiKSI6IiIpLGc9Yy5saW5lQ291bnQobCksdj1JKmUuZm9udFNpemUsbT1oLmhlaWdodEZuKGUsYShpKT8raTowLChnLTEpKnYpO2lmKG0mJihwKz1zKDAsbSkpLHUuZW1wdHkoKSl7dmFyIHk9bC5zZWxlY3QoInRleHQiKTt5LmF0dHIoe3RyYW5zZm9ybTpwLCJ0ZXh0LWFuY2hvciI6Zn0pLG8mJih5LnN0eWxlKHtvcGFjaXR5OjEwMH0pLHQuX2hpZGVPdXRPZlJhbmdlSW5zaWRlVGlja0xhYmVscyYmdC5faGlkZU91dE9mUmFuZ2VJbnNpZGVUaWNrTGFiZWxzKCkpfWVsc2V7dmFyIHg9ZC5iQm94KHUubm9kZSgpKS53aWR0aCp7ZW5kOi0uNSxzdGFydDouNX1bZl07dS5hdHRyKCJ0cmFuc2Zvcm0iLHArcyh4LDApKX19KSl9bS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZiwxKS5hcHBlbmQoInRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpLGE9ZS5fcHJvbWlzZXMubGVuZ3RoO3IuY2FsbChjLnBvc2l0aW9uVGV4dCxoLnhGbih0KSxoLnlGbih0KSkuY2FsbChkLmZvbnQsdC5mb250LHQuZm9udFNpemUsdC5mb250Q29sb3IpLnRleHQodC50ZXh0KS5jYWxsKGMuY29udmVydFRvVHNwYW5zLGUpLGUuX3Byb21pc2VzW2FdP3kucHVzaChlLl9wcm9taXNlcy5wb3AoKS50aGVuKChmdW5jdGlvbigpe3gocixnKX0pKSk6eChyLGcpfSkpLG0uZXhpdCgpLnJlbW92ZSgpLHIucmVwb3NpdGlvbk9uVXBkYXRlJiZtLmVhY2goKGZ1bmN0aW9uKGUpe24uc2VsZWN0KHRoaXMpLnNlbGVjdCgidGV4dCIpLmNhbGwoYy5wb3NpdGlvblRleHQsaC54Rm4oZSksaC55Rm4oZSkpfSkpLHQuX2hpZGVPdXRPZlJhbmdlSW5zaWRlVGlja0xhYmVscz12b2lkIDAsLTEhPT0odC50aWNrbGFiZWxwb3NpdGlvbnx8IiIpLmluZGV4T2YoImluc2lkZSIpJiYodC5faGlkZU91dE9mUmFuZ2VJbnNpZGVUaWNrTGFiZWxzPWZ1bmN0aW9uKCl7dmFyIGU9bC5zaW1wbGVNYXAodC5yYW5nZSx0LnIybCkscj10LmwycChlWzBdKSxhPXQubDJwKGVbMV0pLGk9TWF0aC5taW4ocixhKSt0Ll9vZmZzZXQsbz1NYXRoLm1heChyLGEpK3QuX29mZnNldCxzPSJ4Ij09PXQuX2lkLmNoYXJBdCgwKTttLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2lmKHIuc2VsZWN0KCIudGV4dC1tYXRoLWdyb3VwIikuZW1wdHkoKSl7dmFyIGE9ZC5iQm94KHIubm9kZSgpKSxsPSExO3M/KGEucmlnaHQ+b3x8YS5sZWZ0PGkpJiYobD0hMCk6KGEuYm90dG9tPm98fGEudG9wKyh0LnRpY2thbmdsZT8wOmUuZm9udFNpemUvNCk8aSkmJihsPSEwKSxsJiZyLnNlbGVjdCgidGV4dCIpLnN0eWxlKHtvcGFjaXR5OjB9KX19KSl9KSx4KG0sdisxP3Y6Zyk7dmFyIGI9bnVsbDt0Ll9zZWxlY3Rpb25zJiYodC5fc2VsZWN0aW9uc1tmXT1tKTt2YXIgXz1bZnVuY3Rpb24oKXtyZXR1cm4geS5sZW5ndGgmJlByb21pc2UuYWxsKHkpfV07dC5hdXRvbWFyZ2luJiZpLl9yZWRyYXdGcm9tQXV0b01hcmdpbkNvdW50JiY5MD09PXY/KGI9OTAsXy5wdXNoKChmdW5jdGlvbigpe3gobSx2KX0pKSk6Xy5wdXNoKChmdW5jdGlvbigpe2lmKHgobSxnKSxwLmxlbmd0aCYmIngiPT09dSYmIWEoZykmJigibG9nIiE9PXQudHlwZXx8IkQiIT09U3RyaW5nKHQuZHRpY2spLmNoYXJBdCgwKSkpe2I9MDt2YXIgZSxuPTAsaT1bXTtpZihtLmVhY2goKGZ1bmN0aW9uKGUpe249TWF0aC5tYXgobixlLmZvbnRTaXplKTt2YXIgcj10LmwycChlLngpLGE9aGUodGhpcyksbz1kLmJCb3goYS5ub2RlKCkpO2kucHVzaCh7dG9wOjAsYm90dG9tOjEwLGhlaWdodDoxMCxsZWZ0OnItby53aWR0aC8yLHJpZ2h0OnIrby53aWR0aC8yKzIsd2lkdGg6by53aWR0aCsyfSl9KSksImJvdW5kYXJpZXMiIT09dC50aWNrc29uJiYhdC5zaG93ZGl2aWRlcnN8fHIuc2Vjb25kYXJ5KXt2YXIgbz1wLmxlbmd0aCxzPU1hdGguYWJzKChwW28tMV0ueC1wWzBdLngpKnQuX20pLyhvLTEpLGM9dC50aWNrbGFiZWxwb3NpdGlvbnx8IiIsZj1mdW5jdGlvbihlKXtyZXR1cm4tMSE9PWMuaW5kZXhPZihlKX0saD1mKCJ0b3AiKSx2PWYoImxlZnQiKSx5PWYoInJpZ2h0IiksXz1mKCJib3R0b20iKXx8dnx8aHx8eT8odC50aWNrd2lkdGh8fDApKzY6MCx3PXM8Mi41Km58fCJtdWx0aWNhdGVnb3J5Ij09PXQudHlwZTtmb3IoZT0wO2U8aS5sZW5ndGgtMTtlKyspaWYobC5iQm94SW50ZXJzZWN0KGlbZV0saVtlKzFdLF8pKXtiPXc/OTA6MzA7YnJlYWt9fWVsc2V7dmFyIFQ9Mjtmb3IodC50aWNrcyYmKFQrPXQudGlja3dpZHRoLzIpLGU9MDtlPGkubGVuZ3RoO2UrKyl7dmFyIGs9cFtlXS54Ym5kLE09aVtlXTtpZihudWxsIT09a1swXSYmTS5sZWZ0LXQubDJwKGtbMF0pPFR8fG51bGwhPT1rWzFdJiZ0LmwycChrWzFdKS1NLnJpZ2h0PFQpe2I9OTA7YnJlYWt9fX1iJiZ4KG0sYil9fSkpLHQuX3RpY2tBbmdsZXMmJl8ucHVzaCgoZnVuY3Rpb24oKXt0Ll90aWNrQW5nbGVzW2ZdPW51bGw9PT1iP2EoZyk/ZzowOmJ9KSk7dmFyIHc9dC5fYW5jaG9yQXhpczt3JiZ3LmF1dG9yYW5nZSYmLTEhPT0odC50aWNrbGFiZWxwb3NpdGlvbnx8IiIpLmluZGV4T2YoImluc2lkZSIpJiYhVihpLHQuX2lkKSYmKGkuX2luc2lkZVRpY2tMYWJlbHNBdXRvcmFuZ2V8fChpLl9pbnNpZGVUaWNrTGFiZWxzQXV0b3JhbmdlPXt9KSxpLl9pbnNpZGVUaWNrTGFiZWxzQXV0b3JhbmdlW3cuX25hbWUrIi5hdXRvcmFuZ2UiXT13LmF1dG9yYW5nZSxfLnB1c2goKGZ1bmN0aW9uKCl7bS5lYWNoKChmdW5jdGlvbihlLHIpe3ZhciBuPWhlKHRoaXMpO3QuX3ZhbHNbcl0uYmI9ZC5iQm94KG4ubm9kZSgpKX0pKX0pKSk7dmFyIFQ9bC5zeW5jT3JBc3luYyhfKTtyZXR1cm4gVCYmVC50aGVuJiZlLl9wcm9taXNlcy5wdXNoKFQpLFR9LE4uZ2V0UHhQb3NpdGlvbj1mdW5jdGlvbihlLHQpe3ZhciByLG49ZS5fZnVsbExheW91dC5fc2l6ZSxhPXQuX2lkLmNoYXJBdCgwKSxpPXQuc2lkZTtyZXR1cm4iZnJlZSIhPT10LmFuY2hvcj9yPXQuX2FuY2hvckF4aXM6IngiPT09YT9yPXtfb2Zmc2V0Om4udCsoMS0odC5wb3NpdGlvbnx8MCkpKm4uaCxfbGVuZ3RoOjB9OiJ5Ij09PWEmJihyPXtfb2Zmc2V0Om4ubCsodC5wb3NpdGlvbnx8MCkqbi53LF9sZW5ndGg6MH0pLCJ0b3AiPT09aXx8ImxlZnQiPT09aT9yLl9vZmZzZXQ6ImJvdHRvbSI9PT1pfHwicmlnaHQiPT09aT9yLl9vZmZzZXQrci5fbGVuZ3RoOnZvaWQgMH0sTi5zaG91bGRTaG93WmVyb0xpbmU9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWwuc2ltcGxlTWFwKHQucmFuZ2UsdC5yMmwpO3JldHVybiBuWzBdKm5bMV08PTAmJnQuemVyb2xpbmUmJigibGluZWFyIj09PXQudHlwZXx8Ii0iPT09dC50eXBlKSYmISh0LnJhbmdlYnJlYWtzJiZ0Lm1hc2tCcmVha3MoMCk9PT1QKSYmKHBlKHQsMCl8fCFmdW5jdGlvbihlLHQscixuKXt2YXIgYT1yLl9tYWluQXhpcztpZighYSlyZXR1cm47dmFyIGk9ZS5fZnVsbExheW91dCxvPXQuX2lkLmNoYXJBdCgwKSxsPU4uY291bnRlckxldHRlcih0Ll9pZCkscz10Ll9vZmZzZXQrKE1hdGguYWJzKG5bMF0pPE1hdGguYWJzKG5bMV0pPT0oIngiPT09byk/MDp0Ll9sZW5ndGgpO2Z1bmN0aW9uIGMoZSl7aWYoIWUuc2hvd2xpbmV8fCFlLmxpbmV3aWR0aClyZXR1cm4hMTt2YXIgcj1NYXRoLm1heCgoZS5saW5ld2lkdGgrdC56ZXJvbGluZXdpZHRoKS8yLDEpO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlJiZNYXRoLmFicyhlLXMpPHJ9aWYobihlLl9tYWluTGluZVBvc2l0aW9uKXx8bihlLl9tYWluTWlycm9yUG9zaXRpb24pKXJldHVybiEwO3ZhciBhPWUuX2xpbmVwb3NpdGlvbnN8fHt9O2Zvcih2YXIgaSBpbiBhKWlmKG4oYVtpXVswXSl8fG4oYVtpXVsxXSkpcmV0dXJuITB9dmFyIHU9aS5fcGxvdHNbci5fbWFpblN1YnBsb3RdO2lmKCEodS5tYWlucGxvdGluZm98fHUpLm92ZXJsYXlzLmxlbmd0aClyZXR1cm4gYyhyKTtmb3IodmFyIGY9Ti5saXN0KGUsbCksZD0wO2Q8Zi5sZW5ndGg7ZCsrKXt2YXIgcD1mW2RdO2lmKHAuX21haW5BeGlzPT09YSYmYyhwKSlyZXR1cm4hMH19KGUsdCxyLG4pfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLl9mdWxsRGF0YSxuPXQuX21haW5TdWJwbG90LGE9dC5faWQuY2hhckF0KDApLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGw9cltpXTtpZighMD09PWwudmlzaWJsZSYmbC54YXhpcytsLnlheGlzPT09bil7aWYoby50cmFjZUlzKGwsImJhci1saWtlIikmJmwub3JpZW50YXRpb249PT17eDoiaCIseToidiJ9W2FdKXJldHVybiEwO2lmKGwuZmlsbCYmbC5maWxsLmNoYXJBdChsLmZpbGwubGVuZ3RoLTEpPT09YSlyZXR1cm4hMH19cmV0dXJuITF9KGUsdCkpfSxOLmNsaXBFbmRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gcGUoZSx0LngpfSkpfSxOLmFsbG93QXV0b01hcmdpbj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9Ti5saXN0KGUsIiIsITApLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmF1dG9tYXJnaW4mJihpLmFsbG93QXV0b01hcmdpbihlLGdlKG4pKSxuLm1pcnJvciYmaS5hbGxvd0F1dG9NYXJnaW4oZSx2ZShuKSkpLG8uZ2V0Q29tcG9uZW50TWV0aG9kKCJyYW5nZXNsaWRlciIsImlzVmlzaWJsZSIpKG4pJiZpLmFsbG93QXV0b01hcmdpbihlLG1lKG4pKX19LE4uc3dhcD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1mdW5jdGlvbihlLHQpe3ZhciByLG4sYT1bXTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgaT1bXSxvPWUuX2Z1bGxEYXRhW3Rbcl1dLnhheGlzLGw9ZS5fZnVsbERhdGFbdFtyXV0ueWF4aXM7aWYobyYmbCl7Zm9yKG49MDtuPGEubGVuZ3RoO24rKyktMT09PWFbbl0ueC5pbmRleE9mKG8pJiYtMT09PWFbbl0ueS5pbmRleE9mKGwpfHxpLnB1c2gobik7aWYoaS5sZW5ndGgpe3ZhciBzLGM9YVtpWzBdXTtpZihpLmxlbmd0aD4xKWZvcihuPTE7bjxpLmxlbmd0aDtuKyspcz1hW2lbbl1dLHllKGMueCxzLngpLHllKGMueSxzLnkpO3llKGMueCxbb10pLHllKGMueSxbbF0pfWVsc2UgYS5wdXNoKHt4OltvXSx5OltsXX0pfX1yZXR1cm4gYX0oZSx0KSxuPTA7bjxyLmxlbmd0aDtuKyspeGUoZSxyW25dLngscltuXS55KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NzUsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6OTcsIi4uLy4uL2NvbXBvbmVudHMvdGl0bGVzIjoxNzAsIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjE3NywiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6MTgxLCIuLi8uLi9saWIiOjIwMiwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjoyMjQsIi4uLy4uL3Bsb3RzL3Bsb3RzIjoyODIsIi4uLy4uL3JlZ2lzdHJ5IjoyOTAsIi4vYXV0b3JhbmdlIjoyNDcsIi4vYXhpc19hdXRvdHlwZSI6MjQ5LCIuL2F4aXNfaWRzIjoyNTEsIi4vY2xlYW5fdGlja3MiOjI1MywiLi9sYXlvdXRfYXR0cmlidXRlcyI6MjYyLCIuL3NldF9jb252ZXJ0IjoyNjgsZDM6OSwiZmFzdC1pc251bWVyaWMiOjExfV0sMjQ5OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoImZhc3QtaXNudW1lcmljIiksYT1lKCIuLi8uLi9saWIiKSxpPWUoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sbz1hLmlzQXJyYXlPclR5cGVkQXJyYXksbD1hLmlzRGF0ZVRpbWUscz1hLmNsZWFuTnVtYmVyLGM9TWF0aC5yb3VuZDtmdW5jdGlvbiB1KGUsdCl7cmV0dXJuIHQ/bihlKToibnVtYmVyIj09dHlwZW9mIGV9ZnVuY3Rpb24gZihlKXtyZXR1cm4gTWF0aC5tYXgoMSwoZS0xKS8xZTMpfXQuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7dmFyIGE9ZSxkPXIubm9NdWx0aUNhdGVnb3J5O2lmKG8oYSkmJiFhLmxlbmd0aClyZXR1cm4iLSI7aWYoIWQmJmZ1bmN0aW9uKGUpe3JldHVybiBvKGVbMF0pJiZvKGVbMV0pfShhKSlyZXR1cm4ibXVsdGljYXRlZ29yeSI7aWYoZCYmQXJyYXkuaXNBcnJheShhWzBdKSl7Zm9yKHZhciBwPVtdLGg9MDtoPGEubGVuZ3RoO2grKylpZihvKGFbaF0pKWZvcih2YXIgZz0wO2c8YVtoXS5sZW5ndGg7ZysrKXAucHVzaChhW2hdW2ddKTthPXB9aWYoZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5sZW5ndGgsYT1mKHIpLGk9MCxvPTAscz17fSx1PTA7dTxyO3UrPWEpe3ZhciBkPWModSkscD1lW2RdLGg9U3RyaW5nKHApO3NbaF18fChzW2hdPTEsbChwLHQpJiZpKyssbihwKSYmbysrKX1yZXR1cm4gaT4yKm99KGEsdCkpcmV0dXJuImRhdGUiO3ZhciB2PSJzdHJpY3QiIT09ci5hdXRvdHlwZW51bWJlcnM7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUubGVuZ3RoLG49ZihyKSxhPTAsbz0wLGw9e30sdT0wO3U8cjt1Kz1uKXt2YXIgZD1jKHUpLHA9ZVtkXSxoPVN0cmluZyhwKTtpZighbFtoXSl7bFtoXT0xO3ZhciBnPXR5cGVvZiBwOyJib29sZWFuIj09PWc/bysrOih0P3MocCkhPT1pOiJudW1iZXIiPT09Zyk/YSsrOiJzdHJpbmciPT09ZyYmbysrfX1yZXR1cm4gbz4yKmF9KGEsdik/ImNhdGVnb3J5IjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmxlbmd0aCxuPTA7bjxyO24rKylpZih1KGVbbl0sdCkpcmV0dXJuITA7cmV0dXJuITF9KGEsdik/ImxpbmVhciI6Ii0ifX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjoxODEsIi4uLy4uL2xpYiI6MjAyLCJmYXN0LWlzbnVtZXJpYyI6MTF9XSwyNTA6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiZmFzdC1pc251bWVyaWMiKSxhPWUoIi4uLy4uL3JlZ2lzdHJ5IiksaT1lKCIuLi8uLi9saWIiKSxvPWUoIi4uL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpLGw9ZSgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHM9ZSgiLi90aWNrX3ZhbHVlX2RlZmF1bHRzIiksYz1lKCIuL3RpY2tfbWFya19kZWZhdWx0cyIpLHU9ZSgiLi90aWNrX2xhYmVsX2RlZmF1bHRzIiksZj1lKCIuL2NhdGVnb3J5X29yZGVyX2RlZmF1bHRzIiksZD1lKCIuL2xpbmVfZ3JpZF9kZWZhdWx0cyIpLHA9ZSgiLi9zZXRfY29udmVydCIpLGg9ZSgiLi9jb25zdGFudHMiKS5XRUVLREFZX1BBVFRFUk4sZz1lKCIuL2NvbnN0YW50cyIpLkhPVVJfUEFUVEVSTjtmdW5jdGlvbiB2KGUsdCxyKXtmdW5jdGlvbiBhKHIsbil7cmV0dXJuIGkuY29lcmNlKGUsdCxsLnJhbmdlYnJlYWtzLHIsbil9aWYoYSgiZW5hYmxlZCIpKXt2YXIgbz1hKCJib3VuZHMiKTtpZihvJiZvLmxlbmd0aD49Mil7dmFyIHMsYyx1PSIiO2lmKDI9PT1vLmxlbmd0aClmb3Iocz0wO3M8MjtzKyspaWYoYz15KG9bc10pKXt1PWg7YnJlYWt9dmFyIGY9YSgicGF0dGVybiIsdSk7aWYoZj09PWgpZm9yKHM9MDtzPDI7cysrKShjPXkob1tzXSkpJiYodC5ib3VuZHNbc109b1tzXT1jLTEpO2lmKGYpZm9yKHM9MDtzPDI7cysrKXN3aXRjaChjPW9bc10sZil7Y2FzZSBoOmlmKCFuKGMpKXJldHVybiB2b2lkKHQuZW5hYmxlZD0hMSk7aWYoKGM9K2MpIT09TWF0aC5mbG9vcihjKXx8YzwwfHxjPj03KXJldHVybiB2b2lkKHQuZW5hYmxlZD0hMSk7dC5ib3VuZHNbc109b1tzXT1jO2JyZWFrO2Nhc2UgZzppZighbihjKSlyZXR1cm4gdm9pZCh0LmVuYWJsZWQ9ITEpO2lmKChjPStjKTwwfHxjPjI0KXJldHVybiB2b2lkKHQuZW5hYmxlZD0hMSk7dC5ib3VuZHNbc109b1tzXT1jfWlmKCExPT09ci5hdXRvcmFuZ2Upe3ZhciBkPXIucmFuZ2U7aWYoZFswXTxkWzFdKXtpZihvWzBdPGRbMF0mJm9bMV0+ZFsxXSlyZXR1cm4gdm9pZCh0LmVuYWJsZWQ9ITEpfWVsc2UgaWYob1swXT5kWzBdJiZvWzFdPGRbMV0pcmV0dXJuIHZvaWQodC5lbmFibGVkPSExKX19ZWxzZXt2YXIgcD1hKCJ2YWx1ZXMiKTtpZighcHx8IXAubGVuZ3RoKXJldHVybiB2b2lkKHQuZW5hYmxlZD0hMSk7YSgiZHZhbHVlIil9fX10LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsbixnKXt2YXIgbSx5PW4ubGV0dGVyLHg9bi5mb250fHx7fSxiPW4uc3Bsb21TdGFzaHx8e30sXz1yKCJ2aXNpYmxlIiwhbi52aXNpYmxlRGZsdCksdz10Ll90ZW1wbGF0ZXx8e30sVD10LnR5cGV8fHcudHlwZXx8Ii0iOyJkYXRlIj09PVQmJihhLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlRGVmYXVsdHMiKShlLHQsImNhbGVuZGFyIixuLmNhbGVuZGFyKSxuLm5vVGlja2xhYmVsbW9kZXx8KG09cigidGlja2xhYmVsbW9kZSIpKSk7bi5ub1RpY2tsYWJlbHBvc2l0aW9uJiYibXVsdGljYXRlZ29yeSIhPT1UfHxpLmNvZXJjZShlLHQse3RpY2tsYWJlbHBvc2l0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixkZmx0OiJvdXRzaWRlIix2YWx1ZXM6InBlcmlvZCI9PT1tP1sib3V0c2lkZSIsImluc2lkZSJdOiJ4Ij09PXk/WyJvdXRzaWRlIiwiaW5zaWRlIiwib3V0c2lkZSBsZWZ0IiwiaW5zaWRlIGxlZnQiLCJvdXRzaWRlIHJpZ2h0IiwiaW5zaWRlIHJpZ2h0Il06WyJvdXRzaWRlIiwiaW5zaWRlIiwib3V0c2lkZSB0b3AiLCJpbnNpZGUgdG9wIiwib3V0c2lkZSBib3R0b20iLCJpbnNpZGUgYm90dG9tIl19fSwidGlja2xhYmVscG9zaXRpb24iKSxwKHQsZyk7dmFyIGs9IXQuaXNWYWxpZFJhbmdlKGUucmFuZ2UpO2smJm4ucmV2ZXJzZURmbHQmJihrPSJyZXZlcnNlZCIpLCFyKCJhdXRvcmFuZ2UiLGspfHwibGluZWFyIiE9PVQmJiItIiE9PVR8fHIoInJhbmdlbW9kZSIpLHIoInJhbmdlIiksdC5jbGVhblJhbmdlKCksZihlLHQscixuKSwiY2F0ZWdvcnkiPT09VHx8bi5ub0hvdmVyfHxyKCJob3ZlcmZvcm1hdCIpO3ZhciBNPXIoImNvbG9yIiksQT1NIT09bC5jb2xvci5kZmx0P006eC5jb2xvcixMPWIubGFiZWx8fGcuX2RmbHRUaXRsZVt5XTtpZih1KGUsdCxyLFQsbix7cGFzczoxfSksIV8pcmV0dXJuIHQ7cigidGl0bGUudGV4dCIsTCksaS5jb2VyY2VGb250KHIsInRpdGxlLmZvbnQiLHtmYW1pbHk6eC5mYW1pbHksc2l6ZTpNYXRoLnJvdW5kKDEuMip4LnNpemUpLGNvbG9yOkF9KSxzKGUsdCxyLFQpLHUoZSx0LHIsVCxuLHtwYXNzOjJ9KSxjKGUsdCxyLG4pLGQoZSx0LHIse2RmbHRDb2xvcjpNLGJnQ29sb3I6bi5iZ0NvbG9yLHNob3dHcmlkOm4uc2hvd0dyaWQsYXR0cmlidXRlczpsfSksKHQuc2hvd2xpbmV8fHQudGlja3MpJiZyKCJtaXJyb3IiKSxuLmF1dG9tYXJnaW4mJnIoImF1dG9tYXJnaW4iKTt2YXIgUyxDPSJtdWx0aWNhdGVnb3J5Ij09PVQ7bi5ub1RpY2tzb258fCJjYXRlZ29yeSIhPT1UJiYhQ3x8IXQudGlja3MmJiF0LnNob3dncmlkfHwoQyYmKFM9ImJvdW5kYXJpZXMiKSwiYm91bmRhcmllcyI9PT1yKCJ0aWNrc29uIixTKSYmZGVsZXRlIHQudGlja2xhYmVscG9zaXRpb24pO0MmJihyKCJzaG93ZGl2aWRlcnMiKSYmKHIoImRpdmlkZXJjb2xvciIpLHIoImRpdmlkZXJ3aWR0aCIpKSk7aWYoImRhdGUiPT09VClpZihvKGUsdCx7bmFtZToicmFuZ2VicmVha3MiLGluY2x1c2lvbkF0dHI6ImVuYWJsZWQiLGhhbmRsZUl0ZW1EZWZhdWx0czp2fSksdC5yYW5nZWJyZWFrcy5sZW5ndGgpe2Zvcih2YXIgTz0wO088dC5yYW5nZWJyZWFrcy5sZW5ndGg7TysrKWlmKHQucmFuZ2VicmVha3NbT10ucGF0dGVybj09PWgpe3QuX2hhc0RheU9mV2Vla0JyZWFrcz0hMDticmVha31pZihwKHQsZyksZy5faGFzKCJzY2F0dGVyZ2wiKXx8Zy5faGFzKCJzcGxvbSIpKWZvcih2YXIgRD0wO0Q8bi5kYXRhLmxlbmd0aDtEKyspe3ZhciBQPW4uZGF0YVtEXTsic2NhdHRlcmdsIiE9PVAudHlwZSYmInNwbG9tIiE9PVAudHlwZXx8KFAudmlzaWJsZT0hMSxpLndhcm4oUC50eXBlKyIgdHJhY2VzIGRvIG5vdCB3b3JrIG9uIGF4ZXMgd2l0aCByYW5nZWJyZWFrcy4gU2V0dGluZyB0cmFjZSAiK1AuaW5kZXgrIiB0byBgdmlzaWJsZTogZmFsc2VgLiIpKX19ZWxzZSBkZWxldGUgdC5yYW5nZWJyZWFrcztyZXR1cm4gdH07dmFyIG09e3N1bjoxLG1vbjoyLHR1ZTozLHdlZDo0LHRodTo1LGZyaTo2LHNhdDo3fTtmdW5jdGlvbiB5KGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gbVtlLnN1YnN0cigwLDMpLnRvTG93ZXJDYXNlKCldfX0seyIuLi8uLi9saWIiOjIwMiwiLi4vLi4vcmVnaXN0cnkiOjI5MCwiLi4vYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjoyNDMsIi4vY2F0ZWdvcnlfb3JkZXJfZGVmYXVsdHMiOjI1MiwiLi9jb25zdGFudHMiOjI1NCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6MjYyLCIuL2xpbmVfZ3JpZF9kZWZhdWx0cyI6MjY0LCIuL3NldF9jb252ZXJ0IjoyNjgsIi4vdGlja19sYWJlbF9kZWZhdWx0cyI6MjY5LCIuL3RpY2tfbWFya19kZWZhdWx0cyI6MjcwLCIuL3RpY2tfdmFsdWVfZGVmYXVsdHMiOjI3MSwiZmFzdC1pc251bWVyaWMiOjExfV0sMjUxOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL3JlZ2lzdHJ5IiksYT1lKCIuL2NvbnN0YW50cyIpO2Z1bmN0aW9uIGkoZSx0KXtpZih0JiZ0Lmxlbmd0aClmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKylpZih0W3JdW2VdKXJldHVybiEwO3JldHVybiExfXIuaWQybmFtZT1mdW5jdGlvbihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUmJmUubWF0Y2goYS5BWF9JRF9QQVRURVJOKSl7dmFyIHQ9ZS5zcGxpdCgiICIpWzBdLnN1YnN0cigxKTtyZXR1cm4iMSI9PT10JiYodD0iIiksZS5jaGFyQXQoMCkrImF4aXMiK3R9fSxyLm5hbWUyaWQ9ZnVuY3Rpb24oZSl7aWYoZS5tYXRjaChhLkFYX05BTUVfUEFUVEVSTikpe3ZhciB0PWUuc3Vic3RyKDUpO3JldHVybiIxIj09PXQmJih0PSIiKSxlLmNoYXJBdCgwKSt0fX0sci5jbGVhbklkPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj0vKCBkb21haW4pJC8udGVzdChlKTtpZigic3RyaW5nIj09dHlwZW9mIGUmJmUubWF0Y2goYS5BWF9JRF9QQVRURVJOKSYmKCF0fHxlLmNoYXJBdCgwKT09PXQpJiYoIW58fHIpKXt2YXIgaT1lLnNwbGl0KCIgIilbMF0uc3Vic3RyKDEpLnJlcGxhY2UoL14wKy8sIiIpO3JldHVybiIxIj09PWkmJihpPSIiKSxlLmNoYXJBdCgwKStpKyhuJiZyPyIgZG9tYWluIjoiIil9fSxyLmxpc3Q9ZnVuY3Rpb24oZSx0LG4pe3ZhciBhPWUuX2Z1bGxMYXlvdXQ7aWYoIWEpcmV0dXJuW107dmFyIGksbz1yLmxpc3RJZHMoZSx0KSxsPW5ldyBBcnJheShvLmxlbmd0aCk7Zm9yKGk9MDtpPG8ubGVuZ3RoO2krKyl7dmFyIHM9b1tpXTtsW2ldPWFbcy5jaGFyQXQoMCkrImF4aXMiK3Muc3Vic3RyKDEpXX1pZighbil7dmFyIGM9YS5fc3VicGxvdHMuZ2wzZHx8W107Zm9yKGk9MDtpPGMubGVuZ3RoO2krKyl7dmFyIHU9YVtjW2ldXTt0P2wucHVzaCh1W3QrImF4aXMiXSk6bC5wdXNoKHUueGF4aXMsdS55YXhpcyx1LnpheGlzKX19cmV0dXJuIGx9LHIubGlzdElkcz1mdW5jdGlvbihlLHQpe3ZhciByPWUuX2Z1bGxMYXlvdXQ7aWYoIXIpcmV0dXJuW107dmFyIG49ci5fc3VicGxvdHM7cmV0dXJuIHQ/blt0KyJheGlzIl06bi54YXhpcy5jb25jYXQobi55YXhpcyl9LHIuZ2V0RnJvbUlkPWZ1bmN0aW9uKGUsdCxuKXt2YXIgYT1lLl9mdWxsTGF5b3V0O3JldHVybiB0PXZvaWQgMD09PXR8fCJzdHJpbmciIT10eXBlb2YgdD90OnQucmVwbGFjZSgiIGRvbWFpbiIsIiIpLCJ4Ij09PW4/dD10LnJlcGxhY2UoL3lbMC05XSovLCIiKToieSI9PT1uJiYodD10LnJlcGxhY2UoL3hbMC05XSovLCIiKSksYVtyLmlkMm5hbWUodCldfSxyLmdldEZyb21UcmFjZT1mdW5jdGlvbihlLHQsYSl7dmFyIGk9ZS5fZnVsbExheW91dCxvPW51bGw7aWYobi50cmFjZUlzKHQsImdsM2QiKSl7dmFyIGw9dC5zY2VuZTsic2NlbmUiPT09bC5zdWJzdHIoMCw1KSYmKG89aVtsXVthKyJheGlzIl0pfWVsc2Ugbz1yLmdldEZyb21JZChlLHRbYSsiYXhpcyJdfHxhKTtyZXR1cm4gb30sci5pZFNvcnQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmNoYXJBdCgwKSxuPXQuY2hhckF0KDApO3JldHVybiByIT09bj9yPm4/MTotMTorKGUuc3Vic3RyKDEpfHwxKS0rKHQuc3Vic3RyKDEpfHwxKX0sci5yZWYyaWQ9ZnVuY3Rpb24oZSl7cmV0dXJuISEvXlt4eXpdLy50ZXN0KGUpJiZlLnNwbGl0KCIgIilbMF19LHIuaXNMaW5rZWQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaSh0LGUuX2F4aXNNYXRjaEdyb3Vwcyl8fGkodCxlLl9heGlzQ29uc3RyYWludEdyb3Vwcyl9fSx7Ii4uLy4uL3JlZ2lzdHJ5IjoyOTAsIi4vY29uc3RhbnRzIjoyNTR9XSwyNTI6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKCJjYXRlZ29yeSI9PT10LnR5cGUpe3ZhciBhLGk9ZS5jYXRlZ29yeWFycmF5LG89QXJyYXkuaXNBcnJheShpKSYmaS5sZW5ndGg+MDtvJiYoYT0iYXJyYXkiKTt2YXIgbCxzPXIoImNhdGVnb3J5b3JkZXIiLGEpOyJhcnJheSI9PT1zJiYobD1yKCJjYXRlZ29yeWFycmF5IikpLG98fCJhcnJheSIhPT1zfHwocz10LmNhdGVnb3J5b3JkZXI9InRyYWNlIiksInRyYWNlIj09PXM/dC5faW5pdGlhbENhdGVnb3JpZXM9W106ImFycmF5Ij09PXM/dC5faW5pdGlhbENhdGVnb3JpZXM9bC5zbGljZSgpOihsPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbixhLGk9dC5kYXRhQXR0cnx8ZS5faWQuY2hhckF0KDApLG89e307aWYodC5heERhdGEpcj10LmF4RGF0YTtlbHNlIGZvcihyPVtdLG49MDtuPHQuZGF0YS5sZW5ndGg7bisrKXt2YXIgbD10LmRhdGFbbl07bFtpKyJheGlzIl09PT1lLl9pZCYmci5wdXNoKGwpfWZvcihuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBzPXJbbl1baV07Zm9yKGE9MDthPHMubGVuZ3RoO2ErKyl7dmFyIGM9c1thXTtudWxsIT1jJiYob1tjXT0xKX19cmV0dXJuIE9iamVjdC5rZXlzKG8pfSh0LG4pLnNvcnQoKSwiY2F0ZWdvcnkgYXNjZW5kaW5nIj09PXM/dC5faW5pdGlhbENhdGVnb3JpZXM9bDoiY2F0ZWdvcnkgZGVzY2VuZGluZyI9PT1zJiYodC5faW5pdGlhbENhdGVnb3JpZXM9bC5yZXZlcnNlKCkpKX19fSx7fV0sMjUzOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoImZhc3QtaXNudW1lcmljIiksYT1lKCIuLi8uLi9saWIiKSxpPWUoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKSxvPWkuT05FREFZLGw9aS5PTkVXRUVLO3IuZHRpY2s9ZnVuY3Rpb24oZSx0KXt2YXIgcj0ibG9nIj09PXQsYT0iZGF0ZSI9PT10LGk9ImNhdGVnb3J5Ij09PXQsbD1hP286MTtpZighZSlyZXR1cm4gbDtpZihuKGUpKXJldHVybihlPU51bWJlcihlKSk8PTA/bDppP01hdGgubWF4KDEsTWF0aC5yb3VuZChlKSk6YT9NYXRoLm1heCguMSxlKTplO2lmKCJzdHJpbmciIT10eXBlb2YgZXx8IWEmJiFyKXJldHVybiBsO3ZhciBzPWUuY2hhckF0KDApLGM9ZS5zdWJzdHIoMSk7cmV0dXJuKGM9bihjKT9OdW1iZXIoYyk6MCk8PTB8fCEoYSYmIk0iPT09cyYmYz09PU1hdGgucm91bmQoYyl8fHImJiJMIj09PXN8fHImJiJEIj09PXMmJigxPT09Y3x8Mj09PWMpKT9sOmV9LHIudGljazA9ZnVuY3Rpb24oZSx0LHIsaSl7cmV0dXJuImRhdGUiPT09dD9hLmNsZWFuRGF0ZShlLGEuZGF0ZVRpY2swKHIsaSVsPT0wPzE6MCkpOiJEMSIhPT1pJiYiRDIiIT09aT9uKGUpP051bWJlcihlKTowOnZvaWQgMH19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6MTgxLCIuLi8uLi9saWIiOjIwMiwiZmFzdC1pc251bWVyaWMiOjExfV0sMjU0OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2xpYi9yZWdleCIpLmNvdW50ZXI7dC5leHBvcnRzPXtpZFJlZ2V4Ont4Om4oIngiLCIoIGRvbWFpbik/IikseTpuKCJ5IiwiKCBkb21haW4pPyIpfSxhdHRyUmVnZXg6bigiW3h5XWF4aXMiKSx4QXhpc01hdGNoOm4oInhheGlzIikseUF4aXNNYXRjaDpuKCJ5YXhpcyIpLEFYX0lEX1BBVFRFUk46L15beHl6XVswLTldKiggZG9tYWluKT8kLyxBWF9OQU1FX1BBVFRFUk46L15beHl6XWF4aXNbMC05XSokLyxTVUJQTE9UX1BBVFRFUk46L154KFswLTldKil5KFswLTldKikkLyxIT1VSX1BBVFRFUk46ImhvdXIiLFdFRUtEQVlfUEFUVEVSTjoiZGF5IG9mIHdlZWsiLE1JTkRSQUc6OCxNSU5TRUxFQ1Q6MTIsTUlOWk9PTToyMCxEUkFHR0VSU0laRToyMCxCRU5EUFg6MS41LFJFRFJBV0RFTEFZOjUwLFNFTEVDVERFTEFZOjEwMCxTRUxFQ1RJRDoiLXNlbGVjdCIsREZMVFJBTkdFWDpbLTEsNl0sREZMVFJBTkdFWTpbLTEsNF0sdHJhY2VMYXllckNsYXNzZXM6WyJpbWFnZWxheWVyIiwiaGVhdG1hcGxheWVyIiwiY29udG91cmNhcnBldGxheWVyIiwiY29udG91cmxheWVyIiwiZnVubmVsbGF5ZXIiLCJ3YXRlcmZhbGxsYXllciIsImJhcmxheWVyIiwiY2FycGV0bGF5ZXIiLCJ2aW9saW5sYXllciIsImJveGxheWVyIiwib2hsY2xheWVyIiwic2NhdHRlcmNhcnBldGxheWVyIiwic2NhdHRlcmxheWVyIl0sY2xpcE9uQXhpc0ZhbHNlUXVlcnk6WyIuc2NhdHRlcmxheWVyIiwiLmJhcmxheWVyIiwiLmZ1bm5lbGxheWVyIiwiLndhdGVyZmFsbGxheWVyIl0sbGF5ZXJWYWx1ZTJsYXllckNsYXNzOnsiYWJvdmUgdHJhY2VzIjoiYWJvdmUiLCJiZWxvdyB0cmFjZXMiOiJiZWxvdyJ9fX0seyIuLi8uLi9saWIvcmVnZXgiOjIxOH1dLDI1NTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9saWIiKSxhPWUoIi4vYXV0b3JhbmdlIiksaT1lKCIuL2F4aXNfaWRzIikuaWQybmFtZSxvPWUoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxsPWUoIi4vc2NhbGVfem9vbSIpLHM9ZSgiLi9zZXRfY29udmVydCIpLGM9ZSgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkFMTU9TVF9FUVVBTCx1PWUoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5GUk9NX0JMO2Z1bmN0aW9uIGYoZSx0LHIpe3ZhciBhPXIuYXhJZHMsbD1yLmxheW91dE91dCxzPXIuaGFzSW1hZ2UsYz1sLl9heGlzQ29uc3RyYWludEdyb3Vwcyx1PWwuX2F4aXNNYXRjaEdyb3VwcyxmPXQuX2lkLGc9Zi5jaGFyQXQoMCksdj0oKGwuX3NwbG9tQXhlc3x8e30pW2ddfHx7fSlbZl18fHt9LG09dC5faWQseT0ieCI9PT1tLmNoYXJBdCgwKTtmdW5jdGlvbiB4KHIsYSl7cmV0dXJuIG4uY29lcmNlKGUsdCxvLHIsYSl9dC5fbWF0Y2hHcm91cD1udWxsLHQuX2NvbnN0cmFpbnRHcm91cD1udWxsLHgoImNvbnN0cmFpbiIscz8iZG9tYWluIjoicmFuZ2UiKSxuLmNvZXJjZShlLHQse2NvbnN0cmFpbnRvd2FyZDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOnk/WyJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXTpbImJvdHRvbSIsIm1pZGRsZSIsInRvcCJdLGRmbHQ6eT8iY2VudGVyIjoibWlkZGxlIn19LCJjb25zdHJhaW50b3dhcmQiKTt2YXIgYixfLHc9dC50eXBlLFQ9W107Zm9yKGI9MDtiPGEubGVuZ3RoO2IrKyl7aWYoKF89YVtiXSkhPT1tKWxbaShfKV0udHlwZT09PXcmJlQucHVzaChfKX12YXIgaz1wKGMsbSk7aWYoayl7dmFyIE09W107Zm9yKGI9MDtiPFQubGVuZ3RoO2IrKylrW189VFtiXV18fE0ucHVzaChfKTtUPU19dmFyIEEsTCxTPVQubGVuZ3RoO1MmJihlLm1hdGNoZXN8fHYubWF0Y2hlcykmJihBPW4uY29lcmNlKGUsdCx7bWF0Y2hlczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlQsZGZsdDotMSE9PVQuaW5kZXhPZih2Lm1hdGNoZXMpP3YubWF0Y2hlczp2b2lkIDB9fSwibWF0Y2hlcyIpKTt2YXIgQz1zJiYheT90LmFuY2hvcjp2b2lkIDA7aWYoUyYmIUEmJihlLnNjYWxlYW5jaG9yfHxDKSYmKEw9bi5jb2VyY2UoZSx0LHtzY2FsZWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlR9fSwic2NhbGVhbmNob3IiLEMpKSxBKXt0Ll9tYXRjaEdyb3VwPWgodSxtLEEsMSk7dmFyIE89bFtpKEEpXSxEPWQobCx0KS9kKGwsTyk7eSE9PSgieCI9PT1BLmNoYXJBdCgwKSkmJihEPSh5PyJ4IjoieSIpK0QpLGgoYyxtLEEsRCl9ZWxzZSBlLm1hdGNoZXMmJi0xIT09YS5pbmRleE9mKGUubWF0Y2hlcykmJm4ud2FybigiaWdub3JlZCAiK3QuX25hbWUrJy5tYXRjaGVzOiAiJytlLm1hdGNoZXMrJyIgdG8gYXZvaWQgYW4gaW5maW5pdGUgbG9vcCcpO2lmKEwpe3ZhciBQPXgoInNjYWxlcmF0aW8iKTtQfHwoUD10LnNjYWxlcmF0aW89MSksaChjLG0sTCxQKX1lbHNlIGUuc2NhbGVhbmNob3ImJi0xIT09YS5pbmRleE9mKGUuc2NhbGVhbmNob3IpJiZuLndhcm4oImlnbm9yZWQgIit0Ll9uYW1lKycuc2NhbGVhbmNob3I6ICInK2Uuc2NhbGVhbmNob3IrJyIgdG8gYXZvaWQgZWl0aGVyIGFuIGluZmluaXRlIGxvb3AgYW5kIHBvc3NpYmx5IGluY29uc2lzdGVudCBzY2FsZXJhdGlvcywgb3IgYmVjYXVzZSB0aGlzIGF4aXMgZGVjbGFyZXMgYSAqbWF0Y2hlcyogY29uc3RyYWludC4nKX1mdW5jdGlvbiBkKGUsdCl7dmFyIHI9dC5kb21haW47cmV0dXJuIHJ8fChyPWVbaSh0Lm92ZXJsYXlpbmcpXS5kb21haW4pLHJbMV0tclswXX1mdW5jdGlvbiBwKGUsdCl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspaWYoZVtyXVt0XSlyZXR1cm4gZVtyXTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBoKGUsdCxyLG4pe3ZhciBhLGksbyxsLHMsYz1wKGUsdCk7bnVsbD09PWM/KChjPXt9KVt0XT0xLHM9ZS5sZW5ndGgsZS5wdXNoKGMpKTpzPWUuaW5kZXhPZihjKTt2YXIgdT1PYmplY3Qua2V5cyhjKTtmb3IoYT0wO2E8ZS5sZW5ndGg7YSsrKWlmKG89ZVthXSxhIT09cyYmb1tyXSl7dmFyIGY9b1tyXTtmb3IoaT0wO2k8dS5sZW5ndGg7aSsrKW9bbD11W2ldXT1nKGYsZyhuLGNbbF0pKTtyZXR1cm4gdm9pZCBlLnNwbGljZShzLDEpfWlmKDEhPT1uKWZvcihpPTA7aTx1Lmxlbmd0aDtpKyspe3ZhciBkPXVbaV07Y1tkXT1nKG4sY1tkXSl9Y1tyXT0xfWZ1bmN0aW9uIGcoZSx0KXt2YXIgcixuLGE9IiIsaT0iIjsic3RyaW5nIj09dHlwZW9mIGUmJihyPShhPWUubWF0Y2goL15beHldKi8pWzBdKS5sZW5ndGgsZT0rZS5zdWJzdHIocikpLCJzdHJpbmciPT10eXBlb2YgdCYmKG49KGk9dC5tYXRjaCgvXlt4eV0qLylbMF0pLmxlbmd0aCx0PSt0LnN1YnN0cihuKSk7dmFyIG89ZSp0O3JldHVybiByfHxuP3ImJm4mJmEuY2hhckF0KDApIT09aS5jaGFyQXQoMCk/cj09PW4/bzoocj5uP2Euc3Vic3RyKG4pOmkuc3Vic3RyKHIpKStvOmEraStlKnQ6b31mdW5jdGlvbiB2KGUsdCl7Zm9yKHZhciByPXQuX3NpemUsbj1yLmgvci53LGE9e30saT1PYmplY3Qua2V5cyhlKSxvPTA7bzxpLmxlbmd0aDtvKyspe3ZhciBsPWlbb10scz1lW2xdO2lmKCJzdHJpbmciPT10eXBlb2Ygcyl7dmFyIGM9cy5tYXRjaCgvXlt4eV0qLylbMF0sdT1jLmxlbmd0aDtzPStzLnN1YnN0cih1KTtmb3IodmFyIGY9InkiPT09Yy5jaGFyQXQoMCk/bjoxL24sZD0wO2Q8dTtkKyspcyo9Zn1hW2xdPXN9cmV0dXJuIGF9ZnVuY3Rpb24gbShlLHQpe3ZhciByPWUuX2lucHV0RG9tYWluLG49dVtlLmNvbnN0cmFpbnRvd2FyZF0sYT1yWzBdKyhyWzFdLXJbMF0pKm47ZS5kb21haW49ZS5faW5wdXQuZG9tYWluPVthKyhyWzBdLWEpL3QsYSsoclsxXS1hKS90XSxlLnNldFNjYWxlKCl9ci5oYW5kbGVEZWZhdWx0cz1mdW5jdGlvbihlLHQscil7dmFyIGEsbyxsLGMsdSxkLHAsaCxnPXIuYXhJZHMsdj1yLmF4SGFzSW1hZ2UsbT10Ll9heGlzQ29uc3RyYWludEdyb3Vwcz1bXSx5PXQuX2F4aXNNYXRjaEdyb3Vwcz1bXTtmb3IoYT0wO2E8Zy5sZW5ndGg7YSsrKWYodT1lW2M9aShnW2FdKV0sZD10W2NdLHtheElkczpnLGxheW91dE91dDp0LGhhc0ltYWdlOnZbY119KTtmdW5jdGlvbiB4KGUscil7Zm9yKGE9MDthPGUubGVuZ3RoO2ErKylmb3IobCBpbiBvPWVbYV0pdFtpKGwpXVtyXT1vfWZvcih4KHksIl9tYXRjaEdyb3VwIiksYT0wO2E8bS5sZW5ndGg7YSsrKWZvcihsIGluIG89bVthXSlpZigoZD10W2kobCldKS5maXhlZHJhbmdlKXtmb3IodmFyIGIgaW4gbyl7dmFyIF89aShiKTshMT09PShlW19dfHx7fSkuZml4ZWRyYW5nZSYmbi53YXJuKCJmaXhlZHJhbmdlIHdhcyBzcGVjaWZpZWQgYXMgZmFsc2UgZm9yIGF4aXMgIitfKyIgYnV0IHdhcyBvdmVycmlkZGVuIGJlY2F1c2UgYW5vdGhlciBheGlzIGluIGl0cyBjb25zdHJhaW50IGdyb3VwIGhhcyBmaXhlZHJhbmdlIHRydWUiKSx0W19dLmZpeGVkcmFuZ2U9ITB9YnJlYWt9Zm9yKGE9MDthPG0ubGVuZ3RoOyl7Zm9yKGwgaW4gbz1tW2FdKXsoZD10W2kobCldKS5fbWF0Y2hHcm91cCYmT2JqZWN0LmtleXMoZC5fbWF0Y2hHcm91cCkubGVuZ3RoPT09T2JqZWN0LmtleXMobykubGVuZ3RoJiYobS5zcGxpY2UoYSwxKSxhLS0pO2JyZWFrfWErK314KG0sIl9jb25zdHJhaW50R3JvdXAiKTt2YXIgdz1bImNvbnN0cmFpbiIsInJhbmdlIiwiYXV0b3JhbmdlIiwicmFuZ2Vtb2RlIiwicmFuZ2VicmVha3MiLCJjYXRlZ29yeW9yZGVyIiwiY2F0ZWdvcnlhcnJheSJdLFQ9ITEsaz0hMTtmdW5jdGlvbiBNKCl7aD1kW3BdLCJyYW5nZWJyZWFrcyI9PT1wJiYoaz1kLl9oYXNEYXlPZldlZWtCcmVha3MpfWZvcihhPTA7YTx5Lmxlbmd0aDthKyspe289eVthXTtmb3IodmFyIEE9MDtBPHcubGVuZ3RoO0ErKyl7dmFyIEw7Zm9yKGwgaW4gcD13W0FdLGg9bnVsbCxvKWlmKHU9ZVtjPWkobCldLGQ9dFtjXSxwIGluIGQpe2lmKCFkLm1hdGNoZXMmJihMPWQscCBpbiB1KSl7TSgpO2JyZWFrfW51bGw9PT1oJiZwIGluIHUmJk0oKX1pZigicmFuZ2UiPT09cCYmaCYmKFQ9ITApLCJhdXRvcmFuZ2UiPT09cCYmbnVsbD09PWgmJlQmJihoPSExKSxudWxsPT09aCYmcCBpbiBMJiYoaD1MW3BdKSxudWxsIT09aClmb3IobCBpbiBvKShkPXRbaShsKV0pW3BdPSJyYW5nZSI9PT1wP2guc2xpY2UoKTpoLCJyYW5nZWJyZWFrcyI9PT1wJiYoZC5faGFzRGF5T2ZXZWVrQnJlYWtzPWsscyhkLHQpKX19fSxyLmVuZm9yY2U9ZnVuY3Rpb24oZSl7dmFyIHQscixuLG8scyx1LGYsZCxwPWUuX2Z1bGxMYXlvdXQsaD1wLl9heGlzQ29uc3RyYWludEdyb3Vwc3x8W107Zm9yKHQ9MDt0PGgubGVuZ3RoO3QrKyl7bj12KGhbdF0scCk7dmFyIGc9T2JqZWN0LmtleXMobikseT0xLzAseD0wLGI9MS8wLF89e30sdz17fSxUPSExO2ZvcihyPTA7cjxnLmxlbmd0aDtyKyspd1tvPWdbcl1dPXM9cFtpKG8pXSxzLl9pbnB1dERvbWFpbj9zLmRvbWFpbj1zLl9pbnB1dERvbWFpbi5zbGljZSgpOnMuX2lucHV0RG9tYWluPXMuZG9tYWluLnNsaWNlKCkscy5faW5wdXRSYW5nZXx8KHMuX2lucHV0UmFuZ2U9cy5yYW5nZS5zbGljZSgpKSxzLnNldFNjYWxlKCksX1tvXT11PU1hdGguYWJzKHMuX20pL25bb10seT1NYXRoLm1pbih5LHUpLCJkb21haW4iIT09cy5jb25zdHJhaW4mJnMuX2NvbnN0cmFpbnRTaHJpbmthYmxlfHwoYj1NYXRoLm1pbihiLHUpKSxkZWxldGUgcy5fY29uc3RyYWludFNocmlua2FibGUseD1NYXRoLm1heCh4LHUpLCJkb21haW4iPT09cy5jb25zdHJhaW4mJihUPSEwKTtpZighKHk+Yyp4KXx8VClmb3Iocj0wO3I8Zy5sZW5ndGg7cisrKWlmKHU9X1tvPWdbcl1dLGY9KHM9d1tvXSkuY29uc3RyYWluLHUhPT1ifHwiZG9tYWluIj09PWYpaWYoZD11L2IsInJhbmdlIj09PWYpbChzLGQpO2Vsc2V7dmFyIGs9cy5faW5wdXREb21haW4sTT0ocy5kb21haW5bMV0tcy5kb21haW5bMF0pLyhrWzFdLWtbMF0pLEE9KHMucjJsKHMucmFuZ2VbMV0pLXMucjJsKHMucmFuZ2VbMF0pKS8ocy5yMmwocy5faW5wdXRSYW5nZVsxXSktcy5yMmwocy5faW5wdXRSYW5nZVswXSkpO2lmKChkLz1NKSpBPDEpe3MuZG9tYWluPXMuX2lucHV0LmRvbWFpbj1rLnNsaWNlKCksbChzLGQpO2NvbnRpbnVlfWlmKEE8MSYmKHMucmFuZ2U9cy5faW5wdXQucmFuZ2U9cy5faW5wdXRSYW5nZS5zbGljZSgpLGQqPUEpLHMuYXV0b3JhbmdlKXt2YXIgTD1zLnIybChzLnJhbmdlWzBdKSxTPXMucjJsKHMucmFuZ2VbMV0pLEM9KEwrUykvMixPPUMsRD1DLFA9TWF0aC5hYnMoUy1DKSx6PUMtUCpkKjEuMDAwMSxSPUMrUCpkKjEuMDAwMSxFPWEubWFrZVBhZEZuKHAscywwKSxJPWEubWFrZVBhZEZuKHAscywxKTttKHMsZCk7dmFyIEYsTixIPU1hdGguYWJzKHMuX20pLGo9YS5jb25jYXRFeHRyZW1lcyhlLHMpLEI9ai5taW4sVj1qLm1heDtmb3IoTj0wO048Qi5sZW5ndGg7TisrKShGPUJbTl0udmFsLUUoQltOXSkvSCk+eiYmRjxPJiYoTz1GKTtmb3IoTj0wO048Vi5sZW5ndGg7TisrKShGPVZbTl0udmFsK0koVltOXSkvSCk8UiYmRj5EJiYoRD1GKTtkLz0oRC1PKS8oMipQKSxPPXMubDJyKE8pLEQ9cy5sMnIoRCkscy5yYW5nZT1zLl9pbnB1dC5yYW5nZT1MPFM/W08sRF06W0QsT119bShzLGQpfX19LHIuZ2V0QXhpc0dyb3VwPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuX2F4aXNNYXRjaEdyb3VwcyxuPTA7bjxyLmxlbmd0aDtuKyspe2lmKHJbbl1bdF0pcmV0dXJuImciK259cmV0dXJuIHR9LHIuY2xlYW49ZnVuY3Rpb24oZSx0KXtpZih0Ll9pbnB1dERvbWFpbil7Zm9yKHZhciByPSExLG49dC5faWQsYT1lLl9mdWxsTGF5b3V0Ll9heGlzQ29uc3RyYWludEdyb3VwcyxpPTA7aTxhLmxlbmd0aDtpKyspaWYoYVtpXVtuXSl7cj0hMDticmVha31yJiYiZG9tYWluIj09PXQuY29uc3RyYWlufHwodC5faW5wdXQuZG9tYWluPXQuZG9tYWluPXQuX2lucHV0RG9tYWluLGRlbGV0ZSB0Ll9pbnB1dERvbWFpbil9fX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IjoxNzcsIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjE4MSwiLi4vLi4vbGliIjoyMDIsIi4vYXV0b3JhbmdlIjoyNDcsIi4vYXhpc19pZHMiOjI1MSwiLi9sYXlvdXRfYXR0cmlidXRlcyI6MjYyLCIuL3NjYWxlX3pvb20iOjI2NiwiLi9zZXRfY29udmVydCI6MjY4fV0sMjU2OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoImQzIiksYT1lKCJ0aW55Y29sb3IyIiksaT1lKCJoYXMtcGFzc2l2ZS1ldmVudHMiKSxvPWUoIi4uLy4uL3JlZ2lzdHJ5IiksbD1lKCIuLi8uLi9saWIiKSxzPWwuc3RyVHJhbnNsYXRlLGM9ZSgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksdT1lKCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksZj1lKCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxkPWUoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxwPWUoIi4vYXhlcyIpLGg9ZSgiLi4vLi4vbGliL3NldGN1cnNvciIpLGc9ZSgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCIpLHY9ZSgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudC9oZWxwZXJzIiksbT12LnNlbGVjdGluZ09yRHJhd2luZyx5PXYuZnJlZU1vZGUseD1lKCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuRlJPTV9UTCxiPWUoIi4uLy4uL2xpYi9jbGVhcl9nbF9jYW52YXNlcyIpLF89ZSgiLi4vLi4vcGxvdF9hcGkvc3Vicm91dGluZXMiKS5yZWRyYXdSZWdsVHJhY2VzLHc9ZSgiLi4vcGxvdHMiKSxUPWUoIi4vYXhpc19pZHMiKS5nZXRGcm9tSWQsaz1lKCIuL3NlbGVjdCIpLnByZXBTZWxlY3QsTT1lKCIuL3NlbGVjdCIpLmNsZWFyU2VsZWN0LEE9ZSgiLi9zZWxlY3QiKS5zZWxlY3RPbkNsaWNrLEw9ZSgiLi9zY2FsZV96b29tIiksUz1lKCIuL2NvbnN0YW50cyIpLEM9Uy5NSU5EUkFHLE89Uy5NSU5aT09NLEQ9ITA7ZnVuY3Rpb24gUChlLHQscixuKXt2YXIgYT1sLmVuc3VyZVNpbmdsZShlLmRyYWdsYXllcix0LHIsKGZ1bmN0aW9uKHQpe3QuY2xhc3NlZCgiZHJhZyIsITApLnN0eWxlKHtmaWxsOiJ0cmFuc3BhcmVudCIsInN0cm9rZS13aWR0aCI6MH0pLmF0dHIoImRhdGEtc3VicGxvdCIsZS5pZCl9KSk7cmV0dXJuIGEuY2FsbChoLG4pLGEubm9kZSgpfWZ1bmN0aW9uIHooZSx0LHIsYSxpLG8sbCl7dmFyIHM9UChlLCJyZWN0Iix0LHIpO3JldHVybiBuLnNlbGVjdChzKS5jYWxsKGYuc2V0UmVjdCxhLGksbyxsKSxzfWZ1bmN0aW9uIFIoZSx0KXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKylpZighZVtyXS5maXhlZHJhbmdlKXJldHVybiB0O3JldHVybiIifWZ1bmN0aW9uIEUoZSx0LHIsbixhKXtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG89ZVtpXTtpZighby5maXhlZHJhbmdlKWlmKG8ucmFuZ2VicmVha3Mpe3ZhciBsPSJ5Ij09PW8uX2lkLmNoYXJBdCgwKSxzPWw/MS10OnQsYz1sPzEtcjpyO25bby5fbmFtZSsiLnJhbmdlWzBdIl09by5sMnIoby5wMmwocypvLl9sZW5ndGgpKSxuW28uX25hbWUrIi5yYW5nZVsxXSJdPW8ubDJyKG8ucDJsKGMqby5fbGVuZ3RoKSl9ZWxzZXt2YXIgdT1vLl9ybFswXSxmPW8uX3JsWzFdLXU7bltvLl9uYW1lKyIucmFuZ2VbMF0iXT1vLmwycih1K2YqdCksbltvLl9uYW1lKyIucmFuZ2VbMV0iXT1vLmwycih1K2Yqcil9fWlmKGEmJmEubGVuZ3RoKXt2YXIgZD0odCsoMS1yKSkvMjtFKGEsZCwxLWQsbixbXSl9fWZ1bmN0aW9uIEkoZSx0KXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtpZighbi5maXhlZHJhbmdlKWlmKG4ucmFuZ2VicmVha3Mpe3ZhciBhPW4uX2xlbmd0aCxpPShuLnAybCgwK3QpLW4ucDJsKDApKyhuLnAybChhK3QpLW4ucDJsKGEpKSkvMjtuLnJhbmdlPVtuLmwycihuLl9ybFswXS1pKSxuLmwycihuLl9ybFsxXS1pKV19ZWxzZSBuLnJhbmdlPVtuLmwycihuLl9ybFswXS10L24uX20pLG4ubDJyKG4uX3JsWzFdLXQvbi5fbSldfX1mdW5jdGlvbiBGKGUpe3JldHVybiAxLShlPj0wP01hdGgubWluKGUsLjkpOjEvKDEvTWF0aC5tYXgoZSwtLjMpKzMuMjIyKSl9ZnVuY3Rpb24gTihlLHQscixuLGEpe3JldHVybiBlLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiem9vbWJveCIpLnN0eWxlKHtmaWxsOnQ+LjI/InJnYmEoMCwwLDAsMCkiOiJyZ2JhKDI1NSwyNTUsMjU1LDApIiwic3Ryb2tlLXdpZHRoIjowfSkuYXR0cigidHJhbnNmb3JtIixzKHIsbikpLmF0dHIoImQiLGErIloiKX1mdW5jdGlvbiBIKGUsdCxyKXtyZXR1cm4gZS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsInpvb21ib3gtY29ybmVycyIpLnN0eWxlKHtmaWxsOnUuYmFja2dyb3VuZCxzdHJva2U6dS5kZWZhdWx0TGluZSwic3Ryb2tlLXdpZHRoIjoxLG9wYWNpdHk6MH0pLmF0dHIoInRyYW5zZm9ybSIscyh0LHIpKS5hdHRyKCJkIiwiTTAsMFoiKX1mdW5jdGlvbiBqKGUsdCxyLG4sYSxpKXtlLmF0dHIoImQiLG4rIk0iK3IubCsiLCIrci50KyJ2IityLmgrImgiK3Iudysidi0iK3IuaCsiaC0iK3IudysiWiIpLEIoZSx0LGEsaSl9ZnVuY3Rpb24gQihlLHQscixuKXtyfHwoZS50cmFuc2l0aW9uKCkuc3R5bGUoImZpbGwiLG4+LjI/InJnYmEoMCwwLDAsMC40KSI6InJnYmEoMjU1LDI1NSwyNTUsMC4zKSIpLmR1cmF0aW9uKDIwMCksdC50cmFuc2l0aW9uKCkuc3R5bGUoIm9wYWNpdHkiLDEpLmR1cmF0aW9uKDIwMCkpfWZ1bmN0aW9uIFYoZSl7bi5zZWxlY3QoZSkuc2VsZWN0QWxsKCIuem9vbWJveCwuanMtem9vbWJveC1iYWNrZHJvcCwuanMtem9vbWJveC1tZW51LC56b29tYm94LWNvcm5lcnMiKS5yZW1vdmUoKX1mdW5jdGlvbiBVKGUpe0QmJmUuZGF0YSYmZS5fY29udGV4dC5zaG93VGlwcyYmKGwubm90aWZpZXIobC5fKGUsIkRvdWJsZS1jbGljayB0byB6b29tIGJhY2sgb3V0IiksImxvbmciKSxEPSExKX1mdW5jdGlvbiBxKGUpe3ZhciB0PU1hdGguZmxvb3IoTWF0aC5taW4oZS5iLWUudCxlLnItZS5sLE8pLzIpO3JldHVybiJNIisoZS5sLTMuNSkrIiwiKyhlLnQtLjUrdCkrImgzdiIrLXQrImgiK3QrInYtM2gtIisodCszKSsiWk0iKyhlLnIrMy41KSsiLCIrKGUudC0uNSt0KSsiaC0zdiIrLXQrImgiKy10KyJ2LTNoIisodCszKSsiWk0iKyhlLnIrMy41KSsiLCIrKGUuYisuNS10KSsiaC0zdiIrdCsiaCIrLXQrInYzaCIrKHQrMykrIlpNIisoZS5sLTMuNSkrIiwiKyhlLmIrLjUtdCkrImgzdiIrdCsiaCIrdCsidjNoLSIrKHQrMykrIloifWZ1bmN0aW9uIEcoZSx0LHIsbixhKXtmb3IodmFyIGksbyxzLGMsdT0hMSxmPXt9LGQ9e30scD0oYXx8e30pLnhhSGFzaCxoPShhfHx7fSkueWFIYXNoLGc9MDtnPHQubGVuZ3RoO2crKyl7dmFyIHY9dFtnXTtmb3IoaSBpbiByKWlmKHZbaV0pe2ZvcihzIGluIHYpYSYmKHBbc118fGhbc10pfHwoIngiPT09cy5jaGFyQXQoMCk/cjpuKVtzXXx8KGZbc109aSk7Zm9yKG8gaW4gbilhJiYocFtvXXx8aFtvXSl8fCF2W29dfHwodT0hMCl9Zm9yKG8gaW4gbilpZih2W29dKWZvcihjIGluIHYpYSYmKHBbY118fGhbY10pfHwoIngiPT09Yy5jaGFyQXQoMCk/cjpuKVtjXXx8KGRbY109byl9dSYmKGwuZXh0ZW5kRmxhdChmLGQpLGQ9e30pO3ZhciBtPXt9LHk9W107Zm9yKHMgaW4gZil7dmFyIHg9VChlLHMpO3kucHVzaCh4KSxtW3guX2lkXT14fXZhciBiPXt9LF89W107Zm9yKGMgaW4gZCl7dmFyIHc9VChlLGMpO18ucHVzaCh3KSxiW3cuX2lkXT13fXJldHVybnt4YUhhc2g6bSx5YUhhc2g6Yix4YXhlczp5LHlheGVzOl8seExpbmtzOmYseUxpbmtzOmQsaXNTdWJwbG90Q29uc3RyYWluZWQ6dX19ZnVuY3Rpb24gWihlLHQpe2lmKGkpe3ZhciByPXZvaWQgMCE9PWUub253aGVlbD8id2hlZWwiOiJtb3VzZXdoZWVsIjtlLl9vbndoZWVsJiZlLnJlbW92ZUV2ZW50TGlzdGVuZXIocixlLl9vbndoZWVsKSxlLl9vbndoZWVsPXQsZS5hZGRFdmVudExpc3RlbmVyKHIsdCx7cGFzc2l2ZTohMX0pfWVsc2Ugdm9pZCAwIT09ZS5vbndoZWVsP2Uub253aGVlbD10OnZvaWQgMCE9PWUub25tb3VzZXdoZWVsP2Uub25tb3VzZXdoZWVsPXQ6ZS5pc0FkZGVkV2hlZWxFdmVudHx8KGUuaXNBZGRlZFdoZWVsRXZlbnQ9ITAsZS5hZGRFdmVudExpc3RlbmVyKCJ3aGVlbCIsdCx7cGFzc2l2ZTohMX0pKX1mdW5jdGlvbiBZKGUpe3ZhciB0PVtdO2Zvcih2YXIgciBpbiBlKXQucHVzaChlW3JdKTtyZXR1cm4gdH10LmV4cG9ydHM9e21ha2VEcmFnQm94OmZ1bmN0aW9uKGUsdCxyLGkscyx1LGgsdil7dmFyIEQsUCxCLFgsVyxRLEosJCxLLGVlLHRlLHJlLG5lLGFlLGllLG9lLGxlLHNlLGNlLHVlLGZlLGRlLHBlLGhlPWUuX2Z1bGxMYXlvdXQuX3pvb21sYXllcixnZT1oK3Y9PT0ibnNldyIsdmU9MT09PShoK3YpLmxlbmd0aDtmdW5jdGlvbiBtZSgpe2lmKEQ9dC54YXhpcyxQPXQueWF4aXMsSz1ELl9sZW5ndGgsZWU9UC5fbGVuZ3RoLEo9RC5fb2Zmc2V0LCQ9UC5fb2Zmc2V0LChCPXt9KVtELl9pZF09RCwoWD17fSlbUC5faWRdPVAsaCYmdilmb3IodmFyIHI9dC5vdmVybGF5cyxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBhPXJbbl0ueGF4aXM7QlthLl9pZF09YTt2YXIgaT1yW25dLnlheGlzO1hbaS5faWRdPWl9Vz1ZKEIpLFE9WShYKSxuZT1SKFcsdiksYWU9UihRLGgpLGllPSFhZSYmIW5lLHJlPUcoZSxlLl9mdWxsTGF5b3V0Ll9heGlzTWF0Y2hHcm91cHMsQixYKTt2YXIgbz0odGU9RyhlLGUuX2Z1bGxMYXlvdXQuX2F4aXNDb25zdHJhaW50R3JvdXBzLEIsWCxyZSkpLmlzU3VicGxvdENvbnN0cmFpbmVkfHxyZS5pc1N1YnBsb3RDb25zdHJhaW5lZDtvZT12fHxvLGxlPWh8fG87dmFyIGw9ZS5fZnVsbExheW91dDtzZT1sLl9oYXMoInNjYXR0ZXJnbCIpLGNlPWwuX2hhcygic3Bsb20iKSx1ZT1sLl9oYXMoInN2ZyIpfW1lKCk7dmFyIHllPWZ1bmN0aW9uKGUsdCxyKXtpZighZSlyZXR1cm4icG9pbnRlciI7aWYoIm5zZXciPT09ZSlyZXR1cm4gcj8iIjoicGFuIj09PXQ/Im1vdmUiOiJjcm9zc2hhaXIiO3JldHVybiBlLnRvTG93ZXJDYXNlKCkrIi1yZXNpemUifShhZStuZSxlLl9mdWxsTGF5b3V0LmRyYWdtb2RlLGdlKSx4ZT16KHQsaCt2KyJkcmFnIix5ZSxyLGkscyx1KTtpZihpZSYmIWdlKXJldHVybiB4ZS5vbm1vdXNlZG93bj1udWxsLHhlLnN0eWxlLnBvaW50ZXJFdmVudHM9Im5vbmUiLHhlO3ZhciBiZSxfZSx3ZSxUZSxrZSxNZSxBZSxMZSxTZSxDZSxPZT17ZWxlbWVudDp4ZSxnZDplLHBsb3RpbmZvOnR9O2Z1bmN0aW9uIERlKCl7T2UucGxvdGluZm8uc2VsZWN0aW9uPSExLE0oZSl9ZnVuY3Rpb24gUGUoZSxyKXt2YXIgYT1PZS5nZDtpZihhLl9mdWxsTGF5b3V0Ll9hY3RpdmVTaGFwZUluZGV4Pj0wKWEuX2Z1bGxMYXlvdXQuX2RlYWN0aXZhdGVTaGFwZShhKTtlbHNle3ZhciBpPWEuX2Z1bGxMYXlvdXQuY2xpY2ttb2RlO2lmKFYoYSksMiE9PWV8fHZlfHxVZSgpLGdlKWkuaW5kZXhPZigic2VsZWN0Iik+LTEmJkEocixhLFcsUSx0LmlkLE9lKSxpLmluZGV4T2YoImV2ZW50Iik+LTEmJmQuY2xpY2soYSxyLHQuaWQpO2Vsc2UgaWYoMT09PWUmJnZlKXt2YXIgbD1oP1A6RCxzPSJzIj09PWh8fCJ3Ij09PXY/MDoxLHU9bC5fbmFtZSsiLnJhbmdlWyIrcysiXSIsZj1mdW5jdGlvbihlLHQpe3ZhciByLGE9ZS5yYW5nZVt0XSxpPU1hdGguYWJzKGEtZS5yYW5nZVsxLXRdKTtyZXR1cm4iZGF0ZSI9PT1lLnR5cGU/YToibG9nIj09PWUudHlwZT8ocj1NYXRoLmNlaWwoTWF0aC5tYXgoMCwtTWF0aC5sb2coaSkvTWF0aC5MTjEwKSkrMyxuLmZvcm1hdCgiLiIrcisiZyIpKE1hdGgucG93KDEwLGEpKSk6KHI9TWF0aC5mbG9vcihNYXRoLmxvZyhNYXRoLmFicyhhKSkvTWF0aC5MTjEwKS1NYXRoLmZsb29yKE1hdGgubG9nKGkpL01hdGguTE4xMCkrNCxuLmZvcm1hdCgiLiIrU3RyaW5nKHIpKyJnIikoYSkpfShsLHMpLHA9ImxlZnQiLGc9Im1pZGRsZSI7aWYobC5maXhlZHJhbmdlKXJldHVybjtoPyhnPSJuIj09PWg/InRvcCI6ImJvdHRvbSIsInJpZ2h0Ij09PWwuc2lkZSYmKHA9InJpZ2h0IikpOiJlIj09PXYmJihwPSJyaWdodCIpLGEuX2NvbnRleHQuc2hvd0F4aXNSYW5nZUVudHJ5Qm94ZXMmJm4uc2VsZWN0KHhlKS5jYWxsKGMubWFrZUVkaXRhYmxlLHtnZDphLGltbWVkaWF0ZTohMCxiYWNrZ3JvdW5kOmEuX2Z1bGxMYXlvdXQucGFwZXJfYmdjb2xvcix0ZXh0OlN0cmluZyhmKSxmaWxsOmwudGlja2ZvbnQ/bC50aWNrZm9udC5jb2xvcjoiIzQ0NCIsaG9yaXpvbnRhbEFsaWduOnAsdmVydGljYWxBbGlnbjpnfSkub24oImVkaXQiLChmdW5jdGlvbihlKXt2YXIgdD1sLmQycihlKTt2b2lkIDAhPT10JiZvLmNhbGwoIl9ndWlSZWxheW91dCIsYSx1LHQpfSkpfX19ZnVuY3Rpb24gemUodCxyKXtpZihlLl90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uKXJldHVybiExO3ZhciBuPU1hdGgubWF4KDAsTWF0aC5taW4oSyxkZSp0K2JlKSksYT1NYXRoLm1heCgwLE1hdGgubWluKGVlLHBlKnIrX2UpKSxpPU1hdGguYWJzKG4tYmUpLG89TWF0aC5hYnMoYS1fZSk7ZnVuY3Rpb24gbCgpe0FlPSIiLHdlLnI9d2UubCx3ZS50PXdlLmIsU2UuYXR0cigiZCIsIk0wLDBaIil9aWYod2UubD1NYXRoLm1pbihiZSxuKSx3ZS5yPU1hdGgubWF4KGJlLG4pLHdlLnQ9TWF0aC5taW4oX2UsYSksd2UuYj1NYXRoLm1heChfZSxhKSx0ZS5pc1N1YnBsb3RDb25zdHJhaW5lZClpPk98fG8+Tz8oQWU9Inh5IixpL0s+by9lZT8obz1pKmVlL0ssX2U+YT93ZS50PV9lLW86d2UuYj1fZStvKTooaT1vKksvZWUsYmU+bj93ZS5sPWJlLWk6d2Uucj1iZStpKSxTZS5hdHRyKCJkIixxKHdlKSkpOmwoKTtlbHNlIGlmKHJlLmlzU3VicGxvdENvbnN0cmFpbmVkKWlmKGk+T3x8bz5PKXtBZT0ieHkiO3ZhciBzPU1hdGgubWluKHdlLmwvSywoZWUtd2UuYikvZWUpLGM9TWF0aC5tYXgod2Uuci9LLChlZS13ZS50KS9lZSk7d2UubD1zKkssd2Uucj1jKkssd2UuYj0oMS1zKSplZSx3ZS50PSgxLWMpKmVlLFNlLmF0dHIoImQiLHEod2UpKX1lbHNlIGwoKTtlbHNlIWFlfHxvPE1hdGgubWluKE1hdGgubWF4KC42KmksQyksTyk/aTxDfHwhbmU/bCgpOih3ZS50PTAsd2UuYj1lZSxBZT0ieCIsU2UuYXR0cigiZCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4iTSIrKGUubC0uNSkrIiwiKyh0LU8tLjUpKyJoLTN2IisoMipPKzEpKyJoM1pNIisoZS5yKy41KSsiLCIrKHQtTy0uNSkrImgzdiIrKDIqTysxKSsiaC0zWiJ9KHdlLF9lKSkpOiFuZXx8aTxNYXRoLm1pbiguNipvLE8pPyh3ZS5sPTAsd2Uucj1LLEFlPSJ5IixTZS5hdHRyKCJkIixmdW5jdGlvbihlLHQpe3JldHVybiJNIisodC1PLS41KSsiLCIrKGUudC0uNSkrInYtM2giKygyKk8rMSkrInYzWk0iKyh0LU8tLjUpKyIsIisoZS5iKy41KSsidjNoIisoMipPKzEpKyJ2LTNaIn0od2UsYmUpKSk6KEFlPSJ4eSIsU2UuYXR0cigiZCIscSh3ZSkpKTt3ZS53PXdlLnItd2UubCx3ZS5oPXdlLmItd2UudCxBZSYmKENlPSEwKSxlLl9kcmFnZ2VkPUNlLGooTGUsU2Usd2Usa2UsTWUsVGUpLFJlKCksZS5lbWl0KCJwbG90bHlfcmVsYXlvdXRpbmciLGZlKSxNZT0hMH1mdW5jdGlvbiBSZSgpe2ZlPXt9LCJ4eSIhPT1BZSYmIngiIT09QWV8fChFKFcsd2UubC9LLHdlLnIvSyxmZSx0ZS54YXhlcyksQmUoIngiLGZlKSksInh5IiE9PUFlJiYieSIhPT1BZXx8KEUoUSwoZWUtd2UuYikvZWUsKGVlLXdlLnQpL2VlLGZlLHRlLnlheGVzKSxCZSgieSIsZmUpKX1mdW5jdGlvbiBFZSgpe1JlKCksVihlKSxxZSgpLFUoZSl9T2UucHJlcEZuPWZ1bmN0aW9uKHQscixuKXt2YXIgaT1PZS5kcmFnbW9kZSxvPWUuX2Z1bGxMYXlvdXQuZHJhZ21vZGU7byE9PWkmJihPZS5kcmFnbW9kZT1vKSxtZSgpLGRlPWUuX2Z1bGxMYXlvdXQuX2ludlNjYWxlWCxwZT1lLl9mdWxsTGF5b3V0Ll9pbnZTY2FsZVksaWV8fChnZT90LnNoaWZ0S2V5PyJwYW4iPT09bz9vPSJ6b29tIjptKG8pfHwobz0icGFuIik6dC5jdHJsS2V5JiYobz0icGFuIik6bz0icGFuIikseShvKT9PZS5taW5EcmFnPTE6T2UubWluRHJhZz12b2lkIDAsbShvKT8oT2UueGF4ZXM9VyxPZS55YXhlcz1RLGsodCxyLG4sT2UsbykpOihPZS5jbGlja0ZuPVBlLG0oaSkmJkRlKCksaWV8fCgiem9vbSI9PT1vPyhPZS5tb3ZlRm49emUsT2UuZG9uZUZuPUVlLE9lLm1pbkRyYWc9MSxmdW5jdGlvbih0LHIsbil7dmFyIGk9eGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7YmU9ci1pLmxlZnQsX2U9bi1pLnRvcCxlLl9mdWxsTGF5b3V0Ll9jYWxjSW52ZXJzZVRyYW5zZm9ybShlKTt2YXIgbz1sLmFwcGx5M0RUcmFuc2Zvcm0oZS5fZnVsbExheW91dC5faW52VHJhbnNmb3JtKShiZSxfZSk7YmU9b1swXSxfZT1vWzFdLHdlPXtsOmJlLHI6YmUsdzowLHQ6X2UsYjpfZSxoOjB9LFRlPWUuX2htcGl4Y291bnQ/ZS5faG1sdW1jb3VudC9lLl9obXBpeGNvdW50OmEoZS5fZnVsbExheW91dC5wbG90X2JnY29sb3IpLmdldEx1bWluYW5jZSgpLE1lPSExLEFlPSJ4eSIsQ2U9ITEsTGU9TihoZSxUZSxKLCQsa2U9Ik0wLDBIIitLKyJWIitlZSsiSDBWMCIpLFNlPUgoaGUsSiwkKX0oMCxyLG4pKToicGFuIj09PW8mJihPZS5tb3ZlRm49amUsT2UuZG9uZUZuPXFlKSkpLGUuX2Z1bGxMYXlvdXQuX3JlZHJhZz1mdW5jdGlvbigpe3ZhciB0PWUuX2RyYWdkYXRhO2lmKHQmJnQuZWxlbWVudD09PXhlKXt2YXIgcj1lLl9mdWxsTGF5b3V0LmRyYWdtb2RlO20ocil8fChtZSgpLEdlKFswLDAsSyxlZV0pLE9lLm1vdmVGbih0LmR4LHQuZHkpKX19fSxnLmluaXQoT2UpO3ZhciBJZT1bMCwwLEssZWVdLEZlPW51bGwsTmU9Uy5SRURSQVdERUxBWSxIZT10Lm1haW5wbG90P2UuX2Z1bGxMYXlvdXQuX3Bsb3RzW3QubWFpbnBsb3RdOnQ7ZnVuY3Rpb24gamUodCxyKXtpZih0Kj1kZSxyKj1wZSwhZS5fdHJhbnNpdGlvbmluZ1dpdGhEdXJhdGlvbil7aWYoZS5fZnVsbExheW91dC5fcmVwbG90dGluZz0hMCwiZXciPT09bmV8fCJucyI9PT1hZSl7dmFyIG49bmU/LXQ6MCxhPWFlPy1yOjA7aWYocmUuaXNTdWJwbG90Q29uc3RyYWluZWQpe2lmKG5lJiZhZSl7dmFyIGk9KHQvSy1yL2VlKS8yO249LSh0PWkqSyksYT0tKHI9LWkqZWUpfWFlP249LWEqSy9lZTphPS1uKmVlL0t9cmV0dXJuIG5lJiYoSShXLHQpLEJlKCJ4IikpLGFlJiYoSShRLHIpLEJlKCJ5IikpLEdlKFtuLGEsSyxlZV0pLFZlKCksdm9pZCBlLmVtaXQoInBsb3RseV9yZWxheW91dGluZyIsZmUpfXZhciBvLGwscz0idyI9PT1uZT09KCJuIj09PWFlKT8xOi0xO2lmKG5lJiZhZSYmKHRlLmlzU3VicGxvdENvbnN0cmFpbmVkfHxyZS5pc1N1YnBsb3RDb25zdHJhaW5lZCkpe3ZhciBjPSh0L0srcypyL2VlKS8yO3Q9YypLLHI9cypjKmVlfWlmKCJ3Ij09PW5lP3Q9cChXLDAsdCk6ImUiPT09bmU/dD1wKFcsMSwtdCk6bmV8fCh0PTApLCJuIj09PWFlP3I9cChRLDEscik6InMiPT09YWU/cj1wKFEsMCwtcik6YWV8fChyPTApLG89InciPT09bmU/dDowLGw9Im4iPT09YWU/cjowLHRlLmlzU3VicGxvdENvbnN0cmFpbmVkJiYhcmUuaXNTdWJwbG90Q29uc3RyYWluZWR8fHJlLmlzU3VicGxvdENvbnN0cmFpbmVkJiZuZSYmYWUmJnM+MCl7dmFyIHU7aWYocmUuaXNTdWJwbG90Q29uc3RyYWluZWR8fCFuZSYmMT09PWFlLmxlbmd0aCl7Zm9yKHU9MDt1PFcubGVuZ3RoO3UrKylXW3VdLnJhbmdlPVdbdV0uX3Iuc2xpY2UoKSxMKFdbdV0sMS1yL2VlKTtvPSh0PXIqSy9lZSkvMn1pZihyZS5pc1N1YnBsb3RDb25zdHJhaW5lZHx8IWFlJiYxPT09bmUubGVuZ3RoKXtmb3IodT0wO3U8US5sZW5ndGg7dSsrKVFbdV0ucmFuZ2U9UVt1XS5fci5zbGljZSgpLEwoUVt1XSwxLXQvSyk7bD0ocj10KmVlL0spLzJ9fXJlLmlzU3VicGxvdENvbnN0cmFpbmVkJiZhZXx8QmUoIngiKSxyZS5pc1N1YnBsb3RDb25zdHJhaW5lZCYmbmV8fEJlKCJ5Iik7dmFyIGY9Sy10LGQ9ZWUtcjshcmUuaXNTdWJwbG90Q29uc3RyYWluZWR8fG5lJiZhZXx8KG5lPyhsPW8/MDp0KmVlL0ssZD1mKmVlL0spOihvPWw/MDpyKksvZWUsZj1kKksvZWUpKSxHZShbbyxsLGYsZF0pLFZlKCksZS5lbWl0KCJwbG90bHlfcmVsYXlvdXRpbmciLGZlKX1mdW5jdGlvbiBwKGUsdCxyKXtmb3IodmFyIG4sYSxpPTEtdCxvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciBsPWVbb107aWYoIWwuZml4ZWRyYW5nZSl7bj1sLGE9bC5fcmxbaV0rKGwuX3JsW3RdLWwuX3JsW2ldKS9GKHIvbC5fbGVuZ3RoKTt2YXIgcz1sLmwycihhKTshMSE9PXMmJnZvaWQgMCE9PXMmJihsLnJhbmdlW3RdPXMpfX1yZXR1cm4gbi5fbGVuZ3RoKihuLl9ybFt0XS1hKS8obi5fcmxbdF0tbi5fcmxbaV0pfX1mdW5jdGlvbiBCZShlLHQpe2Zvcih2YXIgcj1yZS5pc1N1YnBsb3RDb25zdHJhaW5lZD97eDpRLHk6V31bZV06cmVbZSsiYXhlcyJdLG49cmUuaXNTdWJwbG90Q29uc3RyYWluZWQ/e3g6Vyx5OlF9W2VdOltdLGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIGk9clthXSxvPWkuX2lkLGw9cmUueExpbmtzW29dfHxyZS55TGlua3Nbb10scz1uWzBdfHxCW2xdfHxYW2xdO3MmJih0Pyh0W2kuX25hbWUrIi5yYW5nZVswXSJdPXRbcy5fbmFtZSsiLnJhbmdlWzBdIl0sdFtpLl9uYW1lKyIucmFuZ2VbMV0iXT10W3MuX25hbWUrIi5yYW5nZVsxXSJdKTppLnJhbmdlPXMucmFuZ2Uuc2xpY2UoKSl9fWZ1bmN0aW9uIFZlKCl7dmFyIHQscj1bXTtmdW5jdGlvbiBuKGUpe2Zvcih0PTA7dDxlLmxlbmd0aDt0KyspZVt0XS5maXhlZHJhbmdlfHxyLnB1c2goZVt0XS5faWQpfWZvcihvZSYmKG4oVyksbih0ZS54YXhlcyksbihyZS54YXhlcykpLGxlJiYobihRKSxuKHRlLnlheGVzKSxuKHJlLnlheGVzKSksZmU9e30sdD0wO3Q8ci5sZW5ndGg7dCsrKXt2YXIgYT1yW3RdLGk9VChlLGEpO3AuZHJhd09uZShlLGkse3NraXBUaXRsZTohMH0pLGZlW2kuX25hbWUrIi5yYW5nZVswXSJdPWkucmFuZ2VbMF0sZmVbaS5fbmFtZSsiLnJhbmdlWzFdIl09aS5yYW5nZVsxXX1wLnJlZHJhd0NvbXBvbmVudHMoZSxyKX1mdW5jdGlvbiBVZSgpe2lmKCFlLl90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uKXt2YXIgdD1lLl9jb250ZXh0LmRvdWJsZUNsaWNrLHI9W107bmUmJihyPXIuY29uY2F0KFcpKSxhZSYmKHI9ci5jb25jYXQoUSkpLHJlLnhheGVzJiYocj1yLmNvbmNhdChyZS54YXhlcykpLHJlLnlheGVzJiYocj1yLmNvbmNhdChyZS55YXhlcykpO3ZhciBuLGEsaSxsPXt9O2lmKCJyZXNldCthdXRvc2l6ZSI9PT10KWZvcih0PSJhdXRvc2l6ZSIsYT0wO2E8ci5sZW5ndGg7YSsrKWlmKChuPXJbYV0pLl9yYW5nZUluaXRpYWwmJihuLnJhbmdlWzBdIT09bi5fcmFuZ2VJbml0aWFsWzBdfHxuLnJhbmdlWzFdIT09bi5fcmFuZ2VJbml0aWFsWzFdKXx8IW4uX3JhbmdlSW5pdGlhbCYmIW4uYXV0b3JhbmdlKXt0PSJyZXNldCI7YnJlYWt9aWYoImF1dG9zaXplIj09PXQpZm9yKGE9MDthPHIubGVuZ3RoO2ErKykobj1yW2FdKS5maXhlZHJhbmdlfHwobFtuLl9uYW1lKyIuYXV0b3JhbmdlIl09ITApO2Vsc2UgaWYoInJlc2V0Ij09PXQpZm9yKChuZXx8dGUuaXNTdWJwbG90Q29uc3RyYWluZWQpJiYocj1yLmNvbmNhdCh0ZS54YXhlcykpLGFlJiYhdGUuaXNTdWJwbG90Q29uc3RyYWluZWQmJihyPXIuY29uY2F0KHRlLnlheGVzKSksdGUuaXNTdWJwbG90Q29uc3RyYWluZWQmJihuZT9hZXx8KHI9ci5jb25jYXQoUSkpOnI9ci5jb25jYXQoVykpLGE9MDthPHIubGVuZ3RoO2ErKykobj1yW2FdKS5maXhlZHJhbmdlfHwobi5fcmFuZ2VJbml0aWFsPyhpPW4uX3JhbmdlSW5pdGlhbCxsW24uX25hbWUrIi5yYW5nZVswXSJdPWlbMF0sbFtuLl9uYW1lKyIucmFuZ2VbMV0iXT1pWzFdKTpsW24uX25hbWUrIi5hdXRvcmFuZ2UiXT0hMCk7ZS5lbWl0KCJwbG90bHlfZG91YmxlY2xpY2siLG51bGwpLG8uY2FsbCgiX2d1aVJlbGF5b3V0IixlLGwpfX1mdW5jdGlvbiBxZSgpe0dlKFswLDAsSyxlZV0pLGwuc3luY09yQXN5bmMoW3cucHJldmlvdXNQcm9taXNlcyxmdW5jdGlvbigpe2UuX2Z1bGxMYXlvdXQuX3JlcGxvdHRpbmc9ITEsby5jYWxsKCJfZ3VpUmVsYXlvdXQiLGUsZmUpfV0sZSl9ZnVuY3Rpb24gR2UodCl7dmFyIHIsbixhLGkscz1lLl9mdWxsTGF5b3V0LGM9cy5fcGxvdHMsdT1zLl9zdWJwbG90cy5jYXJ0ZXNpYW47aWYoY2UmJm8uc3VicGxvdHNSZWdpc3RyeS5zcGxvbS5kcmFnKGUpLHNlKWZvcihyPTA7cjx1Lmxlbmd0aDtyKyspaWYoYT0obj1jW3Vbcl1dKS54YXhpcyxpPW4ueWF4aXMsbi5fc2NlbmUpe3ZhciBkPWwuc2ltcGxlTWFwKGEucmFuZ2UsYS5yMmwpLHA9bC5zaW1wbGVNYXAoaS5yYW5nZSxpLnIybCk7bi5fc2NlbmUudXBkYXRlKHtyYW5nZTpbZFswXSxwWzBdLGRbMV0scFsxXV19KX1pZigoY2V8fHNlKSYmKGIoZSksXyhlKSksdWUpe3ZhciBnPXRbMl0vRC5fbGVuZ3RoLG09dFszXS9QLl9sZW5ndGg7Zm9yKHI9MDtyPHUubGVuZ3RoO3IrKyl7YT0obj1jW3Vbcl1dKS54YXhpcyxpPW4ueWF4aXM7dmFyIHkseCx3LFQsaz0ob2V8fHJlLmlzU3VicGxvdENvbnN0cmFpbmVkKSYmIWEuZml4ZWRyYW5nZSYmQlthLl9pZF0sTT0obGV8fHJlLmlzU3VicGxvdENvbnN0cmFpbmVkKSYmIWkuZml4ZWRyYW5nZSYmWFtpLl9pZF07aWYoaz8oeT1nLHc9dnx8cmUuaXNTdWJwbG90Q29uc3RyYWluZWQ/dFswXTpYZShhLHkpKTpyZS54YUhhc2hbYS5faWRdPyh5PWcsdz10WzBdKmEuX2xlbmd0aC9ELl9sZW5ndGgpOnJlLnlhSGFzaFthLl9pZF0/KHk9bSx3PSJucyI9PT1hZT8tdFsxXSphLl9sZW5ndGgvUC5fbGVuZ3RoOlhlKGEseSx7bjoidG9wIixzOiJib3R0b20ifVthZV0pKTp3PVllKGEseT1aZShhLGcsbSkpLE0/KHg9bSxUPWh8fHJlLmlzU3VicGxvdENvbnN0cmFpbmVkP3RbMV06WGUoaSx4KSk6cmUueWFIYXNoW2kuX2lkXT8oeD1tLFQ9dFsxXSppLl9sZW5ndGgvUC5fbGVuZ3RoKTpyZS54YUhhc2hbaS5faWRdPyh4PWcsVD0iZXciPT09bmU/LXRbMF0qaS5fbGVuZ3RoL0QuX2xlbmd0aDpYZShpLHgse2U6InJpZ2h0Iix3OiJsZWZ0In1bbmVdKSk6VD1ZZShpLHg9WmUoaSxnLG0pKSx5fHx4KXt5fHwoeT0xKSx4fHwoeD0xKTt2YXIgQT1hLl9vZmZzZXQtdy95LEw9aS5fb2Zmc2V0LVQveDtuLmNsaXBSZWN0LmNhbGwoZi5zZXRUcmFuc2xhdGUsdyxUKS5jYWxsKGYuc2V0U2NhbGUseSx4KSxuLnBsb3QuY2FsbChmLnNldFRyYW5zbGF0ZSxBLEwpLmNhbGwoZi5zZXRTY2FsZSwxL3ksMS94KSx5PT09bi54U2NhbGVGYWN0b3ImJng9PT1uLnlTY2FsZUZhY3Rvcnx8KGYuc2V0UG9pbnRHcm91cFNjYWxlKG4uem9vbVNjYWxlUHRzLHkseCksZi5zZXRUZXh0UG9pbnRzU2NhbGUobi56b29tU2NhbGVUeHQseSx4KSksZi5oaWRlT3V0c2lkZVJhbmdlUG9pbnRzKG4uY2xpcE9uQXhpc0ZhbHNlVHJhY2VzLG4pLG4ueFNjYWxlRmFjdG9yPXksbi55U2NhbGVGYWN0b3I9eH19fX1mdW5jdGlvbiBaZShlLHQscil7cmV0dXJuIGUuZml4ZWRyYW5nZT8wOm9lJiZ0ZS54YUhhc2hbZS5faWRdP3Q6bGUmJih0ZS5pc1N1YnBsb3RDb25zdHJhaW5lZD90ZS54YUhhc2g6dGUueWFIYXNoKVtlLl9pZF0/cjowfWZ1bmN0aW9uIFllKGUsdCl7cmV0dXJuIHQ/KGUucmFuZ2U9ZS5fci5zbGljZSgpLEwoZSx0KSxYZShlLHQpKTowfWZ1bmN0aW9uIFhlKGUsdCxyKXtyZXR1cm4gZS5fbGVuZ3RoKigxLXQpKnhbcnx8ZS5jb25zdHJhaW50b3dhcmR8fCJtaWRkbGUiXX1yZXR1cm4gaC5sZW5ndGgqdi5sZW5ndGghPTEmJlooeGUsKGZ1bmN0aW9uKHQpe2lmKGUuX2NvbnRleHQuX3Njcm9sbFpvb20uY2FydGVzaWFufHxlLl9mdWxsTGF5b3V0Ll9lbmFibGVzY3JvbGx6b29tKXtpZihEZSgpLGUuX3RyYW5zaXRpb25pbmdXaXRoRHVyYXRpb24pcmV0dXJuIHQucHJldmVudERlZmF1bHQoKSx2b2lkIHQuc3RvcFByb3BhZ2F0aW9uKCk7bWUoKSxjbGVhclRpbWVvdXQoRmUpO3ZhciByPS10LmRlbHRhWTtpZihpc0Zpbml0ZShyKXx8KHI9dC53aGVlbERlbHRhLzEwKSxpc0Zpbml0ZShyKSl7dmFyIG4sYT1NYXRoLmV4cCgtTWF0aC5taW4oTWF0aC5tYXgociwtMjApLDIwKS8yMDApLGk9SGUuZHJhZ2xheWVyLnNlbGVjdCgiLm5zZXdkcmFnIikubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89KHQuY2xpZW50WC1pLmxlZnQpL2kud2lkdGgscz0oaS5ib3R0b20tdC5jbGllbnRZKS9pLmhlaWdodDtpZihvZSl7Zm9yKHZ8fChvPS41KSxuPTA7bjxXLmxlbmd0aDtuKyspYyhXW25dLG8sYSk7QmUoIngiKSxJZVsyXSo9YSxJZVswXSs9SWVbMl0qbyooMS9hLTEpfWlmKGxlKXtmb3IoaHx8KHM9LjUpLG49MDtuPFEubGVuZ3RoO24rKyljKFFbbl0scyxhKTtCZSgieSIpLEllWzNdKj1hLEllWzFdKz1JZVszXSooMS1zKSooMS9hLTEpfUdlKEllKSxWZSgpLGUuZW1pdCgicGxvdGx5X3JlbGF5b3V0aW5nIixmZSksRmU9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtJZT1bMCwwLEssZWVdLHFlKCl9KSxOZSksdC5wcmV2ZW50RGVmYXVsdCgpfWVsc2UgbC5sb2coIkRpZCBub3QgZmluZCB3aGVlbCBtb3Rpb24gYXR0cmlidXRlczogIix0KX1mdW5jdGlvbiBjKGUsdCxyKXtpZighZS5maXhlZHJhbmdlKXt2YXIgbj1sLnNpbXBsZU1hcChlLnJhbmdlLGUucjJsKSxhPW5bMF0rKG5bMV0tblswXSkqdDtlLnJhbmdlPW4ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZS5sMnIoYSsodC1hKSpyKX0pKX19fSkpLHhlfSxtYWtlRHJhZ2dlcjpQLG1ha2VSZWN0RHJhZ2dlcjp6LG1ha2Vab29tYm94Ok4sbWFrZUNvcm5lcnM6SCx1cGRhdGVab29tYm94OmoseHlDb3JuZXJzOnEsdHJhbnNpdGlvblpvb21ib3g6QixyZW1vdmVab29tYm94OlYsc2hvd0RvdWJsZUNsaWNrTm90aWZpZXI6VSxhdHRhY2hXaGVlbEV2ZW50SGFuZGxlcjpafX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo3NSwiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCI6OTQsIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQvaGVscGVycyI6OTMsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6OTcsIi4uLy4uL2NvbXBvbmVudHMvZngiOjExNSwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6MTc3LCIuLi8uLi9saWIiOjIwMiwiLi4vLi4vbGliL2NsZWFyX2dsX2NhbnZhc2VzIjoxOTAsIi4uLy4uL2xpYi9zZXRjdXJzb3IiOjIyMiwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjoyMjQsIi4uLy4uL3Bsb3RfYXBpL3N1YnJvdXRpbmVzIjoyMzgsIi4uLy4uL3JlZ2lzdHJ5IjoyOTAsIi4uL3Bsb3RzIjoyODIsIi4vYXhlcyI6MjQ4LCIuL2F4aXNfaWRzIjoyNTEsIi4vY29uc3RhbnRzIjoyNTQsIi4vc2NhbGVfem9vbSI6MjY2LCIuL3NlbGVjdCI6MjY3LGQzOjksImhhcy1wYXNzaXZlLWV2ZW50cyI6NDMsdGlueWNvbG9yMjo1OH1dLDI1NzpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJkMyIpLGE9ZSgiLi4vLi4vY29tcG9uZW50cy9meCIpLGk9ZSgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCIpLG89ZSgiLi4vLi4vbGliL3NldGN1cnNvciIpLGw9ZSgiLi9kcmFnYm94IikubWFrZURyYWdCb3gscz1lKCIuL2NvbnN0YW50cyIpLkRSQUdHRVJTSVpFO3IuaW5pdEludGVyYWN0aW9ucz1mdW5jdGlvbihlKXt2YXIgdD1lLl9mdWxsTGF5b3V0O2lmKGUuX2NvbnRleHQuc3RhdGljUGxvdCluLnNlbGVjdChlKS5zZWxlY3RBbGwoIi5kcmFnIikucmVtb3ZlKCk7ZWxzZSBpZih0Ll9oYXMoImNhcnRlc2lhbiIpfHx0Ll9oYXMoInNwbG9tIikpe09iamVjdC5rZXlzKHQuX3Bsb3RzfHx7fSkuc29ydCgoZnVuY3Rpb24oZSxyKXtpZigodC5fcGxvdHNbZV0ubWFpbnBsb3QmJiEwKT09PSh0Ll9wbG90c1tyXS5tYWlucGxvdCYmITApKXt2YXIgbj1lLnNwbGl0KCJ5IiksYT1yLnNwbGl0KCJ5Iik7cmV0dXJuIG5bMF09PT1hWzBdP051bWJlcihuWzFdfHwxKS1OdW1iZXIoYVsxXXx8MSk6TnVtYmVyKG5bMF18fDEpLU51bWJlcihhWzBdfHwxKX1yZXR1cm4gdC5fcGxvdHNbZV0ubWFpbnBsb3Q/MTotMX0pKS5mb3JFYWNoKChmdW5jdGlvbihyKXt2YXIgbj10Ll9wbG90c1tyXSxvPW4ueGF4aXMsYz1uLnlheGlzO2lmKCFuLm1haW5wbG90KXt2YXIgdT1sKGUsbixvLl9vZmZzZXQsYy5fb2Zmc2V0LG8uX2xlbmd0aCxjLl9sZW5ndGgsIm5zIiwiZXciKTt1Lm9ubW91c2Vtb3ZlPWZ1bmN0aW9uKHQpe2UuX2Z1bGxMYXlvdXQuX3JlaG92ZXI9ZnVuY3Rpb24oKXtlLl9mdWxsTGF5b3V0Ll9ob3ZlcnN1YnBsb3Q9PT1yJiZlLl9mdWxsTGF5b3V0Ll9wbG90c1tyXSYmYS5ob3ZlcihlLHQscil9LGEuaG92ZXIoZSx0LHIpLGUuX2Z1bGxMYXlvdXQuX2xhc3Rob3Zlcj11LGUuX2Z1bGxMYXlvdXQuX2hvdmVyc3VicGxvdD1yfSx1Lm9ubW91c2VvdXQ9ZnVuY3Rpb24odCl7ZS5fZHJhZ2dpbmd8fChlLl9mdWxsTGF5b3V0Ll9ob3ZlcnN1YnBsb3Q9bnVsbCxpLnVuaG92ZXIoZSx0KSl9LGUuX2NvbnRleHQuc2hvd0F4aXNEcmFnSGFuZGxlcyYmKGwoZSxuLG8uX29mZnNldC1zLGMuX29mZnNldC1zLHMscywibiIsInciKSxsKGUsbixvLl9vZmZzZXQrby5fbGVuZ3RoLGMuX29mZnNldC1zLHMscywibiIsImUiKSxsKGUsbixvLl9vZmZzZXQtcyxjLl9vZmZzZXQrYy5fbGVuZ3RoLHMscywicyIsInciKSxsKGUsbixvLl9vZmZzZXQrby5fbGVuZ3RoLGMuX29mZnNldCtjLl9sZW5ndGgscyxzLCJzIiwiZSIpKX1pZihlLl9jb250ZXh0LnNob3dBeGlzRHJhZ0hhbmRsZXMpe2lmKHI9PT1vLl9tYWluU3VicGxvdCl7dmFyIGY9by5fbWFpbkxpbmVQb3NpdGlvbjsidG9wIj09PW8uc2lkZSYmKGYtPXMpLGwoZSxuLG8uX29mZnNldCsuMSpvLl9sZW5ndGgsZiwuOCpvLl9sZW5ndGgscywiIiwiZXciKSxsKGUsbixvLl9vZmZzZXQsZiwuMSpvLl9sZW5ndGgscywiIiwidyIpLGwoZSxuLG8uX29mZnNldCsuOSpvLl9sZW5ndGgsZiwuMSpvLl9sZW5ndGgscywiIiwiZSIpfWlmKHI9PT1jLl9tYWluU3VicGxvdCl7dmFyIGQ9Yy5fbWFpbkxpbmVQb3NpdGlvbjsicmlnaHQiIT09Yy5zaWRlJiYoZC09cyksbChlLG4sZCxjLl9vZmZzZXQrLjEqYy5fbGVuZ3RoLHMsLjgqYy5fbGVuZ3RoLCJucyIsIiIpLGwoZSxuLGQsYy5fb2Zmc2V0Ky45KmMuX2xlbmd0aCxzLC4xKmMuX2xlbmd0aCwicyIsIiIpLGwoZSxuLGQsYy5fb2Zmc2V0LHMsLjEqYy5fbGVuZ3RoLCJuIiwiIil9fX0pKTt2YXIgbz10Ll9ob3ZlcmxheWVyLm5vZGUoKTtvLm9ubW91c2Vtb3ZlPWZ1bmN0aW9uKHIpe3IudGFyZ2V0PWUuX2Z1bGxMYXlvdXQuX2xhc3Rob3ZlcixhLmhvdmVyKGUscix0Ll9ob3ZlcnN1YnBsb3QpfSxvLm9uY2xpY2s9ZnVuY3Rpb24odCl7dC50YXJnZXQ9ZS5fZnVsbExheW91dC5fbGFzdGhvdmVyLGEuY2xpY2soZSx0KX0sby5vbm1vdXNlZG93bj1mdW5jdGlvbih0KXtlLl9mdWxsTGF5b3V0Ll9sYXN0aG92ZXIub25tb3VzZWRvd24odCl9LHIudXBkYXRlRngoZSl9fSxyLnVwZGF0ZUZ4PWZ1bmN0aW9uKGUpe3ZhciB0PWUuX2Z1bGxMYXlvdXQscj0icGFuIj09PXQuZHJhZ21vZGU/Im1vdmUiOiJjcm9zc2hhaXIiO28odC5fZHJhZ2dlcnMscil9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiOjk0LCIuLi8uLi9jb21wb25lbnRzL2Z4IjoxMTUsIi4uLy4uL2xpYi9zZXRjdXJzb3IiOjIyMiwiLi9jb25zdGFudHMiOjI1NCwiLi9kcmFnYm94IjoyNTYsZDM6OX1dLDI1ODpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9e2NsZWFyT3V0bGluZUNvbnRyb2xsZXJzOmZ1bmN0aW9uKGUpe3ZhciB0PWUuX2Z1bGxMYXlvdXQuX3pvb21sYXllcjt0JiZ0LnNlbGVjdEFsbCgiLm91dGxpbmUtY29udHJvbGxlcnMiKS5yZW1vdmUoKX0sY2xlYXJTZWxlY3Q6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fZnVsbExheW91dC5fem9vbWxheWVyO3QmJnQuc2VsZWN0QWxsKCIuc2VsZWN0LW91dGxpbmUiKS5yZW1vdmUoKSxlLl9mdWxsTGF5b3V0Ll9kcmF3aW5nPSExfX19LHt9XSwyNTk6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vbGliIikuc3RyVHJhbnNsYXRlO2Z1bmN0aW9uIGEoZSx0KXtzd2l0Y2goZS50eXBlKXtjYXNlImxvZyI6cmV0dXJuIGUucDJkKHQpO2Nhc2UiZGF0ZSI6cmV0dXJuIGUucDJyKHQsMCxlLmNhbGVuZGFyKTtkZWZhdWx0OnJldHVybiBlLnAycih0KX19dC5leHBvcnRzPXtwMnI6YSxyMnA6ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZS50eXBlKXtjYXNlImxvZyI6cmV0dXJuIGUuZDJwKHQpO2Nhc2UiZGF0ZSI6cmV0dXJuIGUucjJwKHQsMCxlLmNhbGVuZGFyKTtkZWZhdWx0OnJldHVybiBlLnIycCh0KX19LGF4VmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9InkiPT09ZS5faWQuY2hhckF0KDApPzE6MDtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGEoZSxyW3RdKX19LGdldFRyYW5zZm9ybTpmdW5jdGlvbihlKXtyZXR1cm4gbihlLnhheGlzLl9vZmZzZXQsZS55YXhpcy5fb2Zmc2V0KX19fSx7Ii4uLy4uL2xpYiI6MjAyfV0sMjYwOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL3JlZ2lzdHJ5IiksYT1lKCIuLi8uLi9saWIiKSxpPWUoIi4vYXhpc19pZHMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7dmFyIG89dFtlXTtpZihBcnJheS5pc0FycmF5KG8pKWZvcih2YXIgbD1uLnN1YnBsb3RzUmVnaXN0cnkuY2FydGVzaWFuLHM9bC5pZFJlZ2V4LGM9ci5fc3VicGxvdHMsdT1jLnhheGlzLGY9Yy55YXhpcyxkPWMuY2FydGVzaWFuLHA9ci5faGFzKCJjYXJ0ZXNpYW4iKXx8ci5faGFzKCJnbDJkIiksaD0wO2g8by5sZW5ndGg7aCsrKXt2YXIgZz1vW2hdO2lmKGEuaXNQbGFpbk9iamVjdChnKSl7dmFyIHY9aS5jbGVhbklkKGcueHJlZiwieCIsITEpLG09aS5jbGVhbklkKGcueXJlZiwieSIsITEpLHk9cy54LnRlc3QodikseD1zLnkudGVzdChtKTtpZih5fHx4KXtwfHxhLnB1c2hVbmlxdWUoci5fYmFzZVBsb3RNb2R1bGVzLGwpO3ZhciBiPSExO3kmJi0xPT09dS5pbmRleE9mKHYpJiYodS5wdXNoKHYpLGI9ITApLHgmJi0xPT09Zi5pbmRleE9mKG0pJiYoZi5wdXNoKG0pLGI9ITApLGImJnkmJngmJmQucHVzaCh2K20pfX19fX19LHsiLi4vLi4vbGliIjoyMDIsIi4uLy4uL3JlZ2lzdHJ5IjoyOTAsIi4vYXhpc19pZHMiOjI1MX1dLDI2MTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJkMyIpLGE9ZSgiLi4vLi4vcmVnaXN0cnkiKSxpPWUoIi4uLy4uL2xpYiIpLG89ZSgiLi4vcGxvdHMiKSxsPWUoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLHM9ZSgiLi4vZ2V0X2RhdGEiKS5nZXRNb2R1bGVDYWxjRGF0YSxjPWUoIi4vYXhpc19pZHMiKSx1PWUoIi4vY29uc3RhbnRzIiksZj1lKCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLGQ9aS5lbnN1cmVTaW5nbGU7ZnVuY3Rpb24gcChlLHQscil7cmV0dXJuIGkuZW5zdXJlU2luZ2xlKGUsdCxyLChmdW5jdGlvbihlKXtlLmRhdHVtKHIpfSkpfWZ1bmN0aW9uIGgoZSx0LHIsaSxvKXtmb3IodmFyIGMsZixkLHA9dS50cmFjZUxheWVyQ2xhc3NlcyxoPWUuX2Z1bGxMYXlvdXQsZz1oLl9tb2R1bGVzLHY9W10sbT1bXSx5PTA7eTxnLmxlbmd0aDt5Kyspe3ZhciB4PShjPWdbeV0pLm5hbWUsYj1hLm1vZHVsZXNbeF0uY2F0ZWdvcmllcztpZihiLnN2Zyl7dmFyIF89Yy5sYXllck5hbWV8fHgrImxheWVyIix3PWMucGxvdDtkPShmPXMocix3KSlbMF0scj1mWzFdLGQubGVuZ3RoJiZ2LnB1c2goe2k6cC5pbmRleE9mKF8pLGNsYXNzTmFtZTpfLHBsb3RNZXRob2Q6dyxjZE1vZHVsZTpkfSksYi56b29tU2NhbGUmJm0ucHVzaCgiLiIrXyl9fXYuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5pLXQuaX0pKTt2YXIgVD10LnBsb3Quc2VsZWN0QWxsKCJnLm1sYXllciIpLmRhdGEodiwoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2xhc3NOYW1lfSkpO2lmKFQuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNsYXNzTmFtZX0pKS5jbGFzc2VkKCJtbGF5ZXIiLCEwKS5jbGFzc2VkKCJyYW5nZXBsb3QiLHQuaXNSYW5nZVBsb3QpLFQuZXhpdCgpLnJlbW92ZSgpLFQub3JkZXIoKSxULmVhY2goKGZ1bmN0aW9uKHIpe3ZhciBhPW4uc2VsZWN0KHRoaXMpLHM9ci5jbGFzc05hbWU7ci5wbG90TWV0aG9kKGUsdCxyLmNkTW9kdWxlLGEsaSxvKSwtMT09PXUuY2xpcE9uQXhpc0ZhbHNlUXVlcnkuaW5kZXhPZigiLiIrcykmJmwuc2V0Q2xpcFVybChhLHQubGF5ZXJDbGlwSWQsZSl9KSksaC5faGFzKCJzY2F0dGVyZ2wiKSYmKGM9YS5nZXRNb2R1bGUoInNjYXR0ZXJnbCIpLGQ9cyhyLGMpWzBdLGMucGxvdChlLHQsZCkpLCFlLl9jb250ZXh0LnN0YXRpY1Bsb3QmJih0Ll9oYXNDbGlwT25BeGlzRmFsc2UmJih0LmNsaXBPbkF4aXNGYWxzZVRyYWNlcz10LnBsb3Quc2VsZWN0QWxsKHUuY2xpcE9uQXhpc0ZhbHNlUXVlcnkuam9pbigiLCIpKS5zZWxlY3RBbGwoIi50cmFjZSIpKSxtLmxlbmd0aCkpe3ZhciBrPXQucGxvdC5zZWxlY3RBbGwobS5qb2luKCIsIikpLnNlbGVjdEFsbCgiLnRyYWNlIik7dC56b29tU2NhbGVQdHM9ay5zZWxlY3RBbGwoInBhdGgucG9pbnQiKSx0Lnpvb21TY2FsZVR4dD1rLnNlbGVjdEFsbCgiLnRleHRwb2ludCIpfX1mdW5jdGlvbiBnKGUsdCl7dmFyIHI9dC5wbG90Z3JvdXAsbj10LmlkLGE9dS5sYXllclZhbHVlMmxheWVyQ2xhc3NbdC54YXhpcy5sYXllcl0saT11LmxheWVyVmFsdWUybGF5ZXJDbGFzc1t0LnlheGlzLmxheWVyXSxvPWUuX2Z1bGxMYXlvdXQuX2hhc09ubHlMYXJnZVNwbG9tcztpZih0Lm1haW5wbG90KXt2YXIgbD10Lm1haW5wbG90aW5mbyxzPWwucGxvdGdyb3VwLGY9bisiLXgiLGg9bisiLXkiO3QuZ3JpZGxheWVyPWwuZ3JpZGxheWVyLHQuemVyb2xpbmVsYXllcj1sLnplcm9saW5lbGF5ZXIsZChsLm92ZXJsaW5lc0JlbG93LCJwYXRoIixmKSxkKGwub3ZlcmxpbmVzQmVsb3csInBhdGgiLGgpLGQobC5vdmVyYXhlc0JlbG93LCJnIixmKSxkKGwub3ZlcmF4ZXNCZWxvdywiZyIsaCksdC5wbG90PWQobC5vdmVycGxvdCwiZyIsbiksZChsLm92ZXJsaW5lc0Fib3ZlLCJwYXRoIixmKSxkKGwub3ZlcmxpbmVzQWJvdmUsInBhdGgiLGgpLGQobC5vdmVyYXhlc0Fib3ZlLCJnIixmKSxkKGwub3ZlcmF4ZXNBYm92ZSwiZyIsaCksdC54bGluZXM9cy5zZWxlY3QoIi5vdmVybGluZXMtIithKS5zZWxlY3QoIi4iK2YpLHQueWxpbmVzPXMuc2VsZWN0KCIub3ZlcmxpbmVzLSIraSkuc2VsZWN0KCIuIitoKSx0LnhheGlzbGF5ZXI9cy5zZWxlY3QoIi5vdmVyYXhlcy0iK2EpLnNlbGVjdCgiLiIrZiksdC55YXhpc2xheWVyPXMuc2VsZWN0KCIub3ZlcmF4ZXMtIitpKS5zZWxlY3QoIi4iK2gpfWVsc2UgaWYobyl0LnhsaW5lcz1kKHIsInBhdGgiLCJ4bGluZXMtYWJvdmUiKSx0LnlsaW5lcz1kKHIsInBhdGgiLCJ5bGluZXMtYWJvdmUiKSx0LnhheGlzbGF5ZXI9ZChyLCJnIiwieGF4aXNsYXllci1hYm92ZSIpLHQueWF4aXNsYXllcj1kKHIsImciLCJ5YXhpc2xheWVyLWFib3ZlIik7ZWxzZXt2YXIgZz1kKHIsImciLCJsYXllci1zdWJwbG90Iik7dC5zaGFwZWxheWVyPWQoZywiZyIsInNoYXBlbGF5ZXIiKSx0LmltYWdlbGF5ZXI9ZChnLCJnIiwiaW1hZ2VsYXllciIpLHQuZ3JpZGxheWVyPWQociwiZyIsImdyaWRsYXllciIpLHQuemVyb2xpbmVsYXllcj1kKHIsImciLCJ6ZXJvbGluZWxheWVyIiksZChyLCJwYXRoIiwieGxpbmVzLWJlbG93IiksZChyLCJwYXRoIiwieWxpbmVzLWJlbG93IiksdC5vdmVybGluZXNCZWxvdz1kKHIsImciLCJvdmVybGluZXMtYmVsb3ciKSxkKHIsImciLCJ4YXhpc2xheWVyLWJlbG93IiksZChyLCJnIiwieWF4aXNsYXllci1iZWxvdyIpLHQub3ZlcmF4ZXNCZWxvdz1kKHIsImciLCJvdmVyYXhlcy1iZWxvdyIpLHQucGxvdD1kKHIsImciLCJwbG90IiksdC5vdmVycGxvdD1kKHIsImciLCJvdmVycGxvdCIpLHQueGxpbmVzPWQociwicGF0aCIsInhsaW5lcy1hYm92ZSIpLHQueWxpbmVzPWQociwicGF0aCIsInlsaW5lcy1hYm92ZSIpLHQub3ZlcmxpbmVzQWJvdmU9ZChyLCJnIiwib3ZlcmxpbmVzLWFib3ZlIiksZChyLCJnIiwieGF4aXNsYXllci1hYm92ZSIpLGQociwiZyIsInlheGlzbGF5ZXItYWJvdmUiKSx0Lm92ZXJheGVzQWJvdmU9ZChyLCJnIiwib3ZlcmF4ZXMtYWJvdmUiKSx0LnhsaW5lcz1yLnNlbGVjdCgiLnhsaW5lcy0iK2EpLHQueWxpbmVzPXIuc2VsZWN0KCIueWxpbmVzLSIraSksdC54YXhpc2xheWVyPXIuc2VsZWN0KCIueGF4aXNsYXllci0iK2EpLHQueWF4aXNsYXllcj1yLnNlbGVjdCgiLnlheGlzbGF5ZXItIitpKX1vfHwocCh0LmdyaWRsYXllciwiZyIsdC54YXhpcy5faWQpLHAodC5ncmlkbGF5ZXIsImciLHQueWF4aXMuX2lkKSx0LmdyaWRsYXllci5zZWxlY3RBbGwoImciKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlWzBdfSkpLnNvcnQoYy5pZFNvcnQpKSx0LnhsaW5lcy5zdHlsZSgiZmlsbCIsIm5vbmUiKS5jbGFzc2VkKCJjcmlzcCIsITApLHQueWxpbmVzLnN0eWxlKCJmaWxsIiwibm9uZSIpLmNsYXNzZWQoImNyaXNwIiwhMCl9ZnVuY3Rpb24gdihlLHQpe2lmKGUpe3ZhciByPXt9O2Zvcih2YXIgYSBpbiBlLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciBhPWVbMF07bi5zZWxlY3QodGhpcykucmVtb3ZlKCksbShhLHQpLHJbYV09ITB9KSksdC5fcGxvdHMpZm9yKHZhciBpPXQuX3Bsb3RzW2FdLm92ZXJsYXlzfHxbXSxvPTA7bzxpLmxlbmd0aDtvKyspe3ZhciBsPWlbb107cltsLmlkXSYmbC5wbG90LnNlbGVjdEFsbCgiLnRyYWNlIikucmVtb3ZlKCl9fX1mdW5jdGlvbiBtKGUsdCl7dC5fZHJhZ2dlcnMuc2VsZWN0QWxsKCJnLiIrZSkucmVtb3ZlKCksdC5fZGVmcy5zZWxlY3QoIiNjbGlwIit0Ll91aWQrZSsicGxvdCIpLnJlbW92ZSgpfXIubmFtZT0iY2FydGVzaWFuIixyLmF0dHI9WyJ4YXhpcyIsInlheGlzIl0sci5pZFJvb3Q9WyJ4IiwieSJdLHIuaWRSZWdleD11LmlkUmVnZXgsci5hdHRyUmVnZXg9dS5hdHRyUmVnZXgsci5hdHRyaWJ1dGVzPWUoIi4vYXR0cmlidXRlcyIpLHIubGF5b3V0QXR0cmlidXRlcz1lKCIuL2xheW91dF9hdHRyaWJ1dGVzIiksci5zdXBwbHlMYXlvdXREZWZhdWx0cz1lKCIuL2xheW91dF9kZWZhdWx0cyIpLHIudHJhbnNpdGlvbkF4ZXM9ZSgiLi90cmFuc2l0aW9uX2F4ZXMiKSxyLmZpbmFsaXplU3VicGxvdHM9ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGEsbz10Ll9zdWJwbG90cyxsPW8ueGF4aXMscz1vLnlheGlzLGY9by5jYXJ0ZXNpYW4sZD1mLmNvbmNhdChvLmdsMmR8fFtdKSxwPXt9LGg9e307Zm9yKHI9MDtyPGQubGVuZ3RoO3IrKyl7dmFyIGc9ZFtyXS5zcGxpdCgieSIpO3BbZ1swXV09MSxoWyJ5IitnWzFdXT0xfWZvcihyPTA7cjxsLmxlbmd0aDtyKyspcFtuPWxbcl1dfHwoYT0oZVtjLmlkMm5hbWUobildfHx7fSkuYW5jaG9yLHUuaWRSZWdleC55LnRlc3QoYSl8fChhPSJ5IiksZi5wdXNoKG4rYSksZC5wdXNoKG4rYSksaFthXXx8KGhbYV09MSxpLnB1c2hVbmlxdWUocyxhKSkpO2ZvcihyPTA7cjxzLmxlbmd0aDtyKyspaFthPXNbcl1dfHwobj0oZVtjLmlkMm5hbWUoYSldfHx7fSkuYW5jaG9yLHUuaWRSZWdleC54LnRlc3Qobil8fChuPSJ4IiksZi5wdXNoKG4rYSksZC5wdXNoKG4rYSkscFtuXXx8KHBbbl09MSxpLnB1c2hVbmlxdWUobCxuKSkpO2lmKCFkLmxlbmd0aCl7Zm9yKHZhciB2IGluIG49IiIsYT0iIixlKXtpZih1LmF0dHJSZWdleC50ZXN0KHYpKSJ4Ij09PXYuY2hhckF0KDApPyghbnx8K3Yuc3Vic3RyKDUpPCtuLnN1YnN0cig1KSkmJihuPXYpOighYXx8K3Yuc3Vic3RyKDUpPCthLnN1YnN0cig1KSkmJihhPXYpfW49bj9jLm5hbWUyaWQobik6IngiLGE9YT9jLm5hbWUyaWQoYSk6InkiLGwucHVzaChuKSxzLnB1c2goYSksZi5wdXNoKG4rYSl9fSxyLnBsb3Q9ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGEsaT1lLl9mdWxsTGF5b3V0LG89aS5fc3VicGxvdHMuY2FydGVzaWFuLGw9ZS5jYWxjZGF0YTtpZighQXJyYXkuaXNBcnJheSh0KSlmb3IodD1bXSxhPTA7YTxsLmxlbmd0aDthKyspdC5wdXNoKGEpO2ZvcihhPTA7YTxvLmxlbmd0aDthKyspe2Zvcih2YXIgcyxjPW9bYV0sdT1pLl9wbG90c1tjXSxmPVtdLGQ9MDtkPGwubGVuZ3RoO2QrKyl7dmFyIHA9bFtkXSxnPXBbMF0udHJhY2U7Zy54YXhpcytnLnlheGlzPT09YyYmKCgtMSE9PXQuaW5kZXhPZihnLmluZGV4KXx8Zy5jYXJwZXQpJiYocyYmc1swXS50cmFjZS54YXhpcytzWzBdLnRyYWNlLnlheGlzPT09YyYmLTEhPT1bInRvbmV4dHgiLCJ0b25leHR5IiwidG9uZXh0Il0uaW5kZXhPZihnLmZpbGwpJiYtMT09PWYuaW5kZXhPZihzKSYmZi5wdXNoKHMpLGYucHVzaChwKSkscz1wKX1oKGUsdSxmLHIsbil9fSxyLmNsZWFuPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhLGksbyxsPW4uX3Bsb3RzfHx7fSxzPXQuX3Bsb3RzfHx7fSx1PW4uX3N1YnBsb3RzfHx7fTtpZihuLl9oYXNPbmx5TGFyZ2VTcGxvbXMmJiF0Ll9oYXNPbmx5TGFyZ2VTcGxvbXMpZm9yKG8gaW4gbCkoYT1sW29dKS5wbG90Z3JvdXAmJmEucGxvdGdyb3VwLnJlbW92ZSgpO3ZhciBmPW4uX2hhcyYmbi5faGFzKCJnbCIpLGQ9dC5faGFzJiZ0Ll9oYXMoImdsIik7aWYoZiYmIWQpZm9yKG8gaW4gbCkoYT1sW29dKS5fc2NlbmUmJmEuX3NjZW5lLmRlc3Ryb3koKTtpZih1LnhheGlzJiZ1LnlheGlzKXt2YXIgcD1jLmxpc3RJZHMoe19mdWxsTGF5b3V0Om59KTtmb3IoaT0wO2k8cC5sZW5ndGg7aSsrKXt2YXIgaD1wW2ldO3RbYy5pZDJuYW1lKGgpXXx8bi5faW5mb2xheWVyLnNlbGVjdEFsbCgiLmctIitoKyJ0aXRsZSIpLnJlbW92ZSgpfX12YXIgZz1uLl9oYXMmJm4uX2hhcygiY2FydGVzaWFuIikseT10Ll9oYXMmJnQuX2hhcygiY2FydGVzaWFuIik7aWYoZyYmIXkpdihuLl9jYXJ0ZXNpYW5sYXllci5zZWxlY3RBbGwoIi5zdWJwbG90Iiksbiksbi5fZGVmcy5zZWxlY3RBbGwoIi5heGVzY2xpcCIpLnJlbW92ZSgpLGRlbGV0ZSBuLl9heGlzQ29uc3RyYWludEdyb3VwcyxkZWxldGUgbi5fYXhpc01hdGNoR3JvdXBzO2Vsc2UgaWYodS5jYXJ0ZXNpYW4pZm9yKGk9MDtpPHUuY2FydGVzaWFuLmxlbmd0aDtpKyspe3ZhciB4PXUuY2FydGVzaWFuW2ldO2lmKCFzW3hdKXt2YXIgYj0iLiIreCsiLC4iK3grIi14LC4iK3grIi15IjtuLl9jYXJ0ZXNpYW5sYXllci5zZWxlY3RBbGwoYikucmVtb3ZlKCksbSh4LG4pfX19LHIuZHJhd0ZyYW1ld29yaz1mdW5jdGlvbihlKXt2YXIgdD1lLl9mdWxsTGF5b3V0LHI9ZnVuY3Rpb24oZSl7dmFyIHQscixuLGEsaSxvLGw9ZS5fZnVsbExheW91dCxzPWwuX3N1YnBsb3RzLmNhcnRlc2lhbixjPXMubGVuZ3RoLHU9W10sZj1bXTtmb3IodD0wO3Q8Yzt0Kyspe249c1t0XSxhPWwuX3Bsb3RzW25dLGk9YS54YXhpcyxvPWEueWF4aXM7dmFyIGQ9aS5fbWFpbkF4aXMscD1vLl9tYWluQXhpcyxoPWQuX2lkK3AuX2lkLGc9bC5fcGxvdHNbaF07YS5vdmVybGF5cz1bXSxoIT09biYmZz8oYS5tYWlucGxvdD1oLGEubWFpbnBsb3RpbmZvPWcsZi5wdXNoKG4pKTooYS5tYWlucGxvdD12b2lkIDAsYS5tYWlucGxvdGluZm89dm9pZCAwLHUucHVzaChuKSl9Zm9yKHQ9MDt0PGYubGVuZ3RoO3QrKyluPWZbdF0sKGE9bC5fcGxvdHNbbl0pLm1haW5wbG90aW5mby5vdmVybGF5cy5wdXNoKGEpO3ZhciB2PXUuY29uY2F0KGYpLG09bmV3IEFycmF5KGMpO2Zvcih0PTA7dDxjO3QrKyl7bj12W3RdLGE9bC5fcGxvdHNbbl0saT1hLnhheGlzLG89YS55YXhpczt2YXIgeT1bbixpLmxheWVyLG8ubGF5ZXIsaS5vdmVybGF5aW5nfHwiIixvLm92ZXJsYXlpbmd8fCIiXTtmb3Iocj0wO3I8YS5vdmVybGF5cy5sZW5ndGg7cisrKXkucHVzaChhLm92ZXJsYXlzW3JdLmlkKTttW3RdPXl9cmV0dXJuIG19KGUpLGE9dC5fY2FydGVzaWFubGF5ZXIuc2VsZWN0QWxsKCIuc3VicGxvdCIpLmRhdGEocixTdHJpbmcpO2EuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKGUpe3JldHVybiJzdWJwbG90ICIrZVswXX0pKSxhLm9yZGVyKCksYS5leGl0KCkuY2FsbCh2LHQpLGEuZWFjaCgoZnVuY3Rpb24ocil7dmFyIGE9clswXSxpPXQuX3Bsb3RzW2FdO2kucGxvdGdyb3VwPW4uc2VsZWN0KHRoaXMpLGcoZSxpKSxpLmRyYWdsYXllcj1kKHQuX2RyYWdnZXJzLCJnIixhKX0pKX0sci5yYW5nZVBsb3Q9ZnVuY3Rpb24oZSx0LHIpe2coZSx0KSxoKGUsdCxyKSxvLnN0eWxlKGUpfSxyLnRvU1ZHPWZ1bmN0aW9uKGUpe3ZhciB0PWUuX2Z1bGxMYXlvdXQuX2dsaW1hZ2VzLHI9bi5zZWxlY3QoZSkuc2VsZWN0QWxsKCIuc3ZnLWNvbnRhaW5lciIpO3IuZmlsdGVyKChmdW5jdGlvbihlLHQpe3JldHVybiB0PT09ci5zaXplKCktMX0pKS5zZWxlY3RBbGwoIi5nbC1jYW52YXMtY29udGV4dCwgLmdsLWNhbnZhcy1mb2N1cyIpLmVhY2goKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50b0RhdGFVUkwoImltYWdlL3BuZyIpO3QuYXBwZW5kKCJzdmc6aW1hZ2UiKS5hdHRyKHt4bWxuczpmLnN2ZywieGxpbms6aHJlZiI6ZSxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIix4OjAseTowLHdpZHRoOnRoaXMud2lkdGgsaGVpZ2h0OnRoaXMuaGVpZ2h0fSl9KSl9LHIudXBkYXRlRng9ZSgiLi9ncmFwaF9pbnRlcmFjdCIpLnVwZGF0ZUZ4fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6OTcsIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjoxODIsIi4uLy4uL2xpYiI6MjAyLCIuLi8uLi9yZWdpc3RyeSI6MjkwLCIuLi9nZXRfZGF0YSI6Mjc4LCIuLi9wbG90cyI6MjgyLCIuL2F0dHJpYnV0ZXMiOjI0NiwiLi9heGlzX2lkcyI6MjUxLCIuL2NvbnN0YW50cyI6MjU0LCIuL2dyYXBoX2ludGVyYWN0IjoyNTcsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjI2MiwiLi9sYXlvdXRfZGVmYXVsdHMiOjI2MywiLi90cmFuc2l0aW9uX2F4ZXMiOjI3MixkMzo5fV0sMjYyOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uL2ZvbnRfYXR0cmlidXRlcyIpLGE9ZSgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIiksaT1lKCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyIpLmRhc2gsbz1lKCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxsPWUoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheSxzPShlKCIuLi8uLi9jb25zdGFudHMvZG9jcyIpLkZPUk1BVF9MSU5LLGUoIi4uLy4uL2NvbnN0YW50cy9kb2NzIikuREFURV9GT1JNQVRfTElOSyxlKCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuT05FREFZKSxjPWUoIi4vY29uc3RhbnRzIiksdT1jLkhPVVJfUEFUVEVSTixmPWMuV0VFS0RBWV9QQVRURVJOO3QuZXhwb3J0cz17dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6InBsb3QifSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS5kZWZhdWx0TGluZSxlZGl0VHlwZToidGlja3MifSx0aXRsZTp7dGV4dDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToidGlja3MifSxmb250Om4oe2VkaXRUeXBlOiJ0aWNrcyJ9KSxzdGFuZG9mZjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxlZGl0VHlwZToidGlja3MifSxlZGl0VHlwZToidGlja3MifSx0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyItIiwibGluZWFyIiwibG9nIiwiZGF0ZSIsImNhdGVnb3J5IiwibXVsdGljYXRlZ29yeSJdLGRmbHQ6Ii0iLGVkaXRUeXBlOiJjYWxjIixfbm9UZW1wbGF0aW5nOiEwfSxhdXRvdHlwZW51bWJlcnM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImNvbnZlcnQgdHlwZXMiLCJzdHJpY3QiXSxkZmx0OiJjb252ZXJ0IHR5cGVzIixlZGl0VHlwZToiY2FsYyJ9LGF1dG9yYW5nZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMCwhMSwicmV2ZXJzZWQiXSxkZmx0OiEwLGVkaXRUeXBlOiJheHJhbmdlIixpbXBsaWVkRWRpdHM6eyJyYW5nZVswXSI6dm9pZCAwLCJyYW5nZVsxXSI6dm9pZCAwfX0scmFuZ2Vtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJub3JtYWwiLCJ0b3plcm8iLCJub25uZWdhdGl2ZSJdLGRmbHQ6Im5vcm1hbCIsZWRpdFR5cGU6InBsb3QifSxyYW5nZTp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJheHJhbmdlIixpbXBsaWVkRWRpdHM6eyJeYXV0b3JhbmdlIjohMX0sYW5pbTohMH0se3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImF4cmFuZ2UiLGltcGxpZWRFZGl0czp7Il5hdXRvcmFuZ2UiOiExfSxhbmltOiEwfV0sZWRpdFR5cGU6ImF4cmFuZ2UiLGltcGxpZWRFZGl0czp7YXV0b3JhbmdlOiExfSxhbmltOiEwfSxmaXhlZHJhbmdlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0sc2NhbGVhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbYy5pZFJlZ2V4LngudG9TdHJpbmcoKSxjLmlkUmVnZXgueS50b1N0cmluZygpXSxlZGl0VHlwZToicGxvdCJ9LHNjYWxlcmF0aW86e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJwbG90In0sY29uc3RyYWluOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJyYW5nZSIsImRvbWFpbiJdLGVkaXRUeXBlOiJwbG90In0sY29uc3RyYWludG93YXJkOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsZWZ0IiwiY2VudGVyIiwicmlnaHQiLCJ0b3AiLCJtaWRkbGUiLCJib3R0b20iXSxlZGl0VHlwZToicGxvdCJ9LG1hdGNoZXM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbYy5pZFJlZ2V4LngudG9TdHJpbmcoKSxjLmlkUmVnZXgueS50b1N0cmluZygpXSxlZGl0VHlwZToiY2FsYyJ9LHJhbmdlYnJlYWtzOmwoInJhbmdlYnJlYWsiLHtlbmFibGVkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sYm91bmRzOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSx7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9XSxlZGl0VHlwZToiY2FsYyJ9LHBhdHRlcm46e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbZix1LCIiXSxlZGl0VHlwZToiY2FsYyJ9LHZhbHVlczp7dmFsVHlwZToiaW5mb19hcnJheSIsZnJlZUxlbmd0aDohMCxlZGl0VHlwZToiY2FsYyIsaXRlbXM6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifX0sZHZhbHVlOnt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIixtaW46MCxkZmx0OnN9LGVkaXRUeXBlOiJjYWxjIn0pLHRpY2ttb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwibGluZWFyIiwiYXJyYXkiXSxlZGl0VHlwZToidGlja3MiLGltcGxpZWRFZGl0czp7dGljazA6dm9pZCAwLGR0aWNrOnZvaWQgMH19LG50aWNrczp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpY2swOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJ0aWNrcyIsaW1wbGllZEVkaXRzOnt0aWNrbW9kZToibGluZWFyIn19LGR0aWNrOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJ0aWNrcyIsaW1wbGllZEVkaXRzOnt0aWNrbW9kZToibGluZWFyIn19LHRpY2t2YWxzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToidGlja3MifSx0aWNrdGV4dDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6InRpY2tzIn0sdGlja3M6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm91dHNpZGUiLCJpbnNpZGUiLCIiXSxlZGl0VHlwZToidGlja3MifSx0aWNrc29uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsYWJlbHMiLCJib3VuZGFyaWVzIl0sZGZsdDoibGFiZWxzIixlZGl0VHlwZToidGlja3MifSx0aWNrbGFiZWxtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJpbnN0YW50IiwicGVyaW9kIl0sZGZsdDoiaW5zdGFudCIsZWRpdFR5cGU6InRpY2tzIn0sdGlja2xhYmVscG9zaXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm91dHNpZGUiLCJpbnNpZGUiLCJvdXRzaWRlIHRvcCIsImluc2lkZSB0b3AiLCJvdXRzaWRlIGxlZnQiLCJpbnNpZGUgbGVmdCIsIm91dHNpZGUgcmlnaHQiLCJpbnNpZGUgcmlnaHQiLCJvdXRzaWRlIGJvdHRvbSIsImluc2lkZSBib3R0b20iXSxkZmx0OiJvdXRzaWRlIixlZGl0VHlwZToiY2FsYyJ9LG1pcnJvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMCwidGlja3MiLCExLCJhbGwiLCJhbGx0aWNrcyJdLGRmbHQ6ITEsZWRpdFR5cGU6InRpY2tzK2xheW91dHN0eWxlIn0sdGlja2xlbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjUsZWRpdFR5cGU6InRpY2tzIn0sdGlja3dpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToidGlja3MifSx0aWNrY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEuZGVmYXVsdExpbmUsZWRpdFR5cGU6InRpY2tzIn0sc2hvd3RpY2tsYWJlbHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InRpY2tzIn0sYXV0b21hcmdpbjp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToidGlja3MifSxzaG93c3Bpa2VzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJtb2RlYmFyIn0sc3Bpa2Vjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bnVsbCxlZGl0VHlwZToibm9uZSJ9LHNwaWtldGhpY2tuZXNzOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MyxlZGl0VHlwZToibm9uZSJ9LHNwaWtlZGFzaDpvKHt9LGkse2RmbHQ6ImRhc2giLGVkaXRUeXBlOiJub25lIn0pLHNwaWtlbW9kZTp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsidG9heGlzIiwiYWNyb3NzIiwibWFya2VyIl0sZGZsdDoidG9heGlzIixlZGl0VHlwZToibm9uZSJ9LHNwaWtlc25hcDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZGF0YSIsImN1cnNvciIsImhvdmVyZWQgZGF0YSJdLGRmbHQ6ImRhdGEiLGVkaXRUeXBlOiJub25lIn0sdGlja2ZvbnQ6bih7ZWRpdFR5cGU6InRpY2tzIn0pLHRpY2thbmdsZTp7dmFsVHlwZToiYW5nbGUiLGRmbHQ6ImF1dG8iLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpY2twcmVmaXg6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToidGlja3MifSxzaG93dGlja3ByZWZpeDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWxsIiwiZmlyc3QiLCJsYXN0Iiwibm9uZSJdLGRmbHQ6ImFsbCIsZWRpdFR5cGU6InRpY2tzIn0sdGlja3N1ZmZpeDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJ0aWNrcyJ9LHNob3d0aWNrc3VmZml4Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhbGwiLCJmaXJzdCIsImxhc3QiLCJub25lIl0sZGZsdDoiYWxsIixlZGl0VHlwZToidGlja3MifSxzaG93ZXhwb25lbnQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsImZpcnN0IiwibGFzdCIsIm5vbmUiXSxkZmx0OiJhbGwiLGVkaXRUeXBlOiJ0aWNrcyJ9LGV4cG9uZW50Zm9ybWF0Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJub25lIiwiZSIsIkUiLCJwb3dlciIsIlNJIiwiQiJdLGRmbHQ6IkIiLGVkaXRUeXBlOiJ0aWNrcyJ9LG1pbmV4cG9uZW50Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MyxtaW46MCxlZGl0VHlwZToidGlja3MifSxzZXBhcmF0ZXRob3VzYW5kczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToidGlja3MifSx0aWNrZm9ybWF0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6InRpY2tzIn0sdGlja2Zvcm1hdHN0b3BzOmwoInRpY2tmb3JtYXRzdG9wIix7ZW5hYmxlZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToidGlja3MifSxkdGlja3JhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InRpY2tzIn0se3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InRpY2tzIn1dLGVkaXRUeXBlOiJ0aWNrcyJ9LHZhbHVlOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6InRpY2tzIn0sZWRpdFR5cGU6InRpY2tzIn0pLGhvdmVyZm9ybWF0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6Im5vbmUifSxzaG93bGluZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToidGlja3MrbGF5b3V0c3R5bGUifSxsaW5lY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEuZGVmYXVsdExpbmUsZWRpdFR5cGU6ImxheW91dHN0eWxlIn0sbGluZXdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToidGlja3MrbGF5b3V0c3R5bGUifSxzaG93Z3JpZDp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6InRpY2tzIn0sZ3JpZGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDphLmxpZ2h0TGluZSxlZGl0VHlwZToidGlja3MifSxncmlkd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJ0aWNrcyJ9LHplcm9saW5lOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToidGlja3MifSx6ZXJvbGluZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDphLmRlZmF1bHRMaW5lLGVkaXRUeXBlOiJ0aWNrcyJ9LHplcm9saW5ld2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJ0aWNrcyJ9LHNob3dkaXZpZGVyczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToidGlja3MifSxkaXZpZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEuZGVmYXVsdExpbmUsZWRpdFR5cGU6InRpY2tzIn0sZGl2aWRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToidGlja3MifSxhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZyZWUiLGMuaWRSZWdleC54LnRvU3RyaW5nKCksYy5pZFJlZ2V4LnkudG9TdHJpbmcoKV0sZWRpdFR5cGU6InBsb3QifSxzaWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiXSxlZGl0VHlwZToicGxvdCJ9LG92ZXJsYXlpbmc6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZyZWUiLGMuaWRSZWdleC54LnRvU3RyaW5nKCksYy5pZFJlZ2V4LnkudG9TdHJpbmcoKV0sZWRpdFR5cGU6InBsb3QifSxsYXllcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWJvdmUgdHJhY2VzIiwiYmVsb3cgdHJhY2VzIl0sZGZsdDoiYWJvdmUgdHJhY2VzIixlZGl0VHlwZToicGxvdCJ9LGRvbWFpbjp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOiJwbG90In0se3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6InBsb3QifV0sZGZsdDpbMCwxXSxlZGl0VHlwZToicGxvdCJ9LHBvc2l0aW9uOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MCxlZGl0VHlwZToicGxvdCJ9LGNhdGVnb3J5b3JkZXI6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRyYWNlIiwiY2F0ZWdvcnkgYXNjZW5kaW5nIiwiY2F0ZWdvcnkgZGVzY2VuZGluZyIsImFycmF5IiwidG90YWwgYXNjZW5kaW5nIiwidG90YWwgZGVzY2VuZGluZyIsIm1pbiBhc2NlbmRpbmciLCJtaW4gZGVzY2VuZGluZyIsIm1heCBhc2NlbmRpbmciLCJtYXggZGVzY2VuZGluZyIsInN1bSBhc2NlbmRpbmciLCJzdW0gZGVzY2VuZGluZyIsIm1lYW4gYXNjZW5kaW5nIiwibWVhbiBkZXNjZW5kaW5nIiwibWVkaWFuIGFzY2VuZGluZyIsIm1lZGlhbiBkZXNjZW5kaW5nIl0sZGZsdDoidHJhY2UiLGVkaXRUeXBlOiJjYWxjIn0sY2F0ZWdvcnlhcnJheTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx1aXJldmlzaW9uOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn0sZWRpdFR5cGU6ImNhbGMiLF9kZXByZWNhdGVkOnthdXRvdGljazp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6InRpY2tzIn0sdGl0bGU6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6InRpY2tzIn0sdGl0bGVmb250Om4oe2VkaXRUeXBlOiJ0aWNrcyJ9KX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NzQsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIjo5NiwiLi4vLi4vY29uc3RhbnRzL2RvY3MiOjE3OSwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6MTgxLCIuLi8uLi9saWIvZXh0ZW5kIjoxOTYsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjIzNywiLi4vZm9udF9hdHRyaWJ1dGVzIjoyNzYsIi4vY29uc3RhbnRzIjoyNTR9XSwyNjM6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vbGliIiksYT1lKCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaT1lKCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiKS5pc1VuaWZpZWRIb3ZlcixvPWUoIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJtb2RlX2RlZmF1bHRzIiksbD1lKCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikscz1lKCIuLi9sYXlvdXRfYXR0cmlidXRlcyIpLGM9ZSgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHU9ZSgiLi90eXBlX2RlZmF1bHRzIiksZj1lKCIuL2F4aXNfZGVmYXVsdHMiKSxkPWUoIi4vY29uc3RyYWludHMiKSxwPWUoIi4vcG9zaXRpb25fZGVmYXVsdHMiKSxoPWUoIi4vYXhpc19pZHMiKSxnPWguaWQybmFtZSx2PWgubmFtZTJpZCxtPWUoIi4vY29uc3RhbnRzIikuQVhfSURfUEFUVEVSTix5PWUoIi4uLy4uL3JlZ2lzdHJ5IikseD15LnRyYWNlSXMsYj15LmdldENvbXBvbmVudE1ldGhvZDtmdW5jdGlvbiBfKGUsdCxyKXtBcnJheS5pc0FycmF5KGVbdF0pP2VbdF0ucHVzaChyKTplW3RdPVtyXX10LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe3ZhciB5LHcsVD10LmF1dG90eXBlbnVtYmVycyxrPXt9LE09e30sQT17fSxMPXt9LFM9e30sQz17fSxPPXt9LEQ9e30sUD17fSx6PXt9O2Zvcih5PTA7eTxyLmxlbmd0aDt5Kyspe3ZhciBSPXJbeV07aWYoeChSLCJjYXJ0ZXNpYW4iKXx8eChSLCJnbDJkIikpe3ZhciBFLEk7aWYoUi54YXhpcylFPWcoUi54YXhpcyksXyhrLEUsUik7ZWxzZSBpZihSLnhheGVzKWZvcih3PTA7dzxSLnhheGVzLmxlbmd0aDt3KyspXyhrLGcoUi54YXhlc1t3XSksUik7aWYoUi55YXhpcylJPWcoUi55YXhpcyksXyhrLEksUik7ZWxzZSBpZihSLnlheGVzKWZvcih3PTA7dzxSLnlheGVzLmxlbmd0aDt3KyspXyhrLGcoUi55YXhlc1t3XSksUik7aWYoImZ1bm5lbCI9PT1SLnR5cGU/ImgiPT09Ui5vcmllbnRhdGlvbj8oRSYmKE1bRV09ITApLEkmJihPW0ldPSEwKSk6SSYmKEFbSV09ITApOiJpbWFnZSI9PT1SLnR5cGU/KEkmJihEW0ldPSEwKSxFJiYoRFtFXT0hMCkpOihJJiYoU1tJXT0hMCxDW0ldPSEwKSx4KFIsImNhcnBldCIpJiYoImNhcnBldCIhPT1SLnR5cGV8fFIuX2NoZWF0ZXIpfHxFJiYoTFtFXT0hMCkpLCJjYXJwZXQiPT09Ui50eXBlJiZSLl9jaGVhdGVyJiZFJiYoTVtFXT0hMCkseChSLCIyZE1hcCIpJiYoUFtFXT0hMCxQW0ldPSEwKSx4KFIsIm9yaWVudGVkIikpelsiaCI9PT1SLm9yaWVudGF0aW9uP0k6RV09ITB9fXZhciBGPXQuX3N1YnBsb3RzLE49Ri54YXhpcyxIPUYueWF4aXMsaj1uLnNpbXBsZU1hcChOLGcpLEI9bi5zaW1wbGVNYXAoSCxnKSxWPWouY29uY2F0KEIpLFU9YS5iYWNrZ3JvdW5kO04ubGVuZ3RoJiZILmxlbmd0aCYmKFU9bi5jb2VyY2UoZSx0LHMsInBsb3RfYmdjb2xvciIpKTt2YXIgcSxHLFosWSxYLFc9YS5jb21iaW5lKFUsdC5wYXBlcl9iZ2NvbG9yKTtmdW5jdGlvbiBRKCl7dmFyIGU9a1txXXx8W107WC5fdHJhY2VJbmRpY2VzPWUubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5fZXhwYW5kZWRJbmRleH0pKSxYLl9hbm5JbmRpY2VzPVtdLFguX3NoYXBlSW5kaWNlcz1bXSxYLl9pbWdJbmRpY2VzPVtdLFguX3N1YnBsb3RzV2l0aD1bXSxYLl9jb3VudGVyQXhlcz1bXSxYLl9uYW1lPVguX2F0dHI9cSxYLl9pZD1HfWZ1bmN0aW9uIEooZSx0KXtyZXR1cm4gbi5jb2VyY2UoWSxYLGMsZSx0KX1mdW5jdGlvbiAkKGUsdCl7cmV0dXJuIG4uY29lcmNlMihZLFgsYyxlLHQpfWZ1bmN0aW9uIEsoZSl7cmV0dXJuIngiPT09ZT9IOk59ZnVuY3Rpb24gZWUodCxyKXtmb3IodmFyIG49IngiPT09dD9qOkIsYT1bXSxpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBvPW5baV07bz09PXJ8fChlW29dfHx7fSkub3ZlcmxheWluZ3x8YS5wdXNoKHYobykpfXJldHVybiBhfXZhciB0ZT17eDpLKCJ4IikseTpLKCJ5Iil9LHJlPXRlLnguY29uY2F0KHRlLnkpLG5lPXt9LGFlPVtdO2Z1bmN0aW9uIGllKCl7dmFyIGU9WS5tYXRjaGVzO20udGVzdChlKSYmLTE9PT1yZS5pbmRleE9mKGUpJiYobmVbZV09WS50eXBlLGFlPU9iamVjdC5rZXlzKG5lKSl9dmFyIG9lPW8oZSx0LHIpLGxlPWkob2UpO2Zvcih5PTA7eTxWLmxlbmd0aDt5Kyspe3E9Vlt5XSxHPXYocSksWj1xLmNoYXJBdCgwKSxuLmlzUGxhaW5PYmplY3QoZVtxXSl8fChlW3FdPXt9KSxZPWVbcV0sWD1sLm5ld0NvbnRhaW5lcih0LHEsWisiYXhpcyIpLFEoKTt2YXIgc2U9IngiPT09WiYmIUxbcV0mJk1bcV18fCJ5Ij09PVomJiFTW3FdJiZBW3FdLGNlPSJ5Ij09PVomJighQ1txXSYmT1txXXx8RFtxXSksdWU9e2xldHRlcjpaLGZvbnQ6dC5mb250LG91dGVyVGlja3M6UFtxXSxzaG93R3JpZDoheltxXSxkYXRhOmtbcV18fFtdLGJnQ29sb3I6VyxjYWxlbmRhcjp0LmNhbGVuZGFyLGF1dG9tYXJnaW46ITAsdmlzaWJsZURmbHQ6c2UscmV2ZXJzZURmbHQ6Y2UsYXV0b3R5cGVudW1iZXJzRGZsdDpULHNwbG9tU3Rhc2g6KCh0Ll9zcGxvbUF4ZXN8fHt9KVtaXXx8e30pW0ddfTtKKCJ1aXJldmlzaW9uIix0LnVpcmV2aXNpb24pLHUoWSxYLEosdWUpLGYoWSxYLEosdWUsdCk7dmFyIGZlPWxlJiZaPT09b2UuY2hhckF0KDApLGRlPSQoInNwaWtlY29sb3IiLGxlP1guY29sb3I6dm9pZCAwKSxwZT0kKCJzcGlrZXRoaWNrbmVzcyIsbGU/MS41OnZvaWQgMCksaGU9JCgic3Bpa2VkYXNoIixsZT8iZG90Ijp2b2lkIDApLGdlPSQoInNwaWtlbW9kZSIsbGU/ImFjcm9zcyI6dm9pZCAwKSx2ZT0kKCJzcGlrZXNuYXAiLGxlPyJob3ZlcmVkIGRhdGEiOnZvaWQgMCk7Sigic2hvd3NwaWtlcyIsISEoZmV8fGRlfHxwZXx8aGV8fGdlfHx2ZSkpfHwoZGVsZXRlIFguc3Bpa2Vjb2xvcixkZWxldGUgWC5zcGlrZXRoaWNrbmVzcyxkZWxldGUgWC5zcGlrZWRhc2gsZGVsZXRlIFguc3Bpa2Vtb2RlLGRlbGV0ZSBYLnNwaWtlc25hcCkscChZLFgsSix7bGV0dGVyOlosY291bnRlckF4ZXM6dGVbWl0sb3ZlcmxheWFibGVBeGVzOmVlKFoscSksZ3JpZDp0LmdyaWR9KSxKKCJ0aXRsZS5zdGFuZG9mZiIpLGllKCksWC5faW5wdXQ9WX1mb3IoeT0wO3k8YWUubGVuZ3RoOyl7Rz1hZVt5KytdLFo9KHE9ZyhHKSkuY2hhckF0KDApLG4uaXNQbGFpbk9iamVjdChlW3FdKXx8KGVbcV09e30pLFk9ZVtxXSxYPWwubmV3Q29udGFpbmVyKHQscSxaKyJheGlzIiksUSgpO3ZhciBtZT17bGV0dGVyOlosZm9udDp0LmZvbnQsb3V0ZXJUaWNrczpQW3FdLHNob3dHcmlkOiF6W3FdLGRhdGE6W10sYmdDb2xvcjpXLGNhbGVuZGFyOnQuY2FsZW5kYXIsYXV0b21hcmdpbjohMCx2aXNpYmxlRGZsdDohMSxyZXZlcnNlRGZsdDohMSxhdXRvdHlwZW51bWJlcnNEZmx0OlQsc3Bsb21TdGFzaDooKHQuX3NwbG9tQXhlc3x8e30pW1pdfHx7fSlbR119O0ooInVpcmV2aXNpb24iLHQudWlyZXZpc2lvbiksWC50eXBlPW5lW0ddfHwibGluZWFyIixmKFksWCxKLG1lLHQpLHAoWSxYLEose2xldHRlcjpaLGNvdW50ZXJBeGVzOnRlW1pdLG92ZXJsYXlhYmxlQXhlczplZShaLHEpLGdyaWQ6dC5ncmlkfSksSigiZml4ZWRyYW5nZSIpLGllKCksWC5faW5wdXQ9WX12YXIgeWU9YigicmFuZ2VzbGlkZXIiLCJoYW5kbGVEZWZhdWx0cyIpLHhlPWIoInJhbmdlc2VsZWN0b3IiLCJoYW5kbGVEZWZhdWx0cyIpO2Zvcih5PTA7eTxqLmxlbmd0aDt5KyspcT1qW3ldLFk9ZVtxXSxYPXRbcV0seWUoZSx0LHEpLCJkYXRlIj09PVgudHlwZSYmeGUoWSxYLHQsQixYLmNhbGVuZGFyKSxKKCJmaXhlZHJhbmdlIik7Zm9yKHk9MDt5PEIubGVuZ3RoO3krKyl7cT1CW3ldLFk9ZVtxXSxYPXRbcV07dmFyIGJlPXRbZyhYLmFuY2hvcildO0ooImZpeGVkcmFuZ2UiLGIoInJhbmdlc2xpZGVyIiwiaXNWaXNpYmxlIikoYmUpKX1kLmhhbmRsZURlZmF1bHRzKGUsdCx7YXhJZHM6cmUuY29uY2F0KGFlKS5zb3J0KGguaWRTb3J0KSxheEhhc0ltYWdlOkR9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NzUsIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyI6MTExLCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVybW9kZV9kZWZhdWx0cyI6MTE0LCIuLi8uLi9saWIiOjIwMiwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6MjM3LCIuLi8uLi9yZWdpc3RyeSI6MjkwLCIuLi9sYXlvdXRfYXR0cmlidXRlcyI6MjgwLCIuL2F4aXNfZGVmYXVsdHMiOjI1MCwiLi9heGlzX2lkcyI6MjUxLCIuL2NvbnN0YW50cyI6MjU0LCIuL2NvbnN0cmFpbnRzIjoyNTUsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjI2MiwiLi9wb3NpdGlvbl9kZWZhdWx0cyI6MjY1LCIuL3R5cGVfZGVmYXVsdHMiOjI3M31dLDI2NDpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJ0aW55Y29sb3IyIikubWl4LGE9ZSgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIikubGlnaHRGcmFjdGlvbixpPWUoIi4uLy4uL2xpYiIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscixvKXt2YXIgbD0obz1vfHx7fSkuZGZsdENvbG9yO2Z1bmN0aW9uIHMocixuKXtyZXR1cm4gaS5jb2VyY2UyKGUsdCxvLmF0dHJpYnV0ZXMscixuKX12YXIgYz1zKCJsaW5lY29sb3IiLGwpLHU9cygibGluZXdpZHRoIik7cigic2hvd2xpbmUiLG8uc2hvd0xpbmV8fCEhY3x8ISF1KXx8KGRlbGV0ZSB0LmxpbmVjb2xvcixkZWxldGUgdC5saW5ld2lkdGgpO3ZhciBmPXMoImdyaWRjb2xvciIsbihsLG8uYmdDb2xvcixvLmJsZW5kfHxhKS50b1JnYlN0cmluZygpKSxkPXMoImdyaWR3aWR0aCIpO2lmKHIoInNob3dncmlkIixvLnNob3dHcmlkfHwhIWZ8fCEhZCl8fChkZWxldGUgdC5ncmlkY29sb3IsZGVsZXRlIHQuZ3JpZHdpZHRoKSwhby5ub1plcm9MaW5lKXt2YXIgcD1zKCJ6ZXJvbGluZWNvbG9yIixsKSxoPXMoInplcm9saW5ld2lkdGgiKTtyKCJ6ZXJvbGluZSIsby5zaG93R3JpZHx8ISFwfHwhIWgpfHwoZGVsZXRlIHQuemVyb2xpbmVjb2xvcixkZWxldGUgdC56ZXJvbGluZXdpZHRoKX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NzQsIi4uLy4uL2xpYiI6MjAyLHRpbnljb2xvcjI6NTh9XSwyNjU6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiZmFzdC1pc251bWVyaWMiKSxhPWUoIi4uLy4uL2xpYiIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscixpKXt2YXIgbyxsLHMsYyx1PWkuY291bnRlckF4ZXN8fFtdLGY9aS5vdmVybGF5YWJsZUF4ZXN8fFtdLGQ9aS5sZXR0ZXIscD1pLmdyaWQ7cCYmKGw9cC5fZG9tYWluc1tkXVtwLl9heGlzTWFwW3QuX2lkXV0sbz1wLl9hbmNob3JzW3QuX2lkXSxsJiYocz1wW2QrInNpZGUiXS5zcGxpdCgiICIpWzBdLGM9cC5kb21haW5bZF1bInJpZ2h0Ij09PXN8fCJ0b3AiPT09cz8xOjBdKSksbD1sfHxbMCwxXSxvPW98fChuKGUucG9zaXRpb24pPyJmcmVlIjp1WzBdfHwiZnJlZSIpLHM9c3x8KCJ4Ij09PWQ/ImJvdHRvbSI6ImxlZnQiKSxjPWN8fDAsImZyZWUiPT09YS5jb2VyY2UoZSx0LHthbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZyZWUiXS5jb25jYXQodSksZGZsdDpvfX0sImFuY2hvciIpJiZyKCJwb3NpdGlvbiIsYyksYS5jb2VyY2UoZSx0LHtzaWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6IngiPT09ZD9bImJvdHRvbSIsInRvcCJdOlsibGVmdCIsInJpZ2h0Il0sZGZsdDpzfX0sInNpZGUiKTt2YXIgaD0hMTtpZihmLmxlbmd0aCYmKGg9YS5jb2VyY2UoZSx0LHtvdmVybGF5aW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyExXS5jb25jYXQoZiksZGZsdDohMX19LCJvdmVybGF5aW5nIikpLCFoKXt2YXIgZz1yKCJkb21haW4iLGwpO2dbMF0+Z1sxXS0xLzQwOTYmJih0LmRvbWFpbj1sKSxhLm5vbmVPckFsbChlLmRvbWFpbix0LmRvbWFpbixsKX1yZXR1cm4gcigibGF5ZXIiKSx0fX0seyIuLi8uLi9saWIiOjIwMiwiZmFzdC1pc251bWVyaWMiOjExfV0sMjY2OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5GUk9NX0JMO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7dm9pZCAwPT09ciYmKHI9bltlLmNvbnN0cmFpbnRvd2FyZHx8ImNlbnRlciJdKTt2YXIgYT1bZS5yMmwoZS5yYW5nZVswXSksZS5yMmwoZS5yYW5nZVsxXSldLGk9YVswXSsoYVsxXS1hWzBdKSpyO2UucmFuZ2U9ZS5faW5wdXQucmFuZ2U9W2UubDJyKGkrKGFbMF0taSkqdCksZS5sMnIoaSsoYVsxXS1pKSp0KV0sZS5zZXRTY2FsZSgpfX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IjoxNzd9XSwyNjc6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgicG9seWJvb2xqcyIpLGE9ZSgiLi4vLi4vcmVnaXN0cnkiKSxpPWUoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLmRhc2hTdHlsZSxvPWUoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxsPWUoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxzPWUoIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyIpLm1ha2VFdmVudERhdGEsYz1lKCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50L2hlbHBlcnMiKSx1PWMuZnJlZU1vZGUsZj1jLnJlY3RNb2RlLGQ9Yy5kcmF3TW9kZSxwPWMub3Blbk1vZGUsaD1jLnNlbGVjdE1vZGUsZz1lKCIuLi8uLi9jb21wb25lbnRzL3NoYXBlcy9kcmF3X25ld3NoYXBlL2Rpc3BsYXlfb3V0bGluZXMiKSx2PWUoIi4uLy4uL2NvbXBvbmVudHMvc2hhcGVzL2RyYXdfbmV3c2hhcGUvaGVscGVycyIpLmhhbmRsZUVsbGlwc2UsbT1lKCIuLi8uLi9jb21wb25lbnRzL3NoYXBlcy9kcmF3X25ld3NoYXBlL25ld3NoYXBlcyIpLHk9ZSgiLi4vLi4vbGliIikseD1lKCIuLi8uLi9saWIvcG9seWdvbiIpLGI9ZSgiLi4vLi4vbGliL3Rocm90dGxlIiksXz1lKCIuL2F4aXNfaWRzIikuZ2V0RnJvbUlkLHc9ZSgiLi4vLi4vbGliL2NsZWFyX2dsX2NhbnZhc2VzIiksVD1lKCIuLi8uLi9wbG90X2FwaS9zdWJyb3V0aW5lcyIpLnJlZHJhd1JlZ2xUcmFjZXMsaz1lKCIuL2NvbnN0YW50cyIpLE09ay5NSU5TRUxFQ1QsQT14LmZpbHRlcixMPXgudGVzdGVyLFM9ZSgiLi9oYW5kbGVfb3V0bGluZSIpLmNsZWFyU2VsZWN0LEM9ZSgiLi9oZWxwZXJzIiksTz1DLnAycixEPUMuYXhWYWx1ZSxQPUMuZ2V0VHJhbnNmb3JtO2Z1bmN0aW9uIHooZSx0LHIsbixhLGksbyl7dmFyIGwscyxjLHUsZixkLGgsdixtLHk9dC5faG92ZXJkYXRhLHg9dC5fZnVsbExheW91dC5jbGlja21vZGUuaW5kZXhPZigiZXZlbnQiKT4tMSxiPVtdO2lmKGZ1bmN0aW9uKGUpe3JldHVybiBlJiZBcnJheS5pc0FycmF5KGUpJiYhMCE9PWVbMF0uaG92ZXJPbkJveH0oeSkpe0YoZSx0LGkpO3ZhciBfPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbixhPWVbMF0saT0tMSxvPVtdO2ZvcihuPTA7bjx0Lmxlbmd0aDtuKyspaWYocj10W25dLGEuZnVsbERhdGEuX2V4cGFuZGVkSW5kZXg9PT1yLmNkWzBdLnRyYWNlLl9leHBhbmRlZEluZGV4KXtpZighMD09PWEuaG92ZXJPbkJveClicmVhazt2b2lkIDAhPT1hLnBvaW50TnVtYmVyP2k9YS5wb2ludE51bWJlcjp2b2lkIDAhPT1hLmJpbk51bWJlciYmKGk9YS5iaW5OdW1iZXIsbz1hLnBvaW50TnVtYmVycyk7YnJlYWt9cmV0dXJue3BvaW50TnVtYmVyOmkscG9pbnROdW1iZXJzOm8sc2VhcmNoSW5mbzpyfX0oeSxsPUgodCxyLG4sYSkpO2lmKF8ucG9pbnROdW1iZXJzLmxlbmd0aD4wP2Z1bmN0aW9uKGUsdCl7dmFyIHIsbixhLGk9W107Zm9yKGE9MDthPGUubGVuZ3RoO2ErKykocj1lW2FdKS5jZFswXS50cmFjZS5zZWxlY3RlZHBvaW50cyYmci5jZFswXS50cmFjZS5zZWxlY3RlZHBvaW50cy5sZW5ndGg+MCYmaS5wdXNoKHIpO2lmKDE9PT1pLmxlbmd0aCYmaVswXT09PXQuc2VhcmNoSW5mbyYmKG49dC5zZWFyY2hJbmZvLmNkWzBdLnRyYWNlKS5zZWxlY3RlZHBvaW50cy5sZW5ndGg9PT10LnBvaW50TnVtYmVycy5sZW5ndGgpe2ZvcihhPTA7YTx0LnBvaW50TnVtYmVycy5sZW5ndGg7YSsrKWlmKG4uc2VsZWN0ZWRwb2ludHMuaW5kZXhPZih0LnBvaW50TnVtYmVyc1thXSk8MClyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4hMX0obCxfKTpmdW5jdGlvbihlKXt2YXIgdCxyLG4sYT0wO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspaWYodD1lW25dLChyPXQuY2RbMF0udHJhY2UpLnNlbGVjdGVkcG9pbnRzKXtpZihyLnNlbGVjdGVkcG9pbnRzLmxlbmd0aD4xKXJldHVybiExO2lmKChhKz1yLnNlbGVjdGVkcG9pbnRzLmxlbmd0aCk+MSlyZXR1cm4hMX1yZXR1cm4gMT09PWF9KGwpJiYoZD1qKF8pKSl7Zm9yKG8mJm8ucmVtb3ZlKCksbT0wO208bC5sZW5ndGg7bSsrKShzPWxbbV0pLl9tb2R1bGUuc2VsZWN0UG9pbnRzKHMsITEpO0IodCxsKSxOKGkpLHgmJnQuZW1pdCgicGxvdGx5X2Rlc2VsZWN0IixudWxsKX1lbHNle2ZvcihoPWUuc2hpZnRLZXkmJih2b2lkIDAhPT1kP2Q6aihfKSksYz1mdW5jdGlvbihlLHQscil7cmV0dXJue3BvaW50TnVtYmVyOmUsc2VhcmNoSW5mbzp0LHN1YnRyYWN0OnJ9fShfLnBvaW50TnVtYmVyLF8uc2VhcmNoSW5mbyxoKSx1PUkoaS5zZWxlY3Rpb25EZWZzLmNvbmNhdChbY10pKSxtPTA7bTxsLmxlbmd0aDttKyspaWYoZj1WKGxbbV0uX21vZHVsZS5zZWxlY3RQb2ludHMobFttXSx1KSxsW21dKSxiLmxlbmd0aClmb3IodmFyIHc9MDt3PGYubGVuZ3RoO3crKyliLnB1c2goZlt3XSk7ZWxzZSBiPWY7aWYoQih0LGwsdj17cG9pbnRzOmJ9KSxjJiZpJiZpLnNlbGVjdGlvbkRlZnMucHVzaChjKSxvKXt2YXIgVD1pLm1lcmdlZFBvbHlnb25zLGs9cChpLmRyYWdtb2RlKTtnKFUoVCxrKSxvLGkpfXgmJnQuZW1pdCgicGxvdGx5X3NlbGVjdGVkIix2KX19fWZ1bmN0aW9uIFIoZSl7cmV0dXJuInBvaW50TnVtYmVyImluIGUmJiJzZWFyY2hJbmZvImluIGV9ZnVuY3Rpb24gRShlKXtyZXR1cm57eG1pbjowLHhtYXg6MCx5bWluOjAseW1heDowLHB0czpbXSxjb250YWluczpmdW5jdGlvbih0LHIsbixhKXt2YXIgaT1lLnNlYXJjaEluZm8uY2RbMF0udHJhY2UuX2V4cGFuZGVkSW5kZXg7cmV0dXJuIGEuY2RbMF0udHJhY2UuX2V4cGFuZGVkSW5kZXg9PT1pJiZuPT09ZS5wb2ludE51bWJlcn0saXNSZWN0OiExLGRlZ2VuZXJhdGU6ITEsc3VidHJhY3Q6ZS5zdWJ0cmFjdH19ZnVuY3Rpb24gSShlKXtmb3IodmFyIHQ9W10scj1SKGVbMF0pPzA6ZVswXVswXVswXSxuPXIsYT1SKGVbMF0pPzA6ZVswXVswXVsxXSxpPWEsbz0wO288ZS5sZW5ndGg7bysrKWlmKFIoZVtvXSkpdC5wdXNoKEUoZVtvXSkpO2Vsc2V7dmFyIGw9eC50ZXN0ZXIoZVtvXSk7bC5zdWJ0cmFjdD1lW29dLnN1YnRyYWN0LHQucHVzaChsKSxyPU1hdGgubWluKHIsbC54bWluKSxuPU1hdGgubWF4KG4sbC54bWF4KSxhPU1hdGgubWluKGEsbC55bWluKSxpPU1hdGgubWF4KGksbC55bWF4KX1yZXR1cm57eG1pbjpyLHhtYXg6bix5bWluOmEseW1heDppLHB0czpbXSxjb250YWluczpmdW5jdGlvbihlLHIsbixhKXtmb3IodmFyIGk9ITEsbz0wO288dC5sZW5ndGg7bysrKXRbb10uY29udGFpbnMoZSxyLG4sYSkmJihpPSExPT09dFtvXS5zdWJ0cmFjdCk7cmV0dXJuIGl9LGlzUmVjdDohMSxkZWdlbmVyYXRlOiExfX1mdW5jdGlvbiBGKGUsdCxyKXt0Ll9mdWxsTGF5b3V0Ll9kcmF3aW5nPSExO3ZhciBuPXQuX2Z1bGxMYXlvdXQsYT1yLnBsb3RpbmZvLGk9ci5kcmFnbW9kZSxvPW4uX2xhc3RTZWxlY3RlZFN1YnBsb3QmJm4uX2xhc3RTZWxlY3RlZFN1YnBsb3Q9PT1hLmlkLGw9KGUuc2hpZnRLZXl8fGUuYWx0S2V5KSYmIShkKGkpJiZwKGkpKTtvJiZsJiZhLnNlbGVjdGlvbiYmYS5zZWxlY3Rpb24uc2VsZWN0aW9uRGVmcyYmIXIuc2VsZWN0aW9uRGVmcz8oci5zZWxlY3Rpb25EZWZzPWEuc2VsZWN0aW9uLnNlbGVjdGlvbkRlZnMsci5tZXJnZWRQb2x5Z29ucz1hLnNlbGVjdGlvbi5tZXJnZWRQb2x5Z29ucyk6bCYmYS5zZWxlY3Rpb258fE4ociksb3x8KFModCksbi5fbGFzdFNlbGVjdGVkU3VicGxvdD1hLmlkKX1mdW5jdGlvbiBOKGUpe3ZhciB0PWUuZHJhZ21vZGUscj1lLnBsb3RpbmZvLG49ZS5nZDtpZihuLl9mdWxsTGF5b3V0Ll9hY3RpdmVTaGFwZUluZGV4Pj0wJiZuLl9mdWxsTGF5b3V0Ll9kZWFjdGl2YXRlU2hhcGUobiksZCh0KSl7dmFyIGk9bi5fZnVsbExheW91dC5fem9vbWxheWVyLnNlbGVjdEFsbCgiLnNlbGVjdC1vdXRsaW5lLSIrci5pZCk7aWYoaSYmbi5fZnVsbExheW91dC5fZHJhd2luZyl7dmFyIG89bShpLGUpO28mJmEuY2FsbCgiX2d1aVJlbGF5b3V0IixuLHtzaGFwZXM6b30pLG4uX2Z1bGxMYXlvdXQuX2RyYXdpbmc9ITF9fXIuc2VsZWN0aW9uPXt9LHIuc2VsZWN0aW9uLnNlbGVjdGlvbkRlZnM9ZS5zZWxlY3Rpb25EZWZzPVtdLHIuc2VsZWN0aW9uLm1lcmdlZFBvbHlnb25zPWUubWVyZ2VkUG9seWdvbnM9W119ZnVuY3Rpb24gSChlLHQscixuKXt2YXIgYSxpLG8sbD1bXSxzPXQubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5faWR9KSksYz1yLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuX2lkfSkpO2ZvcihvPTA7bzxlLmNhbGNkYXRhLmxlbmd0aDtvKyspaWYoITA9PT0oaT0oYT1lLmNhbGNkYXRhW29dKVswXS50cmFjZSkudmlzaWJsZSYmaS5fbW9kdWxlJiZpLl9tb2R1bGUuc2VsZWN0UG9pbnRzKWlmKCFufHxpLnN1YnBsb3QhPT1uJiZpLmdlbyE9PW4paWYoInNwbG9tIj09PWkudHlwZSYmaS5feGF4ZXNbc1swXV0mJmkuX3lheGVzW2NbMF1dKXt2YXIgdT1kKGkuX21vZHVsZSxhLHRbMF0sclswXSk7dS5zY2VuZT1lLl9mdWxsTGF5b3V0Ll9zcGxvbVNjZW5lc1tpLnVpZF0sbC5wdXNoKHUpfWVsc2UgaWYoInNhbmtleSI9PT1pLnR5cGUpe3ZhciBmPWQoaS5fbW9kdWxlLGEsdFswXSxyWzBdKTtsLnB1c2goZil9ZWxzZXtpZigtMT09PXMuaW5kZXhPZihpLnhheGlzKSljb250aW51ZTtpZigtMT09PWMuaW5kZXhPZihpLnlheGlzKSljb250aW51ZTtsLnB1c2goZChpLl9tb2R1bGUsYSxfKGUsaS54YXhpcyksXyhlLGkueWF4aXMpKSl9ZWxzZSBsLnB1c2goZChpLl9tb2R1bGUsYSx0WzBdLHJbMF0pKTtyZXR1cm4gbDtmdW5jdGlvbiBkKGUsdCxyLG4pe3JldHVybntfbW9kdWxlOmUsY2Q6dCx4YXhpczpyLHlheGlzOm59fX1mdW5jdGlvbiBqKGUpe3ZhciB0PWUuc2VhcmNoSW5mby5jZFswXS50cmFjZSxyPWUucG9pbnROdW1iZXIsbj1lLnBvaW50TnVtYmVycyxhPW4ubGVuZ3RoPjA/blswXTpyO3JldHVybiEhdC5zZWxlY3RlZHBvaW50cyYmdC5zZWxlY3RlZHBvaW50cy5pbmRleE9mKGEpPi0xfWZ1bmN0aW9uIEIoZSx0LHIpe3ZhciBuLGksbyxsO2ZvcihuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBzPXRbbl0uY2RbMF0udHJhY2UuX2Z1bGxJbnB1dCxjPWUuX2Z1bGxMYXlvdXQuX3RyYWNlUHJlR1VJW3MudWlkXXx8e307dm9pZCAwPT09Yy5zZWxlY3RlZHBvaW50cyYmKGMuc2VsZWN0ZWRwb2ludHM9cy5faW5wdXQuc2VsZWN0ZWRwb2ludHN8fG51bGwpfWlmKHIpe3ZhciB1PXIucG9pbnRzfHxbXTtmb3Iobj0wO248dC5sZW5ndGg7bisrKShsPXRbbl0uY2RbMF0udHJhY2UpLl9pbnB1dC5zZWxlY3RlZHBvaW50cz1sLl9mdWxsSW5wdXQuc2VsZWN0ZWRwb2ludHM9W10sbC5fZnVsbElucHV0IT09bCYmKGwuc2VsZWN0ZWRwb2ludHM9W10pO2ZvcihuPTA7bjx1Lmxlbmd0aDtuKyspe3ZhciBmPXVbbl0sZD1mLmRhdGEscD1mLmZ1bGxEYXRhO2YucG9pbnRJbmRpY2VzPyhbXS5wdXNoLmFwcGx5KGQuc2VsZWN0ZWRwb2ludHMsZi5wb2ludEluZGljZXMpLGwuX2Z1bGxJbnB1dCE9PWwmJltdLnB1c2guYXBwbHkocC5zZWxlY3RlZHBvaW50cyxmLnBvaW50SW5kaWNlcykpOihkLnNlbGVjdGVkcG9pbnRzLnB1c2goZi5wb2ludEluZGV4KSxsLl9mdWxsSW5wdXQhPT1sJiZwLnNlbGVjdGVkcG9pbnRzLnB1c2goZi5wb2ludEluZGV4KSl9fWVsc2UgZm9yKG49MDtuPHQubGVuZ3RoO24rKylkZWxldGUobD10W25dLmNkWzBdLnRyYWNlKS5zZWxlY3RlZHBvaW50cyxkZWxldGUgbC5faW5wdXQuc2VsZWN0ZWRwb2ludHMsbC5fZnVsbElucHV0IT09bCYmZGVsZXRlIGwuX2Z1bGxJbnB1dC5zZWxlY3RlZHBvaW50czt2YXIgaD0hMTtmb3Iobj0wO248dC5sZW5ndGg7bisrKXtsPShvPShpPXRbbl0pLmNkKVswXS50cmFjZSxhLnRyYWNlSXMobCwicmVnbCIpJiYoaD0hMCk7dmFyIGc9aS5fbW9kdWxlLHY9Zy5zdHlsZU9uU2VsZWN0fHxnLnN0eWxlO3YmJih2KGUsbyxvWzBdLm5vZGUzKSxvWzBdLm5vZGVSYW5nZVBsb3QzJiZ2KGUsbyxvWzBdLm5vZGVSYW5nZVBsb3QzKSl9aCYmKHcoZSksVChlKSl9ZnVuY3Rpb24gVihlLHQpe2lmKEFycmF5LmlzQXJyYXkoZSkpZm9yKHZhciByPXQuY2Qsbj10LmNkWzBdLnRyYWNlLGE9MDthPGUubGVuZ3RoO2ErKyllW2FdPXMoZVthXSxuLHIpO3JldHVybiBlfWZ1bmN0aW9uIFUoZSx0KXtmb3IodmFyIHI9W10sbj0wO248ZS5sZW5ndGg7bisrKXtyW25dPVtdO2Zvcih2YXIgYT0wO2E8ZVtuXS5sZW5ndGg7YSsrKXtyW25dW2FdPVtdLHJbbl1bYV1bMF09YT8iTCI6Ik0iO2Zvcih2YXIgaT0wO2k8ZVtuXVthXS5sZW5ndGg7aSsrKXJbbl1bYV0ucHVzaChlW25dW2FdW2ldKX10fHxyW25dLnB1c2goWyJaIixyW25dWzBdWzFdLHJbbl1bMF1bMl1dKX1yZXR1cm4gcn10LmV4cG9ydHM9e3ByZXBTZWxlY3Q6ZnVuY3Rpb24oZSx0LHIsYSxzKXt2YXIgYz11KHMpLG09ZihzKSx4PXAocyksXz1kKHMpLHc9aChzKSxUPSJkcmF3Y2lyY2xlIj09PXMsUz0iZHJhd2xpbmUiPT09c3x8VCxDPWEuZ2QsUj1DLl9mdWxsTGF5b3V0LEU9Ui5fem9vbWxheWVyLGo9YS5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHE9YS5wbG90aW5mbyxHPVAocSksWj10LWoubGVmdCxZPXItai50b3A7Ui5fY2FsY0ludmVyc2VUcmFuc2Zvcm0oQyk7dmFyIFg9eS5hcHBseTNEVHJhbnNmb3JtKFIuX2ludlRyYW5zZm9ybSkoWixZKTtaPVhbMF0sWT1YWzFdO3ZhciBXLFEsSiwkLEssZWUsdGUscmU9Ui5faW52U2NhbGVYLG5lPVIuX2ludlNjYWxlWSxhZT1aLGllPVksb2U9Ik0iK1orIiwiK1ksbGU9YS54YXhlc1swXS5fbGVuZ3RoLHNlPWEueWF4ZXNbMF0uX2xlbmd0aCxjZT1hLnhheGVzLmNvbmNhdChhLnlheGVzKSx1ZT1lLmFsdEtleSYmIShkKHMpJiZ4KTtGKGUsQyxhKSxjJiYoVz1BKFtbWixZXV0say5CRU5EUFgpKTt2YXIgZmU9RS5zZWxlY3RBbGwoInBhdGguc2VsZWN0LW91dGxpbmUtIitxLmlkKS5kYXRhKF8/WzBdOlsxLDJdKSxkZT1SLm5ld3NoYXBlO2ZlLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLChmdW5jdGlvbihlKXtyZXR1cm4ic2VsZWN0LW91dGxpbmUgc2VsZWN0LW91dGxpbmUtIitlKyIgc2VsZWN0LW91dGxpbmUtIitxLmlkfSkpLnN0eWxlKF8/e29wYWNpdHk6ZGUub3BhY2l0eS8yLGZpbGw6eD92b2lkIDA6ZGUuZmlsbGNvbG9yLHN0cm9rZTpkZS5saW5lLmNvbG9yLCJzdHJva2UtZGFzaGFycmF5IjppKGRlLmxpbmUuZGFzaCxkZS5saW5lLndpZHRoKSwic3Ryb2tlLXdpZHRoIjpkZS5saW5lLndpZHRoKyJweCJ9Ont9KS5hdHRyKCJmaWxsLXJ1bGUiLGRlLmZpbGxydWxlKS5jbGFzc2VkKCJjdXJzb3ItbW92ZSIsISFfKS5hdHRyKCJ0cmFuc2Zvcm0iLEcpLmF0dHIoImQiLG9lKyJaIik7dmFyIHBlLGhlPUUuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJ6b29tYm94LWNvcm5lcnMiKS5zdHlsZSh7ZmlsbDpvLmJhY2tncm91bmQsc3Ryb2tlOm8uZGVmYXVsdExpbmUsInN0cm9rZS13aWR0aCI6MX0pLmF0dHIoInRyYW5zZm9ybSIsRykuYXR0cigiZCIsIk0wLDBaIiksZ2U9Ui5fdWlkK2suU0VMRUNUSUQsdmU9W10sbWU9SChDLGEueGF4ZXMsYS55YXhlcyxhLnN1YnBsb3QpO2Z1bmN0aW9uIHllKGUsdCl7cmV0dXJuIGUtdH1wZT1xLmZpbGxSYW5nZUl0ZW1zP3EuZmlsbFJhbmdlSXRlbXM6bT9mdW5jdGlvbihlLHQpe3ZhciByPWUucmFuZ2U9e307Zm9yKEs9MDtLPGNlLmxlbmd0aDtLKyspe3ZhciBuPWNlW0tdLGE9bi5faWQuY2hhckF0KDApO3Jbbi5faWRdPVtPKG4sdFthKyJtaW4iXSksTyhuLHRbYSsibWF4Il0pXS5zb3J0KHllKX19OmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1lLmxhc3NvUG9pbnRzPXt9O2ZvcihLPTA7SzxjZS5sZW5ndGg7SysrKXt2YXIgYT1jZVtLXTtuW2EuX2lkXT1yLmZpbHRlcmVkLm1hcChEKGEpKX19LGEubW92ZUZuPWZ1bmN0aW9uKGUsdCl7YWU9TWF0aC5tYXgoMCxNYXRoLm1pbihsZSxyZSplK1opKSxpZT1NYXRoLm1heCgwLE1hdGgubWluKHNlLG5lKnQrWSkpO3ZhciByPU1hdGguYWJzKGFlLVopLGk9TWF0aC5hYnMoaWUtWSk7aWYobSl7dmFyIG8sbCxzO2lmKHcpe3ZhciB1PVIuc2VsZWN0ZGlyZWN0aW9uO3N3aXRjaChvPSJhbnkiPT09dT9pPE1hdGgubWluKC42KnIsTSk/ImgiOnI8TWF0aC5taW4oLjYqaSxNKT8idiI6ImQiOnUpe2Nhc2UiaCI6bD1UP3NlLzI6MCxzPXNlO2JyZWFrO2Nhc2UidiI6bD1UP2xlLzI6MCxzPWxlfX1pZihfKXN3aXRjaChSLm5ld3NoYXBlLmRyYXdkaXJlY3Rpb24pe2Nhc2UidmVydGljYWwiOm89ImgiLGw9VD9zZS8yOjAscz1zZTticmVhaztjYXNlImhvcml6b250YWwiOm89InYiLGw9VD9sZS8yOjAscz1sZTticmVhaztjYXNlIm9ydGhvIjpyPGk/KG89ImgiLGw9WSxzPWllKToobz0idiIsbD1aLHM9YWUpO2JyZWFrO2RlZmF1bHQ6bz0iZCJ9ImgiPT09bz8oKCQ9Uz92KFQsW2FlLGxdLFthZSxzXSk6W1taLGxdLFtaLHNdLFthZSxzXSxbYWUsbF1dKS54bWluPVM/YWU6TWF0aC5taW4oWixhZSksJC54bWF4PVM/YWU6TWF0aC5tYXgoWixhZSksJC55bWluPU1hdGgubWluKGwscyksJC55bWF4PU1hdGgubWF4KGwscyksaGUuYXR0cigiZCIsIk0iKyQueG1pbisiLCIrKFktTSkrImgtNHYiKzIqTSsiaDRaTSIrKCQueG1heC0xKSsiLCIrKFktTSkrImg0diIrMipNKyJoLTRaIikpOiJ2Ij09PW8/KCgkPVM/dihULFtsLGllXSxbcyxpZV0pOltbbCxZXSxbbCxpZV0sW3MsaWVdLFtzLFldXSkueG1pbj1NYXRoLm1pbihsLHMpLCQueG1heD1NYXRoLm1heChsLHMpLCQueW1pbj1TP2llOk1hdGgubWluKFksaWUpLCQueW1heD1TP2llOk1hdGgubWF4KFksaWUpLGhlLmF0dHIoImQiLCJNIisoWi1NKSsiLCIrJC55bWluKyJ2LTRoIisyKk0rInY0Wk0iKyhaLU0pKyIsIisoJC55bWF4LTEpKyJ2NGgiKzIqTSsidi00WiIpKToiZCI9PT1vJiYoKCQ9Uz92KFQsW1osWV0sW2FlLGllXSk6W1taLFldLFtaLGllXSxbYWUsaWVdLFthZSxZXV0pLnhtaW49TWF0aC5taW4oWixhZSksJC54bWF4PU1hdGgubWF4KFosYWUpLCQueW1pbj1NYXRoLm1pbihZLGllKSwkLnltYXg9TWF0aC5tYXgoWSxpZSksaGUuYXR0cigiZCIsIk0wLDBaIikpfWVsc2UgYyYmKFcuYWRkUHQoW2FlLGllXSksJD1XLmZpbHRlcmVkKTthLnNlbGVjdGlvbkRlZnMmJmEuc2VsZWN0aW9uRGVmcy5sZW5ndGg/KEo9ZnVuY3Rpb24oZSx0LHIpe2lmKHIpcmV0dXJuIG4uZGlmZmVyZW5jZSh7cmVnaW9uczplLGludmVydGVkOiExfSx7cmVnaW9uczpbdF0saW52ZXJ0ZWQ6ITF9KS5yZWdpb25zO3JldHVybiBuLnVuaW9uKHtyZWdpb25zOmUsaW52ZXJ0ZWQ6ITF9LHtyZWdpb25zOlt0XSxpbnZlcnRlZDohMX0pLnJlZ2lvbnN9KGEubWVyZ2VkUG9seWdvbnMsJCx1ZSksJC5zdWJ0cmFjdD11ZSxRPUkoYS5zZWxlY3Rpb25EZWZzLmNvbmNhdChbJF0pKSk6KEo9WyRdLFE9TCgkKSksZyhVKEoseCksZmUsYSksdyYmYi50aHJvdHRsZShnZSxrLlNFTEVDVERFTEFZLChmdW5jdGlvbigpe3ZhciBlO3ZlPVtdO3ZhciB0LHI9W107Zm9yKEs9MDtLPG1lLmxlbmd0aDtLKyspaWYodD0oZWU9bWVbS10pLl9tb2R1bGUuc2VsZWN0UG9pbnRzKGVlLFEpLHIucHVzaCh0KSxlPVYodCxlZSksdmUubGVuZ3RoKWZvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXZlLnB1c2goZVtuXSk7ZWxzZSB2ZT1lO0IoQyxtZSx0ZT17cG9pbnRzOnZlfSkscGUodGUsJCxXKSxhLmdkLmVtaXQoInBsb3RseV9zZWxlY3RpbmciLHRlKX0pKX0sYS5jbGlja0ZuPWZ1bmN0aW9uKGUsdCl7aWYoaGUucmVtb3ZlKCksQy5fZnVsbExheW91dC5fYWN0aXZlU2hhcGVJbmRleD49MClDLl9mdWxsTGF5b3V0Ll9kZWFjdGl2YXRlU2hhcGUoQyk7ZWxzZSBpZighXyl7dmFyIHI9Ui5jbGlja21vZGU7Yi5kb25lKGdlKS50aGVuKChmdW5jdGlvbigpe2lmKGIuY2xlYXIoZ2UpLDI9PT1lKXtmb3IoZmUucmVtb3ZlKCksSz0wO0s8bWUubGVuZ3RoO0srKykoZWU9bWVbS10pLl9tb2R1bGUuc2VsZWN0UG9pbnRzKGVlLCExKTtCKEMsbWUpLE4oYSksQy5lbWl0KCJwbG90bHlfZGVzZWxlY3QiLG51bGwpfWVsc2Ugci5pbmRleE9mKCJzZWxlY3QiKT4tMSYmeih0LEMsYS54YXhlcyxhLnlheGVzLGEuc3VicGxvdCxhLGZlKSwiZXZlbnQiPT09ciYmQy5lbWl0KCJwbG90bHlfc2VsZWN0ZWQiLHZvaWQgMCk7bC5jbGljayhDLHQpfSkpLmNhdGNoKHkuZXJyb3IpfX0sYS5kb25lRm49ZnVuY3Rpb24oKXtoZS5yZW1vdmUoKSxiLmRvbmUoZ2UpLnRoZW4oKGZ1bmN0aW9uKCl7Yi5jbGVhcihnZSksYS5nZC5lbWl0KCJwbG90bHlfc2VsZWN0ZWQiLHRlKSwkJiZhLnNlbGVjdGlvbkRlZnMmJigkLnN1YnRyYWN0PXVlLGEuc2VsZWN0aW9uRGVmcy5wdXNoKCQpLGEubWVyZ2VkUG9seWdvbnMubGVuZ3RoPTAsW10ucHVzaC5hcHBseShhLm1lcmdlZFBvbHlnb25zLEopKSxhLmRvbmVGbkNvbXBsZXRlZCYmYS5kb25lRm5Db21wbGV0ZWQodmUpfSkpLmNhdGNoKHkuZXJyb3IpLF8mJk4oYSl9fSxjbGVhclNlbGVjdDpTLGNsZWFyU2VsZWN0aW9uc0NhY2hlOk4sc2VsZWN0T25DbGljazp6fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo3NSwiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudC9oZWxwZXJzIjo5MywiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo5NywiLi4vLi4vY29tcG9uZW50cy9meCI6MTE1LCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiOjExMSwiLi4vLi4vY29tcG9uZW50cy9zaGFwZXMvZHJhd19uZXdzaGFwZS9kaXNwbGF5X291dGxpbmVzIjoxNjAsIi4uLy4uL2NvbXBvbmVudHMvc2hhcGVzL2RyYXdfbmV3c2hhcGUvaGVscGVycyI6MTYxLCIuLi8uLi9jb21wb25lbnRzL3NoYXBlcy9kcmF3X25ld3NoYXBlL25ld3NoYXBlcyI6MTYyLCIuLi8uLi9saWIiOjIwMiwiLi4vLi4vbGliL2NsZWFyX2dsX2NhbnZhc2VzIjoxOTAsIi4uLy4uL2xpYi9wb2x5Z29uIjoyMTQsIi4uLy4uL2xpYi90aHJvdHRsZSI6MjI1LCIuLi8uLi9wbG90X2FwaS9zdWJyb3V0aW5lcyI6MjM4LCIuLi8uLi9yZWdpc3RyeSI6MjkwLCIuL2F4aXNfaWRzIjoyNTEsIi4vY29uc3RhbnRzIjoyNTQsIi4vaGFuZGxlX291dGxpbmUiOjI1OCwiLi9oZWxwZXJzIjoyNTkscG9seWJvb2xqczo0OX1dLDI2ODpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJkMyIpLGE9ZSgiZDMtdGltZS1mb3JtYXQiKS51dGNGb3JtYXQsaT1lKCJmYXN0LWlzbnVtZXJpYyIpLG89ZSgiLi4vLi4vbGliIiksbD1vLmNsZWFuTnVtYmVyLHM9by5tczJEYXRlVGltZSxjPW8uZGF0ZVRpbWUybXMsdT1vLmVuc3VyZU51bWJlcixmPW8uaXNBcnJheU9yVHlwZWRBcnJheSxkPWUoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKSxwPWQuRlBfU0FGRSxoPWQuQkFETlVNLGc9ZC5MT0dfQ0xJUCx2PWQuT05FV0VFSyxtPWQuT05FREFZLHk9ZC5PTkVIT1VSLHg9ZC5PTkVNSU4sYj1kLk9ORVNFQyxfPWUoIi4vYXhpc19pZHMiKSx3PWUoIi4vY29uc3RhbnRzIiksVD13LkhPVVJfUEFUVEVSTixrPXcuV0VFS0RBWV9QQVRURVJOO2Z1bmN0aW9uIE0oZSl7cmV0dXJuIE1hdGgucG93KDEwLGUpfWZ1bmN0aW9uIEEoZSl7cmV0dXJuIG51bGwhPWV9dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dD10fHx7fTt2YXIgcj1lLl9pZHx8IngiLGQ9ci5jaGFyQXQoMCk7ZnVuY3Rpb24gTCh0LHIpe2lmKHQ+MClyZXR1cm4gTWF0aC5sb2codCkvTWF0aC5MTjEwO2lmKHQ8PTAmJnImJmUucmFuZ2UmJjI9PT1lLnJhbmdlLmxlbmd0aCl7dmFyIG49ZS5yYW5nZVswXSxhPWUucmFuZ2VbMV07cmV0dXJuLjUqKG4rYS0yKmcqTWF0aC5hYnMobi1hKSl9cmV0dXJuIGh9ZnVuY3Rpb24gUyh0LHIsbixhKXtpZigoYXx8e30pLm1zVVRDJiZpKHQpKXJldHVybit0O3ZhciBsPWModCxufHxlLmNhbGVuZGFyKTtpZihsPT09aCl7aWYoIWkodCkpcmV0dXJuIGg7dD0rdDt2YXIgcz1NYXRoLmZsb29yKDEwKm8ubW9kKHQrLjA1LDEpKSx1PU1hdGgucm91bmQodC1zLzEwKTtsPWMobmV3IERhdGUodSkpK3MvMTB9cmV0dXJuIGx9ZnVuY3Rpb24gQyh0LHIsbil7cmV0dXJuIHModCxyLG58fGUuY2FsZW5kYXIpfWZ1bmN0aW9uIE8odCl7cmV0dXJuIGUuX2NhdGVnb3JpZXNbTWF0aC5yb3VuZCh0KV19ZnVuY3Rpb24gRCh0KXtpZihBKHQpKXtpZih2b2lkIDA9PT1lLl9jYXRlZ29yaWVzTWFwJiYoZS5fY2F0ZWdvcmllc01hcD17fSksdm9pZCAwIT09ZS5fY2F0ZWdvcmllc01hcFt0XSlyZXR1cm4gZS5fY2F0ZWdvcmllc01hcFt0XTtlLl9jYXRlZ29yaWVzLnB1c2goIm51bWJlciI9PXR5cGVvZiB0P1N0cmluZyh0KTp0KTt2YXIgcj1lLl9jYXRlZ29yaWVzLmxlbmd0aC0xO3JldHVybiBlLl9jYXRlZ29yaWVzTWFwW3RdPXIscn1yZXR1cm4gaH1mdW5jdGlvbiBQKHQpe2lmKGUuX2NhdGVnb3JpZXNNYXApcmV0dXJuIGUuX2NhdGVnb3JpZXNNYXBbdF19ZnVuY3Rpb24geihlKXt2YXIgdD1QKGUpO3JldHVybiB2b2lkIDAhPT10P3Q6aShlKT8rZTp2b2lkIDB9ZnVuY3Rpb24gUihlKXtyZXR1cm4gaShlKT8rZTpQKGUpfWZ1bmN0aW9uIEUoZSx0LHIpe3JldHVybiBuLnJvdW5kKHIrdCplLDIpfWZ1bmN0aW9uIEkoZSx0LHIpe3JldHVybihlLXIpL3R9dmFyIEY9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCk/RSh0LGUuX20sZS5fYik6aH0sTj1mdW5jdGlvbih0KXtyZXR1cm4gSSh0LGUuX20sZS5fYil9O2lmKGUucmFuZ2VicmVha3Mpe3ZhciBIPSJ5Ij09PWQ7Rj1mdW5jdGlvbih0KXtpZighaSh0KSlyZXR1cm4gaDt2YXIgcj1lLl9yYW5nZWJyZWFrcy5sZW5ndGg7aWYoIXIpcmV0dXJuIEUodCxlLl9tLGUuX2IpO3ZhciBuPUg7ZS5yYW5nZVswXT5lLnJhbmdlWzFdJiYobj0hbik7Zm9yKHZhciBhPW4/LTE6MSxvPWEqdCxsPTAscz0wO3M8cjtzKyspe3ZhciBjPWEqZS5fcmFuZ2VicmVha3Nbc10ubWluLHU9YSplLl9yYW5nZWJyZWFrc1tzXS5tYXg7aWYobzxjKWJyZWFrO2lmKCEobz51KSl7bD1vPChjK3UpLzI/czpzKzE7YnJlYWt9bD1zKzF9dmFyIGY9ZS5fQltsXXx8MDtyZXR1cm4gaXNGaW5pdGUoZik/RSh0LGUuX20yLGYpOjB9LE49ZnVuY3Rpb24odCl7dmFyIHI9ZS5fcmFuZ2VicmVha3MubGVuZ3RoO2lmKCFyKXJldHVybiBJKHQsZS5fbSxlLl9iKTtmb3IodmFyIG49MCxhPTA7YTxyJiYhKHQ8ZS5fcmFuZ2VicmVha3NbYV0ucG1pbik7YSsrKXQ+ZS5fcmFuZ2VicmVha3NbYV0ucG1heCYmKG49YSsxKTtyZXR1cm4gSSh0LGUuX20yLGUuX0Jbbl0pfX1lLmMybD0ibG9nIj09PWUudHlwZT9MOnUsZS5sMmM9ImxvZyI9PT1lLnR5cGU/TTp1LGUubDJwPUYsZS5wMmw9TixlLmMycD0ibG9nIj09PWUudHlwZT9mdW5jdGlvbihlLHQpe3JldHVybiBGKEwoZSx0KSl9OkYsZS5wMmM9ImxvZyI9PT1lLnR5cGU/ZnVuY3Rpb24oZSl7cmV0dXJuIE0oTihlKSl9Ok4sLTEhPT1bImxpbmVhciIsIi0iXS5pbmRleE9mKGUudHlwZSk/KGUuZDJyPWUucjJkPWUuZDJjPWUucjJjPWUuZDJsPWUucjJsPWwsZS5jMmQ9ZS5jMnI9ZS5sMmQ9ZS5sMnI9dSxlLmQycD1lLnIycD1mdW5jdGlvbih0KXtyZXR1cm4gZS5sMnAobCh0KSl9LGUucDJkPWUucDJyPU4sZS5jbGVhblBvcz11KToibG9nIj09PWUudHlwZT8oZS5kMnI9ZS5kMmw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTChsKGUpLHQpfSxlLnIyZD1lLnIyYz1mdW5jdGlvbihlKXtyZXR1cm4gTShsKGUpKX0sZS5kMmM9ZS5yMmw9bCxlLmMyZD1lLmwycj11LGUuYzJyPUwsZS5sMmQ9TSxlLmQycD1mdW5jdGlvbih0LHIpe3JldHVybiBlLmwycChlLmQycih0LHIpKX0sZS5wMmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIE0oTihlKSl9LGUucjJwPWZ1bmN0aW9uKHQpe3JldHVybiBlLmwycChsKHQpKX0sZS5wMnI9TixlLmNsZWFuUG9zPXUpOiJkYXRlIj09PWUudHlwZT8oZS5kMnI9ZS5yMmQ9by5pZGVudGl0eSxlLmQyYz1lLnIyYz1lLmQybD1lLnIybD1TLGUuYzJkPWUuYzJyPWUubDJkPWUubDJyPUMsZS5kMnA9ZS5yMnA9ZnVuY3Rpb24odCxyLG4pe3JldHVybiBlLmwycChTKHQsMCxuKSl9LGUucDJkPWUucDJyPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gQyhOKGUpLHQscil9LGUuY2xlYW5Qb3M9ZnVuY3Rpb24odCl7cmV0dXJuIG8uY2xlYW5EYXRlKHQsaCxlLmNhbGVuZGFyKX0pOiJjYXRlZ29yeSI9PT1lLnR5cGU/KGUuZDJjPWUuZDJsPUQsZS5yMmQ9ZS5jMmQ9ZS5sMmQ9TyxlLmQycj1lLmQybF9ub2FkZD16LGUucjJjPWZ1bmN0aW9uKHQpe3ZhciByPVIodCk7cmV0dXJuIHZvaWQgMCE9PXI/cjplLmZyYWN0aW9uMnIoLjUpfSxlLmwycj1lLmMycj11LGUucjJsPVIsZS5kMnA9ZnVuY3Rpb24odCl7cmV0dXJuIGUubDJwKGUucjJjKHQpKX0sZS5wMmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIE8oTihlKSl9LGUucjJwPWUuZDJwLGUucDJyPU4sZS5jbGVhblBvcz1mdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGUmJiIiIT09ZT9lOnUoZSl9KToibXVsdGljYXRlZ29yeSI9PT1lLnR5cGUmJihlLnIyZD1lLmMyZD1lLmwyZD1PLGUuZDJyPWUuZDJsX25vYWRkPXosZS5yMmM9ZnVuY3Rpb24odCl7dmFyIHI9eih0KTtyZXR1cm4gdm9pZCAwIT09cj9yOmUuZnJhY3Rpb24yciguNSl9LGUucjJjX2p1c3RfaW5kaWNlcz1QLGUubDJyPWUuYzJyPXUsZS5yMmw9eixlLmQycD1mdW5jdGlvbih0KXtyZXR1cm4gZS5sMnAoZS5yMmModCkpfSxlLnAyZD1mdW5jdGlvbihlKXtyZXR1cm4gTyhOKGUpKX0sZS5yMnA9ZS5kMnAsZS5wMnI9TixlLmNsZWFuUG9zPWZ1bmN0aW9uKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpfHwic3RyaW5nIj09dHlwZW9mIGUmJiIiIT09ZT9lOnUoZSl9LGUuc2V0dXBNdWx0aUNhdGVnb3J5PWZ1bmN0aW9uKG4pe3ZhciBhLGksbD1lLl90cmFjZUluZGljZXMscz1lLl9tYXRjaEdyb3VwO2lmKHMmJjA9PT1lLl9jYXRlZ29yaWVzLmxlbmd0aClmb3IodmFyIGMgaW4gcylpZihjIT09cil7dmFyIHU9dFtfLmlkMm5hbWUoYyldO2w9bC5jb25jYXQodS5fdHJhY2VJbmRpY2VzKX12YXIgcD1bWzAse31dLFswLHt9XV0saD1bXTtmb3IoYT0wO2E8bC5sZW5ndGg7YSsrKXt2YXIgZz1uW2xbYV1dO2lmKGQgaW4gZyl7dmFyIHY9Z1tkXSxtPWcuX2xlbmd0aHx8by5taW5Sb3dMZW5ndGgodik7aWYoZih2WzBdKSYmZih2WzFdKSlmb3IoaT0wO2k8bTtpKyspe3ZhciB5PXZbMF1baV0seD12WzFdW2ldO0EoeSkmJkEoeCkmJihoLnB1c2goW3kseF0pLHkgaW4gcFswXVsxXXx8KHBbMF1bMV1beV09cFswXVswXSsrKSx4IGluIHBbMV1bMV18fChwWzFdWzFdW3hdPXBbMV1bMF0rKykpfX19Zm9yKGguc29ydCgoZnVuY3Rpb24oZSx0KXt2YXIgcj1wWzBdWzFdLG49cltlWzBdXS1yW3RbMF1dO2lmKG4pcmV0dXJuIG47dmFyIGE9cFsxXVsxXTtyZXR1cm4gYVtlWzFdXS1hW3RbMV1dfSkpLGE9MDthPGgubGVuZ3RoO2ErKylEKGhbYV0pfSksZS5mcmFjdGlvbjJyPWZ1bmN0aW9uKHQpe3ZhciByPWUucjJsKGUucmFuZ2VbMF0pLG49ZS5yMmwoZS5yYW5nZVsxXSk7cmV0dXJuIGUubDJyKHIrdCoobi1yKSl9LGUucjJmcmFjdGlvbj1mdW5jdGlvbih0KXt2YXIgcj1lLnIybChlLnJhbmdlWzBdKSxuPWUucjJsKGUucmFuZ2VbMV0pO3JldHVybihlLnIybCh0KS1yKS8obi1yKX0sZS5jbGVhblJhbmdlPWZ1bmN0aW9uKHQscil7cnx8KHI9e30pLHR8fCh0PSJyYW5nZSIpO3ZhciBuLGEsbD1vLm5lc3RlZFByb3BlcnR5KGUsdCkuZ2V0KCk7aWYoYT0oYT0iZGF0ZSI9PT1lLnR5cGU/by5kZmx0UmFuZ2UoZS5jYWxlbmRhcik6InkiPT09ZD93LkRGTFRSQU5HRVk6ci5kZmx0UmFuZ2V8fHcuREZMVFJBTkdFWCkuc2xpY2UoKSwidG96ZXJvIiE9PWUucmFuZ2Vtb2RlJiYibm9ubmVnYXRpdmUiIT09ZS5yYW5nZW1vZGV8fChhWzBdPTApLGwmJjI9PT1sLmxlbmd0aClmb3IoImRhdGUiIT09ZS50eXBlfHxlLmF1dG9yYW5nZXx8KGxbMF09by5jbGVhbkRhdGUobFswXSxoLGUuY2FsZW5kYXIpLGxbMV09by5jbGVhbkRhdGUobFsxXSxoLGUuY2FsZW5kYXIpKSxuPTA7bjwyO24rKylpZigiZGF0ZSI9PT1lLnR5cGUpe2lmKCFvLmlzRGF0ZVRpbWUobFtuXSxlLmNhbGVuZGFyKSl7ZVt0XT1hO2JyZWFrfWlmKGUucjJsKGxbMF0pPT09ZS5yMmwobFsxXSkpe3ZhciBzPW8uY29uc3RyYWluKGUucjJsKGxbMF0pLG8uTUlOX01TKzFlMyxvLk1BWF9NUy0xZTMpO2xbMF09ZS5sMnIocy0xZTMpLGxbMV09ZS5sMnIocysxZTMpO2JyZWFrfX1lbHNle2lmKCFpKGxbbl0pKXtpZighaShsWzEtbl0pKXtlW3RdPWE7YnJlYWt9bFtuXT1sWzEtbl0qKG4/MTA6LjEpfWlmKGxbbl08LXA/bFtuXT0tcDpsW25dPnAmJihsW25dPXApLGxbMF09PT1sWzFdKXt2YXIgYz1NYXRoLm1heCgxLE1hdGguYWJzKDFlLTYqbFswXSkpO2xbMF0tPWMsbFsxXSs9Y319ZWxzZSBvLm5lc3RlZFByb3BlcnR5KGUsdCkuc2V0KGEpfSxlLnNldFNjYWxlPWZ1bmN0aW9uKHIpe3ZhciBuPXQuX3NpemU7aWYoZS5vdmVybGF5aW5nKXt2YXIgYT1fLmdldEZyb21JZCh7X2Z1bGxMYXlvdXQ6dH0sZS5vdmVybGF5aW5nKTtlLmRvbWFpbj1hLmRvbWFpbn12YXIgaT1yJiZlLl9yPyJfciI6InJhbmdlIixvPWUuY2FsZW5kYXI7ZS5jbGVhblJhbmdlKGkpO3ZhciBsLHMsYz1lLnIybChlW2ldWzBdLG8pLHU9ZS5yMmwoZVtpXVsxXSxvKSxmPSJ5Ij09PWQ7aWYoKGY/KGUuX29mZnNldD1uLnQrKDEtZS5kb21haW5bMV0pKm4uaCxlLl9sZW5ndGg9bi5oKihlLmRvbWFpblsxXS1lLmRvbWFpblswXSksZS5fbT1lLl9sZW5ndGgvKGMtdSksZS5fYj0tZS5fbSp1KTooZS5fb2Zmc2V0PW4ubCtlLmRvbWFpblswXSpuLncsZS5fbGVuZ3RoPW4udyooZS5kb21haW5bMV0tZS5kb21haW5bMF0pLGUuX209ZS5fbGVuZ3RoLyh1LWMpLGUuX2I9LWUuX20qYyksZS5fcmFuZ2VicmVha3M9W10sZS5fbEJyZWFrcz0wLGUuX20yPTAsZS5fQj1bXSxlLnJhbmdlYnJlYWtzKSYmKGUuX3JhbmdlYnJlYWtzPWUubG9jYXRlQnJlYWtzKE1hdGgubWluKGMsdSksTWF0aC5tYXgoYyx1KSksZS5fcmFuZ2VicmVha3MubGVuZ3RoKSl7Zm9yKGw9MDtsPGUuX3JhbmdlYnJlYWtzLmxlbmd0aDtsKyspcz1lLl9yYW5nZWJyZWFrc1tsXSxlLl9sQnJlYWtzKz1NYXRoLmFicyhzLm1heC1zLm1pbik7dmFyIHA9ZjtjPnUmJihwPSFwKSxwJiZlLl9yYW5nZWJyZWFrcy5yZXZlcnNlKCk7dmFyIGg9cD8tMToxO2ZvcihlLl9tMj1oKmUuX2xlbmd0aC8oTWF0aC5hYnModS1jKS1lLl9sQnJlYWtzKSxlLl9CLnB1c2goLWUuX20yKihmP3U6YykpLGw9MDtsPGUuX3JhbmdlYnJlYWtzLmxlbmd0aDtsKyspcz1lLl9yYW5nZWJyZWFrc1tsXSxlLl9CLnB1c2goZS5fQltlLl9CLmxlbmd0aC0xXS1oKmUuX20yKihzLm1heC1zLm1pbikpO2ZvcihsPTA7bDxlLl9yYW5nZWJyZWFrcy5sZW5ndGg7bCsrKShzPWUuX3JhbmdlYnJlYWtzW2xdKS5wbWluPUYocy5taW4pLHMucG1heD1GKHMubWF4KX1pZighaXNGaW5pdGUoZS5fbSl8fCFpc0Zpbml0ZShlLl9iKXx8ZS5fbGVuZ3RoPDApdGhyb3cgdC5fcmVwbG90dGluZz0hMSxuZXcgRXJyb3IoIlNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggYXhpcyBzY2FsaW5nIil9LGUubWFza0JyZWFrcz1mdW5jdGlvbih0KXtmb3IodmFyIHIsbixhLGkscyxjPWUucmFuZ2VicmVha3N8fFtdLHU9MDt1PGMubGVuZ3RoO3UrKyl7dmFyIGY9Y1t1XTtpZihmLmVuYWJsZWQpaWYoZi5ib3VuZHMpe3ZhciBkPWYucGF0dGVybjtzd2l0Y2gobj0ocj1vLnNpbXBsZU1hcChmLmJvdW5kcyxkP2w6ZS5kMmMpKVswXSxhPXJbMV0sZCl7Y2FzZSBrOmk9KHM9bmV3IERhdGUodCkpLmdldFVUQ0RheSgpLG4+YSYmKGErPTcsaTxuJiYoaSs9NykpO2JyZWFrO2Nhc2UgVDppPShzPW5ldyBEYXRlKHQpKS5nZXRVVENIb3VycygpKyhzLmdldFVUQ01pbnV0ZXMoKS82MCtzLmdldFVUQ1NlY29uZHMoKS8zNjAwK3MuZ2V0VVRDTWlsbGlzZWNvbmRzKCkvMzZlNSksbj5hJiYoYSs9MjQsaTxuJiYoaSs9MjQpKTticmVhaztjYXNlIiI6aT10fWlmKGk+PW4mJmk8YSlyZXR1cm4gaH1lbHNlIGZvcih2YXIgcD1vLnNpbXBsZU1hcChmLnZhbHVlcyxlLmQyYykuc29ydChvLnNvcnRlckFzYyksZz0wO2c8cC5sZW5ndGg7ZysrKWlmKGE9KG49cFtnXSkrZi5kdmFsdWUsdD49biYmdDxhKXJldHVybiBofXJldHVybiB0fSxlLmxvY2F0ZUJyZWFrcz1mdW5jdGlvbih0LHIpe3ZhciBuLGEsaSxzLGM9W107aWYoIWUucmFuZ2VicmVha3MpcmV0dXJuIGM7dmFyIHU9ZS5yYW5nZWJyZWFrcy5zbGljZSgpLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUucGF0dGVybj09PWsmJnQucGF0dGVybj09PVQ/LTE6dC5wYXR0ZXJuPT09ayYmZS5wYXR0ZXJuPT09VD8xOjB9KSksZj1mdW5jdGlvbihlLG4pe2lmKChlPW8uY29uc3RyYWluKGUsdCxyKSkhPT0obj1vLmNvbnN0cmFpbihuLHQscikpKXtmb3IodmFyIGE9ITAsaT0wO2k8Yy5sZW5ndGg7aSsrKXt2YXIgbD1jW2ldO2U8bC5tYXgmJm4+PWwubWluJiYoZTxsLm1pbiYmKGwubWluPWUpLG4+bC5tYXgmJihsLm1heD1uKSxhPSExKX1hJiZjLnB1c2goe21pbjplLG1heDpufSl9fTtmb3Iobj0wO248dS5sZW5ndGg7bisrKXt2YXIgZD11W25dO2lmKGQuZW5hYmxlZClpZihkLmJvdW5kcyl7dmFyIHA9dCxoPXI7ZC5wYXR0ZXJuJiYocD1NYXRoLmZsb29yKHApKSxpPShhPW8uc2ltcGxlTWFwKGQuYm91bmRzLGQucGF0dGVybj9sOmUucjJsKSlbMF0scz1hWzFdO3ZhciBnLF8sdz1uZXcgRGF0ZShwKTtzd2l0Y2goZC5wYXR0ZXJuKXtjYXNlIGs6Xz12LGc9KHMtaSsoczxpPzc6MCkpKm0scCs9aSptLSh3LmdldFVUQ0RheSgpKm0rdy5nZXRVVENIb3VycygpKnkrdy5nZXRVVENNaW51dGVzKCkqeCt3LmdldFVUQ1NlY29uZHMoKSpiK3cuZ2V0VVRDTWlsbGlzZWNvbmRzKCkpO2JyZWFrO2Nhc2UgVDpfPW0sZz0ocy1pKyhzPGk/MjQ6MCkpKnkscCs9aSp5LSh3LmdldFVUQ0hvdXJzKCkqeSt3LmdldFVUQ01pbnV0ZXMoKSp4K3cuZ2V0VVRDU2Vjb25kcygpKmIrdy5nZXRVVENNaWxsaXNlY29uZHMoKSk7YnJlYWs7ZGVmYXVsdDpwPU1hdGgubWluKGFbMF0sYVsxXSksZz1fPShoPU1hdGgubWF4KGFbMF0sYVsxXSkpLXB9Zm9yKHZhciBNPXA7TTxoO00rPV8pZihNLE0rZyl9ZWxzZSBmb3IodmFyIEE9by5zaW1wbGVNYXAoZC52YWx1ZXMsZS5kMmMpLEw9MDtMPEEubGVuZ3RoO0wrKylmKGk9QVtMXSxzPWkrZC5kdmFsdWUpfXJldHVybiBjLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubWluLXQubWlufSkpLGN9LGUubWFrZUNhbGNkYXRhPWZ1bmN0aW9uKHQscixuKXt2YXIgYSxpLGwscyxjPWUudHlwZSx1PSJkYXRlIj09PWMmJnRbcisiY2FsZW5kYXIiXTtpZihyIGluIHQpe2lmKGE9dFtyXSxzPXQuX2xlbmd0aHx8by5taW5Sb3dMZW5ndGgoYSksby5pc1R5cGVkQXJyYXkoYSkmJigibGluZWFyIj09PWN8fCJsb2ciPT09Yykpe2lmKHM9PT1hLmxlbmd0aClyZXR1cm4gYTtpZihhLnN1YmFycmF5KXJldHVybiBhLnN1YmFycmF5KDAscyl9aWYoIm11bHRpY2F0ZWdvcnkiPT09YylyZXR1cm4gZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7bisrKXt2YXIgYT0oZVswXXx8W10pW25dLGk9KGVbMV18fFtdKVtuXTtyW25dPVAoW2EsaV0pfXJldHVybiByfShhLHMpO2ZvcihpPW5ldyBBcnJheShzKSxsPTA7bDxzO2wrKylpW2xdPWUuZDJjKGFbbF0sMCx1LG4pfWVsc2V7dmFyIGY9cisiMCJpbiB0P2UuZDJjKHRbcisiMCJdLDAsdSk6MCxkPXRbImQiK3JdP051bWJlcih0WyJkIityXSk6MTtmb3IoYT10W3t4OiJ5Iix5OiJ4In1bcl1dLHM9dC5fbGVuZ3RofHxhLmxlbmd0aCxpPW5ldyBBcnJheShzKSxsPTA7bDxzO2wrKylpW2xdPWYrbCpkfWlmKGUucmFuZ2VicmVha3MpZm9yKGw9MDtsPHM7bCsrKWlbbF09ZS5tYXNrQnJlYWtzKGlbbF0pO3JldHVybiBpfSxlLmlzVmFsaWRSYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmMj09PXQubGVuZ3RoJiZpKGUucjJsKHRbMF0pKSYmaShlLnIybCh0WzFdKSl9LGUuaXNQdFdpdGhpblJhbmdlPWZ1bmN0aW9uKHQscil7dmFyIG49ZS5jMmwodFtkXSxudWxsLHIpLGE9ZS5yMmwoZS5yYW5nZVswXSksaT1lLnIybChlLnJhbmdlWzFdKTtyZXR1cm4gYTxpP2E8PW4mJm48PWk6aTw9biYmbjw9YX0sZS5fZW1wdHlDYXRlZ29yaWVzPWZ1bmN0aW9uKCl7ZS5fY2F0ZWdvcmllcz1bXSxlLl9jYXRlZ29yaWVzTWFwPXt9fSxlLmNsZWFyQ2FsYz1mdW5jdGlvbigpe3ZhciByPWUuX21hdGNoR3JvdXA7aWYocil7dmFyIG49bnVsbCxhPW51bGw7Zm9yKHZhciBpIGluIHIpe3ZhciBvPXRbXy5pZDJuYW1lKGkpXTtpZihvLl9jYXRlZ29yaWVzKXtuPW8uX2NhdGVnb3JpZXMsYT1vLl9jYXRlZ29yaWVzTWFwO2JyZWFrfX1uJiZhPyhlLl9jYXRlZ29yaWVzPW4sZS5fY2F0ZWdvcmllc01hcD1hKTplLl9lbXB0eUNhdGVnb3JpZXMoKX1lbHNlIGUuX2VtcHR5Q2F0ZWdvcmllcygpO2lmKGUuX2luaXRpYWxDYXRlZ29yaWVzKWZvcih2YXIgbD0wO2w8ZS5faW5pdGlhbENhdGVnb3JpZXMubGVuZ3RoO2wrKylEKGUuX2luaXRpYWxDYXRlZ29yaWVzW2xdKX0sZS5zb3J0QnlJbml0aWFsQ2F0ZWdvcmllcz1mdW5jdGlvbigpe3ZhciBuPVtdO2lmKGUuX2VtcHR5Q2F0ZWdvcmllcygpLGUuX2luaXRpYWxDYXRlZ29yaWVzKWZvcih2YXIgYT0wO2E8ZS5faW5pdGlhbENhdGVnb3JpZXMubGVuZ3RoO2ErKylEKGUuX2luaXRpYWxDYXRlZ29yaWVzW2FdKTtuPW4uY29uY2F0KGUuX3RyYWNlSW5kaWNlcyk7dmFyIGk9ZS5fbWF0Y2hHcm91cDtmb3IodmFyIG8gaW4gaSlpZihyIT09byl7dmFyIGw9dFtfLmlkMm5hbWUobyldO2wuX2NhdGVnb3JpZXM9ZS5fY2F0ZWdvcmllcyxsLl9jYXRlZ29yaWVzTWFwPWUuX2NhdGVnb3JpZXNNYXAsbj1uLmNvbmNhdChsLl90cmFjZUluZGljZXMpfXJldHVybiBufTt2YXIgaj10Ll9kM2xvY2FsZTsiZGF0ZSI9PT1lLnR5cGUmJihlLl9kYXRlRm9ybWF0PWo/ai50aW1lRm9ybWF0OmEsZS5fZXh0cmFGb3JtYXQ9dC5fZXh0cmFGb3JtYXQpLGUuX3NlcGFyYXRvcnM9dC5zZXBhcmF0b3JzLGUuX251bUZvcm1hdD1qP2oubnVtYmVyRm9ybWF0Om4uZm9ybWF0LGRlbGV0ZSBlLl9taW5EdGljayxkZWxldGUgZS5fZm9yY2VUaWNrMH19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6MTgxLCIuLi8uLi9saWIiOjIwMiwiLi9heGlzX2lkcyI6MjUxLCIuL2NvbnN0YW50cyI6MjU0LGQzOjksImQzLXRpbWUtZm9ybWF0Ijo3LCJmYXN0LWlzbnVtZXJpYyI6MTF9XSwyNjk6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vbGliIiksYT1lKCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIikuY29udHJhc3QsaT1lKCIuL2xheW91dF9hdHRyaWJ1dGVzIiksbz1lKCIuLi9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKTtmdW5jdGlvbiBsKGUpe3ZhciB0PVsic2hvd2V4cG9uZW50Iiwic2hvd3RpY2twcmVmaXgiLCJzaG93dGlja3N1ZmZpeCJdLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PWVbdF19KSk7aWYodC5ldmVyeSgoZnVuY3Rpb24ocil7cmV0dXJuIGVbcl09PT1lW3RbMF1dfSkpfHwxPT09dC5sZW5ndGgpcmV0dXJuIGVbdFswXV19ZnVuY3Rpb24gcyhlLHQpe2Z1bmN0aW9uIHIocixhKXtyZXR1cm4gbi5jb2VyY2UoZSx0LGkudGlja2Zvcm1hdHN0b3BzLHIsYSl9cigiZW5hYmxlZCIpJiYocigiZHRpY2tyYW5nZSIpLHIoInZhbHVlIikpfXQuZXhwb3J0cz1mdW5jdGlvbihlLHQscixjLHUsZil7ZiYmMSE9PWYucGFzc3x8ZnVuY3Rpb24oZSx0LHIsbixhKXt2YXIgaT1sKGUpO3IoInRpY2twcmVmaXgiKSYmcigic2hvd3RpY2twcmVmaXgiLGkpO3IoInRpY2tzdWZmaXgiLGEudGlja1N1ZmZpeERmbHQpJiZyKCJzaG93dGlja3N1ZmZpeCIsaSl9KGUsMCxyLDAsdSksZiYmMiE9PWYucGFzc3x8ZnVuY3Rpb24oZSx0LHIsYyx1KXt2YXIgZj1sKGUpO3IoInRpY2twcmVmaXgiKSYmcigic2hvd3RpY2twcmVmaXgiLGYpO3IoInRpY2tzdWZmaXgiLHUudGlja1N1ZmZpeERmbHQpJiZyKCJzaG93dGlja3N1ZmZpeCIsZik7aWYocigic2hvd3RpY2tsYWJlbHMiKSl7dmFyIGQ9dS5mb250fHx7fSxwPXQuY29sb3IsaD0tMSE9PSh0LnRpY2tsYWJlbHBvc2l0aW9ufHwiIikuaW5kZXhPZigiaW5zaWRlIik/YSh1LmJnQ29sb3IpOnAmJnAhPT1pLmNvbG9yLmRmbHQ/cDpkLmNvbG9yO2lmKG4uY29lcmNlRm9udChyLCJ0aWNrZm9udCIse2ZhbWlseTpkLmZhbWlseSxzaXplOmQuc2l6ZSxjb2xvcjpofSkscigidGlja2FuZ2xlIiksImNhdGVnb3J5IiE9PWMpe3ZhciBnPXIoInRpY2tmb3JtYXQiKTtvKGUsdCx7bmFtZToidGlja2Zvcm1hdHN0b3BzIixpbmNsdXNpb25BdHRyOiJlbmFibGVkIixoYW5kbGVJdGVtRGVmYXVsdHM6c30pLHQudGlja2Zvcm1hdHN0b3BzLmxlbmd0aHx8ZGVsZXRlIHQudGlja2Zvcm1hdHN0b3BzLGd8fCJkYXRlIj09PWN8fChyKCJzaG93ZXhwb25lbnQiLGYpLHIoImV4cG9uZW50Zm9ybWF0IikscigibWluZXhwb25lbnQiKSxyKCJzZXBhcmF0ZXRob3VzYW5kcyIpKX19fShlLHQscixjLHUpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo3NSwiLi4vLi4vbGliIjoyMDIsIi4uL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6MjQzLCIuL2xheW91dF9hdHRyaWJ1dGVzIjoyNjJ9XSwyNzA6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vbGliIiksYT1lKCIuL2xheW91dF9hdHRyaWJ1dGVzIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLGkpe3ZhciBvPW4uY29lcmNlMihlLHQsYSwidGlja2xlbiIpLGw9bi5jb2VyY2UyKGUsdCxhLCJ0aWNrd2lkdGgiKSxzPW4uY29lcmNlMihlLHQsYSwidGlja2NvbG9yIix0LmNvbG9yKTtyKCJ0aWNrcyIsaS5vdXRlclRpY2tzfHxvfHxsfHxzPyJvdXRzaWRlIjoiIil8fChkZWxldGUgdC50aWNrbGVuLGRlbGV0ZSB0LnRpY2t3aWR0aCxkZWxldGUgdC50aWNrY29sb3IpfX0seyIuLi8uLi9saWIiOjIwMiwiLi9sYXlvdXRfYXR0cmlidXRlcyI6MjYyfV0sMjcxOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4vY2xlYW5fdGlja3MiKSxhPWUoIi4uLy4uL2xpYiIpLmlzQXJyYXlPclR5cGVkQXJyYXk7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLGkpe2Z1bmN0aW9uIG8ocil7dmFyIG49ZVtyXTtyZXR1cm4gdm9pZCAwIT09bj9uOih0Ll90ZW1wbGF0ZXx8e30pW3JdfXZhciBsPW8oInRpY2swIikscz1vKCJkdGljayIpLGM9bygidGlja3ZhbHMiKSx1PXIoInRpY2ttb2RlIixhKGMpPyJhcnJheSI6cz8ibGluZWFyIjoiYXV0byIpO2lmKCJhdXRvIj09PXUpcigibnRpY2tzIik7ZWxzZSBpZigibGluZWFyIj09PXUpe3ZhciBmPXQuZHRpY2s9bi5kdGljayhzLGkpO3QudGljazA9bi50aWNrMChsLGksdC5jYWxlbmRhcixmKX1lbHNlIGlmKCJtdWx0aWNhdGVnb3J5IiE9PWkpe3ZvaWQgMD09PXIoInRpY2t2YWxzIik/dC50aWNrbW9kZT0iYXV0byI6cigidGlja3RleHQiKX19fSx7Ii4uLy4uL2xpYiI6MjAyLCIuL2NsZWFuX3RpY2tzIjoyNTN9XSwyNzI6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiZDMiKSxhPWUoIi4uLy4uL3JlZ2lzdHJ5IiksaT1lKCIuLi8uLi9saWIiKSxvPWUoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGw9ZSgiLi9heGVzIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLHMpe3ZhciBjPWUuX2Z1bGxMYXlvdXQ7aWYoMCE9PXQubGVuZ3RoKXt2YXIgdSxmLGQscDtzJiYodT1zKCkpO3ZhciBoPW4uZWFzZShyLmVhc2luZyk7cmV0dXJuIGUuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3MucHVzaCgoZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHApLHA9bnVsbCxmdW5jdGlvbigpe2Zvcih2YXIgcj17fSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl0sbz1pLnBsb3RpbmZvLnhheGlzLGw9aS5wbG90aW5mby55YXhpcztpLnhyMCYmKHJbby5fbmFtZSsiLnJhbmdlIl09aS54cjAuc2xpY2UoKSksaS55cjAmJihyW2wuX25hbWUrIi5yYW5nZSJdPWkueXIwLnNsaWNlKCkpfXJldHVybiBhLmNhbGwoInJlbGF5b3V0IixlLHIpLnRoZW4oKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspZyh0W2VdLnBsb3RpbmZvKX0pKX0oKX0pKSxmPURhdGUubm93KCkscD13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKChmdW5jdGlvbiBuKCl7ZD1EYXRlLm5vdygpO2Zvcih2YXIgaT1NYXRoLm1pbigxLChkLWYpL3IuZHVyYXRpb24pLG89aChpKSxsPTA7bDx0Lmxlbmd0aDtsKyspdih0W2xdLG8pO2QtZj5yLmR1cmF0aW9uPyghZnVuY3Rpb24oKXtmb3IodmFyIHI9e30sbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dLG89aS5wbG90aW5mby54YXhpcyxsPWkucGxvdGluZm8ueWF4aXM7aS54cjEmJihyW28uX25hbWUrIi5yYW5nZSJdPWkueHIxLnNsaWNlKCkpLGkueXIxJiYocltsLl9uYW1lKyIucmFuZ2UiXT1pLnlyMS5zbGljZSgpKX11JiZ1KCksYS5jYWxsKCJyZWxheW91dCIsZSxyKS50aGVuKChmdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKWcodFtlXS5wbG90aW5mbyl9KSl9KCkscD13aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUobikpOnA9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShuKX0pKSxQcm9taXNlLnJlc29sdmUoKX1mdW5jdGlvbiBnKGUpe3ZhciB0PWUueGF4aXMscj1lLnlheGlzO2MuX2RlZnMuc2VsZWN0KCIjIitlLmNsaXBJZCsiPiByZWN0IikuY2FsbChvLnNldFRyYW5zbGF0ZSwwLDApLmNhbGwoby5zZXRTY2FsZSwxLDEpLGUucGxvdC5jYWxsKG8uc2V0VHJhbnNsYXRlLHQuX29mZnNldCxyLl9vZmZzZXQpLmNhbGwoby5zZXRTY2FsZSwxLDEpO3ZhciBuPWUucGxvdC5zZWxlY3RBbGwoIi5zY2F0dGVybGF5ZXIgLnRyYWNlIik7bi5zZWxlY3RBbGwoIi5wb2ludCIpLmNhbGwoby5zZXRQb2ludEdyb3VwU2NhbGUsMSwxKSxuLnNlbGVjdEFsbCgiLnRleHRwb2ludCIpLmNhbGwoby5zZXRUZXh0UG9pbnRzU2NhbGUsMSwxKSxuLmNhbGwoby5oaWRlT3V0c2lkZVJhbmdlUG9pbnRzLGUpfWZ1bmN0aW9uIHYodCxyKXt2YXIgbj10LnBsb3RpbmZvLGE9bi54YXhpcyxzPW4ueWF4aXMsYz1hLl9sZW5ndGgsdT1zLl9sZW5ndGgsZj0hIXQueHIxLGQ9ISF0LnlyMSxwPVtdO2lmKGYpe3ZhciBoPWkuc2ltcGxlTWFwKHQueHIwLGEucjJsKSxnPWkuc2ltcGxlTWFwKHQueHIxLGEucjJsKSx2PWhbMV0taFswXSxtPWdbMV0tZ1swXTtwWzBdPShoWzBdKigxLXIpK3IqZ1swXS1oWzBdKS8oaFsxXS1oWzBdKSpjLHBbMl09YyooMS1yK3IqbS92KSxhLnJhbmdlWzBdPWEubDJyKGhbMF0qKDEtcikrcipnWzBdKSxhLnJhbmdlWzFdPWEubDJyKGhbMV0qKDEtcikrcipnWzFdKX1lbHNlIHBbMF09MCxwWzJdPWM7aWYoZCl7dmFyIHk9aS5zaW1wbGVNYXAodC55cjAscy5yMmwpLHg9aS5zaW1wbGVNYXAodC55cjEscy5yMmwpLGI9eVsxXS15WzBdLF89eFsxXS14WzBdO3BbMV09KHlbMV0qKDEtcikrcip4WzFdLXlbMV0pLyh5WzBdLXlbMV0pKnUscFszXT11KigxLXIrcipfL2IpLHMucmFuZ2VbMF09YS5sMnIoeVswXSooMS1yKStyKnhbMF0pLHMucmFuZ2VbMV09cy5sMnIoeVsxXSooMS1yKStyKnhbMV0pfWVsc2UgcFsxXT0wLHBbM109dTtsLmRyYXdPbmUoZSxhLHtza2lwVGl0bGU6ITB9KSxsLmRyYXdPbmUoZSxzLHtza2lwVGl0bGU6ITB9KSxsLnJlZHJhd0NvbXBvbmVudHMoZSxbYS5faWQscy5faWRdKTt2YXIgdz1mP2MvcFsyXToxLFQ9ZD91L3BbM106MSxrPWY/cFswXTowLE09ZD9wWzFdOjAsQT1mP3BbMF0vcFsyXSpjOjAsTD1kP3BbMV0vcFszXSp1OjAsUz1hLl9vZmZzZXQtQSxDPXMuX29mZnNldC1MO24uY2xpcFJlY3QuY2FsbChvLnNldFRyYW5zbGF0ZSxrLE0pLmNhbGwoby5zZXRTY2FsZSwxL3csMS9UKSxuLnBsb3QuY2FsbChvLnNldFRyYW5zbGF0ZSxTLEMpLmNhbGwoby5zZXRTY2FsZSx3LFQpLG8uc2V0UG9pbnRHcm91cFNjYWxlKG4uem9vbVNjYWxlUHRzLDEvdywxL1QpLG8uc2V0VGV4dFBvaW50c1NjYWxlKG4uem9vbVNjYWxlVHh0LDEvdywxL1QpfWwucmVkcmF3Q29tcG9uZW50cyhlKX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo5NywiLi4vLi4vbGliIjoyMDIsIi4uLy4uL3JlZ2lzdHJ5IjoyOTAsIi4vYXhlcyI6MjQ4LGQzOjl9XSwyNzM6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vcmVnaXN0cnkiKS50cmFjZUlzLGE9ZSgiLi9heGlzX2F1dG90eXBlIik7ZnVuY3Rpb24gaShlKXtyZXR1cm57djoieCIsaDoieSJ9W2Uub3JpZW50YXRpb258fCJ2Il19ZnVuY3Rpb24gbyhlLHQpe3ZhciByPWkoZSksYT1uKGUsImJveC12aW9saW4iKSxvPW4oZS5fZnVsbElucHV0fHx7fSwiY2FuZGxlc3RpY2siKTtyZXR1cm4gYSYmIW8mJnQ9PT1yJiZ2b2lkIDA9PT1lW3JdJiZ2b2lkIDA9PT1lW3IrIjAiXX10LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsbCl7cigiYXV0b3R5cGVudW1iZXJzIixsLmF1dG90eXBlbnVtYmVyc0RmbHQpLCItIj09PXIoInR5cGUiLChsLnNwbG9tU3Rhc2h8fHt9KS50eXBlKSYmKCFmdW5jdGlvbihlLHQpe2lmKCItIiE9PWUudHlwZSlyZXR1cm47dmFyIHIsbD1lLl9pZCxzPWwuY2hhckF0KDApOy0xIT09bC5pbmRleE9mKCJzY2VuZSIpJiYobD1zKTt2YXIgYz1mdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBhPWVbbl07aWYoInNwbG9tIj09PWEudHlwZSYmYS5fbGVuZ3RoPjAmJihhWyJfIityKyJheGVzIl18fHt9KVt0XSlyZXR1cm4gYTtpZigoYVtyKyJheGlzIl18fHIpPT09dCl7aWYobyhhLHIpKXJldHVybiBhO2lmKChhW3JdfHxbXSkubGVuZ3RofHxhW3IrIjAiXSlyZXR1cm4gYX19fSh0LGwscyk7aWYoIWMpcmV0dXJuO2lmKCJoaXN0b2dyYW0iPT09Yy50eXBlJiZzPT09e3Y6InkiLGg6IngifVtjLm9yaWVudGF0aW9ufHwidiJdKXJldHVybiB2b2lkKGUudHlwZT0ibGluZWFyIik7dmFyIHU9cysiY2FsZW5kYXIiLGY9Y1t1XSxkPXtub011bHRpQ2F0ZWdvcnk6IW4oYywiY2FydGVzaWFuIil8fG4oYywibm9NdWx0aUNhdGVnb3J5Iil9OyJib3giPT09Yy50eXBlJiZjLl9oYXNQcmVDb21wU3RhdHMmJnM9PT17aDoieCIsdjoieSJ9W2Mub3JpZW50YXRpb258fCJ2Il0mJihkLm5vTXVsdGlDYXRlZ29yeT0hMCk7aWYoZC5hdXRvdHlwZW51bWJlcnM9ZS5hdXRvdHlwZW51bWJlcnMsbyhjLHMpKXt2YXIgcD1pKGMpLGg9W107Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGc9dFtyXTtuKGcsImJveC12aW9saW4iKSYmKGdbcysiYXhpcyJdfHxzKT09PWwmJih2b2lkIDAhPT1nW3BdP2gucHVzaChnW3BdWzBdKTp2b2lkIDAhPT1nLm5hbWU/aC5wdXNoKGcubmFtZSk6aC5wdXNoKCJ0ZXh0IiksZ1t1XSE9PWYmJihmPXZvaWQgMCkpfWUudHlwZT1hKGgsZixkKX1lbHNlIGlmKCJzcGxvbSI9PT1jLnR5cGUpe3ZhciB2PWMuZGltZW5zaW9uc1tjLl9heGVzRGltW2xdXTt2LnZpc2libGUmJihlLnR5cGU9YSh2LnZhbHVlcyxmLGQpKX1lbHNlIGUudHlwZT1hKGNbc118fFtjW3MrIjAiXV0sZixkKX0odCxsLmRhdGEpLCItIj09PXQudHlwZT90LnR5cGU9ImxpbmVhciI6ZS50eXBlPXQudHlwZSl9fSx7Ii4uLy4uL3JlZ2lzdHJ5IjoyOTAsIi4vYXhpc19hdXRvdHlwZSI6MjQ5fV0sMjc0OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uL3JlZ2lzdHJ5IiksYT1lKCIuLi9saWIiKTtmdW5jdGlvbiBpKGUsdCxyKXt2YXIgbixpLG8sbD0hMTtpZigiZGF0YSI9PT10LnR5cGUpbj1lLl9mdWxsRGF0YVtudWxsIT09dC50cmFjZXM/dC50cmFjZXNbMF06MF07ZWxzZXtpZigibGF5b3V0IiE9PXQudHlwZSlyZXR1cm4hMTtuPWUuX2Z1bGxMYXlvdXR9cmV0dXJuIGk9YS5uZXN0ZWRQcm9wZXJ0eShuLHQucHJvcCkuZ2V0KCksKG89clt0LnR5cGVdPXJbdC50eXBlXXx8e30pLmhhc093blByb3BlcnR5KHQucHJvcCkmJm9bdC5wcm9wXSE9PWkmJihsPSEwKSxvW3QucHJvcF09aSx7Y2hhbmdlZDpsLHZhbHVlOml9fWZ1bmN0aW9uIG8oZSx0KXt2YXIgcj1bXSxuPXRbMF0saT17fTtpZigic3RyaW5nIj09dHlwZW9mIG4paVtuXT10WzFdO2Vsc2V7aWYoIWEuaXNQbGFpbk9iamVjdChuKSlyZXR1cm4gcjtpPW59cmV0dXJuIHMoaSwoZnVuY3Rpb24oZSx0LG4pe3IucHVzaCh7dHlwZToibGF5b3V0Iixwcm9wOmUsdmFsdWU6bn0pfSksIiIsMCkscn1mdW5jdGlvbiBsKGUsdCl7dmFyIHIsbixpLG8sbD1bXTtpZihuPXRbMF0saT10WzFdLHI9dFsyXSxvPXt9LCJzdHJpbmciPT10eXBlb2YgbilvW25dPWk7ZWxzZXtpZighYS5pc1BsYWluT2JqZWN0KG4pKXJldHVybiBsO289bix2b2lkIDA9PT1yJiYocj1pKX1yZXR1cm4gdm9pZCAwPT09ciYmKHI9bnVsbCkscyhvLChmdW5jdGlvbih0LG4sYSl7dmFyIGksbztpZihBcnJheS5pc0FycmF5KGEpKXtvPWEuc2xpY2UoKTt2YXIgcz1NYXRoLm1pbihvLmxlbmd0aCxlLmRhdGEubGVuZ3RoKTtyJiYocz1NYXRoLm1pbihzLHIubGVuZ3RoKSksaT1bXTtmb3IodmFyIGM9MDtjPHM7YysrKWlbY109cj9yW2NdOmN9ZWxzZSBvPWEsaT1yP3Iuc2xpY2UoKTpudWxsO2lmKG51bGw9PT1pKUFycmF5LmlzQXJyYXkobykmJihvPW9bMF0pO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShpKSl7aWYoIUFycmF5LmlzQXJyYXkobykpe3ZhciB1PW87bz1bXTtmb3IodmFyIGY9MDtmPGkubGVuZ3RoO2YrKylvW2ZdPXV9by5sZW5ndGg9TWF0aC5taW4oaS5sZW5ndGgsby5sZW5ndGgpfWwucHVzaCh7dHlwZToiZGF0YSIscHJvcDp0LHRyYWNlczppLHZhbHVlOm99KX0pLCIiLDApLGx9ZnVuY3Rpb24gcyhlLHQscixuKXtPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbihpKXt2YXIgbz1lW2ldO2lmKCJfIiE9PWlbMF0pe3ZhciBsPXIrKG4+MD8iLiI6IiIpK2k7YS5pc1BsYWluT2JqZWN0KG8pP3Mobyx0LGwsbisxKTp0KGwsaSxvKX19KSl9ci5tYW5hZ2VDb21tYW5kT2JzZXJ2ZXI9ZnVuY3Rpb24oZSx0LG4sbyl7dmFyIGw9e30scz0hMDt0JiZ0Ll9jb21tYW5kT2JzZXJ2ZXImJihsPXQuX2NvbW1hbmRPYnNlcnZlciksbC5jYWNoZXx8KGwuY2FjaGU9e30pLGwubG9va3VwVGFibGU9e307dmFyIGM9ci5oYXNTaW1wbGVBUElDb21tYW5kQmluZGluZ3MoZSxuLGwubG9va3VwVGFibGUpO2lmKHQmJnQuX2NvbW1hbmRPYnNlcnZlcil7aWYoYylyZXR1cm4gbDtpZih0Ll9jb21tYW5kT2JzZXJ2ZXIucmVtb3ZlKXJldHVybiB0Ll9jb21tYW5kT2JzZXJ2ZXIucmVtb3ZlKCksdC5fY29tbWFuZE9ic2VydmVyPW51bGwsbH1pZihjKXtpKGUsYyxsLmNhY2hlKSxsLmNoZWNrPWZ1bmN0aW9uKCl7aWYocyl7dmFyIHQ9aShlLGMsbC5jYWNoZSk7cmV0dXJuIHQuY2hhbmdlZCYmbyYmdm9pZCAwIT09bC5sb29rdXBUYWJsZVt0LnZhbHVlXSYmKGwuZGlzYWJsZSgpLFByb21pc2UucmVzb2x2ZShvKHt2YWx1ZTp0LnZhbHVlLHR5cGU6Yy50eXBlLHByb3A6Yy5wcm9wLHRyYWNlczpjLnRyYWNlcyxpbmRleDpsLmxvb2t1cFRhYmxlW3QudmFsdWVdfSkpLnRoZW4obC5lbmFibGUsbC5lbmFibGUpKSx0LmNoYW5nZWR9fTtmb3IodmFyIHU9WyJwbG90bHlfcmVsYXlvdXQiLCJwbG90bHlfcmVkcmF3IiwicGxvdGx5X3Jlc3R5bGUiLCJwbG90bHlfdXBkYXRlIiwicGxvdGx5X2FuaW1hdGluZ2ZyYW1lIiwicGxvdGx5X2FmdGVycGxvdCJdLGY9MDtmPHUubGVuZ3RoO2YrKyllLl9pbnRlcm5hbE9uKHVbZl0sbC5jaGVjayk7bC5yZW1vdmU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PHUubGVuZ3RoO3QrKyllLl9yZW1vdmVJbnRlcm5hbExpc3RlbmVyKHVbdF0sbC5jaGVjayl9fWVsc2UgYS5sb2coIlVuYWJsZSB0byBhdXRvbWF0aWNhbGx5IGJpbmQgcGxvdCB1cGRhdGVzIHRvIEFQSSBjb21tYW5kIiksbC5sb29rdXBUYWJsZT17fSxsLnJlbW92ZT1mdW5jdGlvbigpe307cmV0dXJuIGwuZGlzYWJsZT1mdW5jdGlvbigpe3M9ITF9LGwuZW5hYmxlPWZ1bmN0aW9uKCl7cz0hMH0sdCYmKHQuX2NvbW1hbmRPYnNlcnZlcj1sKSxsfSxyLmhhc1NpbXBsZUFQSUNvbW1hbmRCaW5kaW5ncz1mdW5jdGlvbihlLHQsbil7dmFyIGEsaSxvPXQubGVuZ3RoO2ZvcihhPTA7YTxvO2ErKyl7dmFyIGwscz10W2FdLGM9cy5tZXRob2QsdT1zLmFyZ3M7aWYoQXJyYXkuaXNBcnJheSh1KXx8KHU9W10pLCFjKXJldHVybiExO3ZhciBmPXIuY29tcHV0ZUFQSUNvbW1hbmRCaW5kaW5ncyhlLGMsdSk7aWYoMSE9PWYubGVuZ3RoKXJldHVybiExO2lmKGkpe2lmKChsPWZbMF0pLnR5cGUhPT1pLnR5cGUpcmV0dXJuITE7aWYobC5wcm9wIT09aS5wcm9wKXJldHVybiExO2lmKEFycmF5LmlzQXJyYXkoaS50cmFjZXMpKXtpZighQXJyYXkuaXNBcnJheShsLnRyYWNlcykpcmV0dXJuITE7bC50cmFjZXMuc29ydCgpO2Zvcih2YXIgZD0wO2Q8aS50cmFjZXMubGVuZ3RoO2QrKylpZihpLnRyYWNlc1tkXSE9PWwudHJhY2VzW2RdKXJldHVybiExfWVsc2UgaWYobC5wcm9wIT09aS5wcm9wKXJldHVybiExfWVsc2UgaT1mWzBdLEFycmF5LmlzQXJyYXkoaS50cmFjZXMpJiZpLnRyYWNlcy5zb3J0KCk7dmFyIHA9KGw9ZlswXSkudmFsdWU7aWYoQXJyYXkuaXNBcnJheShwKSl7aWYoMSE9PXAubGVuZ3RoKXJldHVybiExO3A9cFswXX1uJiYobltwXT1hKX1yZXR1cm4gaX0sci5leGVjdXRlQVBJQ29tbWFuZD1mdW5jdGlvbihlLHQscil7aWYoInNraXAiPT09dClyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7dmFyIGk9bi5hcGlNZXRob2RSZWdpc3RyeVt0XSxvPVtlXTtBcnJheS5pc0FycmF5KHIpfHwocj1bXSk7Zm9yKHZhciBsPTA7bDxyLmxlbmd0aDtsKyspby5wdXNoKHJbbF0pO3JldHVybiBpLmFwcGx5KG51bGwsbykuY2F0Y2goKGZ1bmN0aW9uKGUpe3JldHVybiBhLndhcm4oIkFQSSBjYWxsIHRvIFBsb3RseS4iK3QrIiByZWplY3RlZC4iLGUpLFByb21pc2UucmVqZWN0KGUpfSkpfSxyLmNvbXB1dGVBUElDb21tYW5kQmluZGluZ3M9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuO3N3aXRjaChBcnJheS5pc0FycmF5KHIpfHwocj1bXSksdCl7Y2FzZSJyZXN0eWxlIjpuPWwoZSxyKTticmVhaztjYXNlInJlbGF5b3V0IjpuPW8oZSxyKTticmVhaztjYXNlInVwZGF0ZSI6bj1sKGUsW3JbMF0sclsyXV0pLmNvbmNhdChvKGUsW3JbMV1dKSk7YnJlYWs7Y2FzZSJhbmltYXRlIjpuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodFswXSkmJjE9PT10WzBdLmxlbmd0aCYmLTEhPT1bInN0cmluZyIsIm51bWJlciJdLmluZGV4T2YodHlwZW9mIHRbMF1bMF0pP1t7dHlwZToibGF5b3V0Iixwcm9wOiJfY3VycmVudEZyYW1lIix2YWx1ZTp0WzBdWzBdLnRvU3RyaW5nKCl9XTpbXX0oMCxyKTticmVhaztkZWZhdWx0Om49W119cmV0dXJuIG59fSx7Ii4uL2xpYiI6MjAyLCIuLi9yZWdpc3RyeSI6MjkwfV0sMjc1OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O3IuYXR0cmlidXRlcz1mdW5jdGlvbihlLHQpe3Q9dHx8e307dmFyIHI9e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGVkaXRUeXBlOihlPWV8fHt9KS5lZGl0VHlwZSxpdGVtczpbe3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6ZS5lZGl0VHlwZX0se3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6ZS5lZGl0VHlwZX1dLGRmbHQ6WzAsMV19LGE9KGUubmFtZSYmZS5uYW1lLGUudHJhY2UsdC5kZXNjcmlwdGlvbiYmdC5kZXNjcmlwdGlvbix7eDpuKHt9LHIse30pLHk6bih7fSxyLHt9KSxlZGl0VHlwZTplLmVkaXRUeXBlfSk7cmV0dXJuIGUubm9HcmlkQ2VsbHx8KGEucm93PXt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ZS5lZGl0VHlwZX0sYS5jb2x1bW49e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZTplLmVkaXRUeXBlfSksYX0sci5kZWZhdWx0cz1mdW5jdGlvbihlLHQscixuKXt2YXIgYT1uJiZuLnh8fFswLDFdLGk9biYmbi55fHxbMCwxXSxvPXQuZ3JpZDtpZihvKXt2YXIgbD1yKCJkb21haW4uY29sdW1uIik7dm9pZCAwIT09bCYmKGw8by5jb2x1bW5zP2E9by5fZG9tYWlucy54W2xdOmRlbGV0ZSBlLmRvbWFpbi5jb2x1bW4pO3ZhciBzPXIoImRvbWFpbi5yb3ciKTt2b2lkIDAhPT1zJiYoczxvLnJvd3M/aT1vLl9kb21haW5zLnlbc106ZGVsZXRlIGUuZG9tYWluLnJvdyl9dmFyIGM9cigiZG9tYWluLngiLGEpLHU9cigiZG9tYWluLnkiLGkpO2NbMF08Y1sxXXx8KGUuZG9tYWluLng9YS5zbGljZSgpKSx1WzBdPHVbMV18fChlLmRvbWFpbi55PWkuc2xpY2UoKSl9fSx7Ii4uL2xpYi9leHRlbmQiOjE5Nn1dLDI3NjpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5lZGl0VHlwZSxyPWUuY29sb3JFZGl0VHlwZTt2b2lkIDA9PT1yJiYocj10KTt2YXIgbj17ZmFtaWx5Ont2YWxUeXBlOiJzdHJpbmciLG5vQmxhbms6ITAsc3RyaWN0OiEwLGVkaXRUeXBlOnR9LHNpemU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjEsZWRpdFR5cGU6dH0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZTpyfSxlZGl0VHlwZTp0fTtyZXR1cm4gZS5hcnJheU9rJiYobi5mYW1pbHkuYXJyYXlPaz0hMCxuLnNpemUuYXJyYXlPaz0hMCxuLmNvbG9yLmFycmF5T2s9ITApLG59fSx7fV0sMjc3OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz17X2lzTGlua2VkVG9BcnJheToiZnJhbWVzX2VudHJ5Iixncm91cDp7dmFsVHlwZToic3RyaW5nIn0sbmFtZTp7dmFsVHlwZToic3RyaW5nIn0sdHJhY2VzOnt2YWxUeXBlOiJhbnkifSxiYXNlZnJhbWU6e3ZhbFR5cGU6InN0cmluZyJ9LGRhdGE6e3ZhbFR5cGU6ImFueSJ9LGxheW91dDp7dmFsVHlwZToiYW55In19fSx7fV0sMjc4OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uL3JlZ2lzdHJ5IiksYT1lKCIuL2NhcnRlc2lhbi9jb25zdGFudHMiKS5TVUJQTE9UX1BBVFRFUk47ci5nZXRTdWJwbG90Q2FsY0RhdGE9ZnVuY3Rpb24oZSx0LHIpe3ZhciBhPW4uc3VicGxvdHNSZWdpc3RyeVt0XTtpZighYSlyZXR1cm5bXTtmb3IodmFyIGk9YS5hdHRyLG89W10sbD0wO2w8ZS5sZW5ndGg7bCsrKXt2YXIgcz1lW2xdO3NbMF0udHJhY2VbaV09PT1yJiZvLnB1c2gocyl9cmV0dXJuIG99LHIuZ2V0TW9kdWxlQ2FsY0RhdGE9ZnVuY3Rpb24oZSx0KXt2YXIgcixhPVtdLGk9W107aWYoIShyPSJzdHJpbmciPT10eXBlb2YgdD9uLmdldE1vZHVsZSh0KS5wbG90OiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dC5wbG90KSlyZXR1cm5bYSxlXTtmb3IodmFyIG89MDtvPGUubGVuZ3RoO28rKyl7dmFyIGw9ZVtvXSxzPWxbMF0udHJhY2U7ITA9PT1zLnZpc2libGUmJjAhPT1zLl9sZW5ndGgmJihzLl9tb2R1bGUucGxvdD09PXI/YS5wdXNoKGwpOmkucHVzaChsKSl9cmV0dXJuW2EsaV19LHIuZ2V0U3VicGxvdERhdGE9ZnVuY3Rpb24oZSx0LHIpe2lmKCFuLnN1YnBsb3RzUmVnaXN0cnlbdF0pcmV0dXJuW107dmFyIGksbyxsLHM9bi5zdWJwbG90c1JlZ2lzdHJ5W3RdLmF0dHIsYz1bXTtpZigiZ2wyZCI9PT10KXt2YXIgdT1yLm1hdGNoKGEpO289IngiK3VbMV0sbD0ieSIrdVsyXX1mb3IodmFyIGY9MDtmPGUubGVuZ3RoO2YrKylpPWVbZl0sImdsMmQiPT09dCYmbi50cmFjZUlzKGksImdsMmQiKT9pW3NbMF1dPT09byYmaVtzWzFdXT09PWwmJmMucHVzaChpKTppW3NdPT09ciYmYy5wdXNoKGkpO3JldHVybiBjfX0seyIuLi9yZWdpc3RyeSI6MjkwLCIuL2NhcnRlc2lhbi9jb25zdGFudHMiOjI1NH1dLDI3OTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUsdCl7dmFyIHIsbixhPVswLDAsMCwwXTtmb3Iocj0wO3I8NDsrK3IpZm9yKG49MDtuPDQ7KytuKWFbbl0rPWVbNCpyK25dKnRbcl07cmV0dXJuIGF9dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4oZS5wcm9qZWN0aW9uLG4oZS52aWV3LG4oZS5tb2RlbCxbdFswXSx0WzFdLHRbMl0sMV0pKSl9fSx7fV0sMjgwOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4vZm9udF9hdHRyaWJ1dGVzIiksYT1lKCIuL2FuaW1hdGlvbl9hdHRyaWJ1dGVzIiksaT1lKCIuLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKSxvPWUoIi4uL2NvbXBvbmVudHMvc2hhcGVzL2RyYXdfbmV3c2hhcGUvYXR0cmlidXRlcyIpLGw9ZSgiLi9wYWRfYXR0cmlidXRlcyIpLHM9ZSgiLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsYz1uKHtlZGl0VHlwZToiY2FsYyJ9KTtjLmZhbWlseS5kZmx0PSciT3BlbiBTYW5zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLGMuc2l6ZS5kZmx0PTEyLGMuY29sb3IuZGZsdD1pLmRlZmF1bHRMaW5lLHQuZXhwb3J0cz17Zm9udDpjLHRpdGxlOnt0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9LGZvbnQ6bih7ZWRpdFR5cGU6ImxheW91dHN0eWxlIn0pLHhyZWY6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGRmbHQ6ImNvbnRhaW5lciIsdmFsdWVzOlsiY29udGFpbmVyIiwicGFwZXIiXSxlZGl0VHlwZToibGF5b3V0c3R5bGUifSx5cmVmOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixkZmx0OiJjb250YWluZXIiLHZhbHVlczpbImNvbnRhaW5lciIsInBhcGVyIl0sZWRpdFR5cGU6ImxheW91dHN0eWxlIn0seDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi41LGVkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9LHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoiYXV0byIsZWRpdFR5cGU6ImxheW91dHN0eWxlIn0seGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsZGZsdDoiYXV0byIsdmFsdWVzOlsiYXV0byIsImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdLGVkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9LHlhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGRmbHQ6ImF1dG8iLHZhbHVlczpbImF1dG8iLCJ0b3AiLCJtaWRkbGUiLCJib3R0b20iXSxlZGl0VHlwZToibGF5b3V0c3R5bGUifSxwYWQ6cyhsKHtlZGl0VHlwZToibGF5b3V0c3R5bGUifSkse30pLGVkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9LHVuaWZvcm10ZXh0Onttb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyExLCJoaWRlIiwic2hvdyJdLGRmbHQ6ITEsZWRpdFR5cGU6InBsb3QifSxtaW5zaXplOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0sYXV0b3NpemU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6Im5vbmUifSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MTAsZGZsdDo3MDAsZWRpdFR5cGU6InBsb3QifSxoZWlnaHQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjEwLGRmbHQ6NDUwLGVkaXRUeXBlOiJwbG90In0sbWFyZ2luOntsOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6ODAsZWRpdFR5cGU6InBsb3QifSxyOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6ODAsZWRpdFR5cGU6InBsb3QifSx0Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MTAwLGVkaXRUeXBlOiJwbG90In0sYjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjgwLGVkaXRUeXBlOiJwbG90In0scGFkOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToicGxvdCJ9LGF1dG9leHBhbmQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LGNvbXB1dGVkOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn0scGFwZXJfYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aS5iYWNrZ3JvdW5kLGVkaXRUeXBlOiJwbG90In0scGxvdF9iZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmJhY2tncm91bmQsZWRpdFR5cGU6ImxheW91dHN0eWxlIn0sYXV0b3R5cGVudW1iZXJzOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJjb252ZXJ0IHR5cGVzIiwic3RyaWN0Il0sZGZsdDoiY29udmVydCB0eXBlcyIsZWRpdFR5cGU6ImNhbGMifSxzZXBhcmF0b3JzOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJwbG90In0saGlkZXNvdXJjZXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6InBsb3QifSxzaG93bGVnZW5kOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToibGVnZW5kIn0sY29sb3J3YXk6e3ZhbFR5cGU6ImNvbG9ybGlzdCIsZGZsdDppLmRlZmF1bHRzLGVkaXRUeXBlOiJjYWxjIn0sZGF0YXJldmlzaW9uOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn0sdWlyZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9LGVkaXRyZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9LHNlbGVjdGlvbnJldmlzaW9uOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn0sdGVtcGxhdGU6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSxtb2RlYmFyOntvcmllbnRhdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidiIsImgiXSxkZmx0OiJoIixlZGl0VHlwZToibW9kZWJhciJ9LGJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToibW9kZWJhciJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6Im1vZGViYXIifSxhY3RpdmVjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJtb2RlYmFyIn0sdWlyZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9LGVkaXRUeXBlOiJtb2RlYmFyIn0sbmV3c2hhcGU6by5uZXdzaGFwZSxhY3RpdmVzaGFwZTpvLmFjdGl2ZXNoYXBlLG1ldGE6e3ZhbFR5cGU6ImFueSIsYXJyYXlPazohMCxlZGl0VHlwZToicGxvdCJ9LHRyYW5zaXRpb246cyh7fSxhLnRyYW5zaXRpb24se2VkaXRUeXBlOiJub25lIn0pLF9kZXByZWNhdGVkOnt0aXRsZTp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToibGF5b3V0c3R5bGUifSx0aXRsZWZvbnQ6bih7ZWRpdFR5cGU6ImxheW91dHN0eWxlIn0pfX19LHsiLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo3NCwiLi4vY29tcG9uZW50cy9zaGFwZXMvZHJhd19uZXdzaGFwZS9hdHRyaWJ1dGVzIjoxNTcsIi4uL2xpYi9leHRlbmQiOjE5NiwiLi9hbmltYXRpb25fYXR0cmlidXRlcyI6MjQyLCIuL2ZvbnRfYXR0cmlidXRlcyI6Mjc2LCIuL3BhZF9hdHRyaWJ1dGVzIjoyODF9XSwyODE6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZWRpdFR5cGU7cmV0dXJue3Q6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLGVkaXRUeXBlOnR9LHI6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLGVkaXRUeXBlOnR9LGI6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLGVkaXRUeXBlOnR9LGw6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLGVkaXRUeXBlOnR9LGVkaXRUeXBlOnR9fX0se31dLDI4MjpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJkMyIpLGE9ZSgiZDMtdGltZS1mb3JtYXQiKS50aW1lRm9ybWF0TG9jYWxlLGk9ZSgiZmFzdC1pc251bWVyaWMiKSxvPWUoIi4uL3JlZ2lzdHJ5IiksbD1lKCIuLi9wbG90X2FwaS9wbG90X3NjaGVtYSIpLHM9ZSgiLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLGM9ZSgiLi4vbGliIiksdT1lKCIuLi9jb21wb25lbnRzL2NvbG9yIiksZj1lKCIuLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLGQ9ZSgiLi9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxwPWUoIi4vY2FydGVzaWFuL2hhbmRsZV9vdXRsaW5lIikuY2xlYXJTZWxlY3QsaD1lKCIuL2FuaW1hdGlvbl9hdHRyaWJ1dGVzIiksZz1lKCIuL2ZyYW1lX2F0dHJpYnV0ZXMiKSx2PWUoIi4uL3Bsb3RzL2dldF9kYXRhIikuZ2V0TW9kdWxlQ2FsY0RhdGEsbT1jLnJlbGlua1ByaXZhdGVLZXlzLHk9Yy5fLHg9dC5leHBvcnRzPXt9O2MuZXh0ZW5kRmxhdCh4LG8pLHguYXR0cmlidXRlcz1lKCIuL2F0dHJpYnV0ZXMiKSx4LmF0dHJpYnV0ZXMudHlwZS52YWx1ZXM9eC5hbGxUeXBlcyx4LmZvbnRBdHRycz1lKCIuL2ZvbnRfYXR0cmlidXRlcyIpLHgubGF5b3V0QXR0cmlidXRlcz1lKCIuL2xheW91dF9hdHRyaWJ1dGVzIikseC5mb250V2VpZ2h0PSJub3JtYWwiO3ZhciBiPXgudHJhbnNmb3Jtc1JlZ2lzdHJ5LF89ZSgiLi9jb21tYW5kIik7eC5leGVjdXRlQVBJQ29tbWFuZD1fLmV4ZWN1dGVBUElDb21tYW5kLHguY29tcHV0ZUFQSUNvbW1hbmRCaW5kaW5ncz1fLmNvbXB1dGVBUElDb21tYW5kQmluZGluZ3MseC5tYW5hZ2VDb21tYW5kT2JzZXJ2ZXI9Xy5tYW5hZ2VDb21tYW5kT2JzZXJ2ZXIseC5oYXNTaW1wbGVBUElDb21tYW5kQmluZGluZ3M9Xy5oYXNTaW1wbGVBUElDb21tYW5kQmluZGluZ3MseC5yZWRyYXdUZXh0PWZ1bmN0aW9uKGUpe3ZhciB0PShlPWMuZ2V0R3JhcGhEaXYoZSkpLl9mdWxsTGF5b3V0fHx7fTtpZighKCEodC5faGFzJiZ0Ll9oYXMoInBvbGFyIikpJiZlLmRhdGEmJmUuZGF0YVswXSYmZS5kYXRhWzBdLnIpKXJldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCl7c2V0VGltZW91dCgoZnVuY3Rpb24oKXtvLmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMiLCJkcmF3IikoZSksby5nZXRDb21wb25lbnRNZXRob2QoImxlZ2VuZCIsImRyYXciKShlKSxvLmdldENvbXBvbmVudE1ldGhvZCgiY29sb3JiYXIiLCJkcmF3IikoZSksdCh4LnByZXZpb3VzUHJvbWlzZXMoZSkpfSksMzAwKX0pKX0seC5yZXNpemU9ZnVuY3Rpb24oZSl7dmFyIHQ7ZT1jLmdldEdyYXBoRGl2KGUpO3ZhciByPW5ldyBQcm9taXNlKChmdW5jdGlvbihyLG4pe2UmJiFjLmlzSGlkZGVuKGUpfHxuKG5ldyBFcnJvcigiUmVzaXplIG11c3QgYmUgcGFzc2VkIGEgZGlzcGxheWVkIHBsb3QgZGl2IGVsZW1lbnQuIikpLGUuX3JlZHJhd1RpbWVyJiZjbGVhclRpbWVvdXQoZS5fcmVkcmF3VGltZXIpLGUuX3Jlc29sdmVSZXNpemUmJih0PWUuX3Jlc29sdmVSZXNpemUpLGUuX3Jlc29sdmVSZXNpemU9cixlLl9yZWRyYXdUaW1lcj1zZXRUaW1lb3V0KChmdW5jdGlvbigpe2lmKCFlLmxheW91dHx8ZS5sYXlvdXQud2lkdGgmJmUubGF5b3V0LmhlaWdodHx8Yy5pc0hpZGRlbihlKSlyKGUpO2Vsc2V7ZGVsZXRlIGUubGF5b3V0LndpZHRoLGRlbGV0ZSBlLmxheW91dC5oZWlnaHQ7dmFyIHQ9ZS5jaGFuZ2VkO2UuYXV0b3BsYXk9ITAsby5jYWxsKCJyZWxheW91dCIsZSx7YXV0b3NpemU6ITB9KS50aGVuKChmdW5jdGlvbigpe2UuY2hhbmdlZD10LGUuX3Jlc29sdmVSZXNpemU9PT1yJiYoZGVsZXRlIGUuX3Jlc29sdmVSZXNpemUscihlKSl9KSl9fSksMTAwKX0pKTtyZXR1cm4gdCYmdChyKSxyfSx4LnByZXZpb3VzUHJvbWlzZXM9ZnVuY3Rpb24oZSl7aWYoKGUuX3Byb21pc2VzfHxbXSkubGVuZ3RoKXJldHVybiBQcm9taXNlLmFsbChlLl9wcm9taXNlcykudGhlbigoZnVuY3Rpb24oKXtlLl9wcm9taXNlcz1bXX0pKX0seC5hZGRMaW5rcz1mdW5jdGlvbihlKXtpZihlLl9jb250ZXh0LnNob3dMaW5rfHxlLl9jb250ZXh0LnNob3dTb3VyY2VzKXt2YXIgdD1lLl9mdWxsTGF5b3V0LHI9Yy5lbnN1cmVTaW5nbGUodC5fcGFwZXIsInRleHQiLCJqcy1wbG90LWxpbmstY29udGFpbmVyIiwoZnVuY3Rpb24oZSl7ZS5zdHlsZSh7ImZvbnQtZmFtaWx5IjonIk9wZW4gU2FucyIsIEFyaWFsLCBzYW5zLXNlcmlmJywiZm9udC1zaXplIjoiMTJweCIsZmlsbDp1LmRlZmF1bHRMaW5lLCJwb2ludGVyLWV2ZW50cyI6ImFsbCJ9KS5lYWNoKChmdW5jdGlvbigpe3ZhciBlPW4uc2VsZWN0KHRoaXMpO2UuYXBwZW5kKCJ0c3BhbiIpLmNsYXNzZWQoImpzLWxpbmstdG8tdG9vbCIsITApLGUuYXBwZW5kKCJ0c3BhbiIpLmNsYXNzZWQoImpzLWxpbmstc3BhY2VyIiwhMCksZS5hcHBlbmQoInRzcGFuIikuY2xhc3NlZCgianMtc291cmNlbGlua3MiLCEwKX0pKX0pKSxhPXIubm9kZSgpLGk9e3k6dC5fcGFwZXIuYXR0cigiaGVpZ2h0IiktOX07ZG9jdW1lbnQuYm9keS5jb250YWlucyhhKSYmYS5nZXRDb21wdXRlZFRleHRMZW5ndGgoKT49dC53aWR0aC0yMD8oaVsidGV4dC1hbmNob3IiXT0ic3RhcnQiLGkueD01KTooaVsidGV4dC1hbmNob3IiXT0iZW5kIixpLng9dC5fcGFwZXIuYXR0cigid2lkdGgiKS03KSxyLmF0dHIoaSk7dmFyIG89ci5zZWxlY3QoIi5qcy1saW5rLXRvLXRvb2wiKSxsPXIuc2VsZWN0KCIuanMtbGluay1zcGFjZXIiKSxzPXIuc2VsZWN0KCIuanMtc291cmNlbGlua3MiKTtlLl9jb250ZXh0LnNob3dTb3VyY2VzJiZlLl9jb250ZXh0LnNob3dTb3VyY2VzKGUpLGUuX2NvbnRleHQuc2hvd0xpbmsmJmZ1bmN0aW9uKGUsdCl7dC50ZXh0KCIiKTt2YXIgcj10LmFwcGVuZCgiYSIpLmF0dHIoeyJ4bGluazp4bGluazpocmVmIjoiIyIsY2xhc3M6ImxpbmstLWltcHQgbGluay0tZW1iZWR2aWV3IiwiZm9udC13ZWlnaHQiOiJib2xkIn0pLnRleHQoZS5fY29udGV4dC5saW5rVGV4dCsiICIrU3RyaW5nLmZyb21DaGFyQ29kZSgxODcpKTtpZihlLl9jb250ZXh0LnNlbmREYXRhKXIub24oImNsaWNrIiwoZnVuY3Rpb24oKXt4LnNlbmREYXRhVG9DbG91ZChlKX0pKTtlbHNle3ZhciBuPXdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5zcGxpdCgiLyIpLGE9d2luZG93LmxvY2F0aW9uLnNlYXJjaDtyLmF0dHIoeyJ4bGluazp4bGluazpzaG93IjoibmV3IiwieGxpbms6eGxpbms6aHJlZiI6Ii8iK25bMl0uc3BsaXQoIi4iKVswXSsiLyIrblsxXSthfSl9fShlLG8pLGwudGV4dChvLnRleHQoKSYmcy50ZXh0KCk/IiAtICI6IiIpfX0seC5zZW5kRGF0YVRvQ2xvdWQ9ZnVuY3Rpb24oZSl7dmFyIHQ9KHdpbmRvdy5QTE9UTFlFTlZ8fHt9KS5CQVNFX1VSTHx8ZS5fY29udGV4dC5wbG90bHlTZXJ2ZXJVUkw7aWYodCl7ZS5lbWl0KCJwbG90bHlfYmVmb3JlZXhwb3J0Iik7dmFyIHI9bi5zZWxlY3QoZSkuYXBwZW5kKCJkaXYiKS5hdHRyKCJpZCIsImhpZGRlbmZvcm0iKS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKSxhPXIuYXBwZW5kKCJmb3JtIikuYXR0cih7YWN0aW9uOnQrIi9leHRlcm5hbCIsbWV0aG9kOiJwb3N0Iix0YXJnZXQ6Il9ibGFuayJ9KTtyZXR1cm4gYS5hcHBlbmQoImlucHV0IikuYXR0cih7dHlwZToidGV4dCIsbmFtZToiZGF0YSJ9KS5ub2RlKCkudmFsdWU9eC5ncmFwaEpzb24oZSwhMSwia2VlcGRhdGEiKSxhLm5vZGUoKS5zdWJtaXQoKSxyLnJlbW92ZSgpLGUuZW1pdCgicGxvdGx5X2FmdGVyZXhwb3J0IiksITF9fTt2YXIgdz1bImRheXMiLCJzaG9ydERheXMiLCJtb250aHMiLCJzaG9ydE1vbnRocyIsInBlcmlvZHMiLCJkYXRlVGltZSIsImRhdGUiLCJ0aW1lIiwiZGVjaW1hbCIsInRob3VzYW5kcyIsImdyb3VwaW5nIiwiY3VycmVuY3kiXSxUPVsieWVhciIsIm1vbnRoIiwiZGF5TW9udGgiLCJkYXlNb250aFllYXIiXTtmdW5jdGlvbiBrKGUsdCl7dmFyIHI9ZS5fY29udGV4dC5sb2NhbGU7cnx8KHI9ImVuLVVTIik7dmFyIG49ITEsYT17fTtmdW5jdGlvbiBpKGUpe2Zvcih2YXIgcj0hMCxpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBvPXRbaV07YVtvXXx8KGVbb10/YVtvXT1lW29dOnI9ITEpfXImJihuPSEwKX1mb3IodmFyIGw9MDtsPDI7bCsrKXtmb3IodmFyIHM9ZS5fY29udGV4dC5sb2NhbGVzLGM9MDtjPDI7YysrKXt2YXIgdT0oc1tyXXx8e30pLmZvcm1hdDtpZih1JiYoaSh1KSxuKSlicmVhaztzPW8ubG9jYWxlUmVnaXN0cnl9dmFyIGY9ci5zcGxpdCgiLSIpWzBdO2lmKG58fGY9PT1yKWJyZWFrO3I9Zn1yZXR1cm4gbnx8aShvLmxvY2FsZVJlZ2lzdHJ5LmVuLmZvcm1hdCksYX1mdW5jdGlvbiBNKGUsdCl7dmFyIHI9e19mdWxsTGF5b3V0OnR9LG49IngiPT09ZS5faWQuY2hhckF0KDApLGE9ZS5fbWFpbkF4aXMuX2FuY2hvckF4aXMsaT0iIixvPSIiLGw9IiI7aWYoYSYmKGw9YS5fbWFpbkF4aXMuX2lkLGk9bj9lLl9pZCtsOmwrZS5faWQpLCFpfHwhdC5fcGxvdHNbaV0pe2k9IiI7Zm9yKHZhciBzPWUuX2NvdW50ZXJBeGVzLGM9MDtjPHMubGVuZ3RoO2MrKyl7dmFyIHU9c1tjXSxmPW4/ZS5faWQrdTp1K2UuX2lkO298fChvPWYpO3ZhciBwPWQuZ2V0RnJvbUlkKHIsdSk7aWYobCYmcC5vdmVybGF5aW5nPT09bCl7aT1mO2JyZWFrfX19cmV0dXJuIGl8fG99ZnVuY3Rpb24gQShlKXt2YXIgdD1lLnRyYW5zZm9ybXM7aWYoQXJyYXkuaXNBcnJheSh0KSYmdC5sZW5ndGgpZm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl0sYT1uLl9tb2R1bGV8fGJbbi50eXBlXTtpZihhJiZhLm1ha2VzRGF0YSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBMKGUsdCxyLG4pe2Zvcih2YXIgYT1lLnRyYW5zZm9ybXMsaT1bZV0sbz0wO288YS5sZW5ndGg7bysrKXt2YXIgbD1hW29dLHM9YltsLnR5cGVdO3MmJnMudHJhbnNmb3JtJiYoaT1zLnRyYW5zZm9ybShpLHt0cmFuc2Zvcm06bCxmdWxsVHJhY2U6ZSxmdWxsRGF0YTp0LGxheW91dDpyLGZ1bGxMYXlvdXQ6bix0cmFuc2Zvcm1JbmRleDpvfSkpfXJldHVybiBpfWZ1bmN0aW9uIFMoZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlJiYicHgiPT09ZS5zdWJzdHIoZS5sZW5ndGgtMikmJnBhcnNlRmxvYXQoZSl9ZnVuY3Rpb24gQyhlKXt2YXIgdD1lLm1hcmdpbjtpZighZS5fc2l6ZSl7dmFyIHI9ZS5fc2l6ZT17bDpNYXRoLnJvdW5kKHQubCkscjpNYXRoLnJvdW5kKHQuciksdDpNYXRoLnJvdW5kKHQudCksYjpNYXRoLnJvdW5kKHQuYikscDpNYXRoLnJvdW5kKHQucGFkKX07ci53PU1hdGgucm91bmQoZS53aWR0aCktci5sLXIucixyLmg9TWF0aC5yb3VuZChlLmhlaWdodCktci50LXIuYn1lLl9wdXNobWFyZ2lufHwoZS5fcHVzaG1hcmdpbj17fSksZS5fcHVzaG1hcmdpbklkc3x8KGUuX3B1c2htYXJnaW5JZHM9e30pfXguc3VwcGx5RGVmYXVsdHM9ZnVuY3Rpb24oZSx0KXt2YXIgcj10JiZ0LnNraXBVcGRhdGVDYWxjLGk9ZS5fZnVsbExheW91dHx8e307aWYoaS5fc2tpcERlZmF1bHRzKWRlbGV0ZSBpLl9za2lwRGVmYXVsdHM7ZWxzZXt2YXIgbCxzPWUuX2Z1bGxMYXlvdXQ9e30sdT1lLmxheW91dHx8e30sZj1lLl9mdWxsRGF0YXx8W10sZD1lLl9mdWxsRGF0YT1bXSxoPWUuZGF0YXx8W10sZz1lLmNhbGNkYXRhfHxbXSx2PWUuX2NvbnRleHR8fHt9O2UuX3RyYW5zaXRpb25EYXRhfHx4LmNyZWF0ZVRyYW5zaXRpb25EYXRhKGUpLHMuX2RmbHRUaXRsZT17cGxvdDp5KGUsIkNsaWNrIHRvIGVudGVyIFBsb3QgdGl0bGUiKSx4OnkoZSwiQ2xpY2sgdG8gZW50ZXIgWCBheGlzIHRpdGxlIikseTp5KGUsIkNsaWNrIHRvIGVudGVyIFkgYXhpcyB0aXRsZSIpLGNvbG9yYmFyOnkoZSwiQ2xpY2sgdG8gZW50ZXIgQ29sb3JzY2FsZSB0aXRsZSIpLGFubm90YXRpb246eShlLCJuZXcgdGV4dCIpfSxzLl90cmFjZVdvcmQ9eShlLCJ0cmFjZSIpO3ZhciBiPWsoZSx3KTtpZihzLl9tYXBib3hBY2Nlc3NUb2tlbj12Lm1hcGJveEFjY2Vzc1Rva2VuLGkuX2luaXRpYWxBdXRvU2l6ZUlzRG9uZSl7dmFyIF89aS53aWR0aCxNPWkuaGVpZ2h0O3guc3VwcGx5TGF5b3V0R2xvYmFsRGVmYXVsdHModSxzLGIpLHUud2lkdGh8fChzLndpZHRoPV8pLHUuaGVpZ2h0fHwocy5oZWlnaHQ9TSkseC5zYW5pdGl6ZU1hcmdpbnMocyl9ZWxzZXt4LnN1cHBseUxheW91dEdsb2JhbERlZmF1bHRzKHUscyxiKTt2YXIgQT0hdS53aWR0aHx8IXUuaGVpZ2h0LEw9cy5hdXRvc2l6ZSxTPXYuYXV0b3NpemFibGU7QSYmKEx8fFMpP3gucGxvdEF1dG9TaXplKGUsdSxzKTpBJiZ4LnNhbml0aXplTWFyZ2lucyhzKSwhTCYmQSYmKHUud2lkdGg9cy53aWR0aCx1LmhlaWdodD1zLmhlaWdodCl9cy5fZDNsb2NhbGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5kZWNpbWFsPXQuY2hhckF0KDApLGUudGhvdXNhbmRzPXQuY2hhckF0KDEpLHtudW1iZXJGb3JtYXQ6bi5sb2NhbGUoZSkubnVtYmVyRm9ybWF0LHRpbWVGb3JtYXQ6YShlKS51dGNGb3JtYXR9fShiLHMuc2VwYXJhdG9ycykscy5fZXh0cmFGb3JtYXQ9ayhlLFQpLHMuX2luaXRpYWxBdXRvU2l6ZUlzRG9uZT0hMCxzLl9kYXRhTGVuZ3RoPWgubGVuZ3RoLHMuX21vZHVsZXM9W10scy5fdmlzaWJsZU1vZHVsZXM9W10scy5fYmFzZVBsb3RNb2R1bGVzPVtdO3ZhciBPPXMuX3N1YnBsb3RzPWZ1bmN0aW9uKCl7dmFyIGUsdCxyPW8uY29sbGVjdGFibGVTdWJwbG90VHlwZXMsbj17fTtpZighcil7cj1bXTt2YXIgYT1vLnN1YnBsb3RzUmVnaXN0cnk7Zm9yKHZhciBpIGluIGEpe3ZhciBsPWFbaV0uYXR0cjtpZihsJiYoci5wdXNoKGkpLEFycmF5LmlzQXJyYXkobCkpKWZvcih0PTA7dDxsLmxlbmd0aDt0KyspYy5wdXNoVW5pcXVlKHIsbFt0XSl9fWZvcihlPTA7ZTxyLmxlbmd0aDtlKyspbltyW2VdXT1bXTtyZXR1cm4gbn0oKSxEPXMuX3NwbG9tQXhlcz17eDp7fSx5Ont9fSxQPXMuX3NwbG9tU3VicGxvdHM9e307cy5fc3Bsb21HcmlkRGZsdD17fSxzLl9zY2F0dGVyU3RhY2tPcHRzPXt9LHMuX2ZpcnN0U2NhdHRlcj17fSxzLl9hbGlnbm1lbnRPcHRzPXt9LHMuX2NvbG9yQXhlcz17fSxzLl9yZXF1ZXN0UmFuZ2VzbGlkZXI9e30scy5fdHJhY2VVaWRzPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbixhPXQubGVuZ3RoLGk9W107Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG89ZVtyXS5fZnVsbElucHV0O28hPT1uJiZpLnB1c2gobyksbj1vfXZhciBsPWkubGVuZ3RoLHM9bmV3IEFycmF5KGEpLHU9e307ZnVuY3Rpb24gZihlLHQpe3NbdF09ZSx1W2VdPTF9ZnVuY3Rpb24gZChlLHQpe2lmKGUmJiJzdHJpbmciPT10eXBlb2YgZSYmIXVbZV0pcmV0dXJuIGYoZSx0KSwhMH1mb3Iocj0wO3I8YTtyKyspe3ZhciBwPXRbcl0udWlkOyJudW1iZXIiPT10eXBlb2YgcCYmKHA9U3RyaW5nKHApKSxkKHAscil8fChyPGwmJmQoaVtyXS51aWQscil8fGYoYy5yYW5kc3RyKHUpLHIpKX1yZXR1cm4gc30oZixoKSxzLl9nbG9iYWxUcmFuc2Zvcm1zPShlLl9jb250ZXh0fHx7fSkuZ2xvYmFsVHJhbnNmb3Jtcyx4LnN1cHBseURhdGFEZWZhdWx0cyhoLGQsdSxzKTt2YXIgej1PYmplY3Qua2V5cyhELngpLFI9T2JqZWN0LmtleXMoRC55KTtpZih6Lmxlbmd0aD4xJiZSLmxlbmd0aD4xKXtmb3Ioby5nZXRDb21wb25lbnRNZXRob2QoImdyaWQiLCJzaXplRGVmYXVsdHMiKSh1LHMpLGw9MDtsPHoubGVuZ3RoO2wrKyljLnB1c2hVbmlxdWUoTy54YXhpcyx6W2xdKTtmb3IobD0wO2w8Ui5sZW5ndGg7bCsrKWMucHVzaFVuaXF1ZShPLnlheGlzLFJbbF0pO2Zvcih2YXIgRSBpbiBQKWMucHVzaFVuaXF1ZShPLmNhcnRlc2lhbixFKX1pZihzLl9oYXM9eC5faGFzUGxvdFR5cGUuYmluZChzKSxmLmxlbmd0aD09PWQubGVuZ3RoKWZvcihsPTA7bDxkLmxlbmd0aDtsKyspbShkW2xdLGZbbF0pO3guc3VwcGx5TGF5b3V0TW9kdWxlRGVmYXVsdHModSxzLGQsZS5fdHJhbnNpdGlvbkRhdGEpO3ZhciBJPXMuX3Zpc2libGVNb2R1bGVzLEY9W107Zm9yKGw9MDtsPEkubGVuZ3RoO2wrKyl7dmFyIE49SVtsXS5jcm9zc1RyYWNlRGVmYXVsdHM7TiYmYy5wdXNoVW5pcXVlKEYsTil9Zm9yKGw9MDtsPEYubGVuZ3RoO2wrKylGW2xdKGQscyk7cy5faGFzT25seUxhcmdlU3Bsb21zPTE9PT1zLl9iYXNlUGxvdE1vZHVsZXMubGVuZ3RoJiYic3Bsb20iPT09cy5fYmFzZVBsb3RNb2R1bGVzWzBdLm5hbWUmJnoubGVuZ3RoPjE1JiZSLmxlbmd0aD4xNSYmMD09PXMuc2hhcGVzLmxlbmd0aCYmMD09PXMuaW1hZ2VzLmxlbmd0aCxzLl9oYXNDYXJ0ZXNpYW49cy5faGFzKCJjYXJ0ZXNpYW4iKSxzLl9oYXNHZW89cy5faGFzKCJnZW8iKSxzLl9oYXNHTDNEPXMuX2hhcygiZ2wzZCIpLHMuX2hhc0dMMkQ9cy5faGFzKCJnbDJkIikscy5faGFzVGVybmFyeT1zLl9oYXMoInRlcm5hcnkiKSxzLl9oYXNQaWU9cy5faGFzKCJwaWUiKSx4LmxpbmtTdWJwbG90cyhkLHMsZixpKSx4LmNsZWFuUGxvdChkLHMsZixpKTt2YXIgSD0hKCFpLl9oYXN8fCFpLl9oYXMoImdsMmQiKSksaj0hKCFzLl9oYXN8fCFzLl9oYXMoImdsMmQiKSksQj0hKCFpLl9oYXN8fCFpLl9oYXMoImNhcnRlc2lhbiIpKXx8SCxWPSEoIXMuX2hhc3x8IXMuX2hhcygiY2FydGVzaWFuIikpfHxqO0ImJiFWP2kuX2JnTGF5ZXIucmVtb3ZlKCk6ViYmIUImJihzLl9zaG91bGRDcmVhdGVCZ0xheWVyPSEwKSxpLl96b29tbGF5ZXImJiFlLl9kcmFnZ2luZyYmcCh7X2Z1bGxMYXlvdXQ6aX0pLGZ1bmN0aW9uKGUsdCl7dmFyIHIsbj1bXTt0Lm1ldGEmJihyPXQuX21ldGE9e21ldGE6dC5tZXRhLGxheW91dDp7bWV0YTp0Lm1ldGF9fSk7Zm9yKHZhciBhPTA7YTxlLmxlbmd0aDthKyspe3ZhciBpPWVbYV07aS5tZXRhP25baS5pbmRleF09aS5fbWV0YT17bWV0YTppLm1ldGF9OnQubWV0YSYmKGkuX21ldGE9e21ldGE6dC5tZXRhfSksdC5tZXRhJiYoaS5fbWV0YS5sYXlvdXQ9e21ldGE6dC5tZXRhfSl9bi5sZW5ndGgmJihyfHwocj10Ll9tZXRhPXt9KSxyLmRhdGE9bil9KGQscyksbShzLGkpLG8uZ2V0Q29tcG9uZW50TWV0aG9kKCJjb2xvcnNjYWxlIiwiY3Jvc3NUcmFjZURlZmF1bHRzIikoZCxzKSxzLl9wcmVHVUl8fChzLl9wcmVHVUk9e30pLHMuX3RyYWNlUHJlR1VJfHwocy5fdHJhY2VQcmVHVUk9e30pO3ZhciBVLHE9cy5fdHJhY2VQcmVHVUksRz17fTtmb3IoVSBpbiBxKUdbVV09Im9sZCI7Zm9yKGw9MDtsPGQubGVuZ3RoO2wrKylHW1U9ZFtsXS5fZnVsbElucHV0LnVpZF18fChxW1VdPXt9KSxHW1VdPSJuZXciO2ZvcihVIGluIEcpIm9sZCI9PT1HW1VdJiZkZWxldGUgcVtVXTtDKHMpLG8uZ2V0Q29tcG9uZW50TWV0aG9kKCJyYW5nZXNsaWRlciIsIm1ha2VEYXRhIikocykscnx8Zy5sZW5ndGghPT1kLmxlbmd0aHx8eC5zdXBwbHlEZWZhdWx0c1VwZGF0ZUNhbGMoZyxkKX19LHguc3VwcGx5RGVmYXVsdHNVcGRhdGVDYWxjPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl0sYT0oZVtyXXx8W10pWzBdO2lmKGEmJmEudHJhY2Upe3ZhciBpPWEudHJhY2U7aWYoaS5faGFzQ2FsY1RyYW5zZm9ybSl7dmFyIG8sbCxzLHU9aS5fYXJyYXlBdHRycztmb3Iobz0wO288dS5sZW5ndGg7bysrKWw9dVtvXSxzPWMubmVzdGVkUHJvcGVydHkoaSxsKS5nZXQoKS5zbGljZSgpLGMubmVzdGVkUHJvcGVydHkobixsKS5zZXQocyl9YS50cmFjZT1ufX19LHguY3JlYXRlVHJhbnNpdGlvbkRhdGE9ZnVuY3Rpb24oZSl7ZS5fdHJhbnNpdGlvbkRhdGF8fChlLl90cmFuc2l0aW9uRGF0YT17fSksZS5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lc3x8KGUuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXM9W10pLGUuX3RyYW5zaXRpb25EYXRhLl9mcmFtZUhhc2h8fChlLl90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNoPXt9KSxlLl90cmFuc2l0aW9uRGF0YS5fY291bnRlcnx8KGUuX3RyYW5zaXRpb25EYXRhLl9jb3VudGVyPTApLGUuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3N8fChlLl90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzPVtdKX0seC5faGFzUGxvdFR5cGU9ZnVuY3Rpb24oZSl7dmFyIHQscj10aGlzLl9iYXNlUGxvdE1vZHVsZXN8fFtdO2Zvcih0PTA7dDxyLmxlbmd0aDt0KyspaWYoclt0XS5uYW1lPT09ZSlyZXR1cm4hMDt2YXIgbj10aGlzLl9tb2R1bGVzfHxbXTtmb3IodD0wO3Q8bi5sZW5ndGg7dCsrKXt2YXIgYT1uW3RdLm5hbWU7aWYoYT09PWUpcmV0dXJuITA7dmFyIGk9by5tb2R1bGVzW2FdO2lmKGkmJmkuY2F0ZWdvcmllc1tlXSlyZXR1cm4hMH1yZXR1cm4hMX0seC5jbGVhblBsb3Q9ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGEsaSxvPW4uX2Jhc2VQbG90TW9kdWxlc3x8W107Zm9yKGE9MDthPG8ubGVuZ3RoO2ErKyl7dmFyIGw9b1thXTtsLmNsZWFuJiZsLmNsZWFuKGUsdCxyLG4pfXZhciBzPW4uX2hhcyYmbi5faGFzKCJnbCIpLGM9dC5faGFzJiZ0Ll9oYXMoImdsIik7cyYmIWMmJnZvaWQgMCE9PW4uX2dsY29udGFpbmVyJiYobi5fZ2xjb250YWluZXIuc2VsZWN0QWxsKCIuZ2wtY2FudmFzIikucmVtb3ZlKCksbi5fZ2xjb250YWluZXIuc2VsZWN0QWxsKCIubm8td2ViZ2wiKS5yZW1vdmUoKSxuLl9nbGNhbnZhcz1udWxsKTt2YXIgdT0hIW4uX2luZm9sYXllcjtlOmZvcihhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBmPXJbYV0udWlkO2ZvcihpPTA7aTxlLmxlbmd0aDtpKyspe2lmKGY9PT1lW2ldLnVpZCljb250aW51ZSBlfXUmJm4uX2luZm9sYXllci5zZWxlY3QoIi5jYiIrZikucmVtb3ZlKCl9fSx4LmxpbmtTdWJwbG90cz1mdW5jdGlvbihlLHQscixuKXt2YXIgYSxpLGw9bi5fcGxvdHN8fHt9LHM9dC5fcGxvdHM9e30sdT10Ll9zdWJwbG90cyxmPXtfZnVsbERhdGE6ZSxfZnVsbExheW91dDp0fSxwPXUuY2FydGVzaWFuLmNvbmNhdCh1LmdsMmR8fFtdKTtmb3IoYT0wO2E8cC5sZW5ndGg7YSsrKXt2YXIgaCxnPXBbYV0sdj1sW2ddLG09ZC5nZXRGcm9tSWQoZixnLCJ4IikseT1kLmdldEZyb21JZChmLGcsInkiKTtmb3Iodj9oPXNbZ109djooaD1zW2ddPXt9KS5pZD1nLG0uX2NvdW50ZXJBeGVzLnB1c2goeS5faWQpLHkuX2NvdW50ZXJBeGVzLnB1c2gobS5faWQpLG0uX3N1YnBsb3RzV2l0aC5wdXNoKGcpLHkuX3N1YnBsb3RzV2l0aC5wdXNoKGcpLGgueGF4aXM9bSxoLnlheGlzPXksaC5faGFzQ2xpcE9uQXhpc0ZhbHNlPSExLGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIHg9ZVtpXTtpZih4LnhheGlzPT09aC54YXhpcy5faWQmJngueWF4aXM9PT1oLnlheGlzLl9pZCYmITE9PT14LmNsaXBvbmF4aXMpe2guX2hhc0NsaXBPbkF4aXNGYWxzZT0hMDticmVha319fXZhciBiLF89ZC5saXN0KGYsbnVsbCwhMCk7Zm9yKGE9MDthPF8ubGVuZ3RoO2ErKyl7dmFyIHc9bnVsbDsoYj1fW2FdKS5vdmVybGF5aW5nJiYodz1kLmdldEZyb21JZChmLGIub3ZlcmxheWluZykpJiZ3Lm92ZXJsYXlpbmcmJihiLm92ZXJsYXlpbmc9ITEsdz1udWxsKSxiLl9tYWluQXhpcz13fHxiLHcmJihiLmRvbWFpbj13LmRvbWFpbi5zbGljZSgpKSxiLl9hbmNob3JBeGlzPSJmcmVlIj09PWIuYW5jaG9yP251bGw6ZC5nZXRGcm9tSWQoZixiLmFuY2hvcil9Zm9yKGE9MDthPF8ubGVuZ3RoO2ErKylpZigoYj1fW2FdKS5fY291bnRlckF4ZXMuc29ydChkLmlkU29ydCksYi5fc3VicGxvdHNXaXRoLnNvcnQoYy5zdWJwbG90U29ydCksYi5fbWFpblN1YnBsb3Q9TShiLHQpLGIuX2NvdW50ZXJBeGVzLmxlbmd0aCYmKGIuc3Bpa2Vtb2RlJiYtMSE9PWIuc3Bpa2Vtb2RlLmluZGV4T2YoImFjcm9zcyIpfHxiLmF1dG9tYXJnaW4mJmIubWlycm9yJiYiZnJlZSIhPT1iLmFuY2hvcnx8by5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2xpZGVyIiwiaXNWaXNpYmxlIikoYikpKXt2YXIgVD0xLGs9MDtmb3IoaT0wO2k8Yi5fY291bnRlckF4ZXMubGVuZ3RoO2krKyl7dmFyIEE9ZC5nZXRGcm9tSWQoZixiLl9jb3VudGVyQXhlc1tpXSk7VD1NYXRoLm1pbihULEEuZG9tYWluWzBdKSxrPU1hdGgubWF4KGssQS5kb21haW5bMV0pfVQ8ayYmKGIuX2NvdW50ZXJEb21haW5NaW49VCxiLl9jb3VudGVyRG9tYWluTWF4PWspfX0seC5jbGVhckV4cGFuZGVkVHJhY2VEZWZhdWx0Q29sb3JzPWZ1bmN0aW9uKGUpe3ZhciB0LHIsbjtmb3Iocj1bXSwodD1lLl9tb2R1bGUuX2NvbG9yQXR0cnMpfHwoZS5fbW9kdWxlLl9jb2xvckF0dHJzPXQ9W10sbC5jcmF3bChlLl9tb2R1bGUuYXR0cmlidXRlcywoZnVuY3Rpb24oZSxuLGEsaSl7cltpXT1uLHIubGVuZ3RoPWkrMSwiY29sb3IiPT09ZS52YWxUeXBlJiZ2b2lkIDA9PT1lLmRmbHQmJnQucHVzaChyLmpvaW4oIi4iKSl9KSkpLG49MDtuPHQubGVuZ3RoO24rKyl7Yy5uZXN0ZWRQcm9wZXJ0eShlLCJfaW5wdXQuIit0W25dKS5nZXQoKXx8Yy5uZXN0ZWRQcm9wZXJ0eShlLHRbbl0pLnNldChudWxsKX19LHguc3VwcGx5RGF0YURlZmF1bHRzPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhLGksbCx1PW4uX21vZHVsZXMsZj1uLl92aXNpYmxlTW9kdWxlcyxkPW4uX2Jhc2VQbG90TW9kdWxlcyxwPTAsaD0wO2Z1bmN0aW9uIGcoZSl7dC5wdXNoKGUpO3ZhciByPWUuX21vZHVsZTtyJiYoYy5wdXNoVW5pcXVlKHUsciksITA9PT1lLnZpc2libGUmJmMucHVzaFVuaXF1ZShmLHIpLGMucHVzaFVuaXF1ZShkLGUuX21vZHVsZS5iYXNlUGxvdE1vZHVsZSkscCsrLCExIT09ZS5faW5wdXQudmlzaWJsZSYmaCsrKX1uLl90cmFuc2Zvcm1Nb2R1bGVzPVtdO3ZhciB2PXt9LHk9W10sYj0oci50ZW1wbGF0ZXx8e30pLmRhdGF8fHt9LF89cy50cmFjZVRlbXBsYXRlcihiKTtmb3IoYT0wO2E8ZS5sZW5ndGg7YSsrKXtpZihsPWVbYV0sKGk9Xy5uZXdUcmFjZShsKSkudWlkPW4uX3RyYWNlVWlkc1thXSx4LnN1cHBseVRyYWNlRGVmYXVsdHMobCxpLGgsbixhKSxpLmluZGV4PWEsaS5faW5wdXQ9bCxpLl9leHBhbmRlZEluZGV4PXAsaS50cmFuc2Zvcm1zJiZpLnRyYW5zZm9ybXMubGVuZ3RoKWZvcih2YXIgdz0hMSE9PWwudmlzaWJsZSYmITE9PT1pLnZpc2libGUsVD1MKGksdCxyLG4pLGs9MDtrPFQubGVuZ3RoO2srKyl7dmFyIE09VFtrXSxBPXtfdGVtcGxhdGU6aS5fdGVtcGxhdGUsdHlwZTppLnR5cGUsdWlkOmkudWlkK2t9O3cmJiExPT09TS52aXNpYmxlJiZkZWxldGUgTS52aXNpYmxlLHguc3VwcGx5VHJhY2VEZWZhdWx0cyhNLEEscCxuLGEpLG0oQSxNKSxBLmluZGV4PWEsQS5faW5wdXQ9bCxBLl9mdWxsSW5wdXQ9aSxBLl9leHBhbmRlZEluZGV4PXAsQS5fZXhwYW5kZWRJbnB1dD1NLGcoQSl9ZWxzZSBpLl9mdWxsSW5wdXQ9aSxpLl9leHBhbmRlZElucHV0PWksZyhpKTtvLnRyYWNlSXMoaSwiY2FycGV0QXhpcyIpJiYodltpLmNhcnBldF09aSksby50cmFjZUlzKGksImNhcnBldERlcGVuZGVudCIpJiZ5LnB1c2goYSl9Zm9yKGE9MDthPHkubGVuZ3RoO2ErKylpZigoaT10W3lbYV1dKS52aXNpYmxlKXt2YXIgUz12W2kuY2FycGV0XTtpLl9jYXJwZXQ9UyxTJiZTLnZpc2libGU/KGkueGF4aXM9Uy54YXhpcyxpLnlheGlzPVMueWF4aXMpOmkudmlzaWJsZT0hMX19LHguc3VwcGx5QW5pbWF0aW9uRGVmYXVsdHM9ZnVuY3Rpb24oZSl7dmFyIHQ7ZT1lfHx7fTt2YXIgcj17fTtmdW5jdGlvbiBuKHQsbil7cmV0dXJuIGMuY29lcmNlKGV8fHt9LHIsaCx0LG4pfWlmKG4oIm1vZGUiKSxuKCJkaXJlY3Rpb24iKSxuKCJmcm9tY3VycmVudCIpLEFycmF5LmlzQXJyYXkoZS5mcmFtZSkpZm9yKHIuZnJhbWU9W10sdD0wO3Q8ZS5mcmFtZS5sZW5ndGg7dCsrKXIuZnJhbWVbdF09eC5zdXBwbHlBbmltYXRpb25GcmFtZURlZmF1bHRzKGUuZnJhbWVbdF18fHt9KTtlbHNlIHIuZnJhbWU9eC5zdXBwbHlBbmltYXRpb25GcmFtZURlZmF1bHRzKGUuZnJhbWV8fHt9KTtpZihBcnJheS5pc0FycmF5KGUudHJhbnNpdGlvbikpZm9yKHIudHJhbnNpdGlvbj1bXSx0PTA7dDxlLnRyYW5zaXRpb24ubGVuZ3RoO3QrKylyLnRyYW5zaXRpb25bdF09eC5zdXBwbHlBbmltYXRpb25UcmFuc2l0aW9uRGVmYXVsdHMoZS50cmFuc2l0aW9uW3RdfHx7fSk7ZWxzZSByLnRyYW5zaXRpb249eC5zdXBwbHlBbmltYXRpb25UcmFuc2l0aW9uRGVmYXVsdHMoZS50cmFuc2l0aW9ufHx7fSk7cmV0dXJuIHJ9LHguc3VwcGx5QW5pbWF0aW9uRnJhbWVEZWZhdWx0cz1mdW5jdGlvbihlKXt2YXIgdD17fTtmdW5jdGlvbiByKHIsbil7cmV0dXJuIGMuY29lcmNlKGV8fHt9LHQsaC5mcmFtZSxyLG4pfXJldHVybiByKCJkdXJhdGlvbiIpLHIoInJlZHJhdyIpLHR9LHguc3VwcGx5QW5pbWF0aW9uVHJhbnNpdGlvbkRlZmF1bHRzPWZ1bmN0aW9uKGUpe3ZhciB0PXt9O2Z1bmN0aW9uIHIocixuKXtyZXR1cm4gYy5jb2VyY2UoZXx8e30sdCxoLnRyYW5zaXRpb24scixuKX1yZXR1cm4gcigiZHVyYXRpb24iKSxyKCJlYXNpbmciKSx0fSx4LnN1cHBseUZyYW1lRGVmYXVsdHM9ZnVuY3Rpb24oZSl7dmFyIHQ9e307ZnVuY3Rpb24gcihyLG4pe3JldHVybiBjLmNvZXJjZShlLHQsZyxyLG4pfXJldHVybiByKCJncm91cCIpLHIoIm5hbWUiKSxyKCJ0cmFjZXMiKSxyKCJiYXNlZnJhbWUiKSxyKCJkYXRhIikscigibGF5b3V0IiksdH0seC5zdXBwbHlUcmFjZURlZmF1bHRzPWZ1bmN0aW9uKGUsdCxyLG4sYSl7dmFyIGksbD1uLmNvbG9yd2F5fHx1LmRlZmF1bHRzLHM9bFtyJWwubGVuZ3RoXTtmdW5jdGlvbiBmKHIsbil7cmV0dXJuIGMuY29lcmNlKGUsdCx4LmF0dHJpYnV0ZXMscixuKX12YXIgZD1mKCJ2aXNpYmxlIik7ZigidHlwZSIpLGYoIm5hbWUiLG4uX3RyYWNlV29yZCsiICIrYSksZigidWlyZXZpc2lvbiIsbi51aXJldmlzaW9uKTt2YXIgcD14LmdldE1vZHVsZSh0KTtpZih0Ll9tb2R1bGU9cCxwKXt2YXIgaD1wLmJhc2VQbG90TW9kdWxlLGc9aC5hdHRyLHY9aC5hdHRyaWJ1dGVzO2lmKGcmJnYpe3ZhciBtPW4uX3N1YnBsb3RzLHk9IiI7aWYoZHx8ImdsMmQiIT09aC5uYW1lKXtpZihBcnJheS5pc0FycmF5KGcpKWZvcihpPTA7aTxnLmxlbmd0aDtpKyspe3ZhciBiPWdbaV0sXz1jLmNvZXJjZShlLHQsdixiKTttW2JdJiZjLnB1c2hVbmlxdWUobVtiXSxfKSx5Kz1ffWVsc2UgeT1jLmNvZXJjZShlLHQsdixnKTttW2gubmFtZV0mJmMucHVzaFVuaXF1ZShtW2gubmFtZV0seSl9fX1yZXR1cm4gZCYmKGYoImN1c3RvbWRhdGEiKSxmKCJpZHMiKSxmKCJtZXRhIiksby50cmFjZUlzKHQsInNob3dMZWdlbmQiKT8oYy5jb2VyY2UoZSx0LHAuYXR0cmlidXRlcy5zaG93bGVnZW5kP3AuYXR0cmlidXRlczp4LmF0dHJpYnV0ZXMsInNob3dsZWdlbmQiKSxmKCJsZWdlbmRncm91cCIpLHQuX2RmbHRTaG93TGVnZW5kPSEwKTp0Ll9kZmx0U2hvd0xlZ2VuZD0hMSxwJiZwLnN1cHBseURlZmF1bHRzKGUsdCxzLG4pLG8udHJhY2VJcyh0LCJub09wYWNpdHkiKXx8Zigib3BhY2l0eSIpLG8udHJhY2VJcyh0LCJub3RMZWdlbmRJc29sYXRhYmxlIikmJih0LnZpc2libGU9ISF0LnZpc2libGUpLG8udHJhY2VJcyh0LCJub0hvdmVyIil8fCh0LmhvdmVydGVtcGxhdGV8fGMuY29lcmNlSG92ZXJpbmZvKGUsdCxuKSwicGFyY2F0cyIhPT10LnR5cGUmJm8uZ2V0Q29tcG9uZW50TWV0aG9kKCJmeCIsInN1cHBseURlZmF1bHRzIikoZSx0LHMsbikpLHAmJnAuc2VsZWN0UG9pbnRzJiZmKCJzZWxlY3RlZHBvaW50cyIpLHguc3VwcGx5VHJhbnNmb3JtRGVmYXVsdHMoZSx0LG4pKSx0fSx4Lmhhc01ha2VzRGF0YVRyYW5zZm9ybT1BLHguc3VwcGx5VHJhbnNmb3JtRGVmYXVsdHM9ZnVuY3Rpb24oZSx0LHIpe2lmKHQuX2xlbmd0aHx8QShlKSl7dmFyIG49ci5fZ2xvYmFsVHJhbnNmb3Jtc3x8W10sYT1yLl90cmFuc2Zvcm1Nb2R1bGVzfHxbXTtpZihBcnJheS5pc0FycmF5KGUudHJhbnNmb3Jtcyl8fDAhPT1uLmxlbmd0aClmb3IodmFyIGk9ZS50cmFuc2Zvcm1zfHxbXSxvPW4uY29uY2F0KGkpLGw9dC50cmFuc2Zvcm1zPVtdLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIHUsZj1vW3NdLGQ9Zi50eXBlLHA9YltkXSxoPSEoZi5fbW9kdWxlJiZmLl9tb2R1bGU9PT1wKSxnPXAmJiJmdW5jdGlvbiI9PXR5cGVvZiBwLnRyYW5zZm9ybTtwfHxjLndhcm4oIlVucmVjb2duaXplZCB0cmFuc2Zvcm0gdHlwZSAiK2QrIi4iKSxwJiZwLnN1cHBseURlZmF1bHRzJiYoaHx8Zyk/KCh1PXAuc3VwcGx5RGVmYXVsdHMoZix0LHIsZSkpLnR5cGU9ZCx1Ll9tb2R1bGU9cCxjLnB1c2hVbmlxdWUoYSxwKSk6dT1jLmV4dGVuZEZsYXQoe30sZiksbC5wdXNoKHUpfX19LHguc3VwcGx5TGF5b3V0R2xvYmFsRGVmYXVsdHM9ZnVuY3Rpb24oZSx0LHIpe2Z1bmN0aW9uIG4ocixuKXtyZXR1cm4gYy5jb2VyY2UoZSx0LHgubGF5b3V0QXR0cmlidXRlcyxyLG4pfXZhciBhPWUudGVtcGxhdGU7Yy5pc1BsYWluT2JqZWN0KGEpJiYodC50ZW1wbGF0ZT1hLHQuX3RlbXBsYXRlPWEubGF5b3V0LHQuX2RhdGFUZW1wbGF0ZT1hLmRhdGEpLG4oImF1dG90eXBlbnVtYmVycyIpO3ZhciBpPWMuY29lcmNlRm9udChuLCJmb250Iik7bigidGl0bGUudGV4dCIsdC5fZGZsdFRpdGxlLnBsb3QpLGMuY29lcmNlRm9udChuLCJ0aXRsZS5mb250Iix7ZmFtaWx5OmkuZmFtaWx5LHNpemU6TWF0aC5yb3VuZCgxLjQqaS5zaXplKSxjb2xvcjppLmNvbG9yfSksbigidGl0bGUueHJlZiIpLG4oInRpdGxlLnlyZWYiKSxuKCJ0aXRsZS54IiksbigidGl0bGUueSIpLG4oInRpdGxlLnhhbmNob3IiKSxuKCJ0aXRsZS55YW5jaG9yIiksbigidGl0bGUucGFkLnQiKSxuKCJ0aXRsZS5wYWQuciIpLG4oInRpdGxlLnBhZC5iIiksbigidGl0bGUucGFkLmwiKSxuKCJ1bmlmb3JtdGV4dC5tb2RlIikmJm4oInVuaWZvcm10ZXh0Lm1pbnNpemUiKSxuKCJhdXRvc2l6ZSIsIShlLndpZHRoJiZlLmhlaWdodCkpLG4oIndpZHRoIiksbigiaGVpZ2h0IiksbigibWFyZ2luLmwiKSxuKCJtYXJnaW4uciIpLG4oIm1hcmdpbi50IiksbigibWFyZ2luLmIiKSxuKCJtYXJnaW4ucGFkIiksbigibWFyZ2luLmF1dG9leHBhbmQiKSxlLndpZHRoJiZlLmhlaWdodCYmeC5zYW5pdGl6ZU1hcmdpbnModCksby5nZXRDb21wb25lbnRNZXRob2QoImdyaWQiLCJzaXplRGVmYXVsdHMiKShlLHQpLG4oInBhcGVyX2JnY29sb3IiKSxuKCJzZXBhcmF0b3JzIixyLmRlY2ltYWwrci50aG91c2FuZHMpLG4oImhpZGVzb3VyY2VzIiksbigiY29sb3J3YXkiKSxuKCJkYXRhcmV2aXNpb24iKTt2YXIgbD1uKCJ1aXJldmlzaW9uIik7bigiZWRpdHJldmlzaW9uIixsKSxuKCJzZWxlY3Rpb25yZXZpc2lvbiIsbCksbigibW9kZWJhci5vcmllbnRhdGlvbiIpLG4oIm1vZGViYXIuYmdjb2xvciIsdS5hZGRPcGFjaXR5KHQucGFwZXJfYmdjb2xvciwuNSkpO3ZhciBzPXUuY29udHJhc3QodS5yZ2IodC5tb2RlYmFyLmJnY29sb3IpKTtuKCJtb2RlYmFyLmNvbG9yIix1LmFkZE9wYWNpdHkocywuMykpLG4oIm1vZGViYXIuYWN0aXZlY29sb3IiLHUuYWRkT3BhY2l0eShzLC43KSksbigibW9kZWJhci51aXJldmlzaW9uIixsKSxvLmdldENvbXBvbmVudE1ldGhvZCgic2hhcGVzIiwic3VwcGx5RHJhd05ld1NoYXBlRGVmYXVsdHMiKShlLHQsbiksbigibWV0YSIpLGMuaXNQbGFpbk9iamVjdChlLnRyYW5zaXRpb24pJiYobigidHJhbnNpdGlvbi5kdXJhdGlvbiIpLG4oInRyYW5zaXRpb24uZWFzaW5nIiksbigidHJhbnNpdGlvbi5vcmRlcmluZyIpKSxvLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlRGVmYXVsdHMiKShlLHQsImNhbGVuZGFyIiksby5nZXRDb21wb25lbnRNZXRob2QoImZ4Iiwic3VwcGx5TGF5b3V0R2xvYmFsRGVmYXVsdHMiKShlLHQsbil9LHgucGxvdEF1dG9TaXplPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLG89ZS5fY29udGV4dHx8e30sbD1vLmZyYW1lTWFyZ2lucyxzPWMuaXNQbG90RGl2KGUpO2lmKHMmJmUuZW1pdCgicGxvdGx5X2F1dG9zaXplIiksby5maWxsRnJhbWUpbj13aW5kb3cuaW5uZXJXaWR0aCxhPXdpbmRvdy5pbm5lckhlaWdodCxkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iO2Vsc2V7dmFyIHU9cz93aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlKTp7fTtpZihuPVModS53aWR0aCl8fFModS5tYXhXaWR0aCl8fHIud2lkdGgsYT1TKHUuaGVpZ2h0KXx8Uyh1Lm1heEhlaWdodCl8fHIuaGVpZ2h0LGkobCkmJmw+MCl7dmFyIGY9MS0yKmw7bj1NYXRoLnJvdW5kKGYqbiksYT1NYXRoLnJvdW5kKGYqYSl9fXZhciBkPXgubGF5b3V0QXR0cmlidXRlcy53aWR0aC5taW4scD14LmxheW91dEF0dHJpYnV0ZXMuaGVpZ2h0Lm1pbjtuPGQmJihuPWQpLGE8cCYmKGE9cCk7dmFyIGg9IXQud2lkdGgmJk1hdGguYWJzKHIud2lkdGgtbik+MSxnPSF0LmhlaWdodCYmTWF0aC5hYnMoci5oZWlnaHQtYSk+MTsoZ3x8aCkmJihoJiYoci53aWR0aD1uKSxnJiYoci5oZWlnaHQ9YSkpLGUuX2luaXRpYWxBdXRvU2l6ZXx8KGUuX2luaXRpYWxBdXRvU2l6ZT17d2lkdGg6bixoZWlnaHQ6YX0pLHguc2FuaXRpemVNYXJnaW5zKHIpfSx4LnN1cHBseUxheW91dE1vZHVsZURlZmF1bHRzPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhLGksbCxzPW8uY29tcG9uZW50c1JlZ2lzdHJ5LHU9dC5fYmFzZVBsb3RNb2R1bGVzLGY9by5zdWJwbG90c1JlZ2lzdHJ5LmNhcnRlc2lhbjtmb3IoYSBpbiBzKShsPXNbYV0pLmluY2x1ZGVCYXNlUGxvdCYmbC5pbmNsdWRlQmFzZVBsb3QoZSx0KTtmb3IodmFyIGQgaW4gdS5sZW5ndGh8fHUucHVzaChmKSx0Ll9oYXMoImNhcnRlc2lhbiIpJiYoby5nZXRDb21wb25lbnRNZXRob2QoImdyaWQiLCJjb250ZW50RGVmYXVsdHMiKShlLHQpLGYuZmluYWxpemVTdWJwbG90cyhlLHQpKSx0Ll9zdWJwbG90cyl0Ll9zdWJwbG90c1tkXS5zb3J0KGMuc3VicGxvdFNvcnQpO2ZvcihpPTA7aTx1Lmxlbmd0aDtpKyspKGw9dVtpXSkuc3VwcGx5TGF5b3V0RGVmYXVsdHMmJmwuc3VwcGx5TGF5b3V0RGVmYXVsdHMoZSx0LHIpO3ZhciBwPXQuX21vZHVsZXM7Zm9yKGk9MDtpPHAubGVuZ3RoO2krKykobD1wW2ldKS5zdXBwbHlMYXlvdXREZWZhdWx0cyYmbC5zdXBwbHlMYXlvdXREZWZhdWx0cyhlLHQscik7dmFyIGg9dC5fdHJhbnNmb3JtTW9kdWxlcztmb3IoaT0wO2k8aC5sZW5ndGg7aSsrKShsPWhbaV0pLnN1cHBseUxheW91dERlZmF1bHRzJiZsLnN1cHBseUxheW91dERlZmF1bHRzKGUsdCxyLG4pO2ZvcihhIGluIHMpKGw9c1thXSkuc3VwcGx5TGF5b3V0RGVmYXVsdHMmJmwuc3VwcGx5TGF5b3V0RGVmYXVsdHMoZSx0LHIpfSx4LnB1cmdlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuX2Z1bGxMYXlvdXR8fHt9O3ZvaWQgMCE9PXQuX2dsY29udGFpbmVyJiYodC5fZ2xjb250YWluZXIuc2VsZWN0QWxsKCIuZ2wtY2FudmFzIikucmVtb3ZlKCksdC5fZ2xjb250YWluZXIucmVtb3ZlKCksdC5fZ2xjYW52YXM9bnVsbCksdC5fbW9kZUJhciYmdC5fbW9kZUJhci5kZXN0cm95KCksZS5fdHJhbnNpdGlvbkRhdGEmJihlLl90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzJiYoZS5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcy5sZW5ndGg9MCksZS5fdHJhbnNpdGlvbkRhdGEuX2FuaW1hdGlvblJhZiYmd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKGUuX3RyYW5zaXRpb25EYXRhLl9hbmltYXRpb25SYWYpKSxjLmNsZWFyVGhyb3R0bGUoKSxjLmNsZWFyUmVzcG9uc2l2ZShlKSxkZWxldGUgZS5kYXRhLGRlbGV0ZSBlLmxheW91dCxkZWxldGUgZS5fZnVsbERhdGEsZGVsZXRlIGUuX2Z1bGxMYXlvdXQsZGVsZXRlIGUuY2FsY2RhdGEsZGVsZXRlIGUuZnJhbWV3b3JrLGRlbGV0ZSBlLmVtcHR5LGRlbGV0ZSBlLmZpZCxkZWxldGUgZS51bmRvcXVldWUsZGVsZXRlIGUudW5kb251bSxkZWxldGUgZS5hdXRvcGxheSxkZWxldGUgZS5jaGFuZ2VkLGRlbGV0ZSBlLl9wcm9taXNlcyxkZWxldGUgZS5fcmVkcmF3VGltZXIsZGVsZXRlIGUuX2htbHVtY291bnQsZGVsZXRlIGUuX2htcGl4Y291bnQsZGVsZXRlIGUuX3RyYW5zaXRpb25EYXRhLGRlbGV0ZSBlLl90cmFuc2l0aW9uaW5nLGRlbGV0ZSBlLl9pbml0aWFsQXV0b1NpemUsZGVsZXRlIGUuX3RyYW5zaXRpb25pbmdXaXRoRHVyYXRpb24sZGVsZXRlIGUuX2RyYWdnaW5nLGRlbGV0ZSBlLl9kcmFnZ2VkLGRlbGV0ZSBlLl9kcmFnZGF0YSxkZWxldGUgZS5faG92ZXJkYXRhLGRlbGV0ZSBlLl9zbmFwc2hvdEluUHJvZ3Jlc3MsZGVsZXRlIGUuX2VkaXRpbmcsZGVsZXRlIGUuX21vdXNlRG93blRpbWUsZGVsZXRlIGUuX2xlZ2VuZE1vdXNlRG93blRpbWUsZS5yZW1vdmVBbGxMaXN0ZW5lcnMmJmUucmVtb3ZlQWxsTGlzdGVuZXJzKCl9LHguc3R5bGU9ZnVuY3Rpb24oZSl7dmFyIHQscj1lLl9mdWxsTGF5b3V0Ll92aXNpYmxlTW9kdWxlcyxuPVtdO2Zvcih0PTA7dDxyLmxlbmd0aDt0Kyspe3ZhciBhPXJbdF07YS5zdHlsZSYmYy5wdXNoVW5pcXVlKG4sYS5zdHlsZSl9Zm9yKHQ9MDt0PG4ubGVuZ3RoO3QrKyluW3RdKGUpfSx4LnNhbml0aXplTWFyZ2lucz1mdW5jdGlvbihlKXtpZihlJiZlLm1hcmdpbil7dmFyIHQscj1lLndpZHRoLG49ZS5oZWlnaHQsYT1lLm1hcmdpbixpPXItKGEubCthLnIpLG89bi0oYS50K2EuYik7aTwwJiYodD0oci0xKS8oYS5sK2EuciksYS5sPU1hdGguZmxvb3IodCphLmwpLGEucj1NYXRoLmZsb29yKHQqYS5yKSksbzwwJiYodD0obi0xKS8oYS50K2EuYiksYS50PU1hdGguZmxvb3IodCphLnQpLGEuYj1NYXRoLmZsb29yKHQqYS5iKSl9fSx4LmNsZWFyQXV0b01hcmdpbklkcz1mdW5jdGlvbihlKXtlLl9mdWxsTGF5b3V0Ll9wdXNobWFyZ2luSWRzPXt9fSx4LmFsbG93QXV0b01hcmdpbj1mdW5jdGlvbihlLHQpe2UuX2Z1bGxMYXlvdXQuX3B1c2htYXJnaW5JZHNbdF09MX07eC5hdXRvTWFyZ2luPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1lLl9mdWxsTGF5b3V0LGE9bi53aWR0aCxpPW4uaGVpZ2h0LG89bi5tYXJnaW4sbD1jLmNvbnN0cmFpbihhLW8ubC1vLnIsMiw2NCkscz1jLmNvbnN0cmFpbihpLW8udC1vLmIsMiw2NCksdT1NYXRoLm1heCgwLGEtbCksZj1NYXRoLm1heCgwLGktcyksZD1uLl9wdXNobWFyZ2luLHA9bi5fcHVzaG1hcmdpbklkcztpZighMSE9PW8uYXV0b2V4cGFuZCl7aWYocil7dmFyIGg9ci5wYWQ7aWYodm9pZCAwPT09aCYmKGg9TWF0aC5taW4oMTIsby5sLG8ucixvLnQsby5iKSksdSl7dmFyIGc9KHIubCtyLnIpL3U7Zz4xJiYoci5sLz1nLHIuci89Zyl9aWYoZil7dmFyIHY9KHIudCtyLmIpL2Y7dj4xJiYoci50Lz12LHIuYi89dil9dmFyIG09dm9pZCAwIT09ci54bD9yLnhsOnIueCx5PXZvaWQgMCE9PXIueHI/ci54cjpyLngsYj12b2lkIDAhPT1yLnl0P3IueXQ6ci55LF89dm9pZCAwIT09ci55Yj9yLnliOnIueTtkW3RdPXtsOnt2YWw6bSxzaXplOnIubCtofSxyOnt2YWw6eSxzaXplOnIucitofSxiOnt2YWw6XyxzaXplOnIuYitofSx0Ont2YWw6YixzaXplOnIudCtofX0scFt0XT0xfWVsc2UgZGVsZXRlIGRbdF0sZGVsZXRlIHBbdF07aWYoIW4uX3JlcGxvdHRpbmcpcmV0dXJuIHguZG9BdXRvTWFyZ2luKGUpfX0seC5kb0F1dG9NYXJnaW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fZnVsbExheW91dCxyPXQud2lkdGgsbj10LmhlaWdodDt0Ll9zaXplfHwodC5fc2l6ZT17fSksQyh0KTt2YXIgYT10Ll9zaXplLGw9dC5tYXJnaW4scz1jLmV4dGVuZEZsYXQoe30sYSksdT1sLmwsZj1sLnIscD1sLnQsaD1sLmIsZz10Ll9wdXNobWFyZ2luLHY9dC5fcHVzaG1hcmdpbklkcztpZighMSE9PXQubWFyZ2luLmF1dG9leHBhbmQpe2Zvcih2YXIgbSBpbiBnKXZbbV18fGRlbGV0ZSBnW21dO2Zvcih2YXIgeSBpbiBnLmJhc2U9e2w6e3ZhbDowLHNpemU6dX0scjp7dmFsOjEsc2l6ZTpmfSx0Ont2YWw6MSxzaXplOnB9LGI6e3ZhbDowLHNpemU6aH19LGcpe3ZhciBiPWdbeV0ubHx8e30sXz1nW3ldLmJ8fHt9LHc9Yi52YWwsVD1iLnNpemUsaz1fLnZhbCxNPV8uc2l6ZTtmb3IodmFyIEEgaW4gZyl7aWYoaShUKSYmZ1tBXS5yKXt2YXIgTD1nW0FdLnIudmFsLFM9Z1tBXS5yLnNpemU7aWYoTD53KXt2YXIgTz0oVCpMKyhTLXIpKncpLyhMLXcpLEQ9KFMqKDEtdykrKFQtcikqKDEtTCkpLyhMLXcpO08rRD51K2YmJih1PU8sZj1EKX19aWYoaShNKSYmZ1tBXS50KXt2YXIgUD1nW0FdLnQudmFsLHo9Z1tBXS50LnNpemU7aWYoUD5rKXt2YXIgUj0oTSpQKyh6LW4pKmspLyhQLWspLEU9KHoqKDEtaykrKE0tbikqKDEtUCkpLyhQLWspO1IrRT5oK3AmJihoPVIscD1FKX19fX19dmFyIEk9Yy5jb25zdHJhaW4oci1sLmwtbC5yLDIsNjQpLEY9Yy5jb25zdHJhaW4obi1sLnQtbC5iLDIsNjQpLE49TWF0aC5tYXgoMCxyLUkpLEg9TWF0aC5tYXgoMCxuLUYpO2lmKE4pe3ZhciBqPSh1K2YpL047aj4xJiYodS89aixmLz1qKX1pZihIKXt2YXIgQj0oaCtwKS9IO0I+MSYmKGgvPUIscC89Qil9aWYoYS5sPU1hdGgucm91bmQodSksYS5yPU1hdGgucm91bmQoZiksYS50PU1hdGgucm91bmQocCksYS5iPU1hdGgucm91bmQoaCksYS5wPU1hdGgucm91bmQobC5wYWQpLGEudz1NYXRoLnJvdW5kKHIpLWEubC1hLnIsYS5oPU1hdGgucm91bmQobiktYS50LWEuYiwhdC5fcmVwbG90dGluZyYmeC5kaWRNYXJnaW5DaGFuZ2UocyxhKSl7Il9yZWRyYXdGcm9tQXV0b01hcmdpbkNvdW50ImluIHQ/dC5fcmVkcmF3RnJvbUF1dG9NYXJnaW5Db3VudCsrOnQuX3JlZHJhd0Zyb21BdXRvTWFyZ2luQ291bnQ9MTt2YXIgVj0zKigxK09iamVjdC5rZXlzKHYpLmxlbmd0aCk7aWYodC5fcmVkcmF3RnJvbUF1dG9NYXJnaW5Db3VudDxWKXJldHVybiBvLmNhbGwoInBsb3QiLGUpO3QuX3NpemU9cyxjLndhcm4oIlRvbyBtYW55IGF1dG8tbWFyZ2luIHJlZHJhd3MuIil9IWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1kLmxpc3QoZSwiIiwhMCkscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdLl9oaWRlT3V0T2ZSYW5nZUluc2lkZVRpY2tMYWJlbHM7biYmbigpfX0oZSl9O3ZhciBPPVsibCIsInIiLCJ0IiwiYiIsInAiLCJ3IiwiaCJdO2Z1bmN0aW9uIEQoZSx0LHIpe3ZhciBuPSExO3ZhciBhPVt4LnByZXZpb3VzUHJvbWlzZXMsZnVuY3Rpb24oKXtpZihlLl90cmFuc2l0aW9uRGF0YSlyZXR1cm4gZS5fdHJhbnNpdGlvbmluZz0hMSxmdW5jdGlvbihlKXt2YXIgdD1Qcm9taXNlLnJlc29sdmUoKTtpZighZSlyZXR1cm4gdDtmb3IoO2UubGVuZ3RoOyl0PXQudGhlbihlLnNoaWZ0KCkpO3JldHVybiB0fShlLl90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzKX0sci5wcmVwYXJlRm4seC5yZWhvdmVyLGZ1bmN0aW9uKCl7cmV0dXJuIGUuZW1pdCgicGxvdGx5X3RyYW5zaXRpb25pbmciLFtdKSxuZXcgUHJvbWlzZSgoZnVuY3Rpb24oYSl7ZS5fdHJhbnNpdGlvbmluZz0hMCx0LmR1cmF0aW9uPjAmJihlLl90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uPSEwKSxlLl90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzLnB1c2goKGZ1bmN0aW9uKCl7bj0hMH0pKSxyLnJlZHJhdyYmZS5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcy5wdXNoKChmdW5jdGlvbigpe3JldHVybiBvLmNhbGwoInJlZHJhdyIsZSl9KSksZS5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcy5wdXNoKChmdW5jdGlvbigpe2UuZW1pdCgicGxvdGx5X3RyYW5zaXRpb25pbnRlcnJ1cHRlZCIsW10pfSkpO3ZhciBpPTAsbD0wO2Z1bmN0aW9uIHMoKXtyZXR1cm4gaSsrLGZ1bmN0aW9uKCl7bCsrLG58fGwhPT1pfHxmdW5jdGlvbih0KXtpZighZS5fdHJhbnNpdGlvbkRhdGEpcmV0dXJuOyhmdW5jdGlvbihlKXtpZihlKWZvcig7ZS5sZW5ndGg7KWUuc2hpZnQoKX0pKGUuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3MpLFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKGZ1bmN0aW9uKCl7aWYoci5yZWRyYXcpcmV0dXJuIG8uY2FsbCgicmVkcmF3IixlKX0pKS50aGVuKChmdW5jdGlvbigpe2UuX3RyYW5zaXRpb25pbmc9ITEsZS5fdHJhbnNpdGlvbmluZ1dpdGhEdXJhdGlvbj0hMSxlLmVtaXQoInBsb3RseV90cmFuc2l0aW9uZWQiLFtdKX0pKS50aGVuKHQpfShhKX19ci5ydW5GbihzKSxzZXRUaW1lb3V0KHMoKSl9KSl9XSxpPWMuc3luY09yQXN5bmMoYSxlKTtyZXR1cm4gaSYmaS50aGVufHwoaT1Qcm9taXNlLnJlc29sdmUoKSksaS50aGVuKChmdW5jdGlvbigpe3JldHVybiBlfSkpfXguZGlkTWFyZ2luQ2hhbmdlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPTA7cjxPLmxlbmd0aDtyKyspe3ZhciBuPU9bcl0sYT1lW25dLG89dFtuXTtpZighaShhKXx8TWF0aC5hYnMoby1hKT4xKXJldHVybiEwfXJldHVybiExfSx4LmdyYXBoSnNvbj1mdW5jdGlvbihlLHQscixuLGEsaSl7KGEmJnQmJiFlLl9mdWxsRGF0YXx8YSYmIXQmJiFlLl9mdWxsTGF5b3V0KSYmeC5zdXBwbHlEZWZhdWx0cyhlKTt2YXIgbz1hP2UuX2Z1bGxEYXRhOmUuZGF0YSxsPWE/ZS5fZnVsbExheW91dDplLmxheW91dCxzPShlLl90cmFuc2l0aW9uRGF0YXx8e30pLl9mcmFtZXM7ZnVuY3Rpb24gdShlLHQpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlKXJldHVybiB0PyJfZnVuY3Rpb25fIjpudWxsO2lmKGMuaXNQbGFpbk9iamVjdChlKSl7dmFyIG4sYT17fTtyZXR1cm4gT2JqZWN0LmtleXMoZSkuc29ydCgpLmZvckVhY2goKGZ1bmN0aW9uKGkpe2lmKC0xPT09WyJfIiwiWyJdLmluZGV4T2YoaS5jaGFyQXQoMCkpKWlmKCJmdW5jdGlvbiIhPXR5cGVvZiBlW2ldKXtpZigia2VlcGRhdGEiPT09cil7aWYoInNyYyI9PT1pLnN1YnN0cihpLmxlbmd0aC0zKSlyZXR1cm59ZWxzZSBpZigia2VlcHN0cmVhbSI9PT1yKXtpZigic3RyaW5nIj09dHlwZW9mKG49ZVtpKyJzcmMiXSkmJm4uaW5kZXhPZigiOiIpPjAmJiFjLmlzUGxhaW5PYmplY3QoZS5zdHJlYW0pKXJldHVybn1lbHNlIGlmKCJrZWVwYWxsIiE9PXImJiJzdHJpbmciPT10eXBlb2Yobj1lW2krInNyYyJdKSYmbi5pbmRleE9mKCI6Iik+MClyZXR1cm47YVtpXT11KGVbaV0sdCl9ZWxzZSB0JiYoYVtpXT0iX2Z1bmN0aW9uIil9KSksYX1yZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSx0KX0pKTpjLmlzVHlwZWRBcnJheShlKT9jLnNpbXBsZU1hcChlLGMuaWRlbnRpdHkpOmMuaXNKU0RhdGUoZSk/Yy5tczJEYXRlVGltZUxvY2FsKCtlKTplfXZhciBmPXtkYXRhOihvfHxbXSkubWFwKChmdW5jdGlvbihlKXt2YXIgcj11KGUpO3JldHVybiB0JiZkZWxldGUgci5maXQscn0pKX07aWYoIXQmJihmLmxheW91dD11KGwpLGEpKXt2YXIgZD1sLl9zaXplO2YubGF5b3V0LmNvbXB1dGVkPXttYXJnaW46e2I6ZC5iLGw6ZC5sLHI6ZC5yLHQ6ZC50fX19cmV0dXJuIGUuZnJhbWV3b3JrJiZlLmZyYW1ld29yay5pc1BvbGFyJiYoZj1lLmZyYW1ld29yay5nZXRDb25maWcoKSkscyYmKGYuZnJhbWVzPXUocykpLGkmJihmLmNvbmZpZz11KGUuX2NvbnRleHQsITApKSwib2JqZWN0Ij09PW4/ZjpKU09OLnN0cmluZ2lmeShmKX0seC5tb2RpZnlGcmFtZXM9ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGEsaT1lLl90cmFuc2l0aW9uRGF0YS5fZnJhbWVzLG89ZS5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaDtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXN3aXRjaCgobj10W3JdKS50eXBlKXtjYXNlInJlcGxhY2UiOmE9bi52YWx1ZTt2YXIgbD0oaVtuLmluZGV4XXx8e30pLm5hbWUscz1hLm5hbWU7aVtuLmluZGV4XT1vW3NdPWEscyE9PWwmJihkZWxldGUgb1tsXSxvW3NdPWEpO2JyZWFrO2Nhc2UiaW5zZXJ0IjpvWyhhPW4udmFsdWUpLm5hbWVdPWEsaS5zcGxpY2Uobi5pbmRleCwwLGEpO2JyZWFrO2Nhc2UiZGVsZXRlIjpkZWxldGUgb1soYT1pW24uaW5kZXhdKS5uYW1lXSxpLnNwbGljZShuLmluZGV4LDEpfXJldHVybiBQcm9taXNlLnJlc29sdmUoKX0seC5jb21wdXRlRnJhbWU9ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGEsaSxvPWUuX3RyYW5zaXRpb25EYXRhLl9mcmFtZUhhc2g7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJjb21wdXRlRnJhbWUgbXVzdCBiZSBnaXZlbiBhIHN0cmluZyBmcmFtZSBuYW1lIik7dmFyIGw9b1t0LnRvU3RyaW5nKCldO2lmKCFsKXJldHVybiExO2Zvcih2YXIgcz1bbF0sYz1bbC5uYW1lXTtsLmJhc2VmcmFtZSYmKGw9b1tsLmJhc2VmcmFtZS50b1N0cmluZygpXSkmJi0xPT09Yy5pbmRleE9mKGwubmFtZSk7KXMucHVzaChsKSxjLnB1c2gobC5uYW1lKTtmb3IodmFyIHU9e307bD1zLnBvcCgpOylpZihsLmxheW91dCYmKHUubGF5b3V0PXguZXh0ZW5kTGF5b3V0KHUubGF5b3V0LGwubGF5b3V0KSksbC5kYXRhKXtpZih1LmRhdGF8fCh1LmRhdGE9W10pLCEobj1sLnRyYWNlcykpZm9yKG49W10scj0wO3I8bC5kYXRhLmxlbmd0aDtyKyspbltyXT1yO2Zvcih1LnRyYWNlc3x8KHUudHJhY2VzPVtdKSxyPTA7cjxsLmRhdGEubGVuZ3RoO3IrKyludWxsIT0oYT1uW3JdKSYmKC0xPT09KGk9dS50cmFjZXMuaW5kZXhPZihhKSkmJihpPXUuZGF0YS5sZW5ndGgsdS50cmFjZXNbaV09YSksdS5kYXRhW2ldPXguZXh0ZW5kVHJhY2UodS5kYXRhW2ldLGwuZGF0YVtyXSkpfXJldHVybiB1fSx4LnJlY29tcHV0ZUZyYW1lSGFzaD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaD17fSxyPWUuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXMsbj0wO248ci5sZW5ndGg7bisrKXt2YXIgYT1yW25dO2EmJmEubmFtZSYmKHRbYS5uYW1lXT1hKX19LHguZXh0ZW5kT2JqZWN0V2l0aENvbnRhaW5lcnM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGEsaSxvLGwscyx1LGY9Yy5leHRlbmREZWVwTm9BcnJheXMoe30sdHx8e30pLGQ9Yy5leHBhbmRPYmplY3RQYXRocyhmKSxwPXt9O2lmKHImJnIubGVuZ3RoKWZvcihpPTA7aTxyLmxlbmd0aDtpKyspdm9pZCAwPT09KGE9KG49Yy5uZXN0ZWRQcm9wZXJ0eShkLHJbaV0pKS5nZXQoKSk/Yy5uZXN0ZWRQcm9wZXJ0eShwLHJbaV0pLnNldChudWxsKToobi5zZXQobnVsbCksYy5uZXN0ZWRQcm9wZXJ0eShwLHJbaV0pLnNldChhKSk7aWYoZT1jLmV4dGVuZERlZXBOb0FycmF5cyhlfHx7fSxkKSxyJiZyLmxlbmd0aClmb3IoaT0wO2k8ci5sZW5ndGg7aSsrKWlmKHM9Yy5uZXN0ZWRQcm9wZXJ0eShwLHJbaV0pLmdldCgpKXtmb3IodT0obD1jLm5lc3RlZFByb3BlcnR5KGUscltpXSkpLmdldCgpLEFycmF5LmlzQXJyYXkodSl8fCh1PVtdLGwuc2V0KHUpKSxvPTA7bzxzLmxlbmd0aDtvKyspe3ZhciBoPXNbb107dVtvXT1udWxsPT09aD9udWxsOnguZXh0ZW5kT2JqZWN0V2l0aENvbnRhaW5lcnModVtvXSxoKX1sLnNldCh1KX1yZXR1cm4gZX0seC5kYXRhQXJyYXlDb250YWluZXJzPVsidHJhbnNmb3JtcyIsImRpbWVuc2lvbnMiXSx4LmxheW91dEFycmF5Q29udGFpbmVycz1vLmxheW91dEFycmF5Q29udGFpbmVycyx4LmV4dGVuZFRyYWNlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHguZXh0ZW5kT2JqZWN0V2l0aENvbnRhaW5lcnMoZSx0LHguZGF0YUFycmF5Q29udGFpbmVycyl9LHguZXh0ZW5kTGF5b3V0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHguZXh0ZW5kT2JqZWN0V2l0aENvbnRhaW5lcnMoZSx0LHgubGF5b3V0QXJyYXlDb250YWluZXJzKX0seC50cmFuc2l0aW9uPWZ1bmN0aW9uKGUsdCxyLG4sYSxpKXt2YXIgbz17cmVkcmF3OmEucmVkcmF3fSxsPXt9LHM9W107cmV0dXJuIG8ucHJlcGFyZUZuPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPUFycmF5LmlzQXJyYXkodCk/dC5sZW5ndGg6MCxpPW4uc2xpY2UoMCxhKSxvPTA7bzxpLmxlbmd0aDtvKyspe3ZhciB1PWlbb10sZj1lLl9mdWxsRGF0YVt1XS5fbW9kdWxlO2lmKGYpe2lmKGYuYW5pbWF0YWJsZSl7dmFyIGQ9Zi5iYXNlUGxvdE1vZHVsZS5uYW1lO2xbZF18fChsW2RdPVtdKSxsW2RdLnB1c2godSl9ZS5kYXRhW2lbb11dPXguZXh0ZW5kVHJhY2UoZS5kYXRhW2lbb11dLHRbb10pfX12YXIgcD1jLmV4cGFuZE9iamVjdFBhdGhzKGMuZXh0ZW5kRGVlcE5vQXJyYXlzKHt9LHIpKSxoPS9eW3h5XWF4aXNbMC05XSokLztmb3IodmFyIGcgaW4gcCloLnRlc3QoZykmJmRlbGV0ZSBwW2ddLnJhbmdlO3guZXh0ZW5kTGF5b3V0KGUubGF5b3V0LHApLGRlbGV0ZSBlLmNhbGNkYXRhLHguc3VwcGx5RGVmYXVsdHMoZSkseC5kb0NhbGNkYXRhKGUpO3ZhciB2PWMuZXhwYW5kT2JqZWN0UGF0aHMocik7aWYodil7dmFyIG09ZS5fZnVsbExheW91dC5fcGxvdHM7Zm9yKHZhciB5IGluIG0pe3ZhciBiPW1beV0sXz1iLnhheGlzLHc9Yi55YXhpcyxUPV8ucmFuZ2Uuc2xpY2UoKSxrPXcucmFuZ2Uuc2xpY2UoKSxNPW51bGwsQT1udWxsLEw9bnVsbCxTPW51bGw7QXJyYXkuaXNBcnJheSh2W18uX25hbWUrIi5yYW5nZSJdKT9NPXZbXy5fbmFtZSsiLnJhbmdlIl0uc2xpY2UoKTpBcnJheS5pc0FycmF5KCh2W18uX25hbWVdfHx7fSkucmFuZ2UpJiYoTT12W18uX25hbWVdLnJhbmdlLnNsaWNlKCkpLEFycmF5LmlzQXJyYXkodlt3Ll9uYW1lKyIucmFuZ2UiXSk/QT12W3cuX25hbWUrIi5yYW5nZSJdLnNsaWNlKCk6QXJyYXkuaXNBcnJheSgodlt3Ll9uYW1lXXx8e30pLnJhbmdlKSYmKEE9dlt3Ll9uYW1lXS5yYW5nZS5zbGljZSgpKSxUJiZNJiYoXy5yMmwoVFswXSkhPT1fLnIybChNWzBdKXx8Xy5yMmwoVFsxXSkhPT1fLnIybChNWzFdKSkmJihMPXt4cjA6VCx4cjE6TX0pLGsmJkEmJih3LnIybChrWzBdKSE9PXcucjJsKEFbMF0pfHx3LnIybChrWzFdKSE9PXcucjJsKEFbMV0pKSYmKFM9e3lyMDprLHlyMTpBfSksKEx8fFMpJiZzLnB1c2goYy5leHRlbmRGbGF0KHtwbG90aW5mbzpifSxMLFMpKX19cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpfSxvLnJ1bkZuPWZ1bmN0aW9uKHQpe3ZhciBuLGEsbz1lLl9mdWxsTGF5b3V0Ll9iYXNlUGxvdE1vZHVsZXMsdT1zLmxlbmd0aDtpZihyKWZvcihhPTA7YTxvLmxlbmd0aDthKyspb1thXS50cmFuc2l0aW9uQXhlcyYmb1thXS50cmFuc2l0aW9uQXhlcyhlLHMsaSx0KTtmb3IodmFyIGYgaW4gdT8oKG49Yy5leHRlbmRGbGF0KHt9LGkpKS5kdXJhdGlvbj0wLGRlbGV0ZSBsLmNhcnRlc2lhbik6bj1pLGwpe3ZhciBkPWxbZl07ZS5fZnVsbERhdGFbZFswXV0uX21vZHVsZS5iYXNlUGxvdE1vZHVsZS5wbG90KGUsZCxuLHQpfX0sRChlLGksbyl9LHgudHJhbnNpdGlvbkZyb21SZWFjdD1mdW5jdGlvbihlLHQscixuKXt2YXIgYT1lLl9mdWxsTGF5b3V0LGk9YS50cmFuc2l0aW9uLG89e30sbD1bXTtyZXR1cm4gby5wcmVwYXJlRm49ZnVuY3Rpb24oKXt2YXIgZT1hLl9wbG90cztmb3IodmFyIGkgaW4gby5yZWRyYXc9ITEsInNvbWUiPT09dC5hbmltJiYoby5yZWRyYXc9ITApLCJzb21lIj09PXIuYW5pbSYmKG8ucmVkcmF3PSEwKSxlKXt2YXIgcz1lW2ldLHU9cy54YXhpcyxmPXMueWF4aXMsZD1uW3UuX25hbWVdLnJhbmdlLnNsaWNlKCkscD1uW2YuX25hbWVdLnJhbmdlLnNsaWNlKCksaD11LnJhbmdlLnNsaWNlKCksZz1mLnJhbmdlLnNsaWNlKCk7dS5zZXRTY2FsZSgpLGYuc2V0U2NhbGUoKTt2YXIgdj1udWxsLG09bnVsbDt1LnIybChkWzBdKT09PXUucjJsKGhbMF0pJiZ1LnIybChkWzFdKT09PXUucjJsKGhbMV0pfHwodj17eHIwOmQseHIxOmh9KSxmLnIybChwWzBdKT09PWYucjJsKGdbMF0pJiZmLnIybChwWzFdKT09PWYucjJsKGdbMV0pfHwobT17eXIwOnAseXIxOmd9KSwodnx8bSkmJmwucHVzaChjLmV4dGVuZEZsYXQoe3Bsb3RpbmZvOnN9LHYsbSkpfXJldHVybiBQcm9taXNlLnJlc29sdmUoKX0sby5ydW5Gbj1mdW5jdGlvbihyKXtmb3IodmFyIG4sYSxvLHM9ZS5fZnVsbERhdGEsdT1lLl9mdWxsTGF5b3V0Ll9iYXNlUGxvdE1vZHVsZXMsZj1bXSxkPTA7ZDxzLmxlbmd0aDtkKyspZi5wdXNoKGQpO2Z1bmN0aW9uIHAoKXtmb3IodmFyIHQ9MDt0PHUubGVuZ3RoO3QrKyl1W3RdLnRyYW5zaXRpb25BeGVzJiZ1W3RdLnRyYW5zaXRpb25BeGVzKGUsbCxuLHIpfWZ1bmN0aW9uIGgoKXtmb3IodmFyIHQ9MDt0PHUubGVuZ3RoO3QrKyl1W3RdLnBsb3QoZSxvLGEscil9bC5sZW5ndGgmJnQuYW5pbT8idHJhY2VzIGZpcnN0Ij09PWkub3JkZXJpbmc/KG49Yy5leHRlbmRGbGF0KHt9LGkse2R1cmF0aW9uOjB9KSxvPWYsYT1pLHNldFRpbWVvdXQocCxpLmR1cmF0aW9uKSxoKCkpOihuPWksbz1udWxsLGE9Yy5leHRlbmRGbGF0KHt9LGkse2R1cmF0aW9uOjB9KSxzZXRUaW1lb3V0KGgsbi5kdXJhdGlvbikscCgpKTpsLmxlbmd0aD8obj1pLHAoKSk6dC5hbmltJiYobz1mLGE9aSxoKCkpfSxEKGUsaSxvKX0seC5kb0NhbGNkYXRhPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbixhLGkscz1kLmxpc3QoZSksdT1lLl9mdWxsRGF0YSxwPWUuX2Z1bGxMYXlvdXQsaD1uZXcgQXJyYXkodS5sZW5ndGgpLGc9KGUuY2FsY2RhdGF8fFtdKS5zbGljZSgpO2ZvcihlLmNhbGNkYXRhPWgscC5fbnVtQm94ZXM9MCxwLl9udW1WaW9saW5zPTAscC5fdmlvbGluU2NhbGVHcm91cFN0YXRzPXt9LGUuX2htcGl4Y291bnQ9MCxlLl9obWx1bWNvdW50PTAscC5fcGllY29sb3JtYXA9e30scC5fc3VuYnVyc3Rjb2xvcm1hcD17fSxwLl90cmVlbWFwY29sb3JtYXA9e30scC5fZnVubmVsYXJlYWNvbG9ybWFwPXt9LGE9MDthPHUubGVuZ3RoO2ErKylBcnJheS5pc0FycmF5KHQpJiYtMT09PXQuaW5kZXhPZihhKSYmKGhbYV09Z1thXSk7Zm9yKGE9MDthPHUubGVuZ3RoO2ErKykocj11W2FdKS5fYXJyYXlBdHRycz1sLmZpbmRBcnJheUF0dHJpYnV0ZXMociksci5fZXh0cmVtZXM9e307dmFyIHY9cC5fc3VicGxvdHMucG9sYXJ8fFtdO2ZvcihhPTA7YTx2Lmxlbmd0aDthKyspcy5wdXNoKHBbdlthXV0ucmFkaWFsYXhpcyxwW3ZbYV1dLmFuZ3VsYXJheGlzKTtmb3IodmFyIG0gaW4gcC5fY29sb3JBeGVzKXt2YXIgeT1wW21dOyExIT09eS5jYXV0byYmKGRlbGV0ZSB5LmNtaW4sZGVsZXRlIHkuY21heCl9dmFyIHg9ITE7ZnVuY3Rpb24gXyh0KXtpZihyPXVbdF0sbj1yLl9tb2R1bGUsITA9PT1yLnZpc2libGUmJnIudHJhbnNmb3Jtcyl7aWYobiYmbi5jYWxjKXt2YXIgYT1uLmNhbGMoZSxyKTthWzBdJiZhWzBdLnQmJmFbMF0udC5fc2NlbmUmJmRlbGV0ZSBhWzBdLnQuX3NjZW5lLmRpcnR5fWZvcihpPTA7aTxyLnRyYW5zZm9ybXMubGVuZ3RoO2krKyl7dmFyIG89ci50cmFuc2Zvcm1zW2ldOyhuPWJbby50eXBlXSkmJm4uY2FsY1RyYW5zZm9ybSYmKHIuX2hhc0NhbGNUcmFuc2Zvcm09ITAseD0hMCxuLmNhbGNUcmFuc2Zvcm0oZSxyLG8pKX19fWZ1bmN0aW9uIHcodCxhKXtpZihyPXVbdF0sISEobj1yLl9tb2R1bGUpLmlzQ29udGFpbmVyPT09YSl7dmFyIG89W107aWYoITA9PT1yLnZpc2libGUmJjAhPT1yLl9sZW5ndGgpe2RlbGV0ZSByLl9pbmRleFRvUG9pbnRzO3ZhciBsPXIudHJhbnNmb3Jtc3x8W107Zm9yKGk9bC5sZW5ndGgtMTtpPj0wO2ktLSlpZihsW2ldLmVuYWJsZWQpe3IuX2luZGV4VG9Qb2ludHM9bFtpXS5faW5kZXhUb1BvaW50czticmVha31uJiZuLmNhbGMmJihvPW4uY2FsYyhlLHIpKX1BcnJheS5pc0FycmF5KG8pJiZvWzBdfHwobz1be3g6Zix5OmZ9XSksb1swXS50fHwob1swXS50PXt9KSxvWzBdLnRyYWNlPXIsaFt0XT1vfX1mb3IoeihzLHUscCksYT0wO2E8dS5sZW5ndGg7YSsrKXcoYSwhMCk7Zm9yKGE9MDthPHUubGVuZ3RoO2ErKylfKGEpO2Zvcih4JiZ6KHMsdSxwKSxhPTA7YTx1Lmxlbmd0aDthKyspdyhhLCEwKTtmb3IoYT0wO2E8dS5sZW5ndGg7YSsrKXcoYSwhMSk7UihlKTt2YXIgVD1mdW5jdGlvbihlLHQpe3ZhciByLG4sYSxpLGwscz1bXTtmdW5jdGlvbiB1KGUscixuKXt2YXIgYT1yLl9pZC5jaGFyQXQoMCk7aWYoImhpc3RvZ3JhbTJkY29udG91ciI9PT1lKXt2YXIgaT1yLl9jb3VudGVyQXhlc1swXSxvPWQuZ2V0RnJvbUlkKHQsaSksbD0ieCI9PT1hfHwieCI9PT1pJiYiY2F0ZWdvcnkiPT09by50eXBlLHM9InkiPT09YXx8InkiPT09aSYmImNhdGVnb3J5Ij09PW8udHlwZTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtyZXR1cm4gMD09PWV8fDA9PT10fHxsJiZlPT09blt0XS5sZW5ndGgtMXx8cyYmdD09PW4ubGVuZ3RoLTE/LTE6KCJ5Ij09PWE/dDplKS0xfX1yZXR1cm4gZnVuY3Rpb24oZSx0KXtyZXR1cm4ieSI9PT1hP3Q6ZX19dmFyIGY9e21pbjpmdW5jdGlvbihlKXtyZXR1cm4gYy5hZ2dOdW1zKE1hdGgubWluLG51bGwsZSl9LG1heDpmdW5jdGlvbihlKXtyZXR1cm4gYy5hZ2dOdW1zKE1hdGgubWF4LG51bGwsZSl9LHN1bTpmdW5jdGlvbihlKXtyZXR1cm4gYy5hZ2dOdW1zKChmdW5jdGlvbihlLHQpe3JldHVybiBlK3R9KSxudWxsLGUpfSx0b3RhbDpmdW5jdGlvbihlKXtyZXR1cm4gYy5hZ2dOdW1zKChmdW5jdGlvbihlLHQpe3JldHVybiBlK3R9KSxudWxsLGUpfSxtZWFuOmZ1bmN0aW9uKGUpe3JldHVybiBjLm1lYW4oZSl9LG1lZGlhbjpmdW5jdGlvbihlKXtyZXR1cm4gYy5tZWRpYW4oZSl9fTtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgcD1lW3JdO2lmKCJjYXRlZ29yeSI9PT1wLnR5cGUpe3ZhciBoPXAuY2F0ZWdvcnlvcmRlci5tYXRjaChQKTtpZihoKXt2YXIgZz1oWzFdLHY9aFsyXSxtPXAuX2lkLmNoYXJBdCgwKSx5PSJ4Ij09PW0seD1bXTtmb3Iobj0wO248cC5fY2F0ZWdvcmllcy5sZW5ndGg7bisrKXgucHVzaChbcC5fY2F0ZWdvcmllc1tuXSxbXV0pO2ZvcihuPTA7bjxwLl90cmFjZUluZGljZXMubGVuZ3RoO24rKyl7dmFyIGI9cC5fdHJhY2VJbmRpY2VzW25dLF89dC5fZnVsbERhdGFbYl07aWYoITA9PT1fLnZpc2libGUpe3ZhciB3PV8udHlwZTtvLnRyYWNlSXMoXywiaGlzdG9ncmFtIikmJihkZWxldGUgXy5feGF1dG9CaW5GaW5pc2hlZCxkZWxldGUgXy5feWF1dG9CaW5GaW5pc2hlZCk7dmFyIFQ9InNwbG9tIj09PXcsaz0ic2NhdHRlcmdsIj09PXcsTT10LmNhbGNkYXRhW2JdO2ZvcihhPTA7YTxNLmxlbmd0aDthKyspe3ZhciBBLEwsUz1NW2FdO2lmKFQpe3ZhciBDPV8uX2F4ZXNEaW1bcC5faWRdO2lmKCF5KXt2YXIgTz1fLl9kaWFnW0NdWzBdO08mJihwPXQuX2Z1bGxMYXlvdXRbZC5pZDJuYW1lKE8pXSl9dmFyIEQ9Uy50cmFjZS5kaW1lbnNpb25zW0NdLnZhbHVlcztmb3IoaT0wO2k8RC5sZW5ndGg7aSsrKWZvcihBPXAuX2NhdGVnb3JpZXNNYXBbRFtpXV0sbD0wO2w8Uy50cmFjZS5kaW1lbnNpb25zLmxlbmd0aDtsKyspaWYobCE9PUMpe3ZhciB6PVMudHJhY2UuZGltZW5zaW9uc1tsXTt4W0FdWzFdLnB1c2goei52YWx1ZXNbaV0pfX1lbHNlIGlmKGspe2ZvcihpPTA7aTxTLnQueC5sZW5ndGg7aSsrKXk/KEE9Uy50LnhbaV0sTD1TLnQueVtpXSk6KEE9Uy50LnlbaV0sTD1TLnQueFtpXSkseFtBXVsxXS5wdXNoKEwpO1MudCYmUy50Ll9zY2VuZSYmZGVsZXRlIFMudC5fc2NlbmUuZGlydHl9ZWxzZSBpZihTLmhhc093blByb3BlcnR5KCJ6Iikpe0w9Uy56O3ZhciBSPXUoXy50eXBlLHAsTCk7Zm9yKGk9MDtpPEwubGVuZ3RoO2krKylmb3IobD0wO2w8TFtpXS5sZW5ndGg7bCsrKShBPVIobCxpKSkrMSYmeFtBXVsxXS5wdXNoKExbaV1bbF0pfWVsc2UgZm9yKHZvaWQgMD09PShBPVMucCkmJihBPVNbbV0pLHZvaWQgMD09PShMPVMucykmJihMPVMudiksdm9pZCAwPT09TCYmKEw9eT9TLnk6Uy54KSxBcnJheS5pc0FycmF5KEwpfHwoTD12b2lkIDA9PT1MP1tdOltMXSksaT0wO2k8TC5sZW5ndGg7aSsrKXhbQV1bMV0ucHVzaChMW2ldKX19fXAuX2NhdGVnb3JpZXNWYWx1ZT14O3ZhciBFPVtdO2ZvcihuPTA7bjx4Lmxlbmd0aDtuKyspRS5wdXNoKFt4W25dWzBdLGZbZ10oeFtuXVsxXSldKTtFLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbMV0tdFsxXX0pKSxwLl9jYXRlZ29yaWVzQWdncmVnYXRlZFZhbHVlPUUscC5faW5pdGlhbENhdGVnb3JpZXM9RS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlWzBdfSkpLCJkZXNjZW5kaW5nIj09PXYmJnAuX2luaXRpYWxDYXRlZ29yaWVzLnJldmVyc2UoKSxzPXMuY29uY2F0KHAuc29ydEJ5SW5pdGlhbENhdGVnb3JpZXMoKSl9fX1yZXR1cm4gc30ocyxlKTtpZihULmxlbmd0aCl7Zm9yKHAuX251bUJveGVzPTAscC5fbnVtVmlvbGlucz0wLGE9MDthPFQubGVuZ3RoO2ErKyl3KFRbYV0sITApO2ZvcihhPTA7YTxULmxlbmd0aDthKyspdyhUW2FdLCExKTtSKGUpfW8uZ2V0Q29tcG9uZW50TWV0aG9kKCJmeCIsImNhbGMiKShlKSxvLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwiY2FsYyIpKGUpfTt2YXIgUD0vKHRvdGFsfHN1bXxtaW58bWF4fG1lYW58bWVkaWFuKSAoYXNjZW5kaW5nfGRlc2NlbmRpbmcpLztmdW5jdGlvbiB6KGUsdCxyKXt2YXIgbj17fTtmdW5jdGlvbiBhKGUpe2UuY2xlYXJDYWxjKCksIm11bHRpY2F0ZWdvcnkiPT09ZS50eXBlJiZlLnNldHVwTXVsdGlDYXRlZ29yeSh0KSxuW2UuX2lkXT0xfWMuc2ltcGxlTWFwKGUsYSk7Zm9yKHZhciBpPXIuX2F4aXNNYXRjaEdyb3Vwc3x8W10sbz0wO288aS5sZW5ndGg7bysrKWZvcih2YXIgbCBpbiBpW29dKW5bbF18fGEocltkLmlkMm5hbWUobCldKX1mdW5jdGlvbiBSKGUpe3ZhciB0LHIsbixhPWUuX2Z1bGxMYXlvdXQsaT1hLl92aXNpYmxlTW9kdWxlcyxvPXt9O2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspe3ZhciBsPWlbcl0scz1sLmNyb3NzVHJhY2VDYWxjO2lmKHMpe3ZhciB1PWwuYmFzZVBsb3RNb2R1bGUubmFtZTtvW3VdP2MucHVzaFVuaXF1ZShvW3VdLHMpOm9bdV09W3NdfX1mb3IobiBpbiBvKXt2YXIgZj1vW25dLGQ9YS5fc3VicGxvdHNbbl07aWYoQXJyYXkuaXNBcnJheShkKSlmb3IodD0wO3Q8ZC5sZW5ndGg7dCsrKXt2YXIgcD1kW3RdLGg9ImNhcnRlc2lhbiI9PT1uP2EuX3Bsb3RzW3BdOmFbcF07Zm9yKHI9MDtyPGYubGVuZ3RoO3IrKylmW3JdKGUsaCxwKX1lbHNlIGZvcihyPTA7cjxmLmxlbmd0aDtyKyspZltyXShlKX19eC5yZWhvdmVyPWZ1bmN0aW9uKGUpe2UuX2Z1bGxMYXlvdXQuX3JlaG92ZXImJmUuX2Z1bGxMYXlvdXQuX3JlaG92ZXIoKX0seC5yZWRyYWc9ZnVuY3Rpb24oZSl7ZS5fZnVsbExheW91dC5fcmVkcmFnJiZlLl9mdWxsTGF5b3V0Ll9yZWRyYWcoKX0seC5nZW5lcmFsVXBkYXRlUGVyVHJhY2VNb2R1bGU9ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGEsaT10LnRyYWNlSGFzaCxvPXt9O2ZvcihhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBsPXJbYV0scz1sWzBdLnRyYWNlO3MudmlzaWJsZSYmKG9bcy50eXBlXT1vW3MudHlwZV18fFtdLG9bcy50eXBlXS5wdXNoKGwpKX1mb3IodmFyIHUgaW4gaSlpZighb1t1XSl7dmFyIGY9aVt1XVswXTtmWzBdLnRyYWNlLnZpc2libGU9ITEsb1t1XT1bZl19Zm9yKHZhciBkIGluIG8pe3ZhciBwPW9bZF07cFswXVswXS50cmFjZS5fbW9kdWxlLnBsb3QoZSx0LGMuZmlsdGVyVmlzaWJsZShwKSxuKX10LnRyYWNlSGFzaD1vfSx4LnBsb3RCYXNlUGxvdD1mdW5jdGlvbihlLHQscixuLGEpe3ZhciBpPW8uZ2V0TW9kdWxlKGUpLGw9dih0LmNhbGNkYXRhLGkpWzBdO2kucGxvdCh0LGwsbixhKX0seC5jbGVhbkJhc2VQbG90PWZ1bmN0aW9uKGUsdCxyLG4sYSl7dmFyIGk9YS5faGFzJiZhLl9oYXMoZSksbz1yLl9oYXMmJnIuX2hhcyhlKTtpJiYhbyYmYVsiXyIrZSsibGF5ZXIiXS5zZWxlY3RBbGwoImcudHJhY2UiKS5yZW1vdmUoKX19LHsiLi4vY29tcG9uZW50cy9jb2xvciI6NzUsIi4uL2NvbnN0YW50cy9udW1lcmljYWwiOjE4MSwiLi4vbGliIjoyMDIsIi4uL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hIjoyMzYsIi4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjIzNywiLi4vcGxvdHMvZ2V0X2RhdGEiOjI3OCwiLi4vcmVnaXN0cnkiOjI5MCwiLi9hbmltYXRpb25fYXR0cmlidXRlcyI6MjQyLCIuL2F0dHJpYnV0ZXMiOjI0NCwiLi9jYXJ0ZXNpYW4vYXhpc19pZHMiOjI1MSwiLi9jYXJ0ZXNpYW4vaGFuZGxlX291dGxpbmUiOjI1OCwiLi9jb21tYW5kIjoyNzQsIi4vZm9udF9hdHRyaWJ1dGVzIjoyNzYsIi4vZnJhbWVfYXR0cmlidXRlcyI6Mjc3LCIuL2xheW91dF9hdHRyaWJ1dGVzIjoyODAsZDM6OSwiZDMtdGltZS1mb3JtYXQiOjcsImZhc3QtaXNudW1lcmljIjoxMX1dLDI4MzpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi8uLi90cmFjZXMvc2NhdHRlci9hdHRyaWJ1dGVzIiksYT1uLm1hcmtlcixpPWUoIi4uLy4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O1siQXJlYSB0cmFjZXMgYXJlIGRlcHJlY2F0ZWQhIiwiUGxlYXNlIHN3aXRjaCB0byB0aGUgKmJhcnBvbGFyKiB0cmFjZSB0eXBlLiJdLmpvaW4oIiAiKTt0LmV4cG9ydHM9e3I6aSh7fSxuLnIse30pLHQ6aSh7fSxuLnQse30pLG1hcmtlcjp7Y29sb3I6aSh7fSxhLmNvbG9yLHt9KSxzaXplOmkoe30sYS5zaXplLHt9KSxzeW1ib2w6aSh7fSxhLnN5bWJvbCx7fSksb3BhY2l0eTppKHt9LGEub3BhY2l0eSx7fSksZWRpdFR5cGU6ImNhbGMifX19LHsiLi4vLi4vLi4vbGliL2V4dGVuZCI6MTk2LCIuLi8uLi8uLi90cmFjZXMvc2NhdHRlci9hdHRyaWJ1dGVzIjozMzB9XSwyODQ6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIiksYT1lKCIuLi8uLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxpPWUoIi4uLy4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxvPVsiTGVnYWN5IHBvbGFyIGNoYXJ0cyBhcmUgZGVwcmVjYXRlZCEiLCJQbGVhc2Ugc3dpdGNoIHRvICpwb2xhciogc3VicGxvdHMuIl0uam9pbigiICIpLGw9YSh7fSxuLmRvbWFpbix7fSk7ZnVuY3Rpb24gcyhlLHQpe3JldHVybiBhKHt9LHQse3Nob3dsaW5lOnt2YWxUeXBlOiJib29sZWFuIn0sc2hvd3RpY2tsYWJlbHM6e3ZhbFR5cGU6ImJvb2xlYW4ifSx0aWNrb3JpZW50YXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImhvcml6b250YWwiLCJ2ZXJ0aWNhbCJdfSx0aWNrbGVuOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowfSx0aWNrY29sb3I6e3ZhbFR5cGU6ImNvbG9yIn0sdGlja3N1ZmZpeDp7dmFsVHlwZToic3RyaW5nIn0sZW5kcGFkZGluZzp7dmFsVHlwZToibnVtYmVyIixkZXNjcmlwdGlvbjpvfSx2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIn19KX10LmV4cG9ydHM9aSh7cmFkaWFsYXhpczpzKDAse3JhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciJ9LHt2YWxUeXBlOiJudW1iZXIifV19LGRvbWFpbjpsLG9yaWVudGF0aW9uOnt2YWxUeXBlOiJudW1iZXIifX0pLGFuZ3VsYXJheGlzOnMoMCx7cmFuZ2U6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIixkZmx0OjB9LHt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MzYwfV19LGRvbWFpbjpsfSksbGF5b3V0OntkaXJlY3Rpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImNsb2Nrd2lzZSIsImNvdW50ZXJjbG9ja3dpc2UiXX0sb3JpZW50YXRpb246e3ZhbFR5cGU6ImFuZ2xlIn19fSwicGxvdCIsIm5lc3RlZCIpfSx7Ii4uLy4uLy4uL2xpYi9leHRlbmQiOjE5NiwiLi4vLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6MjMwLCIuLi8uLi9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiOjI2Mn1dLDI4NTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjsodC5leHBvcnRzPWUoIi4vbWljcm9wb2xhciIpKS5tYW5hZ2VyPWUoIi4vbWljcm9wb2xhcl9tYW5hZ2VyIil9LHsiLi9taWNyb3BvbGFyIjoyODYsIi4vbWljcm9wb2xhcl9tYW5hZ2VyIjoyODd9XSwyODY6W2Z1bmN0aW9uKGUsdCxyKXt2YXIgbj1lKCJkMyIpLGE9ZSgiLi4vLi4vLi4vbGliIikuZXh0ZW5kRGVlcEFsbCxpPWUoIi4uLy4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5NSURfU0hJRlQsbz10LmV4cG9ydHM9e3ZlcnNpb246IjAuMi4yIn07by5BeGlzPWZ1bmN0aW9uKCl7dmFyIGUsdCxyLGwscz17ZGF0YTpbXSxsYXlvdXQ6e319LGM9e30sdT17fSxmPW4uZGlzcGF0Y2goImhvdmVyIiksZD17fTtyZXR1cm4gZC5yZW5kZXI9ZnVuY3Rpb24oYyl7cmV0dXJuIGZ1bmN0aW9uKGMpe3Q9Y3x8dDt2YXIgZj1zLmRhdGEsZD1zLmxheW91dDsoInN0cmluZyI9PXR5cGVvZiB0fHx0Lm5vZGVOYW1lKSYmKHQ9bi5zZWxlY3QodCkpLHQuZGF0dW0oZikuZWFjaCgoZnVuY3Rpb24odCxzKXt2YXIgYz10LnNsaWNlKCk7dT17ZGF0YTpvLnV0aWwuY2xvbmVKc29uKGMpLGxheW91dDpvLnV0aWwuY2xvbmVKc29uKGQpfTt2YXIgZj0wO2MuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtlLmNvbG9yfHwoZS5jb2xvcj1kLmRlZmF1bHRDb2xvclJhbmdlW2ZdLGY9KGYrMSklZC5kZWZhdWx0Q29sb3JSYW5nZS5sZW5ndGgpLGUuc3Ryb2tlQ29sb3J8fChlLnN0cm9rZUNvbG9yPSJMaW5lUGxvdCI9PT1lLmdlb21ldHJ5P2UuY29sb3I6bi5yZ2IoZS5jb2xvcikuZGFya2VyKCkudG9TdHJpbmcoKSksdS5kYXRhW3RdLmNvbG9yPWUuY29sb3IsdS5kYXRhW3RdLnN0cm9rZUNvbG9yPWUuc3Ryb2tlQ29sb3IsdS5kYXRhW3RdLnN0cm9rZURhc2g9ZS5zdHJva2VEYXNoLHUuZGF0YVt0XS5zdHJva2VTaXplPWUuc3Ryb2tlU2l6ZX0pKTt2YXIgcD1jLmZpbHRlcigoZnVuY3Rpb24oZSx0KXt2YXIgcj1lLnZpc2libGU7cmV0dXJuInVuZGVmaW5lZCI9PXR5cGVvZiByfHwhMD09PXJ9KSksaD0hMSxnPXAubWFwKChmdW5jdGlvbihlLHQpe3JldHVybiBoPWh8fCJ1bmRlZmluZWQiIT10eXBlb2YgZS5ncm91cElkLGV9KSk7aWYoaCl7dmFyIHY9bi5uZXN0KCkua2V5KChmdW5jdGlvbihlLHQpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgZS5ncm91cElkP2UuZ3JvdXBJZDoidW5zdGFja2VkIn0pKS5lbnRyaWVzKGcpLG09W10seT12Lm1hcCgoZnVuY3Rpb24oZSx0KXtpZigidW5zdGFja2VkIj09PWUua2V5KXJldHVybiBlLnZhbHVlczt2YXIgcj1lLnZhbHVlc1swXS5yLm1hcCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gMH0pKTtyZXR1cm4gZS52YWx1ZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSx0LG4pe2UueVN0YWNrPVtyXSxtLnB1c2gocikscj1vLnV0aWwuc3VtQXJyYXlzKGUucixyKX0pKSxlLnZhbHVlc30pKTtwPW4ubWVyZ2UoeSl9cC5mb3JFYWNoKChmdW5jdGlvbihlLHQpe2UudD1BcnJheS5pc0FycmF5KGUudFswXSk/ZS50OltlLnRdLGUucj1BcnJheS5pc0FycmF5KGUuclswXSk/ZS5yOltlLnJdfSkpO3ZhciB4PU1hdGgubWluKGQud2lkdGgtZC5tYXJnaW4ubGVmdC1kLm1hcmdpbi5yaWdodCxkLmhlaWdodC1kLm1hcmdpbi50b3AtZC5tYXJnaW4uYm90dG9tKS8yO3g9TWF0aC5tYXgoMTAseCk7dmFyIGIsXz1bZC5tYXJnaW4ubGVmdCt4LGQubWFyZ2luLnRvcCt4XTtoP2I9WzAsbi5tYXgoby51dGlsLnN1bUFycmF5cyhvLnV0aWwuYXJyYXlMYXN0KHApLnJbMF0sby51dGlsLmFycmF5TGFzdChtKSkpXTpiPW4uZXh0ZW50KG8udXRpbC5mbGF0dGVuQXJyYXkocC5tYXAoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUucn0pKSkpO2QucmFkaWFsQXhpcy5kb21haW4hPW8uREFUQUVYVEVOVCYmKGJbMF09MCkscj1uLnNjYWxlLmxpbmVhcigpLmRvbWFpbihkLnJhZGlhbEF4aXMuZG9tYWluIT1vLkRBVEFFWFRFTlQmJmQucmFkaWFsQXhpcy5kb21haW4/ZC5yYWRpYWxBeGlzLmRvbWFpbjpiKS5yYW5nZShbMCx4XSksdS5sYXlvdXQucmFkaWFsQXhpcy5kb21haW49ci5kb21haW4oKTt2YXIgdyxUPW8udXRpbC5mbGF0dGVuQXJyYXkocC5tYXAoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudH0pKSksaz0ic3RyaW5nIj09dHlwZW9mIFRbMF07ayYmKFQ9by51dGlsLmRlZHVwbGljYXRlKFQpLHc9VC5zbGljZSgpLFQ9bi5yYW5nZShULmxlbmd0aCkscD1wLm1hcCgoZnVuY3Rpb24oZSx0KXt2YXIgcj1lO3JldHVybiBlLnQ9W1RdLGgmJihyLnlTdGFjaz1lLnlTdGFjaykscn0pKSk7dmFyIE09cC5maWx0ZXIoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIkxpbmVQbG90Ij09PWUuZ2VvbWV0cnl8fCJEb3RQbG90Ij09PWUuZ2VvbWV0cnl9KSkubGVuZ3RoPT09cC5sZW5ndGgsQT1udWxsPT09ZC5uZWVkc0VuZFNwYWNpbmc/a3x8IU06ZC5uZWVkc0VuZFNwYWNpbmcsTD1kLmFuZ3VsYXJBeGlzLmRvbWFpbiYmZC5hbmd1bGFyQXhpcy5kb21haW4hPW8uREFUQUVYVEVOVCYmIWsmJmQuYW5ndWxhckF4aXMuZG9tYWluWzBdPj0wP2QuYW5ndWxhckF4aXMuZG9tYWluOm4uZXh0ZW50KFQpLFM9TWF0aC5hYnMoVFsxXS1UWzBdKTtNJiYhayYmKFM9MCk7dmFyIEM9TC5zbGljZSgpO0EmJmsmJihDWzFdKz1TKTt2YXIgTz1kLmFuZ3VsYXJBeGlzLnRpY2tzQ291bnR8fDQ7Tz44JiYoTz1PLyhPLzgpK08lOCksZC5hbmd1bGFyQXhpcy50aWNrc1N0ZXAmJihPPShDWzFdLUNbMF0pL08pO3ZhciBEPWQuYW5ndWxhckF4aXMudGlja3NTdGVwfHwoQ1sxXS1DWzBdKS8oTyooZC5taW5vclRpY2tzKzEpKTt3JiYoRD1NYXRoLm1heChNYXRoLnJvdW5kKEQpLDEpKSxDWzJdfHwoQ1syXT1EKTt2YXIgUD1uLnJhbmdlLmFwcGx5KHRoaXMsQyk7aWYoUD1QLm1hcCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gcGFyc2VGbG9hdChlLnRvUHJlY2lzaW9uKDEyKSl9KSksbD1uLnNjYWxlLmxpbmVhcigpLmRvbWFpbihDLnNsaWNlKDAsMikpLnJhbmdlKCJjbG9ja3dpc2UiPT09ZC5kaXJlY3Rpb24/WzAsMzYwXTpbMzYwLDBdKSx1LmxheW91dC5hbmd1bGFyQXhpcy5kb21haW49bC5kb21haW4oKSx1LmxheW91dC5hbmd1bGFyQXhpcy5lbmRQYWRkaW5nPUE/UzowLCJ1bmRlZmluZWQiPT10eXBlb2YoZT1uLnNlbGVjdCh0aGlzKS5zZWxlY3QoInN2Zy5jaGFydC1yb290IikpfHxlLmVtcHR5KCkpe3ZhciB6PShuZXcgRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoIjxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyBjbGFzcz0nY2hhcnQtcm9vdCc+JyArICc8ZyBjbGFzcz0nb3V0ZXItZ3JvdXAnPicgKyAnPGcgY2xhc3M9J2NoYXJ0LWdyb3VwJz4nICsgJzxjaXJjbGUgY2xhc3M9J2JhY2tncm91bmQtY2lyY2xlJz48L2NpcmNsZT4nICsgJzxnIGNsYXNzPSdnZW9tZXRyeS1ncm91cCc+PC9nPicgKyAnPGcgY2xhc3M9J3JhZGlhbCBheGlzLWdyb3VwJz4nICsgJzxjaXJjbGUgY2xhc3M9J291dHNpZGUtY2lyY2xlJz48L2NpcmNsZT4nICsgJzwvZz4nICsgJzxnIGNsYXNzPSdhbmd1bGFyIGF4aXMtZ3JvdXAnPjwvZz4nICsgJzxnIGNsYXNzPSdndWlkZXMtZ3JvdXAnPjxsaW5lPjwvbGluZT48Y2lyY2xlIHI9JzAnPjwvY2lyY2xlPjwvZz4nICsgJzwvZz4nICsgJzxnIGNsYXNzPSdsZWdlbmQtZ3JvdXAnPjwvZz4nICsgJzxnIGNsYXNzPSd0b29sdGlwcy1ncm91cCc+PC9nPicgKyAnPGcgY2xhc3M9J3RpdGxlLWdyb3VwJz48dGV4dD48L3RleHQ+PC9nPicgKyAnPC9nPicgKyAnPC9zdmc+IiwiYXBwbGljYXRpb24veG1sIiksUj10aGlzLmFwcGVuZENoaWxkKHRoaXMub3duZXJEb2N1bWVudC5pbXBvcnROb2RlKHouZG9jdW1lbnRFbGVtZW50LCEwKSk7ZT1uLnNlbGVjdChSKX1lLnNlbGVjdCgiLmd1aWRlcy1ncm91cCIpLnN0eWxlKHsicG9pbnRlci1ldmVudHMiOiJub25lIn0pLGUuc2VsZWN0KCIuYW5ndWxhci5heGlzLWdyb3VwIikuc3R5bGUoeyJwb2ludGVyLWV2ZW50cyI6Im5vbmUifSksZS5zZWxlY3QoIi5yYWRpYWwuYXhpcy1ncm91cCIpLnN0eWxlKHsicG9pbnRlci1ldmVudHMiOiJub25lIn0pO3ZhciBFLEk9ZS5zZWxlY3QoIi5jaGFydC1ncm91cCIpLEY9e2ZpbGw6Im5vbmUiLHN0cm9rZTpkLnRpY2tDb2xvcn0sTj17ImZvbnQtc2l6ZSI6ZC5mb250LnNpemUsImZvbnQtZmFtaWx5IjpkLmZvbnQuZmFtaWx5LGZpbGw6ZC5mb250LmNvbG9yLCJ0ZXh0LXNoYWRvdyI6WyItMXB4IDBweCIsIjFweCAtMXB4IiwiLTFweCAxcHgiLCIxcHggMXB4Il0ubWFwKChmdW5jdGlvbihlLHQpe3JldHVybiIgIitlKyIgMCAiK2QuZm9udC5vdXRsaW5lQ29sb3J9KSkuam9pbigiLCIpfTtpZihkLnNob3dMZWdlbmQpe0U9ZS5zZWxlY3QoIi5sZWdlbmQtZ3JvdXAiKS5hdHRyKHt0cmFuc2Zvcm06InRyYW5zbGF0ZSgiK1t4LGQubWFyZ2luLnRvcF0rIikifSkuc3R5bGUoe2Rpc3BsYXk6ImJsb2NrIn0pO3ZhciBIPXAubWFwKChmdW5jdGlvbihlLHQpe3ZhciByPW8udXRpbC5jbG9uZUpzb24oZSk7cmV0dXJuIHIuc3ltYm9sPSJEb3RQbG90Ij09PWUuZ2VvbWV0cnk/ZS5kb3RUeXBlfHwiY2lyY2xlIjoiTGluZVBsb3QiIT1lLmdlb21ldHJ5PyJzcXVhcmUiOiJsaW5lIixyLnZpc2libGVJbkxlZ2VuZD0idW5kZWZpbmVkIj09dHlwZW9mIGUudmlzaWJsZUluTGVnZW5kfHxlLnZpc2libGVJbkxlZ2VuZCxyLmNvbG9yPSJMaW5lUGxvdCI9PT1lLmdlb21ldHJ5P2Uuc3Ryb2tlQ29sb3I6ZS5jb2xvcixyfSkpO28uTGVnZW5kKCkuY29uZmlnKHtkYXRhOnAubWFwKChmdW5jdGlvbihlLHQpe3JldHVybiBlLm5hbWV8fCJFbGVtZW50Iit0fSkpLGxlZ2VuZENvbmZpZzphKHt9LG8uTGVnZW5kLmRlZmF1bHRDb25maWcoKS5sZWdlbmRDb25maWcse2NvbnRhaW5lcjpFLGVsZW1lbnRzOkgscmV2ZXJzZU9yZGVyOmQubGVnZW5kLnJldmVyc2VPcmRlcn0pfSkoKTt2YXIgaj1FLm5vZGUoKS5nZXRCQm94KCk7eD1NYXRoLm1pbihkLndpZHRoLWoud2lkdGgtZC5tYXJnaW4ubGVmdC1kLm1hcmdpbi5yaWdodCxkLmhlaWdodC1kLm1hcmdpbi50b3AtZC5tYXJnaW4uYm90dG9tKS8yLHg9TWF0aC5tYXgoMTAseCksXz1bZC5tYXJnaW4ubGVmdCt4LGQubWFyZ2luLnRvcCt4XSxyLnJhbmdlKFswLHhdKSx1LmxheW91dC5yYWRpYWxBeGlzLmRvbWFpbj1yLmRvbWFpbigpLEUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrW19bMF0reCxfWzFdLXhdKyIpIil9ZWxzZSBFPWUuc2VsZWN0KCIubGVnZW5kLWdyb3VwIikuc3R5bGUoe2Rpc3BsYXk6Im5vbmUifSk7ZS5hdHRyKHt3aWR0aDpkLndpZHRoLGhlaWdodDpkLmhlaWdodH0pLnN0eWxlKHtvcGFjaXR5OmQub3BhY2l0eX0pLEkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrXysiKSIpLnN0eWxlKHtjdXJzb3I6ImNyb3NzaGFpciJ9KTt2YXIgQj1bKGQud2lkdGgtKGQubWFyZ2luLmxlZnQrZC5tYXJnaW4ucmlnaHQrMip4KyhqP2oud2lkdGg6MCkpKS8yLChkLmhlaWdodC0oZC5tYXJnaW4udG9wK2QubWFyZ2luLmJvdHRvbSsyKngpKS8yXTtpZihCWzBdPU1hdGgubWF4KDAsQlswXSksQlsxXT1NYXRoLm1heCgwLEJbMV0pLGUuc2VsZWN0KCIub3V0ZXItZ3JvdXAiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitCKyIpIiksZC50aXRsZSYmZC50aXRsZS50ZXh0KXt2YXIgVj1lLnNlbGVjdCgiZy50aXRsZS1ncm91cCB0ZXh0Iikuc3R5bGUoTikudGV4dChkLnRpdGxlLnRleHQpLFU9Vi5ub2RlKCkuZ2V0QkJveCgpO1YuYXR0cih7eDpfWzBdLVUud2lkdGgvMix5Ol9bMV0teC0yMH0pfXZhciBxPWUuc2VsZWN0KCIucmFkaWFsLmF4aXMtZ3JvdXAiKTtpZihkLnJhZGlhbEF4aXMuZ3JpZExpbmVzVmlzaWJsZSl7dmFyIEc9cS5zZWxlY3RBbGwoImNpcmNsZS5ncmlkLWNpcmNsZSIpLmRhdGEoci50aWNrcyg1KSk7Ry5lbnRlcigpLmFwcGVuZCgiY2lyY2xlIikuYXR0cih7Y2xhc3M6ImdyaWQtY2lyY2xlIn0pLnN0eWxlKEYpLEcuYXR0cigiciIsciksRy5leGl0KCkucmVtb3ZlKCl9cS5zZWxlY3QoImNpcmNsZS5vdXRzaWRlLWNpcmNsZSIpLmF0dHIoe3I6eH0pLnN0eWxlKEYpO3ZhciBaPWUuc2VsZWN0KCJjaXJjbGUuYmFja2dyb3VuZC1jaXJjbGUiKS5hdHRyKHtyOnh9KS5zdHlsZSh7ZmlsbDpkLmJhY2tncm91bmRDb2xvcixzdHJva2U6ZC5zdHJva2V9KTtmdW5jdGlvbiBZKGUsdCl7cmV0dXJuIGwoZSklMzYwK2Qub3JpZW50YXRpb259aWYoZC5yYWRpYWxBeGlzLnZpc2libGUpe3ZhciBYPW4uc3ZnLmF4aXMoKS5zY2FsZShyKS50aWNrcyg1KS50aWNrU2l6ZSg1KTtxLmNhbGwoWCkuYXR0cih7dHJhbnNmb3JtOiJyb3RhdGUoIitkLnJhZGlhbEF4aXMub3JpZW50YXRpb24rIikifSkscS5zZWxlY3RBbGwoIi5kb21haW4iKS5zdHlsZShGKSxxLnNlbGVjdEFsbCgiZz50ZXh0IikudGV4dCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy50ZXh0Q29udGVudCtkLnJhZGlhbEF4aXMudGlja3NTdWZmaXh9KSkuc3R5bGUoTikuc3R5bGUoeyJ0ZXh0LWFuY2hvciI6InN0YXJ0In0pLmF0dHIoe3g6MCx5OjAsZHg6MCxkeTowLHRyYW5zZm9ybTpmdW5jdGlvbihlLHQpe3JldHVybiJob3Jpem9udGFsIj09PWQucmFkaWFsQXhpcy50aWNrT3JpZW50YXRpb24/InJvdGF0ZSgiKy1kLnJhZGlhbEF4aXMub3JpZW50YXRpb24rIikgdHJhbnNsYXRlKCIrWzAsTlsiZm9udC1zaXplIl1dKyIpIjoidHJhbnNsYXRlKCIrWzAsTlsiZm9udC1zaXplIl1dKyIpIn19KSxxLnNlbGVjdEFsbCgiZz5saW5lIikuc3R5bGUoe3N0cm9rZToiYmxhY2sifSl9dmFyIFc9ZS5zZWxlY3QoIi5hbmd1bGFyLmF4aXMtZ3JvdXAiKS5zZWxlY3RBbGwoImcuYW5ndWxhci10aWNrIikuZGF0YShQKSxRPVcuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJhbmd1bGFyLXRpY2siLCEwKTtXLmF0dHIoe3RyYW5zZm9ybTpmdW5jdGlvbihlLHQpe3JldHVybiJyb3RhdGUoIitZKGUpKyIpIn19KS5zdHlsZSh7ZGlzcGxheTpkLmFuZ3VsYXJBeGlzLnZpc2libGU/ImJsb2NrIjoibm9uZSJ9KSxXLmV4aXQoKS5yZW1vdmUoKSxRLmFwcGVuZCgibGluZSIpLmNsYXNzZWQoImdyaWQtbGluZSIsITApLmNsYXNzZWQoIm1ham9yIiwoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdCUoZC5taW5vclRpY2tzKzEpPT0wfSkpLmNsYXNzZWQoIm1pbm9yIiwoZnVuY3Rpb24oZSx0KXtyZXR1cm4hKHQlKGQubWlub3JUaWNrcysxKT09MCl9KSkuc3R5bGUoRiksUS5zZWxlY3RBbGwoIi5taW5vciIpLnN0eWxlKHtzdHJva2U6ZC5taW5vclRpY2tDb2xvcn0pLFcuc2VsZWN0KCJsaW5lLmdyaWQtbGluZSIpLmF0dHIoe3gxOmQudGlja0xlbmd0aD94LWQudGlja0xlbmd0aDowLHgyOnh9KS5zdHlsZSh7ZGlzcGxheTpkLmFuZ3VsYXJBeGlzLmdyaWRMaW5lc1Zpc2libGU/ImJsb2NrIjoibm9uZSJ9KSxRLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoImF4aXMtdGV4dCIsITApLnN0eWxlKE4pO3ZhciBKPVcuc2VsZWN0KCJ0ZXh0LmF4aXMtdGV4dCIpLmF0dHIoe3g6eCtkLmxhYmVsT2Zmc2V0LGR5OmkrImVtIix0cmFuc2Zvcm06ZnVuY3Rpb24oZSx0KXt2YXIgcj1ZKGUpLG49eCtkLmxhYmVsT2Zmc2V0LGE9ZC5hbmd1bGFyQXhpcy50aWNrT3JpZW50YXRpb247cmV0dXJuImhvcml6b250YWwiPT1hPyJyb3RhdGUoIistcisiICIrbisiIDApIjoicmFkaWFsIj09YT9yPDI3MCYmcj45MD8icm90YXRlKDE4MCAiK24rIiAwKSI6bnVsbDoicm90YXRlKCIrKHI8PTE4MCYmcj4wPy05MDo5MCkrIiAiK24rIiAwKSJ9fSkuc3R5bGUoeyJ0ZXh0LWFuY2hvciI6Im1pZGRsZSIsZGlzcGxheTpkLmFuZ3VsYXJBeGlzLmxhYmVsc1Zpc2libGU/ImJsb2NrIjoibm9uZSJ9KS50ZXh0KChmdW5jdGlvbihlLHQpe3JldHVybiB0JShkLm1pbm9yVGlja3MrMSkhPTA/IiI6dz93W2VdK2QuYW5ndWxhckF4aXMudGlja3NTdWZmaXg6ZStkLmFuZ3VsYXJBeGlzLnRpY2tzU3VmZml4fSkpLnN0eWxlKE4pO2QuYW5ndWxhckF4aXMucmV3cml0ZVRpY2tzJiZKLnRleHQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQlKGQubWlub3JUaWNrcysxKSE9MD8iIjpkLmFuZ3VsYXJBeGlzLnJld3JpdGVUaWNrcyh0aGlzLnRleHRDb250ZW50LHQpfSkpO3ZhciAkPW4ubWF4KEkuc2VsZWN0QWxsKCIuYW5ndWxhci10aWNrIHRleHQiKVswXS5tYXAoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZ2V0Q1RNKCkuZStlLmdldEJCb3goKS53aWR0aH0pKSk7RS5hdHRyKHt0cmFuc2Zvcm06InRyYW5zbGF0ZSgiK1t4KyQsZC5tYXJnaW4udG9wXSsiKSJ9KTt2YXIgSz1lLnNlbGVjdCgiZy5nZW9tZXRyeS1ncm91cCIpLnNlbGVjdEFsbCgiZyIpLnNpemUoKT4wLGVlPWUuc2VsZWN0KCJnLmdlb21ldHJ5LWdyb3VwIikuc2VsZWN0QWxsKCJnLmdlb21ldHJ5IikuZGF0YShwKTtpZihlZS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoe2NsYXNzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuImdlb21ldHJ5IGdlb21ldHJ5Iit0fX0pLGVlLmV4aXQoKS5yZW1vdmUoKSxwWzBdfHxLKXt2YXIgdGU9W107cC5mb3JFYWNoKChmdW5jdGlvbihlLHQpe3ZhciBuPXt9O24ucmFkaWFsU2NhbGU9cixuLmFuZ3VsYXJTY2FsZT1sLG4uY29udGFpbmVyPWVlLmZpbHRlcigoZnVuY3Rpb24oZSxyKXtyZXR1cm4gcj09dH0pKSxuLmdlb21ldHJ5PWUuZ2VvbWV0cnksbi5vcmllbnRhdGlvbj1kLm9yaWVudGF0aW9uLG4uZGlyZWN0aW9uPWQuZGlyZWN0aW9uLG4uaW5kZXg9dCx0ZS5wdXNoKHtkYXRhOmUsZ2VvbWV0cnlDb25maWc6bn0pfSkpO3ZhciByZT1uLm5lc3QoKS5rZXkoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBlLmRhdGEuZ3JvdXBJZHx8InVuc3RhY2tlZCJ9KSkuZW50cmllcyh0ZSksbmU9W107cmUuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXsidW5zdGFja2VkIj09PWUua2V5P25lPW5lLmNvbmNhdChlLnZhbHVlcy5tYXAoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuW2VdfSkpKTpuZS5wdXNoKGUudmFsdWVzKX0pKSxuZS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe3ZhciByO3I9QXJyYXkuaXNBcnJheShlKT9lWzBdLmdlb21ldHJ5Q29uZmlnLmdlb21ldHJ5OmUuZ2VvbWV0cnlDb25maWcuZ2VvbWV0cnk7dmFyIG49ZS5tYXAoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEob1tyXS5kZWZhdWx0Q29uZmlnKCksZSl9KSk7b1tyXSgpLmNvbmZpZyhuKSgpfSkpfXZhciBhZSxpZSxvZT1lLnNlbGVjdCgiLmd1aWRlcy1ncm91cCIpLGxlPWUuc2VsZWN0KCIudG9vbHRpcHMtZ3JvdXAiKSxzZT1vLnRvb2x0aXBQYW5lbCgpLmNvbmZpZyh7Y29udGFpbmVyOmxlLGZvbnRTaXplOjh9KSgpLGNlPW8udG9vbHRpcFBhbmVsKCkuY29uZmlnKHtjb250YWluZXI6bGUsZm9udFNpemU6OH0pKCksdWU9by50b29sdGlwUGFuZWwoKS5jb25maWcoe2NvbnRhaW5lcjpsZSxoYXNUaWNrOiEwfSkoKTtpZighayl7dmFyIGZlPW9lLnNlbGVjdCgibGluZSIpLmF0dHIoe3gxOjAseTE6MCx5MjowfSkuc3R5bGUoe3N0cm9rZToiZ3JleSIsInBvaW50ZXItZXZlbnRzIjoibm9uZSJ9KTtJLm9uKCJtb3VzZW1vdmUuYW5ndWxhci1ndWlkZSIsKGZ1bmN0aW9uKGUsdCl7dmFyIHI9by51dGlsLmdldE1vdXNlUG9zKFopLmFuZ2xlO2ZlLmF0dHIoe3gyOi14LHRyYW5zZm9ybToicm90YXRlKCIrcisiKSJ9KS5zdHlsZSh7b3BhY2l0eTouNX0pO3ZhciBuPShyKzE4MCszNjAtZC5vcmllbnRhdGlvbiklMzYwO2FlPWwuaW52ZXJ0KG4pO3ZhciBhPW8udXRpbC5jb252ZXJ0VG9DYXJ0ZXNpYW4oeCsxMixyKzE4MCk7c2UudGV4dChvLnV0aWwucm91bmQoYWUpKS5tb3ZlKFthWzBdK19bMF0sYVsxXStfWzFdXSl9KSkub24oIm1vdXNlb3V0LmFuZ3VsYXItZ3VpZGUiLChmdW5jdGlvbihlLHQpe29lLnNlbGVjdCgibGluZSIpLnN0eWxlKHtvcGFjaXR5OjB9KX0pKX12YXIgZGU9b2Uuc2VsZWN0KCJjaXJjbGUiKS5zdHlsZSh7c3Ryb2tlOiJncmV5IixmaWxsOiJub25lIn0pO0kub24oIm1vdXNlbW92ZS5yYWRpYWwtZ3VpZGUiLChmdW5jdGlvbihlLHQpe3ZhciBuPW8udXRpbC5nZXRNb3VzZVBvcyhaKS5yYWRpdXM7ZGUuYXR0cih7cjpufSkuc3R5bGUoe29wYWNpdHk6LjV9KSxpZT1yLmludmVydChvLnV0aWwuZ2V0TW91c2VQb3MoWikucmFkaXVzKTt2YXIgYT1vLnV0aWwuY29udmVydFRvQ2FydGVzaWFuKG4sZC5yYWRpYWxBeGlzLm9yaWVudGF0aW9uKTtjZS50ZXh0KG8udXRpbC5yb3VuZChpZSkpLm1vdmUoW2FbMF0rX1swXSxhWzFdK19bMV1dKX0pKS5vbigibW91c2VvdXQucmFkaWFsLWd1aWRlIiwoZnVuY3Rpb24oZSx0KXtkZS5zdHlsZSh7b3BhY2l0eTowfSksdWUuaGlkZSgpLHNlLmhpZGUoKSxjZS5oaWRlKCl9KSksZS5zZWxlY3RBbGwoIi5nZW9tZXRyeS1ncm91cCAubWFyayIpLm9uKCJtb3VzZW92ZXIudG9vbHRpcCIsKGZ1bmN0aW9uKHQscil7dmFyIGE9bi5zZWxlY3QodGhpcyksaT10aGlzLnN0eWxlLmZpbGwsbD0iYmxhY2siLHM9dGhpcy5zdHlsZS5vcGFjaXR5fHwxO2lmKGEuYXR0cih7ImRhdGEtb3BhY2l0eSI6c30pLGkmJiJub25lIiE9PWkpe2EuYXR0cih7ImRhdGEtZmlsbCI6aX0pLGw9bi5oc2woaSkuZGFya2VyKCkudG9TdHJpbmcoKSxhLnN0eWxlKHtmaWxsOmwsb3BhY2l0eToxfSk7dmFyIGM9e3Q6by51dGlsLnJvdW5kKHRbMF0pLHI6by51dGlsLnJvdW5kKHRbMV0pfTtrJiYoYy50PXdbdFswXV0pO3ZhciB1PSJ0OiAiK2MudCsiLCByOiAiK2MucixmPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZD1lLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxwPVtmLmxlZnQrZi53aWR0aC8yLUJbMF0tZC5sZWZ0LGYudG9wK2YuaGVpZ2h0LzItQlsxXS1kLnRvcF07dWUuY29uZmlnKHtjb2xvcjpsfSkudGV4dCh1KSx1ZS5tb3ZlKHApfWVsc2UgaT10aGlzLnN0eWxlLnN0cm9rZXx8ImJsYWNrIixhLmF0dHIoeyJkYXRhLXN0cm9rZSI6aX0pLGw9bi5oc2woaSkuZGFya2VyKCkudG9TdHJpbmcoKSxhLnN0eWxlKHtzdHJva2U6bCxvcGFjaXR5OjF9KX0pKS5vbigibW91c2Vtb3ZlLnRvb2x0aXAiLChmdW5jdGlvbihlLHQpe2lmKDAhPW4uZXZlbnQud2hpY2gpcmV0dXJuITE7bi5zZWxlY3QodGhpcykuYXR0cigiZGF0YS1maWxsIikmJnVlLnNob3coKX0pKS5vbigibW91c2VvdXQudG9vbHRpcCIsKGZ1bmN0aW9uKGUsdCl7dWUuaGlkZSgpO3ZhciByPW4uc2VsZWN0KHRoaXMpLGE9ci5hdHRyKCJkYXRhLWZpbGwiKTthP3Iuc3R5bGUoe2ZpbGw6YSxvcGFjaXR5OnIuYXR0cigiZGF0YS1vcGFjaXR5Iil9KTpyLnN0eWxlKHtzdHJva2U6ci5hdHRyKCJkYXRhLXN0cm9rZSIpLG9wYWNpdHk6ci5hdHRyKCJkYXRhLW9wYWNpdHkiKX0pfSkpfSkpfShjKSx0aGlzfSxkLmNvbmZpZz1mdW5jdGlvbihlKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gczt2YXIgdD1vLnV0aWwuY2xvbmVKc29uKGUpO3JldHVybiB0LmRhdGEuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtzLmRhdGFbdF18fChzLmRhdGFbdF09e30pLGEocy5kYXRhW3RdLG8uQXhpcy5kZWZhdWx0Q29uZmlnKCkuZGF0YVswXSksYShzLmRhdGFbdF0sZSl9KSksYShzLmxheW91dCxvLkF4aXMuZGVmYXVsdENvbmZpZygpLmxheW91dCksYShzLmxheW91dCx0LmxheW91dCksdGhpc30sZC5nZXRMaXZlQ29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJuIHV9LGQuZ2V0aW5wdXRDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm4gY30sZC5yYWRpYWxTY2FsZT1mdW5jdGlvbihlKXtyZXR1cm4gcn0sZC5hbmd1bGFyU2NhbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGx9LGQuc3ZnPWZ1bmN0aW9uKCl7cmV0dXJuIGV9LG4ucmViaW5kKGQsZiwib24iKSxkfSxvLkF4aXMuZGVmYXVsdENvbmZpZz1mdW5jdGlvbihlLHQpe3JldHVybntkYXRhOlt7dDpbMSwyLDMsNF0scjpbMTAsMTEsMTIsMTNdLG5hbWU6IkxpbmUxIixnZW9tZXRyeToiTGluZVBsb3QiLGNvbG9yOm51bGwsc3Ryb2tlRGFzaDoic29saWQiLHN0cm9rZUNvbG9yOm51bGwsc3Ryb2tlU2l6ZToiMSIsdmlzaWJsZUluTGVnZW5kOiEwLG9wYWNpdHk6MX1dLGxheW91dDp7ZGVmYXVsdENvbG9yUmFuZ2U6bi5zY2FsZS5jYXRlZ29yeTEwKCkucmFuZ2UoKSx0aXRsZTpudWxsLGhlaWdodDo0NTAsd2lkdGg6NTAwLG1hcmdpbjp7dG9wOjQwLHJpZ2h0OjQwLGJvdHRvbTo0MCxsZWZ0OjQwfSxmb250OntzaXplOjEyLGNvbG9yOiJncmF5IixvdXRsaW5lQ29sb3I6IndoaXRlIixmYW1pbHk6IlRhaG9tYSwgc2Fucy1zZXJpZiJ9LGRpcmVjdGlvbjoiY2xvY2t3aXNlIixvcmllbnRhdGlvbjowLGxhYmVsT2Zmc2V0OjEwLHJhZGlhbEF4aXM6e2RvbWFpbjpudWxsLG9yaWVudGF0aW9uOi00NSx0aWNrc1N1ZmZpeDoiIix2aXNpYmxlOiEwLGdyaWRMaW5lc1Zpc2libGU6ITAsdGlja09yaWVudGF0aW9uOiJob3Jpem9udGFsIixyZXdyaXRlVGlja3M6bnVsbH0sYW5ndWxhckF4aXM6e2RvbWFpbjpbMCwzNjBdLHRpY2tzU3VmZml4OiIiLHZpc2libGU6ITAsZ3JpZExpbmVzVmlzaWJsZTohMCxsYWJlbHNWaXNpYmxlOiEwLHRpY2tPcmllbnRhdGlvbjoiaG9yaXpvbnRhbCIscmV3cml0ZVRpY2tzOm51bGwsdGlja3NDb3VudDpudWxsLHRpY2tzU3RlcDpudWxsfSxtaW5vclRpY2tzOjAsdGlja0xlbmd0aDpudWxsLHRpY2tDb2xvcjoic2lsdmVyIixtaW5vclRpY2tDb2xvcjoiI2VlZSIsYmFja2dyb3VuZENvbG9yOiJub25lIixuZWVkc0VuZFNwYWNpbmc6bnVsbCxzaG93TGVnZW5kOiEwLGxlZ2VuZDp7cmV2ZXJzZU9yZGVyOiExfSxvcGFjaXR5OjF9fX0sby51dGlsPXt9LG8uREFUQUVYVEVOVD0iZGF0YUV4dGVudCIsby5BUkVBPSJBcmVhQ2hhcnQiLG8uTElORT0iTGluZVBsb3QiLG8uRE9UPSJEb3RQbG90IixvLkJBUj0iQmFyQ2hhcnQiLG8udXRpbC5fb3ZlcnJpZGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIgaW4gZSlyIGluIHQmJih0W3JdPWVbcl0pfSxvLnV0aWwuX2V4dGVuZD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgciBpbiBlKXRbcl09ZVtyXX0sby51dGlsLl9ybmRTbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gMipNYXRoLnJhbmRvbSgpLTErKDIqTWF0aC5yYW5kb20oKS0xKSsoMipNYXRoLnJhbmRvbSgpLTEpfSxvLnV0aWwuZGF0YUZyb21FcXVhdGlvbjI9ZnVuY3Rpb24oZSx0KXt2YXIgcj10fHw2O3JldHVybiBuLnJhbmdlKDAsMzYwK3IscikubWFwKChmdW5jdGlvbih0LHIpe3ZhciBuPXQqTWF0aC5QSS8xODA7cmV0dXJuW3QsZShuKV19KSl9LG8udXRpbC5kYXRhRnJvbUVxdWF0aW9uPWZ1bmN0aW9uKGUsdCxyKXt2YXIgYT10fHw2LGk9W10sbz1bXTtuLnJhbmdlKDAsMzYwK2EsYSkuZm9yRWFjaCgoZnVuY3Rpb24odCxyKXt2YXIgbj10Kk1hdGguUEkvMTgwLGE9ZShuKTtpLnB1c2godCksby5wdXNoKGEpfSkpO3ZhciBsPXt0OmkscjpvfTtyZXR1cm4gciYmKGwubmFtZT1yKSxsfSxvLnV0aWwuZW5zdXJlQXJyYXk9ZnVuY3Rpb24oZSx0KXtpZigidW5kZWZpbmVkIj09dHlwZW9mIGUpcmV0dXJuIG51bGw7dmFyIHI9W10uY29uY2F0KGUpO3JldHVybiBuLnJhbmdlKHQpLm1hcCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gclt0XXx8clswXX0pKX0sby51dGlsLmZpbGxBcnJheXM9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQsbil7ZVt0XT1vLnV0aWwuZW5zdXJlQXJyYXkoZVt0XSxyKX0pKSxlfSxvLnV0aWwuY2xvbmVKc29uPWZ1bmN0aW9uKGUpe3JldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGUpKX0sby51dGlsLnZhbGlkYXRlS2V5cz1mdW5jdGlvbihlLHQpeyJzdHJpbmciPT10eXBlb2YgdCYmKHQ9dC5zcGxpdCgiLiIpKTt2YXIgcj10LnNoaWZ0KCk7cmV0dXJuIGVbcl0mJighdC5sZW5ndGh8fG9iakhhc0tleXMoZVtyXSx0KSl9LG8udXRpbC5zdW1BcnJheXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi56aXAoZSx0KS5tYXAoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4uc3VtKGUpfSkpfSxvLnV0aWwuYXJyYXlMYXN0PWZ1bmN0aW9uKGUpe3JldHVybiBlW2UubGVuZ3RoLTFdfSxvLnV0aWwuYXJyYXlFcXVhbD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1NYXRoLm1heChlLmxlbmd0aCx0Lmxlbmd0aCwxKTtyLS0gPj0wJiZlW3JdPT09dFtyXTspO3JldHVybi0yPT09cn0sby51dGlsLmZsYXR0ZW5BcnJheT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W107IW8udXRpbC5hcnJheUVxdWFsKHQsZSk7KXQ9ZSxlPVtdLmNvbmNhdC5hcHBseShbXSxlKTtyZXR1cm4gZX0sby51dGlsLmRlZHVwbGljYXRlPWZ1bmN0aW9uKGUpe3JldHVybiBlLmZpbHRlcigoZnVuY3Rpb24oZSx0LHIpe3JldHVybiByLmluZGV4T2YoZSk9PXR9KSl9LG8udXRpbC5jb252ZXJ0VG9DYXJ0ZXNpYW49ZnVuY3Rpb24oZSx0KXt2YXIgcj10Kk1hdGguUEkvMTgwO3JldHVybltlKk1hdGguY29zKHIpLGUqTWF0aC5zaW4ocildfSxvLnV0aWwucm91bmQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj10fHwyLG49TWF0aC5wb3coMTAscik7cmV0dXJuIE1hdGgucm91bmQoZSpuKS9ufSxvLnV0aWwuZ2V0TW91c2VQb3M9ZnVuY3Rpb24oZSl7dmFyIHQ9bi5tb3VzZShlLm5vZGUoKSkscj10WzBdLGE9dFsxXSxpPXt9O3JldHVybiBpLng9cixpLnk9YSxpLnBvcz10LGkuYW5nbGU9MTgwKihNYXRoLmF0YW4yKGEscikrTWF0aC5QSSkvTWF0aC5QSSxpLnJhZGl1cz1NYXRoLnNxcnQocipyK2EqYSksaX0sby51dGlsLmR1cGxpY2F0ZXNDb3VudD1mdW5jdGlvbihlKXtmb3IodmFyIHQscj17fSxuPXt9LGE9MCxpPWUubGVuZ3RoO2E8aTthKyspKHQ9ZVthXSlpbiByPyhyW3RdKyssblt0XT1yW3RdKTpyW3RdPTE7cmV0dXJuIG59LG8udXRpbC5kdXBsaWNhdGVzPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Qua2V5cyhvLnV0aWwuZHVwbGljYXRlc0NvdW50KGUpKX0sby51dGlsLnRyYW5zbGF0b3I9ZnVuY3Rpb24oZSx0LHIsbil7aWYobil7dmFyIGE9ci5zbGljZSgpO3I9dCx0PWF9dmFyIGk9dC5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBlKXJldHVybiBlW3RdfSksZSk7InVuZGVmaW5lZCIhPXR5cGVvZiBpJiYodC5yZWR1Y2UoKGZ1bmN0aW9uKGUscixuKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGUpcmV0dXJuIG49PT10Lmxlbmd0aC0xJiZkZWxldGUgZVtyXSxlW3JdfSksZSksci5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIGVbdF0mJihlW3RdPXt9KSxuPT09ci5sZW5ndGgtMSYmKGVbdF09aSksZVt0XX0pLGUpKX0sby5Qb2x5Q2hhcnQ9ZnVuY3Rpb24oKXt2YXIgZT1bby5Qb2x5Q2hhcnQuZGVmYXVsdENvbmZpZygpXSx0PW4uZGlzcGF0Y2goImhvdmVyIikscj17c29saWQ6Im5vbmUiLGRhc2g6WzUsMl0sZG90OlsyLDVdfTtmdW5jdGlvbiBpKCl7dmFyIHQ9ZVswXS5nZW9tZXRyeUNvbmZpZyxhPXQuY29udGFpbmVyOyJzdHJpbmciPT10eXBlb2YgYSYmKGE9bi5zZWxlY3QoYSkpLGEuZGF0dW0oZSkuZWFjaCgoZnVuY3Rpb24oZSxhKXt2YXIgaT0hIWVbMF0uZGF0YS55U3RhY2ssbz1lLm1hcCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gaT9uLnppcChlLmRhdGEudFswXSxlLmRhdGEuclswXSxlLmRhdGEueVN0YWNrWzBdKTpuLnppcChlLmRhdGEudFswXSxlLmRhdGEuclswXSl9KSksbD10LmFuZ3VsYXJTY2FsZSxzPXQucmFkaWFsU2NhbGUuZG9tYWluKClbMF0sYz17YmFyOmZ1bmN0aW9uKHIsYSxpKXt2YXIgbz1lW2ldLmRhdGEscz10LnJhZGlhbFNjYWxlKHJbMV0pLXQucmFkaWFsU2NhbGUoMCksYz10LnJhZGlhbFNjYWxlKHJbMl18fDApLHU9by5iYXJXaWR0aDtuLnNlbGVjdCh0aGlzKS5hdHRyKHtjbGFzczoibWFyayBiYXIiLGQ6Ik0iK1tbcytjLC11LzJdLFtzK2MsdS8yXSxbYyx1LzJdLFtjLC11LzJdXS5qb2luKCJMIikrIloiLHRyYW5zZm9ybTpmdW5jdGlvbihlLHIpe3JldHVybiJyb3RhdGUoIisodC5vcmllbnRhdGlvbitsKGVbMF0pKSsiKSJ9fSl9fTtjLmRvdD1mdW5jdGlvbihyLGEsaSl7dmFyIG89clsyXT9bclswXSxyWzFdK3JbMl1dOnIsbD1uLnN2Zy5zeW1ib2woKS5zaXplKGVbaV0uZGF0YS5kb3RTaXplKS50eXBlKGVbaV0uZGF0YS5kb3RUeXBlKShyLGEpO24uc2VsZWN0KHRoaXMpLmF0dHIoe2NsYXNzOiJtYXJrIGRvdCIsZDpsLHRyYW5zZm9ybTpmdW5jdGlvbihlLHIpe3ZhciBuLGEsaSxsPShuPWZ1bmN0aW9uKGUscil7dmFyIG49dC5yYWRpYWxTY2FsZShlWzFdKSxhPSh0LmFuZ3VsYXJTY2FsZShlWzBdKSt0Lm9yaWVudGF0aW9uKSpNYXRoLlBJLzE4MDtyZXR1cm57cjpuLHQ6YX19KG8pLGE9bi5yKk1hdGguY29zKG4udCksaT1uLnIqTWF0aC5zaW4obi50KSx7eDphLHk6aX0pO3JldHVybiJ0cmFuc2xhdGUoIitbbC54LGwueV0rIikifX0pfTt2YXIgdT1uLnN2Zy5saW5lLnJhZGlhbCgpLmludGVycG9sYXRlKGVbMF0uZGF0YS5saW5lSW50ZXJwb2xhdGlvbikucmFkaXVzKChmdW5jdGlvbihlKXtyZXR1cm4gdC5yYWRpYWxTY2FsZShlWzFdKX0pKS5hbmdsZSgoZnVuY3Rpb24oZSl7cmV0dXJuIHQuYW5ndWxhclNjYWxlKGVbMF0pKk1hdGguUEkvMTgwfSkpO2MubGluZT1mdW5jdGlvbihyLGEsaSl7dmFyIGw9clsyXT9vW2ldLm1hcCgoZnVuY3Rpb24oZSx0KXtyZXR1cm5bZVswXSxlWzFdK2VbMl1dfSkpOm9baV07aWYobi5zZWxlY3QodGhpcykuZWFjaChjLmRvdCkuc3R5bGUoe29wYWNpdHk6ZnVuY3Rpb24odCxyKXtyZXR1cm4rZVtpXS5kYXRhLmRvdFZpc2libGV9LGZpbGw6aC5zdHJva2UocixhLGkpfSkuYXR0cih7Y2xhc3M6Im1hcmsgZG90In0pLCEoYT4wKSl7dmFyIHM9bi5zZWxlY3QodGhpcy5wYXJlbnROb2RlKS5zZWxlY3RBbGwoInBhdGgubGluZSIpLmRhdGEoWzBdKTtzLmVudGVyKCkuaW5zZXJ0KCJwYXRoIikscy5hdHRyKHtjbGFzczoibGluZSIsZDp1KGwpLHRyYW5zZm9ybTpmdW5jdGlvbihlLHIpe3JldHVybiJyb3RhdGUoIisodC5vcmllbnRhdGlvbis5MCkrIikifSwicG9pbnRlci1ldmVudHMiOiJub25lIn0pLnN0eWxlKHtmaWxsOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGguZmlsbChyLGEsaSl9LCJmaWxsLW9wYWNpdHkiOjAsc3Ryb2tlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGguc3Ryb2tlKHIsYSxpKX0sInN0cm9rZS13aWR0aCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaFsic3Ryb2tlLXdpZHRoIl0ocixhLGkpfSwic3Ryb2tlLWRhc2hhcnJheSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaFsic3Ryb2tlLWRhc2hhcnJheSJdKHIsYSxpKX0sb3BhY2l0eTpmdW5jdGlvbihlLHQpe3JldHVybiBoLm9wYWNpdHkocixhLGkpfSxkaXNwbGF5OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGguZGlzcGxheShyLGEsaSl9fSl9fTt2YXIgZj10LmFuZ3VsYXJTY2FsZS5yYW5nZSgpLGQ9TWF0aC5hYnMoZlsxXS1mWzBdKS9vWzBdLmxlbmd0aCpNYXRoLlBJLzE4MCxwPW4uc3ZnLmFyYygpLnN0YXJ0QW5nbGUoKGZ1bmN0aW9uKGUpe3JldHVybi1kLzJ9KSkuZW5kQW5nbGUoKGZ1bmN0aW9uKGUpe3JldHVybiBkLzJ9KSkuaW5uZXJSYWRpdXMoKGZ1bmN0aW9uKGUpe3JldHVybiB0LnJhZGlhbFNjYWxlKHMrKGVbMl18fDApKX0pKS5vdXRlclJhZGl1cygoZnVuY3Rpb24oZSl7cmV0dXJuIHQucmFkaWFsU2NhbGUocysoZVsyXXx8MCkpK3QucmFkaWFsU2NhbGUoZVsxXSl9KSk7Yy5hcmM9ZnVuY3Rpb24oZSxyLGEpe24uc2VsZWN0KHRoaXMpLmF0dHIoe2NsYXNzOiJtYXJrIGFyYyIsZDpwLHRyYW5zZm9ybTpmdW5jdGlvbihlLHIpe3JldHVybiJyb3RhdGUoIisodC5vcmllbnRhdGlvbitsKGVbMF0pKzkwKSsiKSJ9fSl9O3ZhciBoPXtmaWxsOmZ1bmN0aW9uKHQscixuKXtyZXR1cm4gZVtuXS5kYXRhLmNvbG9yfSxzdHJva2U6ZnVuY3Rpb24odCxyLG4pe3JldHVybiBlW25dLmRhdGEuc3Ryb2tlQ29sb3J9LCJzdHJva2Utd2lkdGgiOmZ1bmN0aW9uKHQscixuKXtyZXR1cm4gZVtuXS5kYXRhLnN0cm9rZVNpemUrInB4In0sInN0cm9rZS1kYXNoYXJyYXkiOmZ1bmN0aW9uKHQsbixhKXtyZXR1cm4gcltlW2FdLmRhdGEuc3Ryb2tlRGFzaF19LG9wYWNpdHk6ZnVuY3Rpb24odCxyLG4pe3JldHVybiBlW25dLmRhdGEub3BhY2l0eX0sZGlzcGxheTpmdW5jdGlvbih0LHIsbil7cmV0dXJuInVuZGVmaW5lZCI9PXR5cGVvZiBlW25dLmRhdGEudmlzaWJsZXx8ZVtuXS5kYXRhLnZpc2libGU/ImJsb2NrIjoibm9uZSJ9fSxnPW4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy5sYXllciIpLmRhdGEobyk7Zy5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoe2NsYXNzOiJsYXllciJ9KTt2YXIgdj1nLnNlbGVjdEFsbCgicGF0aC5tYXJrIikuZGF0YSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZX0pKTt2LmVudGVyKCkuYXBwZW5kKCJwYXRoIikuYXR0cih7Y2xhc3M6Im1hcmsifSksdi5zdHlsZShoKS5lYWNoKGNbdC5nZW9tZXRyeVR5cGVdKSx2LmV4aXQoKS5yZW1vdmUoKSxnLmV4aXQoKS5yZW1vdmUoKX0pKX1yZXR1cm4gaS5jb25maWc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQuZm9yRWFjaCgoZnVuY3Rpb24odCxyKXtlW3JdfHwoZVtyXT17fSksYShlW3JdLG8uUG9seUNoYXJ0LmRlZmF1bHRDb25maWcoKSksYShlW3JdLHQpfSkpLHRoaXMpOmV9LGkuZ2V0Q29sb3JTY2FsZT1mdW5jdGlvbigpe30sbi5yZWJpbmQoaSx0LCJvbiIpLGl9LG8uUG9seUNoYXJ0LmRlZmF1bHRDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm57ZGF0YTp7bmFtZToiZ2VvbTEiLHQ6W1sxLDIsMyw0XV0scjpbWzEsMiwzLDRdXSxkb3RUeXBlOiJjaXJjbGUiLGRvdFNpemU6NjQsZG90VmlzaWJsZTohMSxiYXJXaWR0aDoyMCxjb2xvcjoiI2ZmYTUwMCIsc3Ryb2tlU2l6ZToxLHN0cm9rZUNvbG9yOiJzaWx2ZXIiLHN0cm9rZURhc2g6InNvbGlkIixvcGFjaXR5OjEsaW5kZXg6MCx2aXNpYmxlOiEwLHZpc2libGVJbkxlZ2VuZDohMH0sZ2VvbWV0cnlDb25maWc6e2dlb21ldHJ5OiJMaW5lUGxvdCIsZ2VvbWV0cnlUeXBlOiJhcmMiLGRpcmVjdGlvbjoiY2xvY2t3aXNlIixvcmllbnRhdGlvbjowLGNvbnRhaW5lcjoiYm9keSIscmFkaWFsU2NhbGU6bnVsbCxhbmd1bGFyU2NhbGU6bnVsbCxjb2xvclNjYWxlOm4uc2NhbGUuY2F0ZWdvcnkyMCgpfX19LG8uQmFyQ2hhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gby5Qb2x5Q2hhcnQoKX0sby5CYXJDaGFydC5kZWZhdWx0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJue2dlb21ldHJ5Q29uZmlnOntnZW9tZXRyeVR5cGU6ImJhciJ9fX0sby5BcmVhQ2hhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gby5Qb2x5Q2hhcnQoKX0sby5BcmVhQ2hhcnQuZGVmYXVsdENvbmZpZz1mdW5jdGlvbigpe3JldHVybntnZW9tZXRyeUNvbmZpZzp7Z2VvbWV0cnlUeXBlOiJhcmMifX19LG8uRG90UGxvdD1mdW5jdGlvbigpe3JldHVybiBvLlBvbHlDaGFydCgpfSxvLkRvdFBsb3QuZGVmYXVsdENvbmZpZz1mdW5jdGlvbigpe3JldHVybntnZW9tZXRyeUNvbmZpZzp7Z2VvbWV0cnlUeXBlOiJkb3QiLGRvdFR5cGU6ImNpcmNsZSJ9fX0sby5MaW5lUGxvdD1mdW5jdGlvbigpe3JldHVybiBvLlBvbHlDaGFydCgpfSxvLkxpbmVQbG90LmRlZmF1bHRDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm57Z2VvbWV0cnlDb25maWc6e2dlb21ldHJ5VHlwZToibGluZSJ9fX0sby5MZWdlbmQ9ZnVuY3Rpb24oKXt2YXIgZT1vLkxlZ2VuZC5kZWZhdWx0Q29uZmlnKCksdD1uLmRpc3BhdGNoKCJob3ZlciIpO2Z1bmN0aW9uIHIoKXt2YXIgdD1lLmxlZ2VuZENvbmZpZyxpPWUuZGF0YS5tYXAoKGZ1bmN0aW9uKGUscil7cmV0dXJuW10uY29uY2F0KGUpLm1hcCgoZnVuY3Rpb24oZSxuKXt2YXIgaT1hKHt9LHQuZWxlbWVudHNbcl0pO3JldHVybiBpLm5hbWU9ZSxpLmNvbG9yPVtdLmNvbmNhdCh0LmVsZW1lbnRzW3JdLmNvbG9yKVtuXSxpfSkpfSkpLG89bi5tZXJnZShpKTtvPW8uZmlsdGVyKChmdW5jdGlvbihlLHIpe3JldHVybiB0LmVsZW1lbnRzW3JdJiYodC5lbGVtZW50c1tyXS52aXNpYmxlSW5MZWdlbmR8fCJ1bmRlZmluZWQiPT10eXBlb2YgdC5lbGVtZW50c1tyXS52aXNpYmxlSW5MZWdlbmQpfSkpLHQucmV2ZXJzZU9yZGVyJiYobz1vLnJldmVyc2UoKSk7dmFyIGw9dC5jb250YWluZXI7KCJzdHJpbmciPT10eXBlb2YgbHx8bC5ub2RlTmFtZSkmJihsPW4uc2VsZWN0KGwpKTt2YXIgcz1vLm1hcCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcn0pKSxjPXQuZm9udFNpemUsdT1udWxsPT10LmlzQ29udGludW91cz8ibnVtYmVyIj09dHlwZW9mIG9bMF06dC5pc0NvbnRpbnVvdXMsZj11P3QuaGVpZ2h0OmMqby5sZW5ndGgsZD1sLmNsYXNzZWQoImxlZ2VuZC1ncm91cCIsITApLnNlbGVjdEFsbCgic3ZnIikuZGF0YShbMF0pLHA9ZC5lbnRlcigpLmFwcGVuZCgic3ZnIikuYXR0cih7d2lkdGg6MzAwLGhlaWdodDpmK2MseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwieG1sbnM6eGxpbmsiOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix2ZXJzaW9uOiIxLjEifSk7cC5hcHBlbmQoImciKS5jbGFzc2VkKCJsZWdlbmQtYXhpcyIsITApLHAuYXBwZW5kKCJnIikuY2xhc3NlZCgibGVnZW5kLW1hcmtzIiwhMCk7dmFyIGg9bi5yYW5nZShvLmxlbmd0aCksZz1uLnNjYWxlW3U/ImxpbmVhciI6Im9yZGluYWwiXSgpLmRvbWFpbihoKS5yYW5nZShzKSx2PW4uc2NhbGVbdT8ibGluZWFyIjoib3JkaW5hbCJdKCkuZG9tYWluKGgpW3U/InJhbmdlIjoicmFuZ2VQb2ludHMiXShbMCxmXSk7aWYodSl7dmFyIG09ZC5zZWxlY3QoIi5sZWdlbmQtbWFya3MiKS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoImxpbmVhckdyYWRpZW50IikuYXR0cih7aWQ6ImdyYWQxIix4MToiMCUiLHkxOiIwJSIseDI6IjAlIix5MjoiMTAwJSJ9KS5zZWxlY3RBbGwoInN0b3AiKS5kYXRhKHMpO20uZW50ZXIoKS5hcHBlbmQoInN0b3AiKSxtLmF0dHIoe29mZnNldDpmdW5jdGlvbihlLHQpe3JldHVybiB0LyhzLmxlbmd0aC0xKSoxMDArIiUifX0pLnN0eWxlKHsic3RvcC1jb2xvciI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZX19KSxkLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoImxlZ2VuZC1tYXJrIiwhMCkuYXR0cih7aGVpZ2h0OnQuaGVpZ2h0LHdpZHRoOnQuY29sb3JCYW5kV2lkdGgsZmlsbDoidXJsKCNncmFkMSkifSl9ZWxzZXt2YXIgeT1kLnNlbGVjdCgiLmxlZ2VuZC1tYXJrcyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmQtbWFyayIpLmRhdGEobyk7eS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImxlZ2VuZC1tYXJrIiwhMCkseS5hdHRyKHt0cmFuc2Zvcm06ZnVuY3Rpb24oZSx0KXtyZXR1cm4idHJhbnNsYXRlKCIrW2MvMix2KHQpK2MvMl0rIikifSxkOmZ1bmN0aW9uKGUsdCl7dmFyIHIsYSxpLG89ZS5zeW1ib2w7cmV0dXJuIGk9MyooYT1jKSwibGluZSI9PT0ocj1vKT8iTSIrW1stYS8yLC1hLzEyXSxbYS8yLC1hLzEyXSxbYS8yLGEvMTJdLFstYS8yLGEvMTJdXSsiWiI6LTEhPW4uc3ZnLnN5bWJvbFR5cGVzLmluZGV4T2Yocik/bi5zdmcuc3ltYm9sKCkudHlwZShyKS5zaXplKGkpKCk6bi5zdmcuc3ltYm9sKCkudHlwZSgic3F1YXJlIikuc2l6ZShpKSgpfSxmaWxsOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGcodCl9fSkseS5leGl0KCkucmVtb3ZlKCl9dmFyIHg9bi5zdmcuYXhpcygpLnNjYWxlKHYpLm9yaWVudCgicmlnaHQiKSxiPWQuc2VsZWN0KCJnLmxlZ2VuZC1heGlzIikuYXR0cih7dHJhbnNmb3JtOiJ0cmFuc2xhdGUoIitbdT90LmNvbG9yQmFuZFdpZHRoOmMsYy8yXSsiKSJ9KS5jYWxsKHgpO3JldHVybiBiLnNlbGVjdEFsbCgiLmRvbWFpbiIpLnN0eWxlKHtmaWxsOiJub25lIixzdHJva2U6Im5vbmUifSksYi5zZWxlY3RBbGwoImxpbmUiKS5zdHlsZSh7ZmlsbDoibm9uZSIsc3Ryb2tlOnU/dC50ZXh0Q29sb3I6Im5vbmUifSksYi5zZWxlY3RBbGwoInRleHQiKS5zdHlsZSh7ZmlsbDp0LnRleHRDb2xvciwiZm9udC1zaXplIjp0LmZvbnRTaXplfSkudGV4dCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gb1t0XS5uYW1lfSkpLHJ9cmV0dXJuIHIuY29uZmlnPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhKGUsdCksdGhpcyk6ZX0sbi5yZWJpbmQocix0LCJvbiIpLHJ9LG8uTGVnZW5kLmRlZmF1bHRDb25maWc9ZnVuY3Rpb24oZSx0KXtyZXR1cm57ZGF0YTpbImEiLCJiIiwiYyJdLGxlZ2VuZENvbmZpZzp7ZWxlbWVudHM6W3tzeW1ib2w6ImxpbmUiLGNvbG9yOiJyZWQifSx7c3ltYm9sOiJzcXVhcmUiLGNvbG9yOiJ5ZWxsb3cifSx7c3ltYm9sOiJkaWFtb25kIixjb2xvcjoibGltZWdyZWVuIn1dLGhlaWdodDoxNTAsY29sb3JCYW5kV2lkdGg6MzAsZm9udFNpemU6MTIsY29udGFpbmVyOiJib2R5Iixpc0NvbnRpbnVvdXM6bnVsbCx0ZXh0Q29sb3I6ImdyZXkiLHJldmVyc2VPcmRlcjohMX19fSxvLnRvb2x0aXBQYW5lbD1mdW5jdGlvbigpe3ZhciBlLHQscixpPXtjb250YWluZXI6bnVsbCxoYXNUaWNrOiExLGZvbnRTaXplOjEyLGNvbG9yOiJ3aGl0ZSIscGFkZGluZzo1fSxsPSJ0b29sdGlwLSIrby50b29sdGlwUGFuZWwudWlkKysscz0xMCxjPWZ1bmN0aW9uKCl7dmFyIG49KGU9aS5jb250YWluZXIuc2VsZWN0QWxsKCJnLiIrbCkuZGF0YShbMF0pKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobCwhMCkuc3R5bGUoeyJwb2ludGVyLWV2ZW50cyI6Im5vbmUiLGRpc3BsYXk6Im5vbmUifSk7cmV0dXJuIHI9bi5hcHBlbmQoInBhdGgiKS5zdHlsZSh7ZmlsbDoid2hpdGUiLCJmaWxsLW9wYWNpdHkiOi45fSkuYXR0cih7ZDoiTTAgMCJ9KSx0PW4uYXBwZW5kKCJ0ZXh0IikuYXR0cih7ZHg6aS5wYWRkaW5nK3MsZHk6LjMqK2kuZm9udFNpemV9KSxjfTtyZXR1cm4gYy50ZXh0PWZ1bmN0aW9uKGEpe3ZhciBvPW4uaHNsKGkuY29sb3IpLmwsbD1vPj0uNT8iI2FhYSI6IndoaXRlIix1PW8+PS41PyJibGFjayI6IndoaXRlIixmPWF8fCIiO3Quc3R5bGUoe2ZpbGw6dSwiZm9udC1zaXplIjppLmZvbnRTaXplKyJweCJ9KS50ZXh0KGYpO3ZhciBkPWkucGFkZGluZyxwPXQubm9kZSgpLmdldEJCb3goKSxoPXtmaWxsOmkuY29sb3Isc3Ryb2tlOmwsInN0cm9rZS13aWR0aCI6IjJweCJ9LGc9cC53aWR0aCsyKmQrcyx2PXAuaGVpZ2h0KzIqZDtyZXR1cm4gci5hdHRyKHtkOiJNIitbW3MsLXYvMl0sW3MsLXYvNF0sW2kuaGFzVGljaz8wOnMsMF0sW3Msdi80XSxbcyx2LzJdLFtnLHYvMl0sW2csLXYvMl1dLmpvaW4oIkwiKSsiWiJ9KS5zdHlsZShoKSxlLmF0dHIoe3RyYW5zZm9ybToidHJhbnNsYXRlKCIrW3MsLXYvMisyKmRdKyIpIn0pLGUuc3R5bGUoe2Rpc3BsYXk6ImJsb2NrIn0pLGN9LGMubW92ZT1mdW5jdGlvbih0KXtpZihlKXJldHVybiBlLmF0dHIoe3RyYW5zZm9ybToidHJhbnNsYXRlKCIrW3RbMF0sdFsxXV0rIikifSkuc3R5bGUoe2Rpc3BsYXk6ImJsb2NrIn0pLGN9LGMuaGlkZT1mdW5jdGlvbigpe2lmKGUpcmV0dXJuIGUuc3R5bGUoe2Rpc3BsYXk6Im5vbmUifSksY30sYy5zaG93PWZ1bmN0aW9uKCl7aWYoZSlyZXR1cm4gZS5zdHlsZSh7ZGlzcGxheToiYmxvY2sifSksY30sYy5jb25maWc9ZnVuY3Rpb24oZSl7cmV0dXJuIGEoaSxlKSxjfSxjfSxvLnRvb2x0aXBQYW5lbC51aWQ9MSxvLmFkYXB0ZXI9e30sby5hZGFwdGVyLnBsb3RseT1mdW5jdGlvbigpe3ZhciBlPXtjb252ZXJ0OmZ1bmN0aW9uKGUsdCl7dmFyIHI9e307aWYoZS5kYXRhJiYoci5kYXRhPWUuZGF0YS5tYXAoKGZ1bmN0aW9uKGUscil7dmFyIG49YSh7fSxlKTtyZXR1cm5bW24sWyJtYXJrZXIiLCJjb2xvciJdLFsiY29sb3IiXV0sW24sWyJtYXJrZXIiLCJvcGFjaXR5Il0sWyJvcGFjaXR5Il1dLFtuLFsibWFya2VyIiwibGluZSIsImNvbG9yIl0sWyJzdHJva2VDb2xvciJdXSxbbixbIm1hcmtlciIsImxpbmUiLCJkYXNoIl0sWyJzdHJva2VEYXNoIl1dLFtuLFsibWFya2VyIiwibGluZSIsIndpZHRoIl0sWyJzdHJva2VTaXplIl1dLFtuLFsibWFya2VyIiwic3ltYm9sIl0sWyJkb3RUeXBlIl1dLFtuLFsibWFya2VyIiwic2l6ZSJdLFsiZG90U2l6ZSJdXSxbbixbIm1hcmtlciIsImJhcldpZHRoIl0sWyJiYXJXaWR0aCJdXSxbbixbImxpbmUiLCJpbnRlcnBvbGF0aW9uIl0sWyJsaW5lSW50ZXJwb2xhdGlvbiJdXSxbbixbInNob3dsZWdlbmQiXSxbInZpc2libGVJbkxlZ2VuZCJdXV0uZm9yRWFjaCgoZnVuY3Rpb24oZSxyKXtvLnV0aWwudHJhbnNsYXRvci5hcHBseShudWxsLGUuY29uY2F0KHQpKX0pKSx0fHxkZWxldGUgbi5tYXJrZXIsdCYmZGVsZXRlIG4uZ3JvdXBJZCx0PygiTGluZVBsb3QiPT09bi5nZW9tZXRyeT8obi50eXBlPSJzY2F0dGVyIiwhMD09PW4uZG90VmlzaWJsZT8oZGVsZXRlIG4uZG90VmlzaWJsZSxuLm1vZGU9ImxpbmVzK21hcmtlcnMiKTpuLm1vZGU9ImxpbmVzIik6IkRvdFBsb3QiPT09bi5nZW9tZXRyeT8obi50eXBlPSJzY2F0dGVyIixuLm1vZGU9Im1hcmtlcnMiKToiQXJlYUNoYXJ0Ij09PW4uZ2VvbWV0cnk/bi50eXBlPSJhcmVhIjoiQmFyQ2hhcnQiPT09bi5nZW9tZXRyeSYmKG4udHlwZT0iYmFyIiksZGVsZXRlIG4uZ2VvbWV0cnkpOigic2NhdHRlciI9PT1uLnR5cGU/ImxpbmVzIj09PW4ubW9kZT9uLmdlb21ldHJ5PSJMaW5lUGxvdCI6Im1hcmtlcnMiPT09bi5tb2RlP24uZ2VvbWV0cnk9IkRvdFBsb3QiOiJsaW5lcyttYXJrZXJzIj09PW4ubW9kZSYmKG4uZ2VvbWV0cnk9IkxpbmVQbG90IixuLmRvdFZpc2libGU9ITApOiJhcmVhIj09PW4udHlwZT9uLmdlb21ldHJ5PSJBcmVhQ2hhcnQiOiJiYXIiPT09bi50eXBlJiYobi5nZW9tZXRyeT0iQmFyQ2hhcnQiKSxkZWxldGUgbi5tb2RlLGRlbGV0ZSBuLnR5cGUpLG59KSksIXQmJmUubGF5b3V0JiYic3RhY2siPT09ZS5sYXlvdXQuYmFybW9kZSkpe3ZhciBpPW8udXRpbC5kdXBsaWNhdGVzKHIuZGF0YS5tYXAoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZ2VvbWV0cnl9KSkpO3IuZGF0YS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe3ZhciBuPWkuaW5kZXhPZihlLmdlb21ldHJ5KTstMSE9biYmKHIuZGF0YVt0XS5ncm91cElkPW4pfSkpfWlmKGUubGF5b3V0KXt2YXIgbD1hKHt9LGUubGF5b3V0KTtpZihbW2wsWyJwbG90X2JnY29sb3IiXSxbImJhY2tncm91bmRDb2xvciJdXSxbbCxbInNob3dsZWdlbmQiXSxbInNob3dMZWdlbmQiXV0sW2wsWyJyYWRpYWxheGlzIl0sWyJyYWRpYWxBeGlzIl1dLFtsLFsiYW5ndWxhcmF4aXMiXSxbImFuZ3VsYXJBeGlzIl1dLFtsLmFuZ3VsYXJheGlzLFsic2hvd2xpbmUiXSxbImdyaWRMaW5lc1Zpc2libGUiXV0sW2wuYW5ndWxhcmF4aXMsWyJzaG93dGlja2xhYmVscyJdLFsibGFiZWxzVmlzaWJsZSJdXSxbbC5hbmd1bGFyYXhpcyxbIm50aWNrcyJdLFsidGlja3NDb3VudCJdXSxbbC5hbmd1bGFyYXhpcyxbInRpY2tvcmllbnRhdGlvbiJdLFsidGlja09yaWVudGF0aW9uIl1dLFtsLmFuZ3VsYXJheGlzLFsidGlja3N1ZmZpeCJdLFsidGlja3NTdWZmaXgiXV0sW2wuYW5ndWxhcmF4aXMsWyJyYW5nZSJdLFsiZG9tYWluIl1dLFtsLmFuZ3VsYXJheGlzLFsiZW5kcGFkZGluZyJdLFsiZW5kUGFkZGluZyJdXSxbbC5yYWRpYWxheGlzLFsic2hvd2xpbmUiXSxbImdyaWRMaW5lc1Zpc2libGUiXV0sW2wucmFkaWFsYXhpcyxbInRpY2tvcmllbnRhdGlvbiJdLFsidGlja09yaWVudGF0aW9uIl1dLFtsLnJhZGlhbGF4aXMsWyJ0aWNrc3VmZml4Il0sWyJ0aWNrc1N1ZmZpeCJdXSxbbC5yYWRpYWxheGlzLFsicmFuZ2UiXSxbImRvbWFpbiJdXSxbbC5hbmd1bGFyQXhpcyxbInNob3dsaW5lIl0sWyJncmlkTGluZXNWaXNpYmxlIl1dLFtsLmFuZ3VsYXJBeGlzLFsic2hvd3RpY2tsYWJlbHMiXSxbImxhYmVsc1Zpc2libGUiXV0sW2wuYW5ndWxhckF4aXMsWyJudGlja3MiXSxbInRpY2tzQ291bnQiXV0sW2wuYW5ndWxhckF4aXMsWyJ0aWNrb3JpZW50YXRpb24iXSxbInRpY2tPcmllbnRhdGlvbiJdXSxbbC5hbmd1bGFyQXhpcyxbInRpY2tzdWZmaXgiXSxbInRpY2tzU3VmZml4Il1dLFtsLmFuZ3VsYXJBeGlzLFsicmFuZ2UiXSxbImRvbWFpbiJdXSxbbC5hbmd1bGFyQXhpcyxbImVuZHBhZGRpbmciXSxbImVuZFBhZGRpbmciXV0sW2wucmFkaWFsQXhpcyxbInNob3dsaW5lIl0sWyJncmlkTGluZXNWaXNpYmxlIl1dLFtsLnJhZGlhbEF4aXMsWyJ0aWNrb3JpZW50YXRpb24iXSxbInRpY2tPcmllbnRhdGlvbiJdXSxbbC5yYWRpYWxBeGlzLFsidGlja3N1ZmZpeCJdLFsidGlja3NTdWZmaXgiXV0sW2wucmFkaWFsQXhpcyxbInJhbmdlIl0sWyJkb21haW4iXV0sW2wuZm9udCxbIm91dGxpbmVjb2xvciJdLFsib3V0bGluZUNvbG9yIl1dLFtsLmxlZ2VuZCxbInRyYWNlb3JkZXIiXSxbInJldmVyc2VPcmRlciJdXSxbbCxbImxhYmVsb2Zmc2V0Il0sWyJsYWJlbE9mZnNldCJdXSxbbCxbImRlZmF1bHRjb2xvcnJhbmdlIl0sWyJkZWZhdWx0Q29sb3JSYW5nZSJdXV0uZm9yRWFjaCgoZnVuY3Rpb24oZSxyKXtvLnV0aWwudHJhbnNsYXRvci5hcHBseShudWxsLGUuY29uY2F0KHQpKX0pKSx0PygidW5kZWZpbmVkIiE9dHlwZW9mIGwudGlja0xlbmd0aCYmKGwuYW5ndWxhcmF4aXMudGlja2xlbj1sLnRpY2tMZW5ndGgsZGVsZXRlIGwudGlja0xlbmd0aCksbC50aWNrQ29sb3ImJihsLmFuZ3VsYXJheGlzLnRpY2tjb2xvcj1sLnRpY2tDb2xvcixkZWxldGUgbC50aWNrQ29sb3IpKToobC5hbmd1bGFyQXhpcyYmInVuZGVmaW5lZCIhPXR5cGVvZiBsLmFuZ3VsYXJBeGlzLnRpY2tsZW4mJihsLnRpY2tMZW5ndGg9bC5hbmd1bGFyQXhpcy50aWNrbGVuKSxsLmFuZ3VsYXJBeGlzJiYidW5kZWZpbmVkIiE9dHlwZW9mIGwuYW5ndWxhckF4aXMudGlja2NvbG9yJiYobC50aWNrQ29sb3I9bC5hbmd1bGFyQXhpcy50aWNrY29sb3IpKSxsLmxlZ2VuZCYmImJvb2xlYW4iIT10eXBlb2YgbC5sZWdlbmQucmV2ZXJzZU9yZGVyJiYobC5sZWdlbmQucmV2ZXJzZU9yZGVyPSJub3JtYWwiIT1sLmxlZ2VuZC5yZXZlcnNlT3JkZXIpLGwubGVnZW5kJiYiYm9vbGVhbiI9PXR5cGVvZiBsLmxlZ2VuZC50cmFjZW9yZGVyJiYobC5sZWdlbmQudHJhY2VvcmRlcj1sLmxlZ2VuZC50cmFjZW9yZGVyPyJyZXZlcnNlZCI6Im5vcm1hbCIsZGVsZXRlIGwubGVnZW5kLnJldmVyc2VPcmRlciksbC5tYXJnaW4mJiJ1bmRlZmluZWQiIT10eXBlb2YgbC5tYXJnaW4udCl7dmFyIHM9WyJ0IiwiciIsImIiLCJsIiwicGFkIl0sYz1bInRvcCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdCIsInBhZCJdLHU9e307bi5lbnRyaWVzKGwubWFyZ2luKS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe3VbY1tzLmluZGV4T2YoZS5rZXkpXV09ZS52YWx1ZX0pKSxsLm1hcmdpbj11fXQmJihkZWxldGUgbC5uZWVkc0VuZFNwYWNpbmcsZGVsZXRlIGwubWlub3JUaWNrQ29sb3IsZGVsZXRlIGwubWlub3JUaWNrcyxkZWxldGUgbC5hbmd1bGFyYXhpcy50aWNrc0NvdW50LGRlbGV0ZSBsLmFuZ3VsYXJheGlzLnRpY2tzQ291bnQsZGVsZXRlIGwuYW5ndWxhcmF4aXMudGlja3NTdGVwLGRlbGV0ZSBsLmFuZ3VsYXJheGlzLnJld3JpdGVUaWNrcyxkZWxldGUgbC5hbmd1bGFyYXhpcy5udGlja3MsZGVsZXRlIGwucmFkaWFsYXhpcy50aWNrc0NvdW50LGRlbGV0ZSBsLnJhZGlhbGF4aXMudGlja3NDb3VudCxkZWxldGUgbC5yYWRpYWxheGlzLnRpY2tzU3RlcCxkZWxldGUgbC5yYWRpYWxheGlzLnJld3JpdGVUaWNrcyxkZWxldGUgbC5yYWRpYWxheGlzLm50aWNrcyksci5sYXlvdXQ9bH1yZXR1cm4gcn19O3JldHVybiBlfX0seyIuLi8uLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IjoxNzcsIi4uLy4uLy4uL2xpYiI6MjAyLGQzOjl9XSwyODc6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiZDMiKSxhPWUoIi4uLy4uLy4uL2xpYiIpLGk9ZSgiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89ZSgiLi9taWNyb3BvbGFyIiksbD1lKCIuL3VuZG9fbWFuYWdlciIpLHM9YS5leHRlbmREZWVwQWxsLGM9dC5leHBvcnRzPXt9O2MuZnJhbWV3b3JrPWZ1bmN0aW9uKGUpe3ZhciB0LHIsYSxpLHUsZj1uZXcgbDtmdW5jdGlvbiBkKHIsbCl7cmV0dXJuIGwmJih1PWwpLG4uc2VsZWN0KG4uc2VsZWN0KHUpLm5vZGUoKS5wYXJlbnROb2RlKS5zZWxlY3RBbGwoIi5zdmctY29udGFpbmVyPio6bm90KC5jaGFydC1yb290KSIpLnJlbW92ZSgpLHQ9dD9zKHQscik6cixhfHwoYT1vLkF4aXMoKSksaT1vLmFkYXB0ZXIucGxvdGx5KCkuY29udmVydCh0KSxhLmNvbmZpZyhpKS5yZW5kZXIodSksZS5kYXRhPXQuZGF0YSxlLmxheW91dD10LmxheW91dCxjLmZpbGxMYXlvdXQoZSksdH1yZXR1cm4gZC5pc1BvbGFyPSEwLGQuc3ZnPWZ1bmN0aW9uKCl7cmV0dXJuIGEuc3ZnKCl9LGQuZ2V0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGQuZ2V0TGl2ZUNvbmZpZz1mdW5jdGlvbigpe3JldHVybiBvLmFkYXB0ZXIucGxvdGx5KCkuY29udmVydChhLmdldExpdmVDb25maWcoKSwhMCl9LGQuZ2V0TGl2ZVNjYWxlcz1mdW5jdGlvbigpe3JldHVybnt0OmEuYW5ndWxhclNjYWxlKCkscjphLnJhZGlhbFNjYWxlKCl9fSxkLnNldFVuZG9Qb2ludD1mdW5jdGlvbigpe3ZhciBlLG4sYT10aGlzLGk9by51dGlsLmNsb25lSnNvbih0KTtlPWksbj1yLGYuYWRkKHt1bmRvOmZ1bmN0aW9uKCl7biYmYShuKX0scmVkbzpmdW5jdGlvbigpe2EoZSl9fSkscj1vLnV0aWwuY2xvbmVKc29uKGkpfSxkLnVuZG89ZnVuY3Rpb24oKXtmLnVuZG8oKX0sZC5yZWRvPWZ1bmN0aW9uKCl7Zi5yZWRvKCl9LGR9LGMuZmlsbExheW91dD1mdW5jdGlvbihlKXt2YXIgdD1uLnNlbGVjdChlKS5zZWxlY3RBbGwoIi5wbG90LWNvbnRhaW5lciIpLHI9dC5zZWxlY3RBbGwoIi5zdmctY29udGFpbmVyIiksYT1lLmZyYW1ld29yayYmZS5mcmFtZXdvcmsuc3ZnJiZlLmZyYW1ld29yay5zdmcoKSxvPXt3aWR0aDo4MDAsaGVpZ2h0OjYwMCxwYXBlcl9iZ2NvbG9yOmkuYmFja2dyb3VuZCxfY29udGFpbmVyOnQsX3BhcGVyZGl2OnIsX3BhcGVyOmF9O2UuX2Z1bGxMYXlvdXQ9cyhvLGUubGF5b3V0KX19LHsiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NzUsIi4uLy4uLy4uL2xpYiI6MjAyLCIuL21pY3JvcG9sYXIiOjI4NiwiLi91bmRvX21hbmFnZXIiOjI4OCxkMzo5fV0sMjg4OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciBlLHQ9W10scj0tMSxuPSExO2Z1bmN0aW9uIGEoZSx0KXtyZXR1cm4gZT8obj0hMCxlW3RdKCksbj0hMSx0aGlzKTp0aGlzfXJldHVybnthZGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIG58fCh0LnNwbGljZShyKzEsdC5sZW5ndGgtciksdC5wdXNoKGUpLHI9dC5sZW5ndGgtMSksdGhpc30sc2V0Q2FsbGJhY2s6ZnVuY3Rpb24odCl7ZT10fSx1bmRvOmZ1bmN0aW9uKCl7dmFyIG49dFtyXTtyZXR1cm4gbj8oYShuLCJ1bmRvIiksci09MSxlJiZlKG4udW5kbyksdGhpcyk6dGhpc30scmVkbzpmdW5jdGlvbigpe3ZhciBuPXRbcisxXTtyZXR1cm4gbj8oYShuLCJyZWRvIikscis9MSxlJiZlKG4ucmVkbyksdGhpcyk6dGhpc30sY2xlYXI6ZnVuY3Rpb24oKXt0PVtdLHI9LTF9LGhhc1VuZG86ZnVuY3Rpb24oKXtyZXR1cm4tMSE9PXJ9LGhhc1JlZG86ZnVuY3Rpb24oKXtyZXR1cm4gcjx0Lmxlbmd0aC0xfSxnZXRDb21tYW5kczpmdW5jdGlvbigpe3JldHVybiB0fSxnZXRQcmV2aW91c0NvbW1hbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtyLTFdfSxnZXRJbmRleDpmdW5jdGlvbigpe3JldHVybiByfX19fSx7fV0sMjg5OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO1snVmFyaWFibGVzIGFyZSBpbnNlcnRlZCB1c2luZyAle3ZhcmlhYmxlfSwgZm9yIGV4YW1wbGUgInk6ICV7eX0iLicsJ051bWJlcnMgYXJlIGZvcm1hdHRlZCB1c2luZyBkMy1mb3JtYXRcJ3Mgc3ludGF4ICV7dmFyaWFibGU6ZDMtZm9ybWF0fSwgZm9yIGV4YW1wbGUgIlByaWNlOiAle3k6JC4yZn0iLicsZSgiLi4vY29uc3RhbnRzL2RvY3MiKS5GT1JNQVRfTElOSywiZm9yIGRldGFpbHMgb24gdGhlIGZvcm1hdHRpbmcgc3ludGF4LiIsJ0RhdGVzIGFyZSBmb3JtYXR0ZWQgdXNpbmcgZDMtdGltZS1mb3JtYXRcJ3Mgc3ludGF4ICV7dmFyaWFibGV8ZDMtdGltZS1mb3JtYXR9LCBmb3IgZXhhbXBsZSAiRGF5OiAlezIwMTktMDEtMDF8JUF9Ii4nLGUoIi4uL2NvbnN0YW50cy9kb2NzIikuREFURV9GT1JNQVRfTElOSywiZm9yIGRldGFpbHMgb24gdGhlIGRhdGUgZm9ybWF0dGluZyBzeW50YXguIl0uam9pbigiICIpO2Z1bmN0aW9uIG4oZSl7dmFyIHQ9ZS5kZXNjcmlwdGlvbj8iICIrZS5kZXNjcmlwdGlvbjoiIixyPWUua2V5c3x8W107aWYoci5sZW5ndGg+MCl7Zm9yKHZhciBuPVtdLGE9MDthPHIubGVuZ3RoO2ErKyluW2FdPSJgIityW2FdKyJgIjt0Kz0iRmluYWxseSwgdGhlIHRlbXBsYXRlIHN0cmluZyBoYXMgYWNjZXNzIHRvICIsdD0xPT09ci5sZW5ndGg/InZhcmlhYmxlICIrblswXToidmFyaWFibGVzICIrbi5zbGljZSgwLC0xKS5qb2luKCIsICIpKyIgYW5kICIrbi5zbGljZSgtMSkrIi4ifXJldHVybiB0fXIuaG92ZXJ0ZW1wbGF0ZUF0dHJzPWZ1bmN0aW9uKGUsdCl7ZT1lfHx7fTtuKHQ9dHx8e30pO3ZhciByPXt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ZS5lZGl0VHlwZXx8Im5vbmUifTtyZXR1cm4hMSE9PWUuYXJyYXlPayYmKHIuYXJyYXlPaz0hMCkscn0sci50ZXh0dGVtcGxhdGVBdHRycz1mdW5jdGlvbihlLHQpe2U9ZXx8e307bih0PXR8fHt9KTt2YXIgcj17dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOmUuZWRpdFR5cGV8fCJjYWxjIn07cmV0dXJuITEhPT1lLmFycmF5T2smJihyLmFycmF5T2s9ITApLHJ9fSx7Ii4uL2NvbnN0YW50cy9kb2NzIjoxNzl9XSwyOTA6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi9saWIvbG9nZ2VycyIpLGE9ZSgiLi9saWIvbm9vcCIpLGk9ZSgiLi9saWIvcHVzaF91bmlxdWUiKSxvPWUoIi4vbGliL2lzX3BsYWluX29iamVjdCIpLGw9ZSgiLi9saWIvZG9tIikuYWRkU3R5bGVSdWxlLHM9ZSgiLi9saWIvZXh0ZW5kIiksYz1lKCIuL3Bsb3RzL2F0dHJpYnV0ZXMiKSx1PWUoIi4vcGxvdHMvbGF5b3V0X2F0dHJpYnV0ZXMiKSxmPXMuZXh0ZW5kRmxhdCxkPXMuZXh0ZW5kRGVlcEFsbDtmdW5jdGlvbiBwKGUpe3ZhciB0PWUubmFtZSxhPWUuY2F0ZWdvcmllcyxpPWUubWV0YTtpZihyLm1vZHVsZXNbdF0pbi5sb2coIlR5cGUgIit0KyIgYWxyZWFkeSByZWdpc3RlcmVkIik7ZWxzZXtyLnN1YnBsb3RzUmVnaXN0cnlbZS5iYXNlUGxvdE1vZHVsZS5uYW1lXXx8ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5uYW1lO2lmKHIuc3VicGxvdHNSZWdpc3RyeVt0XSlyZXR1cm4gdm9pZCBuLmxvZygiUGxvdCB0eXBlICIrdCsiIGFscmVhZHkgcmVnaXN0ZXJlZC4iKTtmb3IodmFyIGEgaW4gbShlKSxyLnN1YnBsb3RzUmVnaXN0cnlbdF09ZSxyLmNvbXBvbmVudHNSZWdpc3RyeSliKGEsZS5uYW1lKX0oZS5iYXNlUGxvdE1vZHVsZSk7Zm9yKHZhciBvPXt9LHM9MDtzPGEubGVuZ3RoO3MrKylvW2Fbc11dPSEwLHIuYWxsQ2F0ZWdvcmllc1thW3NdXT0hMDtmb3IodmFyIGMgaW4gci5tb2R1bGVzW3RdPXtfbW9kdWxlOmUsY2F0ZWdvcmllczpvfSxpJiZPYmplY3Qua2V5cyhpKS5sZW5ndGgmJihyLm1vZHVsZXNbdF0ubWV0YT1pKSxyLmFsbFR5cGVzLnB1c2godCksci5jb21wb25lbnRzUmVnaXN0cnkpeShjLHQpO2UubGF5b3V0QXR0cmlidXRlcyYmZihyLnRyYWNlTGF5b3V0QXR0cmlidXRlcyxlLmxheW91dEF0dHJpYnV0ZXMpO3ZhciB1PWUuYmFzZVBsb3RNb2R1bGUsZD11Lm5hbWU7aWYoIm1hcGJveCI9PT1kKXt2YXIgcD11LmNvbnN0YW50cy5zdHlsZVJ1bGVzO2Zvcih2YXIgaCBpbiBwKWwoIi5qcy1wbG90bHktcGxvdCAucGxvdGx5IC5tYXBib3hnbC0iK2gscFtoXSl9ImdlbyIhPT1kJiYibWFwYm94IiE9PWR8fHZvaWQgMD09PXR5cGVvZiB3aW5kb3d8fHZvaWQgMCE9PXdpbmRvdy5QbG90bHlHZW9Bc3NldHN8fCh3aW5kb3cuUGxvdGx5R2VvQXNzZXRzPXt0b3BvanNvbjp7fX0pfX1mdW5jdGlvbiBoKGUpe2lmKCJzdHJpbmciIT10eXBlb2YgZS5uYW1lKXRocm93IG5ldyBFcnJvcigiQ29tcG9uZW50IG1vZHVsZSAqbmFtZSogbXVzdCBiZSBhIHN0cmluZy4iKTt2YXIgdD1lLm5hbWU7Zm9yKHZhciBuIGluIHIuY29tcG9uZW50c1JlZ2lzdHJ5W3RdPWUsZS5sYXlvdXRBdHRyaWJ1dGVzJiYoZS5sYXlvdXRBdHRyaWJ1dGVzLl9pc0xpbmtlZFRvQXJyYXkmJmkoci5sYXlvdXRBcnJheUNvbnRhaW5lcnMsdCksbShlKSksci5tb2R1bGVzKXkodCxuKTtmb3IodmFyIGEgaW4gci5zdWJwbG90c1JlZ2lzdHJ5KWIodCxhKTtmb3IodmFyIG8gaW4gci50cmFuc2Zvcm1zUmVnaXN0cnkpeCh0LG8pO2Uuc2NoZW1hJiZlLnNjaGVtYS5sYXlvdXQmJmQodSxlLnNjaGVtYS5sYXlvdXQpfWZ1bmN0aW9uIGcoZSl7aWYoInN0cmluZyIhPXR5cGVvZiBlLm5hbWUpdGhyb3cgbmV3IEVycm9yKCJUcmFuc2Zvcm0gbW9kdWxlICpuYW1lKiBtdXN0IGJlIGEgc3RyaW5nLiIpO3ZhciB0PSJUcmFuc2Zvcm0gbW9kdWxlICIrZS5uYW1lLGE9ImZ1bmN0aW9uIj09dHlwZW9mIGUudHJhbnNmb3JtLGk9ImZ1bmN0aW9uIj09dHlwZW9mIGUuY2FsY1RyYW5zZm9ybTtpZighYSYmIWkpdGhyb3cgbmV3IEVycm9yKHQrIiBpcyBtaXNzaW5nIGEgKnRyYW5zZm9ybSogb3IgKmNhbGNUcmFuc2Zvcm0qIG1ldGhvZC4iKTtmb3IodmFyIGwgaW4gYSYmaSYmbi5sb2coW3QrIiBoYXMgYm90aCBhICp0cmFuc2Zvcm0qIGFuZCAqY2FsY1RyYW5zZm9ybSogbWV0aG9kcy4iLCJQbGVhc2Ugbm90ZSB0aGF0IGFsbCAqdHJhbnNmb3JtKiBtZXRob2RzIGFyZSBleGVjdXRlZCIsImJlZm9yZSBhbGwgKmNhbGNUcmFuc2Zvcm0qIG1ldGhvZHMuIl0uam9pbigiICIpKSxvKGUuYXR0cmlidXRlcyl8fG4ubG9nKHQrIiByZWdpc3RlcmVkIHdpdGhvdXQgYW4gKmF0dHJpYnV0ZXMqIG9iamVjdC4iKSwiZnVuY3Rpb24iIT10eXBlb2YgZS5zdXBwbHlEZWZhdWx0cyYmbi5sb2codCsiIHJlZ2lzdGVyZWQgd2l0aG91dCBhICpzdXBwbHlEZWZhdWx0cyogbWV0aG9kLiIpLHIudHJhbnNmb3Jtc1JlZ2lzdHJ5W2UubmFtZV09ZSxyLmNvbXBvbmVudHNSZWdpc3RyeSl4KGwsZS5uYW1lKX1mdW5jdGlvbiB2KGUpe3ZhciB0PWUubmFtZSxuPXQuc3BsaXQoIi0iKVswXSxhPWUuZGljdGlvbmFyeSxpPWUuZm9ybWF0LG89YSYmT2JqZWN0LmtleXMoYSkubGVuZ3RoLGw9aSYmT2JqZWN0LmtleXMoaSkubGVuZ3RoLHM9ci5sb2NhbGVSZWdpc3RyeSxjPXNbdF07aWYoY3x8KHNbdF09Yz17fSksbiE9PXQpe3ZhciB1PXNbbl07dXx8KHNbbl09dT17fSksbyYmdS5kaWN0aW9uYXJ5PT09Yy5kaWN0aW9uYXJ5JiYodS5kaWN0aW9uYXJ5PWEpLGwmJnUuZm9ybWF0PT09Yy5mb3JtYXQmJih1LmZvcm1hdD1pKX1vJiYoYy5kaWN0aW9uYXJ5PWEpLGwmJihjLmZvcm1hdD1pKX1mdW5jdGlvbiBtKGUpe2lmKGUubGF5b3V0QXR0cmlidXRlcyl7dmFyIHQ9ZS5sYXlvdXRBdHRyaWJ1dGVzLl9hcnJheUF0dHJSZWdleHBzO2lmKHQpZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspaShyLmxheW91dEFycmF5UmVnZXhlcyx0W25dKX19ZnVuY3Rpb24geShlLHQpe3ZhciBuPXIuY29tcG9uZW50c1JlZ2lzdHJ5W2VdLnNjaGVtYTtpZihuJiZuLnRyYWNlcyl7dmFyIGE9bi50cmFjZXNbdF07YSYmZChyLm1vZHVsZXNbdF0uX21vZHVsZS5hdHRyaWJ1dGVzLGEpfX1mdW5jdGlvbiB4KGUsdCl7dmFyIG49ci5jb21wb25lbnRzUmVnaXN0cnlbZV0uc2NoZW1hO2lmKG4mJm4udHJhbnNmb3Jtcyl7dmFyIGE9bi50cmFuc2Zvcm1zW3RdO2EmJmQoci50cmFuc2Zvcm1zUmVnaXN0cnlbdF0uYXR0cmlidXRlcyxhKX19ZnVuY3Rpb24gYihlLHQpe3ZhciBuPXIuY29tcG9uZW50c1JlZ2lzdHJ5W2VdLnNjaGVtYTtpZihuJiZuLnN1YnBsb3RzKXt2YXIgYT1yLnN1YnBsb3RzUmVnaXN0cnlbdF0saT1hLmxheW91dEF0dHJpYnV0ZXMsbz0ic3VicGxvdCI9PT1hLmF0dHI/YS5uYW1lOmEuYXR0cjtBcnJheS5pc0FycmF5KG8pJiYobz1vWzBdKTt2YXIgbD1uLnN1YnBsb3RzW29dO2kmJmwmJmQoaSxsKX19ZnVuY3Rpb24gXyhlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGUmJihlPWUudHlwZSksZX1yLm1vZHVsZXM9e30sci5hbGxDYXRlZ29yaWVzPXt9LHIuYWxsVHlwZXM9W10sci5zdWJwbG90c1JlZ2lzdHJ5PXt9LHIudHJhbnNmb3Jtc1JlZ2lzdHJ5PXt9LHIuY29tcG9uZW50c1JlZ2lzdHJ5PXt9LHIubGF5b3V0QXJyYXlDb250YWluZXJzPVtdLHIubGF5b3V0QXJyYXlSZWdleGVzPVtdLHIudHJhY2VMYXlvdXRBdHRyaWJ1dGVzPXt9LHIubG9jYWxlUmVnaXN0cnk9e30sci5hcGlNZXRob2RSZWdpc3RyeT17fSxyLmNvbGxlY3RhYmxlU3VicGxvdFR5cGVzPW51bGwsci5yZWdpc3Rlcj1mdW5jdGlvbihlKXtpZihyLmNvbGxlY3RhYmxlU3VicGxvdFR5cGVzPW51bGwsIWUpdGhyb3cgbmV3IEVycm9yKCJObyBhcmd1bWVudCBwYXNzZWQgdG8gUGxvdGx5LnJlZ2lzdGVyLiIpO2UmJiFBcnJheS5pc0FycmF5KGUpJiYoZT1bZV0pO2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKXt2YXIgbj1lW3RdO2lmKCFuKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBtb2R1bGUgd2FzIGF0dGVtcHRlZCB0byBiZSByZWdpc3RlcmVkISIpO3N3aXRjaChuLm1vZHVsZVR5cGUpe2Nhc2UidHJhY2UiOnAobik7YnJlYWs7Y2FzZSJ0cmFuc2Zvcm0iOmcobik7YnJlYWs7Y2FzZSJjb21wb25lbnQiOmgobik7YnJlYWs7Y2FzZSJsb2NhbGUiOnYobik7YnJlYWs7Y2FzZSJhcGlNZXRob2QiOnZhciBhPW4ubmFtZTtyLmFwaU1ldGhvZFJlZ2lzdHJ5W2FdPW4uZm47YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbW9kdWxlIHdhcyBhdHRlbXB0ZWQgdG8gYmUgcmVnaXN0ZXJlZCEiKX19fSxyLmdldE1vZHVsZT1mdW5jdGlvbihlKXt2YXIgdD1yLm1vZHVsZXNbXyhlKV07cmV0dXJuISF0JiZ0Ll9tb2R1bGV9LHIudHJhY2VJcz1mdW5jdGlvbihlLHQpe2lmKCJ2YXJpb3VzIj09PShlPV8oZSkpKXJldHVybiExO3ZhciBhPXIubW9kdWxlc1tlXTtyZXR1cm4gYXx8KGUmJiJhcmVhIiE9PWUmJm4ubG9nKCJVbnJlY29nbml6ZWQgdHJhY2UgdHlwZSAiK2UrIi4iKSxhPXIubW9kdWxlc1tjLnR5cGUuZGZsdF0pLCEhYS5jYXRlZ29yaWVzW3RdfSxyLmdldFRyYW5zZm9ybUluZGljZXM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9W10sbj1lLnRyYW5zZm9ybXN8fFtdLGE9MDthPG4ubGVuZ3RoO2ErKyluW2FdLnR5cGU9PT10JiZyLnB1c2goYSk7cmV0dXJuIHJ9LHIuaGFzVHJhbnNmb3JtPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUudHJhbnNmb3Jtc3x8W10sbj0wO248ci5sZW5ndGg7bisrKWlmKHJbbl0udHlwZT09PXQpcmV0dXJuITA7cmV0dXJuITF9LHIuZ2V0Q29tcG9uZW50TWV0aG9kPWZ1bmN0aW9uKGUsdCl7dmFyIG49ci5jb21wb25lbnRzUmVnaXN0cnlbZV07cmV0dXJuIG4mJm5bdF18fGF9LHIuY2FsbD1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50c1swXSx0PVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiByLmFwaU1ldGhvZFJlZ2lzdHJ5W2VdLmFwcGx5KG51bGwsdCl9fSx7Ii4vbGliL2RvbSI6MTk0LCIuL2xpYi9leHRlbmQiOjE5NiwiLi9saWIvaXNfcGxhaW5fb2JqZWN0IjoyMDMsIi4vbGliL2xvZ2dlcnMiOjIwNiwiLi9saWIvbm9vcCI6MjExLCIuL2xpYi9wdXNoX3VuaXF1ZSI6MjE2LCIuL3Bsb3RzL2F0dHJpYnV0ZXMiOjI0NCwiLi9wbG90cy9sYXlvdXRfYXR0cmlidXRlcyI6MjgwfV0sMjkxOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uL3JlZ2lzdHJ5IiksYT1lKCIuLi9saWIiKSxpPWEuZXh0ZW5kRmxhdCxvPWEuZXh0ZW5kRGVlcDtmdW5jdGlvbiBsKGUpe3ZhciB0O3N3aXRjaChlKXtjYXNlInRoZW1lc19fdGh1bWIiOnQ9e2F1dG9zaXplOiEwLHdpZHRoOjE1MCxoZWlnaHQ6MTUwLHRpdGxlOnt0ZXh0OiIifSxzaG93bGVnZW5kOiExLG1hcmdpbjp7bDo1LHI6NSx0OjUsYjo1LHBhZDowfSxhbm5vdGF0aW9uczpbXX07YnJlYWs7Y2FzZSJ0aHVtYm5haWwiOnQ9e3RpdGxlOnt0ZXh0OiIifSxoaWRlc291cmNlczohMCxzaG93bGVnZW5kOiExLGJvcmRlcndpZHRoOjAsYm9yZGVyY29sb3I6IiIsbWFyZ2luOntsOjEscjoxLHQ6MSxiOjEscGFkOjB9LGFubm90YXRpb25zOltdfTticmVhaztkZWZhdWx0OnQ9e319cmV0dXJuIHR9dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIHI7ZS5mcmFtZXdvcmsmJmUuZnJhbWV3b3JrLmlzUG9sYXImJihlPWUuZnJhbWV3b3JrLmdldENvbmZpZygpKTt2YXIgYSxzPWUuZGF0YSxjPWUubGF5b3V0LHU9byhbXSxzKSxmPW8oe30sYyxsKHQudGlsZUNsYXNzKSksZD1lLl9jb250ZXh0fHx7fTtpZih0LndpZHRoJiYoZi53aWR0aD10LndpZHRoKSx0LmhlaWdodCYmKGYuaGVpZ2h0PXQuaGVpZ2h0KSwidGh1bWJuYWlsIj09PXQudGlsZUNsYXNzfHwidGhlbWVzX190aHVtYiI9PT10LnRpbGVDbGFzcyl7Zi5hbm5vdGF0aW9ucz1bXTt2YXIgcD1PYmplY3Qua2V5cyhmKTtmb3Iocj0wO3I8cC5sZW5ndGg7cisrKWE9cFtyXSxbInhheGlzIiwieWF4aXMiLCJ6YXhpcyJdLmluZGV4T2YoYS5zbGljZSgwLDUpKT4tMSYmKGZbcFtyXV0udGl0bGU9e3RleHQ6IiJ9KTtmb3Iocj0wO3I8dS5sZW5ndGg7cisrKXt2YXIgaD11W3JdO2guc2hvd3NjYWxlPSExLGgubWFya2VyJiYoaC5tYXJrZXIuc2hvd3NjYWxlPSExKSxuLnRyYWNlSXMoaCwicGllLWxpa2UiKSYmKGgudGV4dHBvc2l0aW9uPSJub25lIil9fWlmKEFycmF5LmlzQXJyYXkodC5hbm5vdGF0aW9ucykpZm9yKHI9MDtyPHQuYW5ub3RhdGlvbnMubGVuZ3RoO3IrKylmLmFubm90YXRpb25zLnB1c2godC5hbm5vdGF0aW9uc1tyXSk7dmFyIGc9T2JqZWN0LmtleXMoZikuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXRjaCgvXnNjZW5lXGQqJC8pfSkpO2lmKGcubGVuZ3RoKXt2YXIgdj17fTtmb3IoInRodW1ibmFpbCI9PT10LnRpbGVDbGFzcyYmKHY9e3RpdGxlOnt0ZXh0OiIifSxzaG93YXhlc2xhYmVsczohMSxzaG93dGlja2xhYmVsczohMSxsaW5ldGlja2VuYWJsZTohMX0pLHI9MDtyPGcubGVuZ3RoO3IrKyl7dmFyIG09ZltnW3JdXTttLnhheGlzfHwobS54YXhpcz17fSksbS55YXhpc3x8KG0ueWF4aXM9e30pLG0uemF4aXN8fChtLnpheGlzPXt9KSxpKG0ueGF4aXMsdiksaShtLnlheGlzLHYpLGkobS56YXhpcyx2KSxtLl9zY2VuZT1udWxsfX12YXIgeT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0LnRpbGVDbGFzcyYmKHkuY2xhc3NOYW1lPXQudGlsZUNsYXNzKTt2YXIgeD17Z2Q6eSx0ZDp5LGxheW91dDpmLGRhdGE6dSxjb25maWc6e3N0YXRpY1Bsb3Q6dm9pZCAwPT09dC5zdGF0aWNQbG90fHx0LnN0YXRpY1Bsb3QscGxvdEdsUGl4ZWxSYXRpbzp2b2lkIDA9PT10LnBsb3RHbFBpeGVsUmF0aW8/Mjp0LnBsb3RHbFBpeGVsUmF0aW8sZGlzcGxheWxvZ286dC5kaXNwbGF5bG9nb3x8ITEsc2hvd0xpbms6dC5zaG93TGlua3x8ITEsc2hvd1RpcHM6dC5zaG93VGlwc3x8ITEsbWFwYm94QWNjZXNzVG9rZW46ZC5tYXBib3hBY2Nlc3NUb2tlbn19O3JldHVybiJ0cmFuc3BhcmVudCIhPT10LnNldEJhY2tncm91bmQmJih4LmNvbmZpZy5zZXRCYWNrZ3JvdW5kPXQuc2V0QmFja2dyb3VuZHx8Im9wYXF1ZSIpLHguZ2QuZGVmYXVsdExheW91dD1sKHQudGlsZUNsYXNzKSx4fX0seyIuLi9saWIiOjIwMiwiLi4vcmVnaXN0cnkiOjI5MH1dLDI5MjpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi9saWIiKSxhPWUoIi4uL3Bsb3RfYXBpL3RvX2ltYWdlIiksaT1lKCIuL2ZpbGVzYXZlciIpLG89ZSgiLi9oZWxwZXJzIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIHI7cmV0dXJuIG4uaXNQbGFpbk9iamVjdChlKXx8KHI9bi5nZXRHcmFwaERpdihlKSksKHQ9dHx8e30pLmZvcm1hdD10LmZvcm1hdHx8InBuZyIsdC53aWR0aD10LndpZHRofHxudWxsLHQuaGVpZ2h0PXQuaGVpZ2h0fHxudWxsLHQuaW1hZ2VEYXRhT25seT0hMCxuZXcgUHJvbWlzZSgoZnVuY3Rpb24obCxzKXtyJiZyLl9zbmFwc2hvdEluUHJvZ3Jlc3MmJnMobmV3IEVycm9yKCJTbmFwc2hvdHRpbmcgYWxyZWFkeSBpbiBwcm9ncmVzcy4iKSksbi5pc0lFKCkmJiJzdmciIT09dC5mb3JtYXQmJnMobmV3IEVycm9yKG8uTVNHX0lFX0JBRF9GT1JNQVQpKSxyJiYoci5fc25hcHNob3RJblByb2dyZXNzPSEwKTt2YXIgYz1hKGUsdCksdT10LmZpbGVuYW1lfHxlLmZufHwibmV3cGxvdCI7dSs9Ii4iK3QuZm9ybWF0LnJlcGxhY2UoIi0iLCIuIiksYy50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gciYmKHIuX3NuYXBzaG90SW5Qcm9ncmVzcz0hMSksaShlLHUsdC5mb3JtYXQpfSkpLnRoZW4oKGZ1bmN0aW9uKGUpe2woZSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3ImJihyLl9zbmFwc2hvdEluUHJvZ3Jlc3M9ITEpLHMoZSl9KSl9KSl9fSx7Ii4uL2xpYiI6MjAyLCIuLi9wbG90X2FwaS90b19pbWFnZSI6MjQwLCIuL2ZpbGVzYXZlciI6MjkzLCIuL2hlbHBlcnMiOjI5NH1dLDI5MzpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi9saWIiKSxhPWUoIi4vaGVscGVycyIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpLG89ImRvd25sb2FkImluIGk7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihsLHMpe3ZhciBjLHU7aWYobi5pc0lFOW9yQmVsb3coKSYmcyhuZXcgRXJyb3IoIklFIDwgMTAgdW5zdXBwb3J0ZWQiKSksbi5pc1NhZmFyaSgpKXt2YXIgZj0ic3ZnIj09PXI/IiwiOiI7YmFzZTY0LCI7cmV0dXJuIGEub2N0ZXRTdHJlYW0oZitlbmNvZGVVUklDb21wb25lbnQoZSkpLGwodCl9cmV0dXJuIG4uaXNJRSgpPyhjPWEuY3JlYXRlQmxvYihlLCJzdmciKSx3aW5kb3cubmF2aWdhdG9yLm1zU2F2ZUJsb2IoYyx0KSxjPW51bGwsbCh0KSk6bz8oYz1hLmNyZWF0ZUJsb2IoZSxyKSx1PWEuY3JlYXRlT2JqZWN0VVJMKGMpLGkuaHJlZj11LGkuZG93bmxvYWQ9dCxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGkpLGkuY2xpY2soKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGkpLGEucmV2b2tlT2JqZWN0VVJMKHUpLGM9bnVsbCxsKHQpKTp2b2lkIHMobmV3IEVycm9yKCJkb3dubG9hZCBlcnJvciIpKX0pKX19LHsiLi4vbGliIjoyMDIsIi4vaGVscGVycyI6Mjk0fV0sMjk0OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uL3JlZ2lzdHJ5Iik7ci5nZXREZWxheT1mdW5jdGlvbihlKXtyZXR1cm4gZS5faGFzJiYoZS5faGFzKCJnbDNkIil8fGUuX2hhcygiZ2wyZCIpfHxlLl9oYXMoIm1hcGJveCIpKT81MDA6MH0sci5nZXRSZWRyYXdGdW5jPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuX2Z1bGxMYXlvdXR8fHt9OyEodC5faGFzJiZ0Ll9oYXMoInBvbGFyIikpJiZlLmRhdGEmJmUuZGF0YVswXSYmZS5kYXRhWzBdLnJ8fG4uZ2V0Q29tcG9uZW50TWV0aG9kKCJjb2xvcmJhciIsImRyYXciKShlKX19LHIuZW5jb2RlU1ZHPWZ1bmN0aW9uKGUpe3JldHVybiJkYXRhOmltYWdlL3N2Zyt4bWwsIitlbmNvZGVVUklDb21wb25lbnQoZSl9LHIuZW5jb2RlSlNPTj1mdW5jdGlvbihlKXtyZXR1cm4iZGF0YTphcHBsaWNhdGlvbi9qc29uLCIrZW5jb2RlVVJJQ29tcG9uZW50KGUpfTt2YXIgYT13aW5kb3cuVVJMfHx3aW5kb3cud2Via2l0VVJMO3IuY3JlYXRlT2JqZWN0VVJMPWZ1bmN0aW9uKGUpe3JldHVybiBhLmNyZWF0ZU9iamVjdFVSTChlKX0sci5yZXZva2VPYmplY3RVUkw9ZnVuY3Rpb24oZSl7cmV0dXJuIGEucmV2b2tlT2JqZWN0VVJMKGUpfSxyLmNyZWF0ZUJsb2I9ZnVuY3Rpb24oZSx0KXtpZigic3ZnIj09PXQpcmV0dXJuIG5ldyB3aW5kb3cuQmxvYihbZV0se3R5cGU6ImltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCJ9KTtpZigiZnVsbC1qc29uIj09PXQpcmV0dXJuIG5ldyB3aW5kb3cuQmxvYihbZV0se3R5cGU6ImFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtOCJ9KTt2YXIgcj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscj1uZXcgQXJyYXlCdWZmZXIodCksbj1uZXcgVWludDhBcnJheShyKSxhPTA7YTx0O2ErKyluW2FdPWUuY2hhckNvZGVBdChhKTtyZXR1cm4gcn0od2luZG93LmF0b2IoZSkpO3JldHVybiBuZXcgd2luZG93LkJsb2IoW3JdLHt0eXBlOiJpbWFnZS8iK3R9KX0sci5vY3RldFN0cmVhbT1mdW5jdGlvbihlKXtkb2N1bWVudC5sb2NhdGlvbi5ocmVmPSJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIrZX0sci5JTUFHRV9VUkxfUFJFRklYPS9eZGF0YTppbWFnZVwvXHcrO2Jhc2U2NCwvLHIuTVNHX0lFX0JBRF9GT1JNQVQ9IlNvcnJ5IElFIGRvZXMgbm90IHN1cHBvcnQgZG93bmxvYWRpbmcgZnJvbSBjYW52YXMuIFRyeSB7Zm9ybWF0OidzdmcnfSBpbnN0ZWFkLiJ9LHsiLi4vcmVnaXN0cnkiOjI5MH1dLDI5NTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuL2hlbHBlcnMiKSxhPXtnZXREZWxheTpuLmdldERlbGF5LGdldFJlZHJhd0Z1bmM6bi5nZXRSZWRyYXdGdW5jLGNsb25lOmUoIi4vY2xvbmVwbG90IiksdG9TVkc6ZSgiLi90b3N2ZyIpLHN2Z1RvSW1nOmUoIi4vc3ZndG9pbWciKSx0b0ltYWdlOmUoIi4vdG9pbWFnZSIpLGRvd25sb2FkSW1hZ2U6ZSgiLi9kb3dubG9hZCIpfTt0LmV4cG9ydHM9YX0seyIuL2Nsb25lcGxvdCI6MjkxLCIuL2Rvd25sb2FkIjoyOTIsIi4vaGVscGVycyI6Mjk0LCIuL3N2Z3RvaW1nIjoyOTYsIi4vdG9pbWFnZSI6Mjk3LCIuL3Rvc3ZnIjoyOTh9XSwyOTY6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vbGliIiksYT1lKCJldmVudHMiKS5FdmVudEVtaXR0ZXIsaT1lKCIuL2hlbHBlcnMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5lbWl0dGVyfHxuZXcgYSxyPW5ldyBQcm9taXNlKChmdW5jdGlvbihhLG8pe3ZhciBsPXdpbmRvdy5JbWFnZSxzPWUuc3ZnLGM9ZS5mb3JtYXR8fCJwbmciO2lmKG4uaXNJRSgpJiYic3ZnIiE9PWMpe3ZhciB1PW5ldyBFcnJvcihpLk1TR19JRV9CQURfRk9STUFUKTtyZXR1cm4gbyh1KSxlLnByb21pc2U/cjp0LmVtaXQoImVycm9yIix1KX12YXIgZixkLHA9ZS5jYW52YXMsaD1lLnNjYWxlfHwxLGc9ZS53aWR0aHx8MzAwLHY9ZS5oZWlnaHR8fDE1MCxtPWgqZyx5PWgqdix4PXAuZ2V0Q29udGV4dCgiMmQiKSxiPW5ldyBsOyJzdmciPT09Y3x8bi5pc0lFOW9yQmVsb3coKXx8bi5pc1NhZmFyaSgpP2Q9aS5lbmNvZGVTVkcocyk6KGY9aS5jcmVhdGVCbG9iKHMsInN2ZyIpLGQ9aS5jcmVhdGVPYmplY3RVUkwoZikpLHAud2lkdGg9bSxwLmhlaWdodD15LGIub25sb2FkPWZ1bmN0aW9uKCl7dmFyIHI7c3dpdGNoKGY9bnVsbCxpLnJldm9rZU9iamVjdFVSTChkKSwic3ZnIiE9PWMmJnguZHJhd0ltYWdlKGIsMCwwLG0seSksYyl7Y2FzZSJqcGVnIjpyPXAudG9EYXRhVVJMKCJpbWFnZS9qcGVnIik7YnJlYWs7Y2FzZSJwbmciOnI9cC50b0RhdGFVUkwoImltYWdlL3BuZyIpO2JyZWFrO2Nhc2Uid2VicCI6cj1wLnRvRGF0YVVSTCgiaW1hZ2Uvd2VicCIpO2JyZWFrO2Nhc2Uic3ZnIjpyPWQ7YnJlYWs7ZGVmYXVsdDp2YXIgbj0iSW1hZ2UgZm9ybWF0IGlzIG5vdCBqcGVnLCBwbmcsIHN2ZyBvciB3ZWJwLiI7aWYobyhuZXcgRXJyb3IobikpLCFlLnByb21pc2UpcmV0dXJuIHQuZW1pdCgiZXJyb3IiLG4pfWEociksZS5wcm9taXNlfHx0LmVtaXQoInN1Y2Nlc3MiLHIpfSxiLm9uZXJyb3I9ZnVuY3Rpb24ocil7aWYoZj1udWxsLGkucmV2b2tlT2JqZWN0VVJMKGQpLG8ociksIWUucHJvbWlzZSlyZXR1cm4gdC5lbWl0KCJlcnJvciIscil9LGIuc3JjPWR9KSk7cmV0dXJuIGUucHJvbWlzZT9yOnR9fSx7Ii4uL2xpYiI6MjAyLCIuL2hlbHBlcnMiOjI5NCxldmVudHM6Nn1dLDI5NzpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJldmVudHMiKS5FdmVudEVtaXR0ZXIsYT1lKCIuLi9yZWdpc3RyeSIpLGk9ZSgiLi4vbGliIiksbz1lKCIuL2hlbHBlcnMiKSxsPWUoIi4vY2xvbmVwbG90Iikscz1lKCIuL3Rvc3ZnIiksYz1lKCIuL3N2Z3RvaW1nIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9bmV3IG4sdT1sKGUse2Zvcm1hdDoicG5nIn0pLGY9dS5nZDtmLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsZi5zdHlsZS5sZWZ0PSItNTAwMHB4Iixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGYpO3ZhciBkPW8uZ2V0UmVkcmF3RnVuYyhmKTtyZXR1cm4gYS5jYWxsKCJwbG90IixmLHUuZGF0YSx1LmxheW91dCx1LmNvbmZpZykudGhlbihkKS50aGVuKChmdW5jdGlvbigpe3ZhciBlPW8uZ2V0RGVsYXkoZi5fZnVsbExheW91dCk7c2V0VGltZW91dCgoZnVuY3Rpb24oKXt2YXIgZT1zKGYpLG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7bi5pZD1pLnJhbmRzdHIoKSwocj1jKHtmb3JtYXQ6dC5mb3JtYXQsd2lkdGg6Zi5fZnVsbExheW91dC53aWR0aCxoZWlnaHQ6Zi5fZnVsbExheW91dC5oZWlnaHQsY2FudmFzOm4sZW1pdHRlcjpyLHN2ZzplfSkpLmNsZWFuPWZ1bmN0aW9uKCl7ZiYmZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChmKX19KSxlKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7ci5lbWl0KCJlcnJvciIsZSl9KSkscn19LHsiLi4vbGliIjoyMDIsIi4uL3JlZ2lzdHJ5IjoyOTAsIi4vY2xvbmVwbG90IjoyOTEsIi4vaGVscGVycyI6Mjk0LCIuL3N2Z3RvaW1nIjoyOTYsIi4vdG9zdmciOjI5OCxldmVudHM6Nn1dLDI5ODpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJkMyIpLGE9ZSgiLi4vbGliIiksaT1lKCIuLi9jb21wb25lbnRzL2RyYXdpbmciKSxvPWUoIi4uL2NvbXBvbmVudHMvY29sb3IiKSxsPWUoIi4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIikscz0vIi9nLGM9bmV3IFJlZ0V4cCgnKCJUT0JFU1RSSVBQRUQpfChUT0JFU1RSSVBQRUQiKScsImciKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe3ZhciB1LGY9ZS5fZnVsbExheW91dCxkPWYuX3BhcGVyLHA9Zi5fdG9wcGFwZXIsaD1mLndpZHRoLGc9Zi5oZWlnaHQ7ZC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5jYWxsKGkuc2V0UmVjdCwwLDAsaCxnKS5jYWxsKG8uZmlsbCxmLnBhcGVyX2JnY29sb3IpO3ZhciB2PWYuX2Jhc2VQbG90TW9kdWxlc3x8W107Zm9yKHU9MDt1PHYubGVuZ3RoO3UrKyl7dmFyIG09dlt1XTttLnRvU1ZHJiZtLnRvU1ZHKGUpfWlmKHApe3ZhciB5PXAubm9kZSgpLmNoaWxkTm9kZXMseD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh5KTtmb3IodT0wO3U8eC5sZW5ndGg7dSsrKXt2YXIgYj14W3VdO2IuY2hpbGROb2Rlcy5sZW5ndGgmJmQubm9kZSgpLmFwcGVuZENoaWxkKGIpfX1pZihmLl9kcmFnZ2VycyYmZi5fZHJhZ2dlcnMucmVtb3ZlKCksZC5ub2RlKCkuc3R5bGUuYmFja2dyb3VuZD0iIixkLnNlbGVjdEFsbCgidGV4dCIpLmF0dHIoeyJkYXRhLXVuZm9ybWF0dGVkIjpudWxsLCJkYXRhLW1hdGgiOm51bGx9KS5lYWNoKChmdW5jdGlvbigpe3ZhciBlPW4uc2VsZWN0KHRoaXMpO2lmKCJoaWRkZW4iIT09dGhpcy5zdHlsZS52aXNpYmlsaXR5JiYibm9uZSIhPT10aGlzLnN0eWxlLmRpc3BsYXkpe2Uuc3R5bGUoe3Zpc2liaWxpdHk6bnVsbCxkaXNwbGF5Om51bGx9KTt2YXIgdD10aGlzLnN0eWxlLmZvbnRGYW1pbHk7dCYmLTEhPT10LmluZGV4T2YoJyInKSYmZS5zdHlsZSgiZm9udC1mYW1pbHkiLHQucmVwbGFjZShzLCJUT0JFU1RSSVBQRUQiKSl9ZWxzZSBlLnJlbW92ZSgpfSkpLGYuX2dyYWRpZW50VXJsUXVlcnlQYXJ0cyl7dmFyIF89W107Zm9yKHZhciB3IGluIGYuX2dyYWRpZW50VXJsUXVlcnlQYXJ0cylfLnB1c2godyk7Xy5sZW5ndGgmJmQuc2VsZWN0QWxsKF8uam9pbigiLCIpKS5lYWNoKChmdW5jdGlvbigpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLHQ9dGhpcy5zdHlsZS5maWxsO3QmJi0xIT09dC5pbmRleE9mKCJ1cmwoIikmJmUuc3R5bGUoImZpbGwiLHQucmVwbGFjZShzLCJUT0JFU1RSSVBQRUQiKSk7dmFyIHI9dGhpcy5zdHlsZS5zdHJva2U7ciYmLTEhPT1yLmluZGV4T2YoInVybCgiKSYmZS5zdHlsZSgic3Ryb2tlIixyLnJlcGxhY2UocywiVE9CRVNUUklQUEVEIikpfSkpfSJwZGYiIT09dCYmImVwcyIhPT10fHxkLnNlbGVjdEFsbCgiI01hdGhKYXhfU1ZHX2dseXBocyBwYXRoIikuYXR0cigic3Ryb2tlLXdpZHRoIiwwKSxkLm5vZGUoKS5zZXRBdHRyaWJ1dGVOUyhsLnhtbG5zLCJ4bWxucyIsbC5zdmcpLGQubm9kZSgpLnNldEF0dHJpYnV0ZU5TKGwueG1sbnMsInhtbG5zOnhsaW5rIixsLnhsaW5rKSwic3ZnIj09PXQmJnImJihkLmF0dHIoIndpZHRoIixyKmgpLGQuYXR0cigiaGVpZ2h0IixyKmcpLGQuYXR0cigidmlld0JveCIsIjAgMCAiK2grIiAiK2cpKTt2YXIgVD0obmV3IHdpbmRvdy5YTUxTZXJpYWxpemVyKS5zZXJpYWxpemVUb1N0cmluZyhkLm5vZGUoKSk7cmV0dXJuIFQ9ZnVuY3Rpb24oZSl7dmFyIHQ9bi5zZWxlY3QoImJvZHkiKS5hcHBlbmQoImRpdiIpLnN0eWxlKHtkaXNwbGF5OiJub25lIn0pLmh0bWwoIiIpLHI9ZS5yZXBsYWNlKC8oJlteO10qOykvZ2ksKGZ1bmN0aW9uKGUpe3JldHVybiImbHQ7Ij09PWU/IiYjNjA7IjoiJnJ0OyI9PT1lPyImIzYyOyI6LTEhPT1lLmluZGV4T2YoIjwiKXx8LTEhPT1lLmluZGV4T2YoIj4iKT8iIjp0Lmh0bWwoZSkudGV4dCgpfSkpO3JldHVybiB0LnJlbW92ZSgpLHJ9KFQpLFQ9KFQ9VC5yZXBsYWNlKC8mKD8hXHcrO3xcI1swLTldKzt8IFwjeFswLTlBLUZdKzspL2csIiZhbXA7IikpLnJlcGxhY2UoYywiJyIpLGEuaXNJRSgpJiYoVD0oVD0oVD1ULnJlcGxhY2UoLyIvZ2ksIiciKSkucmVwbGFjZSgvKFwoJyMpKFteJ10qKSgnXCkpL2dpLCcoIiMkMiIpJykpLnJlcGxhY2UoLyhcXCcpL2dpLCciJykpLFR9fSx7Ii4uL2NvbXBvbmVudHMvY29sb3IiOjc1LCIuLi9jb21wb25lbnRzL2RyYXdpbmciOjk3LCIuLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6MTgyLCIuLi9saWIiOjIwMixkMzo5fV0sMjk5OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2xpYiIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWVbcl0uaT1yO24ubWVyZ2VBcnJheSh0LnRleHQsZSwidHgiKSxuLm1lcmdlQXJyYXkodC5ob3ZlcnRleHQsZSwiaHR4Iik7dmFyIGE9dC5tYXJrZXI7aWYoYSl7bi5tZXJnZUFycmF5KGEub3BhY2l0eSxlLCJtbyIsITApLG4ubWVyZ2VBcnJheShhLmNvbG9yLGUsIm1jIik7dmFyIGk9YS5saW5lO2kmJihuLm1lcmdlQXJyYXkoaS5jb2xvcixlLCJtbGMiKSxuLm1lcmdlQXJyYXlDYXN0UG9zaXRpdmUoaS53aWR0aCxlLCJtbHciKSl9fX0seyIuLi8uLi9saWIiOjIwMn1dLDMwMDpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxhPWUoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsaT1lKCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikudGV4dHRlbXBsYXRlQXR0cnMsbz1lKCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGw9ZSgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIikscz1lKCIuL2NvbnN0YW50cyIpLGM9ZSgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsdT1sKHtlZGl0VHlwZToiY2FsYyIsYXJyYXlPazohMCxjb2xvckVkaXRUeXBlOiJzdHlsZSJ9KSxmPWMoe30sbi5tYXJrZXIubGluZS53aWR0aCx7ZGZsdDowfSksZD1jKHt3aWR0aDpmLGVkaXRUeXBlOiJjYWxjIn0sbygibWFya2VyLmxpbmUiKSkscD1jKHtsaW5lOmQsZWRpdFR5cGU6ImNhbGMifSxvKCJtYXJrZXIiKSx7b3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixhcnJheU9rOiEwLGRmbHQ6MSxtaW46MCxtYXg6MSxlZGl0VHlwZToic3R5bGUifX0pO3QuZXhwb3J0cz17eDpuLngseDA6bi54MCxkeDpuLmR4LHk6bi55LHkwOm4ueTAsZHk6bi5keSx4cGVyaW9kOm4ueHBlcmlvZCx5cGVyaW9kOm4ueXBlcmlvZCx4cGVyaW9kMDpuLnhwZXJpb2QwLHlwZXJpb2QwOm4ueXBlcmlvZDAseHBlcmlvZGFsaWdubWVudDpuLnhwZXJpb2RhbGlnbm1lbnQseXBlcmlvZGFsaWdubWVudDpuLnlwZXJpb2RhbGlnbm1lbnQsdGV4dDpuLnRleHQsdGV4dHRlbXBsYXRlOmkoe2VkaXRUeXBlOiJwbG90In0se2tleXM6cy5ldmVudERhdGFLZXlzfSksaG92ZXJ0ZXh0Om4uaG92ZXJ0ZXh0LGhvdmVydGVtcGxhdGU6YSh7fSx7a2V5czpzLmV2ZW50RGF0YUtleXN9KSx0ZXh0cG9zaXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluc2lkZSIsIm91dHNpZGUiLCJhdXRvIiwibm9uZSJdLGRmbHQ6Im5vbmUiLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxpbnNpZGV0ZXh0YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJlbmQiLCJtaWRkbGUiLCJzdGFydCJdLGRmbHQ6ImVuZCIsZWRpdFR5cGU6InBsb3QifSx0ZXh0YW5nbGU6e3ZhbFR5cGU6ImFuZ2xlIixkZmx0OiJhdXRvIixlZGl0VHlwZToicGxvdCJ9LHRleHRmb250OmMoe30sdSx7fSksaW5zaWRldGV4dGZvbnQ6Yyh7fSx1LHt9KSxvdXRzaWRldGV4dGZvbnQ6Yyh7fSx1LHt9KSxjb25zdHJhaW50ZXh0Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJpbnNpZGUiLCJvdXRzaWRlIiwiYm90aCIsIm5vbmUiXSxkZmx0OiJib3RoIixlZGl0VHlwZToiY2FsYyJ9LGNsaXBvbmF4aXM6Yyh7fSxuLmNsaXBvbmF4aXMse30pLG9yaWVudGF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ2IiwiaCJdLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sYmFzZTp7dmFsVHlwZToiYW55IixkZmx0Om51bGwsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LG9mZnNldDp7dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxtaW46MCxhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0sbWFya2VyOnAsb2Zmc2V0Z3JvdXA6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LGFsaWdubWVudGdyb3VwOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxzZWxlY3RlZDp7bWFya2VyOntvcGFjaXR5Om4uc2VsZWN0ZWQubWFya2VyLm9wYWNpdHksY29sb3I6bi5zZWxlY3RlZC5tYXJrZXIuY29sb3IsZWRpdFR5cGU6InN0eWxlIn0sdGV4dGZvbnQ6bi5zZWxlY3RlZC50ZXh0Zm9udCxlZGl0VHlwZToic3R5bGUifSx1bnNlbGVjdGVkOnttYXJrZXI6e29wYWNpdHk6bi51bnNlbGVjdGVkLm1hcmtlci5vcGFjaXR5LGNvbG9yOm4udW5zZWxlY3RlZC5tYXJrZXIuY29sb3IsZWRpdFR5cGU6InN0eWxlIn0sdGV4dGZvbnQ6bi51bnNlbGVjdGVkLnRleHRmb250LGVkaXRUeXBlOiJzdHlsZSJ9LHI6bi5yLHQ6bi50LF9kZXByZWNhdGVkOntiYXJkaXI6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGVkaXRUeXBlOiJjYWxjIix2YWx1ZXM6WyJ2IiwiaCJdfX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo4MiwiLi4vLi4vbGliL2V4dGVuZCI6MTk2LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjI3NiwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6Mjg5LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjMzMCwiLi9jb25zdGFudHMiOjMwMn1dLDMwMTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9ZSgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2FsaWduX3BlcmlvZCIpLGk9ZSgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiKS5oYXNDb2xvcnNjYWxlLG89ZSgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKSxsPWUoIi4vYXJyYXlzX3RvX2NhbGNkYXRhIikscz1lKCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIHIsYyx1LGYsZD1uLmdldEZyb21JZChlLHQueGF4aXN8fCJ4IikscD1uLmdldEZyb21JZChlLHQueWF4aXN8fCJ5IiksaD17bXNVVEM6ISghdC5iYXNlJiYwIT09dC5iYXNlKX07ImgiPT09dC5vcmllbnRhdGlvbj8ocj1kLm1ha2VDYWxjZGF0YSh0LCJ4IixoKSx1PXAubWFrZUNhbGNkYXRhKHQsInkiKSxjPWEodCxwLCJ5Iix1KSxmPSEhdC55cGVyaW9kYWxpZ25tZW50KToocj1wLm1ha2VDYWxjZGF0YSh0LCJ5IixoKSx1PWQubWFrZUNhbGNkYXRhKHQsIngiKSxjPWEodCxkLCJ4Iix1KSxmPSEhdC54cGVyaW9kYWxpZ25tZW50KTtmb3IodmFyIGc9TWF0aC5taW4oYy5sZW5ndGgsci5sZW5ndGgpLHY9bmV3IEFycmF5KGcpLG09MDttPGc7bSsrKXZbbV09e3A6Y1ttXSxzOnJbbV19LGYmJih2W21dLm9yaWdfcD11W21dKSx0LmlkcyYmKHZbbV0uaWQ9U3RyaW5nKHQuaWRzW21dKSk7cmV0dXJuIGkodCwibWFya2VyIikmJm8oZSx0LHt2YWxzOnQubWFya2VyLmNvbG9yLGNvbnRhaW5lclN0cjoibWFya2VyIixjTGV0dGVyOiJjIn0pLGkodCwibWFya2VyLmxpbmUiKSYmbyhlLHQse3ZhbHM6dC5tYXJrZXIubGluZS5jb2xvcixjb250YWluZXJTdHI6Im1hcmtlci5saW5lIixjTGV0dGVyOiJjIn0pLGwodix0KSxzKHYsdCksdn19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjgzLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyI6ODYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiOjI0NSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjI0OCwiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiI6MzMyLCIuL2FycmF5c190b19jYWxjZGF0YSI6Mjk5fV0sMzAyOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz17VEVYVFBBRDozLGV2ZW50RGF0YUtleXM6WyJ2YWx1ZSIsImxhYmVsIl19fSx7fV0sMzAzOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoImZhc3QtaXNudW1lcmljIiksYT1lKCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5LGk9ZSgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxvPWUoIi4uLy4uL3JlZ2lzdHJ5IiksbD1lKCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLHM9ZSgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0cmFpbnRzIikuZ2V0QXhpc0dyb3VwLGM9ZSgiLi9zaWV2ZS5qcyIpO2Z1bmN0aW9uIHUoZSx0LHIsbyx1KXtpZihvLmxlbmd0aCl7dmFyIGIsXyx3LFQ7c3dpdGNoKGZ1bmN0aW9uKGUsdCl7dmFyIHIsaTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbyxsPXRbcl0scz1sWzBdLnRyYWNlLGM9ImZ1bm5lbCI9PT1zLnR5cGU/cy5fYmFzZTpzLmJhc2UsdT0iaCI9PT1zLm9yaWVudGF0aW9uP3MueGNhbGVuZGFyOnMueWNhbGVuZGFyLGY9ImNhdGVnb3J5Ij09PWUudHlwZXx8Im11bHRpY2F0ZWdvcnkiPT09ZS50eXBlP2Z1bmN0aW9uKCl7cmV0dXJuIG51bGx9OmUuZDJjO2lmKGEoYykpe2ZvcihpPTA7aTxNYXRoLm1pbihjLmxlbmd0aCxsLmxlbmd0aCk7aSsrKW89ZihjW2ldLDAsdSksbihvKT8obFtpXS5iPStvLGxbaV0uaGFzQj0xKTpsW2ldLmI9MDtmb3IoO2k8bC5sZW5ndGg7aSsrKWxbaV0uYj0wfWVsc2V7bz1mKGMsMCx1KTt2YXIgZD1uKG8pO2ZvcihvPWQ/bzowLGk9MDtpPGwubGVuZ3RoO2krKylsW2ldLmI9byxkJiYobFtpXS5oYXNCPTEpfX19KHIsbyksdS5tb2RlKXtjYXNlIm92ZXJsYXkiOmYodCxyLG8sdSk7YnJlYWs7Y2FzZSJncm91cCI6Zm9yKGI9W10sXz1bXSx3PTA7dzxvLmxlbmd0aDt3Kyspdm9pZCAwPT09KFQ9b1t3XSlbMF0udHJhY2Uub2Zmc2V0P18ucHVzaChUKTpiLnB1c2goVCk7Xy5sZW5ndGgmJmZ1bmN0aW9uKGUsdCxyLG4sYSl7dmFyIG89bmV3IGMobix7c2VwTmVnVmFsOiExLG92ZXJsYXBOb01lcmdlOiFhLm5vcm19KTsoZnVuY3Rpb24oZSx0LHIsbil7Zm9yKHZhciBhPWUuX2Z1bGxMYXlvdXQsaT1yLnBvc2l0aW9ucyxvPXIuZGlzdGluY3RQb3NpdGlvbnMsbD1yLm1pbkRpZmYsYz1yLnRyYWNlcyx1PWMubGVuZ3RoLGY9aS5sZW5ndGghPT1vLmxlbmd0aCxkPWwqKDEtbi5nYXApLHY9cyhhLHQuX2lkKStjWzBdWzBdLnRyYWNlLm9yaWVudGF0aW9uLG09YS5fYWxpZ25tZW50T3B0c1t2XXx8e30seT0wO3k8dTt5Kyspe3ZhciB4LGIsXz1jW3ldLHc9X1swXS50cmFjZSxUPW1bdy5hbGlnbm1lbnRncm91cF18fHt9LGs9T2JqZWN0LmtleXMoVC5vZmZzZXRHcm91cHN8fHt9KS5sZW5ndGgsTT0oeD1rP2QvazpmP2QvdTpkKSooMS0obi5ncm91cGdhcHx8MCkpO2I9az8oKDIqdy5fb2Zmc2V0SW5kZXgrMS1rKSp4LU0pLzI6Zj8oKDIqeSsxLXUpKngtTSkvMjotTS8yO3ZhciBBPV9bMF0udDtBLmJhcndpZHRoPU0sQS5wb2Zmc2V0PWIsQS5iYXJncm91cHdpZHRoPWQsQS5iYXJkZWx0YT1sfXIuYmluV2lkdGg9Y1swXVswXS50LmJhcndpZHRoLzEwMCxwKHIpLGgodCxyKSxnKHQscixmKX0pKGUsdCxvLGEpLGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLnRyYWNlcyxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07aWYodm9pZCAwPT09blswXS50cmFjZS5iYXNlKWZvcih2YXIgYT1uZXcgYyhbbl0se3NlcE5lZ1ZhbDohMCxvdmVybGFwTm9NZXJnZTohMH0pLG89MDtvPG4ubGVuZ3RoO28rKyl7dmFyIGw9bltvXTtpZihsLnAhPT1pKXt2YXIgcz1hLnB1dChsLnAsbC5iK2wucyk7cyYmKGwuYj1zKX19fX0obyksYS5ub3JtPyhtKG8pLHkocixvLGEpKTp2KHIsbyl9KGUsdCxyLF8sdSksYi5sZW5ndGgmJmYodCxyLGIsdSk7YnJlYWs7Y2FzZSJzdGFjayI6Y2FzZSJyZWxhdGl2ZSI6Zm9yKGI9W10sXz1bXSx3PTA7dzxvLmxlbmd0aDt3Kyspdm9pZCAwPT09KFQ9b1t3XSlbMF0udHJhY2UuYmFzZT9fLnB1c2goVCk6Yi5wdXNoKFQpO18ubGVuZ3RoJiZmdW5jdGlvbihlLHQscixuLGEpe3ZhciBvPW5ldyBjKG4se3NlcE5lZ1ZhbDoicmVsYXRpdmUiPT09YS5tb2RlLG92ZXJsYXBOb01lcmdlOiEoYS5ub3JtfHwic3RhY2siPT09YS5tb2RlfHwicmVsYXRpdmUiPT09YS5tb2RlKX0pO2QodCxvLGEpLGZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLG8scyxjLHUsZj14KGUpLGQ9dC50cmFjZXM7Zm9yKHM9MDtzPGQubGVuZ3RoO3MrKylpZihuPWRbc10sImZ1bm5lbCI9PT0oYT1uWzBdLnRyYWNlKS50eXBlKWZvcihjPTA7YzxuLmxlbmd0aDtjKyspKHU9bltjXSkucyE9PWkmJnQucHV0KHUucCwtLjUqdS5zKTtmb3Iocz0wO3M8ZC5sZW5ndGg7cysrKXtuPWRbc10sYT1uWzBdLnRyYWNlLG89ImZ1bm5lbCI9PT1hLnR5cGU7dmFyIHA9W107Zm9yKGM9MDtjPG4ubGVuZ3RoO2MrKylpZigodT1uW2NdKS5zIT09aSl7dmFyIGg7aD1vP3Uuczp1LnMrdS5iO3ZhciBnPXQucHV0KHUucCxoKSx2PWcraDt1LmI9Zyx1W2ZdPXYsci5ub3JtfHwocC5wdXNoKHYpLHUuaGFzQiYmcC5wdXNoKGcpKX1yLm5vcm18fChhLl9leHRyZW1lc1tlLl9pZF09bC5maW5kRXh0cmVtZXMoZSxwLHt0b3plcm86ITAscGFkZGVkOiEwfSkpfX0ocixvLGEpO2Zvcih2YXIgcz0wO3M8bi5sZW5ndGg7cysrKWZvcih2YXIgdT1uW3NdLGY9MDtmPHUubGVuZ3RoO2YrKyl7dmFyIHA9dVtmXTtpZihwLnMhPT1pKXAuYitwLnM9PT1vLmdldChwLnAscC5zKSYmKHAuX291dG1vc3Q9ITApfWEubm9ybSYmeShyLG8sYSl9KDAsdCxyLF8sdSksYi5sZW5ndGgmJmYodCxyLGIsdSl9IWZ1bmN0aW9uKGUsdCl7dmFyIHIsYSxpLG89eCh0KSxsPXt9LHM9MS8wLGM9LTEvMDtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKWZvcihpPWVbcl0sYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgdT1pW2FdLnA7bih1KSYmKHM9TWF0aC5taW4ocyx1KSxjPU1hdGgubWF4KGMsdSkpfXZhciBmPTFlNC8oYy1zKSxkPWwucm91bmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIFN0cmluZyhNYXRoLnJvdW5kKGYqKGUtcykpKX07Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKyl7KGk9ZVtyXSlbMF0udC5leHRlbnRzPWw7dmFyIHA9aVswXS50LnBvZmZzZXQsaD1BcnJheS5pc0FycmF5KHApO2ZvcihhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBnPWlbYV0sdj1nW29dLWcudy8yO2lmKG4odikpe3ZhciBtPWdbb10rZy53LzIseT1kKGcucCk7bFt5XT9sW3ldPVtNYXRoLm1pbih2LGxbeV1bMF0pLE1hdGgubWF4KG0sbFt5XVsxXSldOmxbeV09W3YsbV19Zy5wMD1nLnArKGg/cFthXTpwKSxnLnAxPWcucDArZy53LGcuczA9Zy5iLGcuczE9Zy5zMCtnLnN9fX0obyx0KX19ZnVuY3Rpb24gZihlLHQscixuKXtmb3IodmFyIGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIGk9clthXSxvPW5ldyBjKFtpXSx7dW5pdE1pbkRpZmY6bi54Q2F0fHxuLnlDYXQsc2VwTmVnVmFsOiExLG92ZXJsYXBOb01lcmdlOiFuLm5vcm19KTtkKGUsbyxuKSxuLm5vcm0/KG0obykseSh0LG8sbikpOnYodCxvKX19ZnVuY3Rpb24gZChlLHQscil7Zm9yKHZhciBuPXQubWluRGlmZixhPXQudHJhY2VzLGk9biooMS1yLmdhcCksbz1pKigxLShyLmdyb3VwZ2FwfHwwKSksbD0tby8yLHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGM9YVtzXVswXS50O2MuYmFyd2lkdGg9byxjLnBvZmZzZXQ9bCxjLmJhcmdyb3Vwd2lkdGg9aSxjLmJhcmRlbHRhPW59dC5iaW5XaWR0aD1hWzBdWzBdLnQuYmFyd2lkdGgvMTAwLHAodCksaChlLHQpLGcoZSx0KX1mdW5jdGlvbiBwKGUpe3ZhciB0LHIsaT1lLnRyYWNlcztmb3IodD0wO3Q8aS5sZW5ndGg7dCsrKXt2YXIgbyxsPWlbdF0scz1sWzBdLGM9cy50cmFjZSx1PXMudCxmPWMuX29mZnNldHx8Yy5vZmZzZXQsZD11LnBvZmZzZXQ7aWYoYShmKSl7Zm9yKG89QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZiwwLGwubGVuZ3RoKSxyPTA7cjxvLmxlbmd0aDtyKyspbihvW3JdKXx8KG9bcl09ZCk7Zm9yKHI9by5sZW5ndGg7cjxsLmxlbmd0aDtyKyspby5wdXNoKGQpO3UucG9mZnNldD1vfWVsc2Ugdm9pZCAwIT09ZiYmKHUucG9mZnNldD1mKTt2YXIgcD1jLl93aWR0aHx8Yy53aWR0aCxoPXUuYmFyd2lkdGg7aWYoYShwKSl7dmFyIGc9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwocCwwLGwubGVuZ3RoKTtmb3Iocj0wO3I8Zy5sZW5ndGg7cisrKW4oZ1tyXSl8fChnW3JdPWgpO2ZvcihyPWcubGVuZ3RoO3I8bC5sZW5ndGg7cisrKWcucHVzaChoKTtpZih1LmJhcndpZHRoPWcsdm9pZCAwPT09Zil7Zm9yKG89W10scj0wO3I8bC5sZW5ndGg7cisrKW8ucHVzaChkKyhoLWdbcl0pLzIpO3UucG9mZnNldD1vfX1lbHNlIHZvaWQgMCE9PXAmJih1LmJhcndpZHRoPXAsdm9pZCAwPT09ZiYmKHUucG9mZnNldD1kKyhoLXApLzIpKX19ZnVuY3Rpb24gaChlLHQpe2Zvcih2YXIgcj10LnRyYWNlcyxuPXgoZSksYT0wO2E8ci5sZW5ndGg7YSsrKWZvcih2YXIgaT1yW2FdLG89aVswXS50LGw9by5wb2Zmc2V0LHM9QXJyYXkuaXNBcnJheShsKSxjPW8uYmFyd2lkdGgsdT1BcnJheS5pc0FycmF5KGMpLGY9MDtmPGkubGVuZ3RoO2YrKyl7dmFyIGQ9aVtmXSxwPWQudz11P2NbZl06YztkW25dPWQucCsocz9sW2ZdOmwpK3AvMn19ZnVuY3Rpb24gZyhlLHQscil7dmFyIG49dC50cmFjZXMsYT10Lm1pbkRpZmYvMjtsLm1pbkR0aWNrKGUsdC5taW5EaWZmLHQuZGlzdGluY3RQb3NpdGlvbnNbMF0scik7Zm9yKHZhciBpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBvLHMsYyx1LGY9bltpXSxkPWZbMF0scD1kLnRyYWNlLGg9W107Zm9yKHU9MDt1PGYubGVuZ3RoO3UrKylzPShvPWZbdV0pLnAtYSxjPW8ucCthLGgucHVzaChzLGMpO2lmKHAud2lkdGh8fHAub2Zmc2V0KXt2YXIgZz1kLnQsdj1nLnBvZmZzZXQsbT1nLmJhcndpZHRoLHk9QXJyYXkuaXNBcnJheSh2KSx4PUFycmF5LmlzQXJyYXkobSk7Zm9yKHU9MDt1PGYubGVuZ3RoO3UrKyl7bz1mW3VdO3ZhciBiPXk/dlt1XTp2LF89eD9tW3VdOm07Yz0ocz1vLnArYikrXyxoLnB1c2gocyxjKX19cC5fZXh0cmVtZXNbZS5faWRdPWwuZmluZEV4dHJlbWVzKGUsaCx7cGFkZGVkOiExfSl9fWZ1bmN0aW9uIHYoZSx0KXtmb3IodmFyIHI9dC50cmFjZXMsbj14KGUpLGE9MDthPHIubGVuZ3RoO2ErKyl7Zm9yKHZhciBpPXJbYV0sbz1pWzBdLnRyYWNlLHM9W10sYz0hMSx1PTA7dTxpLmxlbmd0aDt1Kyspe3ZhciBmPWlbdV0sZD1mLmIscD1kK2YucztmW25dPXAscy5wdXNoKHApLGYuaGFzQiYmcy5wdXNoKGQpLGYuaGFzQiYmZi5ifHwoYz0hMCl9by5fZXh0cmVtZXNbZS5faWRdPWwuZmluZEV4dHJlbWVzKGUscyx7dG96ZXJvOmMscGFkZGVkOiEwfSl9fWZ1bmN0aW9uIG0oZSl7Zm9yKHZhciB0PWUudHJhY2VzLHI9MDtyPHQubGVuZ3RoO3IrKylmb3IodmFyIG49dFtyXSxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBvPW5bYV07by5zIT09aSYmZS5wdXQoby5wLG8uYitvLnMpfX1mdW5jdGlvbiB5KGUsdCxyKXt2YXIgYT10LnRyYWNlcyxvPXgoZSkscz0iZnJhY3Rpb24iPT09ci5ub3JtPzE6MTAwLGM9cy8xZTksdT1lLmwyYyhlLmMybCgwKSksZj0ic3RhY2siPT09ci5tb2RlP3M6dTtmdW5jdGlvbiBkKHQpe3JldHVybiBuKGUuYzJsKHQpKSYmKHQ8dS1jfHx0PmYrY3x8IW4odSkpfWZvcih2YXIgcD0wO3A8YS5sZW5ndGg7cCsrKXtmb3IodmFyIGg9YVtwXSxnPWhbMF0udHJhY2Usdj1bXSxtPSExLHk9ITEsYj0wO2I8aC5sZW5ndGg7YisrKXt2YXIgXz1oW2JdO2lmKF8ucyE9PWkpe3ZhciB3PU1hdGguYWJzKHMvdC5nZXQoXy5wLF8ucykpO18uYio9dyxfLnMqPXc7dmFyIFQ9Xy5iLGs9VCtfLnM7X1tvXT1rLHYucHVzaChrKSx5PXl8fGQoayksXy5oYXNCJiYodi5wdXNoKFQpLHk9eXx8ZChUKSksXy5oYXNCJiZfLmJ8fChtPSEwKX19Zy5fZXh0cmVtZXNbZS5faWRdPWwuZmluZEV4dHJlbWVzKGUsdix7dG96ZXJvOm0scGFkZGVkOnl9KX19ZnVuY3Rpb24geChlKXtyZXR1cm4gZS5faWQuY2hhckF0KDApfXQuZXhwb3J0cz17Y3Jvc3NUcmFjZUNhbGM6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9dC54YXhpcyxuPXQueWF4aXMsYT1lLl9mdWxsTGF5b3V0LGk9ZS5fZnVsbERhdGEsbD1lLmNhbGNkYXRhLHM9W10sYz1bXSxmPTA7ZjxpLmxlbmd0aDtmKyspe3ZhciBkPWlbZl07aWYoITA9PT1kLnZpc2libGUmJm8udHJhY2VJcyhkLCJiYXIiKSYmZC54YXhpcz09PXIuX2lkJiZkLnlheGlzPT09bi5faWQmJigiaCI9PT1kLm9yaWVudGF0aW9uP3MucHVzaChsW2ZdKTpjLnB1c2gobFtmXSksZC5fY29tcHV0ZVBoKSlmb3IodmFyIHA9ZS5jYWxjZGF0YVtmXSxoPTA7aDxwLmxlbmd0aDtoKyspImZ1bmN0aW9uIj09dHlwZW9mIHBbaF0ucGgwJiYocFtoXS5waDA9cFtoXS5waDAoKSksImZ1bmN0aW9uIj09dHlwZW9mIHBbaF0ucGgxJiYocFtoXS5waDE9cFtoXS5waDEoKSl9dmFyIGc9e3hDYXQ6ImNhdGVnb3J5Ij09PXIudHlwZXx8Im11bHRpY2F0ZWdvcnkiPT09ci50eXBlLHlDYXQ6ImNhdGVnb3J5Ij09PW4udHlwZXx8Im11bHRpY2F0ZWdvcnkiPT09bi50eXBlLG1vZGU6YS5iYXJtb2RlLG5vcm06YS5iYXJub3JtLGdhcDphLmJhcmdhcCxncm91cGdhcDphLmJhcmdyb3VwZ2FwfTt1KGUscixuLGMsZyksdShlLG4scixzLGcpfSxzZXRHcm91cFBvc2l0aW9uczp1fX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjoxODEsIi4uLy4uL2xpYiI6MjAyLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6MjQ4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RyYWludHMiOjI1NSwiLi4vLi4vcmVnaXN0cnkiOjI5MCwiLi9zaWV2ZS5qcyI6MzEzLCJmYXN0LWlzbnVtZXJpYyI6MTF9XSwzMDQ6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vbGliIiksYT1lKCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaT1lKCIuLi8uLi9yZWdpc3RyeSIpLG89ZSgiLi4vc2NhdHRlci94eV9kZWZhdWx0cyIpLGw9ZSgiLi4vc2NhdHRlci9wZXJpb2RfZGVmYXVsdHMiKSxzPWUoIi4vc3R5bGVfZGVmYXVsdHMiKSxjPWUoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdHJhaW50cyIpLmdldEF4aXNHcm91cCx1PWUoIi4vYXR0cmlidXRlcyIpLGY9bi5jb2VyY2VGb250O2Z1bmN0aW9uIGQoZSx0LHIsbil7dmFyIGE9dC5vcmllbnRhdGlvbixpPXRbe3Y6IngiLGg6InkifVthXSsiYXhpcyJdLG89YyhyLGkpK2EsbD1yLl9hbGlnbm1lbnRPcHRzfHx7fSxzPW4oImFsaWdubWVudGdyb3VwIiksdT1sW29dO3V8fCh1PWxbb109e30pO3ZhciBmPXVbc107Zj9mLnRyYWNlcy5wdXNoKHQpOmY9dVtzXT17dHJhY2VzOlt0XSxhbGlnbm1lbnRJbmRleDpPYmplY3Qua2V5cyh1KS5sZW5ndGgsb2Zmc2V0R3JvdXBzOnt9fTt2YXIgZD1uKCJvZmZzZXRncm91cCIpLHA9Zi5vZmZzZXRHcm91cHMsaD1wW2RdO2QmJihofHwoaD1wW2RdPXtvZmZzZXRJbmRleDpPYmplY3Qua2V5cyhwKS5sZW5ndGh9KSx0Ll9vZmZzZXRJbmRleD1oLm9mZnNldEluZGV4KX1mdW5jdGlvbiBwKGUsdCxyLGEsaSxvKXt2YXIgbD0hKCExPT09KG89b3x8e30pLm1vZHVsZUhhc1NlbGVjdGVkKSxzPSEoITE9PT1vLm1vZHVsZUhhc1Vuc2VsZWN0ZWQpLGM9ISghMT09PW8ubW9kdWxlSGFzQ29uc3RyYWluKSx1PSEoITE9PT1vLm1vZHVsZUhhc0NsaXBvbmF4aXMpLGQ9ISghMT09PW8ubW9kdWxlSGFzVGV4dGFuZ2xlKSxwPSEoITE9PT1vLm1vZHVsZUhhc0luc2lkZWFuY2hvciksaD0hIW8uaGFzUGF0aGJhcixnPUFycmF5LmlzQXJyYXkoaSl8fCJhdXRvIj09PWksdj1nfHwiaW5zaWRlIj09PWksbT1nfHwib3V0c2lkZSI9PT1pO2lmKHZ8fG0pe3ZhciB5PWYoYSwidGV4dGZvbnQiLHIuZm9udCkseD1uLmV4dGVuZEZsYXQoe30seSksYj0hKGUudGV4dGZvbnQmJmUudGV4dGZvbnQuY29sb3IpO2lmKGImJmRlbGV0ZSB4LmNvbG9yLGYoYSwiaW5zaWRldGV4dGZvbnQiLHgpLGgpe3ZhciBfPW4uZXh0ZW5kRmxhdCh7fSx5KTtiJiZkZWxldGUgXy5jb2xvcixmKGEsInBhdGhiYXIudGV4dGZvbnQiLF8pfW0mJmYoYSwib3V0c2lkZXRleHRmb250Iix5KSxsJiZhKCJzZWxlY3RlZC50ZXh0Zm9udC5jb2xvciIpLHMmJmEoInVuc2VsZWN0ZWQudGV4dGZvbnQuY29sb3IiKSxjJiZhKCJjb25zdHJhaW50ZXh0IiksdSYmYSgiY2xpcG9uYXhpcyIpLGQmJmEoInRleHRhbmdsZSIpLGEoInRleHR0ZW1wbGF0ZSIpfXYmJnAmJmEoImluc2lkZXRleHRhbmNob3IiKX10LmV4cG9ydHM9e3N1cHBseURlZmF1bHRzOmZ1bmN0aW9uKGUsdCxyLGMpe2Z1bmN0aW9uIGYocixhKXtyZXR1cm4gbi5jb2VyY2UoZSx0LHUscixhKX1pZihvKGUsdCxjLGYpKXtsKGUsdCxjLGYpLGYoIm9yaWVudGF0aW9uIix0LngmJiF0Lnk/ImgiOiJ2IiksZigiYmFzZSIpLGYoIm9mZnNldCIpLGYoIndpZHRoIiksZigidGV4dCIpLGYoImhvdmVydGV4dCIpLGYoImhvdmVydGVtcGxhdGUiKTt2YXIgZD1mKCJ0ZXh0cG9zaXRpb24iKTtwKGUsdCxjLGYsZCx7bW9kdWxlSGFzU2VsZWN0ZWQ6ITAsbW9kdWxlSGFzVW5zZWxlY3RlZDohMCxtb2R1bGVIYXNDb25zdHJhaW46ITAsbW9kdWxlSGFzQ2xpcG9uYXhpczohMCxtb2R1bGVIYXNUZXh0YW5nbGU6ITAsbW9kdWxlSGFzSW5zaWRlYW5jaG9yOiEwfSkscyhlLHQsZixyLGMpO3ZhciBoPSh0Lm1hcmtlci5saW5lfHx7fSkuY29sb3IsZz1pLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwic3VwcGx5RGVmYXVsdHMiKTtnKGUsdCxofHxhLmRlZmF1bHRMaW5lLHtheGlzOiJ5In0pLGcoZSx0LGh8fGEuZGVmYXVsdExpbmUse2F4aXM6IngiLGluaGVyaXQ6InkifSksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KHQsZil9ZWxzZSB0LnZpc2libGU9ITF9LGNyb3NzVHJhY2VEZWZhdWx0czpmdW5jdGlvbihlLHQpe3ZhciByO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIG4uY29lcmNlKHIuX2lucHV0LHIsdSxlKX1pZigiZ3JvdXAiPT09dC5iYXJtb2RlKWZvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKSJiYXIiPT09KHI9ZVtpXSkudHlwZSYmKHIuX2lucHV0LGQoMCxyLHQsYSkpfSxoYW5kbGVHcm91cGluZ0RlZmF1bHRzOmQsaGFuZGxlVGV4dDpwfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo3NSwiLi4vLi4vbGliIjoyMDIsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdHJhaW50cyI6MjU1LCIuLi8uLi9yZWdpc3RyeSI6MjkwLCIuLi9zY2F0dGVyL3BlcmlvZF9kZWZhdWx0cyI6MzUwLCIuLi9zY2F0dGVyL3h5X2RlZmF1bHRzIjozNTcsIi4vYXR0cmlidXRlcyI6MzAwLCIuL3N0eWxlX2RlZmF1bHRzIjozMTV9XSwzMDU6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZS54PSJ4VmFsImluIHQ/dC54VmFsOnQueCxlLnk9InlWYWwiaW4gdD90LnlWYWw6dC55LHQueGEmJihlLnhheGlzPXQueGEpLHQueWEmJihlLnlheGlzPXQueWEpLCJoIj09PXIub3JpZW50YXRpb24/KGUubGFiZWw9ZS55LGUudmFsdWU9ZS54KTooZS5sYWJlbD1lLngsZS52YWx1ZT1lLnkpLGV9fSx7fV0sMzA2OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoImZhc3QtaXNudW1lcmljIiksYT1lKCJ0aW55Y29sb3IyIiksaT1lKCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5O3IuY29lcmNlU3RyaW5nPWZ1bmN0aW9uKGUsdCxyKXtpZigic3RyaW5nIj09dHlwZW9mIHQpe2lmKHR8fCFlLm5vQmxhbmspcmV0dXJuIHR9ZWxzZSBpZigoIm51bWJlciI9PXR5cGVvZiB0fHwhMD09PXQpJiYhZS5zdHJpY3QpcmV0dXJuIFN0cmluZyh0KTtyZXR1cm4gdm9pZCAwIT09cj9yOmUuZGZsdH0sci5jb2VyY2VOdW1iZXI9ZnVuY3Rpb24oZSx0LHIpe2lmKG4odCkpe3Q9K3Q7dmFyIGE9ZS5taW4saT1lLm1heDtpZighKHZvaWQgMCE9PWEmJnQ8YXx8dm9pZCAwIT09aSYmdD5pKSlyZXR1cm4gdH1yZXR1cm4gdm9pZCAwIT09cj9yOmUuZGZsdH0sci5jb2VyY2VDb2xvcj1mdW5jdGlvbihlLHQscil7cmV0dXJuIGEodCkuaXNWYWxpZCgpP3Q6dm9pZCAwIT09cj9yOmUuZGZsdH0sci5jb2VyY2VFbnVtZXJhdGVkPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZS5jb2VyY2VOdW1iZXImJih0PSt0KSwtMSE9PWUudmFsdWVzLmluZGV4T2YodCk/dDp2b2lkIDAhPT1yP3I6ZS5kZmx0fSxyLmdldFZhbHVlPWZ1bmN0aW9uKGUsdCl7dmFyIHI7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/dDxlLmxlbmd0aCYmKHI9ZVt0XSk6cj1lLHJ9LHIuZ2V0TGluZVdpZHRoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIDA8dC5tbHc/dC5tbHc6aShlLm1hcmtlci5saW5lLndpZHRoKT8wOmUubWFya2VyLmxpbmUud2lkdGh9fSx7Ii4uLy4uL2xpYiI6MjAyLCJmYXN0LWlzbnVtZXJpYyI6MTEsdGlueWNvbG9yMjo1OH1dLDMwNzpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9jb21wb25lbnRzL2Z4IiksYT1lKCIuLi8uLi9yZWdpc3RyeSIpLGk9ZSgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89ZSgiLi4vLi4vbGliIikuZmlsbFRleHQsbD1lKCIuL2hlbHBlcnMiKS5nZXRMaW5lV2lkdGgscz1lKCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLmhvdmVyTGFiZWxUZXh0LGM9ZSgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtmdW5jdGlvbiB1KGUsdCxyLGEpe3ZhciBpLGwsdSxmLGQscCxoLGc9ZS5jZCx2PWdbMF0udHJhY2UsbT1nWzBdLnQseT0iY2xvc2VzdCI9PT1hLHg9IndhdGVyZmFsbCI9PT12LnR5cGUsYj1lLm1heEhvdmVyRGlzdGFuY2U7ZnVuY3Rpb24gXyhlKXtyZXR1cm4gZVt1XS1lLncvMn1mdW5jdGlvbiB3KGUpe3JldHVybiBlW3VdK2Uudy8yfXZhciBUPXk/XzpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5taW4oXyhlKSxlLnAtbS5iYXJkZWx0YS8yKX0saz15P3c6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgubWF4KHcoZSksZS5wK20uYmFyZGVsdGEvMil9O2Z1bmN0aW9uIE0oZSx0KXtyZXR1cm4gbi5pbmJveChlLWksdC1pLGIrTWF0aC5taW4oMSxNYXRoLmFicyh0LWUpL2gpLTEpfWZ1bmN0aW9uIEEoZSl7cmV0dXJuIE0oVChlKSxrKGUpKX1mdW5jdGlvbiBMKGUpe3ZhciB0PWwscj1lLmIsYT1lW2ZdO2lmKHgpe3ZhciBpPU1hdGguYWJzKGUucmF3Uyl8fDA7dD4wP2ErPWk6dDwwJiYoYS09aSl9cmV0dXJuIG4uaW5ib3goci10LGEtdCxiKyhhLXQpLyhhLXIpLTEpfSJoIj09PXYub3JpZW50YXRpb24/KGk9cixsPXQsdT0ieSIsZj0ieCIsZD1MLHA9QSk6KGk9dCxsPXIsdT0ieCIsZj0ieSIscD1MLGQ9QSk7dmFyIFM9ZVt1KyJhIl0sQz1lW2YrImEiXTtoPU1hdGguYWJzKFMucjJjKFMucmFuZ2VbMV0pLVMucjJjKFMucmFuZ2VbMF0pKTt2YXIgTz1uLmdldERpc3RhbmNlRnVuY3Rpb24oYSxkLHAsKGZ1bmN0aW9uKGUpe3JldHVybihkKGUpK3AoZSkpLzJ9KSk7aWYobi5nZXRDbG9zZXN0KGcsTyxlKSwhMSE9PWUuaW5kZXgmJmdbZS5pbmRleF0ucCE9PWMpe3l8fChUPWZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLm1pbihfKGUpLGUucC1tLmJhcmdyb3Vwd2lkdGgvMil9LGs9ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgubWF4KHcoZSksZS5wK20uYmFyZ3JvdXB3aWR0aC8yKX0pO3ZhciBEPWdbZS5pbmRleF0sUD12LmJhc2U/RC5iK0QuczpELnM7ZVtmKyIwIl09ZVtmKyIxIl09Qy5jMnAoRFtmXSwhMCksZVtmKyJMYWJlbFZhbCJdPVA7dmFyIHo9bS5leHRlbnRzW20uZXh0ZW50cy5yb3VuZChELnApXTtlW3UrIjAiXT1TLmMycCh5P1QoRCk6elswXSwhMCksZVt1KyIxIl09Uy5jMnAoeT9rKEQpOnpbMV0sITApO3ZhciBSPXZvaWQgMCE9PUQub3JpZ19wO3JldHVybiBlW3UrIkxhYmVsVmFsIl09Uj9ELm9yaWdfcDpELnAsZS5sYWJlbExhYmVsPXMoUyxlW3UrIkxhYmVsVmFsIl0pLGUudmFsdWVMYWJlbD1zKEMsZVtmKyJMYWJlbFZhbCJdKSxlLmJhc2VMYWJlbD1zKEMsRC5iKSxlLnNwaWtlRGlzdGFuY2U9KEwoRCkrZnVuY3Rpb24oZSl7cmV0dXJuIE0oXyhlKSx3KGUpKX0oRCkpLzItYixlW3UrIlNwaWtlIl09Uy5jMnAoRC5wLCEwKSxvKEQsdixlKSxlLmhvdmVydGVtcGxhdGU9di5ob3ZlcnRlbXBsYXRlLGV9fWZ1bmN0aW9uIGYoZSx0KXt2YXIgcj10Lm1jY3x8ZS5tYXJrZXIuY29sb3Isbj10Lm1sY2N8fGUubWFya2VyLmxpbmUuY29sb3IsYT1sKGUsdCk7cmV0dXJuIGkub3BhY2l0eShyKT9yOmkub3BhY2l0eShuKSYmYT9uOnZvaWQgMH10LmV4cG9ydHM9e2hvdmVyUG9pbnRzOmZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBpPXUoZSx0LHIsbik7aWYoaSl7dmFyIG89aS5jZCxsPW9bMF0udHJhY2Uscz1vW2kuaW5kZXhdO3JldHVybiBpLmNvbG9yPWYobCxzKSxhLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwiaG92ZXJJbmZvIikocyxsLGkpLFtpXX19LGhvdmVyT25CYXJzOnUsZ2V0VHJhY2VDb2xvcjpmfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo3NSwiLi4vLi4vY29tcG9uZW50cy9meCI6MTE1LCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjoxODEsIi4uLy4uL2xpYiI6MjAyLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6MjQ4LCIuLi8uLi9yZWdpc3RyeSI6MjkwLCIuL2hlbHBlcnMiOjMwNn1dLDMwODpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9e2F0dHJpYnV0ZXM6ZSgiLi9hdHRyaWJ1dGVzIiksbGF5b3V0QXR0cmlidXRlczplKCIuL2xheW91dF9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6ZSgiLi9kZWZhdWx0cyIpLnN1cHBseURlZmF1bHRzLGNyb3NzVHJhY2VEZWZhdWx0czplKCIuL2RlZmF1bHRzIikuY3Jvc3NUcmFjZURlZmF1bHRzLHN1cHBseUxheW91dERlZmF1bHRzOmUoIi4vbGF5b3V0X2RlZmF1bHRzIiksY2FsYzplKCIuL2NhbGMiKSxjcm9zc1RyYWNlQ2FsYzplKCIuL2Nyb3NzX3RyYWNlX2NhbGMiKS5jcm9zc1RyYWNlQ2FsYyxjb2xvcmJhcjplKCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciIpLGFycmF5c1RvQ2FsY2RhdGE6ZSgiLi9hcnJheXNfdG9fY2FsY2RhdGEiKSxwbG90OmUoIi4vcGxvdCIpLnBsb3Qsc3R5bGU6ZSgiLi9zdHlsZSIpLnN0eWxlLHN0eWxlT25TZWxlY3Q6ZSgiLi9zdHlsZSIpLnN0eWxlT25TZWxlY3QsaG92ZXJQb2ludHM6ZSgiLi9ob3ZlciIpLmhvdmVyUG9pbnRzLGV2ZW50RGF0YTplKCIuL2V2ZW50X2RhdGEiKSxzZWxlY3RQb2ludHM6ZSgiLi9zZWxlY3QiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiYmFyIixiYXNlUGxvdE1vZHVsZTplKCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiYmFyLWxpa2UiLCJjYXJ0ZXNpYW4iLCJzdmciLCJiYXIiLCJvcmllbnRlZCIsImVycm9yQmFyc09LIiwic2hvd0xlZ2VuZCIsInpvb21TY2FsZSJdLGFuaW1hdGFibGU6ITAsbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjoyNjEsIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjozNDgsIi4vYXJyYXlzX3RvX2NhbGNkYXRhIjoyOTksIi4vYXR0cmlidXRlcyI6MzAwLCIuL2NhbGMiOjMwMSwiLi9jcm9zc190cmFjZV9jYWxjIjozMDMsIi4vZGVmYXVsdHMiOjMwNCwiLi9ldmVudF9kYXRhIjozMDUsIi4vaG92ZXIiOjMwNywiLi9sYXlvdXRfYXR0cmlidXRlcyI6MzA5LCIuL2xheW91dF9kZWZhdWx0cyI6MzEwLCIuL3Bsb3QiOjMxMSwiLi9zZWxlY3QiOjMxMiwiLi9zdHlsZSI6MzE0fV0sMzA5OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz17YmFybW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic3RhY2siLCJncm91cCIsIm92ZXJsYXkiLCJyZWxhdGl2ZSJdLGRmbHQ6Imdyb3VwIixlZGl0VHlwZToiY2FsYyJ9LGJhcm5vcm06e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIiIsImZyYWN0aW9uIiwicGVyY2VudCJdLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxiYXJnYXA6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6ImNhbGMifSxiYXJncm91cGdhcDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifX19LHt9XSwzMTA6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vcmVnaXN0cnkiKSxhPWUoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksaT1lKCIuLi8uLi9saWIiKSxvPWUoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe2Z1bmN0aW9uIGwocixuKXtyZXR1cm4gaS5jb2VyY2UoZSx0LG8scixuKX1mb3IodmFyIHM9ITEsYz0hMSx1PSExLGY9e30sZD1sKCJiYXJtb2RlIikscD0wO3A8ci5sZW5ndGg7cCsrKXt2YXIgaD1yW3BdO2lmKG4udHJhY2VJcyhoLCJiYXIiKSYmaC52aXNpYmxlKXtpZihzPSEwLCJncm91cCI9PT1kKXt2YXIgZz1oLnhheGlzK2gueWF4aXM7ZltnXSYmKHU9ITApLGZbZ109ITB9aWYoaC52aXNpYmxlJiYiaGlzdG9ncmFtIj09PWgudHlwZSkiY2F0ZWdvcnkiIT09YS5nZXRGcm9tSWQoe19mdWxsTGF5b3V0OnR9LGhbInYiPT09aC5vcmllbnRhdGlvbj8ieGF4aXMiOiJ5YXhpcyJdKS50eXBlJiYoYz0hMCl9fXM/KCJvdmVybGF5IiE9PWQmJmwoImJhcm5vcm0iKSxsKCJiYXJnYXAiLGMmJiF1PzA6LjIpLGwoImJhcmdyb3VwZ2FwIikpOmRlbGV0ZSB0LmJhcm1vZGV9fSx7Ii4uLy4uL2xpYiI6MjAyLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6MjQ4LCIuLi8uLi9yZWdpc3RyeSI6MjkwLCIuL2xheW91dF9hdHRyaWJ1dGVzIjozMDl9XSwzMTE6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiZDMiKSxhPWUoImZhc3QtaXNudW1lcmljIiksaT1lKCIuLi8uLi9saWIiKSxvPWUoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGw9ZSgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLHM9ZSgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYz1lKCIuLi8uLi9yZWdpc3RyeSIpLHU9ZSgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKS50aWNrVGV4dCxmPWUoIi4vdW5pZm9ybV90ZXh0IiksZD1mLnJlY29yZE1pblRleHRTaXplLHA9Zi5jbGVhck1pblRleHRTaXplLGg9ZSgiLi9zdHlsZSIpLGc9ZSgiLi9oZWxwZXJzIiksdj1lKCIuL2NvbnN0YW50cyIpLG09ZSgiLi9hdHRyaWJ1dGVzIikseT1tLnRleHQseD1tLnRleHRwb3NpdGlvbixiPWUoIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyIpLmFwcGVuZEFycmF5UG9pbnRWYWx1ZSxfPXYuVEVYVFBBRDtmdW5jdGlvbiB3KGUpe3JldHVybiBlLmlkfWZ1bmN0aW9uIFQoZSl7aWYoZS5pZHMpcmV0dXJuIHd9ZnVuY3Rpb24gayhlLHQpe3JldHVybiBlPHQ/MTotMX1mdW5jdGlvbiBNKGUsdCxyLG4pe3ZhciBhO3JldHVybiF0LnVuaWZvcm10ZXh0Lm1vZGUmJkEocik/KG4mJihhPW4oKSksZS50cmFuc2l0aW9uKCkuZHVyYXRpb24oci5kdXJhdGlvbikuZWFzZShyLmVhc2luZykuZWFjaCgiZW5kIiwoZnVuY3Rpb24oKXthJiZhKCl9KSkuZWFjaCgiaW50ZXJydXB0IiwoZnVuY3Rpb24oKXthJiZhKCl9KSkpOmV9ZnVuY3Rpb24gQShlKXtyZXR1cm4gZSYmZS5kdXJhdGlvbj4wfWZ1bmN0aW9uIEwoZSl7cmV0dXJuImF1dG8iPT09ZT8wOmV9ZnVuY3Rpb24gUyhlLHQpe3ZhciByPU1hdGguUEkvMTgwKnQsbj1NYXRoLmFicyhNYXRoLnNpbihyKSksYT1NYXRoLmFicyhNYXRoLmNvcyhyKSk7cmV0dXJue3g6ZS53aWR0aCphK2UuaGVpZ2h0Km4seTplLndpZHRoKm4rZS5oZWlnaHQqYX19ZnVuY3Rpb24gQyhlLHQscixuLGEsaSl7dmFyIG89ISFpLmlzSG9yaXpvbnRhbCxsPSEhaS5jb25zdHJhaW5lZCxzPWkuYW5nbGV8fDAsYz1pLmFuY2hvcnx8ImVuZCIsdT0iZW5kIj09PWMsZj0ic3RhcnQiPT09YyxkPSgoaS5sZWZ0VG9SaWdodHx8MCkrMSkvMixwPTEtZCxoPWEud2lkdGgsZz1hLmhlaWdodCx2PU1hdGguYWJzKHQtZSksbT1NYXRoLmFicyhuLXIpLHk9dj4yKl8mJm0+MipfP186MDt2LT0yKnksbS09Mip5O3ZhciB4PUwocyk7ImF1dG8iIT09c3x8aDw9diYmZzw9bXx8IShoPnZ8fGc+bSl8fChoPm18fGc+dikmJmg8Zz09djxtfHwoeCs9OTApO3ZhciBiPVMoYSx4KSx3PTE7bCYmKHc9TWF0aC5taW4oMSx2L2IueCxtL2IueSkpO3ZhciBUPWEubGVmdCpwK2EucmlnaHQqZCxNPShhLnRvcCthLmJvdHRvbSkvMixBPShlK18pKnArKHQtXykqZCxDPShyK24pLzIsTz0wLEQ9MDtpZihmfHx1KXt2YXIgUD0obz9iLng6Yi55KS8yLHo9bz9rKGUsdCk6ayhyLG4pO28/Zj8oQT1lK3oqeSxPPS16KlApOihBPXQteip5LE89eipQKTpmPyhDPXIreip5LEQ9LXoqUCk6KEM9bi16KnksRD16KlApfXJldHVybnt0ZXh0WDpULHRleHRZOk0sdGFyZ2V0WDpBLHRhcmdldFk6QyxhbmNob3JYOk8sYW5jaG9yWTpELHNjYWxlOncscm90YXRlOnh9fXQuZXhwb3J0cz17cGxvdDpmdW5jdGlvbihlLHQscixmLHYsbSl7dmFyIHc9dC54YXhpcyxPPXQueWF4aXMsRD1lLl9mdWxsTGF5b3V0O3Z8fCh2PXttb2RlOkQuYmFybW9kZSxub3JtOkQuYmFybW9kZSxnYXA6RC5iYXJnYXAsZ3JvdXBnYXA6RC5iYXJncm91cGdhcH0scCgiYmFyIixEKSk7dmFyIFA9aS5tYWtlVHJhY2VHcm91cHMoZixyLCJ0cmFjZSBiYXJzIikuZWFjaCgoZnVuY3Rpb24ocil7dmFyIGM9bi5zZWxlY3QodGhpcyksZj1yWzBdLnRyYWNlLHA9IndhdGVyZmFsbCI9PT1mLnR5cGUsUD0iZnVubmVsIj09PWYudHlwZSx6PSJiYXIiPT09Zi50eXBlfHxQLFI9MDtwJiZmLmNvbm5lY3Rvci52aXNpYmxlJiYiYmV0d2VlbiI9PT1mLmNvbm5lY3Rvci5tb2RlJiYoUj1mLmNvbm5lY3Rvci5saW5lLndpZHRoLzIpO3ZhciBFPSJoIj09PWYub3JpZW50YXRpb24sST1BKHYpLEY9aS5lbnN1cmVTaW5nbGUoYywiZyIsInBvaW50cyIpLE49VChmKSxIPUYuc2VsZWN0QWxsKCJnLnBvaW50IikuZGF0YShpLmlkZW50aXR5LE4pO0guZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJwb2ludCIsITApLEguZXhpdCgpLnJlbW92ZSgpLEguZWFjaCgoZnVuY3Rpb24oYyxwKXt2YXIgVCxBLFA9bi5zZWxlY3QodGhpcyksRj1mdW5jdGlvbihlLHQscixuKXt2YXIgYT1bXSxpPVtdLG89bj90OnIsbD1uP3I6dDtyZXR1cm4gYVswXT1vLmMycChlLnMwLCEwKSxpWzBdPWwuYzJwKGUucDAsITApLGFbMV09by5jMnAoZS5zMSwhMCksaVsxXT1sLmMycChlLnAxLCEwKSxuP1thLGldOltpLGFdfShjLHcsTyxFKSxOPUZbMF1bMF0sSD1GWzBdWzFdLGo9RlsxXVswXSxCPUZbMV1bMV0sVj0wPT0oRT9ILU46Qi1qKTtpZihWJiZ6JiZnLmdldExpbmVXaWR0aChmLGMpJiYoVj0hMSksVnx8KFY9IShhKE4pJiZhKEgpJiZhKGopJiZhKEIpKSksYy5pc0JsYW5rPVYsViYmKEU/SD1OOkI9aiksUiYmIVYmJihFPyhOLT1rKE4sSCkqUixIKz1rKE4sSCkqUik6KGotPWsoaixCKSpSLEIrPWsoaixCKSpSKSksIndhdGVyZmFsbCI9PT1mLnR5cGUpe2lmKCFWKXt2YXIgVT1mW2MuZGlyXS5tYXJrZXI7VD1VLmxpbmUud2lkdGgsQT1VLmNvbG9yfX1lbHNlIFQ9Zy5nZXRMaW5lV2lkdGgoZixjKSxBPWMubWN8fGYubWFya2VyLmNvbG9yO2Z1bmN0aW9uIHEoZSl7dmFyIHQ9bi5yb3VuZChULzIlMSwyKTtyZXR1cm4gMD09PXYuZ2FwJiYwPT09di5ncm91cGdhcD9uLnJvdW5kKE1hdGgucm91bmQoZSktdCwyKTplfWlmKCFlLl9jb250ZXh0LnN0YXRpY1Bsb3Qpe3ZhciBHPWwub3BhY2l0eShBKTwxfHxUPi4wMT9xOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gciYmZT09PXQ/ZTpNYXRoLmFicyhlLXQpPj0yP3EoZSk6ZT50P01hdGguY2VpbChlKTpNYXRoLmZsb29yKGUpfTtOPUcoTixILEUpLEg9RyhILE4sRSksaj1HKGosQiwhRSksQj1HKEIsaiwhRSl9dmFyIFo9TShpLmVuc3VyZVNpbmdsZShQLCJwYXRoIiksRCx2LG0pO2lmKFouc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5hdHRyKCJkIixpc05hTigoSC1OKSooQi1qKSl8fFYmJmUuX2NvbnRleHQuc3RhdGljUGxvdD8iTTAsMFoiOiJNIitOKyIsIitqKyJWIitCKyJIIitIKyJWIitqKyJaIikuY2FsbChzLnNldENsaXBVcmwsdC5sYXllckNsaXBJZCxlKSwhRC51bmlmb3JtdGV4dC5tb2RlJiZJKXt2YXIgWT1zLm1ha2VQb2ludFN0eWxlRm5zKGYpO3Muc2luZ2xlUG9pbnRTdHlsZShjLFosZixZLGUpfSFmdW5jdGlvbihlLHQscixuLGEsbCxjLGYscCx2LG0pe3ZhciB3LFQ9dC54YXhpcyxBPXQueWF4aXMsTz1lLl9mdWxsTGF5b3V0O2Z1bmN0aW9uIEQodCxyLG4pe3JldHVybiBpLmVuc3VyZVNpbmdsZSh0LCJ0ZXh0IikudGV4dChyKS5hdHRyKHtjbGFzczoiYmFydGV4dCBiYXJ0ZXh0LSIrdywidGV4dC1hbmNob3IiOiJtaWRkbGUiLCJkYXRhLW5vdGV4IjoxfSkuY2FsbChzLmZvbnQsbikuY2FsbChvLmNvbnZlcnRUb1RzcGFucyxlKX12YXIgUD1uWzBdLnRyYWNlLHo9ImgiPT09UC5vcmllbnRhdGlvbixSPWZ1bmN0aW9uKGUsdCxyLG4sYSl7dmFyIG8sbD10WzBdLnRyYWNlO289bC50ZXh0dGVtcGxhdGU/ZnVuY3Rpb24oZSx0LHIsbixhKXt2YXIgbz10WzBdLnRyYWNlLGw9aS5jYXN0T3B0aW9uKG8sciwidGV4dHRlbXBsYXRlIik7aWYoIWwpcmV0dXJuIiI7dmFyIHMsYyxmLGQscD0id2F0ZXJmYWxsIj09PW8udHlwZSxoPSJmdW5uZWwiPT09by50eXBlOyJoIj09PW8ub3JpZW50YXRpb24/KHM9InkiLGM9YSxmPSJ4IixkPW4pOihzPSJ4IixjPW4sZj0ieSIsZD1hKTtmdW5jdGlvbiBnKGUpe3JldHVybiB1KGQsK2UsITApLnRleHR9dmFyIHY9dFtyXSxtPXt9O20ubGFiZWw9di5wLG0ubGFiZWxMYWJlbD1tW3MrIkxhYmVsIl09KHk9di5wLHUoYyx5LCEwKS50ZXh0KTt2YXIgeTt2YXIgeD1pLmNhc3RPcHRpb24obyx2LmksInRleHQiKTsoMD09PXh8fHgpJiYobS50ZXh0PXgpO20udmFsdWU9di5zLG0udmFsdWVMYWJlbD1tW2YrIkxhYmVsIl09Zyh2LnMpO3ZhciBfPXt9O2IoXyxvLHYuaSkscCYmKG0uZGVsdGE9K3YucmF3U3x8di5zLG0uZGVsdGFMYWJlbD1nKG0uZGVsdGEpLG0uZmluYWw9di52LG0uZmluYWxMYWJlbD1nKG0uZmluYWwpLG0uaW5pdGlhbD1tLmZpbmFsLW0uZGVsdGEsbS5pbml0aWFsTGFiZWw9ZyhtLmluaXRpYWwpKTtoJiYobS52YWx1ZT12LnMsbS52YWx1ZUxhYmVsPWcobS52YWx1ZSksbS5wZXJjZW50SW5pdGlhbD12LmJlZ1IsbS5wZXJjZW50SW5pdGlhbExhYmVsPWkuZm9ybWF0UGVyY2VudCh2LmJlZ1IpLG0ucGVyY2VudFByZXZpb3VzPXYuZGlmUixtLnBlcmNlbnRQcmV2aW91c0xhYmVsPWkuZm9ybWF0UGVyY2VudCh2LmRpZlIpLG0ucGVyY2VudFRvdGFsPXYuc3VtUixtLnBlcmNlblRvdGFsTGFiZWw9aS5mb3JtYXRQZXJjZW50KHYuc3VtUikpO3ZhciB3PWkuY2FzdE9wdGlvbihvLHYuaSwiY3VzdG9tZGF0YSIpO3cmJihtLmN1c3RvbWRhdGE9dyk7cmV0dXJuIGkudGV4dHRlbXBsYXRlU3RyaW5nKGwsbSxlLl9kM2xvY2FsZSxfLG0sby5fbWV0YXx8e30pfShlLHQscixuLGEpOmwudGV4dGluZm8/ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGE9ZVswXS50cmFjZSxvPSJoIj09PWEub3JpZW50YXRpb24sbD0id2F0ZXJmYWxsIj09PWEudHlwZSxzPSJmdW5uZWwiPT09YS50eXBlO2Z1bmN0aW9uIGMoZSl7cmV0dXJuIHUobz9yOm4sK2UsITApLnRleHR9dmFyIGYsZD1hLnRleHRpbmZvLHA9ZVt0XSxoPWQuc3BsaXQoIisiKSxnPVtdLHY9ZnVuY3Rpb24oZSl7cmV0dXJuLTEhPT1oLmluZGV4T2YoZSl9O3YoImxhYmVsIikmJmcucHVzaCgobT1lW3RdLnAsdShvP246cixtLCEwKS50ZXh0KSk7dmFyIG07digidGV4dCIpJiYoMD09PShmPWkuY2FzdE9wdGlvbihhLHAuaSwidGV4dCIpKXx8ZikmJmcucHVzaChmKTtpZihsKXt2YXIgeT0rcC5yYXdTfHxwLnMseD1wLnYsYj14LXk7digiaW5pdGlhbCIpJiZnLnB1c2goYyhiKSksdigiZGVsdGEiKSYmZy5wdXNoKGMoeSkpLHYoImZpbmFsIikmJmcucHVzaChjKHgpKX1pZihzKXt2KCJ2YWx1ZSIpJiZnLnB1c2goYyhwLnMpKTt2YXIgXz0wO3YoInBlcmNlbnQgaW5pdGlhbCIpJiZfKyssdigicGVyY2VudCBwcmV2aW91cyIpJiZfKyssdigicGVyY2VudCB0b3RhbCIpJiZfKys7dmFyIHc9Xz4xO3YoInBlcmNlbnQgaW5pdGlhbCIpJiYoZj1pLmZvcm1hdFBlcmNlbnQocC5iZWdSKSx3JiYoZis9IiBvZiBpbml0aWFsIiksZy5wdXNoKGYpKSx2KCJwZXJjZW50IHByZXZpb3VzIikmJihmPWkuZm9ybWF0UGVyY2VudChwLmRpZlIpLHcmJihmKz0iIG9mIHByZXZpb3VzIiksZy5wdXNoKGYpKSx2KCJwZXJjZW50IHRvdGFsIikmJihmPWkuZm9ybWF0UGVyY2VudChwLnN1bVIpLHcmJihmKz0iIG9mIHRvdGFsIiksZy5wdXNoKGYpKX1yZXR1cm4gZy5qb2luKCI8YnI+Iil9KHQscixuLGEpOmcuZ2V0VmFsdWUobC50ZXh0LHIpO3JldHVybiBnLmNvZXJjZVN0cmluZyh5LG8pfShPLG4sYSxULEEpO3c9ZnVuY3Rpb24oZSx0KXt2YXIgcj1nLmdldFZhbHVlKGUudGV4dHBvc2l0aW9uLHQpO3JldHVybiBnLmNvZXJjZUVudW1lcmF0ZWQoeCxyKX0oUCxhKTt2YXIgRT0ic3RhY2siPT09di5tb2RlfHwicmVsYXRpdmUiPT09di5tb2RlLEk9blthXSxGPSFFfHxJLl9vdXRtb3N0O2lmKCFSfHwibm9uZSI9PT13fHwoSS5pc0JsYW5rfHxsPT09Y3x8Zj09PXApJiYoImF1dG8iPT09d3x8Imluc2lkZSI9PT13KSlyZXR1cm4gdm9pZCByLnNlbGVjdCgidGV4dCIpLnJlbW92ZSgpO3ZhciBOPU8uZm9udCxIPWguZ2V0QmFyQ29sb3IoblthXSxQKSxqPWguZ2V0SW5zaWRlVGV4dEZvbnQoUCxhLE4sSCksQj1oLmdldE91dHNpZGVUZXh0Rm9udChQLGEsTiksVj1yLmRhdHVtKCk7ej8ibG9nIj09PVQudHlwZSYmVi5zMDw9MCYmKGw9VC5yYW5nZVswXTxULnJhbmdlWzFdPzA6VC5fbGVuZ3RoKToibG9nIj09PUEudHlwZSYmVi5zMDw9MCYmKGY9QS5yYW5nZVswXTxBLnJhbmdlWzFdP0EuX2xlbmd0aDowKTt2YXIgVSxxLEcsWixZLFg9TWF0aC5hYnMoYy1sKS0yKl8sVz1NYXRoLmFicyhwLWYpLTIqXzsib3V0c2lkZSI9PT13JiYoRnx8SS5oYXNCfHwodz0iaW5zaWRlIikpO2lmKCJhdXRvIj09PXcpaWYoRil7dz0iaW5zaWRlIixZPWkuZW5zdXJlVW5pZm9ybUZvbnRTaXplKGUsaiksVT1EKHIsUixZKSxxPXMuYkJveChVLm5vZGUoKSksRz1xLndpZHRoLFo9cS5oZWlnaHQ7dmFyIFE9Rzw9WCYmWjw9VyxKPUc8PVcmJlo8PVgsJD16P1g+PUcqKFcvWik6Vz49WiooWC9HKTtHPjAmJlo+MCYmKFF8fEp8fCQpP3c9Imluc2lkZSI6KHc9Im91dHNpZGUiLFUucmVtb3ZlKCksVT1udWxsKX1lbHNlIHc9Imluc2lkZSI7aWYoIVUpe1k9aS5lbnN1cmVVbmlmb3JtRm9udFNpemUoZSwib3V0c2lkZSI9PT13P0I6aik7dmFyIEs9KFU9RChyLFIsWSkpLmF0dHIoInRyYW5zZm9ybSIpO2lmKFUuYXR0cigidHJhbnNmb3JtIiwiIikscT1zLmJCb3goVS5ub2RlKCkpLEc9cS53aWR0aCxaPXEuaGVpZ2h0LFUuYXR0cigidHJhbnNmb3JtIixLKSxHPD0wfHxaPD0wKXJldHVybiB2b2lkIFUucmVtb3ZlKCl9dmFyIGVlLHRlLHJlPVAudGV4dGFuZ2xlOyJvdXRzaWRlIj09PXc/KHRlPSJib3RoIj09PVAuY29uc3RyYWludGV4dHx8Im91dHNpZGUiPT09UC5jb25zdHJhaW50ZXh0LGVlPWZ1bmN0aW9uKGUsdCxyLG4sYSxpKXt2YXIgbyxsPSEhaS5pc0hvcml6b250YWwscz0hIWkuY29uc3RyYWluZWQsYz1pLmFuZ2xlfHwwLHU9YS53aWR0aCxmPWEuaGVpZ2h0LGQ9TWF0aC5hYnModC1lKSxwPU1hdGguYWJzKG4tcik7bz1sP3A+MipfP186MDpkPjIqXz9fOjA7dmFyIGg9MTtzJiYoaD1sP01hdGgubWluKDEscC9mKTpNYXRoLm1pbigxLGQvdSkpO3ZhciBnPUwoYyksdj1TKGEsZyksbT0obD92Lng6di55KS8yLHk9KGEubGVmdCthLnJpZ2h0KS8yLHg9KGEudG9wK2EuYm90dG9tKS8yLGI9KGUrdCkvMix3PShyK24pLzIsVD0wLE09MCxBPWw/ayh0LGUpOmsocixuKTtsPyhiPXQtQSpvLFQ9QSptKToodz1uK0EqbyxNPS1BKm0pO3JldHVybnt0ZXh0WDp5LHRleHRZOngsdGFyZ2V0WDpiLHRhcmdldFk6dyxhbmNob3JYOlQsYW5jaG9yWTpNLHNjYWxlOmgscm90YXRlOmd9fShsLGMsZixwLHEse2lzSG9yaXpvbnRhbDp6LGNvbnN0cmFpbmVkOnRlLGFuZ2xlOnJlfSkpOih0ZT0iYm90aCI9PT1QLmNvbnN0cmFpbnRleHR8fCJpbnNpZGUiPT09UC5jb25zdHJhaW50ZXh0LGVlPUMobCxjLGYscCxxLHtpc0hvcml6b250YWw6eixjb25zdHJhaW5lZDp0ZSxhbmdsZTpyZSxhbmNob3I6UC5pbnNpZGV0ZXh0YW5jaG9yfSkpO2VlLmZvbnRTaXplPVkuc2l6ZSxkKFAudHlwZSxlZSxPKSxJLnRyYW5zZm9ybT1lZSxNKFUsTyx2LG0pLmF0dHIoInRyYW5zZm9ybSIsaS5nZXRUZXh0VHJhbnNmb3JtKGVlKSl9KGUsdCxQLHIscCxOLEgsaixCLHYsbSksdC5sYXllckNsaXBJZCYmcy5oaWRlT3V0c2lkZVJhbmdlUG9pbnQoYyxQLnNlbGVjdCgidGV4dCIpLHcsTyxmLnhjYWxlbmRhcixmLnljYWxlbmRhcil9KSk7dmFyIGo9ITE9PT1mLmNsaXBvbmF4aXM7cy5zZXRDbGlwVXJsKGMsaj9udWxsOnQubGF5ZXJDbGlwSWQsZSl9KSk7Yy5nZXRDb21wb25lbnRNZXRob2QoImVycm9yYmFycyIsInBsb3QiKShlLFAsdCx2KX0sdG9Nb3ZlSW5zaWRlQmFyOkN9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjc1LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjk3LCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiOjExMSwiLi4vLi4vbGliIjoyMDIsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6MjI0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6MjQ4LCIuLi8uLi9yZWdpc3RyeSI6MjkwLCIuL2F0dHJpYnV0ZXMiOjMwMCwiLi9jb25zdGFudHMiOjMwMiwiLi9oZWxwZXJzIjozMDYsIi4vc3R5bGUiOjMxNCwiLi91bmlmb3JtX3RleHQiOjMxNixkMzo5LCJmYXN0LWlzbnVtZXJpYyI6MTF9XSwzMTI6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlLHQscixuLGEpe3ZhciBpPXQuYzJwKG4/ZS5zMDplLnAwLCEwKSxvPXQuYzJwKG4/ZS5zMTplLnAxLCEwKSxsPXIuYzJwKG4/ZS5wMDplLnMwLCEwKSxzPXIuYzJwKG4/ZS5wMTplLnMxLCEwKTtyZXR1cm4gYT9bKGkrbykvMiwobCtzKS8yXTpuP1tvLChsK3MpLzJdOlsoaStvKS8yLHNdfXQuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciByLGE9ZS5jZCxpPWUueGF4aXMsbz1lLnlheGlzLGw9YVswXS50cmFjZSxzPSJmdW5uZWwiPT09bC50eXBlLGM9ImgiPT09bC5vcmllbnRhdGlvbix1PVtdO2lmKCExPT09dClmb3Iocj0wO3I8YS5sZW5ndGg7cisrKWFbcl0uc2VsZWN0ZWQ9MDtlbHNlIGZvcihyPTA7cjxhLmxlbmd0aDtyKyspe3ZhciBmPWFbcl0sZD0iY3QiaW4gZj9mLmN0Om4oZixpLG8sYyxzKTt0LmNvbnRhaW5zKGQsITEscixlKT8odS5wdXNoKHtwb2ludE51bWJlcjpyLHg6aS5jMmQoZi54KSx5Om8uYzJkKGYueSl9KSxmLnNlbGVjdGVkPTEpOmYuc2VsZWN0ZWQ9MH1yZXR1cm4gdX19LHt9XSwzMTM6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPWk7dmFyIG49ZSgiLi4vLi4vbGliIikuZGlzdGluY3RWYWxzLGE9ZSgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtmdW5jdGlvbiBpKGUsdCl7dGhpcy50cmFjZXM9ZSx0aGlzLnNlcE5lZ1ZhbD10LnNlcE5lZ1ZhbCx0aGlzLm92ZXJsYXBOb01lcmdlPXQub3ZlcmxhcE5vTWVyZ2U7Zm9yKHZhciByPTEvMCxpPVtdLG89MDtvPGUubGVuZ3RoO28rKyl7Zm9yKHZhciBsPWVbb10scz0wO3M8bC5sZW5ndGg7cysrKXt2YXIgYz1sW3NdO2MucCE9PWEmJmkucHVzaChjLnApfWxbMF0mJmxbMF0ud2lkdGgxJiYocj1NYXRoLm1pbihsWzBdLndpZHRoMSxyKSl9dGhpcy5wb3NpdGlvbnM9aTt2YXIgdT1uKGkse3VuaXRNaW5EaWZmOnQudW5pdE1pbkRpZmZ9KTt0aGlzLmRpc3RpbmN0UG9zaXRpb25zPXUudmFscywxPT09dS52YWxzLmxlbmd0aCYmciE9PTEvMD90aGlzLm1pbkRpZmY9cjp0aGlzLm1pbkRpZmY9TWF0aC5taW4odS5taW5EaWZmLHIpLHRoaXMuYmluV2lkdGg9dGhpcy5taW5EaWZmLHRoaXMuYmlucz17fX1pLnByb3RvdHlwZS5wdXQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmdldExhYmVsKGUsdCksbj10aGlzLmJpbnNbcl18fDA7cmV0dXJuIHRoaXMuYmluc1tyXT1uK3Qsbn0saS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5nZXRMYWJlbChlLHQpO3JldHVybiB0aGlzLmJpbnNbcl18fDB9LGkucHJvdG90eXBlLmdldExhYmVsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQ8MCYmdGhpcy5zZXBOZWdWYWw/InYiOiJeIikrKHRoaXMub3ZlcmxhcE5vTWVyZ2U/ZTpNYXRoLnJvdW5kKGUvdGhpcy5iaW5XaWR0aCkpfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjoxODEsIi4uLy4uL2xpYiI6MjAyfV0sMzE0OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoImQzIiksYT1lKCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaT1lKCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxvPWUoIi4uLy4uL2xpYiIpLGw9ZSgiLi4vLi4vcmVnaXN0cnkiKSxzPWUoIi4vdW5pZm9ybV90ZXh0IikucmVzaXplVGV4dCxjPWUoIi4vYXR0cmlidXRlcyIpLHU9Yy50ZXh0Zm9udCxmPWMuaW5zaWRldGV4dGZvbnQsZD1jLm91dHNpZGV0ZXh0Zm9udCxwPWUoIi4vaGVscGVycyIpO2Z1bmN0aW9uIGgoZSx0LHIpe2kucG9pbnRTdHlsZShlLnNlbGVjdEFsbCgicGF0aCIpLHQsciksZyhlLHQscil9ZnVuY3Rpb24gZyhlLHQscil7ZS5zZWxlY3RBbGwoInRleHQiKS5lYWNoKChmdW5jdGlvbihlKXt2YXIgYT1uLnNlbGVjdCh0aGlzKSxsPW8uZW5zdXJlVW5pZm9ybUZvbnRTaXplKHIsdihhLGUsdCxyKSk7aS5mb250KGEsbCl9KSl9ZnVuY3Rpb24gdihlLHQscixuKXt2YXIgYT1uLl9mdWxsTGF5b3V0LmZvbnQsaT1yLnRleHRmb250O2lmKGUuY2xhc3NlZCgiYmFydGV4dC1pbnNpZGUiKSl7dmFyIG89Xyh0LHIpO2k9eShyLHQuaSxhLG8pfWVsc2UgZS5jbGFzc2VkKCJiYXJ0ZXh0LW91dHNpZGUiKSYmKGk9eChyLHQuaSxhKSk7cmV0dXJuIGl9ZnVuY3Rpb24gbShlLHQscil7cmV0dXJuIGIodSxlLnRleHRmb250LHQscil9ZnVuY3Rpb24geShlLHQscixuKXt2YXIgaT1tKGUsdCxyKTtyZXR1cm4odm9pZCAwPT09ZS5faW5wdXQudGV4dGZvbnR8fHZvaWQgMD09PWUuX2lucHV0LnRleHRmb250LmNvbG9yfHxBcnJheS5pc0FycmF5KGUudGV4dGZvbnQuY29sb3IpJiZ2b2lkIDA9PT1lLnRleHRmb250LmNvbG9yW3RdKSYmKGk9e2NvbG9yOmEuY29udHJhc3QobiksZmFtaWx5OmkuZmFtaWx5LHNpemU6aS5zaXplfSksYihmLGUuaW5zaWRldGV4dGZvbnQsdCxpKX1mdW5jdGlvbiB4KGUsdCxyKXt2YXIgbj1tKGUsdCxyKTtyZXR1cm4gYihkLGUub3V0c2lkZXRleHRmb250LHQsbil9ZnVuY3Rpb24gYihlLHQscixuKXt0PXR8fHt9O3ZhciBhPXAuZ2V0VmFsdWUodC5mYW1pbHksciksaT1wLmdldFZhbHVlKHQuc2l6ZSxyKSxvPXAuZ2V0VmFsdWUodC5jb2xvcixyKTtyZXR1cm57ZmFtaWx5OnAuY29lcmNlU3RyaW5nKGUuZmFtaWx5LGEsbi5mYW1pbHkpLHNpemU6cC5jb2VyY2VOdW1iZXIoZS5zaXplLGksbi5zaXplKSxjb2xvcjpwLmNvZXJjZUNvbG9yKGUuY29sb3IsbyxuLmNvbG9yKX19ZnVuY3Rpb24gXyhlLHQpe3JldHVybiJ3YXRlcmZhbGwiPT09dC50eXBlP3RbZS5kaXJdLm1hcmtlci5jb2xvcjplLm1jfHx0Lm1hcmtlci5jb2xvcn10LmV4cG9ydHM9e3N0eWxlOmZ1bmN0aW9uKGUpe3ZhciB0PW4uc2VsZWN0KGUpLnNlbGVjdEFsbCgiZy5iYXJsYXllciIpLnNlbGVjdEFsbCgiZy50cmFjZSIpO3MoZSx0LCJiYXIiKTt2YXIgcj10LnNpemUoKSxhPWUuX2Z1bGxMYXlvdXQ7dC5zdHlsZSgib3BhY2l0eSIsKGZ1bmN0aW9uKGUpe3JldHVybiBlWzBdLnRyYWNlLm9wYWNpdHl9KSkuZWFjaCgoZnVuY3Rpb24oZSl7KCJzdGFjayI9PT1hLmJhcm1vZGUmJnI+MXx8MD09PWEuYmFyZ2FwJiYwPT09YS5iYXJncm91cGdhcCYmIWVbMF0udHJhY2UubWFya2VyLmxpbmUud2lkdGgpJiZuLnNlbGVjdCh0aGlzKS5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIil9KSksdC5zZWxlY3RBbGwoImcucG9pbnRzIikuZWFjaCgoZnVuY3Rpb24odCl7aChuLnNlbGVjdCh0aGlzKSx0WzBdLnRyYWNlLGUpfSkpLGwuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJzdHlsZSIpKHQpfSxzdHlsZVRleHRQb2ludHM6ZyxzdHlsZU9uU2VsZWN0OmZ1bmN0aW9uKGUsdCxyKXt2YXIgYT10WzBdLnRyYWNlO2Euc2VsZWN0ZWRwb2ludHM/ZnVuY3Rpb24oZSx0LHIpe2kuc2VsZWN0ZWRQb2ludFN0eWxlKGUuc2VsZWN0QWxsKCJwYXRoIiksdCksZnVuY3Rpb24oZSx0LHIpe2UuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIGEsbD1uLnNlbGVjdCh0aGlzKTtpZihlLnNlbGVjdGVkKXthPW8uZW5zdXJlVW5pZm9ybUZvbnRTaXplKHIsdihsLGUsdCxyKSk7dmFyIHM9dC5zZWxlY3RlZC50ZXh0Zm9udCYmdC5zZWxlY3RlZC50ZXh0Zm9udC5jb2xvcjtzJiYoYS5jb2xvcj1zKSxpLmZvbnQobCxhKX1lbHNlIGkuc2VsZWN0ZWRUZXh0U3R5bGUobCx0KX0pKX0oZS5zZWxlY3RBbGwoInRleHQiKSx0LHIpfShyLGEsZSk6KGgocixhLGUpLGwuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJzdHlsZSIpKHIpKX0sZ2V0SW5zaWRlVGV4dEZvbnQ6eSxnZXRPdXRzaWRlVGV4dEZvbnQ6eCxnZXRCYXJDb2xvcjpfLHJlc2l6ZVRleHQ6c319LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NzUsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6OTcsIi4uLy4uL2xpYiI6MjAyLCIuLi8uLi9yZWdpc3RyeSI6MjkwLCIuL2F0dHJpYnV0ZXMiOjMwMCwiLi9oZWxwZXJzIjozMDYsIi4vdW5pZm9ybV90ZXh0IjozMTYsZDM6OX1dLDMxNTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYT1lKCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyIpLmhhc0NvbG9yc2NhbGUsaT1lKCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsbyxsKXtyKCJtYXJrZXIuY29sb3IiLG8pLGEoZSwibWFya2VyIikmJmkoZSx0LGwscix7cHJlZml4OiJtYXJrZXIuIixjTGV0dGVyOiJjIn0pLHIoIm1hcmtlci5saW5lLmNvbG9yIixuLmRlZmF1bHRMaW5lKSxhKGUsIm1hcmtlci5saW5lIikmJmkoZSx0LGwscix7cHJlZml4OiJtYXJrZXIubGluZS4iLGNMZXR0ZXI6ImMifSkscigibWFya2VyLmxpbmUud2lkdGgiKSxyKCJtYXJrZXIub3BhY2l0eSIpLHIoInNlbGVjdGVkLm1hcmtlci5jb2xvciIpLHIoInVuc2VsZWN0ZWQubWFya2VyLmNvbG9yIil9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjc1LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjg1LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyI6ODZ9XSwzMTY6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiZDMiKSxhPWUoIi4uLy4uL2xpYiIpO2Z1bmN0aW9uIGkoZSl7cmV0dXJuIl8iK2UrIlRleHRfbWluc2l6ZSJ9dC5leHBvcnRzPXtyZWNvcmRNaW5UZXh0U2l6ZTpmdW5jdGlvbihlLHQscil7aWYoci51bmlmb3JtdGV4dC5tb2RlKXt2YXIgbj1pKGUpLGE9ci51bmlmb3JtdGV4dC5taW5zaXplLG89dC5zY2FsZSp0LmZvbnRTaXplO3QuaGlkZT1vPGEscltuXT1yW25dfHwxLzAsdC5oaWRlfHwocltuXT1NYXRoLm1pbihyW25dLE1hdGgubWF4KG8sYSkpKX19LGNsZWFyTWluVGV4dFNpemU6ZnVuY3Rpb24oZSx0KXt0W2koZSldPXZvaWQgMH0scmVzaXplVGV4dDpmdW5jdGlvbihlLHQscil7dmFyIGk9ZS5fZnVsbExheW91dCxvPWlbIl8iK3IrIlRleHRfbWluc2l6ZSJdO2lmKG8pe3ZhciBsLHM9ImhpZGUiPT09aS51bmlmb3JtdGV4dC5tb2RlO3N3aXRjaChyKXtjYXNlImZ1bm5lbGFyZWEiOmNhc2UicGllIjpjYXNlInN1bmJ1cnN0IjpsPSJnLnNsaWNlIjticmVhaztjYXNlInRyZWVtYXAiOmw9Imcuc2xpY2UsIGcucGF0aGJhciI7YnJlYWs7ZGVmYXVsdDpsPSJnLnBvaW50cyA+IGcucG9pbnQifXQuc2VsZWN0QWxsKGwpLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWUudHJhbnNmb3JtO3QmJih0LnNjYWxlPXMmJnQuaGlkZT8wOm8vdC5mb250U2l6ZSxuLnNlbGVjdCh0aGlzKS5zZWxlY3QoInRleHQiKS5hdHRyKCJ0cmFuc2Zvcm0iLGEuZ2V0VGV4dFRyYW5zZm9ybSh0KSkpfSkpfX19fSx7Ii4uLy4uL2xpYiI6MjAyLGQzOjl9XSwzMTc6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGE9ZSgiLi4vLi4vcGxvdHMvZG9tYWluIikuYXR0cmlidXRlcyxpPWUoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLG89ZSgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIiksbD1lKCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLHM9ZSgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLnRleHR0ZW1wbGF0ZUF0dHJzLGM9ZSgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsdT1pKHtlZGl0VHlwZToicGxvdCIsYXJyYXlPazohMCxjb2xvckVkaXRUeXBlOiJwbG90In0pO3QuZXhwb3J0cz17bGFiZWxzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGxhYmVsMDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxkbGFiZWw6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWVzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LG1hcmtlcjp7Y29sb3JzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGxpbmU6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpvLmRlZmF1bHRMaW5lLGFycmF5T2s6ITAsZWRpdFR5cGU6InN0eWxlIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowLGFycmF5T2s6ITAsZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LHRleHQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJwbG90In0saG92ZXJ0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsYXJyYXlPazohMCxlZGl0VHlwZToic3R5bGUifSxzY2FsZWdyb3VwOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSx0ZXh0aW5mbzp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsibGFiZWwiLCJ0ZXh0IiwidmFsdWUiLCJwZXJjZW50Il0sZXh0cmFzOlsibm9uZSJdLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJpbmZvOmMoe30sbi5ob3ZlcmluZm8se2ZsYWdzOlsibGFiZWwiLCJ0ZXh0IiwidmFsdWUiLCJwZXJjZW50IiwibmFtZSJdfSksaG92ZXJ0ZW1wbGF0ZTpsKHt9LHtrZXlzOlsibGFiZWwiLCJjb2xvciIsInZhbHVlIiwicGVyY2VudCIsInRleHQiXX0pLHRleHR0ZW1wbGF0ZTpzKHtlZGl0VHlwZToicGxvdCJ9LHtrZXlzOlsibGFiZWwiLCJjb2xvciIsInZhbHVlIiwicGVyY2VudCIsInRleHQiXX0pLHRleHRwb3NpdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaW5zaWRlIiwib3V0c2lkZSIsImF1dG8iLCJub25lIl0sZGZsdDoiYXV0byIsYXJyYXlPazohMCxlZGl0VHlwZToicGxvdCJ9LHRleHRmb250OmMoe30sdSx7fSksaW5zaWRldGV4dG9yaWVudGF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJob3Jpem9udGFsIiwicmFkaWFsIiwidGFuZ2VudGlhbCIsImF1dG8iXSxkZmx0OiJhdXRvIixlZGl0VHlwZToicGxvdCJ9LGluc2lkZXRleHRmb250OmMoe30sdSx7fSksb3V0c2lkZXRleHRmb250OmMoe30sdSx7fSksYXV0b21hcmdpbjp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToicGxvdCJ9LHRpdGxlOnt0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6InBsb3QifSxmb250OmMoe30sdSx7fSkscG9zaXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCBsZWZ0IiwidG9wIGNlbnRlciIsInRvcCByaWdodCIsIm1pZGRsZSBjZW50ZXIiLCJib3R0b20gbGVmdCIsImJvdHRvbSBjZW50ZXIiLCJib3R0b20gcmlnaHQiXSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0sZG9tYWluOmEoe25hbWU6InBpZSIsdHJhY2U6ITAsZWRpdFR5cGU6ImNhbGMifSksaG9sZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxzb3J0Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sZGlyZWN0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJjbG9ja3dpc2UiLCJjb3VudGVyY2xvY2t3aXNlIl0sZGZsdDoiY291bnRlcmNsb2Nrd2lzZSIsZWRpdFR5cGU6ImNhbGMifSxyb3RhdGlvbjp7dmFsVHlwZToibnVtYmVyIixtaW46LTM2MCxtYXg6MzYwLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LHB1bGw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDowLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxfZGVwcmVjYXRlZDp7dGl0bGU6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LHRpdGxlZm9udDpjKHt9LHUse30pLHRpdGxlcG9zaXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCBsZWZ0IiwidG9wIGNlbnRlciIsInRvcCByaWdodCIsIm1pZGRsZSBjZW50ZXIiLCJib3R0b20gbGVmdCIsImJvdHRvbSBjZW50ZXIiLCJib3R0b20gcmlnaHQiXSxlZGl0VHlwZToiY2FsYyJ9fX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo3NCwiLi4vLi4vbGliL2V4dGVuZCI6MTk2LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjoyNDQsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6Mjc1LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjI3NiwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6Mjg5fV0sMzE4OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL3Bsb3RzL3Bsb3RzIik7ci5uYW1lPSJwaWUiLHIucGxvdD1mdW5jdGlvbihlLHQsYSxpKXtuLnBsb3RCYXNlUGxvdChyLm5hbWUsZSx0LGEsaSl9LHIuY2xlYW49ZnVuY3Rpb24oZSx0LGEsaSl7bi5jbGVhbkJhc2VQbG90KHIubmFtZSxlLHQsYSxpKX19LHsiLi4vLi4vcGxvdHMvcGxvdHMiOjI4Mn1dLDMxOTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJmYXN0LWlzbnVtZXJpYyIpLGE9ZSgidGlueWNvbG9yMiIpLGk9ZSgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89e307ZnVuY3Rpb24gbChlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXtyZXR1cm4hIXQmJighISh0PWEodCkpLmlzVmFsaWQoKSYmKHQ9aS5hZGRPcGFjaXR5KHQsdC5nZXRBbHBoYSgpKSxlW3JdfHwoZVtyXT10KSx0KSl9fWZ1bmN0aW9uIHMoZSx0KXt2YXIgcixuPUpTT04uc3RyaW5naWZ5KGUpLGk9dFtuXTtpZighaSl7Zm9yKGk9ZS5zbGljZSgpLHI9MDtyPGUubGVuZ3RoO3IrKylpLnB1c2goYShlW3JdKS5saWdodGVuKDIwKS50b0hleFN0cmluZygpKTtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKWkucHVzaChhKGVbcl0pLmRhcmtlbigyMCkudG9IZXhTdHJpbmcoKSk7dFtuXT1pfXJldHVybiBpfXQuZXhwb3J0cz17Y2FsYzpmdW5jdGlvbihlLHQpe3ZhciByLGEsaT1bXSxvPWUuX2Z1bGxMYXlvdXQscz1vLmhpZGRlbmxhYmVsc3x8W10sYz10LmxhYmVscyx1PXQubWFya2VyLmNvbG9yc3x8W10sZj10LnZhbHVlcyxkPXQuX2xlbmd0aCxwPXQuX2hhc1ZhbHVlcyYmZDtpZih0LmRsYWJlbClmb3IoYz1uZXcgQXJyYXkoZCkscj0wO3I8ZDtyKyspY1tyXT1TdHJpbmcodC5sYWJlbDArcip0LmRsYWJlbCk7dmFyIGg9e30sZz1sKG9bIl8iK3QudHlwZSsiY29sb3JtYXAiXSksdj0wLG09ITE7Zm9yKHI9MDtyPGQ7cisrKXt2YXIgeSx4LGI7aWYocCl7aWYoeT1mW3JdLCFuKHkpKWNvbnRpbnVlO2lmKCh5PSt5KTwwKWNvbnRpbnVlfWVsc2UgeT0xO3ZvaWQgMCE9PSh4PWNbcl0pJiYiIiE9PXh8fCh4PXIpO3ZhciBfPWhbeD1TdHJpbmcoeCldO3ZvaWQgMD09PV8/KGhbeF09aS5sZW5ndGgsKGI9LTEhPT1zLmluZGV4T2YoeCkpfHwodis9eSksaS5wdXNoKHt2OnksbGFiZWw6eCxjb2xvcjpnKHVbcl0seCksaTpyLHB0czpbcl0saGlkZGVuOmJ9KSk6KG09ITAsKGE9aVtfXSkudis9eSxhLnB0cy5wdXNoKHIpLGEuaGlkZGVufHwodis9eSksITE9PT1hLmNvbG9yJiZ1W3JdJiYoYS5jb2xvcj1nKHVbcl0seCkpKX1yZXR1cm4oImZ1bm5lbGFyZWEiPT09dC50eXBlP206dC5zb3J0KSYmaS5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiB0LnYtZS52fSkpLGlbMF0mJihpWzBdLnZUb3RhbD12KSxpfSxjcm9zc1RyYWNlQ2FsYzpmdW5jdGlvbihlLHQpe3ZhciByPSh0fHx7fSkudHlwZTtyfHwocj0icGllIik7dmFyIG49ZS5fZnVsbExheW91dCxhPWUuY2FsY2RhdGEsaT1uW3IrImNvbG9yd2F5Il0sbD1uWyJfIityKyJjb2xvcm1hcCJdO25bImV4dGVuZCIrcisiY29sb3JzIl0mJihpPXMoaSxvKSk7Zm9yKHZhciBjPTAsdT0wO3U8YS5sZW5ndGg7dSsrKXt2YXIgZj1hW3VdO2lmKGZbMF0udHJhY2UudHlwZT09PXIpZm9yKHZhciBkPTA7ZDxmLmxlbmd0aDtkKyspe3ZhciBwPWZbZF07ITE9PT1wLmNvbG9yJiYobFtwLmxhYmVsXT9wLmNvbG9yPWxbcC5sYWJlbF06KGxbcC5sYWJlbF09cC5jb2xvcj1pW2MlaS5sZW5ndGhdLGMrKykpfX19LG1ha2VQdWxsQ29sb3JGbjpsLGdlbmVyYXRlRXh0ZW5kZWRDb2xvcnM6c319LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NzUsImZhc3QtaXNudW1lcmljIjoxMSx0aW55Y29sb3IyOjU4fV0sMzIwOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoImZhc3QtaXNudW1lcmljIiksYT1lKCIuLi8uLi9saWIiKSxpPWUoIi4vYXR0cmlidXRlcyIpLG89ZSgiLi4vLi4vcGxvdHMvZG9tYWluIikuZGVmYXVsdHMsbD1lKCIuLi9iYXIvZGVmYXVsdHMiKS5oYW5kbGVUZXh0O2Z1bmN0aW9uIHMoZSx0KXt2YXIgcj1BcnJheS5pc0FycmF5KGUpLGk9YS5pc0FycmF5T3JUeXBlZEFycmF5KHQpLG89TWF0aC5taW4ocj9lLmxlbmd0aDoxLzAsaT90Lmxlbmd0aDoxLzApO2lmKGlzRmluaXRlKG8pfHwobz0wKSxvJiZpKXtmb3IodmFyIGwscz0wO3M8bztzKyspe3ZhciBjPXRbc107aWYobihjKSYmYz4wKXtsPSEwO2JyZWFrfX1sfHwobz0wKX1yZXR1cm57aGFzTGFiZWxzOnIsaGFzVmFsdWVzOmksbGVuOm99fXQuZXhwb3J0cz17aGFuZGxlTGFiZWxzQW5kVmFsdWVzOnMsc3VwcGx5RGVmYXVsdHM6ZnVuY3Rpb24oZSx0LHIsbil7ZnVuY3Rpb24gYyhyLG4pe3JldHVybiBhLmNvZXJjZShlLHQsaSxyLG4pfXZhciB1PXMoYygibGFiZWxzIiksYygidmFsdWVzIikpLGY9dS5sZW47aWYodC5faGFzTGFiZWxzPXUuaGFzTGFiZWxzLHQuX2hhc1ZhbHVlcz11Lmhhc1ZhbHVlcywhdC5faGFzTGFiZWxzJiZ0Ll9oYXNWYWx1ZXMmJihjKCJsYWJlbDAiKSxjKCJkbGFiZWwiKSksZil7dC5fbGVuZ3RoPWYsYygibWFya2VyLmxpbmUud2lkdGgiKSYmYygibWFya2VyLmxpbmUuY29sb3IiKSxjKCJtYXJrZXIuY29sb3JzIiksYygic2NhbGVncm91cCIpO3ZhciBkLHA9YygidGV4dCIpLGg9YygidGV4dHRlbXBsYXRlIik7aWYoaHx8KGQ9YygidGV4dGluZm8iLEFycmF5LmlzQXJyYXkocCk/InRleHQrcGVyY2VudCI6InBlcmNlbnQiKSksYygiaG92ZXJ0ZXh0IiksYygiaG92ZXJ0ZW1wbGF0ZSIpLGh8fGQmJiJub25lIiE9PWQpe3ZhciBnPWMoInRleHRwb3NpdGlvbiIpO2woZSx0LG4sYyxnLHttb2R1bGVIYXNTZWxlY3RlZDohMSxtb2R1bGVIYXNVbnNlbGVjdGVkOiExLG1vZHVsZUhhc0NvbnN0cmFpbjohMSxtb2R1bGVIYXNDbGlwb25heGlzOiExLG1vZHVsZUhhc1RleHRhbmdsZTohMSxtb2R1bGVIYXNJbnNpZGVhbmNob3I6ITF9KSwoQXJyYXkuaXNBcnJheShnKXx8ImF1dG8iPT09Z3x8Im91dHNpZGUiPT09ZykmJmMoImF1dG9tYXJnaW4iKSwoImluc2lkZSI9PT1nfHwiYXV0byI9PT1nfHxBcnJheS5pc0FycmF5KGcpKSYmYygiaW5zaWRldGV4dG9yaWVudGF0aW9uIil9byh0LG4sYyk7dmFyIHY9YygiaG9sZSIpO2lmKGMoInRpdGxlLnRleHQiKSl7dmFyIG09YygidGl0bGUucG9zaXRpb24iLHY/Im1pZGRsZSBjZW50ZXIiOiJ0b3AgY2VudGVyIik7dnx8Im1pZGRsZSBjZW50ZXIiIT09bXx8KHQudGl0bGUucG9zaXRpb249InRvcCBjZW50ZXIiKSxhLmNvZXJjZUZvbnQoYywidGl0bGUuZm9udCIsbi5mb250KX1jKCJzb3J0IiksYygiZGlyZWN0aW9uIiksYygicm90YXRpb24iKSxjKCJwdWxsIil9ZWxzZSB0LnZpc2libGU9ITF9fX0seyIuLi8uLi9saWIiOjIwMiwiLi4vLi4vcGxvdHMvZG9tYWluIjoyNzUsIi4uL2Jhci9kZWZhdWx0cyI6MzA0LCIuL2F0dHJpYnV0ZXMiOjMxNywiZmFzdC1pc251bWVyaWMiOjExfV0sMzIxOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyIpLmFwcGVuZEFycmF5TXVsdGlQb2ludFZhbHVlczt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcj17Y3VydmVOdW1iZXI6dC5pbmRleCxwb2ludE51bWJlcnM6ZS5wdHMsZGF0YTp0Ll9pbnB1dCxmdWxsRGF0YTp0LGxhYmVsOmUubGFiZWwsY29sb3I6ZS5jb2xvcix2YWx1ZTplLnYscGVyY2VudDplLnBlcmNlbnQsdGV4dDplLnRleHQsdjplLnZ9O3JldHVybiAxPT09ZS5wdHMubGVuZ3RoJiYoci5wb2ludE51bWJlcj1yLmk9ZS5wdHNbMF0pLG4ocix0LGUucHRzKSwiZnVubmVsYXJlYSI9PT10LnR5cGUmJihkZWxldGUgci52LGRlbGV0ZSByLmkpLHJ9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyI6MTExfV0sMzIyOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2xpYiIpO2Z1bmN0aW9uIGEoZSl7cmV0dXJuLTEhPT1lLmluZGV4T2YoImUiKT9lLnJlcGxhY2UoL1suXT8wK2UvLCJlIik6LTEhPT1lLmluZGV4T2YoIi4iKT9lLnJlcGxhY2UoL1suXT8wKyQvLCIiKTplfXIuZm9ybWF0UGllUGVyY2VudD1mdW5jdGlvbihlLHQpe3ZhciByPWEoKDEwMCplKS50b1ByZWNpc2lvbigzKSk7cmV0dXJuIG4ubnVtU2VwYXJhdGUocix0KSsiJSJ9LHIuZm9ybWF0UGllVmFsdWU9ZnVuY3Rpb24oZSx0KXt2YXIgcj1hKGUudG9QcmVjaXNpb24oMTApKTtyZXR1cm4gbi5udW1TZXBhcmF0ZShyLHQpfSxyLmdldEZpcnN0RmlsbGVkPWZ1bmN0aW9uKGUsdCl7aWYoQXJyYXkuaXNBcnJheShlKSlmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49ZVt0W3JdXTtpZihufHwwPT09bnx8IiI9PT1uKXJldHVybiBufX0sci5jYXN0T3B0aW9uPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ci5nZXRGaXJzdEZpbGxlZChlLHQpOmV8fHZvaWQgMH0sci5nZXRSb3RhdGlvbkFuZ2xlPWZ1bmN0aW9uKGUpe3JldHVybigiYXV0byI9PT1lPzA6ZSkqTWF0aC5QSS8xODB9fSx7Ii4uLy4uL2xpYiI6MjAyfV0sMzIzOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz17YXR0cmlidXRlczplKCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czplKCIuL2RlZmF1bHRzIikuc3VwcGx5RGVmYXVsdHMsc3VwcGx5TGF5b3V0RGVmYXVsdHM6ZSgiLi9sYXlvdXRfZGVmYXVsdHMiKSxsYXlvdXRBdHRyaWJ1dGVzOmUoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxjYWxjOmUoIi4vY2FsYyIpLmNhbGMsY3Jvc3NUcmFjZUNhbGM6ZSgiLi9jYWxjIikuY3Jvc3NUcmFjZUNhbGMscGxvdDplKCIuL3Bsb3QiKS5wbG90LHN0eWxlOmUoIi4vc3R5bGUiKSxzdHlsZU9uZTplKCIuL3N0eWxlX29uZSIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJwaWUiLGJhc2VQbG90TW9kdWxlOmUoIi4vYmFzZV9wbG90IiksY2F0ZWdvcmllczpbInBpZS1saWtlIiwicGllIiwic2hvd0xlZ2VuZCJdLG1ldGE6e319fSx7Ii4vYXR0cmlidXRlcyI6MzE3LCIuL2Jhc2VfcGxvdCI6MzE4LCIuL2NhbGMiOjMxOSwiLi9kZWZhdWx0cyI6MzIwLCIuL2xheW91dF9hdHRyaWJ1dGVzIjozMjQsIi4vbGF5b3V0X2RlZmF1bHRzIjozMjUsIi4vcGxvdCI6MzI2LCIuL3N0eWxlIjozMjcsIi4vc3R5bGVfb25lIjozMjh9XSwzMjQ6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPXtoaWRkZW5sYWJlbHM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0scGllY29sb3J3YXk6e3ZhbFR5cGU6ImNvbG9ybGlzdCIsZWRpdFR5cGU6ImNhbGMifSxleHRlbmRwaWVjb2xvcnM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifX19LHt9XSwzMjU6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vbGliIiksYT1lKCIuL2xheW91dF9hdHRyaWJ1dGVzIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gcihyLGkpe3JldHVybiBuLmNvZXJjZShlLHQsYSxyLGkpfXIoImhpZGRlbmxhYmVscyIpLHIoInBpZWNvbG9yd2F5Iix0LmNvbG9yd2F5KSxyKCJleHRlbmRwaWVjb2xvcnMiKX19LHsiLi4vLi4vbGliIjoyMDIsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjMyNH1dLDMyNjpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJkMyIpLGE9ZSgiLi4vLi4vcGxvdHMvcGxvdHMiKSxpPWUoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxvPWUoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxsPWUoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLHM9ZSgiLi4vLi4vbGliIiksYz1zLnN0clNjYWxlLHU9cy5zdHJUcmFuc2xhdGUsZj1lKCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxkPWUoIi4uL2Jhci91bmlmb3JtX3RleHQiKSxwPWQucmVjb3JkTWluVGV4dFNpemUsaD1kLmNsZWFyTWluVGV4dFNpemUsZz1lKCIuLi9iYXIvY29uc3RhbnRzIikuVEVYVFBBRCx2PWUoIi4vaGVscGVycyIpLG09ZSgiLi9ldmVudF9kYXRhIikseT1lKCIuLi8uLi9saWIiKS5pc1ZhbGlkVGV4dFZhbHVlO2Z1bmN0aW9uIHgoZSx0LHIpe3ZhciBhPXJbMF0sbz1hLnRyYWNlLGw9YS5jeCxjPWEuY3k7Il9oYXNIb3ZlckxhYmVsImluIG98fChvLl9oYXNIb3ZlckxhYmVsPSExKSwiX2hhc0hvdmVyRXZlbnQiaW4gb3x8KG8uX2hhc0hvdmVyRXZlbnQ9ITEpLGUub24oIm1vdXNlb3ZlciIsKGZ1bmN0aW9uKGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQsdT10Ll9mdWxsRGF0YVtvLmluZGV4XTtpZighdC5fZHJhZ2dpbmcmJiExIT09ci5ob3Zlcm1vZGUpe3ZhciBmPXUuaG92ZXJpbmZvO2lmKEFycmF5LmlzQXJyYXkoZikmJihmPWkuY2FzdEhvdmVyaW5mbyh7aG92ZXJpbmZvOlt2LmNhc3RPcHRpb24oZixlLnB0cyldLF9tb2R1bGU6by5fbW9kdWxlfSxyLDApKSwiYWxsIj09PWYmJihmPSJsYWJlbCt0ZXh0K3ZhbHVlK3BlcmNlbnQrbmFtZSIpLHUuaG92ZXJ0ZW1wbGF0ZXx8Im5vbmUiIT09ZiYmInNraXAiIT09ZiYmZil7dmFyIGQ9ZS5ySW5zY3JpYmVkfHwwLHA9bCtlLnB4bWlkWzBdKigxLWQpLGg9YytlLnB4bWlkWzFdKigxLWQpLGc9ci5zZXBhcmF0b3JzLHk9W107aWYoZiYmLTEhPT1mLmluZGV4T2YoImxhYmVsIikmJnkucHVzaChlLmxhYmVsKSxlLnRleHQ9di5jYXN0T3B0aW9uKHUuaG92ZXJ0ZXh0fHx1LnRleHQsZS5wdHMpLGYmJi0xIT09Zi5pbmRleE9mKCJ0ZXh0Iikpe3ZhciB4PWUudGV4dDtzLmlzVmFsaWRUZXh0VmFsdWUoeCkmJnkucHVzaCh4KX1lLnZhbHVlPWUudixlLnZhbHVlTGFiZWw9di5mb3JtYXRQaWVWYWx1ZShlLnYsZyksZiYmLTEhPT1mLmluZGV4T2YoInZhbHVlIikmJnkucHVzaChlLnZhbHVlTGFiZWwpLGUucGVyY2VudD1lLnYvYS52VG90YWwsZS5wZXJjZW50TGFiZWw9di5mb3JtYXRQaWVQZXJjZW50KGUucGVyY2VudCxnKSxmJiYtMSE9PWYuaW5kZXhPZigicGVyY2VudCIpJiZ5LnB1c2goZS5wZXJjZW50TGFiZWwpO3ZhciBiPXUuaG92ZXJsYWJlbCxfPWIuZm9udDtpLmxvbmVIb3Zlcih7dHJhY2U6byx4MDpwLWQqYS5yLHgxOnArZCphLnIseTpoLHRleHQ6eS5qb2luKCI8YnI+IiksbmFtZTp1LmhvdmVydGVtcGxhdGV8fC0xIT09Zi5pbmRleE9mKCJuYW1lIik/dS5uYW1lOnZvaWQgMCxpZGVhbEFsaWduOmUucHhtaWRbMF08MD8ibGVmdCI6InJpZ2h0Iixjb2xvcjp2LmNhc3RPcHRpb24oYi5iZ2NvbG9yLGUucHRzKXx8ZS5jb2xvcixib3JkZXJDb2xvcjp2LmNhc3RPcHRpb24oYi5ib3JkZXJjb2xvcixlLnB0cyksZm9udEZhbWlseTp2LmNhc3RPcHRpb24oXy5mYW1pbHksZS5wdHMpLGZvbnRTaXplOnYuY2FzdE9wdGlvbihfLnNpemUsZS5wdHMpLGZvbnRDb2xvcjp2LmNhc3RPcHRpb24oXy5jb2xvcixlLnB0cyksbmFtZUxlbmd0aDp2LmNhc3RPcHRpb24oYi5uYW1lbGVuZ3RoLGUucHRzKSx0ZXh0QWxpZ246di5jYXN0T3B0aW9uKGIuYWxpZ24sZS5wdHMpLGhvdmVydGVtcGxhdGU6di5jYXN0T3B0aW9uKHUuaG92ZXJ0ZW1wbGF0ZSxlLnB0cyksaG92ZXJ0ZW1wbGF0ZUxhYmVsczplLGV2ZW50RGF0YTpbbShlLHUpXX0se2NvbnRhaW5lcjpyLl9ob3ZlcmxheWVyLm5vZGUoKSxvdXRlckNvbnRhaW5lcjpyLl9wYXBlci5ub2RlKCksZ2Q6dH0pLG8uX2hhc0hvdmVyTGFiZWw9ITB9by5faGFzSG92ZXJFdmVudD0hMCx0LmVtaXQoInBsb3RseV9ob3ZlciIse3BvaW50czpbbShlLHUpXSxldmVudDpuLmV2ZW50fSl9fSkpLGUub24oIm1vdXNlb3V0IiwoZnVuY3Rpb24oZSl7dmFyIHI9dC5fZnVsbExheW91dCxhPXQuX2Z1bGxEYXRhW28uaW5kZXhdLGw9bi5zZWxlY3QodGhpcykuZGF0dW0oKTtvLl9oYXNIb3ZlckV2ZW50JiYoZS5vcmlnaW5hbEV2ZW50PW4uZXZlbnQsdC5lbWl0KCJwbG90bHlfdW5ob3ZlciIse3BvaW50czpbbShsLGEpXSxldmVudDpuLmV2ZW50fSksby5faGFzSG92ZXJFdmVudD0hMSksby5faGFzSG92ZXJMYWJlbCYmKGkubG9uZVVuaG92ZXIoci5faG92ZXJsYXllci5ub2RlKCkpLG8uX2hhc0hvdmVyTGFiZWw9ITEpfSkpLGUub24oImNsaWNrIiwoZnVuY3Rpb24oZSl7dmFyIHI9dC5fZnVsbExheW91dCxhPXQuX2Z1bGxEYXRhW28uaW5kZXhdO3QuX2RyYWdnaW5nfHwhMT09PXIuaG92ZXJtb2RlfHwodC5faG92ZXJkYXRhPVttKGUsYSldLGkuY2xpY2sodCxuLmV2ZW50KSl9KSl9ZnVuY3Rpb24gYihlLHQscil7dmFyIG49di5jYXN0T3B0aW9uKGUuaW5zaWRldGV4dGZvbnQuY29sb3IsdC5wdHMpOyFuJiZlLl9pbnB1dC50ZXh0Zm9udCYmKG49di5jYXN0T3B0aW9uKGUuX2lucHV0LnRleHRmb250LmNvbG9yLHQucHRzKSk7dmFyIGE9di5jYXN0T3B0aW9uKGUuaW5zaWRldGV4dGZvbnQuZmFtaWx5LHQucHRzKXx8di5jYXN0T3B0aW9uKGUudGV4dGZvbnQuZmFtaWx5LHQucHRzKXx8ci5mYW1pbHksaT12LmNhc3RPcHRpb24oZS5pbnNpZGV0ZXh0Zm9udC5zaXplLHQucHRzKXx8di5jYXN0T3B0aW9uKGUudGV4dGZvbnQuc2l6ZSx0LnB0cyl8fHIuc2l6ZTtyZXR1cm57Y29sb3I6bnx8by5jb250cmFzdCh0LmNvbG9yKSxmYW1pbHk6YSxzaXplOml9fWZ1bmN0aW9uIF8oZSx0KXtmb3IodmFyIHIsbixhPTA7YTxlLmxlbmd0aDthKyspaWYoKG49KHI9ZVthXVswXSkudHJhY2UpLnRpdGxlLnRleHQpe3ZhciBpPW4udGl0bGUudGV4dDtuLl9tZXRhJiYoaT1zLnRlbXBsYXRlU3RyaW5nKGksbi5fbWV0YSkpO3ZhciBvPWwudGVzdGVyLmFwcGVuZCgidGV4dCIpLmF0dHIoImRhdGEtbm90ZXgiLDEpLnRleHQoaSkuY2FsbChsLmZvbnQsbi50aXRsZS5mb250KS5jYWxsKGYuY29udmVydFRvVHNwYW5zLHQpLGM9bC5iQm94KG8ubm9kZSgpLCEwKTtyLnRpdGxlQm94PXt3aWR0aDpjLndpZHRoLGhlaWdodDpjLmhlaWdodH0sby5yZW1vdmUoKX19ZnVuY3Rpb24gdyhlLHQscil7dmFyIG49ci5yfHx0LnJweDEsYT10LnJJbnNjcmliZWQ7aWYodC5zdGFydGFuZ2xlPT09dC5zdG9wYW5nbGUpcmV0dXJue3JDZW50ZXI6MS1hLHNjYWxlOjAscm90YXRlOjAsdGV4dFBvc0FuZ2xlOjB9O3ZhciBpLG89dC5yaW5nLGw9MT09PW8mJk1hdGguYWJzKHQuc3RhcnRhbmdsZS10LnN0b3BhbmdsZSk9PT0yKk1hdGguUEkscz10LmhhbGZhbmdsZSxjPXQubWlkYW5nbGUsdT1yLnRyYWNlLmluc2lkZXRleHRvcmllbnRhdGlvbixmPSJob3Jpem9udGFsIj09PXUsZD0idGFuZ2VudGlhbCI9PT11LHA9InJhZGlhbCI9PT11LGg9ImF1dG8iPT09dSxnPVtdO2lmKCFoKXt2YXIgdixtPWZ1bmN0aW9uKHIsYSl7aWYoZnVuY3Rpb24oZSx0KXt2YXIgcj1lLnN0YXJ0YW5nbGUsbj1lLnN0b3BhbmdsZTtyZXR1cm4gcj50JiZ0Pm58fHI8dCYmdDxufSh0LHIpKXt2YXIgbD1NYXRoLmFicyhyLXQuc3RhcnRhbmdsZSkscz1NYXRoLmFicyhyLXQuc3RvcGFuZ2xlKSxjPWw8cz9sOnM7KGk9InRhbiI9PT1hP2soZSxuLG8sYywwKTpUKGUsbixvLGMsTWF0aC5QSS8yKSkudGV4dFBvc0FuZ2xlPXIsZy5wdXNoKGkpfX07aWYoZnx8ZCl7Zm9yKHY9NDt2Pj0tNDt2LT0yKW0oTWF0aC5QSSp2LCJ0YW4iKTtmb3Iodj00O3Y+PS00O3YtPTIpbShNYXRoLlBJKih2KzEpLCJ0YW4iKX1pZihmfHxwKXtmb3Iodj00O3Y+PS00O3YtPTIpbShNYXRoLlBJKih2KzEuNSksInJhZCIpO2Zvcih2PTQ7dj49LTQ7di09MiltKE1hdGguUEkqKHYrLjUpLCJyYWQiKX19aWYobHx8aHx8Zil7dmFyIHk9TWF0aC5zcXJ0KGUud2lkdGgqZS53aWR0aCtlLmhlaWdodCplLmhlaWdodCk7aWYoKGk9e3NjYWxlOmEqbioyL3ksckNlbnRlcjoxLWEscm90YXRlOjB9KS50ZXh0UG9zQW5nbGU9KHQuc3RhcnRhbmdsZSt0LnN0b3BhbmdsZSkvMixpLnNjYWxlPj0xKXJldHVybiBpO2cucHVzaChpKX0oaHx8cCkmJigoaT1UKGUsbixvLHMsYykpLnRleHRQb3NBbmdsZT0odC5zdGFydGFuZ2xlK3Quc3RvcGFuZ2xlKS8yLGcucHVzaChpKSksKGh8fGQpJiYoKGk9ayhlLG4sbyxzLGMpKS50ZXh0UG9zQW5nbGU9KHQuc3RhcnRhbmdsZSt0LnN0b3BhbmdsZSkvMixnLnB1c2goaSkpO2Zvcih2YXIgeD0wLGI9MCxfPTA7XzxnLmxlbmd0aDtfKyspe3ZhciB3PWdbX10uc2NhbGU7aWYoYjx3JiYoYj13LHg9XyksIWgmJmI+PTEpYnJlYWt9cmV0dXJuIGdbeF19ZnVuY3Rpb24gVChlLHQscixuLGEpe3Q9TWF0aC5tYXgoMCx0LTIqZyk7dmFyIGk9ZS53aWR0aC9lLmhlaWdodCxvPUwoaSxuLHQscik7cmV0dXJue3NjYWxlOjIqby9lLmhlaWdodCxyQ2VudGVyOk0oaSxvL3QpLHJvdGF0ZTpBKGEpfX1mdW5jdGlvbiBrKGUsdCxyLG4sYSl7dD1NYXRoLm1heCgwLHQtMipnKTt2YXIgaT1lLmhlaWdodC9lLndpZHRoLG89TChpLG4sdCxyKTtyZXR1cm57c2NhbGU6MipvL2Uud2lkdGgsckNlbnRlcjpNKGksby90KSxyb3RhdGU6QShhK01hdGguUEkvMil9fWZ1bmN0aW9uIE0oZSx0KXtyZXR1cm4gTWF0aC5jb3ModCktZSp0fWZ1bmN0aW9uIEEoZSl7cmV0dXJuKDE4MC9NYXRoLlBJKmUrNzIwKSUxODAtOTB9ZnVuY3Rpb24gTChlLHQscixuKXt2YXIgYT1lKzEvKDIqTWF0aC50YW4odCkpO3JldHVybiByKk1hdGgubWluKDEvKE1hdGguc3FydChhKmErLjUpK2EpLG4vKE1hdGguc3FydChlKmUrbi8yKStlKSl9ZnVuY3Rpb24gUyhlLHQpe3JldHVybiBlLnYhPT10LnZUb3RhbHx8dC50cmFjZS5ob2xlP01hdGgubWluKDEvKDErMS9NYXRoLnNpbihlLmhhbGZhbmdsZSkpLGUucmluZy8yKToxfWZ1bmN0aW9uIEMoZSx0KXt2YXIgcj10LnB4bWlkWzBdLG49dC5weG1pZFsxXSxhPWUud2lkdGgvMixpPWUuaGVpZ2h0LzI7cmV0dXJuIHI8MCYmKGEqPS0xKSxuPDAmJihpKj0tMSkse3NjYWxlOjEsckNlbnRlcjoxLHJvdGF0ZTowLHg6YStNYXRoLmFicyhpKSooYT4wPzE6LTEpLzIseTppLygxK3Iqci8obipuKSksb3V0c2lkZTohMH19ZnVuY3Rpb24gTyhlLHQpe3ZhciByLG4sYSxpPWUudHJhY2Usbz17eDplLmN4LHk6ZS5jeX0sbD17dHg6MCx0eTowfTtsLnR5Kz1pLnRpdGxlLmZvbnQuc2l6ZSxhPVAoaSksLTEhPT1pLnRpdGxlLnBvc2l0aW9uLmluZGV4T2YoInRvcCIpPyhvLnktPSgxK2EpKmUucixsLnR5LT1lLnRpdGxlQm94LmhlaWdodCk6LTEhPT1pLnRpdGxlLnBvc2l0aW9uLmluZGV4T2YoImJvdHRvbSIpJiYoby55Kz0oMSthKSplLnIpO3ZhciBzLGMsdT0ocz1lLnIsYz1lLnRyYWNlLmFzcGVjdHJhdGlvLHMvKHZvaWQgMD09PWM/MTpjKSksZj10LncqKGkuZG9tYWluLnhbMV0taS5kb21haW4ueFswXSkvMjtyZXR1cm4tMSE9PWkudGl0bGUucG9zaXRpb24uaW5kZXhPZigibGVmdCIpPyhmKz11LG8ueC09KDErYSkqdSxsLnR4Kz1lLnRpdGxlQm94LndpZHRoLzIpOi0xIT09aS50aXRsZS5wb3NpdGlvbi5pbmRleE9mKCJjZW50ZXIiKT9mKj0yOi0xIT09aS50aXRsZS5wb3NpdGlvbi5pbmRleE9mKCJyaWdodCIpJiYoZis9dSxvLngrPSgxK2EpKnUsbC50eC09ZS50aXRsZUJveC53aWR0aC8yKSxyPWYvZS50aXRsZUJveC53aWR0aCxuPUQoZSx0KS9lLnRpdGxlQm94LmhlaWdodCx7eDpvLngseTpvLnksc2NhbGU6TWF0aC5taW4ocixuKSx0eDpsLnR4LHR5OmwudHl9fWZ1bmN0aW9uIEQoZSx0KXt2YXIgcj1lLnRyYWNlLG49dC5oKihyLmRvbWFpbi55WzFdLXIuZG9tYWluLnlbMF0pO3JldHVybiBNYXRoLm1pbihlLnRpdGxlQm94LmhlaWdodCxuLzIpfWZ1bmN0aW9uIFAoZSl7dmFyIHQscj1lLnB1bGw7aWYoIXIpcmV0dXJuIDA7aWYoQXJyYXkuaXNBcnJheShyKSlmb3Iocj0wLHQ9MDt0PGUucHVsbC5sZW5ndGg7dCsrKWUucHVsbFt0XT5yJiYocj1lLnB1bGxbdF0pO3JldHVybiByfWZ1bmN0aW9uIHooZSx0KXtmb3IodmFyIHI9W10sbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgYT1lW25dWzBdLGk9YS50cmFjZSxvPWkuZG9tYWluLGw9dC53KihvLnhbMV0tby54WzBdKSxzPXQuaCooby55WzFdLW8ueVswXSk7aS50aXRsZS50ZXh0JiYibWlkZGxlIGNlbnRlciIhPT1pLnRpdGxlLnBvc2l0aW9uJiYocy09RChhLHQpKTt2YXIgYz1sLzIsdT1zLzI7ImZ1bm5lbGFyZWEiIT09aS50eXBlfHxpLnNjYWxlZ3JvdXB8fCh1Lz1pLmFzcGVjdHJhdGlvKSxhLnI9TWF0aC5taW4oYyx1KS8oMStQKGkpKSxhLmN4PXQubCt0LncqKGkuZG9tYWluLnhbMV0raS5kb21haW4ueFswXSkvMixhLmN5PXQudCt0LmgqKDEtaS5kb21haW4ueVswXSktcy8yLGkudGl0bGUudGV4dCYmLTEhPT1pLnRpdGxlLnBvc2l0aW9uLmluZGV4T2YoImJvdHRvbSIpJiYoYS5jeS09RChhLHQpKSxpLnNjYWxlZ3JvdXAmJi0xPT09ci5pbmRleE9mKGkuc2NhbGVncm91cCkmJnIucHVzaChpLnNjYWxlZ3JvdXApfSFmdW5jdGlvbihlLHQpe2Zvcih2YXIgcixuLGEsaT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgbz0xLzAsbD10W2ldO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspaWYocj1lW25dWzBdLChhPXIudHJhY2UpLnNjYWxlZ3JvdXA9PT1sKXt2YXIgcztpZigicGllIj09PWEudHlwZSlzPXIucipyLnI7ZWxzZSBpZigiZnVubmVsYXJlYSI9PT1hLnR5cGUpe3ZhciBjLHU7YS5hc3BlY3RyYXRpbz4xPyhjPXIucix1PWMvYS5hc3BlY3RyYXRpbyk6KHU9ci5yLGM9dSphLmFzcGVjdHJhdGlvKSxjKj0oMSthLmJhc2VyYXRpbykvMixzPWMqdX1vPU1hdGgubWluKG8scy9yLnZUb3RhbCl9Zm9yKG49MDtuPGUubGVuZ3RoO24rKylpZihyPWVbbl1bMF0sKGE9ci50cmFjZSkuc2NhbGVncm91cD09PWwpe3ZhciBmPW8qci52VG90YWw7ImZ1bm5lbGFyZWEiPT09YS50eXBlJiYoZi89KDErYS5iYXNlcmF0aW8pLzIsZi89YS5hc3BlY3RyYXRpbyksci5yPU1hdGguc3FydChmKX19fShlLHIpfWZ1bmN0aW9uIFIoZSx0KXtyZXR1cm5bZSpNYXRoLnNpbih0KSwtZSpNYXRoLmNvcyh0KV19ZnVuY3Rpb24gRShlLHQscil7dmFyIG49ZS5fZnVsbExheW91dCxhPXIudHJhY2UsaT1hLnRleHR0ZW1wbGF0ZSxvPWEudGV4dGluZm87aWYoIWkmJm8mJiJub25lIiE9PW8pe3ZhciBsLGM9by5zcGxpdCgiKyIpLHU9ZnVuY3Rpb24oZSl7cmV0dXJuLTEhPT1jLmluZGV4T2YoZSl9LGY9dSgibGFiZWwiKSxkPXUoInRleHQiKSxwPXUoInZhbHVlIiksaD11KCJwZXJjZW50IiksZz1uLnNlcGFyYXRvcnM7aWYobD1mP1t0LmxhYmVsXTpbXSxkKXt2YXIgbT12LmdldEZpcnN0RmlsbGVkKGEudGV4dCx0LnB0cyk7eShtKSYmbC5wdXNoKG0pfXAmJmwucHVzaCh2LmZvcm1hdFBpZVZhbHVlKHQudixnKSksaCYmbC5wdXNoKHYuZm9ybWF0UGllUGVyY2VudCh0LnYvci52VG90YWwsZykpLHQudGV4dD1sLmpvaW4oIjxicj4iKX1pZihpKXt2YXIgeD1zLmNhc3RPcHRpb24oYSx0LmksInRleHR0ZW1wbGF0ZSIpO2lmKHgpe3ZhciBiPWZ1bmN0aW9uKGUpe3JldHVybntsYWJlbDplLmxhYmVsLHZhbHVlOmUudix2YWx1ZUxhYmVsOnYuZm9ybWF0UGllVmFsdWUoZS52LG4uc2VwYXJhdG9ycykscGVyY2VudDplLnYvci52VG90YWwscGVyY2VudExhYmVsOnYuZm9ybWF0UGllUGVyY2VudChlLnYvci52VG90YWwsbi5zZXBhcmF0b3JzKSxjb2xvcjplLmNvbG9yLHRleHQ6ZS50ZXh0LGN1c3RvbWRhdGE6cy5jYXN0T3B0aW9uKGEsZS5pLCJjdXN0b21kYXRhIil9fSh0KSxfPXYuZ2V0Rmlyc3RGaWxsZWQoYS50ZXh0LHQucHRzKTsoeShfKXx8IiI9PT1fKSYmKGIudGV4dD1fKSx0LnRleHQ9cy50ZXh0dGVtcGxhdGVTdHJpbmcoeCxiLGUuX2Z1bGxMYXlvdXQuX2QzbG9jYWxlLGIsYS5fbWV0YXx8e30pfWVsc2UgdC50ZXh0PSIifX1mdW5jdGlvbiBJKGUsdCl7dmFyIHI9ZS5yb3RhdGUqTWF0aC5QSS8xODAsbj1NYXRoLmNvcyhyKSxhPU1hdGguc2luKHIpLGk9KHQubGVmdCt0LnJpZ2h0KS8yLG89KHQudG9wK3QuYm90dG9tKS8yO2UudGV4dFg9aSpuLW8qYSxlLnRleHRZPWkqYStvKm4sZS5ub0NlbnRlcj0hMH10LmV4cG9ydHM9e3Bsb3Q6ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLl9mdWxsTGF5b3V0LGk9ci5fc2l6ZTtoKCJwaWUiLHIpLF8odCxlKSx6KHQsaSk7dmFyIGQ9cy5tYWtlVHJhY2VHcm91cHMoci5fcGllbGF5ZXIsdCwidHJhY2UiKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZD1uLnNlbGVjdCh0aGlzKSxoPXRbMF0sZz1oLnRyYWNlOyFmdW5jdGlvbihlKXt2YXIgdCxyLG4sYT1lWzBdLGk9YS5yLG89YS50cmFjZSxsPXYuZ2V0Um90YXRpb25BbmdsZShvLnJvdGF0aW9uKSxzPTIqTWF0aC5QSS9hLnZUb3RhbCxjPSJweDAiLHU9InB4MSI7aWYoImNvdW50ZXJjbG9ja3dpc2UiPT09by5kaXJlY3Rpb24pe2Zvcih0PTA7dDxlLmxlbmd0aCYmZVt0XS5oaWRkZW47dCsrKTtpZih0PT09ZS5sZW5ndGgpcmV0dXJuO2wrPXMqZVt0XS52LHMqPS0xLGM9InB4MSIsdT0icHgwIn1mb3Iobj1SKGksbCksdD0wO3Q8ZS5sZW5ndGg7dCsrKShyPWVbdF0pLmhpZGRlbnx8KHJbY109bixyLnN0YXJ0YW5nbGU9bCxsKz1zKnIudi8yLHIucHhtaWQ9UihpLGwpLHIubWlkYW5nbGU9bCxsKz1zKnIudi8yLG49UihpLGwpLHIuc3RvcGFuZ2xlPWwsclt1XT1uLHIubGFyZ2VBcmM9ci52PmEudlRvdGFsLzI/MTowLHIuaGFsZmFuZ2xlPU1hdGguUEkqTWF0aC5taW4oci52L2EudlRvdGFsLC41KSxyLnJpbmc9MS1vLmhvbGUsci5ySW5zY3JpYmVkPVMocixhKSl9KHQpLGQuYXR0cigic3Ryb2tlLWxpbmVqb2luIiwicm91bmQiKSxkLmVhY2goKGZ1bmN0aW9uKCl7dmFyIG09bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLnNsaWNlIikuZGF0YSh0KTttLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgic2xpY2UiLCEwKSxtLmV4aXQoKS5yZW1vdmUoKTt2YXIgeT1bW1tdLFtdXSxbW10sW11dXSxfPSExO20uZWFjaCgoZnVuY3Rpb24oYSxpKXtpZihhLmhpZGRlbiluLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInBhdGgsZyIpLnJlbW92ZSgpO2Vsc2V7YS5wb2ludE51bWJlcj1hLmksYS5jdXJ2ZU51bWJlcj1nLmluZGV4LHlbYS5weG1pZFsxXTwwPzA6MV1bYS5weG1pZFswXTwwPzA6MV0ucHVzaChhKTt2YXIgbz1oLmN4LGM9aC5jeSx1PW4uc2VsZWN0KHRoaXMpLGQ9dS5zZWxlY3RBbGwoInBhdGguc3VyZmFjZSIpLmRhdGEoW2FdKTtpZihkLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgic3VyZmFjZSIsITApLnN0eWxlKHsicG9pbnRlci1ldmVudHMiOiJhbGwifSksdS5jYWxsKHgsZSx0KSxnLnB1bGwpe3ZhciBtPSt2LmNhc3RPcHRpb24oZy5wdWxsLGEucHRzKXx8MDttPjAmJihvKz1tKmEucHhtaWRbMF0sYys9bSphLnB4bWlkWzFdKX1hLmN4RmluYWw9byxhLmN5RmluYWw9Yzt2YXIgVD1nLmhvbGU7aWYoYS52PT09aC52VG90YWwpe3ZhciBrPSJNIisobythLnB4MFswXSkrIiwiKyhjK2EucHgwWzFdKStPKGEucHgwLGEucHhtaWQsITAsMSkrTyhhLnB4bWlkLGEucHgwLCEwLDEpKyJaIjtUP2QuYXR0cigiZCIsIk0iKyhvK1QqYS5weDBbMF0pKyIsIisoYytUKmEucHgwWzFdKStPKGEucHgwLGEucHhtaWQsITEsVCkrTyhhLnB4bWlkLGEucHgwLCExLFQpKyJaIitrKTpkLmF0dHIoImQiLGspfWVsc2V7dmFyIE09TyhhLnB4MCxhLnB4MSwhMCwxKTtpZihUKXt2YXIgQT0xLVQ7ZC5hdHRyKCJkIiwiTSIrKG8rVCphLnB4MVswXSkrIiwiKyhjK1QqYS5weDFbMV0pK08oYS5weDEsYS5weDAsITEsVCkrImwiK0EqYS5weDBbMF0rIiwiK0EqYS5weDBbMV0rTSsiWiIpfWVsc2UgZC5hdHRyKCJkIiwiTSIrbysiLCIrYysibCIrYS5weDBbMF0rIiwiK2EucHgwWzFdK00rIloiKX1FKGUsYSxoKTt2YXIgTD12LmNhc3RPcHRpb24oZy50ZXh0cG9zaXRpb24sYS5wdHMpLFM9dS5zZWxlY3RBbGwoImcuc2xpY2V0ZXh0IikuZGF0YShhLnRleHQmJiJub25lIiE9PUw/WzBdOltdKTtTLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgic2xpY2V0ZXh0IiwhMCksUy5leGl0KCkucmVtb3ZlKCksUy5lYWNoKChmdW5jdGlvbigpe3ZhciB1PXMuZW5zdXJlU2luZ2xlKG4uc2VsZWN0KHRoaXMpLCJ0ZXh0IiwiIiwoZnVuY3Rpb24oZSl7ZS5hdHRyKCJkYXRhLW5vdGV4IiwxKX0pKSxkPXMuZW5zdXJlVW5pZm9ybUZvbnRTaXplKGUsIm91dHNpZGUiPT09TD9mdW5jdGlvbihlLHQscil7dmFyIG49di5jYXN0T3B0aW9uKGUub3V0c2lkZXRleHRmb250LmNvbG9yLHQucHRzKXx8di5jYXN0T3B0aW9uKGUudGV4dGZvbnQuY29sb3IsdC5wdHMpfHxyLmNvbG9yLGE9di5jYXN0T3B0aW9uKGUub3V0c2lkZXRleHRmb250LmZhbWlseSx0LnB0cyl8fHYuY2FzdE9wdGlvbihlLnRleHRmb250LmZhbWlseSx0LnB0cyl8fHIuZmFtaWx5LGk9di5jYXN0T3B0aW9uKGUub3V0c2lkZXRleHRmb250LnNpemUsdC5wdHMpfHx2LmNhc3RPcHRpb24oZS50ZXh0Zm9udC5zaXplLHQucHRzKXx8ci5zaXplO3JldHVybntjb2xvcjpuLGZhbWlseTphLHNpemU6aX19KGcsYSxyLmZvbnQpOmIoZyxhLHIuZm9udCkpO3UudGV4dChhLnRleHQpLmF0dHIoe2NsYXNzOiJzbGljZXRleHQiLHRyYW5zZm9ybToiIiwidGV4dC1hbmNob3IiOiJtaWRkbGUifSkuY2FsbChsLmZvbnQsZCkuY2FsbChmLmNvbnZlcnRUb1RzcGFucyxlKTt2YXIgbSx5PWwuYkJveCh1Lm5vZGUoKSk7aWYoIm91dHNpZGUiPT09TCltPUMoeSxhKTtlbHNlIGlmKG09dyh5LGEsaCksImF1dG8iPT09TCYmbS5zY2FsZTwxKXt2YXIgeD1zLmVuc3VyZVVuaWZvcm1Gb250U2l6ZShlLGcub3V0c2lkZXRleHRmb250KTt1LmNhbGwobC5mb250LHgpLG09Qyh5PWwuYkJveCh1Lm5vZGUoKSksYSl9dmFyIFQ9bS50ZXh0UG9zQW5nbGUsaz12b2lkIDA9PT1UP2EucHhtaWQ6UihoLnIsVCk7aWYobS50YXJnZXRYPW8ra1swXSptLnJDZW50ZXIrKG0ueHx8MCksbS50YXJnZXRZPWMra1sxXSptLnJDZW50ZXIrKG0ueXx8MCksSShtLHkpLG0ub3V0c2lkZSl7dmFyIE09bS50YXJnZXRZO2EueUxhYmVsTWluPU0teS5oZWlnaHQvMixhLnlMYWJlbE1pZD1NLGEueUxhYmVsTWF4PU0reS5oZWlnaHQvMixhLmxhYmVsRXh0cmFYPTAsYS5sYWJlbEV4dHJhWT0wLF89ITB9bS5mb250U2l6ZT1kLnNpemUscChnLnR5cGUsbSxyKSx0W2ldLnRyYW5zZm9ybT1tLHUuYXR0cigidHJhbnNmb3JtIixzLmdldFRleHRUcmFuc2Zvcm0obSkpfSkpfWZ1bmN0aW9uIE8oZSx0LHIsbil7dmFyIGk9bioodFswXS1lWzBdKSxvPW4qKHRbMV0tZVsxXSk7cmV0dXJuImEiK24qaC5yKyIsIituKmgucisiIDAgIithLmxhcmdlQXJjKyhyPyIgMSAiOiIgMCAiKStpKyIsIitvfX0pKTt2YXIgVD1uLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcudGl0bGV0ZXh0IikuZGF0YShnLnRpdGxlLnRleHQ/WzBdOltdKTtpZihULmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgidGl0bGV0ZXh0IiwhMCksVC5leGl0KCkucmVtb3ZlKCksVC5lYWNoKChmdW5jdGlvbigpe3ZhciB0LHI9cy5lbnN1cmVTaW5nbGUobi5zZWxlY3QodGhpcyksInRleHQiLCIiLChmdW5jdGlvbihlKXtlLmF0dHIoImRhdGEtbm90ZXgiLDEpfSkpLGE9Zy50aXRsZS50ZXh0O2cuX21ldGEmJihhPXMudGVtcGxhdGVTdHJpbmcoYSxnLl9tZXRhKSksci50ZXh0KGEpLmF0dHIoe2NsYXNzOiJ0aXRsZXRleHQiLHRyYW5zZm9ybToiIiwidGV4dC1hbmNob3IiOiJtaWRkbGUifSkuY2FsbChsLmZvbnQsZy50aXRsZS5mb250KS5jYWxsKGYuY29udmVydFRvVHNwYW5zLGUpLHQ9Im1pZGRsZSBjZW50ZXIiPT09Zy50aXRsZS5wb3NpdGlvbj9mdW5jdGlvbihlKXt2YXIgdD1NYXRoLnNxcnQoZS50aXRsZUJveC53aWR0aCplLnRpdGxlQm94LndpZHRoK2UudGl0bGVCb3guaGVpZ2h0KmUudGl0bGVCb3guaGVpZ2h0KTtyZXR1cm57eDplLmN4LHk6ZS5jeSxzY2FsZTplLnRyYWNlLmhvbGUqZS5yKjIvdCx0eDowLHR5Oi1lLnRpdGxlQm94LmhlaWdodC8yK2UudHJhY2UudGl0bGUuZm9udC5zaXplfX0oaCk6TyhoLGkpLHIuYXR0cigidHJhbnNmb3JtIix1KHQueCx0LnkpK2MoTWF0aC5taW4oMSx0LnNjYWxlKSkrdSh0LnR4LHQudHkpKX0pKSxfJiZmdW5jdGlvbihlLHQpe3ZhciByLG4sYSxpLG8sbCxzLGMsdSxmLGQscCxoO2Z1bmN0aW9uIGcoZSx0KXtyZXR1cm4gZS5weG1pZFsxXS10LnB4bWlkWzFdfWZ1bmN0aW9uIG0oZSx0KXtyZXR1cm4gdC5weG1pZFsxXS1lLnB4bWlkWzFdfWZ1bmN0aW9uIHkoZSxyKXtyfHwocj17fSk7dmFyIGEsYyx1LGQscD1yLmxhYmVsRXh0cmFZKyhuP3IueUxhYmVsTWF4OnIueUxhYmVsTWluKSxoPW4/ZS55TGFiZWxNaW46ZS55TGFiZWxNYXgsZz1uP2UueUxhYmVsTWF4OmUueUxhYmVsTWluLG09ZS5jeUZpbmFsK28oZS5weDBbMV0sZS5weDFbMV0pLHk9cC1oO2lmKHkqcz4wJiYoZS5sYWJlbEV4dHJhWT15KSxBcnJheS5pc0FycmF5KHQucHVsbCkpZm9yKGM9MDtjPGYubGVuZ3RoO2MrKykodT1mW2NdKT09PWV8fCh2LmNhc3RPcHRpb24odC5wdWxsLGUucHRzKXx8MCk+PSh2LmNhc3RPcHRpb24odC5wdWxsLHUucHRzKXx8MCl8fCgoZS5weG1pZFsxXS11LnB4bWlkWzFdKSpzPjA/KHk9dS5jeUZpbmFsK28odS5weDBbMV0sdS5weDFbMV0pLWgtZS5sYWJlbEV4dHJhWSkqcz4wJiYoZS5sYWJlbEV4dHJhWSs9eSk6KGcrZS5sYWJlbEV4dHJhWS1tKSpzPjAmJihhPTMqbCpNYXRoLmFicyhjLWYuaW5kZXhPZihlKSksKGQ9dS5jeEZpbmFsK2kodS5weDBbMF0sdS5weDFbMF0pK2EtKGUuY3hGaW5hbCtlLnB4bWlkWzBdKS1lLmxhYmVsRXh0cmFYKSpsPjAmJihlLmxhYmVsRXh0cmFYKz1kKSkpfWZvcihuPTA7bjwyO24rKylmb3IoYT1uP2c6bSxvPW4/TWF0aC5tYXg6TWF0aC5taW4scz1uPzE6LTEscj0wO3I8MjtyKyspe2ZvcihpPXI/TWF0aC5tYXg6TWF0aC5taW4sbD1yPzE6LTEsKGM9ZVtuXVtyXSkuc29ydChhKSx1PWVbMS1uXVtyXSxmPXUuY29uY2F0KGMpLHA9W10sZD0wO2Q8Yy5sZW5ndGg7ZCsrKXZvaWQgMCE9PWNbZF0ueUxhYmVsTWlkJiZwLnB1c2goY1tkXSk7Zm9yKGg9ITEsZD0wO24mJmQ8dS5sZW5ndGg7ZCsrKWlmKHZvaWQgMCE9PXVbZF0ueUxhYmVsTWlkKXtoPXVbZF07YnJlYWt9Zm9yKGQ9MDtkPHAubGVuZ3RoO2QrKyl7dmFyIHg9ZCYmcFtkLTFdO2gmJiFkJiYoeD1oKSx5KHBbZF0seCl9fX0oeSxnKSxmdW5jdGlvbihlLHQpe2UuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyk7aWYoZS5sYWJlbEV4dHJhWHx8ZS5sYWJlbEV4dHJhWSl7dmFyIGE9ci5zZWxlY3QoImcuc2xpY2V0ZXh0IHRleHQiKTtlLnRyYW5zZm9ybS50YXJnZXRYKz1lLmxhYmVsRXh0cmFYLGUudHJhbnNmb3JtLnRhcmdldFkrPWUubGFiZWxFeHRyYVksYS5hdHRyKCJ0cmFuc2Zvcm0iLHMuZ2V0VGV4dFRyYW5zZm9ybShlLnRyYW5zZm9ybSkpO3ZhciBpPWUuY3hGaW5hbCtlLnB4bWlkWzBdLGw9Ik0iK2krIiwiKyhlLmN5RmluYWwrZS5weG1pZFsxXSksYz0oZS55TGFiZWxNYXgtZS55TGFiZWxNaW4pKihlLnB4bWlkWzBdPDA/LTE6MSkvNDtpZihlLmxhYmVsRXh0cmFYKXt2YXIgdT1lLmxhYmVsRXh0cmFYKmUucHhtaWRbMV0vZS5weG1pZFswXSxmPWUueUxhYmVsTWlkK2UubGFiZWxFeHRyYVktKGUuY3lGaW5hbCtlLnB4bWlkWzFdKTtNYXRoLmFicyh1KT5NYXRoLmFicyhmKT9sKz0ibCIrZiplLnB4bWlkWzBdL2UucHhtaWRbMV0rIiwiK2YrIkgiKyhpK2UubGFiZWxFeHRyYVgrYyk6bCs9ImwiK2UubGFiZWxFeHRyYVgrIiwiK3UrInYiKyhmLXUpKyJoIitjfWVsc2UgbCs9IlYiKyhlLnlMYWJlbE1pZCtlLmxhYmVsRXh0cmFZKSsiaCIrYztzLmVuc3VyZVNpbmdsZShyLCJwYXRoIiwidGV4dGxpbmUiKS5jYWxsKG8uc3Ryb2tlLHQub3V0c2lkZXRleHRmb250LmNvbG9yKS5hdHRyKHsic3Ryb2tlLXdpZHRoIjpNYXRoLm1pbigyLHQub3V0c2lkZXRleHRmb250LnNpemUvOCksZDpsLGZpbGw6Im5vbmUifSl9ZWxzZSByLnNlbGVjdCgicGF0aC50ZXh0bGluZSIpLnJlbW92ZSgpfSkpfShtLGcpLF8mJmcuYXV0b21hcmdpbil7dmFyIGs9bC5iQm94KGQubm9kZSgpKSxNPWcuZG9tYWluLEE9aS53KihNLnhbMV0tTS54WzBdKSxMPWkuaCooTS55WzFdLU0ueVswXSksUz0oLjUqQS1oLnIpL2kudyxEPSguNSpMLWgucikvaS5oO2EuYXV0b01hcmdpbihlLCJwaWUuIitnLnVpZCsiLmF1dG9tYXJnaW4iLHt4bDpNLnhbMF0tUyx4cjpNLnhbMV0rUyx5YjpNLnlbMF0tRCx5dDpNLnlbMV0rRCxsOk1hdGgubWF4KGguY3gtaC5yLWsubGVmdCwwKSxyOk1hdGgubWF4KGsucmlnaHQtKGguY3graC5yKSwwKSxiOk1hdGgubWF4KGsuYm90dG9tLShoLmN5K2guciksMCksdDpNYXRoLm1heChoLmN5LWguci1rLnRvcCwwKSxwYWQ6NX0pfX0pKX0pKTtzZXRUaW1lb3V0KChmdW5jdGlvbigpe2Quc2VsZWN0QWxsKCJ0c3BhbiIpLmVhY2goKGZ1bmN0aW9uKCl7dmFyIGU9bi5zZWxlY3QodGhpcyk7ZS5hdHRyKCJkeSIpJiZlLmF0dHIoImR5IixlLmF0dHIoImR5IikpfSkpfSksMCl9LGZvcm1hdFNsaWNlTGFiZWw6RSx0cmFuc2Zvcm1JbnNpZGVUZXh0OncsZGV0ZXJtaW5lSW5zaWRlVGV4dEZvbnQ6Yixwb3NpdGlvblRpdGxlT3V0c2lkZTpPLHByZXJlbmRlclRpdGxlczpfLGxheW91dEFyZWFzOnosYXR0YWNoRnhIYW5kbGVyczp4LGNvbXB1dGVUcmFuc2Zvcm06SX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NzUsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6OTcsIi4uLy4uL2NvbXBvbmVudHMvZngiOjExNSwiLi4vLi4vbGliIjoyMDIsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6MjI0LCIuLi8uLi9wbG90cy9wbG90cyI6MjgyLCIuLi9iYXIvY29uc3RhbnRzIjozMDIsIi4uL2Jhci91bmlmb3JtX3RleHQiOjMxNiwiLi9ldmVudF9kYXRhIjozMjEsIi4vaGVscGVycyI6MzIyLGQzOjl9XSwzMjc6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiZDMiKSxhPWUoIi4vc3R5bGVfb25lIiksaT1lKCIuLi9iYXIvdW5pZm9ybV90ZXh0IikucmVzaXplVGV4dDt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fZnVsbExheW91dC5fcGllbGF5ZXIuc2VsZWN0QWxsKCIudHJhY2UiKTtpKGUsdCwicGllIiksdC5lYWNoKChmdW5jdGlvbihlKXt2YXIgdD1lWzBdLnRyYWNlLHI9bi5zZWxlY3QodGhpcyk7ci5zdHlsZSh7b3BhY2l0eTp0Lm9wYWNpdHl9KSxyLnNlbGVjdEFsbCgicGF0aC5zdXJmYWNlIikuZWFjaCgoZnVuY3Rpb24oZSl7bi5zZWxlY3QodGhpcykuY2FsbChhLGUsdCl9KSl9KSl9fSx7Ii4uL2Jhci91bmlmb3JtX3RleHQiOjMxNiwiLi9zdHlsZV9vbmUiOjMyOCxkMzo5fV0sMzI4OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxhPWUoIi4vaGVscGVycyIpLmNhc3RPcHRpb247dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgaT1yLm1hcmtlci5saW5lLG89YShpLmNvbG9yLHQucHRzKXx8bi5kZWZhdWx0TGluZSxsPWEoaS53aWR0aCx0LnB0cyl8fDA7ZS5zdHlsZSgic3Ryb2tlLXdpZHRoIixsKS5jYWxsKG4uZmlsbCx0LmNvbG9yKS5jYWxsKG4uc3Ryb2tlLG8pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo3NSwiLi9oZWxwZXJzIjozMjJ9XSwzMjk6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vbGliIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspZVtyXS5pPXI7bi5tZXJnZUFycmF5KHQudGV4dCxlLCJ0eCIpLG4ubWVyZ2VBcnJheSh0LnRleHR0ZW1wbGF0ZSxlLCJ0eHQiKSxuLm1lcmdlQXJyYXkodC5ob3ZlcnRleHQsZSwiaHR4Iiksbi5tZXJnZUFycmF5KHQuY3VzdG9tZGF0YSxlLCJkYXRhIiksbi5tZXJnZUFycmF5KHQudGV4dHBvc2l0aW9uLGUsInRwIiksdC50ZXh0Zm9udCYmKG4ubWVyZ2VBcnJheUNhc3RQb3NpdGl2ZSh0LnRleHRmb250LnNpemUsZSwidHMiKSxuLm1lcmdlQXJyYXkodC50ZXh0Zm9udC5jb2xvcixlLCJ0YyIpLG4ubWVyZ2VBcnJheSh0LnRleHRmb250LmZhbWlseSxlLCJ0ZiIpKTt2YXIgYT10Lm1hcmtlcjtpZihhKXtuLm1lcmdlQXJyYXlDYXN0UG9zaXRpdmUoYS5zaXplLGUsIm1zIiksbi5tZXJnZUFycmF5Q2FzdFBvc2l0aXZlKGEub3BhY2l0eSxlLCJtbyIpLG4ubWVyZ2VBcnJheShhLnN5bWJvbCxlLCJteCIpLG4ubWVyZ2VBcnJheShhLmNvbG9yLGUsIm1jIik7dmFyIGk9YS5saW5lO2EubGluZSYmKG4ubWVyZ2VBcnJheShpLmNvbG9yLGUsIm1sYyIpLG4ubWVyZ2VBcnJheUNhc3RQb3NpdGl2ZShpLndpZHRoLGUsIm1sdyIpKTt2YXIgbz1hLmdyYWRpZW50O28mJiJub25lIiE9PW8udHlwZSYmKG4ubWVyZ2VBcnJheShvLnR5cGUsZSwibWd0Iiksbi5tZXJnZUFycmF5KG8uY29sb3IsZSwibWdjIikpfX19LHsiLi4vLi4vbGliIjoyMDJ9XSwzMzA6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLnRleHR0ZW1wbGF0ZUF0dHJzLGE9ZSgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxpPWUoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksbz1lKCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxsPWUoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIikuZGFzaCxzPWUoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGM9ZSgiLi9jb25zdGFudHMiKSx1PWUoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O3QuZXhwb3J0cz17eDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMiLGFuaW06ITB9LHgwOnt2YWxUeXBlOiJhbnkiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyIsYW5pbTohMH0sZHg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIixhbmltOiEwfSx5Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyIsYW5pbTohMH0seTA6e3ZhbFR5cGU6ImFueSIsZGZsdDowLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIixhbmltOiEwfSxkeTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsZWRpdFR5cGU6ImNhbGMiLGFuaW06ITB9LHhwZXJpb2Q6e3ZhbFR5cGU6ImFueSIsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0seXBlcmlvZDp7dmFsVHlwZToiYW55IixkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSx4cGVyaW9kMDp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9LHlwZXJpb2QwOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn0seHBlcmlvZGFsaWdubWVudDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic3RhcnQiLCJtaWRkbGUiLCJlbmQiXSxkZmx0OiJtaWRkbGUiLGVkaXRUeXBlOiJjYWxjIn0seXBlcmlvZGFsaWdubWVudDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic3RhcnQiLCJtaWRkbGUiLCJlbmQiXSxkZmx0OiJtaWRkbGUiLGVkaXRUeXBlOiJjYWxjIn0sc3RhY2tncm91cDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sb3JpZW50YXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInYiLCJoIl0sZWRpdFR5cGU6ImNhbGMifSxncm91cG5vcm06e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIiIsImZyYWN0aW9uIiwicGVyY2VudCJdLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxzdGFja2dhcHM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluZmVyIHplcm8iLCJpbnRlcnBvbGF0ZSJdLGRmbHQ6ImluZmVyIHplcm8iLGVkaXRUeXBlOiJjYWxjIn0sdGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSx0ZXh0dGVtcGxhdGU6bih7fSx7fSksaG92ZXJ0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsYXJyYXlPazohMCxlZGl0VHlwZToic3R5bGUifSxtb2RlOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJsaW5lcyIsIm1hcmtlcnMiLCJ0ZXh0Il0sZXh0cmFzOlsibm9uZSJdLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJvbjp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsicG9pbnRzIiwiZmlsbHMiXSxlZGl0VHlwZToic3R5bGUifSxob3ZlcnRlbXBsYXRlOmEoe30se2tleXM6Yy5ldmVudERhdGFLZXlzfSksbGluZTp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUiLGFuaW06ITB9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MixlZGl0VHlwZToic3R5bGUiLGFuaW06ITB9LHNoYXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsaW5lYXIiLCJzcGxpbmUiLCJodiIsInZoIiwiaHZoIiwidmh2Il0sZGZsdDoibGluZWFyIixlZGl0VHlwZToicGxvdCJ9LHNtb290aGluZzp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MS4zLGRmbHQ6MSxlZGl0VHlwZToicGxvdCJ9LGRhc2g6dSh7fSxsLHtlZGl0VHlwZToic3R5bGUifSksc2ltcGxpZnk6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LGNvbm5lY3RnYXBzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0sY2xpcG9uYXhpczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToicGxvdCJ9LGZpbGw6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm5vbmUiLCJ0b3plcm95IiwidG96ZXJveCIsInRvbmV4dHkiLCJ0b25leHR4IiwidG9zZWxmIiwidG9uZXh0Il0sZWRpdFR5cGU6ImNhbGMifSxmaWxsY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUiLGFuaW06ITB9LG1hcmtlcjp1KHtzeW1ib2w6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpzLnN5bWJvbExpc3QsZGZsdDoiY2lyY2xlIixhcnJheU9rOiEwLGVkaXRUeXBlOiJzdHlsZSJ9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsYXJyYXlPazohMCxlZGl0VHlwZToic3R5bGUiLGFuaW06ITB9LHNpemU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDo2LGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMiLGFuaW06ITB9LG1heGRpc3BsYXllZDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6InBsb3QifSxzaXplcmVmOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LHNpemVtaW46e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0sc2l6ZW1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImRpYW1ldGVyIiwiYXJlYSJdLGRmbHQ6ImRpYW1ldGVyIixlZGl0VHlwZToiY2FsYyJ9LGxpbmU6dSh7d2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsYXJyYXlPazohMCxlZGl0VHlwZToic3R5bGUiLGFuaW06ITB9LGVkaXRUeXBlOiJjYWxjIn0saSgibWFya2VyLmxpbmUiLHthbmltOiEwfSkpLGdyYWRpZW50Ont0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJyYWRpYWwiLCJob3Jpem9udGFsIiwidmVydGljYWwiLCJub25lIl0sYXJyYXlPazohMCxkZmx0OiJub25lIixlZGl0VHlwZToiY2FsYyJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxpKCJtYXJrZXIiLHthbmltOiEwfSkpLHNlbGVjdGVkOnttYXJrZXI6e29wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6InN0eWxlIn0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUifSxzaXplOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9LHRleHRmb250Ontjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9LHVuc2VsZWN0ZWQ6e21hcmtlcjp7b3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxlZGl0VHlwZToic3R5bGUifSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LHNpemU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InN0eWxlIn0sdGV4dGZvbnQ6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InN0eWxlIn0sdGV4dHBvc2l0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AgbGVmdCIsInRvcCBjZW50ZXIiLCJ0b3AgcmlnaHQiLCJtaWRkbGUgbGVmdCIsIm1pZGRsZSBjZW50ZXIiLCJtaWRkbGUgcmlnaHQiLCJib3R0b20gbGVmdCIsImJvdHRvbSBjZW50ZXIiLCJib3R0b20gcmlnaHQiXSxkZmx0OiJtaWRkbGUgY2VudGVyIixhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0sdGV4dGZvbnQ6byh7ZWRpdFR5cGU6ImNhbGMiLGNvbG9yRWRpdFR5cGU6InN0eWxlIixhcnJheU9rOiEwfSkscjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx0Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6ODIsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6OTcsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIjo5NiwiLi4vLi4vbGliL2V4dGVuZCI6MTk2LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjI3NiwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6Mjg5LCIuL2NvbnN0YW50cyI6MzM0fV0sMzMxOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoImZhc3QtaXNudW1lcmljIiksYT1lKCIuLi8uLi9saWIiKSxpPWUoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz1lKCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYWxpZ25fcGVyaW9kIiksbD1lKCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLHM9ZSgiLi9zdWJ0eXBlcyIpLGM9ZSgiLi9jb2xvcnNjYWxlX2NhbGMiKSx1PWUoIi4vYXJyYXlzX3RvX2NhbGNkYXRhIiksZj1lKCIuL2NhbGNfc2VsZWN0aW9uIik7ZnVuY3Rpb24gZChlLHQscixuLGEsbyxsKXt2YXIgYz10Ll9sZW5ndGgsdT1lLl9mdWxsTGF5b3V0LGY9ci5faWQsZD1uLl9pZCxwPXUuX2ZpcnN0U2NhdHRlcltnKHQpXT09PXQudWlkLGg9KHYodCx1LHIsbil8fHt9KS5vcmllbnRhdGlvbixtPXQuZmlsbDtyLl9taW5EdGljaz0wLG4uX21pbkR0aWNrPTA7dmFyIHk9e3BhZGRlZDohMH0seD17cGFkZGVkOiEwfTtsJiYoeS5wcGFkPXgucHBhZD1sKTt2YXIgYj1jPDJ8fGFbMF0hPT1hW2MtMV18fG9bMF0hPT1vW2MtMV07YiYmKCJ0b3plcm94Ij09PW18fCJ0b25leHR4Ij09PW0mJihwfHwiaCI9PT1oKSk/eS50b3plcm89ITA6KHQuZXJyb3JfeXx8e30pLnZpc2libGV8fCJ0b25leHR5IiE9PW0mJiJ0b3plcm95IiE9PW0mJihzLmhhc01hcmtlcnModCl8fHMuaGFzVGV4dCh0KSl8fCh5LnBhZGRlZD0hMSx5LnBwYWQ9MCksYiYmKCJ0b3plcm95Ij09PW18fCJ0b25leHR5Ij09PW0mJihwfHwidiI9PT1oKSk/eC50b3plcm89ITA6InRvbmV4dHgiIT09bSYmInRvemVyb3giIT09bXx8KHgucGFkZGVkPSExKSxmJiYodC5fZXh0cmVtZXNbZl09aS5maW5kRXh0cmVtZXMocixhLHkpKSxkJiYodC5fZXh0cmVtZXNbZF09aS5maW5kRXh0cmVtZXMobixvLHgpKX1mdW5jdGlvbiBwKGUsdCl7aWYocy5oYXNNYXJrZXJzKGUpKXt2YXIgcixuPWUubWFya2VyLG89MS42KihlLm1hcmtlci5zaXplcmVmfHwxKTtpZihyPSJhcmVhIj09PWUubWFya2VyLnNpemVtb2RlP2Z1bmN0aW9uKGUpe3JldHVybiBNYXRoLm1heChNYXRoLnNxcnQoKGV8fDApL28pLDMpfTpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5tYXgoKGV8fDApL28sMyl9LGEuaXNBcnJheU9yVHlwZWRBcnJheShuLnNpemUpKXt2YXIgbD17dHlwZToibGluZWFyIn07aS5zZXRDb252ZXJ0KGwpO2Zvcih2YXIgYz1sLm1ha2VDYWxjZGF0YShlLm1hcmtlciwic2l6ZSIpLHU9bmV3IEFycmF5KHQpLGY9MDtmPHQ7ZisrKXVbZl09cihjW2ZdKTtyZXR1cm4gdX1yZXR1cm4gcihuLnNpemUpfX1mdW5jdGlvbiBoKGUsdCl7dmFyIHI9Zyh0KSxuPWUuX2ZpcnN0U2NhdHRlcjtuW3JdfHwobltyXT10LnVpZCl9ZnVuY3Rpb24gZyhlKXt2YXIgdD1lLnN0YWNrZ3JvdXA7cmV0dXJuIGUueGF4aXMrZS55YXhpcytlLnR5cGUrKHQ/Ii0iK3Q6IiIpfWZ1bmN0aW9uIHYoZSx0LHIsbil7dmFyIGE9ZS5zdGFja2dyb3VwO2lmKGEpe3ZhciBpPXQuX3NjYXR0ZXJTdGFja09wdHNbci5faWQrbi5faWRdW2FdLG89InYiPT09aS5vcmllbnRhdGlvbj9uOnI7cmV0dXJuImxpbmVhciI9PT1vLnR5cGV8fCJsb2ciPT09by50eXBlP2k6dm9pZCAwfX10LmV4cG9ydHM9e2NhbGM6ZnVuY3Rpb24oZSx0KXt2YXIgcixzLGcsbSx5LHgsYj1lLl9mdWxsTGF5b3V0LF89aS5nZXRGcm9tSWQoZSx0LnhheGlzfHwieCIpLHc9aS5nZXRGcm9tSWQoZSx0LnlheGlzfHwieSIpLFQ9Xy5tYWtlQ2FsY2RhdGEodCwieCIpLGs9dy5tYWtlQ2FsY2RhdGEodCwieSIpLE09byh0LF8sIngiLFQpLEE9byh0LHcsInkiLGspLEw9dC5fbGVuZ3RoLFM9bmV3IEFycmF5KEwpLEM9dC5pZHMsTz12KHQsYixfLHcpLEQ9ITE7aChiLHQpO3ZhciBQLHo9IngiLFI9InkiO08/KGEucHVzaFVuaXF1ZShPLnRyYWNlSW5kaWNlcyx0Ll9leHBhbmRlZEluZGV4KSwocj0idiI9PT1PLm9yaWVudGF0aW9uKT8oUj0icyIsUD0ieCIpOih6PSJzIixQPSJ5IikseT0iaW50ZXJwb2xhdGUiPT09Ty5zdGFja2dhcHMpOmQoZSx0LF8sdyxNLEEscCh0LEwpKTt2YXIgRT0hIXQueHBlcmlvZGFsaWdubWVudCxJPSEhdC55cGVyaW9kYWxpZ25tZW50O2ZvcihzPTA7czxMO3MrKyl7dmFyIEY9U1tzXT17fSxOPW4oTVtzXSksSD1uKEFbc10pO04mJkg/KEZbel09TVtzXSxGW1JdPUFbc10sRSYmKEYub3JpZ194PVRbc10pLEkmJihGLm9yaWdfeT1rW3NdKSk6TyYmKHI/TjpIKT8oRltQXT1yP01bc106QVtzXSxGLmdhcD0hMCx5PyhGLnM9bCxEPSEwKTpGLnM9MCk6Rlt6XT1GW1JdPWwsQyYmKEYuaWQ9U3RyaW5nKENbc10pKX1pZih1KFMsdCksYyhlLHQpLGYoUyx0KSxPKXtmb3Iocz0wO3M8Uy5sZW5ndGg7KVNbc11bUF09PT1sP1Muc3BsaWNlKHMsMSk6cysrO2lmKGEuc29ydChTLChmdW5jdGlvbihlLHQpe3JldHVybiBlW1BdLXRbUF18fGUuaS10Lml9KSksRCl7Zm9yKHM9MDtzPFMubGVuZ3RoLTEmJlNbc10uZ2FwOylzKys7Zm9yKCh4PVNbc10ucyl8fCh4PVNbc10ucz0wKSxnPTA7ZzxzO2crKylTW2ddLnM9eDtmb3IobT1TLmxlbmd0aC0xO20+cyYmU1ttXS5nYXA7KW0tLTtmb3IoeD1TW21dLnMsZz1TLmxlbmd0aC0xO2c+bTtnLS0pU1tnXS5zPXg7Zm9yKDtzPG07KWlmKFNbKytzXS5nYXApe2ZvcihnPXMrMTtTW2ddLmdhcDspZysrO2Zvcih2YXIgaj1TW3MtMV1bUF0sQj1TW3MtMV0ucyxWPShTW2ddLnMtQikvKFNbZ11bUF0taik7czxnOylTW3NdLnM9QisoU1tzXVtQXS1qKSpWLHMrK319fXJldHVybiBTfSxjYWxjTWFya2VyU2l6ZTpwLGNhbGNBeGlzRXhwYW5zaW9uOmQsc2V0Rmlyc3RTY2F0dGVyOmgsZ2V0U3RhY2tPcHRzOnZ9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjE4MSwiLi4vLi4vbGliIjoyMDIsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiOjI0NSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjI0OCwiLi9hcnJheXNfdG9fY2FsY2RhdGEiOjMyOSwiLi9jYWxjX3NlbGVjdGlvbiI6MzMyLCIuL2NvbG9yc2NhbGVfY2FsYyI6MzMzLCIuL3N1YnR5cGVzIjozNTUsImZhc3QtaXNudW1lcmljIjoxMX1dLDMzMjpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9saWIiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtuLmlzQXJyYXlPclR5cGVkQXJyYXkodC5zZWxlY3RlZHBvaW50cykmJm4udGFnU2VsZWN0ZWQoZSx0KX19LHsiLi4vLi4vbGliIjoyMDJ9XSwzMzM6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiKS5oYXNDb2xvcnNjYWxlLGE9ZSgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKSxpPWUoIi4vc3VidHlwZXMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpLmhhc0xpbmVzKHQpJiZuKHQsImxpbmUiKSYmYShlLHQse3ZhbHM6dC5saW5lLmNvbG9yLGNvbnRhaW5lclN0cjoibGluZSIsY0xldHRlcjoiYyJ9KSxpLmhhc01hcmtlcnModCkmJihuKHQsIm1hcmtlciIpJiZhKGUsdCx7dmFsczp0Lm1hcmtlci5jb2xvcixjb250YWluZXJTdHI6Im1hcmtlciIsY0xldHRlcjoiYyJ9KSxuKHQsIm1hcmtlci5saW5lIikmJmEoZSx0LHt2YWxzOnQubWFya2VyLmxpbmUuY29sb3IsY29udGFpbmVyU3RyOiJtYXJrZXIubGluZSIsY0xldHRlcjoiYyJ9KSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjo4MywiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiOjg2LCIuL3N1YnR5cGVzIjozNTV9XSwzMzQ6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPXtQVFNfTElORVNPTkxZOjIwLG1pblRvbGVyYW5jZTouMix0b2xlcmFuY2VHcm93dGg6MTAsbWF4U2NyZWVuc0F3YXk6MjAsZXZlbnREYXRhS2V5czpbXX19LHt9XSwzMzU6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi9jYWxjIik7ZnVuY3Rpb24gYShlLHQscixuLGEsaSxvKXthW25dPSEwO3ZhciBsPXtpOm51bGwsZ2FwOiEwLHM6MH07aWYobFtvXT1yLGUuc3BsaWNlKHQsMCxsKSx0JiZyPT09ZVt0LTFdW29dKXt2YXIgcz1lW3QtMV07bC5zPXMucyxsLmk9cy5pLGwuZ2FwPXMuZ2FwfWVsc2UgaSYmKGwucz1mdW5jdGlvbihlLHQscixuKXt2YXIgYT1lW3QtMV0saT1lW3QrMV07cmV0dXJuIGk/YT9hLnMrKGkucy1hLnMpKihyLWFbbl0pLyhpW25dLWFbbl0pOmkuczphLnN9KGUsdCxyLG8pKTt0fHwoZVswXS50PWVbMV0udCxlWzBdLnRyYWNlPWVbMV0udHJhY2UsZGVsZXRlIGVbMV0udCxkZWxldGUgZVsxXS50cmFjZSl9dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dC54YXhpcyxpPXQueWF4aXMsbz1yLl9pZCtpLl9pZCxsPWUuX2Z1bGxMYXlvdXQuX3NjYXR0ZXJTdGFja09wdHNbb107aWYobCl7dmFyIHMsYyx1LGYsZCxwLGgsZyx2LG0seSx4LGIsXyx3LFQ9ZS5jYWxjZGF0YTtmb3IodmFyIGsgaW4gbCl7dmFyIE09KG09bFtrXSkudHJhY2VJbmRpY2VzO2lmKE0ubGVuZ3RoKXtmb3IoeT0iaW50ZXJwb2xhdGUiPT09bS5zdGFja2dhcHMseD1tLmdyb3Vwbm9ybSwidiI9PT1tLm9yaWVudGF0aW9uPyhiPSJ4IixfPSJ5Iik6KGI9InkiLF89IngiKSx3PW5ldyBBcnJheShNLmxlbmd0aCkscz0wO3M8dy5sZW5ndGg7cysrKXdbc109ITE7cD1UW01bMF1dO3ZhciBBPW5ldyBBcnJheShwLmxlbmd0aCk7Zm9yKHM9MDtzPHAubGVuZ3RoO3MrKylBW3NdPXBbc11bYl07Zm9yKHM9MTtzPE0ubGVuZ3RoO3MrKyl7Zm9yKGQ9VFtNW3NdXSxjPXU9MDtjPGQubGVuZ3RoO2MrKyl7Zm9yKGg9ZFtjXVtiXTtoPkFbdV0mJnU8QS5sZW5ndGg7dSsrKWEoZCxjLEFbdV0scyx3LHksYiksYysrO2lmKGghPT1BW3VdKXtmb3IoZj0wO2Y8cztmKyspYShUW01bZl1dLHUsaCxmLHcseSxiKTtBLnNwbGljZSh1LDAsaCl9dSsrfWZvcig7dTxBLmxlbmd0aDt1KyspYShkLGMsQVt1XSxzLHcseSxiKSxjKyt9dmFyIEw9QS5sZW5ndGg7Zm9yKGM9MDtjPHAubGVuZ3RoO2MrKyl7Zm9yKGc9cFtjXVtfXT1wW2NdLnMscz0xO3M8TS5sZW5ndGg7cysrKShkPVRbTVtzXV0pWzBdLnRyYWNlLl9yYXdMZW5ndGg9ZFswXS50cmFjZS5fbGVuZ3RoLGRbMF0udHJhY2UuX2xlbmd0aD1MLGcrPWRbY10ucyxkW2NdW19dPWc7aWYoeClmb3Iodj0oImZyYWN0aW9uIj09PXg/ZzpnLzEwMCl8fDEscz0wO3M8TS5sZW5ndGg7cysrKXt2YXIgUz1UW01bc11dW2NdO1NbX10vPXYsUy5zTm9ybT1TLnMvdn19Zm9yKHM9MDtzPE0ubGVuZ3RoO3MrKyl7dmFyIEM9KGQ9VFtNW3NdXSlbMF0udHJhY2UsTz1uLmNhbGNNYXJrZXJTaXplKEMsQy5fcmF3TGVuZ3RoKSxEPUFycmF5LmlzQXJyYXkoTyk7aWYoTyYmd1tzXXx8RCl7dmFyIFA9Tztmb3IoTz1uZXcgQXJyYXkoTCksYz0wO2M8TDtjKyspT1tjXT1kW2NdLmdhcD8wOkQ/UFtkW2NdLmldOlB9dmFyIHo9bmV3IEFycmF5KEwpLFI9bmV3IEFycmF5KEwpO2ZvcihjPTA7YzxMO2MrKyl6W2NdPWRbY10ueCxSW2NdPWRbY10ueTtuLmNhbGNBeGlzRXhwYW5zaW9uKGUsQyxyLGkseixSLE8pLGRbMF0udC5vcmllbnRhdGlvbj1tLm9yaWVudGF0aW9ufX19fX19LHsiLi9jYWxjIjozMzF9XSwzMzY6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKXt2YXIgcj1lW3RdO2lmKCJzY2F0dGVyIj09PXIudHlwZSl7dmFyIG49ci5maWxsO2lmKCJub25lIiE9PW4mJiJ0b3NlbGYiIT09biYmKHIub3BhY2l0eT12b2lkIDAsInRvbmV4dHkiPT09bnx8InRvbmV4dHgiPT09bikpZm9yKHZhciBhPXQtMTthPj0wO2EtLSl7dmFyIGk9ZVthXTtpZigic2NhdHRlciI9PT1pLnR5cGUmJmkueGF4aXM9PT1yLnhheGlzJiZpLnlheGlzPT09ci55YXhpcyl7aS5vcGFjaXR5PXZvaWQgMDticmVha319fX19fSx7fV0sMzM3OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2xpYiIpLGE9ZSgiLi4vLi4vcmVnaXN0cnkiKSxpPWUoIi4vYXR0cmlidXRlcyIpLG89ZSgiLi9jb25zdGFudHMiKSxsPWUoIi4vc3VidHlwZXMiKSxzPWUoIi4veHlfZGVmYXVsdHMiKSxjPWUoIi4vcGVyaW9kX2RlZmF1bHRzIiksdT1lKCIuL3N0YWNrX2RlZmF1bHRzIiksZj1lKCIuL21hcmtlcl9kZWZhdWx0cyIpLGQ9ZSgiLi9saW5lX2RlZmF1bHRzIikscD1lKCIuL2xpbmVfc2hhcGVfZGVmYXVsdHMiKSxoPWUoIi4vdGV4dF9kZWZhdWx0cyIpLGc9ZSgiLi9maWxsY29sb3JfZGVmYXVsdHMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsdil7ZnVuY3Rpb24gbShyLGEpe3JldHVybiBuLmNvZXJjZShlLHQsaSxyLGEpfXZhciB5PXMoZSx0LHYsbSk7aWYoeXx8KHQudmlzaWJsZT0hMSksdC52aXNpYmxlKXtjKGUsdCx2LG0pO3ZhciB4PXUoZSx0LHYsbSksYj0heCYmeTxvLlBUU19MSU5FU09OTFk/ImxpbmVzK21hcmtlcnMiOiJsaW5lcyI7bSgidGV4dCIpLG0oImhvdmVydGV4dCIpLG0oIm1vZGUiLGIpLGwuaGFzTGluZXModCkmJihkKGUsdCxyLHYsbSkscChlLHQsbSksbSgiY29ubmVjdGdhcHMiKSxtKCJsaW5lLnNpbXBsaWZ5IikpLGwuaGFzTWFya2Vycyh0KSYmZihlLHQscix2LG0se2dyYWRpZW50OiEwfSksbC5oYXNUZXh0KHQpJiYobSgidGV4dHRlbXBsYXRlIiksaChlLHQsdixtKSk7dmFyIF89W107KGwuaGFzTWFya2Vycyh0KXx8bC5oYXNUZXh0KHQpKSYmKG0oImNsaXBvbmF4aXMiKSxtKCJtYXJrZXIubWF4ZGlzcGxheWVkIiksXy5wdXNoKCJwb2ludHMiKSksbSgiZmlsbCIseD94LmZpbGxEZmx0OiJub25lIiksIm5vbmUiIT09dC5maWxsJiYoZyhlLHQscixtKSxsLmhhc0xpbmVzKHQpfHxwKGUsdCxtKSk7dmFyIHc9KHQubGluZXx8e30pLmNvbG9yLFQ9KHQubWFya2VyfHx7fSkuY29sb3I7InRvbmV4dCIhPT10LmZpbGwmJiJ0b3NlbGYiIT09dC5maWxsfHxfLnB1c2goImZpbGxzIiksbSgiaG92ZXJvbiIsXy5qb2luKCIrIil8fCJwb2ludHMiKSwiZmlsbHMiIT09dC5ob3Zlcm9uJiZtKCJob3ZlcnRlbXBsYXRlIik7dmFyIGs9YS5nZXRDb21wb25lbnRNZXRob2QoImVycm9yYmFycyIsInN1cHBseURlZmF1bHRzIik7ayhlLHQsd3x8VHx8cix7YXhpczoieSJ9KSxrKGUsdCx3fHxUfHxyLHtheGlzOiJ4Iixpbmhlcml0OiJ5In0pLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eSh0LG0pfX19LHsiLi4vLi4vbGliIjoyMDIsIi4uLy4uL3JlZ2lzdHJ5IjoyOTAsIi4vYXR0cmlidXRlcyI6MzMwLCIuL2NvbnN0YW50cyI6MzM0LCIuL2ZpbGxjb2xvcl9kZWZhdWx0cyI6MzM4LCIuL2xpbmVfZGVmYXVsdHMiOjM0MywiLi9saW5lX3NoYXBlX2RlZmF1bHRzIjozNDUsIi4vbWFya2VyX2RlZmF1bHRzIjozNDksIi4vcGVyaW9kX2RlZmF1bHRzIjozNTAsIi4vc3RhY2tfZGVmYXVsdHMiOjM1MywiLi9zdWJ0eXBlcyI6MzU1LCIuL3RleHRfZGVmYXVsdHMiOjM1NiwiLi94eV9kZWZhdWx0cyI6MzU3fV0sMzM4OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxhPWUoIi4uLy4uL2xpYiIpLmlzQXJyYXlPclR5cGVkQXJyYXk7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLGkpe3ZhciBvPSExO2lmKHQubWFya2VyKXt2YXIgbD10Lm1hcmtlci5jb2xvcixzPSh0Lm1hcmtlci5saW5lfHx7fSkuY29sb3I7bCYmIWEobCk/bz1sOnMmJiFhKHMpJiYobz1zKX1pKCJmaWxsY29sb3IiLG4uYWRkT3BhY2l0eSgodC5saW5lfHx7fSkuY29sb3J8fG98fHIsLjUpKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NzUsIi4uLy4uL2xpYiI6MjAyfV0sMzM5OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgYT17fSxpPXtfZnVsbExheW91dDpyfSxvPW4uZ2V0RnJvbVRyYWNlKGksdCwieCIpLGw9bi5nZXRGcm9tVHJhY2UoaSx0LCJ5Iik7cmV0dXJuIGEueExhYmVsPW4udGlja1RleHQobyxlLngsITApLnRleHQsYS55TGFiZWw9bi50aWNrVGV4dChsLGUueSwhMCkudGV4dCxhfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6MjQ4fV0sMzQwOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxhPWUoIi4vc3VidHlwZXMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcixpO2lmKCJsaW5lcyI9PT1lLm1vZGUpcmV0dXJuKHI9ZS5saW5lLmNvbG9yKSYmbi5vcGFjaXR5KHIpP3I6ZS5maWxsY29sb3I7aWYoIm5vbmUiPT09ZS5tb2RlKXJldHVybiBlLmZpbGw/ZS5maWxsY29sb3I6IiI7dmFyIG89dC5tY2N8fChlLm1hcmtlcnx8e30pLmNvbG9yLGw9dC5tbGNjfHwoKGUubWFya2VyfHx7fSkubGluZXx8e30pLmNvbG9yO3JldHVybihpPW8mJm4ub3BhY2l0eShvKT9vOmwmJm4ub3BhY2l0eShsKSYmKHQubWx3fHwoKGUubWFya2VyfHx7fSkubGluZXx8e30pLndpZHRoKT9sOiIiKT9uLm9wYWNpdHkoaSk8LjM/bi5hZGRPcGFjaXR5KGksLjMpOmk6KHI9KGUubGluZXx8e30pLmNvbG9yKSYmbi5vcGFjaXR5KHIpJiZhLmhhc0xpbmVzKGUpJiZlLmxpbmUud2lkdGg/cjplLmZpbGxjb2xvcn19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NzUsIi4vc3VidHlwZXMiOjM1NX1dLDM0MTpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9saWIiKSxhPWUoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxpPWUoIi4uLy4uL3JlZ2lzdHJ5Iiksbz1lKCIuL2dldF90cmFjZV9jb2xvciIpLGw9ZSgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLHM9bi5maWxsVGV4dDt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsYyl7dmFyIHU9ZS5jZCxmPXVbMF0udHJhY2UsZD1lLnhhLHA9ZS55YSxoPWQuYzJwKHQpLGc9cC5jMnAociksdj1baCxnXSxtPWYuaG92ZXJvbnx8IiIseT0tMSE9PWYubW9kZS5pbmRleE9mKCJtYXJrZXJzIik/MzouNTtpZigtMSE9PW0uaW5kZXhPZigicG9pbnRzIikpe3ZhciB4PWZ1bmN0aW9uKGUpe3ZhciB0PU1hdGgubWF4KHksZS5tcmN8fDApLHI9ZC5jMnAoZS54KS1oLG49cC5jMnAoZS55KS1nO3JldHVybiBNYXRoLm1heChNYXRoLnNxcnQocipyK24qbiktdCwxLXkvdCl9LGI9YS5nZXREaXN0YW5jZUZ1bmN0aW9uKGMsKGZ1bmN0aW9uKGUpe3ZhciB0PU1hdGgubWF4KDMsZS5tcmN8fDApLHI9MS0xL3Qsbj1NYXRoLmFicyhkLmMycChlLngpLWgpO3JldHVybiBuPHQ/cipuL3Q6bi10K3J9KSwoZnVuY3Rpb24oZSl7dmFyIHQ9TWF0aC5tYXgoMyxlLm1yY3x8MCkscj0xLTEvdCxuPU1hdGguYWJzKHAuYzJwKGUueSktZyk7cmV0dXJuIG48dD9yKm4vdDpuLXQrcn0pLHgpO2lmKGEuZ2V0Q2xvc2VzdCh1LGIsZSksITEhPT1lLmluZGV4KXt2YXIgXz11W2UuaW5kZXhdLHc9ZC5jMnAoXy54LCEwKSxUPXAuYzJwKF8ueSwhMCksaz1fLm1yY3x8MTtlLmluZGV4PV8uaTt2YXIgTT11WzBdLnQub3JpZW50YXRpb24sQT1NJiYoXy5zTm9ybXx8Xy5zKSxMPSJoIj09PU0/QTp2b2lkIDAhPT1fLm9yaWdfeD9fLm9yaWdfeDpfLngsUz0idiI9PT1NP0E6dm9pZCAwIT09Xy5vcmlnX3k/Xy5vcmlnX3k6Xy55O3JldHVybiBuLmV4dGVuZEZsYXQoZSx7Y29sb3I6byhmLF8pLHgwOnctayx4MTp3K2sseExhYmVsVmFsOkwseTA6VC1rLHkxOlQrayx5TGFiZWxWYWw6UyxzcGlrZURpc3RhbmNlOngoXyksaG92ZXJ0ZW1wbGF0ZTpmLmhvdmVydGVtcGxhdGV9KSxzKF8sZixlKSxpLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwiaG92ZXJJbmZvIikoXyxmLGUpLFtlXX19aWYoLTEhPT1tLmluZGV4T2YoImZpbGxzIikmJmYuX3BvbHlnb25zKXt2YXIgQyxPLEQsUCx6LFIsRSxJLEYsTj1mLl9wb2x5Z29ucyxIPVtdLGo9ITEsQj0xLzAsVj0tMS8wLFU9MS8wLHE9LTEvMDtmb3IoQz0wO0M8Ti5sZW5ndGg7QysrKShEPU5bQ10pLmNvbnRhaW5zKHYpJiYoaj0haixILnB1c2goRCksVT1NYXRoLm1pbihVLEQueW1pbikscT1NYXRoLm1heChxLEQueW1heCkpO2lmKGope3ZhciBHPSgoVT1NYXRoLm1heChVLDApKSsocT1NYXRoLm1pbihxLHAuX2xlbmd0aCkpKS8yO2ZvcihDPTA7QzxILmxlbmd0aDtDKyspZm9yKFA9SFtDXS5wdHMsTz0xO088UC5sZW5ndGg7TysrKShJPVBbTy0xXVsxXSk+RyE9KEY9UFtPXVsxXSk+PUcmJihSPVBbTy0xXVswXSxFPVBbT11bMF0sRi1JJiYoej1SKyhFLVIpKihHLUkpLyhGLUkpLEI9TWF0aC5taW4oQix6KSxWPU1hdGgubWF4KFYseikpKTtCPU1hdGgubWF4KEIsMCksVj1NYXRoLm1pbihWLGQuX2xlbmd0aCk7dmFyIFo9bC5kZWZhdWx0TGluZTtyZXR1cm4gbC5vcGFjaXR5KGYuZmlsbGNvbG9yKT9aPWYuZmlsbGNvbG9yOmwub3BhY2l0eSgoZi5saW5lfHx7fSkuY29sb3IpJiYoWj1mLmxpbmUuY29sb3IpLG4uZXh0ZW5kRmxhdChlLHtkaXN0YW5jZTplLm1heEhvdmVyRGlzdGFuY2UseDA6Qix4MTpWLHkwOkcseTE6Ryxjb2xvcjpaLGhvdmVydGVtcGxhdGU6ITF9KSxkZWxldGUgZS5pbmRleCxmLnRleHQmJiFBcnJheS5pc0FycmF5KGYudGV4dCk/ZS50ZXh0PVN0cmluZyhmLnRleHQpOmUudGV4dD1mLm5hbWUsW2VdfX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjc1LCIuLi8uLi9jb21wb25lbnRzL2Z4IjoxMTUsIi4uLy4uL2xpYiI6MjAyLCIuLi8uLi9yZWdpc3RyeSI6MjkwLCIuL2dldF90cmFjZV9jb2xvciI6MzQwfV0sMzQyOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4vc3VidHlwZXMiKTt0LmV4cG9ydHM9e2hhc0xpbmVzOm4uaGFzTGluZXMsaGFzTWFya2VyczpuLmhhc01hcmtlcnMsaGFzVGV4dDpuLmhhc1RleHQsaXNCdWJibGU6bi5pc0J1YmJsZSxhdHRyaWJ1dGVzOmUoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOmUoIi4vZGVmYXVsdHMiKSxjcm9zc1RyYWNlRGVmYXVsdHM6ZSgiLi9jcm9zc190cmFjZV9kZWZhdWx0cyIpLGNhbGM6ZSgiLi9jYWxjIikuY2FsYyxjcm9zc1RyYWNlQ2FsYzplKCIuL2Nyb3NzX3RyYWNlX2NhbGMiKSxhcnJheXNUb0NhbGNkYXRhOmUoIi4vYXJyYXlzX3RvX2NhbGNkYXRhIikscGxvdDplKCIuL3Bsb3QiKSxjb2xvcmJhcjplKCIuL21hcmtlcl9jb2xvcmJhciIpLGZvcm1hdExhYmVsczplKCIuL2Zvcm1hdF9sYWJlbHMiKSxzdHlsZTplKCIuL3N0eWxlIikuc3R5bGUsc3R5bGVPblNlbGVjdDplKCIuL3N0eWxlIikuc3R5bGVPblNlbGVjdCxob3ZlclBvaW50czplKCIuL2hvdmVyIiksc2VsZWN0UG9pbnRzOmUoIi4vc2VsZWN0IiksYW5pbWF0YWJsZTohMCxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToic2NhdHRlciIsYmFzZVBsb3RNb2R1bGU6ZSgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksY2F0ZWdvcmllczpbImNhcnRlc2lhbiIsInN2ZyIsInN5bWJvbHMiLCJlcnJvckJhcnNPSyIsInNob3dMZWdlbmQiLCJzY2F0dGVyLWxpa2UiLCJ6b29tU2NhbGUiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjI2MSwiLi9hcnJheXNfdG9fY2FsY2RhdGEiOjMyOSwiLi9hdHRyaWJ1dGVzIjozMzAsIi4vY2FsYyI6MzMxLCIuL2Nyb3NzX3RyYWNlX2NhbGMiOjMzNSwiLi9jcm9zc190cmFjZV9kZWZhdWx0cyI6MzM2LCIuL2RlZmF1bHRzIjozMzcsIi4vZm9ybWF0X2xhYmVscyI6MzM5LCIuL2hvdmVyIjozNDEsIi4vbWFya2VyX2NvbG9yYmFyIjozNDgsIi4vcGxvdCI6MzUxLCIuL3NlbGVjdCI6MzUyLCIuL3N0eWxlIjozNTQsIi4vc3VidHlwZXMiOjM1NX1dLDM0MzpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5LGE9ZSgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiKS5oYXNDb2xvcnNjYWxlLGk9ZSgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLG8sbCxzKXt2YXIgYz0oZS5tYXJrZXJ8fHt9KS5jb2xvcjsobCgibGluZS5jb2xvciIsciksYShlLCJsaW5lIikpP2koZSx0LG8sbCx7cHJlZml4OiJsaW5lLiIsY0xldHRlcjoiYyJ9KTpsKCJsaW5lLmNvbG9yIiwhbihjKSYmY3x8cik7bCgibGluZS53aWR0aCIpLChzfHx7fSkubm9EYXNofHxsKCJsaW5lLmRhc2giKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo4NSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiOjg2LCIuLi8uLi9saWIiOjIwMn1dLDM0NDpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIiksYT1uLkJBRE5VTSxpPW4uTE9HX0NMSVAsbz1pKy41LGw9aS0uNSxzPWUoIi4uLy4uL2xpYiIpLGM9cy5zZWdtZW50c0ludGVyc2VjdCx1PXMuY29uc3RyYWluLGY9ZSgiLi9jb25zdGFudHMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGksZCxwLGgsZyx2LG0seSx4LGIsXyx3LFQsayxNLEEsTD10LnhheGlzLFM9dC55YXhpcyxDPSJsb2ciPT09TC50eXBlLE89ImxvZyI9PT1TLnR5cGUsRD1MLl9sZW5ndGgsUD1TLl9sZW5ndGgsej10LmNvbm5lY3RHYXBzLFI9dC5iYXNlVG9sZXJhbmNlLEU9dC5zaGFwZSxJPSJsaW5lYXIiPT09RSxGPXQuZmlsbCYmIm5vbmUiIT09dC5maWxsLE49W10sSD1mLm1pblRvbGVyYW5jZSxqPWUubGVuZ3RoLEI9bmV3IEFycmF5KGopLFY9MDtmdW5jdGlvbiBVKHIpe3ZhciBuPWVbcl07aWYoIW4pcmV0dXJuITE7dmFyIGk9dC5saW5lYXJpemVkP0wubDJwKG4ueCk6TC5jMnAobi54KSxzPXQubGluZWFyaXplZD9TLmwycChuLnkpOlMuYzJwKG4ueSk7aWYoaT09PWEpe2lmKEMmJihpPUwuYzJwKG4ueCwhMCkpLGk9PT1hKXJldHVybiExO08mJnM9PT1hJiYoaSo9TWF0aC5hYnMoTC5fbSpQKihMLl9tPjA/bzpsKS8oUy5fbSpEKihTLl9tPjA/bzpsKSkpKSxpKj0xZTN9aWYocz09PWEpe2lmKE8mJihzPVMuYzJwKG4ueSwhMCkpLHM9PT1hKXJldHVybiExO3MqPTFlM31yZXR1cm5baSxzXX1mdW5jdGlvbiBxKGUsdCxyLG4pe3ZhciBhPXItZSxpPW4tdCxvPS41LWUsbD0uNS10LHM9YSphK2kqaSxjPWEqbytpKmw7aWYoYz4wJiZjPHMpe3ZhciB1PW8qaS1sKmE7aWYodSp1PHMpcmV0dXJuITB9fWZ1bmN0aW9uIEcoZSx0KXt2YXIgcj1lWzBdL0Qsbj1lWzFdL1AsYT1NYXRoLm1heCgwLC1yLHItMSwtbixuLTEpO3JldHVybiBhJiZ2b2lkIDAhPT1NJiZxKHIsbixNLEEpJiYoYT0wKSxhJiZ0JiZxKHIsbix0WzBdL0QsdFsxXS9QKSYmKGE9MCksKDErZi50b2xlcmFuY2VHcm93dGgqYSkqUn1mdW5jdGlvbiBaKGUsdCl7dmFyIHI9ZVswXS10WzBdLG49ZVsxXS10WzFdO3JldHVybiBNYXRoLnNxcnQocipyK24qbil9dmFyIFksWCxXLFEsSiwkLEssZWU9Zi5tYXhTY3JlZW5zQXdheSx0ZT0tRCplZSxyZT1EKigxK2VlKSxuZT0tUCplZSxhZT1QKigxK2VlKSxpZT1bW3RlLG5lLHJlLG5lXSxbcmUsbmUscmUsYWVdLFtyZSxhZSx0ZSxhZV0sW3RlLGFlLHRlLG5lXV07ZnVuY3Rpb24gb2UoZSl7aWYoZVswXTx0ZXx8ZVswXT5yZXx8ZVsxXTxuZXx8ZVsxXT5hZSlyZXR1cm5bdShlWzBdLHRlLHJlKSx1KGVbMV0sbmUsYWUpXX1mdW5jdGlvbiBsZShlLHQpe3JldHVybiBlWzBdPT09dFswXSYmKGVbMF09PT10ZXx8ZVswXT09PXJlKXx8KGVbMV09PT10WzFdJiYoZVsxXT09PW5lfHxlWzFdPT09YWUpfHx2b2lkIDApfWZ1bmN0aW9uIHNlKGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24obixhKXt2YXIgaT1vZShuKSxvPW9lKGEpLGw9W107aWYoaSYmbyYmbGUoaSxvKSlyZXR1cm4gbDtpJiZsLnB1c2goaSksbyYmbC5wdXNoKG8pO3ZhciBjPTIqcy5jb25zdHJhaW4oKG5bZV0rYVtlXSkvMix0LHIpLSgoaXx8bilbZV0rKG98fGEpW2VdKTtjJiYoKGkmJm8/Yz4wPT1pW2VdPm9bZV0/aTpvOml8fG8pW2VdKz1jKTtyZXR1cm4gbH19ZnVuY3Rpb24gY2UoZSl7dmFyIHQ9ZVswXSxyPWVbMV0sbj10PT09QltWLTFdWzBdLGE9cj09PUJbVi0xXVsxXTtpZighbnx8IWEpaWYoVj4xKXt2YXIgaT10PT09QltWLTJdWzBdLG89cj09PUJbVi0yXVsxXTtuJiYodD09PXRlfHx0PT09cmUpJiZpP28/Vi0tOkJbVi0xXT1lOmEmJihyPT09bmV8fHI9PT1hZSkmJm8/aT9WLS06QltWLTFdPWU6QltWKytdPWV9ZWxzZSBCW1YrK109ZX1mdW5jdGlvbiB1ZShlKXtCW1YtMV1bMF0hPT1lWzBdJiZCW1YtMV1bMV0hPT1lWzFdJiZjZShbVyxRXSksY2UoZSksSj1udWxsLFc9UT0wfWZ1bmN0aW9uIGZlKGUpe2lmKE09ZVswXS9ELEE9ZVsxXS9QLFk9ZVswXTx0ZT90ZTplWzBdPnJlP3JlOjAsWD1lWzFdPG5lP25lOmVbMV0+YWU/YWU6MCxZfHxYKXtpZihWKWlmKEope3ZhciB0PUsoSixlKTt0Lmxlbmd0aD4xJiYodWUodFswXSksQltWKytdPXRbMV0pfWVsc2UgJD1LKEJbVi0xXSxlKVswXSxCW1YrK109JDtlbHNlIEJbVisrXT1bWXx8ZVswXSxYfHxlWzFdXTt2YXIgcj1CW1YtMV07WSYmWCYmKHJbMF0hPT1ZfHxyWzFdIT09WCk/KEomJihXIT09WSYmUSE9PVg/Y2UoVyYmUT8obj1KLGk9KGE9ZSlbMF0tblswXSxvPShhWzFdLW5bMV0pL2ksKG5bMV0qYVswXS1hWzFdKm5bMF0pL2k+MD9bbz4wP3RlOnJlLGFlXTpbbz4wP3JlOnRlLG5lXSk6W1d8fFksUXx8WF0pOlcmJlEmJmNlKFtXLFFdKSksY2UoW1ksWF0pKTpXLVkmJlEtWCYmY2UoW1l8fFcsWHx8UV0pLEo9ZSxXPVksUT1YfWVsc2UgSiYmdWUoSyhKLGUpWzBdKSxCW1YrK109ZTt2YXIgbixhLGksb31mb3IoImxpbmVhciI9PT1FfHwic3BsaW5lIj09PUU/Sz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1bXSxuPTAsYT0wO2E8NDthKyspe3ZhciBpPWllW2FdLG89YyhlWzBdLGVbMV0sdFswXSx0WzFdLGlbMF0saVsxXSxpWzJdLGlbM10pO28mJighbnx8TWF0aC5hYnMoby54LXJbMF1bMF0pPjF8fE1hdGguYWJzKG8ueS1yWzBdWzFdKT4xKSYmKG89W28ueCxvLnldLG4mJloobyxlKTxaKHJbMF0sZSk/ci51bnNoaWZ0KG8pOnIucHVzaChvKSxuKyspfXJldHVybiByfToiaHYiPT09RXx8InZoIj09PUU/Sz1mdW5jdGlvbihlLHQpe3ZhciByPVtdLG49b2UoZSksYT1vZSh0KTtyZXR1cm4gbiYmYSYmbGUobixhKXx8KG4mJnIucHVzaChuKSxhJiZyLnB1c2goYSkpLHJ9OiJodmgiPT09RT9LPXNlKDAsdGUscmUpOiJ2aHYiPT09RSYmKEs9c2UoMSxuZSxhZSkpLHI9MDtyPGo7cisrKWlmKG49VShyKSl7Zm9yKFY9MCxKPW51bGwsZmUobikscisrO3I8ajtyKyspe2lmKCEoZD1VKHIpKSl7aWYoeiljb250aW51ZTticmVha31pZihJJiZ0LnNpbXBsaWZ5KXt2YXIgZGU9VShyKzEpO2lmKHk9WihkLG4pLEYmJigwPT09Vnx8Vj09PWotMSl8fCEoeTxHKGQsZGUpKkgpKXtmb3Iodj1bKGRbMF0tblswXSkveSwoZFsxXS1uWzFdKS95XSxwPW4seD15LGI9dz1UPTAsZz0hMSxpPWQscisrO3I8ZS5sZW5ndGg7cisrKXtpZihoPWRlLGRlPVUocisxKSwhaCl7aWYoeiljb250aW51ZTticmVha31pZihrPShtPVtoWzBdLW5bMF0saFsxXS1uWzFdXSlbMF0qdlsxXS1tWzFdKnZbMF0sdz1NYXRoLm1pbih3LGspLChUPU1hdGgubWF4KFQsaykpLXc+RyhoLGRlKSlicmVhaztpPWgsKF89bVswXSp2WzBdK21bMV0qdlsxXSk+eD8oeD1fLGQ9aCxnPSExKTpfPGImJihiPV8scD1oLGc9ITApfWlmKGc/KGZlKGQpLGkhPT1wJiZmZShwKSk6KHAhPT1uJiZmZShwKSxpIT09ZCYmZmUoZCkpLGZlKGkpLHI+PWUubGVuZ3RofHwhaClicmVhaztmZShoKSxuPWh9fWVsc2UgZmUoZCl9SiYmY2UoW1d8fEpbMF0sUXx8SlsxXV0pLE4ucHVzaChCLnNsaWNlKDAsVikpfXJldHVybiBOfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjoxODEsIi4uLy4uL2xpYiI6MjAyLCIuL2NvbnN0YW50cyI6MzM0fV0sMzQ1OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7InNwbGluZSI9PT1yKCJsaW5lLnNoYXBlIikmJnIoImxpbmUuc21vb3RoaW5nIil9fSx7fV0sMzQ2OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXt0b25leHR4OjEsdG9uZXh0eToxLHRvbmV4dDoxfTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBhLGksbyxsLHMsYz17fSx1PSExLGY9LTEsZD0wLHA9LTE7Zm9yKGk9MDtpPHIubGVuZ3RoO2krKykobz0oYT1yW2ldWzBdLnRyYWNlKS5zdGFja2dyb3VwfHwiIik/byBpbiBjP3M9Y1tvXToocz1jW29dPWQsZCsrKTphLmZpbGwgaW4gbiYmcD49MD9zPXA6KHM9cD1kLGQrKyksczxmJiYodT0hMCksYS5fZ3JvdXBJbmRleD1mPXM7dmFyIGg9ci5zbGljZSgpO3UmJmguc29ydCgoZnVuY3Rpb24oZSx0KXt2YXIgcj1lWzBdLnRyYWNlLG49dFswXS50cmFjZTtyZXR1cm4gci5fZ3JvdXBJbmRleC1uLl9ncm91cEluZGV4fHxyLmluZGV4LW4uaW5kZXh9KSk7dmFyIGc9e307Zm9yKGk9MDtpPGgubGVuZ3RoO2krKylvPShhPWhbaV1bMF0udHJhY2UpLnN0YWNrZ3JvdXB8fCIiLCEwPT09YS52aXNpYmxlPyhhLl9uZXh0dHJhY2U9bnVsbCxhLmZpbGwgaW4gbiYmKGw9Z1tvXSxhLl9wcmV2dHJhY2U9bHx8bnVsbCxsJiYobC5fbmV4dHRyYWNlPWEpKSxhLl9vd25maWxsPWEuZmlsbCYmKCJ0b3plcm8iPT09YS5maWxsLnN1YnN0cigwLDYpfHwidG9zZWxmIj09PWEuZmlsbHx8InRvIj09PWEuZmlsbC5zdWJzdHIoMCwyKSYmIWEuX3ByZXZ0cmFjZSksZ1tvXT1hKTphLl9wcmV2dHJhY2U9YS5fbmV4dHRyYWNlPWEuX293bmZpbGw9bnVsbDtyZXR1cm4gaH19LHt9XSwzNDc6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiZmFzdC1pc251bWVyaWMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5tYXJrZXIscj10LnNpemVyZWZ8fDEsYT10LnNpemVtaW58fDAsaT0iYXJlYSI9PT10LnNpemVtb2RlP2Z1bmN0aW9uKGUpe3JldHVybiBNYXRoLnNxcnQoZS9yKX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUvcn07cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWkoZS8yKTtyZXR1cm4gbih0KSYmdD4wP01hdGgubWF4KHQsYSk6MH19fSx7ImZhc3QtaXNudW1lcmljIjoxMX1dLDM0ODpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9e2NvbnRhaW5lcjoibWFya2VyIixtaW46ImNtaW4iLG1heDoiY21heCJ9fSx7fV0sMzQ5OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxhPWUoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIikuaGFzQ29sb3JzY2FsZSxpPWUoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLG89ZSgiLi9zdWJ0eXBlcyIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscixsLHMsYyl7dmFyIHU9by5pc0J1YmJsZShlKSxmPShlLmxpbmV8fHt9KS5jb2xvcjsoYz1jfHx7fSxmJiYocj1mKSxzKCJtYXJrZXIuc3ltYm9sIikscygibWFya2VyLm9wYWNpdHkiLHU/Ljc6MSkscygibWFya2VyLnNpemUiKSxzKCJtYXJrZXIuY29sb3IiLHIpLGEoZSwibWFya2VyIikmJmkoZSx0LGwscyx7cHJlZml4OiJtYXJrZXIuIixjTGV0dGVyOiJjIn0pLGMubm9TZWxlY3R8fChzKCJzZWxlY3RlZC5tYXJrZXIuY29sb3IiKSxzKCJ1bnNlbGVjdGVkLm1hcmtlci5jb2xvciIpLHMoInNlbGVjdGVkLm1hcmtlci5zaXplIikscygidW5zZWxlY3RlZC5tYXJrZXIuc2l6ZSIpKSxjLm5vTGluZXx8KHMoIm1hcmtlci5saW5lLmNvbG9yIixmJiYhQXJyYXkuaXNBcnJheShmKSYmdC5tYXJrZXIuY29sb3IhPT1mP2Y6dT9uLmJhY2tncm91bmQ6bi5kZWZhdWx0TGluZSksYShlLCJtYXJrZXIubGluZSIpJiZpKGUsdCxsLHMse3ByZWZpeDoibWFya2VyLmxpbmUuIixjTGV0dGVyOiJjIn0pLHMoIm1hcmtlci5saW5lLndpZHRoIix1PzE6MCkpLHUmJihzKCJtYXJrZXIuc2l6ZXJlZiIpLHMoIm1hcmtlci5zaXplbWluIikscygibWFya2VyLnNpemVtb2RlIikpLGMuZ3JhZGllbnQpJiYoIm5vbmUiIT09cygibWFya2VyLmdyYWRpZW50LnR5cGUiKSYmcygibWFya2VyLmdyYWRpZW50LmNvbG9yIikpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo3NSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo4NSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiOjg2LCIuL3N1YnR5cGVzIjozNTV9XSwzNTA6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vbGliIikuZGF0ZVRpY2swLGE9ZSgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLk9ORVdFRUs7ZnVuY3Rpb24gaShlLHQpe3JldHVybiBuKHQsZSVhPT0wPzE6MCl9dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLG4sYSl7aWYoYXx8KGE9e3g6ITAseTohMH0pLGEueCl7dmFyIG89bigieHBlcmlvZCIpO28mJihuKCJ4cGVyaW9kMCIsaShvLHQueGNhbGVuZGFyKSksbigieHBlcmlvZGFsaWdubWVudCIpKX1pZihhLnkpe3ZhciBsPW4oInlwZXJpb2QiKTtsJiYobigieXBlcmlvZDAiLGkobCx0LnljYWxlbmRhcikpLG4oInlwZXJpb2RhbGlnbm1lbnQiKSl9fX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjoxODEsIi4uLy4uL2xpYiI6MjAyfV0sMzUxOltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoImQzIiksYT1lKCIuLi8uLi9yZWdpc3RyeSIpLGk9ZSgiLi4vLi4vbGliIiksbz1pLmVuc3VyZVNpbmdsZSxsPWkuaWRlbnRpdHkscz1lKCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxjPWUoIi4vc3VidHlwZXMiKSx1PWUoIi4vbGluZV9wb2ludHMiKSxmPWUoIi4vbGlua190cmFjZXMiKSxkPWUoIi4uLy4uL2xpYi9wb2x5Z29uIikudGVzdGVyO2Z1bmN0aW9uIHAoZSx0LHIsZixwLGgsZyl7dmFyIHY7IWZ1bmN0aW9uKGUsdCxyLGEsbyl7dmFyIGw9ci54YXhpcyxzPXIueWF4aXMsdT1uLmV4dGVudChpLnNpbXBsZU1hcChsLnJhbmdlLGwucjJjKSksZj1uLmV4dGVudChpLnNpbXBsZU1hcChzLnJhbmdlLHMucjJjKSksZD1hWzBdLnRyYWNlO2lmKCFjLmhhc01hcmtlcnMoZCkpcmV0dXJuO3ZhciBwPWQubWFya2VyLm1heGRpc3BsYXllZDtpZigwPT09cClyZXR1cm47dmFyIGg9YS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLng+PXVbMF0mJmUueDw9dVsxXSYmZS55Pj1mWzBdJiZlLnk8PWZbMV19KSksZz1NYXRoLmNlaWwoaC5sZW5ndGgvcCksdj0wO28uZm9yRWFjaCgoZnVuY3Rpb24oZSxyKXt2YXIgbj1lWzBdLnRyYWNlO2MuaGFzTWFya2VycyhuKSYmbi5tYXJrZXIubWF4ZGlzcGxheWVkPjAmJnI8dCYmdisrfSkpO3ZhciBtPU1hdGgucm91bmQodipnLzMrTWF0aC5mbG9vcih2LzMpKmcvNy4xKTthLmZvckVhY2goKGZ1bmN0aW9uKGUpe2RlbGV0ZSBlLnZpc30pKSxoLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7MD09PU1hdGgucm91bmQoKHQrbSklZykmJihlLnZpcz0hMCl9KSl9KDAsdCxyLGYscCk7dmFyIG09ISFnJiZnLmR1cmF0aW9uPjA7ZnVuY3Rpb24geShlKXtyZXR1cm4gbT9lLnRyYW5zaXRpb24oKTplfXZhciB4PXIueGF4aXMsYj1yLnlheGlzLF89ZlswXS50cmFjZSx3PV8ubGluZSxUPW4uc2VsZWN0KGgpLGs9byhULCJnIiwiZXJyb3JiYXJzIiksTT1vKFQsImciLCJsaW5lcyIpLEE9byhULCJnIiwicG9pbnRzIiksTD1vKFQsImciLCJ0ZXh0Iik7aWYoYS5nZXRDb21wb25lbnRNZXRob2QoImVycm9yYmFycyIsInBsb3QiKShlLGsscixnKSwhMD09PV8udmlzaWJsZSl7dmFyIFMsQzt5KFQpLnN0eWxlKCJvcGFjaXR5IixfLm9wYWNpdHkpO3ZhciBPPV8uZmlsbC5jaGFyQXQoXy5maWxsLmxlbmd0aC0xKTsieCIhPT1PJiYieSIhPT1PJiYoTz0iIiksZlswXVtyLmlzUmFuZ2VQbG90PyJub2RlUmFuZ2VQbG90MyI6Im5vZGUzIl09VDt2YXIgRCxQLHo9IiIsUj1bXSxFPV8uX3ByZXZ0cmFjZTtFJiYoej1FLl9wcmV2UmV2cGF0aHx8IiIsQz1FLl9uZXh0RmlsbCxSPUUuX3BvbHlnb25zKTt2YXIgSSxGLE4sSCxqLEIsVixVPSIiLHE9IiIsRz1bXSxaPWkubm9vcDtpZihTPV8uX293bkZpbGwsYy5oYXNMaW5lcyhfKXx8Im5vbmUiIT09Xy5maWxsKXtmb3IoQyYmQy5kYXR1bShmKSwtMSE9PVsiaHYiLCJ2aCIsImh2aCIsInZodiJdLmluZGV4T2Yody5zaGFwZSk/KEk9cy5zdGVwcyh3LnNoYXBlKSxGPXMuc3RlcHMody5zaGFwZS5zcGxpdCgiIikucmV2ZXJzZSgpLmpvaW4oIiIpKSk6ST1GPSJzcGxpbmUiPT09dy5zaGFwZT9mdW5jdGlvbihlKXt2YXIgdD1lW2UubGVuZ3RoLTFdO3JldHVybiBlLmxlbmd0aD4xJiZlWzBdWzBdPT09dFswXSYmZVswXVsxXT09PXRbMV0/cy5zbW9vdGhjbG9zZWQoZS5zbGljZSgxKSx3LnNtb290aGluZyk6cy5zbW9vdGhvcGVuKGUsdy5zbW9vdGhpbmcpfTpmdW5jdGlvbihlKXtyZXR1cm4iTSIrZS5qb2luKCJMIil9LE49ZnVuY3Rpb24oZSl7cmV0dXJuIEYoZS5yZXZlcnNlKCkpfSxHPXUoZix7eGF4aXM6eCx5YXhpczpiLGNvbm5lY3RHYXBzOl8uY29ubmVjdGdhcHMsYmFzZVRvbGVyYW5jZTpNYXRoLm1heCh3LndpZHRofHwxLDMpLzQsc2hhcGU6dy5zaGFwZSxzaW1wbGlmeTp3LnNpbXBsaWZ5LGZpbGw6Xy5maWxsfSksVj1fLl9wb2x5Z29ucz1uZXcgQXJyYXkoRy5sZW5ndGgpLHY9MDt2PEcubGVuZ3RoO3YrKylfLl9wb2x5Z29uc1t2XT1kKEdbdl0pO0cubGVuZ3RoJiYoSD1HWzBdWzBdLEI9KGo9R1tHLmxlbmd0aC0xXSlbai5sZW5ndGgtMV0pLFo9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEQ9SSh0KSxQPU4odCksVT9PPyhVKz0iTCIrRC5zdWJzdHIoMSkscT1QKyJMIitxLnN1YnN0cigxKSk6KFUrPSJaIitELHE9UCsiWiIrcSk6KFU9RCxxPVApLGMuaGFzTGluZXMoXykmJnQubGVuZ3RoPjEpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2lmKHIuZGF0dW0oZiksZSl5KHIuc3R5bGUoIm9wYWNpdHkiLDApLmF0dHIoImQiLEQpLmNhbGwocy5saW5lR3JvdXBTdHlsZSkpLnN0eWxlKCJvcGFjaXR5IiwxKTtlbHNle3ZhciBhPXkocik7YS5hdHRyKCJkIixEKSxzLnNpbmdsZUxpbmVTdHlsZShmLGEpfX19fX12YXIgWT1NLnNlbGVjdEFsbCgiLmpzLWxpbmUiKS5kYXRhKEcpO3koWS5leGl0KCkpLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKSxZLmVhY2goWighMSkpLFkuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJqcy1saW5lIiwhMCkuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5jYWxsKHMubGluZUdyb3VwU3R5bGUpLmVhY2goWighMCkpLHMuc2V0Q2xpcFVybChZLHIubGF5ZXJDbGlwSWQsZSksRy5sZW5ndGg/KFM/KFMuZGF0dW0oZiksSCYmQiYmKE8/KCJ5Ij09PU8/SFsxXT1CWzFdPWIuYzJwKDAsITApOiJ4Ij09PU8mJihIWzBdPUJbMF09eC5jMnAoMCwhMCkpLHkoUykuYXR0cigiZCIsIk0iK0IrIkwiK0grIkwiK1Uuc3Vic3RyKDEpKS5jYWxsKHMuc2luZ2xlRmlsbFN0eWxlKSk6eShTKS5hdHRyKCJkIixVKyJaIikuY2FsbChzLnNpbmdsZUZpbGxTdHlsZSkpKTpDJiYoInRvbmV4dCI9PT1fLmZpbGwuc3Vic3RyKDAsNikmJlUmJno/KCJ0b25leHQiPT09Xy5maWxsP3koQykuYXR0cigiZCIsVSsiWiIreisiWiIpLmNhbGwocy5zaW5nbGVGaWxsU3R5bGUpOnkoQykuYXR0cigiZCIsVSsiTCIrei5zdWJzdHIoMSkrIloiKS5jYWxsKHMuc2luZ2xlRmlsbFN0eWxlKSxfLl9wb2x5Z29ucz1fLl9wb2x5Z29ucy5jb25jYXQoUikpOihXKEMpLF8uX3BvbHlnb25zPW51bGwpKSxfLl9wcmV2UmV2cGF0aD1xLF8uX3ByZXZQb2x5Z29ucz1WKTooUz9XKFMpOkMmJlcoQyksXy5fcG9seWdvbnM9Xy5fcHJldlJldnBhdGg9Xy5fcHJldlBvbHlnb25zPW51bGwpLEEuZGF0dW0oZiksTC5kYXR1bShmKSxmdW5jdGlvbih0LGEsaSl7dmFyIG8sdT1pWzBdLnRyYWNlLGY9Yy5oYXNNYXJrZXJzKHUpLGQ9Yy5oYXNUZXh0KHUpLHA9ZWUodSksaD10ZSxnPXRlO2lmKGZ8fGQpe3ZhciB2PWwsXz11LnN0YWNrZ3JvdXAsdz1fJiYiaW5mZXIgemVybyI9PT1lLl9mdWxsTGF5b3V0Ll9zY2F0dGVyU3RhY2tPcHRzW3guX2lkK2IuX2lkXVtfXS5zdGFja2dhcHM7dS5tYXJrZXIubWF4ZGlzcGxheWVkfHx1Ll9uZWVkc0N1bGw/dj13P0o6UTpfJiYhdyYmKHY9JCksZiYmKGg9diksZCYmKGc9dil9dmFyIFQsaz0obz10LnNlbGVjdEFsbCgicGF0aC5wb2ludCIpLmRhdGEoaCxwKSkuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJwb2ludCIsITApO20mJmsuY2FsbChzLnBvaW50U3R5bGUsdSxlKS5jYWxsKHMudHJhbnNsYXRlUG9pbnRzLHgsYikuc3R5bGUoIm9wYWNpdHkiLDApLnRyYW5zaXRpb24oKS5zdHlsZSgib3BhY2l0eSIsMSksby5vcmRlcigpLGYmJihUPXMubWFrZVBvaW50U3R5bGVGbnModSkpLG8uZWFjaCgoZnVuY3Rpb24odCl7dmFyIGE9bi5zZWxlY3QodGhpcyksaT15KGEpO3MudHJhbnNsYXRlUG9pbnQodCxpLHgsYik/KHMuc2luZ2xlUG9pbnRTdHlsZSh0LGksdSxULGUpLHIubGF5ZXJDbGlwSWQmJnMuaGlkZU91dHNpZGVSYW5nZVBvaW50KHQsaSx4LGIsdS54Y2FsZW5kYXIsdS55Y2FsZW5kYXIpLHUuY3VzdG9tZGF0YSYmYS5jbGFzc2VkKCJwbG90bHktY3VzdG9tZGF0YSIsbnVsbCE9PXQuZGF0YSYmdm9pZCAwIT09dC5kYXRhKSk6aS5yZW1vdmUoKX0pKSxtP28uZXhpdCgpLnRyYW5zaXRpb24oKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCk6by5leGl0KCkucmVtb3ZlKCksKG89YS5zZWxlY3RBbGwoImciKS5kYXRhKGcscCkpLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgidGV4dHBvaW50IiwhMCkuYXBwZW5kKCJ0ZXh0Iiksby5vcmRlcigpLG8uZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9bi5zZWxlY3QodGhpcyksYT15KHQuc2VsZWN0KCJ0ZXh0IikpO3MudHJhbnNsYXRlUG9pbnQoZSxhLHgsYik/ci5sYXllckNsaXBJZCYmcy5oaWRlT3V0c2lkZVJhbmdlUG9pbnQoZSx0LHgsYix1LnhjYWxlbmRhcix1LnljYWxlbmRhcik6dC5yZW1vdmUoKX0pKSxvLnNlbGVjdEFsbCgidGV4dCIpLmNhbGwocy50ZXh0UG9pbnRTdHlsZSx1LGUpLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PXguYzJwKGUueCkscj1iLmMycChlLnkpO24uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgidHNwYW4ubGluZSIpLmVhY2goKGZ1bmN0aW9uKCl7eShuLnNlbGVjdCh0aGlzKSkuYXR0cih7eDp0LHk6cn0pfSkpfSkpLG8uZXhpdCgpLnJlbW92ZSgpfShBLEwsZik7dmFyIFg9ITE9PT1fLmNsaXBvbmF4aXM/bnVsbDpyLmxheWVyQ2xpcElkO3Muc2V0Q2xpcFVybChBLFgsZSkscy5zZXRDbGlwVXJsKEwsWCxlKX1mdW5jdGlvbiBXKGUpe3koZSkuYXR0cigiZCIsIk0wLDBaIil9ZnVuY3Rpb24gUShlKXtyZXR1cm4gZS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiFlLmdhcCYmZS52aXN9KSl9ZnVuY3Rpb24gSihlKXtyZXR1cm4gZS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZpc30pKX1mdW5jdGlvbiAkKGUpe3JldHVybiBlLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZ2FwfSkpfWZ1bmN0aW9uIEsoZSl7cmV0dXJuIGUuaWR9ZnVuY3Rpb24gZWUoZSl7aWYoZS5pZHMpcmV0dXJuIEt9ZnVuY3Rpb24gdGUoKXtyZXR1cm4hMX19dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLGEsaSxjKXt2YXIgdSxkLGg9IWksZz0hIWkmJmkuZHVyYXRpb24+MCx2PWYoZSx0LHIpOygodT1hLnNlbGVjdEFsbCgiZy50cmFjZSIpLmRhdGEodiwoZnVuY3Rpb24oZSl7cmV0dXJuIGVbMF0udHJhY2UudWlkfSkpKS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24oZSl7cmV0dXJuInRyYWNlIHNjYXR0ZXIgdHJhY2UiK2VbMF0udHJhY2UudWlkfSkpLnN0eWxlKCJzdHJva2UtbWl0ZXJsaW1pdCIsMiksdS5vcmRlcigpLGZ1bmN0aW9uKGUsdCxyKXt0LmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBhPW8obi5zZWxlY3QodGhpcyksImciLCJmaWxscyIpO3Muc2V0Q2xpcFVybChhLHIubGF5ZXJDbGlwSWQsZSk7dmFyIGk9dFswXS50cmFjZSxjPVtdO2kuX293bmZpbGwmJmMucHVzaCgiX293bkZpbGwiKSxpLl9uZXh0dHJhY2UmJmMucHVzaCgiX25leHRGaWxsIik7dmFyIHU9YS5zZWxlY3RBbGwoImciKS5kYXRhKGMsbCk7dS5lbnRlcigpLmFwcGVuZCgiZyIpLHUuZXhpdCgpLmVhY2goKGZ1bmN0aW9uKGUpe2lbZV09bnVsbH0pKS5yZW1vdmUoKSx1Lm9yZGVyKCkuZWFjaCgoZnVuY3Rpb24oZSl7aVtlXT1vKG4uc2VsZWN0KHRoaXMpLCJwYXRoIiwianMtZmlsbCIpfSkpfSkpfShlLHUsdCksZyk/KGMmJihkPWMoKSksbi50cmFuc2l0aW9uKCkuZHVyYXRpb24oaS5kdXJhdGlvbikuZWFzZShpLmVhc2luZykuZWFjaCgiZW5kIiwoZnVuY3Rpb24oKXtkJiZkKCl9KSkuZWFjaCgiaW50ZXJydXB0IiwoZnVuY3Rpb24oKXtkJiZkKCl9KSkuZWFjaCgoZnVuY3Rpb24oKXthLnNlbGVjdEFsbCgiZy50cmFjZSIpLmVhY2goKGZ1bmN0aW9uKHIsbil7cChlLG4sdCxyLHYsdGhpcyxpKX0pKX0pKSk6dS5lYWNoKChmdW5jdGlvbihyLG4pe3AoZSxuLHQscix2LHRoaXMsaSl9KSk7aCYmdS5leGl0KCkucmVtb3ZlKCksYS5zZWxlY3RBbGwoInBhdGg6bm90KFtkXSkiKS5yZW1vdmUoKX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo5NywiLi4vLi4vbGliIjoyMDIsIi4uLy4uL2xpYi9wb2x5Z29uIjoyMTQsIi4uLy4uL3JlZ2lzdHJ5IjoyOTAsIi4vbGluZV9wb2ludHMiOjM0NCwiLi9saW5rX3RyYWNlcyI6MzQ2LCIuL3N1YnR5cGVzIjozNTUsZDM6OX1dLDM1MjpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuL3N1YnR5cGVzIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIHIsYSxpLG8sbD1lLmNkLHM9ZS54YXhpcyxjPWUueWF4aXMsdT1bXSxmPWxbMF0udHJhY2U7aWYoIW4uaGFzTWFya2VycyhmKSYmIW4uaGFzVGV4dChmKSlyZXR1cm5bXTtpZighMT09PXQpZm9yKHI9MDtyPGwubGVuZ3RoO3IrKylsW3JdLnNlbGVjdGVkPTA7ZWxzZSBmb3Iocj0wO3I8bC5sZW5ndGg7cisrKWE9bFtyXSxpPXMuYzJwKGEueCksbz1jLmMycChhLnkpLG51bGwhPT1hLmkmJnQuY29udGFpbnMoW2ksb10sITEscixlKT8odS5wdXNoKHtwb2ludE51bWJlcjphLmkseDpzLmMyZChhLngpLHk6Yy5jMmQoYS55KX0pLGEuc2VsZWN0ZWQ9MSk6YS5zZWxlY3RlZD0wO3JldHVybiB1fX0seyIuL3N1YnR5cGVzIjozNTV9XSwzNTM6W2Z1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49WyJvcmllbnRhdGlvbiIsImdyb3Vwbm9ybSIsInN0YWNrZ2FwcyJdO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscixhKXt2YXIgaT1yLl9zY2F0dGVyU3RhY2tPcHRzLG89YSgic3RhY2tncm91cCIpO2lmKG8pe3ZhciBsPXQueGF4aXMrdC55YXhpcyxzPWlbbF07c3x8KHM9aVtsXT17fSk7dmFyIGM9c1tvXSx1PSExO2M/Yy50cmFjZXMucHVzaCh0KTooYz1zW29dPXt0cmFjZUluZGljZXM6W10sdHJhY2VzOlt0XX0sdT0hMCk7Zm9yKHZhciBmPXtvcmllbnRhdGlvbjp0LngmJiF0Lnk/ImgiOiJ2In0sZD0wO2Q8bi5sZW5ndGg7ZCsrKXt2YXIgcD1uW2RdLGg9cCsiRm91bmQiO2lmKCFjW2hdKXt2YXIgZz12b2lkIDAhPT1lW3BdLHY9Im9yaWVudGF0aW9uIj09PXA7aWYoKGd8fHUpJiYoY1twXT1hKHAsZltwXSksdiYmKGMuZmlsbERmbHQ9ImgiPT09Y1twXT8idG9uZXh0eCI6InRvbmV4dHkiKSxnJiYoY1toXT0hMCwhdSYmKGRlbGV0ZSBjLnRyYWNlc1swXVtwXSx2KSkpKWZvcih2YXIgbT0wO208Yy50cmFjZXMubGVuZ3RoLTE7bSsrKXt2YXIgeT1jLnRyYWNlc1ttXTt5Ll9pbnB1dC5maWxsIT09eS5maWxsJiYoeS5maWxsPWMuZmlsbERmbHQpfX19cmV0dXJuIGN9fX0se31dLDM1NDpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCJkMyIpLGE9ZSgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksaT1lKCIuLi8uLi9yZWdpc3RyeSIpO2Z1bmN0aW9uIG8oZSx0LHIpe2EucG9pbnRTdHlsZShlLnNlbGVjdEFsbCgicGF0aC5wb2ludCIpLHQscil9ZnVuY3Rpb24gbChlLHQscil7YS50ZXh0UG9pbnRTdHlsZShlLnNlbGVjdEFsbCgidGV4dCIpLHQscil9dC5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbihlKXt2YXIgdD1uLnNlbGVjdChlKS5zZWxlY3RBbGwoImcudHJhY2Uuc2NhdHRlciIpO3Quc3R5bGUoIm9wYWNpdHkiLChmdW5jdGlvbihlKXtyZXR1cm4gZVswXS50cmFjZS5vcGFjaXR5fSkpLHQuc2VsZWN0QWxsKCJnLnBvaW50cyIpLmVhY2goKGZ1bmN0aW9uKHQpe28obi5zZWxlY3QodGhpcyksdC50cmFjZXx8dFswXS50cmFjZSxlKX0pKSx0LnNlbGVjdEFsbCgiZy50ZXh0IikuZWFjaCgoZnVuY3Rpb24odCl7bChuLnNlbGVjdCh0aGlzKSx0LnRyYWNlfHx0WzBdLnRyYWNlLGUpfSkpLHQuc2VsZWN0QWxsKCJnLnRyYWNlIHBhdGguanMtbGluZSIpLmNhbGwoYS5saW5lR3JvdXBTdHlsZSksdC5zZWxlY3RBbGwoImcudHJhY2UgcGF0aC5qcy1maWxsIikuY2FsbChhLmZpbGxHcm91cFN0eWxlKSxpLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwic3R5bGUiKSh0KX0sc3R5bGVQb2ludHM6byxzdHlsZVRleHQ6bCxzdHlsZU9uU2VsZWN0OmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10WzBdLnRyYWNlO24uc2VsZWN0ZWRwb2ludHM/KGEuc2VsZWN0ZWRQb2ludFN0eWxlKHIuc2VsZWN0QWxsKCJwYXRoLnBvaW50IiksbiksYS5zZWxlY3RlZFRleHRTdHlsZShyLnNlbGVjdEFsbCgidGV4dCIpLG4pKToobyhyLG4sZSksbChyLG4sZSkpfX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo5NywiLi4vLi4vcmVnaXN0cnkiOjI5MCxkMzo5fV0sMzU1OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2xpYiIpO3QuZXhwb3J0cz17aGFzTGluZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudmlzaWJsZSYmZS5tb2RlJiYtMSE9PWUubW9kZS5pbmRleE9mKCJsaW5lcyIpfSxoYXNNYXJrZXJzOmZ1bmN0aW9uKGUpe3JldHVybiBlLnZpc2libGUmJihlLm1vZGUmJi0xIT09ZS5tb2RlLmluZGV4T2YoIm1hcmtlcnMiKXx8InNwbG9tIj09PWUudHlwZSl9LGhhc1RleHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudmlzaWJsZSYmZS5tb2RlJiYtMSE9PWUubW9kZS5pbmRleE9mKCJ0ZXh0Iil9LGlzQnViYmxlOmZ1bmN0aW9uKGUpe3JldHVybiBuLmlzUGxhaW5PYmplY3QoZS5tYXJrZXIpJiZuLmlzQXJyYXlPclR5cGVkQXJyYXkoZS5tYXJrZXIuc2l6ZSl9fX0seyIuLi8uLi9saWIiOjIwMn1dLDM1NjpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9saWIiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsYSxpKXtpPWl8fHt9LGEoInRleHRwb3NpdGlvbiIpLG4uY29lcmNlRm9udChhLCJ0ZXh0Zm9udCIsci5mb250KSxpLm5vU2VsZWN0fHwoYSgic2VsZWN0ZWQudGV4dGZvbnQuY29sb3IiKSxhKCJ1bnNlbGVjdGVkLnRleHRmb250LmNvbG9yIikpfX0seyIuLi8uLi9saWIiOjIwMn1dLDM1NzpbZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9saWIiKSxhPWUoIi4uLy4uL3JlZ2lzdHJ5Iik7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLGkpe3ZhciBvLGw9aSgieCIpLHM9aSgieSIpO2lmKGEuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVUcmFjZURlZmF1bHRzIikoZSx0LFsieCIsInkiXSxyKSxsKXt2YXIgYz1uLm1pblJvd0xlbmd0aChsKTtzP289TWF0aC5taW4oYyxuLm1pblJvd0xlbmd0aChzKSk6KG89YyxpKCJ5MCIpLGkoImR5IikpfWVsc2V7aWYoIXMpcmV0dXJuIDA7bz1uLm1pblJvd0xlbmd0aChzKSxpKCJ4MCIpLGkoImR4Iil9cmV0dXJuIHQuX2xlbmd0aD1vLG99fSx7Ii4uLy4uL2xpYiI6MjAyLCIuLi8uLi9yZWdpc3RyeSI6MjkwfV0sMzU4OltmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IudmVyc2lvbj0iMS41OC40In0se31dfSx7fSxbNF0pKDQpfSkpOw=="; export default content;