From a35892ba9f4240dbbf6c6b9efd03cc4d770f5366 Mon Sep 17 00:00:00 2001 From: Michael Kapelko Date: Wed, 16 Oct 2019 11:58:41 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=BE=D1=85=D1=80=D0=B0=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- муром_1.2.0.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/муром_1.2.0.html b/муром_1.2.0.html index 7dbd30d..fecb671 100644 --- a/муром_1.2.0.html +++ b/муром_1.2.0.html @@ -11,7 +11,7 @@ var murom = муром; [ "муром.загрузка_1.0.0", -"bXVyb20uaW5zdGFsbExvY2FsRm9yYWdlID0gZnVuY3Rpb24oKQp7Ci8qCiAgICBsb2NhbEZvcmFnZSAtLSBPZmZsaW5lIFN0b3JhZ2UsIEltcHJvdmVkCiAgICBWZXJzaW9uIDEuNy4zCiAgICBodHRwczovL2xvY2FsZm9yYWdlLmdpdGh1Yi5pby9sb2NhbEZvcmFnZQogICAgKGMpIDIwMTMtMjAxNyBNb3ppbGxhLCBBcGFjaGUgTGljZW5zZSAyLjAKKi8KIWZ1bmN0aW9uKGEpe2lmKCJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmInVuZGVmaW5lZCIhPXR5cGVvZiBtb2R1bGUpbW9kdWxlLmV4cG9ydHM9YSgpO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZClkZWZpbmUoW10sYSk7ZWxzZXt2YXIgYjtiPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6dGhpcyxiLmxvY2FsZm9yYWdlPWEoKX19KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGEoYixjLGQpe2Z1bmN0aW9uIGUoZyxoKXtpZighY1tnXSl7aWYoIWJbZ10pe3ZhciBpPSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFoJiZpKXJldHVybiBpKGcsITApO2lmKGYpcmV0dXJuIGYoZywhMCk7dmFyIGo9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrZysiJyIpO3Rocm93IGouY29kZT0iTU9EVUxFX05PVF9GT1VORCIsan12YXIgaz1jW2ddPXtleHBvcnRzOnt9fTtiW2ddWzBdLmNhbGwoay5leHBvcnRzLGZ1bmN0aW9uKGEpe3ZhciBjPWJbZ11bMV1bYV07cmV0dXJuIGUoY3x8YSl9LGssay5leHBvcnRzLGEsYixjLGQpfXJldHVybiBjW2ddLmV4cG9ydHN9Zm9yKHZhciBmPSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGc9MDtnPGQubGVuZ3RoO2crKyllKGRbZ10pO3JldHVybiBlfSh7MTpbZnVuY3Rpb24oYSxiLGMpeyhmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYygpe2s9ITA7Zm9yKHZhciBhLGIsYz1sLmxlbmd0aDtjOyl7Zm9yKGI9bCxsPVtdLGE9LTE7KythPGM7KWJbYV0oKTtjPWwubGVuZ3RofWs9ITF9ZnVuY3Rpb24gZChhKXsxIT09bC5wdXNoKGEpfHxrfHxlKCl9dmFyIGUsZj1hLk11dGF0aW9uT2JzZXJ2ZXJ8fGEuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtpZihmKXt2YXIgZz0wLGg9bmV3IGYoYyksaT1hLmRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKTtoLm9ic2VydmUoaSx7Y2hhcmFjdGVyRGF0YTohMH0pLGU9ZnVuY3Rpb24oKXtpLmRhdGE9Zz0rK2clMn19ZWxzZSBpZihhLnNldEltbWVkaWF0ZXx8dm9pZCAwPT09YS5NZXNzYWdlQ2hhbm5lbCllPSJkb2N1bWVudCJpbiBhJiYib25yZWFkeXN0YXRlY2hhbmdlImluIGEuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik/ZnVuY3Rpb24oKXt2YXIgYj1hLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2Iub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7YygpLGIub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLGI9bnVsbH0sYS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoYil9OmZ1bmN0aW9uKCl7c2V0VGltZW91dChjLDApfTtlbHNle3ZhciBqPW5ldyBhLk1lc3NhZ2VDaGFubmVsO2oucG9ydDEub25tZXNzYWdlPWMsZT1mdW5jdGlvbigpe2oucG9ydDIucG9zdE1lc3NhZ2UoMCl9fXZhciBrLGw9W107Yi5leHBvcnRzPWR9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHt9XSwyOltmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGQoKXt9ZnVuY3Rpb24gZShhKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYSl0aHJvdyBuZXcgVHlwZUVycm9yKCJyZXNvbHZlciBtdXN0IGJlIGEgZnVuY3Rpb24iKTt0aGlzLnN0YXRlPXMsdGhpcy5xdWV1ZT1bXSx0aGlzLm91dGNvbWU9dm9pZCAwLGEhPT1kJiZpKHRoaXMsYSl9ZnVuY3Rpb24gZihhLGIsYyl7dGhpcy5wcm9taXNlPWEsImZ1bmN0aW9uIj09dHlwZW9mIGImJih0aGlzLm9uRnVsZmlsbGVkPWIsdGhpcy5jYWxsRnVsZmlsbGVkPXRoaXMub3RoZXJDYWxsRnVsZmlsbGVkKSwiZnVuY3Rpb24iPT10eXBlb2YgYyYmKHRoaXMub25SZWplY3RlZD1jLHRoaXMuY2FsbFJlamVjdGVkPXRoaXMub3RoZXJDYWxsUmVqZWN0ZWQpfWZ1bmN0aW9uIGcoYSxiLGMpe28oZnVuY3Rpb24oKXt2YXIgZDt0cnl7ZD1iKGMpfWNhdGNoKGIpe3JldHVybiBwLnJlamVjdChhLGIpfWQ9PT1hP3AucmVqZWN0KGEsbmV3IFR5cGVFcnJvcigiQ2Fubm90IHJlc29sdmUgcHJvbWlzZSB3aXRoIGl0c2VsZiIpKTpwLnJlc29sdmUoYSxkKX0pfWZ1bmN0aW9uIGgoYSl7dmFyIGI9YSYmYS50aGVuO2lmKGEmJigib2JqZWN0Ij09dHlwZW9mIGF8fCJmdW5jdGlvbiI9PXR5cGVvZiBhKSYmImZ1bmN0aW9uIj09dHlwZW9mIGIpcmV0dXJuIGZ1bmN0aW9uKCl7Yi5hcHBseShhLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIGkoYSxiKXtmdW5jdGlvbiBjKGIpe2Z8fChmPSEwLHAucmVqZWN0KGEsYikpfWZ1bmN0aW9uIGQoYil7Znx8KGY9ITAscC5yZXNvbHZlKGEsYikpfWZ1bmN0aW9uIGUoKXtiKGQsYyl9dmFyIGY9ITEsZz1qKGUpOyJlcnJvciI9PT1nLnN0YXR1cyYmYyhnLnZhbHVlKX1mdW5jdGlvbiBqKGEsYil7dmFyIGM9e307dHJ5e2MudmFsdWU9YShiKSxjLnN0YXR1cz0ic3VjY2VzcyJ9Y2F0Y2goYSl7Yy5zdGF0dXM9ImVycm9yIixjLnZhbHVlPWF9cmV0dXJuIGN9ZnVuY3Rpb24gayhhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIHRoaXM/YTpwLnJlc29sdmUobmV3IHRoaXMoZCksYSl9ZnVuY3Rpb24gbChhKXt2YXIgYj1uZXcgdGhpcyhkKTtyZXR1cm4gcC5yZWplY3QoYixhKX1mdW5jdGlvbiBtKGEpe2Z1bmN0aW9uIGIoYSxiKXtmdW5jdGlvbiBkKGEpe2dbYl09YSwrK2ghPT1lfHxmfHwoZj0hMCxwLnJlc29sdmUoaixnKSl9Yy5yZXNvbHZlKGEpLnRoZW4oZCxmdW5jdGlvbihhKXtmfHwoZj0hMCxwLnJlamVjdChqLGEpKX0pfXZhciBjPXRoaXM7aWYoIltvYmplY3QgQXJyYXldIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKSlyZXR1cm4gdGhpcy5yZWplY3QobmV3IFR5cGVFcnJvcigibXVzdCBiZSBhbiBhcnJheSIpKTt2YXIgZT1hLmxlbmd0aCxmPSExO2lmKCFlKXJldHVybiB0aGlzLnJlc29sdmUoW10pO2Zvcih2YXIgZz1uZXcgQXJyYXkoZSksaD0wLGk9LTEsaj1uZXcgdGhpcyhkKTsrK2k8ZTspYihhW2ldLGkpO3JldHVybiBqfWZ1bmN0aW9uIG4oYSl7ZnVuY3Rpb24gYihhKXtjLnJlc29sdmUoYSkudGhlbihmdW5jdGlvbihhKXtmfHwoZj0hMCxwLnJlc29sdmUoaCxhKSl9LGZ1bmN0aW9uKGEpe2Z8fChmPSEwLHAucmVqZWN0KGgsYSkpfSl9dmFyIGM9dGhpcztpZigiW29iamVjdCBBcnJheV0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpKXJldHVybiB0aGlzLnJlamVjdChuZXcgVHlwZUVycm9yKCJtdXN0IGJlIGFuIGFycmF5IikpO3ZhciBlPWEubGVuZ3RoLGY9ITE7aWYoIWUpcmV0dXJuIHRoaXMucmVzb2x2ZShbXSk7Zm9yKHZhciBnPS0xLGg9bmV3IHRoaXMoZCk7KytnPGU7KWIoYVtnXSk7cmV0dXJuIGh9dmFyIG89YSgxKSxwPXt9LHE9WyJSRUpFQ1RFRCJdLHI9WyJGVUxGSUxMRUQiXSxzPVsiUEVORElORyJdO2IuZXhwb3J0cz1lLGUucHJvdG90eXBlLmNhdGNoPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnRoZW4obnVsbCxhKX0sZS5wcm90b3R5cGUudGhlbj1mdW5jdGlvbihhLGIpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBhJiZ0aGlzLnN0YXRlPT09cnx8ImZ1bmN0aW9uIiE9dHlwZW9mIGImJnRoaXMuc3RhdGU9PT1xKXJldHVybiB0aGlzO3ZhciBjPW5ldyB0aGlzLmNvbnN0cnVjdG9yKGQpO2lmKHRoaXMuc3RhdGUhPT1zKXtnKGMsdGhpcy5zdGF0ZT09PXI/YTpiLHRoaXMub3V0Y29tZSl9ZWxzZSB0aGlzLnF1ZXVlLnB1c2gobmV3IGYoYyxhLGIpKTtyZXR1cm4gY30sZi5wcm90b3R5cGUuY2FsbEZ1bGZpbGxlZD1mdW5jdGlvbihhKXtwLnJlc29sdmUodGhpcy5wcm9taXNlLGEpfSxmLnByb3RvdHlwZS5vdGhlckNhbGxGdWxmaWxsZWQ9ZnVuY3Rpb24oYSl7Zyh0aGlzLnByb21pc2UsdGhpcy5vbkZ1bGZpbGxlZCxhKX0sZi5wcm90b3R5cGUuY2FsbFJlamVjdGVkPWZ1bmN0aW9uKGEpe3AucmVqZWN0KHRoaXMucHJvbWlzZSxhKX0sZi5wcm90b3R5cGUub3RoZXJDYWxsUmVqZWN0ZWQ9ZnVuY3Rpb24oYSl7Zyh0aGlzLnByb21pc2UsdGhpcy5vblJlamVjdGVkLGEpfSxwLnJlc29sdmU9ZnVuY3Rpb24oYSxiKXt2YXIgYz1qKGgsYik7aWYoImVycm9yIj09PWMuc3RhdHVzKXJldHVybiBwLnJlamVjdChhLGMudmFsdWUpO3ZhciBkPWMudmFsdWU7aWYoZClpKGEsZCk7ZWxzZXthLnN0YXRlPXIsYS5vdXRjb21lPWI7Zm9yKHZhciBlPS0xLGY9YS5xdWV1ZS5sZW5ndGg7KytlPGY7KWEucXVldWVbZV0uY2FsbEZ1bGZpbGxlZChiKX1yZXR1cm4gYX0scC5yZWplY3Q9ZnVuY3Rpb24oYSxiKXthLnN0YXRlPXEsYS5vdXRjb21lPWI7Zm9yKHZhciBjPS0xLGQ9YS5xdWV1ZS5sZW5ndGg7KytjPGQ7KWEucXVldWVbY10uY2FsbFJlamVjdGVkKGIpO3JldHVybiBhfSxlLnJlc29sdmU9ayxlLnJlamVjdD1sLGUuYWxsPW0sZS5yYWNlPW59LHsxOjF9XSwzOltmdW5jdGlvbihhLGIsYyl7KGZ1bmN0aW9uKGIpeyJ1c2Ugc3RyaWN0IjsiZnVuY3Rpb24iIT10eXBlb2YgYi5Qcm9taXNlJiYoYi5Qcm9taXNlPWEoMikpfSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7MjoyfV0sNDpbZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBkKGEsYil7aWYoIShhIGluc3RhbmNlb2YgYikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gZSgpe3RyeXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGluZGV4ZWREQilyZXR1cm4gaW5kZXhlZERCO2lmKCJ1bmRlZmluZWQiIT10eXBlb2Ygd2Via2l0SW5kZXhlZERCKXJldHVybiB3ZWJraXRJbmRleGVkREI7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBtb3pJbmRleGVkREIpcmV0dXJuIG1vekluZGV4ZWREQjtpZigidW5kZWZpbmVkIiE9dHlwZW9mIE9JbmRleGVkREIpcmV0dXJuIE9JbmRleGVkREI7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBtc0luZGV4ZWREQilyZXR1cm4gbXNJbmRleGVkREJ9Y2F0Y2goYSl7cmV0dXJufX1mdW5jdGlvbiBmKCl7dHJ5e2lmKCF1YSlyZXR1cm4hMTt2YXIgYT0idW5kZWZpbmVkIiE9dHlwZW9mIG9wZW5EYXRhYmFzZSYmLyhTYWZhcml8aVBob25lfGlQYWR8aVBvZCkvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiEvQ2hyb21lLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhL0JsYWNrQmVycnkvLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKSxiPSJmdW5jdGlvbiI9PXR5cGVvZiBmZXRjaCYmLTEhPT1mZXRjaC50b1N0cmluZygpLmluZGV4T2YoIltuYXRpdmUgY29kZSIpO3JldHVybighYXx8YikmJiJ1bmRlZmluZWQiIT10eXBlb2YgaW5kZXhlZERCJiYidW5kZWZpbmVkIiE9dHlwZW9mIElEQktleVJhbmdlfWNhdGNoKGEpe3JldHVybiExfX1mdW5jdGlvbiBnKGEsYil7YT1hfHxbXSxiPWJ8fHt9O3RyeXtyZXR1cm4gbmV3IEJsb2IoYSxiKX1jYXRjaChmKXtpZigiVHlwZUVycm9yIiE9PWYubmFtZSl0aHJvdyBmO2Zvcih2YXIgYz0idW5kZWZpbmVkIiE9dHlwZW9mIEJsb2JCdWlsZGVyP0Jsb2JCdWlsZGVyOiJ1bmRlZmluZWQiIT10eXBlb2YgTVNCbG9iQnVpbGRlcj9NU0Jsb2JCdWlsZGVyOiJ1bmRlZmluZWQiIT10eXBlb2YgTW96QmxvYkJ1aWxkZXI/TW96QmxvYkJ1aWxkZXI6V2ViS2l0QmxvYkJ1aWxkZXIsZD1uZXcgYyxlPTA7ZTxhLmxlbmd0aDtlKz0xKWQuYXBwZW5kKGFbZV0pO3JldHVybiBkLmdldEJsb2IoYi50eXBlKX19ZnVuY3Rpb24gaChhLGIpe2ImJmEudGhlbihmdW5jdGlvbihhKXtiKG51bGwsYSl9LGZ1bmN0aW9uKGEpe2IoYSl9KX1mdW5jdGlvbiBpKGEsYixjKXsiZnVuY3Rpb24iPT10eXBlb2YgYiYmYS50aGVuKGIpLCJmdW5jdGlvbiI9PXR5cGVvZiBjJiZhLmNhdGNoKGMpfWZ1bmN0aW9uIGooYSl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBhJiYoY29uc29sZS53YXJuKGErIiB1c2VkIGFzIGEga2V5LCBidXQgaXQgaXMgbm90IGEgc3RyaW5nLiIpLGE9U3RyaW5nKGEpKSxhfWZ1bmN0aW9uIGsoKXtpZihhcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV0pcmV0dXJuIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdfWZ1bmN0aW9uIGwoYSl7Zm9yKHZhciBiPWEubGVuZ3RoLGM9bmV3IEFycmF5QnVmZmVyKGIpLGQ9bmV3IFVpbnQ4QXJyYXkoYyksZT0wO2U8YjtlKyspZFtlXT1hLmNoYXJDb2RlQXQoZSk7cmV0dXJuIGN9ZnVuY3Rpb24gbShhKXtyZXR1cm4gbmV3IHZhKGZ1bmN0aW9uKGIpe3ZhciBjPWEudHJhbnNhY3Rpb24od2EsQmEpLGQ9ZyhbIiJdKTtjLm9iamVjdFN0b3JlKHdhKS5wdXQoZCwia2V5IiksYy5vbmFib3J0PWZ1bmN0aW9uKGEpe2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpLGIoITEpfSxjLm9uY29tcGxldGU9ZnVuY3Rpb24oKXt2YXIgYT1uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9DaHJvbWVcLyhcZCspLyksYz1uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9FZGdlXC8vKTtiKGN8fCFhfHxwYXJzZUludChhWzFdLDEwKT49NDMpfX0pLmNhdGNoKGZ1bmN0aW9uKCl7cmV0dXJuITF9KX1mdW5jdGlvbiBuKGEpe3JldHVybiJib29sZWFuIj09dHlwZW9mIHhhP3ZhLnJlc29sdmUoeGEpOm0oYSkudGhlbihmdW5jdGlvbihhKXtyZXR1cm4geGE9YX0pfWZ1bmN0aW9uIG8oYSl7dmFyIGI9eWFbYS5uYW1lXSxjPXt9O2MucHJvbWlzZT1uZXcgdmEoZnVuY3Rpb24oYSxiKXtjLnJlc29sdmU9YSxjLnJlamVjdD1ifSksYi5kZWZlcnJlZE9wZXJhdGlvbnMucHVzaChjKSxiLmRiUmVhZHk/Yi5kYlJlYWR5PWIuZGJSZWFkeS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGMucHJvbWlzZX0pOmIuZGJSZWFkeT1jLnByb21pc2V9ZnVuY3Rpb24gcChhKXt2YXIgYj15YVthLm5hbWVdLGM9Yi5kZWZlcnJlZE9wZXJhdGlvbnMucG9wKCk7aWYoYylyZXR1cm4gYy5yZXNvbHZlKCksYy5wcm9taXNlfWZ1bmN0aW9uIHEoYSxiKXt2YXIgYz15YVthLm5hbWVdLGQ9Yy5kZWZlcnJlZE9wZXJhdGlvbnMucG9wKCk7aWYoZClyZXR1cm4gZC5yZWplY3QoYiksZC5wcm9taXNlfWZ1bmN0aW9uIHIoYSxiKXtyZXR1cm4gbmV3IHZhKGZ1bmN0aW9uKGMsZCl7aWYoeWFbYS5uYW1lXT15YVthLm5hbWVdfHxCKCksYS5kYil7aWYoIWIpcmV0dXJuIGMoYS5kYik7byhhKSxhLmRiLmNsb3NlKCl9dmFyIGU9W2EubmFtZV07YiYmZS5wdXNoKGEudmVyc2lvbik7dmFyIGY9dWEub3Blbi5hcHBseSh1YSxlKTtiJiYoZi5vbnVwZ3JhZGVuZWVkZWQ9ZnVuY3Rpb24oYil7dmFyIGM9Zi5yZXN1bHQ7dHJ5e2MuY3JlYXRlT2JqZWN0U3RvcmUoYS5zdG9yZU5hbWUpLGIub2xkVmVyc2lvbjw9MSYmYy5jcmVhdGVPYmplY3RTdG9yZSh3YSl9Y2F0Y2goYyl7aWYoIkNvbnN0cmFpbnRFcnJvciIhPT1jLm5hbWUpdGhyb3cgYztjb25zb2xlLndhcm4oJ1RoZSBkYXRhYmFzZSAiJythLm5hbWUrJyIgaGFzIGJlZW4gdXBncmFkZWQgZnJvbSB2ZXJzaW9uICcrYi5vbGRWZXJzaW9uKyIgdG8gdmVyc2lvbiAiK2IubmV3VmVyc2lvbisnLCBidXQgdGhlIHN0b3JhZ2UgIicrYS5zdG9yZU5hbWUrJyIgYWxyZWFkeSBleGlzdHMuJyl9fSksZi5vbmVycm9yPWZ1bmN0aW9uKGEpe2EucHJldmVudERlZmF1bHQoKSxkKGYuZXJyb3IpfSxmLm9uc3VjY2Vzcz1mdW5jdGlvbigpe2MoZi5yZXN1bHQpLHAoYSl9fSl9ZnVuY3Rpb24gcyhhKXtyZXR1cm4gcihhLCExKX1mdW5jdGlvbiB0KGEpe3JldHVybiByKGEsITApfWZ1bmN0aW9uIHUoYSxiKXtpZighYS5kYilyZXR1cm4hMDt2YXIgYz0hYS5kYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKGEuc3RvcmVOYW1lKSxkPWEudmVyc2lvbjxhLmRiLnZlcnNpb24sZT1hLnZlcnNpb24+YS5kYi52ZXJzaW9uO2lmKGQmJihhLnZlcnNpb24hPT1iJiZjb25zb2xlLndhcm4oJ1RoZSBkYXRhYmFzZSAiJythLm5hbWUrIlwiIGNhbid0IGJlIGRvd25ncmFkZWQgZnJvbSB2ZXJzaW9uICIrYS5kYi52ZXJzaW9uKyIgdG8gdmVyc2lvbiAiK2EudmVyc2lvbisiLiIpLGEudmVyc2lvbj1hLmRiLnZlcnNpb24pLGV8fGMpe2lmKGMpe3ZhciBmPWEuZGIudmVyc2lvbisxO2Y+YS52ZXJzaW9uJiYoYS52ZXJzaW9uPWYpfXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIHYoYSl7cmV0dXJuIG5ldyB2YShmdW5jdGlvbihiLGMpe3ZhciBkPW5ldyBGaWxlUmVhZGVyO2Qub25lcnJvcj1jLGQub25sb2FkZW5kPWZ1bmN0aW9uKGMpe3ZhciBkPWJ0b2EoYy50YXJnZXQucmVzdWx0fHwiIik7Yih7X19sb2NhbF9mb3JhZ2VfZW5jb2RlZF9ibG9iOiEwLGRhdGE6ZCx0eXBlOmEudHlwZX0pfSxkLnJlYWRBc0JpbmFyeVN0cmluZyhhKX0pfWZ1bmN0aW9uIHcoYSl7cmV0dXJuIGcoW2woYXRvYihhLmRhdGEpKV0se3R5cGU6YS50eXBlfSl9ZnVuY3Rpb24geChhKXtyZXR1cm4gYSYmYS5fX2xvY2FsX2ZvcmFnZV9lbmNvZGVkX2Jsb2J9ZnVuY3Rpb24geShhKXt2YXIgYj10aGlzLGM9Yi5faW5pdFJlYWR5KCkudGhlbihmdW5jdGlvbigpe3ZhciBhPXlhW2IuX2RiSW5mby5uYW1lXTtpZihhJiZhLmRiUmVhZHkpcmV0dXJuIGEuZGJSZWFkeX0pO3JldHVybiBpKGMsYSxhKSxjfWZ1bmN0aW9uIHooYSl7byhhKTtmb3IodmFyIGI9eWFbYS5uYW1lXSxjPWIuZm9yYWdlcyxkPTA7ZDxjLmxlbmd0aDtkKyspe3ZhciBlPWNbZF07ZS5fZGJJbmZvLmRiJiYoZS5fZGJJbmZvLmRiLmNsb3NlKCksZS5fZGJJbmZvLmRiPW51bGwpfXJldHVybiBhLmRiPW51bGwscyhhKS50aGVuKGZ1bmN0aW9uKGIpe3JldHVybiBhLmRiPWIsdShhKT90KGEpOmJ9KS50aGVuKGZ1bmN0aW9uKGQpe2EuZGI9Yi5kYj1kO2Zvcih2YXIgZT0wO2U8Yy5sZW5ndGg7ZSsrKWNbZV0uX2RiSW5mby5kYj1kfSkuY2F0Y2goZnVuY3Rpb24oYil7dGhyb3cgcShhLGIpLGJ9KX1mdW5jdGlvbiBBKGEsYixjLGQpe3ZvaWQgMD09PWQmJihkPTEpO3RyeXt2YXIgZT1hLmRiLnRyYW5zYWN0aW9uKGEuc3RvcmVOYW1lLGIpO2MobnVsbCxlKX1jYXRjaChlKXtpZihkPjAmJighYS5kYnx8IkludmFsaWRTdGF0ZUVycm9yIj09PWUubmFtZXx8Ik5vdEZvdW5kRXJyb3IiPT09ZS5uYW1lKSlyZXR1cm4gdmEucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXtpZighYS5kYnx8Ik5vdEZvdW5kRXJyb3IiPT09ZS5uYW1lJiYhYS5kYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKGEuc3RvcmVOYW1lKSYmYS52ZXJzaW9uPD1hLmRiLnZlcnNpb24pcmV0dXJuIGEuZGImJihhLnZlcnNpb249YS5kYi52ZXJzaW9uKzEpLHQoYSl9KS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHooYSkudGhlbihmdW5jdGlvbigpe0EoYSxiLGMsZC0xKX0pfSkuY2F0Y2goYyk7YyhlKX19ZnVuY3Rpb24gQigpe3JldHVybntmb3JhZ2VzOltdLGRiOm51bGwsZGJSZWFkeTpudWxsLGRlZmVycmVkT3BlcmF0aW9uczpbXX19ZnVuY3Rpb24gQyhhKXtmdW5jdGlvbiBiKCl7cmV0dXJuIHZhLnJlc29sdmUoKX12YXIgYz10aGlzLGQ9e2RiOm51bGx9O2lmKGEpZm9yKHZhciBlIGluIGEpZFtlXT1hW2VdO3ZhciBmPXlhW2QubmFtZV07Znx8KGY9QigpLHlhW2QubmFtZV09ZiksZi5mb3JhZ2VzLnB1c2goYyksYy5faW5pdFJlYWR5fHwoYy5faW5pdFJlYWR5PWMucmVhZHksYy5yZWFkeT15KTtmb3IodmFyIGc9W10saD0wO2g8Zi5mb3JhZ2VzLmxlbmd0aDtoKyspe3ZhciBpPWYuZm9yYWdlc1toXTtpIT09YyYmZy5wdXNoKGkuX2luaXRSZWFkeSgpLmNhdGNoKGIpKX12YXIgaj1mLmZvcmFnZXMuc2xpY2UoMCk7cmV0dXJuIHZhLmFsbChnKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGQuZGI9Zi5kYixzKGQpfSkudGhlbihmdW5jdGlvbihhKXtyZXR1cm4gZC5kYj1hLHUoZCxjLl9kZWZhdWx0Q29uZmlnLnZlcnNpb24pP3QoZCk6YX0pLnRoZW4oZnVuY3Rpb24oYSl7ZC5kYj1mLmRiPWEsYy5fZGJJbmZvPWQ7Zm9yKHZhciBiPTA7YjxqLmxlbmd0aDtiKyspe3ZhciBlPWpbYl07ZSE9PWMmJihlLl9kYkluZm8uZGI9ZC5kYixlLl9kYkluZm8udmVyc2lvbj1kLnZlcnNpb24pfX0pfWZ1bmN0aW9uIEQoYSxiKXt2YXIgYz10aGlzO2E9aihhKTt2YXIgZD1uZXcgdmEoZnVuY3Rpb24oYixkKXtjLnJlYWR5KCkudGhlbihmdW5jdGlvbigpe0EoYy5fZGJJbmZvLEFhLGZ1bmN0aW9uKGUsZil7aWYoZSlyZXR1cm4gZChlKTt0cnl7dmFyIGc9Zi5vYmplY3RTdG9yZShjLl9kYkluZm8uc3RvcmVOYW1lKSxoPWcuZ2V0KGEpO2gub25zdWNjZXNzPWZ1bmN0aW9uKCl7dmFyIGE9aC5yZXN1bHQ7dm9pZCAwPT09YSYmKGE9bnVsbCkseChhKSYmKGE9dyhhKSksYihhKX0saC5vbmVycm9yPWZ1bmN0aW9uKCl7ZChoLmVycm9yKX19Y2F0Y2goYSl7ZChhKX19KX0pLmNhdGNoKGQpfSk7cmV0dXJuIGgoZCxiKSxkfWZ1bmN0aW9uIEUoYSxiKXt2YXIgYz10aGlzLGQ9bmV3IHZhKGZ1bmN0aW9uKGIsZCl7Yy5yZWFkeSgpLnRoZW4oZnVuY3Rpb24oKXtBKGMuX2RiSW5mbyxBYSxmdW5jdGlvbihlLGYpe2lmKGUpcmV0dXJuIGQoZSk7dHJ5e3ZhciBnPWYub2JqZWN0U3RvcmUoYy5fZGJJbmZvLnN0b3JlTmFtZSksaD1nLm9wZW5DdXJzb3IoKSxpPTE7aC5vbnN1Y2Nlc3M9ZnVuY3Rpb24oKXt2YXIgYz1oLnJlc3VsdDtpZihjKXt2YXIgZD1jLnZhbHVlO3goZCkmJihkPXcoZCkpO3ZhciBlPWEoZCxjLmtleSxpKyspO3ZvaWQgMCE9PWU/YihlKTpjLmNvbnRpbnVlKCl9ZWxzZSBiKCl9LGgub25lcnJvcj1mdW5jdGlvbigpe2QoaC5lcnJvcil9fWNhdGNoKGEpe2QoYSl9fSl9KS5jYXRjaChkKX0pO3JldHVybiBoKGQsYiksZH1mdW5jdGlvbiBGKGEsYixjKXt2YXIgZD10aGlzO2E9aihhKTt2YXIgZT1uZXcgdmEoZnVuY3Rpb24oYyxlKXt2YXIgZjtkLnJlYWR5KCkudGhlbihmdW5jdGlvbigpe3JldHVybiBmPWQuX2RiSW5mbywiW29iamVjdCBCbG9iXSI9PT16YS5jYWxsKGIpP24oZi5kYikudGhlbihmdW5jdGlvbihhKXtyZXR1cm4gYT9iOnYoYil9KTpifSkudGhlbihmdW5jdGlvbihiKXtBKGQuX2RiSW5mbyxCYSxmdW5jdGlvbihmLGcpe2lmKGYpcmV0dXJuIGUoZik7dHJ5e3ZhciBoPWcub2JqZWN0U3RvcmUoZC5fZGJJbmZvLnN0b3JlTmFtZSk7bnVsbD09PWImJihiPXZvaWQgMCk7dmFyIGk9aC5wdXQoYixhKTtnLm9uY29tcGxldGU9ZnVuY3Rpb24oKXt2b2lkIDA9PT1iJiYoYj1udWxsKSxjKGIpfSxnLm9uYWJvcnQ9Zy5vbmVycm9yPWZ1bmN0aW9uKCl7dmFyIGE9aS5lcnJvcj9pLmVycm9yOmkudHJhbnNhY3Rpb24uZXJyb3I7ZShhKX19Y2F0Y2goYSl7ZShhKX19KX0pLmNhdGNoKGUpfSk7cmV0dXJuIGgoZSxjKSxlfWZ1bmN0aW9uIEcoYSxiKXt2YXIgYz10aGlzO2E9aihhKTt2YXIgZD1uZXcgdmEoZnVuY3Rpb24oYixkKXtjLnJlYWR5KCkudGhlbihmdW5jdGlvbigpe0EoYy5fZGJJbmZvLEJhLGZ1bmN0aW9uKGUsZil7aWYoZSlyZXR1cm4gZChlKTt0cnl7dmFyIGc9Zi5vYmplY3RTdG9yZShjLl9kYkluZm8uc3RvcmVOYW1lKSxoPWcuZGVsZXRlKGEpO2Yub25jb21wbGV0ZT1mdW5jdGlvbigpe2IoKX0sZi5vbmVycm9yPWZ1bmN0aW9uKCl7ZChoLmVycm9yKX0sZi5vbmFib3J0PWZ1bmN0aW9uKCl7dmFyIGE9aC5lcnJvcj9oLmVycm9yOmgudHJhbnNhY3Rpb24uZXJyb3I7ZChhKX19Y2F0Y2goYSl7ZChhKX19KX0pLmNhdGNoKGQpfSk7cmV0dXJuIGgoZCxiKSxkfWZ1bmN0aW9uIEgoYSl7dmFyIGI9dGhpcyxjPW5ldyB2YShmdW5jdGlvbihhLGMpe2IucmVhZHkoKS50aGVuKGZ1bmN0aW9uKCl7QShiLl9kYkluZm8sQmEsZnVuY3Rpb24oZCxlKXtpZihkKXJldHVybiBjKGQpO3RyeXt2YXIgZj1lLm9iamVjdFN0b3JlKGIuX2RiSW5mby5zdG9yZU5hbWUpLGc9Zi5jbGVhcigpO2Uub25jb21wbGV0ZT1mdW5jdGlvbigpe2EoKX0sZS5vbmFib3J0PWUub25lcnJvcj1mdW5jdGlvbigpe3ZhciBhPWcuZXJyb3I/Zy5lcnJvcjpnLnRyYW5zYWN0aW9uLmVycm9yO2MoYSl9fWNhdGNoKGEpe2MoYSl9fSl9KS5jYXRjaChjKX0pO3JldHVybiBoKGMsYSksY31mdW5jdGlvbiBJKGEpe3ZhciBiPXRoaXMsYz1uZXcgdmEoZnVuY3Rpb24oYSxjKXtiLnJlYWR5KCkudGhlbihmdW5jdGlvbigpe0EoYi5fZGJJbmZvLEFhLGZ1bmN0aW9uKGQsZSl7aWYoZClyZXR1cm4gYyhkKTt0cnl7dmFyIGY9ZS5vYmplY3RTdG9yZShiLl9kYkluZm8uc3RvcmVOYW1lKSxnPWYuY291bnQoKTtnLm9uc3VjY2Vzcz1mdW5jdGlvbigpe2EoZy5yZXN1bHQpfSxnLm9uZXJyb3I9ZnVuY3Rpb24oKXtjKGcuZXJyb3IpfX1jYXRjaChhKXtjKGEpfX0pfSkuY2F0Y2goYyl9KTtyZXR1cm4gaChjLGEpLGN9ZnVuY3Rpb24gSihhLGIpe3ZhciBjPXRoaXMsZD1uZXcgdmEoZnVuY3Rpb24oYixkKXtpZihhPDApcmV0dXJuIHZvaWQgYihudWxsKTtjLnJlYWR5KCkudGhlbihmdW5jdGlvbigpe0EoYy5fZGJJbmZvLEFhLGZ1bmN0aW9uKGUsZil7aWYoZSlyZXR1cm4gZChlKTt0cnl7dmFyIGc9Zi5vYmplY3RTdG9yZShjLl9kYkluZm8uc3RvcmVOYW1lKSxoPSExLGk9Zy5vcGVuQ3Vyc29yKCk7aS5vbnN1Y2Nlc3M9ZnVuY3Rpb24oKXt2YXIgYz1pLnJlc3VsdDtpZighYylyZXR1cm4gdm9pZCBiKG51bGwpOzA9PT1hP2IoYy5rZXkpOmg/YihjLmtleSk6KGg9ITAsYy5hZHZhbmNlKGEpKX0saS5vbmVycm9yPWZ1bmN0aW9uKCl7ZChpLmVycm9yKX19Y2F0Y2goYSl7ZChhKX19KX0pLmNhdGNoKGQpfSk7cmV0dXJuIGgoZCxiKSxkfWZ1bmN0aW9uIEsoYSl7dmFyIGI9dGhpcyxjPW5ldyB2YShmdW5jdGlvbihhLGMpe2IucmVhZHkoKS50aGVuKGZ1bmN0aW9uKCl7QShiLl9kYkluZm8sQWEsZnVuY3Rpb24oZCxlKXtpZihkKXJldHVybiBjKGQpO3RyeXt2YXIgZj1lLm9iamVjdFN0b3JlKGIuX2RiSW5mby5zdG9yZU5hbWUpLGc9Zi5vcGVuQ3Vyc29yKCksaD1bXTtnLm9uc3VjY2Vzcz1mdW5jdGlvbigpe3ZhciBiPWcucmVzdWx0O2lmKCFiKXJldHVybiB2b2lkIGEoaCk7aC5wdXNoKGIua2V5KSxiLmNvbnRpbnVlKCl9LGcub25lcnJvcj1mdW5jdGlvbigpe2MoZy5lcnJvcil9fWNhdGNoKGEpe2MoYSl9fSl9KS5jYXRjaChjKX0pO3JldHVybiBoKGMsYSksY31mdW5jdGlvbiBMKGEsYil7Yj1rLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgYz10aGlzLmNvbmZpZygpO2E9ImZ1bmN0aW9uIiE9dHlwZW9mIGEmJmF8fHt9LGEubmFtZXx8KGEubmFtZT1hLm5hbWV8fGMubmFtZSxhLnN0b3JlTmFtZT1hLnN0b3JlTmFtZXx8Yy5zdG9yZU5hbWUpO3ZhciBkLGU9dGhpcztpZihhLm5hbWUpe3ZhciBmPWEubmFtZT09PWMubmFtZSYmZS5fZGJJbmZvLmRiLGc9Zj92YS5yZXNvbHZlKGUuX2RiSW5mby5kYik6cyhhKS50aGVuKGZ1bmN0aW9uKGIpe3ZhciBjPXlhW2EubmFtZV0sZD1jLmZvcmFnZXM7Yy5kYj1iO2Zvcih2YXIgZT0wO2U8ZC5sZW5ndGg7ZSsrKWRbZV0uX2RiSW5mby5kYj1iO3JldHVybiBifSk7ZD1hLnN0b3JlTmFtZT9nLnRoZW4oZnVuY3Rpb24oYil7aWYoYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKGEuc3RvcmVOYW1lKSl7dmFyIGM9Yi52ZXJzaW9uKzE7byhhKTt2YXIgZD15YVthLm5hbWVdLGU9ZC5mb3JhZ2VzO2IuY2xvc2UoKTtmb3IodmFyIGY9MDtmPGUubGVuZ3RoO2YrKyl7dmFyIGc9ZVtmXTtnLl9kYkluZm8uZGI9bnVsbCxnLl9kYkluZm8udmVyc2lvbj1jfXJldHVybiBuZXcgdmEoZnVuY3Rpb24oYixkKXt2YXIgZT11YS5vcGVuKGEubmFtZSxjKTtlLm9uZXJyb3I9ZnVuY3Rpb24oYSl7ZS5yZXN1bHQuY2xvc2UoKSxkKGEpfSxlLm9udXBncmFkZW5lZWRlZD1mdW5jdGlvbigpe2UucmVzdWx0LmRlbGV0ZU9iamVjdFN0b3JlKGEuc3RvcmVOYW1lKX0sZS5vbnN1Y2Nlc3M9ZnVuY3Rpb24oKXt2YXIgYT1lLnJlc3VsdDthLmNsb3NlKCksYihhKX19KS50aGVuKGZ1bmN0aW9uKGEpe2QuZGI9YTtmb3IodmFyIGI9MDtiPGUubGVuZ3RoO2IrKyl7dmFyIGM9ZVtiXTtjLl9kYkluZm8uZGI9YSxwKGMuX2RiSW5mbyl9fSkuY2F0Y2goZnVuY3Rpb24oYil7dGhyb3cocShhLGIpfHx2YS5yZXNvbHZlKCkpLmNhdGNoKGZ1bmN0aW9uKCl7fSksYn0pfX0pOmcudGhlbihmdW5jdGlvbihiKXtvKGEpO3ZhciBjPXlhW2EubmFtZV0sZD1jLmZvcmFnZXM7Yi5jbG9zZSgpO2Zvcih2YXIgZT0wO2U8ZC5sZW5ndGg7ZSsrKXtkW2VdLl9kYkluZm8uZGI9bnVsbH1yZXR1cm4gbmV3IHZhKGZ1bmN0aW9uKGIsYyl7dmFyIGQ9dWEuZGVsZXRlRGF0YWJhc2UoYS5uYW1lKTtkLm9uZXJyb3I9ZC5vbmJsb2NrZWQ9ZnVuY3Rpb24oYSl7dmFyIGI9ZC5yZXN1bHQ7YiYmYi5jbG9zZSgpLGMoYSl9LGQub25zdWNjZXNzPWZ1bmN0aW9uKCl7dmFyIGE9ZC5yZXN1bHQ7YSYmYS5jbG9zZSgpLGIoYSl9fSkudGhlbihmdW5jdGlvbihhKXtjLmRiPWE7Zm9yKHZhciBiPTA7YjxkLmxlbmd0aDtiKyspcChkW2JdLl9kYkluZm8pfSkuY2F0Y2goZnVuY3Rpb24oYil7dGhyb3cocShhLGIpfHx2YS5yZXNvbHZlKCkpLmNhdGNoKGZ1bmN0aW9uKCl7fSksYn0pfSl9ZWxzZSBkPXZhLnJlamVjdCgiSW52YWxpZCBhcmd1bWVudHMiKTtyZXR1cm4gaChkLGIpLGR9ZnVuY3Rpb24gTSgpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBvcGVuRGF0YWJhc2V9ZnVuY3Rpb24gTihhKXt2YXIgYixjLGQsZSxmLGc9Ljc1KmEubGVuZ3RoLGg9YS5sZW5ndGgsaT0wOyI9Ij09PWFbYS5sZW5ndGgtMV0mJihnLS0sIj0iPT09YVthLmxlbmd0aC0yXSYmZy0tKTt2YXIgaj1uZXcgQXJyYXlCdWZmZXIoZyksaz1uZXcgVWludDhBcnJheShqKTtmb3IoYj0wO2I8aDtiKz00KWM9RGEuaW5kZXhPZihhW2JdKSxkPURhLmluZGV4T2YoYVtiKzFdKSxlPURhLmluZGV4T2YoYVtiKzJdKSxmPURhLmluZGV4T2YoYVtiKzNdKSxrW2krK109Yzw8MnxkPj40LGtbaSsrXT0oMTUmZCk8PDR8ZT4+MixrW2krK109KDMmZSk8PDZ8NjMmZjtyZXR1cm4gan1mdW5jdGlvbiBPKGEpe3ZhciBiLGM9bmV3IFVpbnQ4QXJyYXkoYSksZD0iIjtmb3IoYj0wO2I8Yy5sZW5ndGg7Yis9MylkKz1EYVtjW2JdPj4yXSxkKz1EYVsoMyZjW2JdKTw8NHxjW2IrMV0+PjRdLGQrPURhWygxNSZjW2IrMV0pPDwyfGNbYisyXT4+Nl0sZCs9RGFbNjMmY1tiKzJdXTtyZXR1cm4gYy5sZW5ndGglMz09Mj9kPWQuc3Vic3RyaW5nKDAsZC5sZW5ndGgtMSkrIj0iOmMubGVuZ3RoJTM9PTEmJihkPWQuc3Vic3RyaW5nKDAsZC5sZW5ndGgtMikrIj09IiksZH1mdW5jdGlvbiBQKGEsYil7dmFyIGM9IiI7aWYoYSYmKGM9VWEuY2FsbChhKSksYSYmKCJbb2JqZWN0IEFycmF5QnVmZmVyXSI9PT1jfHxhLmJ1ZmZlciYmIltvYmplY3QgQXJyYXlCdWZmZXJdIj09PVVhLmNhbGwoYS5idWZmZXIpKSl7dmFyIGQsZT1HYTthIGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/KGQ9YSxlKz1JYSk6KGQ9YS5idWZmZXIsIltvYmplY3QgSW50OEFycmF5XSI9PT1jP2UrPUthOiJbb2JqZWN0IFVpbnQ4QXJyYXldIj09PWM/ZSs9TGE6IltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIj09PWM/ZSs9TWE6IltvYmplY3QgSW50MTZBcnJheV0iPT09Yz9lKz1OYToiW29iamVjdCBVaW50MTZBcnJheV0iPT09Yz9lKz1QYToiW29iamVjdCBJbnQzMkFycmF5XSI9PT1jP2UrPU9hOiJbb2JqZWN0IFVpbnQzMkFycmF5XSI9PT1jP2UrPVFhOiJbb2JqZWN0IEZsb2F0MzJBcnJheV0iPT09Yz9lKz1SYToiW29iamVjdCBGbG9hdDY0QXJyYXldIj09PWM/ZSs9U2E6YihuZXcgRXJyb3IoIkZhaWxlZCB0byBnZXQgdHlwZSBmb3IgQmluYXJ5QXJyYXkiKSkpLGIoZStPKGQpKX1lbHNlIGlmKCJbb2JqZWN0IEJsb2JdIj09PWMpe3ZhciBmPW5ldyBGaWxlUmVhZGVyO2Yub25sb2FkPWZ1bmN0aW9uKCl7dmFyIGM9RWErYS50eXBlKyJ+IitPKHRoaXMucmVzdWx0KTtiKEdhK0phK2MpfSxmLnJlYWRBc0FycmF5QnVmZmVyKGEpfWVsc2UgdHJ5e2IoSlNPTi5zdHJpbmdpZnkoYSkpfWNhdGNoKGMpe2NvbnNvbGUuZXJyb3IoIkNvdWxkbid0IGNvbnZlcnQgdmFsdWUgaW50byBhIEpTT04gc3RyaW5nOiAiLGEpLGIobnVsbCxjKX19ZnVuY3Rpb24gUShhKXtpZihhLnN1YnN0cmluZygwLEhhKSE9PUdhKXJldHVybiBKU09OLnBhcnNlKGEpO3ZhciBiLGM9YS5zdWJzdHJpbmcoVGEpLGQ9YS5zdWJzdHJpbmcoSGEsVGEpO2lmKGQ9PT1KYSYmRmEudGVzdChjKSl7dmFyIGU9Yy5tYXRjaChGYSk7Yj1lWzFdLGM9Yy5zdWJzdHJpbmcoZVswXS5sZW5ndGgpfXZhciBmPU4oYyk7c3dpdGNoKGQpe2Nhc2UgSWE6cmV0dXJuIGY7Y2FzZSBKYTpyZXR1cm4gZyhbZl0se3R5cGU6Yn0pO2Nhc2UgS2E6cmV0dXJuIG5ldyBJbnQ4QXJyYXkoZik7Y2FzZSBMYTpyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZik7Y2FzZSBNYTpyZXR1cm4gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGYpO2Nhc2UgTmE6cmV0dXJuIG5ldyBJbnQxNkFycmF5KGYpO2Nhc2UgUGE6cmV0dXJuIG5ldyBVaW50MTZBcnJheShmKTtjYXNlIE9hOnJldHVybiBuZXcgSW50MzJBcnJheShmKTtjYXNlIFFhOnJldHVybiBuZXcgVWludDMyQXJyYXkoZik7Y2FzZSBSYTpyZXR1cm4gbmV3IEZsb2F0MzJBcnJheShmKTtjYXNlIFNhOnJldHVybiBuZXcgRmxvYXQ2NEFycmF5KGYpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmtvd24gdHlwZTogIitkKX19ZnVuY3Rpb24gUihhLGIsYyxkKXthLmV4ZWN1dGVTcWwoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTICIrYi5zdG9yZU5hbWUrIiAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSwga2V5IHVuaXF1ZSwgdmFsdWUpIixbXSxjLGQpfWZ1bmN0aW9uIFMoYSl7dmFyIGI9dGhpcyxjPXtkYjpudWxsfTtpZihhKWZvcih2YXIgZCBpbiBhKWNbZF09InN0cmluZyIhPXR5cGVvZiBhW2RdP2FbZF0udG9TdHJpbmcoKTphW2RdO3ZhciBlPW5ldyB2YShmdW5jdGlvbihhLGQpe3RyeXtjLmRiPW9wZW5EYXRhYmFzZShjLm5hbWUsU3RyaW5nKGMudmVyc2lvbiksYy5kZXNjcmlwdGlvbixjLnNpemUpfWNhdGNoKGEpe3JldHVybiBkKGEpfWMuZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24oZSl7UihlLGMsZnVuY3Rpb24oKXtiLl9kYkluZm89YyxhKCl9LGZ1bmN0aW9uKGEsYil7ZChiKX0pfSxkKX0pO3JldHVybiBjLnNlcmlhbGl6ZXI9VmEsZX1mdW5jdGlvbiBUKGEsYixjLGQsZSxmKXthLmV4ZWN1dGVTcWwoYyxkLGUsZnVuY3Rpb24oYSxnKXtnLmNvZGU9PT1nLlNZTlRBWF9FUlI/YS5leGVjdXRlU3FsKCJTRUxFQ1QgbmFtZSBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZT0ndGFibGUnIEFORCBuYW1lID0gPyIsW2Iuc3RvcmVOYW1lXSxmdW5jdGlvbihhLGgpe2gucm93cy5sZW5ndGg/ZihhLGcpOlIoYSxiLGZ1bmN0aW9uKCl7YS5leGVjdXRlU3FsKGMsZCxlLGYpfSxmKX0sZik6ZihhLGcpfSxmKX1mdW5jdGlvbiBVKGEsYil7dmFyIGM9dGhpczthPWooYSk7dmFyIGQ9bmV3IHZhKGZ1bmN0aW9uKGIsZCl7Yy5yZWFkeSgpLnRoZW4oZnVuY3Rpb24oKXt2YXIgZT1jLl9kYkluZm87ZS5kYi50cmFuc2FjdGlvbihmdW5jdGlvbihjKXtUKGMsZSwiU0VMRUNUICogRlJPTSAiK2Uuc3RvcmVOYW1lKyIgV0hFUkUga2V5ID0gPyBMSU1JVCAxIixbYV0sZnVuY3Rpb24oYSxjKXt2YXIgZD1jLnJvd3MubGVuZ3RoP2Mucm93cy5pdGVtKDApLnZhbHVlOm51bGw7ZCYmKGQ9ZS5zZXJpYWxpemVyLmRlc2VyaWFsaXplKGQpKSxiKGQpfSxmdW5jdGlvbihhLGIpe2QoYil9KX0pfSkuY2F0Y2goZCl9KTtyZXR1cm4gaChkLGIpLGR9ZnVuY3Rpb24gVihhLGIpe3ZhciBjPXRoaXMsZD1uZXcgdmEoZnVuY3Rpb24oYixkKXtjLnJlYWR5KCkudGhlbihmdW5jdGlvbigpe3ZhciBlPWMuX2RiSW5mbztlLmRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKGMpe1QoYyxlLCJTRUxFQ1QgKiBGUk9NICIrZS5zdG9yZU5hbWUsW10sZnVuY3Rpb24oYyxkKXtmb3IodmFyIGY9ZC5yb3dzLGc9Zi5sZW5ndGgsaD0wO2g8ZztoKyspe3ZhciBpPWYuaXRlbShoKSxqPWkudmFsdWU7aWYoaiYmKGo9ZS5zZXJpYWxpemVyLmRlc2VyaWFsaXplKGopKSx2b2lkIDAhPT0oaj1hKGosaS5rZXksaCsxKSkpcmV0dXJuIHZvaWQgYihqKX1iKCl9LGZ1bmN0aW9uKGEsYil7ZChiKX0pfSl9KS5jYXRjaChkKX0pO3JldHVybiBoKGQsYiksZH1mdW5jdGlvbiBXKGEsYixjLGQpe3ZhciBlPXRoaXM7YT1qKGEpO3ZhciBmPW5ldyB2YShmdW5jdGlvbihmLGcpe2UucmVhZHkoKS50aGVuKGZ1bmN0aW9uKCl7dm9pZCAwPT09YiYmKGI9bnVsbCk7dmFyIGg9YixpPWUuX2RiSW5mbztpLnNlcmlhbGl6ZXIuc2VyaWFsaXplKGIsZnVuY3Rpb24oYixqKXtqP2coaik6aS5kYi50cmFuc2FjdGlvbihmdW5jdGlvbihjKXtUKGMsaSwiSU5TRVJUIE9SIFJFUExBQ0UgSU5UTyAiK2kuc3RvcmVOYW1lKyIgKGtleSwgdmFsdWUpIFZBTFVFUyAoPywgPykiLFthLGJdLGZ1bmN0aW9uKCl7ZihoKX0sZnVuY3Rpb24oYSxiKXtnKGIpfSl9LGZ1bmN0aW9uKGIpe2lmKGIuY29kZT09PWIuUVVPVEFfRVJSKXtpZihkPjApcmV0dXJuIHZvaWQgZihXLmFwcGx5KGUsW2EsaCxjLGQtMV0pKTtnKGIpfX0pfSl9KS5jYXRjaChnKX0pO3JldHVybiBoKGYsYyksZn1mdW5jdGlvbiBYKGEsYixjKXtyZXR1cm4gVy5hcHBseSh0aGlzLFthLGIsYywxXSl9ZnVuY3Rpb24gWShhLGIpe3ZhciBjPXRoaXM7YT1qKGEpO3ZhciBkPW5ldyB2YShmdW5jdGlvbihiLGQpe2MucmVhZHkoKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGU9Yy5fZGJJbmZvO2UuZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24oYyl7VChjLGUsIkRFTEVURSBGUk9NICIrZS5zdG9yZU5hbWUrIiBXSEVSRSBrZXkgPSA/IixbYV0sZnVuY3Rpb24oKXtiKCl9LGZ1bmN0aW9uKGEsYil7ZChiKX0pfSl9KS5jYXRjaChkKX0pO3JldHVybiBoKGQsYiksZH1mdW5jdGlvbiBaKGEpe3ZhciBiPXRoaXMsYz1uZXcgdmEoZnVuY3Rpb24oYSxjKXtiLnJlYWR5KCkudGhlbihmdW5jdGlvbigpe3ZhciBkPWIuX2RiSW5mbztkLmRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKGIpe1QoYixkLCJERUxFVEUgRlJPTSAiK2Quc3RvcmVOYW1lLFtdLGZ1bmN0aW9uKCl7YSgpfSxmdW5jdGlvbihhLGIpe2MoYil9KX0pfSkuY2F0Y2goYyl9KTtyZXR1cm4gaChjLGEpLGN9ZnVuY3Rpb24gJChhKXt2YXIgYj10aGlzLGM9bmV3IHZhKGZ1bmN0aW9uKGEsYyl7Yi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24oKXt2YXIgZD1iLl9kYkluZm87ZC5kYi50cmFuc2FjdGlvbihmdW5jdGlvbihiKXtUKGIsZCwiU0VMRUNUIENPVU5UKGtleSkgYXMgYyBGUk9NICIrZC5zdG9yZU5hbWUsW10sZnVuY3Rpb24oYixjKXt2YXIgZD1jLnJvd3MuaXRlbSgwKS5jO2EoZCl9LGZ1bmN0aW9uKGEsYil7YyhiKX0pfSl9KS5jYXRjaChjKX0pO3JldHVybiBoKGMsYSksY31mdW5jdGlvbiBfKGEsYil7dmFyIGM9dGhpcyxkPW5ldyB2YShmdW5jdGlvbihiLGQpe2MucmVhZHkoKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGU9Yy5fZGJJbmZvO2UuZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24oYyl7VChjLGUsIlNFTEVDVCBrZXkgRlJPTSAiK2Uuc3RvcmVOYW1lKyIgV0hFUkUgaWQgPSA/IExJTUlUIDEiLFthKzFdLGZ1bmN0aW9uKGEsYyl7dmFyIGQ9Yy5yb3dzLmxlbmd0aD9jLnJvd3MuaXRlbSgwKS5rZXk6bnVsbDtiKGQpfSxmdW5jdGlvbihhLGIpe2QoYil9KX0pfSkuY2F0Y2goZCl9KTtyZXR1cm4gaChkLGIpLGR9ZnVuY3Rpb24gYWEoYSl7dmFyIGI9dGhpcyxjPW5ldyB2YShmdW5jdGlvbihhLGMpe2IucmVhZHkoKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGQ9Yi5fZGJJbmZvO2QuZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24oYil7VChiLGQsIlNFTEVDVCBrZXkgRlJPTSAiK2Quc3RvcmVOYW1lLFtdLGZ1bmN0aW9uKGIsYyl7Zm9yKHZhciBkPVtdLGU9MDtlPGMucm93cy5sZW5ndGg7ZSsrKWQucHVzaChjLnJvd3MuaXRlbShlKS5rZXkpO2EoZCl9LGZ1bmN0aW9uKGEsYil7YyhiKX0pfSl9KS5jYXRjaChjKX0pO3JldHVybiBoKGMsYSksY31mdW5jdGlvbiBiYShhKXtyZXR1cm4gbmV3IHZhKGZ1bmN0aW9uKGIsYyl7YS50cmFuc2FjdGlvbihmdW5jdGlvbihkKXtkLmV4ZWN1dGVTcWwoIlNFTEVDVCBuYW1lIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBlPSd0YWJsZScgQU5EIG5hbWUgPD4gJ19fV2ViS2l0RGF0YWJhc2VJbmZvVGFibGVfXyciLFtdLGZ1bmN0aW9uKGMsZCl7Zm9yKHZhciBlPVtdLGY9MDtmPGQucm93cy5sZW5ndGg7ZisrKWUucHVzaChkLnJvd3MuaXRlbShmKS5uYW1lKTtiKHtkYjphLHN0b3JlTmFtZXM6ZX0pfSxmdW5jdGlvbihhLGIpe2MoYil9KX0sZnVuY3Rpb24oYSl7YyhhKX0pfSl9ZnVuY3Rpb24gY2EoYSxiKXtiPWsuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBjPXRoaXMuY29uZmlnKCk7YT0iZnVuY3Rpb24iIT10eXBlb2YgYSYmYXx8e30sYS5uYW1lfHwoYS5uYW1lPWEubmFtZXx8Yy5uYW1lLGEuc3RvcmVOYW1lPWEuc3RvcmVOYW1lfHxjLnN0b3JlTmFtZSk7dmFyIGQsZT10aGlzO3JldHVybiBkPWEubmFtZT9uZXcgdmEoZnVuY3Rpb24oYil7dmFyIGQ7ZD1hLm5hbWU9PT1jLm5hbWU/ZS5fZGJJbmZvLmRiOm9wZW5EYXRhYmFzZShhLm5hbWUsIiIsIiIsMCksYihhLnN0b3JlTmFtZT97ZGI6ZCxzdG9yZU5hbWVzOlthLnN0b3JlTmFtZV19OmJhKGQpKX0pLnRoZW4oZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyB2YShmdW5jdGlvbihiLGMpe2EuZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24oZCl7ZnVuY3Rpb24gZShhKXtyZXR1cm4gbmV3IHZhKGZ1bmN0aW9uKGIsYyl7ZC5leGVjdXRlU3FsKCJEUk9QIFRBQkxFIElGIEVYSVNUUyAiK2EsW10sZnVuY3Rpb24oKXtiKCl9LGZ1bmN0aW9uKGEsYil7YyhiKX0pfSl9Zm9yKHZhciBmPVtdLGc9MCxoPWEuc3RvcmVOYW1lcy5sZW5ndGg7ZzxoO2crKylmLnB1c2goZShhLnN0b3JlTmFtZXNbZ10pKTt2YS5hbGwoZikudGhlbihmdW5jdGlvbigpe2IoKX0pLmNhdGNoKGZ1bmN0aW9uKGEpe2MoYSl9KX0sZnVuY3Rpb24oYSl7YyhhKX0pfSl9KTp2YS5yZWplY3QoIkludmFsaWQgYXJndW1lbnRzIiksaChkLGIpLGR9ZnVuY3Rpb24gZGEoKXt0cnl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBsb2NhbFN0b3JhZ2UmJiJzZXRJdGVtImluIGxvY2FsU3RvcmFnZSYmISFsb2NhbFN0b3JhZ2Uuc2V0SXRlbX1jYXRjaChhKXtyZXR1cm4hMX19ZnVuY3Rpb24gZWEoYSxiKXt2YXIgYz1hLm5hbWUrIi8iO3JldHVybiBhLnN0b3JlTmFtZSE9PWIuc3RvcmVOYW1lJiYoYys9YS5zdG9yZU5hbWUrIi8iKSxjfWZ1bmN0aW9uIGZhKCl7dmFyIGE9Il9sb2NhbGZvcmFnZV9zdXBwb3J0X3Rlc3QiO3RyeXtyZXR1cm4gbG9jYWxTdG9yYWdlLnNldEl0ZW0oYSwhMCksbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oYSksITF9Y2F0Y2goYSl7cmV0dXJuITB9fWZ1bmN0aW9uIGdhKCl7cmV0dXJuIWZhKCl8fGxvY2FsU3RvcmFnZS5sZW5ndGg+MH1mdW5jdGlvbiBoYShhKXt2YXIgYj10aGlzLGM9e307aWYoYSlmb3IodmFyIGQgaW4gYSljW2RdPWFbZF07cmV0dXJuIGMua2V5UHJlZml4PWVhKGEsYi5fZGVmYXVsdENvbmZpZyksZ2EoKT8oYi5fZGJJbmZvPWMsYy5zZXJpYWxpemVyPVZhLHZhLnJlc29sdmUoKSk6dmEucmVqZWN0KCl9ZnVuY3Rpb24gaWEoYSl7dmFyIGI9dGhpcyxjPWIucmVhZHkoKS50aGVuKGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWIuX2RiSW5mby5rZXlQcmVmaXgsYz1sb2NhbFN0b3JhZ2UubGVuZ3RoLTE7Yz49MDtjLS0pe3ZhciBkPWxvY2FsU3RvcmFnZS5rZXkoYyk7MD09PWQuaW5kZXhPZihhKSYmbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oZCl9fSk7cmV0dXJuIGgoYyxhKSxjfWZ1bmN0aW9uIGphKGEsYil7dmFyIGM9dGhpczthPWooYSk7dmFyIGQ9Yy5yZWFkeSgpLnRoZW4oZnVuY3Rpb24oKXt2YXIgYj1jLl9kYkluZm8sZD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbShiLmtleVByZWZpeCthKTtyZXR1cm4gZCYmKGQ9Yi5zZXJpYWxpemVyLmRlc2VyaWFsaXplKGQpKSxkfSk7cmV0dXJuIGgoZCxiKSxkfWZ1bmN0aW9uIGthKGEsYil7dmFyIGM9dGhpcyxkPWMucmVhZHkoKS50aGVuKGZ1bmN0aW9uKCl7Zm9yKHZhciBiPWMuX2RiSW5mbyxkPWIua2V5UHJlZml4LGU9ZC5sZW5ndGgsZj1sb2NhbFN0b3JhZ2UubGVuZ3RoLGc9MSxoPTA7aDxmO2grKyl7dmFyIGk9bG9jYWxTdG9yYWdlLmtleShoKTtpZigwPT09aS5pbmRleE9mKGQpKXt2YXIgaj1sb2NhbFN0b3JhZ2UuZ2V0SXRlbShpKTtpZihqJiYoaj1iLnNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoaikpLHZvaWQgMCE9PShqPWEoaixpLnN1YnN0cmluZyhlKSxnKyspKSlyZXR1cm4gan19fSk7cmV0dXJuIGgoZCxiKSxkfWZ1bmN0aW9uIGxhKGEsYil7dmFyIGM9dGhpcyxkPWMucmVhZHkoKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGIsZD1jLl9kYkluZm87dHJ5e2I9bG9jYWxTdG9yYWdlLmtleShhKX1jYXRjaChhKXtiPW51bGx9cmV0dXJuIGImJihiPWIuc3Vic3RyaW5nKGQua2V5UHJlZml4Lmxlbmd0aCkpLGJ9KTtyZXR1cm4gaChkLGIpLGR9ZnVuY3Rpb24gbWEoYSl7dmFyIGI9dGhpcyxjPWIucmVhZHkoKS50aGVuKGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWIuX2RiSW5mbyxjPWxvY2FsU3RvcmFnZS5sZW5ndGgsZD1bXSxlPTA7ZTxjO2UrKyl7dmFyIGY9bG9jYWxTdG9yYWdlLmtleShlKTswPT09Zi5pbmRleE9mKGEua2V5UHJlZml4KSYmZC5wdXNoKGYuc3Vic3RyaW5nKGEua2V5UHJlZml4Lmxlbmd0aCkpfXJldHVybiBkfSk7cmV0dXJuIGgoYyxhKSxjfWZ1bmN0aW9uIG5hKGEpe3ZhciBiPXRoaXMsYz1iLmtleXMoKS50aGVuKGZ1bmN0aW9uKGEpe3JldHVybiBhLmxlbmd0aH0pO3JldHVybiBoKGMsYSksY31mdW5jdGlvbiBvYShhLGIpe3ZhciBjPXRoaXM7YT1qKGEpO3ZhciBkPWMucmVhZHkoKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGI9Yy5fZGJJbmZvO2xvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGIua2V5UHJlZml4K2EpfSk7cmV0dXJuIGgoZCxiKSxkfWZ1bmN0aW9uIHBhKGEsYixjKXt2YXIgZD10aGlzO2E9aihhKTt2YXIgZT1kLnJlYWR5KCkudGhlbihmdW5jdGlvbigpe3ZvaWQgMD09PWImJihiPW51bGwpO3ZhciBjPWI7cmV0dXJuIG5ldyB2YShmdW5jdGlvbihlLGYpe3ZhciBnPWQuX2RiSW5mbztnLnNlcmlhbGl6ZXIuc2VyaWFsaXplKGIsZnVuY3Rpb24oYixkKXtpZihkKWYoZCk7ZWxzZSB0cnl7bG9jYWxTdG9yYWdlLnNldEl0ZW0oZy5rZXlQcmVmaXgrYSxiKSxlKGMpfWNhdGNoKGEpeyJRdW90YUV4Y2VlZGVkRXJyb3IiIT09YS5uYW1lJiYiTlNfRVJST1JfRE9NX1FVT1RBX1JFQUNIRUQiIT09YS5uYW1lfHxmKGEpLGYoYSl9fSl9KX0pO3JldHVybiBoKGUsYyksZX1mdW5jdGlvbiBxYShhLGIpe2lmKGI9ay5hcHBseSh0aGlzLGFyZ3VtZW50cyksYT0iZnVuY3Rpb24iIT10eXBlb2YgYSYmYXx8e30sIWEubmFtZSl7dmFyIGM9dGhpcy5jb25maWcoKTthLm5hbWU9YS5uYW1lfHxjLm5hbWUsYS5zdG9yZU5hbWU9YS5zdG9yZU5hbWV8fGMuc3RvcmVOYW1lfXZhciBkLGU9dGhpcztyZXR1cm4gZD1hLm5hbWU/bmV3IHZhKGZ1bmN0aW9uKGIpe2IoYS5zdG9yZU5hbWU/ZWEoYSxlLl9kZWZhdWx0Q29uZmlnKTphLm5hbWUrIi8iKX0pLnRoZW4oZnVuY3Rpb24oYSl7Zm9yKHZhciBiPWxvY2FsU3RvcmFnZS5sZW5ndGgtMTtiPj0wO2ItLSl7dmFyIGM9bG9jYWxTdG9yYWdlLmtleShiKTswPT09Yy5pbmRleE9mKGEpJiZsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShjKX19KTp2YS5yZWplY3QoIkludmFsaWQgYXJndW1lbnRzIiksaChkLGIpLGR9ZnVuY3Rpb24gcmEoYSxiKXthW2JdPWZ1bmN0aW9uKCl7dmFyIGM9YXJndW1lbnRzO3JldHVybiBhLnJlYWR5KCkudGhlbihmdW5jdGlvbigpe3JldHVybiBhW2JdLmFwcGx5KGEsYyl9KX19ZnVuY3Rpb24gc2EoKXtmb3IodmFyIGE9MTthPGFyZ3VtZW50cy5sZW5ndGg7YSsrKXt2YXIgYj1hcmd1bWVudHNbYV07aWYoYilmb3IodmFyIGMgaW4gYiliLmhhc093blByb3BlcnR5KGMpJiYoJGEoYltjXSk/YXJndW1lbnRzWzBdW2NdPWJbY10uc2xpY2UoKTphcmd1bWVudHNbMF1bY109YltjXSl9cmV0dXJuIGFyZ3VtZW50c1swXX12YXIgdGE9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYSl7cmV0dXJuIHR5cGVvZiBhfTpmdW5jdGlvbihhKXtyZXR1cm4gYSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGF9LHVhPWUoKTsidW5kZWZpbmVkIj09dHlwZW9mIFByb21pc2UmJmEoMyk7dmFyIHZhPVByb21pc2Usd2E9ImxvY2FsLWZvcmFnZS1kZXRlY3QtYmxvYi1zdXBwb3J0Iix4YT12b2lkIDAseWE9e30semE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxBYT0icmVhZG9ubHkiLEJhPSJyZWFkd3JpdGUiLENhPXtfZHJpdmVyOiJhc3luY1N0b3JhZ2UiLF9pbml0U3RvcmFnZTpDLF9zdXBwb3J0OmYoKSxpdGVyYXRlOkUsZ2V0SXRlbTpELHNldEl0ZW06RixyZW1vdmVJdGVtOkcsY2xlYXI6SCxsZW5ndGg6SSxrZXk6SixrZXlzOkssZHJvcEluc3RhbmNlOkx9LERhPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIixFYT0ifn5sb2NhbF9mb3JhZ2VfdHlwZX4iLEZhPS9efn5sb2NhbF9mb3JhZ2VfdHlwZX4oW15+XSspfi8sR2E9Il9fbGZzY19fOiIsSGE9R2EubGVuZ3RoLElhPSJhcmJmIixKYT0iYmxvYiIsS2E9InNpMDgiLExhPSJ1aTA4IixNYT0idWljOCIsTmE9InNpMTYiLE9hPSJzaTMyIixQYT0idXIxNiIsUWE9InVpMzIiLFJhPSJmbDMyIixTYT0iZmw2NCIsVGE9SGErSWEubGVuZ3RoLFVhPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsVmE9e3NlcmlhbGl6ZTpQLGRlc2VyaWFsaXplOlEsc3RyaW5nVG9CdWZmZXI6TixidWZmZXJUb1N0cmluZzpPfSxXYT17X2RyaXZlcjoid2ViU1FMU3RvcmFnZSIsX2luaXRTdG9yYWdlOlMsX3N1cHBvcnQ6TSgpLGl0ZXJhdGU6VixnZXRJdGVtOlUsc2V0SXRlbTpYLHJlbW92ZUl0ZW06WSxjbGVhcjpaLGxlbmd0aDokLGtleTpfLGtleXM6YWEsZHJvcEluc3RhbmNlOmNhfSxYYT17X2RyaXZlcjoibG9jYWxTdG9yYWdlV3JhcHBlciIsX2luaXRTdG9yYWdlOmhhLF9zdXBwb3J0OmRhKCksaXRlcmF0ZTprYSxnZXRJdGVtOmphLHNldEl0ZW06cGEscmVtb3ZlSXRlbTpvYSxjbGVhcjppYSxsZW5ndGg6bmEsa2V5OmxhLGtleXM6bWEsZHJvcEluc3RhbmNlOnFhfSxZYT1mdW5jdGlvbihhLGIpe3JldHVybiBhPT09Ynx8Im51bWJlciI9PXR5cGVvZiBhJiYibnVtYmVyIj09dHlwZW9mIGImJmlzTmFOKGEpJiZpc05hTihiKX0sWmE9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9YS5sZW5ndGgsZD0wO2Q8Yzspe2lmKFlhKGFbZF0sYikpcmV0dXJuITA7ZCsrfXJldHVybiExfSwkYT1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihhKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpfSxfYT17fSxhYj17fSxiYj17SU5ERVhFRERCOkNhLFdFQlNRTDpXYSxMT0NBTFNUT1JBR0U6WGF9LGNiPVtiYi5JTkRFWEVEREIuX2RyaXZlcixiYi5XRUJTUUwuX2RyaXZlcixiYi5MT0NBTFNUT1JBR0UuX2RyaXZlcl0sZGI9WyJkcm9wSW5zdGFuY2UiXSxlYj1bImNsZWFyIiwiZ2V0SXRlbSIsIml0ZXJhdGUiLCJrZXkiLCJrZXlzIiwibGVuZ3RoIiwicmVtb3ZlSXRlbSIsInNldEl0ZW0iXS5jb25jYXQoZGIpLGZiPXtkZXNjcmlwdGlvbjoiIixkcml2ZXI6Y2Iuc2xpY2UoKSxuYW1lOiJsb2NhbGZvcmFnZSIsc2l6ZTo0OTgwNzM2LHN0b3JlTmFtZToia2V5dmFsdWVwYWlycyIsdmVyc2lvbjoxfSxnYj1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYil7ZCh0aGlzLGEpO2Zvcih2YXIgYyBpbiBiYilpZihiYi5oYXNPd25Qcm9wZXJ0eShjKSl7dmFyIGU9YmJbY10sZj1lLl9kcml2ZXI7dGhpc1tjXT1mLF9hW2ZdfHx0aGlzLmRlZmluZURyaXZlcihlKX10aGlzLl9kZWZhdWx0Q29uZmlnPXNhKHt9LGZiKSx0aGlzLl9jb25maWc9c2Eoe30sdGhpcy5fZGVmYXVsdENvbmZpZyxiKSx0aGlzLl9kcml2ZXJTZXQ9bnVsbCx0aGlzLl9pbml0RHJpdmVyPW51bGwsdGhpcy5fcmVhZHk9ITEsdGhpcy5fZGJJbmZvPW51bGwsdGhpcy5fd3JhcExpYnJhcnlNZXRob2RzV2l0aFJlYWR5KCksdGhpcy5zZXREcml2ZXIodGhpcy5fY29uZmlnLmRyaXZlcikuY2F0Y2goZnVuY3Rpb24oKXt9KX1yZXR1cm4gYS5wcm90b3R5cGUuY29uZmlnPWZ1bmN0aW9uKGEpe2lmKCJvYmplY3QiPT09KHZvaWQgMD09PWE/InVuZGVmaW5lZCI6dGEoYSkpKXtpZih0aGlzLl9yZWFkeSlyZXR1cm4gbmV3IEVycm9yKCJDYW4ndCBjYWxsIGNvbmZpZygpIGFmdGVyIGxvY2FsZm9yYWdlIGhhcyBiZWVuIHVzZWQuIik7Zm9yKHZhciBiIGluIGEpe2lmKCJzdG9yZU5hbWUiPT09YiYmKGFbYl09YVtiXS5yZXBsYWNlKC9cVy9nLCJfIikpLCJ2ZXJzaW9uIj09PWImJiJudW1iZXIiIT10eXBlb2YgYVtiXSlyZXR1cm4gbmV3IEVycm9yKCJEYXRhYmFzZSB2ZXJzaW9uIG11c3QgYmUgYSBudW1iZXIuIik7dGhpcy5fY29uZmlnW2JdPWFbYl19cmV0dXJuISgiZHJpdmVyImluIGEmJmEuZHJpdmVyKXx8dGhpcy5zZXREcml2ZXIodGhpcy5fY29uZmlnLmRyaXZlcil9cmV0dXJuInN0cmluZyI9PXR5cGVvZiBhP3RoaXMuX2NvbmZpZ1thXTp0aGlzLl9jb25maWd9LGEucHJvdG90eXBlLmRlZmluZURyaXZlcj1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9bmV3IHZhKGZ1bmN0aW9uKGIsYyl7dHJ5e3ZhciBkPWEuX2RyaXZlcixlPW5ldyBFcnJvcigiQ3VzdG9tIGRyaXZlciBub3QgY29tcGxpYW50OyBzZWUgaHR0cHM6Ly9tb3ppbGxhLmdpdGh1Yi5pby9sb2NhbEZvcmFnZS8jZGVmaW5lZHJpdmVyIik7aWYoIWEuX2RyaXZlcilyZXR1cm4gdm9pZCBjKGUpO2Zvcih2YXIgZj1lYi5jb25jYXQoIl9pbml0U3RvcmFnZSIpLGc9MCxpPWYubGVuZ3RoO2c8aTtnKyspe3ZhciBqPWZbZ107aWYoKCFaYShkYixqKXx8YVtqXSkmJiJmdW5jdGlvbiIhPXR5cGVvZiBhW2pdKXJldHVybiB2b2lkIGMoZSl9KGZ1bmN0aW9uKCl7Zm9yKHZhciBiPWZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbigpe3ZhciBiPW5ldyBFcnJvcigiTWV0aG9kICIrYSsiIGlzIG5vdCBpbXBsZW1lbnRlZCBieSB0aGUgY3VycmVudCBkcml2ZXIiKSxjPXZhLnJlamVjdChiKTtyZXR1cm4gaChjLGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdKSxjfX0sYz0wLGQ9ZGIubGVuZ3RoO2M8ZDtjKyspe3ZhciBlPWRiW2NdO2FbZV18fChhW2VdPWIoZSkpfX0pKCk7dmFyIGs9ZnVuY3Rpb24oYyl7X2FbZF0mJmNvbnNvbGUuaW5mbygiUmVkZWZpbmluZyBMb2NhbEZvcmFnZSBkcml2ZXI6ICIrZCksX2FbZF09YSxhYltkXT1jLGIoKX07Il9zdXBwb3J0ImluIGE/YS5fc3VwcG9ydCYmImZ1bmN0aW9uIj09dHlwZW9mIGEuX3N1cHBvcnQ/YS5fc3VwcG9ydCgpLnRoZW4oayxjKTprKCEhYS5fc3VwcG9ydCk6ayghMCl9Y2F0Y2goYSl7YyhhKX19KTtyZXR1cm4gaShkLGIsYyksZH0sYS5wcm90b3R5cGUuZHJpdmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RyaXZlcnx8bnVsbH0sYS5wcm90b3R5cGUuZ2V0RHJpdmVyPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1fYVthXT92YS5yZXNvbHZlKF9hW2FdKTp2YS5yZWplY3QobmV3IEVycm9yKCJEcml2ZXIgbm90IGZvdW5kLiIpKTtyZXR1cm4gaShkLGIsYyksZH0sYS5wcm90b3R5cGUuZ2V0U2VyaWFsaXplcj1mdW5jdGlvbihhKXt2YXIgYj12YS5yZXNvbHZlKFZhKTtyZXR1cm4gaShiLGEpLGJ9LGEucHJvdG90eXBlLnJlYWR5PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMsYz1iLl9kcml2ZXJTZXQudGhlbihmdW5jdGlvbigpe3JldHVybiBudWxsPT09Yi5fcmVhZHkmJihiLl9yZWFkeT1iLl9pbml0RHJpdmVyKCkpLGIuX3JlYWR5fSk7cmV0dXJuIGkoYyxhLGEpLGN9LGEucHJvdG90eXBlLnNldERyaXZlcj1mdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZCgpe2cuX2NvbmZpZy5kcml2ZXI9Zy5kcml2ZXIoKX1mdW5jdGlvbiBlKGEpe3JldHVybiBnLl9leHRlbmQoYSksZCgpLGcuX3JlYWR5PWcuX2luaXRTdG9yYWdlKGcuX2NvbmZpZyksZy5fcmVhZHl9ZnVuY3Rpb24gZihhKXtyZXR1cm4gZnVuY3Rpb24oKXtmdW5jdGlvbiBiKCl7Zm9yKDtjPGEubGVuZ3RoOyl7dmFyIGY9YVtjXTtyZXR1cm4gYysrLGcuX2RiSW5mbz1udWxsLGcuX3JlYWR5PW51bGwsZy5nZXREcml2ZXIoZikudGhlbihlKS5jYXRjaChiKX1kKCk7dmFyIGg9bmV3IEVycm9yKCJObyBhdmFpbGFibGUgc3RvcmFnZSBtZXRob2QgZm91bmQuIik7cmV0dXJuIGcuX2RyaXZlclNldD12YS5yZWplY3QoaCksZy5fZHJpdmVyU2V0fXZhciBjPTA7cmV0dXJuIGIoKX19dmFyIGc9dGhpczskYShhKXx8KGE9W2FdKTt2YXIgaD10aGlzLl9nZXRTdXBwb3J0ZWREcml2ZXJzKGEpLGo9bnVsbCE9PXRoaXMuX2RyaXZlclNldD90aGlzLl9kcml2ZXJTZXQuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4gdmEucmVzb2x2ZSgpfSk6dmEucmVzb2x2ZSgpO3JldHVybiB0aGlzLl9kcml2ZXJTZXQ9ai50aGVuKGZ1bmN0aW9uKCl7dmFyIGE9aFswXTtyZXR1cm4gZy5fZGJJbmZvPW51bGwsZy5fcmVhZHk9bnVsbCxnLmdldERyaXZlcihhKS50aGVuKGZ1bmN0aW9uKGEpe2cuX2RyaXZlcj1hLl9kcml2ZXIsZCgpLGcuX3dyYXBMaWJyYXJ5TWV0aG9kc1dpdGhSZWFkeSgpLGcuX2luaXREcml2ZXI9ZihoKX0pfSkuY2F0Y2goZnVuY3Rpb24oKXtkKCk7dmFyIGE9bmV3IEVycm9yKCJObyBhdmFpbGFibGUgc3RvcmFnZSBtZXRob2QgZm91bmQuIik7cmV0dXJuIGcuX2RyaXZlclNldD12YS5yZWplY3QoYSksZy5fZHJpdmVyU2V0fSksaSh0aGlzLl9kcml2ZXJTZXQsYixjKSx0aGlzLl9kcml2ZXJTZXR9LGEucHJvdG90eXBlLnN1cHBvcnRzPWZ1bmN0aW9uKGEpe3JldHVybiEhYWJbYV19LGEucHJvdG90eXBlLl9leHRlbmQ9ZnVuY3Rpb24oYSl7c2EodGhpcyxhKX0sYS5wcm90b3R5cGUuX2dldFN1cHBvcnRlZERyaXZlcnM9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MCxkPWEubGVuZ3RoO2M8ZDtjKyspe3ZhciBlPWFbY107dGhpcy5zdXBwb3J0cyhlKSYmYi5wdXNoKGUpfXJldHVybiBifSxhLnByb3RvdHlwZS5fd3JhcExpYnJhcnlNZXRob2RzV2l0aFJlYWR5PWZ1bmN0aW9uKCl7Zm9yKHZhciBhPTAsYj1lYi5sZW5ndGg7YTxiO2ErKylyYSh0aGlzLGViW2FdKX0sYS5wcm90b3R5cGUuY3JlYXRlSW5zdGFuY2U9ZnVuY3Rpb24oYil7cmV0dXJuIG5ldyBhKGIpfSxhfSgpLGhiPW5ldyBnYjtiLmV4cG9ydHM9aGJ9LHszOjN9XX0se30sWzRdKSg0KX0pOwp9OwoKbXVyb20uaW5zdGFsbFVuaWNvZGVCYXNlNjQgPSBmdW5jdGlvbigpCnsKLyoKCWh0dHBzOi8vZ2l0aHViLmNvbS9zb2xkZXJqcy9UZXh0RW5jb2RlckxpdGUKCUFwYWNoZSAyLjAKKi8KZnVuY3Rpb24gVGV4dEVuY29kZXJMaXRlKCl7fWZ1bmN0aW9uIFRleHREZWNvZGVyTGl0ZSgpe30oZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdXRmOFRvQnl0ZXMoc3RyaW5nLHVuaXRzKXt1bml0cz11bml0c3x8SW5maW5pdHk7dmFyIGNvZGVQb2ludDt2YXIgbGVuZ3RoPXN0cmluZy5sZW5ndGg7dmFyIGxlYWRTdXJyb2dhdGU9bnVsbDt2YXIgYnl0ZXM9W107dmFyIGk9MDtmb3IoO2k8bGVuZ3RoO2krKyl7Y29kZVBvaW50PXN0cmluZy5jaGFyQ29kZUF0KGkpO2lmKGNvZGVQb2ludD41NTI5NSYmY29kZVBvaW50PDU3MzQ0KXtpZihsZWFkU3Vycm9nYXRlKXtpZihjb2RlUG9pbnQ8NTYzMjApe2lmKCh1bml0cy09Myk+LTEpYnl0ZXMucHVzaCgyMzksMTkxLDE4OSk7bGVhZFN1cnJvZ2F0ZT1jb2RlUG9pbnQ7Y29udGludWV9ZWxzZXtjb2RlUG9pbnQ9bGVhZFN1cnJvZ2F0ZS01NTI5Njw8MTB8Y29kZVBvaW50LTU2MzIwfDY1NTM2O2xlYWRTdXJyb2dhdGU9bnVsbH19ZWxzZXtpZihjb2RlUG9pbnQ+NTYzMTkpe2lmKCh1bml0cy09Myk+LTEpYnl0ZXMucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9ZWxzZSBpZihpKzE9PT1sZW5ndGgpe2lmKCh1bml0cy09Myk+LTEpYnl0ZXMucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9ZWxzZXtsZWFkU3Vycm9nYXRlPWNvZGVQb2ludDtjb250aW51ZX19fWVsc2UgaWYobGVhZFN1cnJvZ2F0ZSl7aWYoKHVuaXRzLT0zKT4tMSlieXRlcy5wdXNoKDIzOSwxOTEsMTg5KTtsZWFkU3Vycm9nYXRlPW51bGx9aWYoY29kZVBvaW50PDEyOCl7aWYoKHVuaXRzLT0xKTwwKWJyZWFrO2J5dGVzLnB1c2goY29kZVBvaW50KX1lbHNlIGlmKGNvZGVQb2ludDwyMDQ4KXtpZigodW5pdHMtPTIpPDApYnJlYWs7Ynl0ZXMucHVzaChjb2RlUG9pbnQ+PjZ8MTkyLGNvZGVQb2ludCY2M3wxMjgpfWVsc2UgaWYoY29kZVBvaW50PDY1NTM2KXtpZigodW5pdHMtPTMpPDApYnJlYWs7Ynl0ZXMucHVzaChjb2RlUG9pbnQ+PjEyfDIyNCxjb2RlUG9pbnQ+PjYmNjN8MTI4LGNvZGVQb2ludCY2M3wxMjgpfWVsc2UgaWYoY29kZVBvaW50PDIwOTcxNTIpe2lmKCh1bml0cy09NCk8MClicmVhaztieXRlcy5wdXNoKGNvZGVQb2ludD4+MTh8MjQwLGNvZGVQb2ludD4+MTImNjN8MTI4LGNvZGVQb2ludD4+NiY2M3wxMjgsY29kZVBvaW50JjYzfDEyOCl9ZWxzZXt0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpfX1yZXR1cm4gYnl0ZXN9ZnVuY3Rpb24gdXRmOFNsaWNlKGJ1ZixzdGFydCxlbmQpe3ZhciByZXM9IiI7dmFyIHRtcD0iIjtlbmQ9TWF0aC5taW4oYnVmLmxlbmd0aCxlbmR8fEluZmluaXR5KTtzdGFydD1zdGFydHx8MDtmb3IodmFyIGk9c3RhcnQ7aTxlbmQ7aSsrKXtpZihidWZbaV08PTEyNyl7cmVzKz1kZWNvZGVVdGY4Q2hhcih0bXApK1N0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldKTt0bXA9IiJ9ZWxzZXt0bXArPSIlIitidWZbaV0udG9TdHJpbmcoMTYpfX1yZXR1cm4gcmVzK2RlY29kZVV0ZjhDaGFyKHRtcCl9ZnVuY3Rpb24gZGVjb2RlVXRmOENoYXIoc3RyKXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChzdHIpfWNhdGNoKGVycil7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoNjU1MzMpfX1UZXh0RW5jb2RlckxpdGUucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbihzdHIpe3ZhciByZXN1bHQ7aWYoInVuZGVmaW5lZCI9PT10eXBlb2YgVWludDhBcnJheSl7cmVzdWx0PXV0ZjhUb0J5dGVzKHN0cil9ZWxzZXtyZXN1bHQ9bmV3IFVpbnQ4QXJyYXkodXRmOFRvQnl0ZXMoc3RyKSl9cmV0dXJuIHJlc3VsdH07VGV4dERlY29kZXJMaXRlLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24oYnl0ZXMpe3JldHVybiB1dGY4U2xpY2UoYnl0ZXMsMCxieXRlcy5sZW5ndGgpfX0pKCk7aWYodHlwZW9mIG1vZHVsZT09PSJvYmplY3QiJiZtb2R1bGUpe21vZHVsZS5leHBvcnRzLlRleHREZWNvZGVyTGl0ZT1UZXh0RGVjb2RlckxpdGU7bW9kdWxlLmV4cG9ydHMuVGV4dEVuY29kZXJMaXRlPVRleHRFbmNvZGVyTGl0ZX0KLyoKCWh0dHBzOi8vZ2l0aHViLmNvbS9iZWF0Z2FtbWl0L2Jhc2U2NC1qcwogCU1JVAoqLwooZnVuY3Rpb24ocil7aWYodHlwZW9mIGV4cG9ydHM9PT0ib2JqZWN0IiYmdHlwZW9mIG1vZHVsZSE9PSJ1bmRlZmluZWQiKXttb2R1bGUuZXhwb3J0cz1yKCl9ZWxzZSBpZih0eXBlb2YgZGVmaW5lPT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZCl7ZGVmaW5lKFtdLHIpfWVsc2V7dmFyIGU7aWYodHlwZW9mIHdpbmRvdyE9PSJ1bmRlZmluZWQiKXtlPXdpbmRvd31lbHNlIGlmKHR5cGVvZiBnbG9iYWwhPT0idW5kZWZpbmVkIil7ZT1nbG9iYWx9ZWxzZSBpZih0eXBlb2Ygc2VsZiE9PSJ1bmRlZmluZWQiKXtlPXNlbGZ9ZWxzZXtlPXRoaXN9ZS5iYXNlNjRqcz1yKCl9fSkoZnVuY3Rpb24oKXt2YXIgcixlLG47cmV0dXJuIGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhmLGkpe2lmKCFuW2ZdKXtpZighZVtmXSl7dmFyIHU9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWkmJnUpcmV0dXJuIHUoZiwhMCk7aWYoYSlyZXR1cm4gYShmLCEwKTt2YXIgdj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitmKyInIik7dGhyb3cgdi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIix2fXZhciBkPW5bZl09e2V4cG9ydHM6e319O2VbZl1bMF0uY2FsbChkLmV4cG9ydHMsZnVuY3Rpb24ocil7dmFyIG49ZVtmXVsxXVtyXTtyZXR1cm4gbyhufHxyKX0sZCxkLmV4cG9ydHMscixlLG4sdCl9cmV0dXJuIG5bZl0uZXhwb3J0c31mb3IodmFyIGE9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsZj0wO2Y8dC5sZW5ndGg7ZisrKW8odFtmXSk7cmV0dXJuIG99cmV0dXJuIHJ9KCkoeyIvIjpbZnVuY3Rpb24ocixlLG4peyJ1c2Ugc3RyaWN0IjtuLmJ5dGVMZW5ndGg9ZDtuLnRvQnl0ZUFycmF5PWg7bi5mcm9tQnl0ZUFycmF5PXA7dmFyIHQ9W107dmFyIG89W107dmFyIGE9dHlwZW9mIFVpbnQ4QXJyYXkhPT0idW5kZWZpbmVkIj9VaW50OEFycmF5OkFycmF5O3ZhciBmPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIjtmb3IodmFyIGk9MCx1PWYubGVuZ3RoO2k8dTsrK2kpe3RbaV09ZltpXTtvW2YuY2hhckNvZGVBdChpKV09aX1vWyItIi5jaGFyQ29kZUF0KDApXT02MjtvWyJfIi5jaGFyQ29kZUF0KDApXT02MztmdW5jdGlvbiB2KHIpe3ZhciBlPXIubGVuZ3RoO2lmKGUlND4wKXt0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQiKX12YXIgbj1yLmluZGV4T2YoIj0iKTtpZihuPT09LTEpbj1lO3ZhciB0PW49PT1lPzA6NC1uJTQ7cmV0dXJuW24sdF19ZnVuY3Rpb24gZChyKXt2YXIgZT12KHIpO3ZhciBuPWVbMF07dmFyIHQ9ZVsxXTtyZXR1cm4obit0KSozLzQtdH1mdW5jdGlvbiBjKHIsZSxuKXtyZXR1cm4oZStuKSozLzQtbn1mdW5jdGlvbiBoKHIpe3ZhciBlO3ZhciBuPXYocik7dmFyIHQ9blswXTt2YXIgZj1uWzFdO3ZhciBpPW5ldyBhKGMocix0LGYpKTt2YXIgdT0wO3ZhciBkPWY+MD90LTQ6dDtmb3IodmFyIGg9MDtoPGQ7aCs9NCl7ZT1vW3IuY2hhckNvZGVBdChoKV08PDE4fG9bci5jaGFyQ29kZUF0KGgrMSldPDwxMnxvW3IuY2hhckNvZGVBdChoKzIpXTw8NnxvW3IuY2hhckNvZGVBdChoKzMpXTtpW3UrK109ZT4+MTYmMjU1O2lbdSsrXT1lPj44JjI1NTtpW3UrK109ZSYyNTV9aWYoZj09PTIpe2U9b1tyLmNoYXJDb2RlQXQoaCldPDwyfG9bci5jaGFyQ29kZUF0KGgrMSldPj40O2lbdSsrXT1lJjI1NX1pZihmPT09MSl7ZT1vW3IuY2hhckNvZGVBdChoKV08PDEwfG9bci5jaGFyQ29kZUF0KGgrMSldPDw0fG9bci5jaGFyQ29kZUF0KGgrMildPj4yO2lbdSsrXT1lPj44JjI1NTtpW3UrK109ZSYyNTV9cmV0dXJuIGl9ZnVuY3Rpb24gcyhyKXtyZXR1cm4gdFtyPj4xOCY2M10rdFtyPj4xMiY2M10rdFtyPj42JjYzXSt0W3ImNjNdfWZ1bmN0aW9uIGwocixlLG4pe3ZhciB0O3ZhciBvPVtdO2Zvcih2YXIgYT1lO2E8bjthKz0zKXt0PShyW2FdPDwxNiYxNjcxMTY4MCkrKHJbYSsxXTw8OCY2NTI4MCkrKHJbYSsyXSYyNTUpO28ucHVzaChzKHQpKX1yZXR1cm4gby5qb2luKCIiKX1mdW5jdGlvbiBwKHIpe3ZhciBlO3ZhciBuPXIubGVuZ3RoO3ZhciBvPW4lMzt2YXIgYT1bXTt2YXIgZj0xNjM4Mztmb3IodmFyIGk9MCx1PW4tbztpPHU7aSs9Zil7YS5wdXNoKGwocixpLGkrZj51P3U6aStmKSl9aWYobz09PTEpe2U9cltuLTFdO2EucHVzaCh0W2U+PjJdK3RbZTw8NCY2M10rIj09Iil9ZWxzZSBpZihvPT09Mil7ZT0ocltuLTJdPDw4KStyW24tMV07YS5wdXNoKHRbZT4+MTBdK3RbZT4+NCY2M10rdFtlPDwyJjYzXSsiPSIpfXJldHVybiBhLmpvaW4oIiIpfX0se31dfSx7fSxbXSkoIi8iKX0pOwovKgogICAgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvcnUvZG9jcy9XZWIvQVBJL1dpbmRvd0Jhc2U2NC9CYXNlNjRfZW5jb2RpbmdfYW5kX2RlY29kaW5nCiovCiAgICBtdXJvbS5idG9hID0gZnVuY3Rpb24oc3RyKQogICAgewogICAgICAgIHZhciBieXRlcyA9IG5ldyAoVGV4dEVuY29kZXIgfHwgVGV4dEVuY29kZXJMaXRlKSgidXRmLTgiKS5lbmNvZGUoc3RyKTsKICAgICAgICByZXR1cm4gYmFzZTY0anMuZnJvbUJ5dGVBcnJheShieXRlcyk7CiAgICB9OwogICAgbXVyb20uYXRvYiA9IGZ1bmN0aW9uKHN0cikKICAgIHsKICAgICAgICB2YXIgYnl0ZXMgPSBiYXNlNjRqcy50b0J5dGVBcnJheShzdHIpOwogICAgICAgIHJldHVybiBuZXcgKFRleHREZWNvZGVyIHx8IFRleHREZWNvZGVyTGl0ZSkoInV0Zi04IikuZGVjb2RlKGJ5dGVzKTsKICAgIH07Cn07CgptdXJvbS5zdGFydCA9IGZ1bmN0aW9uKCkKewogICAgY29uc29sZS5sb2coIk92ZXJyaWRlICdtdXJvbS5zdGFydCgpJyBpbiBhbnkgb2YgdGhlIG1vZHVsZXMgdG8gYmUgbm90aWZpZWQgd2hlbiBhbGwgbW9kdWxlcyBhcmUgbG9hZGVkIik7Cn07CgptdXJvbS5sb2FkTW9kdWxlcyA9IGZ1bmN0aW9uKCkKewogICAgLy8gU2tpcCBgMGAgbW9kdWxlIGJlY2F1c2UgaXQncyB1cy4KICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbXVyb20ubW9kdWxlcy5sZW5ndGg7ICsraSkKICAgIHsKICAgICAgICB2YXIgbW9kdWxlID0gbXVyb20ubW9kdWxlc1tpXTsKICAgICAgICB2YXIgbmFtZSA9IG1vZHVsZVswXTsKICAgICAgICB2YXIgY29kZSA9IG11cm9tLmF0b2IobW9kdWxlWzFdKTsKICAgICAgICB2YXIgc3RhdGUgPSBtb2R1bGVbMl07CiAgICAgICAgaWYgKHN0YXRlID09IGZhbHNlKQogICAgICAgIHsKICAgICAgICAgICAgY29uc29sZS5sb2coIldBUk5JTkcgU2tpcCBsb2FkaW5nICciICsgbmFtZSArICInIG1vZHVsZSBiZWNhdXNlIGl0J3MgdHVybmVkIG9mZiIpOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZXZhbChjb2RlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjYXRjaCAoZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY29uc29sZS5sb2coIkVSUk9SIENvdWxkIG5vdCBsb2FkICciICsgbmFtZSArICInIG1vZHVsZTogJyIgKyBlICsgIiciKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIAogICAgbXVyb20uc3RhcnQoKTsKfTsKCm11cm9tLmxvYWRJbmRleGVkREJNb2R1bGVzID0gZnVuY3Rpb24oY29tcGxldGlvbkhhbmRsZXIpCnsKICAgIC8vIFNlZSBpZiBJbmRleGVkREIgaGFzIG1vZHVsZXMuCiAgICAvLyBJbmRleGVkREIgbW9kdWxlcyBvdmVycmlkZSB0aG9zZSBjb21pbmcgZnJvbSBIVE1MLgogICAgbG9jYWxmb3JhZ2UuY29uZmlnKHsgbmFtZTogIm11cm9tIiB9KTsKICAgIGxvY2FsZm9yYWdlLmdldEl0ZW0oIm1vZHVsZXMiLCBmdW5jdGlvbihlcnJvciwgbW9kdWxlcykgewogICAgICAgIGlmIChtb2R1bGVzKQogICAgICAgIHsKICAgICAgICAgICAgbXVyb20ubW9kdWxlcyA9IG1vZHVsZXM7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJNb2R1bGVzIGhhdmUgYmVlbiBsb2FkZWQgZnJvbSBJbmRleGVkREIiKTsKICAgICAgICB9CiAgICAgICAgaWYgKGVycm9yKQogICAgICAgIHsKICAgICAgICAgICAgY29uc29sZS5sb2coIkVSUk9SIEdldHRpbmcgbW9kdWxlcyBmcm9tIEluZGV4ZWREQjogJyIgKyBlcnJvciArICInIik7CiAgICAgICAgfQogICAgICAgIC8vIENvbnRpbnVlLgogICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiAgICB9KTsKfTsKCm11cm9tLmluc3RhbGxMb2NhbEZvcmFnZSgpOwptdXJvbS5pbnN0YWxsVW5pY29kZUJhc2U2NCgpOwovLyBJbmRleGVkREIgbW9kdWxlcyBvdmVycmlkZSBIVE1MIG9uZXMuCm11cm9tLmxvYWRJbmRleGVkREJNb2R1bGVzKG11cm9tLmxvYWRNb2R1bGVzKTsKCg==", +"bXVyb20uaW5zdGFsbExvY2FsRm9yYWdlID0gZnVuY3Rpb24oKQp7Ci8qCiAgICBsb2NhbEZvcmFnZSAtLSBPZmZsaW5lIFN0b3JhZ2UsIEltcHJvdmVkCiAgICBWZXJzaW9uIDEuNy4zCiAgICBodHRwczovL2xvY2FsZm9yYWdlLmdpdGh1Yi5pby9sb2NhbEZvcmFnZQogICAgKGMpIDIwMTMtMjAxNyBNb3ppbGxhLCBBcGFjaGUgTGljZW5zZSAyLjAKKi8KIWZ1bmN0aW9uKGEpe2lmKCJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmInVuZGVmaW5lZCIhPXR5cGVvZiBtb2R1bGUpbW9kdWxlLmV4cG9ydHM9YSgpO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZClkZWZpbmUoW10sYSk7ZWxzZXt2YXIgYjtiPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6dGhpcyxiLmxvY2FsZm9yYWdlPWEoKX19KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGEoYixjLGQpe2Z1bmN0aW9uIGUoZyxoKXtpZighY1tnXSl7aWYoIWJbZ10pe3ZhciBpPSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFoJiZpKXJldHVybiBpKGcsITApO2lmKGYpcmV0dXJuIGYoZywhMCk7dmFyIGo9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrZysiJyIpO3Rocm93IGouY29kZT0iTU9EVUxFX05PVF9GT1VORCIsan12YXIgaz1jW2ddPXtleHBvcnRzOnt9fTtiW2ddWzBdLmNhbGwoay5leHBvcnRzLGZ1bmN0aW9uKGEpe3ZhciBjPWJbZ11bMV1bYV07cmV0dXJuIGUoY3x8YSl9LGssay5leHBvcnRzLGEsYixjLGQpfXJldHVybiBjW2ddLmV4cG9ydHN9Zm9yKHZhciBmPSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGc9MDtnPGQubGVuZ3RoO2crKyllKGRbZ10pO3JldHVybiBlfSh7MTpbZnVuY3Rpb24oYSxiLGMpeyhmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYygpe2s9ITA7Zm9yKHZhciBhLGIsYz1sLmxlbmd0aDtjOyl7Zm9yKGI9bCxsPVtdLGE9LTE7KythPGM7KWJbYV0oKTtjPWwubGVuZ3RofWs9ITF9ZnVuY3Rpb24gZChhKXsxIT09bC5wdXNoKGEpfHxrfHxlKCl9dmFyIGUsZj1hLk11dGF0aW9uT2JzZXJ2ZXJ8fGEuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtpZihmKXt2YXIgZz0wLGg9bmV3IGYoYyksaT1hLmRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKTtoLm9ic2VydmUoaSx7Y2hhcmFjdGVyRGF0YTohMH0pLGU9ZnVuY3Rpb24oKXtpLmRhdGE9Zz0rK2clMn19ZWxzZSBpZihhLnNldEltbWVkaWF0ZXx8dm9pZCAwPT09YS5NZXNzYWdlQ2hhbm5lbCllPSJkb2N1bWVudCJpbiBhJiYib25yZWFkeXN0YXRlY2hhbmdlImluIGEuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik/ZnVuY3Rpb24oKXt2YXIgYj1hLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2Iub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7YygpLGIub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLGI9bnVsbH0sYS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoYil9OmZ1bmN0aW9uKCl7c2V0VGltZW91dChjLDApfTtlbHNle3ZhciBqPW5ldyBhLk1lc3NhZ2VDaGFubmVsO2oucG9ydDEub25tZXNzYWdlPWMsZT1mdW5jdGlvbigpe2oucG9ydDIucG9zdE1lc3NhZ2UoMCl9fXZhciBrLGw9W107Yi5leHBvcnRzPWR9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHt9XSwyOltmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGQoKXt9ZnVuY3Rpb24gZShhKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYSl0aHJvdyBuZXcgVHlwZUVycm9yKCJyZXNvbHZlciBtdXN0IGJlIGEgZnVuY3Rpb24iKTt0aGlzLnN0YXRlPXMsdGhpcy5xdWV1ZT1bXSx0aGlzLm91dGNvbWU9dm9pZCAwLGEhPT1kJiZpKHRoaXMsYSl9ZnVuY3Rpb24gZihhLGIsYyl7dGhpcy5wcm9taXNlPWEsImZ1bmN0aW9uIj09dHlwZW9mIGImJih0aGlzLm9uRnVsZmlsbGVkPWIsdGhpcy5jYWxsRnVsZmlsbGVkPXRoaXMub3RoZXJDYWxsRnVsZmlsbGVkKSwiZnVuY3Rpb24iPT10eXBlb2YgYyYmKHRoaXMub25SZWplY3RlZD1jLHRoaXMuY2FsbFJlamVjdGVkPXRoaXMub3RoZXJDYWxsUmVqZWN0ZWQpfWZ1bmN0aW9uIGcoYSxiLGMpe28oZnVuY3Rpb24oKXt2YXIgZDt0cnl7ZD1iKGMpfWNhdGNoKGIpe3JldHVybiBwLnJlamVjdChhLGIpfWQ9PT1hP3AucmVqZWN0KGEsbmV3IFR5cGVFcnJvcigiQ2Fubm90IHJlc29sdmUgcHJvbWlzZSB3aXRoIGl0c2VsZiIpKTpwLnJlc29sdmUoYSxkKX0pfWZ1bmN0aW9uIGgoYSl7dmFyIGI9YSYmYS50aGVuO2lmKGEmJigib2JqZWN0Ij09dHlwZW9mIGF8fCJmdW5jdGlvbiI9PXR5cGVvZiBhKSYmImZ1bmN0aW9uIj09dHlwZW9mIGIpcmV0dXJuIGZ1bmN0aW9uKCl7Yi5hcHBseShhLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIGkoYSxiKXtmdW5jdGlvbiBjKGIpe2Z8fChmPSEwLHAucmVqZWN0KGEsYikpfWZ1bmN0aW9uIGQoYil7Znx8KGY9ITAscC5yZXNvbHZlKGEsYikpfWZ1bmN0aW9uIGUoKXtiKGQsYyl9dmFyIGY9ITEsZz1qKGUpOyJlcnJvciI9PT1nLnN0YXR1cyYmYyhnLnZhbHVlKX1mdW5jdGlvbiBqKGEsYil7dmFyIGM9e307dHJ5e2MudmFsdWU9YShiKSxjLnN0YXR1cz0ic3VjY2VzcyJ9Y2F0Y2goYSl7Yy5zdGF0dXM9ImVycm9yIixjLnZhbHVlPWF9cmV0dXJuIGN9ZnVuY3Rpb24gayhhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIHRoaXM/YTpwLnJlc29sdmUobmV3IHRoaXMoZCksYSl9ZnVuY3Rpb24gbChhKXt2YXIgYj1uZXcgdGhpcyhkKTtyZXR1cm4gcC5yZWplY3QoYixhKX1mdW5jdGlvbiBtKGEpe2Z1bmN0aW9uIGIoYSxiKXtmdW5jdGlvbiBkKGEpe2dbYl09YSwrK2ghPT1lfHxmfHwoZj0hMCxwLnJlc29sdmUoaixnKSl9Yy5yZXNvbHZlKGEpLnRoZW4oZCxmdW5jdGlvbihhKXtmfHwoZj0hMCxwLnJlamVjdChqLGEpKX0pfXZhciBjPXRoaXM7aWYoIltvYmplY3QgQXJyYXldIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKSlyZXR1cm4gdGhpcy5yZWplY3QobmV3IFR5cGVFcnJvcigibXVzdCBiZSBhbiBhcnJheSIpKTt2YXIgZT1hLmxlbmd0aCxmPSExO2lmKCFlKXJldHVybiB0aGlzLnJlc29sdmUoW10pO2Zvcih2YXIgZz1uZXcgQXJyYXkoZSksaD0wLGk9LTEsaj1uZXcgdGhpcyhkKTsrK2k8ZTspYihhW2ldLGkpO3JldHVybiBqfWZ1bmN0aW9uIG4oYSl7ZnVuY3Rpb24gYihhKXtjLnJlc29sdmUoYSkudGhlbihmdW5jdGlvbihhKXtmfHwoZj0hMCxwLnJlc29sdmUoaCxhKSl9LGZ1bmN0aW9uKGEpe2Z8fChmPSEwLHAucmVqZWN0KGgsYSkpfSl9dmFyIGM9dGhpcztpZigiW29iamVjdCBBcnJheV0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpKXJldHVybiB0aGlzLnJlamVjdChuZXcgVHlwZUVycm9yKCJtdXN0IGJlIGFuIGFycmF5IikpO3ZhciBlPWEubGVuZ3RoLGY9ITE7aWYoIWUpcmV0dXJuIHRoaXMucmVzb2x2ZShbXSk7Zm9yKHZhciBnPS0xLGg9bmV3IHRoaXMoZCk7KytnPGU7KWIoYVtnXSk7cmV0dXJuIGh9dmFyIG89YSgxKSxwPXt9LHE9WyJSRUpFQ1RFRCJdLHI9WyJGVUxGSUxMRUQiXSxzPVsiUEVORElORyJdO2IuZXhwb3J0cz1lLGUucHJvdG90eXBlLmNhdGNoPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnRoZW4obnVsbCxhKX0sZS5wcm90b3R5cGUudGhlbj1mdW5jdGlvbihhLGIpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBhJiZ0aGlzLnN0YXRlPT09cnx8ImZ1bmN0aW9uIiE9dHlwZW9mIGImJnRoaXMuc3RhdGU9PT1xKXJldHVybiB0aGlzO3ZhciBjPW5ldyB0aGlzLmNvbnN0cnVjdG9yKGQpO2lmKHRoaXMuc3RhdGUhPT1zKXtnKGMsdGhpcy5zdGF0ZT09PXI/YTpiLHRoaXMub3V0Y29tZSl9ZWxzZSB0aGlzLnF1ZXVlLnB1c2gobmV3IGYoYyxhLGIpKTtyZXR1cm4gY30sZi5wcm90b3R5cGUuY2FsbEZ1bGZpbGxlZD1mdW5jdGlvbihhKXtwLnJlc29sdmUodGhpcy5wcm9taXNlLGEpfSxmLnByb3RvdHlwZS5vdGhlckNhbGxGdWxmaWxsZWQ9ZnVuY3Rpb24oYSl7Zyh0aGlzLnByb21pc2UsdGhpcy5vbkZ1bGZpbGxlZCxhKX0sZi5wcm90b3R5cGUuY2FsbFJlamVjdGVkPWZ1bmN0aW9uKGEpe3AucmVqZWN0KHRoaXMucHJvbWlzZSxhKX0sZi5wcm90b3R5cGUub3RoZXJDYWxsUmVqZWN0ZWQ9ZnVuY3Rpb24oYSl7Zyh0aGlzLnByb21pc2UsdGhpcy5vblJlamVjdGVkLGEpfSxwLnJlc29sdmU9ZnVuY3Rpb24oYSxiKXt2YXIgYz1qKGgsYik7aWYoImVycm9yIj09PWMuc3RhdHVzKXJldHVybiBwLnJlamVjdChhLGMudmFsdWUpO3ZhciBkPWMudmFsdWU7aWYoZClpKGEsZCk7ZWxzZXthLnN0YXRlPXIsYS5vdXRjb21lPWI7Zm9yKHZhciBlPS0xLGY9YS5xdWV1ZS5sZW5ndGg7KytlPGY7KWEucXVldWVbZV0uY2FsbEZ1bGZpbGxlZChiKX1yZXR1cm4gYX0scC5yZWplY3Q9ZnVuY3Rpb24oYSxiKXthLnN0YXRlPXEsYS5vdXRjb21lPWI7Zm9yKHZhciBjPS0xLGQ9YS5xdWV1ZS5sZW5ndGg7KytjPGQ7KWEucXVldWVbY10uY2FsbFJlamVjdGVkKGIpO3JldHVybiBhfSxlLnJlc29sdmU9ayxlLnJlamVjdD1sLGUuYWxsPW0sZS5yYWNlPW59LHsxOjF9XSwzOltmdW5jdGlvbihhLGIsYyl7KGZ1bmN0aW9uKGIpeyJ1c2Ugc3RyaWN0IjsiZnVuY3Rpb24iIT10eXBlb2YgYi5Qcm9taXNlJiYoYi5Qcm9taXNlPWEoMikpfSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7MjoyfV0sNDpbZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBkKGEsYil7aWYoIShhIGluc3RhbmNlb2YgYikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gZSgpe3RyeXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGluZGV4ZWREQilyZXR1cm4gaW5kZXhlZERCO2lmKCJ1bmRlZmluZWQiIT10eXBlb2Ygd2Via2l0SW5kZXhlZERCKXJldHVybiB3ZWJraXRJbmRleGVkREI7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBtb3pJbmRleGVkREIpcmV0dXJuIG1vekluZGV4ZWREQjtpZigidW5kZWZpbmVkIiE9dHlwZW9mIE9JbmRleGVkREIpcmV0dXJuIE9JbmRleGVkREI7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBtc0luZGV4ZWREQilyZXR1cm4gbXNJbmRleGVkREJ9Y2F0Y2goYSl7cmV0dXJufX1mdW5jdGlvbiBmKCl7dHJ5e2lmKCF1YSlyZXR1cm4hMTt2YXIgYT0idW5kZWZpbmVkIiE9dHlwZW9mIG9wZW5EYXRhYmFzZSYmLyhTYWZhcml8aVBob25lfGlQYWR8aVBvZCkvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiEvQ2hyb21lLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhL0JsYWNrQmVycnkvLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKSxiPSJmdW5jdGlvbiI9PXR5cGVvZiBmZXRjaCYmLTEhPT1mZXRjaC50b1N0cmluZygpLmluZGV4T2YoIltuYXRpdmUgY29kZSIpO3JldHVybighYXx8YikmJiJ1bmRlZmluZWQiIT10eXBlb2YgaW5kZXhlZERCJiYidW5kZWZpbmVkIiE9dHlwZW9mIElEQktleVJhbmdlfWNhdGNoKGEpe3JldHVybiExfX1mdW5jdGlvbiBnKGEsYil7YT1hfHxbXSxiPWJ8fHt9O3RyeXtyZXR1cm4gbmV3IEJsb2IoYSxiKX1jYXRjaChmKXtpZigiVHlwZUVycm9yIiE9PWYubmFtZSl0aHJvdyBmO2Zvcih2YXIgYz0idW5kZWZpbmVkIiE9dHlwZW9mIEJsb2JCdWlsZGVyP0Jsb2JCdWlsZGVyOiJ1bmRlZmluZWQiIT10eXBlb2YgTVNCbG9iQnVpbGRlcj9NU0Jsb2JCdWlsZGVyOiJ1bmRlZmluZWQiIT10eXBlb2YgTW96QmxvYkJ1aWxkZXI/TW96QmxvYkJ1aWxkZXI6V2ViS2l0QmxvYkJ1aWxkZXIsZD1uZXcgYyxlPTA7ZTxhLmxlbmd0aDtlKz0xKWQuYXBwZW5kKGFbZV0pO3JldHVybiBkLmdldEJsb2IoYi50eXBlKX19ZnVuY3Rpb24gaChhLGIpe2ImJmEudGhlbihmdW5jdGlvbihhKXtiKG51bGwsYSl9LGZ1bmN0aW9uKGEpe2IoYSl9KX1mdW5jdGlvbiBpKGEsYixjKXsiZnVuY3Rpb24iPT10eXBlb2YgYiYmYS50aGVuKGIpLCJmdW5jdGlvbiI9PXR5cGVvZiBjJiZhLmNhdGNoKGMpfWZ1bmN0aW9uIGooYSl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBhJiYoY29uc29sZS53YXJuKGErIiB1c2VkIGFzIGEga2V5LCBidXQgaXQgaXMgbm90IGEgc3RyaW5nLiIpLGE9U3RyaW5nKGEpKSxhfWZ1bmN0aW9uIGsoKXtpZihhcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV0pcmV0dXJuIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdfWZ1bmN0aW9uIGwoYSl7Zm9yKHZhciBiPWEubGVuZ3RoLGM9bmV3IEFycmF5QnVmZmVyKGIpLGQ9bmV3IFVpbnQ4QXJyYXkoYyksZT0wO2U8YjtlKyspZFtlXT1hLmNoYXJDb2RlQXQoZSk7cmV0dXJuIGN9ZnVuY3Rpb24gbShhKXtyZXR1cm4gbmV3IHZhKGZ1bmN0aW9uKGIpe3ZhciBjPWEudHJhbnNhY3Rpb24od2EsQmEpLGQ9ZyhbIiJdKTtjLm9iamVjdFN0b3JlKHdhKS5wdXQoZCwia2V5IiksYy5vbmFib3J0PWZ1bmN0aW9uKGEpe2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpLGIoITEpfSxjLm9uY29tcGxldGU9ZnVuY3Rpb24oKXt2YXIgYT1uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9DaHJvbWVcLyhcZCspLyksYz1uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9FZGdlXC8vKTtiKGN8fCFhfHxwYXJzZUludChhWzFdLDEwKT49NDMpfX0pLmNhdGNoKGZ1bmN0aW9uKCl7cmV0dXJuITF9KX1mdW5jdGlvbiBuKGEpe3JldHVybiJib29sZWFuIj09dHlwZW9mIHhhP3ZhLnJlc29sdmUoeGEpOm0oYSkudGhlbihmdW5jdGlvbihhKXtyZXR1cm4geGE9YX0pfWZ1bmN0aW9uIG8oYSl7dmFyIGI9eWFbYS5uYW1lXSxjPXt9O2MucHJvbWlzZT1uZXcgdmEoZnVuY3Rpb24oYSxiKXtjLnJlc29sdmU9YSxjLnJlamVjdD1ifSksYi5kZWZlcnJlZE9wZXJhdGlvbnMucHVzaChjKSxiLmRiUmVhZHk/Yi5kYlJlYWR5PWIuZGJSZWFkeS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGMucHJvbWlzZX0pOmIuZGJSZWFkeT1jLnByb21pc2V9ZnVuY3Rpb24gcChhKXt2YXIgYj15YVthLm5hbWVdLGM9Yi5kZWZlcnJlZE9wZXJhdGlvbnMucG9wKCk7aWYoYylyZXR1cm4gYy5yZXNvbHZlKCksYy5wcm9taXNlfWZ1bmN0aW9uIHEoYSxiKXt2YXIgYz15YVthLm5hbWVdLGQ9Yy5kZWZlcnJlZE9wZXJhdGlvbnMucG9wKCk7aWYoZClyZXR1cm4gZC5yZWplY3QoYiksZC5wcm9taXNlfWZ1bmN0aW9uIHIoYSxiKXtyZXR1cm4gbmV3IHZhKGZ1bmN0aW9uKGMsZCl7aWYoeWFbYS5uYW1lXT15YVthLm5hbWVdfHxCKCksYS5kYil7aWYoIWIpcmV0dXJuIGMoYS5kYik7byhhKSxhLmRiLmNsb3NlKCl9dmFyIGU9W2EubmFtZV07YiYmZS5wdXNoKGEudmVyc2lvbik7dmFyIGY9dWEub3Blbi5hcHBseSh1YSxlKTtiJiYoZi5vbnVwZ3JhZGVuZWVkZWQ9ZnVuY3Rpb24oYil7dmFyIGM9Zi5yZXN1bHQ7dHJ5e2MuY3JlYXRlT2JqZWN0U3RvcmUoYS5zdG9yZU5hbWUpLGIub2xkVmVyc2lvbjw9MSYmYy5jcmVhdGVPYmplY3RTdG9yZSh3YSl9Y2F0Y2goYyl7aWYoIkNvbnN0cmFpbnRFcnJvciIhPT1jLm5hbWUpdGhyb3cgYztjb25zb2xlLndhcm4oJ1RoZSBkYXRhYmFzZSAiJythLm5hbWUrJyIgaGFzIGJlZW4gdXBncmFkZWQgZnJvbSB2ZXJzaW9uICcrYi5vbGRWZXJzaW9uKyIgdG8gdmVyc2lvbiAiK2IubmV3VmVyc2lvbisnLCBidXQgdGhlIHN0b3JhZ2UgIicrYS5zdG9yZU5hbWUrJyIgYWxyZWFkeSBleGlzdHMuJyl9fSksZi5vbmVycm9yPWZ1bmN0aW9uKGEpe2EucHJldmVudERlZmF1bHQoKSxkKGYuZXJyb3IpfSxmLm9uc3VjY2Vzcz1mdW5jdGlvbigpe2MoZi5yZXN1bHQpLHAoYSl9fSl9ZnVuY3Rpb24gcyhhKXtyZXR1cm4gcihhLCExKX1mdW5jdGlvbiB0KGEpe3JldHVybiByKGEsITApfWZ1bmN0aW9uIHUoYSxiKXtpZighYS5kYilyZXR1cm4hMDt2YXIgYz0hYS5kYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKGEuc3RvcmVOYW1lKSxkPWEudmVyc2lvbjxhLmRiLnZlcnNpb24sZT1hLnZlcnNpb24+YS5kYi52ZXJzaW9uO2lmKGQmJihhLnZlcnNpb24hPT1iJiZjb25zb2xlLndhcm4oJ1RoZSBkYXRhYmFzZSAiJythLm5hbWUrIlwiIGNhbid0IGJlIGRvd25ncmFkZWQgZnJvbSB2ZXJzaW9uICIrYS5kYi52ZXJzaW9uKyIgdG8gdmVyc2lvbiAiK2EudmVyc2lvbisiLiIpLGEudmVyc2lvbj1hLmRiLnZlcnNpb24pLGV8fGMpe2lmKGMpe3ZhciBmPWEuZGIudmVyc2lvbisxO2Y+YS52ZXJzaW9uJiYoYS52ZXJzaW9uPWYpfXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIHYoYSl7cmV0dXJuIG5ldyB2YShmdW5jdGlvbihiLGMpe3ZhciBkPW5ldyBGaWxlUmVhZGVyO2Qub25lcnJvcj1jLGQub25sb2FkZW5kPWZ1bmN0aW9uKGMpe3ZhciBkPWJ0b2EoYy50YXJnZXQucmVzdWx0fHwiIik7Yih7X19sb2NhbF9mb3JhZ2VfZW5jb2RlZF9ibG9iOiEwLGRhdGE6ZCx0eXBlOmEudHlwZX0pfSxkLnJlYWRBc0JpbmFyeVN0cmluZyhhKX0pfWZ1bmN0aW9uIHcoYSl7cmV0dXJuIGcoW2woYXRvYihhLmRhdGEpKV0se3R5cGU6YS50eXBlfSl9ZnVuY3Rpb24geChhKXtyZXR1cm4gYSYmYS5fX2xvY2FsX2ZvcmFnZV9lbmNvZGVkX2Jsb2J9ZnVuY3Rpb24geShhKXt2YXIgYj10aGlzLGM9Yi5faW5pdFJlYWR5KCkudGhlbihmdW5jdGlvbigpe3ZhciBhPXlhW2IuX2RiSW5mby5uYW1lXTtpZihhJiZhLmRiUmVhZHkpcmV0dXJuIGEuZGJSZWFkeX0pO3JldHVybiBpKGMsYSxhKSxjfWZ1bmN0aW9uIHooYSl7byhhKTtmb3IodmFyIGI9eWFbYS5uYW1lXSxjPWIuZm9yYWdlcyxkPTA7ZDxjLmxlbmd0aDtkKyspe3ZhciBlPWNbZF07ZS5fZGJJbmZvLmRiJiYoZS5fZGJJbmZvLmRiLmNsb3NlKCksZS5fZGJJbmZvLmRiPW51bGwpfXJldHVybiBhLmRiPW51bGwscyhhKS50aGVuKGZ1bmN0aW9uKGIpe3JldHVybiBhLmRiPWIsdShhKT90KGEpOmJ9KS50aGVuKGZ1bmN0aW9uKGQpe2EuZGI9Yi5kYj1kO2Zvcih2YXIgZT0wO2U8Yy5sZW5ndGg7ZSsrKWNbZV0uX2RiSW5mby5kYj1kfSkuY2F0Y2goZnVuY3Rpb24oYil7dGhyb3cgcShhLGIpLGJ9KX1mdW5jdGlvbiBBKGEsYixjLGQpe3ZvaWQgMD09PWQmJihkPTEpO3RyeXt2YXIgZT1hLmRiLnRyYW5zYWN0aW9uKGEuc3RvcmVOYW1lLGIpO2MobnVsbCxlKX1jYXRjaChlKXtpZihkPjAmJighYS5kYnx8IkludmFsaWRTdGF0ZUVycm9yIj09PWUubmFtZXx8Ik5vdEZvdW5kRXJyb3IiPT09ZS5uYW1lKSlyZXR1cm4gdmEucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXtpZighYS5kYnx8Ik5vdEZvdW5kRXJyb3IiPT09ZS5uYW1lJiYhYS5kYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKGEuc3RvcmVOYW1lKSYmYS52ZXJzaW9uPD1hLmRiLnZlcnNpb24pcmV0dXJuIGEuZGImJihhLnZlcnNpb249YS5kYi52ZXJzaW9uKzEpLHQoYSl9KS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHooYSkudGhlbihmdW5jdGlvbigpe0EoYSxiLGMsZC0xKX0pfSkuY2F0Y2goYyk7YyhlKX19ZnVuY3Rpb24gQigpe3JldHVybntmb3JhZ2VzOltdLGRiOm51bGwsZGJSZWFkeTpudWxsLGRlZmVycmVkT3BlcmF0aW9uczpbXX19ZnVuY3Rpb24gQyhhKXtmdW5jdGlvbiBiKCl7cmV0dXJuIHZhLnJlc29sdmUoKX12YXIgYz10aGlzLGQ9e2RiOm51bGx9O2lmKGEpZm9yKHZhciBlIGluIGEpZFtlXT1hW2VdO3ZhciBmPXlhW2QubmFtZV07Znx8KGY9QigpLHlhW2QubmFtZV09ZiksZi5mb3JhZ2VzLnB1c2goYyksYy5faW5pdFJlYWR5fHwoYy5faW5pdFJlYWR5PWMucmVhZHksYy5yZWFkeT15KTtmb3IodmFyIGc9W10saD0wO2g8Zi5mb3JhZ2VzLmxlbmd0aDtoKyspe3ZhciBpPWYuZm9yYWdlc1toXTtpIT09YyYmZy5wdXNoKGkuX2luaXRSZWFkeSgpLmNhdGNoKGIpKX12YXIgaj1mLmZvcmFnZXMuc2xpY2UoMCk7cmV0dXJuIHZhLmFsbChnKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGQuZGI9Zi5kYixzKGQpfSkudGhlbihmdW5jdGlvbihhKXtyZXR1cm4gZC5kYj1hLHUoZCxjLl9kZWZhdWx0Q29uZmlnLnZlcnNpb24pP3QoZCk6YX0pLnRoZW4oZnVuY3Rpb24oYSl7ZC5kYj1mLmRiPWEsYy5fZGJJbmZvPWQ7Zm9yKHZhciBiPTA7YjxqLmxlbmd0aDtiKyspe3ZhciBlPWpbYl07ZSE9PWMmJihlLl9kYkluZm8uZGI9ZC5kYixlLl9kYkluZm8udmVyc2lvbj1kLnZlcnNpb24pfX0pfWZ1bmN0aW9uIEQoYSxiKXt2YXIgYz10aGlzO2E9aihhKTt2YXIgZD1uZXcgdmEoZnVuY3Rpb24oYixkKXtjLnJlYWR5KCkudGhlbihmdW5jdGlvbigpe0EoYy5fZGJJbmZvLEFhLGZ1bmN0aW9uKGUsZil7aWYoZSlyZXR1cm4gZChlKTt0cnl7dmFyIGc9Zi5vYmplY3RTdG9yZShjLl9kYkluZm8uc3RvcmVOYW1lKSxoPWcuZ2V0KGEpO2gub25zdWNjZXNzPWZ1bmN0aW9uKCl7dmFyIGE9aC5yZXN1bHQ7dm9pZCAwPT09YSYmKGE9bnVsbCkseChhKSYmKGE9dyhhKSksYihhKX0saC5vbmVycm9yPWZ1bmN0aW9uKCl7ZChoLmVycm9yKX19Y2F0Y2goYSl7ZChhKX19KX0pLmNhdGNoKGQpfSk7cmV0dXJuIGgoZCxiKSxkfWZ1bmN0aW9uIEUoYSxiKXt2YXIgYz10aGlzLGQ9bmV3IHZhKGZ1bmN0aW9uKGIsZCl7Yy5yZWFkeSgpLnRoZW4oZnVuY3Rpb24oKXtBKGMuX2RiSW5mbyxBYSxmdW5jdGlvbihlLGYpe2lmKGUpcmV0dXJuIGQoZSk7dHJ5e3ZhciBnPWYub2JqZWN0U3RvcmUoYy5fZGJJbmZvLnN0b3JlTmFtZSksaD1nLm9wZW5DdXJzb3IoKSxpPTE7aC5vbnN1Y2Nlc3M9ZnVuY3Rpb24oKXt2YXIgYz1oLnJlc3VsdDtpZihjKXt2YXIgZD1jLnZhbHVlO3goZCkmJihkPXcoZCkpO3ZhciBlPWEoZCxjLmtleSxpKyspO3ZvaWQgMCE9PWU/YihlKTpjLmNvbnRpbnVlKCl9ZWxzZSBiKCl9LGgub25lcnJvcj1mdW5jdGlvbigpe2QoaC5lcnJvcil9fWNhdGNoKGEpe2QoYSl9fSl9KS5jYXRjaChkKX0pO3JldHVybiBoKGQsYiksZH1mdW5jdGlvbiBGKGEsYixjKXt2YXIgZD10aGlzO2E9aihhKTt2YXIgZT1uZXcgdmEoZnVuY3Rpb24oYyxlKXt2YXIgZjtkLnJlYWR5KCkudGhlbihmdW5jdGlvbigpe3JldHVybiBmPWQuX2RiSW5mbywiW29iamVjdCBCbG9iXSI9PT16YS5jYWxsKGIpP24oZi5kYikudGhlbihmdW5jdGlvbihhKXtyZXR1cm4gYT9iOnYoYil9KTpifSkudGhlbihmdW5jdGlvbihiKXtBKGQuX2RiSW5mbyxCYSxmdW5jdGlvbihmLGcpe2lmKGYpcmV0dXJuIGUoZik7dHJ5e3ZhciBoPWcub2JqZWN0U3RvcmUoZC5fZGJJbmZvLnN0b3JlTmFtZSk7bnVsbD09PWImJihiPXZvaWQgMCk7dmFyIGk9aC5wdXQoYixhKTtnLm9uY29tcGxldGU9ZnVuY3Rpb24oKXt2b2lkIDA9PT1iJiYoYj1udWxsKSxjKGIpfSxnLm9uYWJvcnQ9Zy5vbmVycm9yPWZ1bmN0aW9uKCl7dmFyIGE9aS5lcnJvcj9pLmVycm9yOmkudHJhbnNhY3Rpb24uZXJyb3I7ZShhKX19Y2F0Y2goYSl7ZShhKX19KX0pLmNhdGNoKGUpfSk7cmV0dXJuIGgoZSxjKSxlfWZ1bmN0aW9uIEcoYSxiKXt2YXIgYz10aGlzO2E9aihhKTt2YXIgZD1uZXcgdmEoZnVuY3Rpb24oYixkKXtjLnJlYWR5KCkudGhlbihmdW5jdGlvbigpe0EoYy5fZGJJbmZvLEJhLGZ1bmN0aW9uKGUsZil7aWYoZSlyZXR1cm4gZChlKTt0cnl7dmFyIGc9Zi5vYmplY3RTdG9yZShjLl9kYkluZm8uc3RvcmVOYW1lKSxoPWcuZGVsZXRlKGEpO2Yub25jb21wbGV0ZT1mdW5jdGlvbigpe2IoKX0sZi5vbmVycm9yPWZ1bmN0aW9uKCl7ZChoLmVycm9yKX0sZi5vbmFib3J0PWZ1bmN0aW9uKCl7dmFyIGE9aC5lcnJvcj9oLmVycm9yOmgudHJhbnNhY3Rpb24uZXJyb3I7ZChhKX19Y2F0Y2goYSl7ZChhKX19KX0pLmNhdGNoKGQpfSk7cmV0dXJuIGgoZCxiKSxkfWZ1bmN0aW9uIEgoYSl7dmFyIGI9dGhpcyxjPW5ldyB2YShmdW5jdGlvbihhLGMpe2IucmVhZHkoKS50aGVuKGZ1bmN0aW9uKCl7QShiLl9kYkluZm8sQmEsZnVuY3Rpb24oZCxlKXtpZihkKXJldHVybiBjKGQpO3RyeXt2YXIgZj1lLm9iamVjdFN0b3JlKGIuX2RiSW5mby5zdG9yZU5hbWUpLGc9Zi5jbGVhcigpO2Uub25jb21wbGV0ZT1mdW5jdGlvbigpe2EoKX0sZS5vbmFib3J0PWUub25lcnJvcj1mdW5jdGlvbigpe3ZhciBhPWcuZXJyb3I/Zy5lcnJvcjpnLnRyYW5zYWN0aW9uLmVycm9yO2MoYSl9fWNhdGNoKGEpe2MoYSl9fSl9KS5jYXRjaChjKX0pO3JldHVybiBoKGMsYSksY31mdW5jdGlvbiBJKGEpe3ZhciBiPXRoaXMsYz1uZXcgdmEoZnVuY3Rpb24oYSxjKXtiLnJlYWR5KCkudGhlbihmdW5jdGlvbigpe0EoYi5fZGJJbmZvLEFhLGZ1bmN0aW9uKGQsZSl7aWYoZClyZXR1cm4gYyhkKTt0cnl7dmFyIGY9ZS5vYmplY3RTdG9yZShiLl9kYkluZm8uc3RvcmVOYW1lKSxnPWYuY291bnQoKTtnLm9uc3VjY2Vzcz1mdW5jdGlvbigpe2EoZy5yZXN1bHQpfSxnLm9uZXJyb3I9ZnVuY3Rpb24oKXtjKGcuZXJyb3IpfX1jYXRjaChhKXtjKGEpfX0pfSkuY2F0Y2goYyl9KTtyZXR1cm4gaChjLGEpLGN9ZnVuY3Rpb24gSihhLGIpe3ZhciBjPXRoaXMsZD1uZXcgdmEoZnVuY3Rpb24oYixkKXtpZihhPDApcmV0dXJuIHZvaWQgYihudWxsKTtjLnJlYWR5KCkudGhlbihmdW5jdGlvbigpe0EoYy5fZGJJbmZvLEFhLGZ1bmN0aW9uKGUsZil7aWYoZSlyZXR1cm4gZChlKTt0cnl7dmFyIGc9Zi5vYmplY3RTdG9yZShjLl9kYkluZm8uc3RvcmVOYW1lKSxoPSExLGk9Zy5vcGVuQ3Vyc29yKCk7aS5vbnN1Y2Nlc3M9ZnVuY3Rpb24oKXt2YXIgYz1pLnJlc3VsdDtpZighYylyZXR1cm4gdm9pZCBiKG51bGwpOzA9PT1hP2IoYy5rZXkpOmg/YihjLmtleSk6KGg9ITAsYy5hZHZhbmNlKGEpKX0saS5vbmVycm9yPWZ1bmN0aW9uKCl7ZChpLmVycm9yKX19Y2F0Y2goYSl7ZChhKX19KX0pLmNhdGNoKGQpfSk7cmV0dXJuIGgoZCxiKSxkfWZ1bmN0aW9uIEsoYSl7dmFyIGI9dGhpcyxjPW5ldyB2YShmdW5jdGlvbihhLGMpe2IucmVhZHkoKS50aGVuKGZ1bmN0aW9uKCl7QShiLl9kYkluZm8sQWEsZnVuY3Rpb24oZCxlKXtpZihkKXJldHVybiBjKGQpO3RyeXt2YXIgZj1lLm9iamVjdFN0b3JlKGIuX2RiSW5mby5zdG9yZU5hbWUpLGc9Zi5vcGVuQ3Vyc29yKCksaD1bXTtnLm9uc3VjY2Vzcz1mdW5jdGlvbigpe3ZhciBiPWcucmVzdWx0O2lmKCFiKXJldHVybiB2b2lkIGEoaCk7aC5wdXNoKGIua2V5KSxiLmNvbnRpbnVlKCl9LGcub25lcnJvcj1mdW5jdGlvbigpe2MoZy5lcnJvcil9fWNhdGNoKGEpe2MoYSl9fSl9KS5jYXRjaChjKX0pO3JldHVybiBoKGMsYSksY31mdW5jdGlvbiBMKGEsYil7Yj1rLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgYz10aGlzLmNvbmZpZygpO2E9ImZ1bmN0aW9uIiE9dHlwZW9mIGEmJmF8fHt9LGEubmFtZXx8KGEubmFtZT1hLm5hbWV8fGMubmFtZSxhLnN0b3JlTmFtZT1hLnN0b3JlTmFtZXx8Yy5zdG9yZU5hbWUpO3ZhciBkLGU9dGhpcztpZihhLm5hbWUpe3ZhciBmPWEubmFtZT09PWMubmFtZSYmZS5fZGJJbmZvLmRiLGc9Zj92YS5yZXNvbHZlKGUuX2RiSW5mby5kYik6cyhhKS50aGVuKGZ1bmN0aW9uKGIpe3ZhciBjPXlhW2EubmFtZV0sZD1jLmZvcmFnZXM7Yy5kYj1iO2Zvcih2YXIgZT0wO2U8ZC5sZW5ndGg7ZSsrKWRbZV0uX2RiSW5mby5kYj1iO3JldHVybiBifSk7ZD1hLnN0b3JlTmFtZT9nLnRoZW4oZnVuY3Rpb24oYil7aWYoYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKGEuc3RvcmVOYW1lKSl7dmFyIGM9Yi52ZXJzaW9uKzE7byhhKTt2YXIgZD15YVthLm5hbWVdLGU9ZC5mb3JhZ2VzO2IuY2xvc2UoKTtmb3IodmFyIGY9MDtmPGUubGVuZ3RoO2YrKyl7dmFyIGc9ZVtmXTtnLl9kYkluZm8uZGI9bnVsbCxnLl9kYkluZm8udmVyc2lvbj1jfXJldHVybiBuZXcgdmEoZnVuY3Rpb24oYixkKXt2YXIgZT11YS5vcGVuKGEubmFtZSxjKTtlLm9uZXJyb3I9ZnVuY3Rpb24oYSl7ZS5yZXN1bHQuY2xvc2UoKSxkKGEpfSxlLm9udXBncmFkZW5lZWRlZD1mdW5jdGlvbigpe2UucmVzdWx0LmRlbGV0ZU9iamVjdFN0b3JlKGEuc3RvcmVOYW1lKX0sZS5vbnN1Y2Nlc3M9ZnVuY3Rpb24oKXt2YXIgYT1lLnJlc3VsdDthLmNsb3NlKCksYihhKX19KS50aGVuKGZ1bmN0aW9uKGEpe2QuZGI9YTtmb3IodmFyIGI9MDtiPGUubGVuZ3RoO2IrKyl7dmFyIGM9ZVtiXTtjLl9kYkluZm8uZGI9YSxwKGMuX2RiSW5mbyl9fSkuY2F0Y2goZnVuY3Rpb24oYil7dGhyb3cocShhLGIpfHx2YS5yZXNvbHZlKCkpLmNhdGNoKGZ1bmN0aW9uKCl7fSksYn0pfX0pOmcudGhlbihmdW5jdGlvbihiKXtvKGEpO3ZhciBjPXlhW2EubmFtZV0sZD1jLmZvcmFnZXM7Yi5jbG9zZSgpO2Zvcih2YXIgZT0wO2U8ZC5sZW5ndGg7ZSsrKXtkW2VdLl9kYkluZm8uZGI9bnVsbH1yZXR1cm4gbmV3IHZhKGZ1bmN0aW9uKGIsYyl7dmFyIGQ9dWEuZGVsZXRlRGF0YWJhc2UoYS5uYW1lKTtkLm9uZXJyb3I9ZC5vbmJsb2NrZWQ9ZnVuY3Rpb24oYSl7dmFyIGI9ZC5yZXN1bHQ7YiYmYi5jbG9zZSgpLGMoYSl9LGQub25zdWNjZXNzPWZ1bmN0aW9uKCl7dmFyIGE9ZC5yZXN1bHQ7YSYmYS5jbG9zZSgpLGIoYSl9fSkudGhlbihmdW5jdGlvbihhKXtjLmRiPWE7Zm9yKHZhciBiPTA7YjxkLmxlbmd0aDtiKyspcChkW2JdLl9kYkluZm8pfSkuY2F0Y2goZnVuY3Rpb24oYil7dGhyb3cocShhLGIpfHx2YS5yZXNvbHZlKCkpLmNhdGNoKGZ1bmN0aW9uKCl7fSksYn0pfSl9ZWxzZSBkPXZhLnJlamVjdCgiSW52YWxpZCBhcmd1bWVudHMiKTtyZXR1cm4gaChkLGIpLGR9ZnVuY3Rpb24gTSgpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBvcGVuRGF0YWJhc2V9ZnVuY3Rpb24gTihhKXt2YXIgYixjLGQsZSxmLGc9Ljc1KmEubGVuZ3RoLGg9YS5sZW5ndGgsaT0wOyI9Ij09PWFbYS5sZW5ndGgtMV0mJihnLS0sIj0iPT09YVthLmxlbmd0aC0yXSYmZy0tKTt2YXIgaj1uZXcgQXJyYXlCdWZmZXIoZyksaz1uZXcgVWludDhBcnJheShqKTtmb3IoYj0wO2I8aDtiKz00KWM9RGEuaW5kZXhPZihhW2JdKSxkPURhLmluZGV4T2YoYVtiKzFdKSxlPURhLmluZGV4T2YoYVtiKzJdKSxmPURhLmluZGV4T2YoYVtiKzNdKSxrW2krK109Yzw8MnxkPj40LGtbaSsrXT0oMTUmZCk8PDR8ZT4+MixrW2krK109KDMmZSk8PDZ8NjMmZjtyZXR1cm4gan1mdW5jdGlvbiBPKGEpe3ZhciBiLGM9bmV3IFVpbnQ4QXJyYXkoYSksZD0iIjtmb3IoYj0wO2I8Yy5sZW5ndGg7Yis9MylkKz1EYVtjW2JdPj4yXSxkKz1EYVsoMyZjW2JdKTw8NHxjW2IrMV0+PjRdLGQrPURhWygxNSZjW2IrMV0pPDwyfGNbYisyXT4+Nl0sZCs9RGFbNjMmY1tiKzJdXTtyZXR1cm4gYy5sZW5ndGglMz09Mj9kPWQuc3Vic3RyaW5nKDAsZC5sZW5ndGgtMSkrIj0iOmMubGVuZ3RoJTM9PTEmJihkPWQuc3Vic3RyaW5nKDAsZC5sZW5ndGgtMikrIj09IiksZH1mdW5jdGlvbiBQKGEsYil7dmFyIGM9IiI7aWYoYSYmKGM9VWEuY2FsbChhKSksYSYmKCJbb2JqZWN0IEFycmF5QnVmZmVyXSI9PT1jfHxhLmJ1ZmZlciYmIltvYmplY3QgQXJyYXlCdWZmZXJdIj09PVVhLmNhbGwoYS5idWZmZXIpKSl7dmFyIGQsZT1HYTthIGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/KGQ9YSxlKz1JYSk6KGQ9YS5idWZmZXIsIltvYmplY3QgSW50OEFycmF5XSI9PT1jP2UrPUthOiJbb2JqZWN0IFVpbnQ4QXJyYXldIj09PWM/ZSs9TGE6IltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIj09PWM/ZSs9TWE6IltvYmplY3QgSW50MTZBcnJheV0iPT09Yz9lKz1OYToiW29iamVjdCBVaW50MTZBcnJheV0iPT09Yz9lKz1QYToiW29iamVjdCBJbnQzMkFycmF5XSI9PT1jP2UrPU9hOiJbb2JqZWN0IFVpbnQzMkFycmF5XSI9PT1jP2UrPVFhOiJbb2JqZWN0IEZsb2F0MzJBcnJheV0iPT09Yz9lKz1SYToiW29iamVjdCBGbG9hdDY0QXJyYXldIj09PWM/ZSs9U2E6YihuZXcgRXJyb3IoIkZhaWxlZCB0byBnZXQgdHlwZSBmb3IgQmluYXJ5QXJyYXkiKSkpLGIoZStPKGQpKX1lbHNlIGlmKCJbb2JqZWN0IEJsb2JdIj09PWMpe3ZhciBmPW5ldyBGaWxlUmVhZGVyO2Yub25sb2FkPWZ1bmN0aW9uKCl7dmFyIGM9RWErYS50eXBlKyJ+IitPKHRoaXMucmVzdWx0KTtiKEdhK0phK2MpfSxmLnJlYWRBc0FycmF5QnVmZmVyKGEpfWVsc2UgdHJ5e2IoSlNPTi5zdHJpbmdpZnkoYSkpfWNhdGNoKGMpe2NvbnNvbGUuZXJyb3IoIkNvdWxkbid0IGNvbnZlcnQgdmFsdWUgaW50byBhIEpTT04gc3RyaW5nOiAiLGEpLGIobnVsbCxjKX19ZnVuY3Rpb24gUShhKXtpZihhLnN1YnN0cmluZygwLEhhKSE9PUdhKXJldHVybiBKU09OLnBhcnNlKGEpO3ZhciBiLGM9YS5zdWJzdHJpbmcoVGEpLGQ9YS5zdWJzdHJpbmcoSGEsVGEpO2lmKGQ9PT1KYSYmRmEudGVzdChjKSl7dmFyIGU9Yy5tYXRjaChGYSk7Yj1lWzFdLGM9Yy5zdWJzdHJpbmcoZVswXS5sZW5ndGgpfXZhciBmPU4oYyk7c3dpdGNoKGQpe2Nhc2UgSWE6cmV0dXJuIGY7Y2FzZSBKYTpyZXR1cm4gZyhbZl0se3R5cGU6Yn0pO2Nhc2UgS2E6cmV0dXJuIG5ldyBJbnQ4QXJyYXkoZik7Y2FzZSBMYTpyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZik7Y2FzZSBNYTpyZXR1cm4gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGYpO2Nhc2UgTmE6cmV0dXJuIG5ldyBJbnQxNkFycmF5KGYpO2Nhc2UgUGE6cmV0dXJuIG5ldyBVaW50MTZBcnJheShmKTtjYXNlIE9hOnJldHVybiBuZXcgSW50MzJBcnJheShmKTtjYXNlIFFhOnJldHVybiBuZXcgVWludDMyQXJyYXkoZik7Y2FzZSBSYTpyZXR1cm4gbmV3IEZsb2F0MzJBcnJheShmKTtjYXNlIFNhOnJldHVybiBuZXcgRmxvYXQ2NEFycmF5KGYpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmtvd24gdHlwZTogIitkKX19ZnVuY3Rpb24gUihhLGIsYyxkKXthLmV4ZWN1dGVTcWwoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTICIrYi5zdG9yZU5hbWUrIiAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSwga2V5IHVuaXF1ZSwgdmFsdWUpIixbXSxjLGQpfWZ1bmN0aW9uIFMoYSl7dmFyIGI9dGhpcyxjPXtkYjpudWxsfTtpZihhKWZvcih2YXIgZCBpbiBhKWNbZF09InN0cmluZyIhPXR5cGVvZiBhW2RdP2FbZF0udG9TdHJpbmcoKTphW2RdO3ZhciBlPW5ldyB2YShmdW5jdGlvbihhLGQpe3RyeXtjLmRiPW9wZW5EYXRhYmFzZShjLm5hbWUsU3RyaW5nKGMudmVyc2lvbiksYy5kZXNjcmlwdGlvbixjLnNpemUpfWNhdGNoKGEpe3JldHVybiBkKGEpfWMuZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24oZSl7UihlLGMsZnVuY3Rpb24oKXtiLl9kYkluZm89YyxhKCl9LGZ1bmN0aW9uKGEsYil7ZChiKX0pfSxkKX0pO3JldHVybiBjLnNlcmlhbGl6ZXI9VmEsZX1mdW5jdGlvbiBUKGEsYixjLGQsZSxmKXthLmV4ZWN1dGVTcWwoYyxkLGUsZnVuY3Rpb24oYSxnKXtnLmNvZGU9PT1nLlNZTlRBWF9FUlI/YS5leGVjdXRlU3FsKCJTRUxFQ1QgbmFtZSBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZT0ndGFibGUnIEFORCBuYW1lID0gPyIsW2Iuc3RvcmVOYW1lXSxmdW5jdGlvbihhLGgpe2gucm93cy5sZW5ndGg/ZihhLGcpOlIoYSxiLGZ1bmN0aW9uKCl7YS5leGVjdXRlU3FsKGMsZCxlLGYpfSxmKX0sZik6ZihhLGcpfSxmKX1mdW5jdGlvbiBVKGEsYil7dmFyIGM9dGhpczthPWooYSk7dmFyIGQ9bmV3IHZhKGZ1bmN0aW9uKGIsZCl7Yy5yZWFkeSgpLnRoZW4oZnVuY3Rpb24oKXt2YXIgZT1jLl9kYkluZm87ZS5kYi50cmFuc2FjdGlvbihmdW5jdGlvbihjKXtUKGMsZSwiU0VMRUNUICogRlJPTSAiK2Uuc3RvcmVOYW1lKyIgV0hFUkUga2V5ID0gPyBMSU1JVCAxIixbYV0sZnVuY3Rpb24oYSxjKXt2YXIgZD1jLnJvd3MubGVuZ3RoP2Mucm93cy5pdGVtKDApLnZhbHVlOm51bGw7ZCYmKGQ9ZS5zZXJpYWxpemVyLmRlc2VyaWFsaXplKGQpKSxiKGQpfSxmdW5jdGlvbihhLGIpe2QoYil9KX0pfSkuY2F0Y2goZCl9KTtyZXR1cm4gaChkLGIpLGR9ZnVuY3Rpb24gVihhLGIpe3ZhciBjPXRoaXMsZD1uZXcgdmEoZnVuY3Rpb24oYixkKXtjLnJlYWR5KCkudGhlbihmdW5jdGlvbigpe3ZhciBlPWMuX2RiSW5mbztlLmRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKGMpe1QoYyxlLCJTRUxFQ1QgKiBGUk9NICIrZS5zdG9yZU5hbWUsW10sZnVuY3Rpb24oYyxkKXtmb3IodmFyIGY9ZC5yb3dzLGc9Zi5sZW5ndGgsaD0wO2g8ZztoKyspe3ZhciBpPWYuaXRlbShoKSxqPWkudmFsdWU7aWYoaiYmKGo9ZS5zZXJpYWxpemVyLmRlc2VyaWFsaXplKGopKSx2b2lkIDAhPT0oaj1hKGosaS5rZXksaCsxKSkpcmV0dXJuIHZvaWQgYihqKX1iKCl9LGZ1bmN0aW9uKGEsYil7ZChiKX0pfSl9KS5jYXRjaChkKX0pO3JldHVybiBoKGQsYiksZH1mdW5jdGlvbiBXKGEsYixjLGQpe3ZhciBlPXRoaXM7YT1qKGEpO3ZhciBmPW5ldyB2YShmdW5jdGlvbihmLGcpe2UucmVhZHkoKS50aGVuKGZ1bmN0aW9uKCl7dm9pZCAwPT09YiYmKGI9bnVsbCk7dmFyIGg9YixpPWUuX2RiSW5mbztpLnNlcmlhbGl6ZXIuc2VyaWFsaXplKGIsZnVuY3Rpb24oYixqKXtqP2coaik6aS5kYi50cmFuc2FjdGlvbihmdW5jdGlvbihjKXtUKGMsaSwiSU5TRVJUIE9SIFJFUExBQ0UgSU5UTyAiK2kuc3RvcmVOYW1lKyIgKGtleSwgdmFsdWUpIFZBTFVFUyAoPywgPykiLFthLGJdLGZ1bmN0aW9uKCl7ZihoKX0sZnVuY3Rpb24oYSxiKXtnKGIpfSl9LGZ1bmN0aW9uKGIpe2lmKGIuY29kZT09PWIuUVVPVEFfRVJSKXtpZihkPjApcmV0dXJuIHZvaWQgZihXLmFwcGx5KGUsW2EsaCxjLGQtMV0pKTtnKGIpfX0pfSl9KS5jYXRjaChnKX0pO3JldHVybiBoKGYsYyksZn1mdW5jdGlvbiBYKGEsYixjKXtyZXR1cm4gVy5hcHBseSh0aGlzLFthLGIsYywxXSl9ZnVuY3Rpb24gWShhLGIpe3ZhciBjPXRoaXM7YT1qKGEpO3ZhciBkPW5ldyB2YShmdW5jdGlvbihiLGQpe2MucmVhZHkoKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGU9Yy5fZGJJbmZvO2UuZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24oYyl7VChjLGUsIkRFTEVURSBGUk9NICIrZS5zdG9yZU5hbWUrIiBXSEVSRSBrZXkgPSA/IixbYV0sZnVuY3Rpb24oKXtiKCl9LGZ1bmN0aW9uKGEsYil7ZChiKX0pfSl9KS5jYXRjaChkKX0pO3JldHVybiBoKGQsYiksZH1mdW5jdGlvbiBaKGEpe3ZhciBiPXRoaXMsYz1uZXcgdmEoZnVuY3Rpb24oYSxjKXtiLnJlYWR5KCkudGhlbihmdW5jdGlvbigpe3ZhciBkPWIuX2RiSW5mbztkLmRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKGIpe1QoYixkLCJERUxFVEUgRlJPTSAiK2Quc3RvcmVOYW1lLFtdLGZ1bmN0aW9uKCl7YSgpfSxmdW5jdGlvbihhLGIpe2MoYil9KX0pfSkuY2F0Y2goYyl9KTtyZXR1cm4gaChjLGEpLGN9ZnVuY3Rpb24gJChhKXt2YXIgYj10aGlzLGM9bmV3IHZhKGZ1bmN0aW9uKGEsYyl7Yi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24oKXt2YXIgZD1iLl9kYkluZm87ZC5kYi50cmFuc2FjdGlvbihmdW5jdGlvbihiKXtUKGIsZCwiU0VMRUNUIENPVU5UKGtleSkgYXMgYyBGUk9NICIrZC5zdG9yZU5hbWUsW10sZnVuY3Rpb24oYixjKXt2YXIgZD1jLnJvd3MuaXRlbSgwKS5jO2EoZCl9LGZ1bmN0aW9uKGEsYil7YyhiKX0pfSl9KS5jYXRjaChjKX0pO3JldHVybiBoKGMsYSksY31mdW5jdGlvbiBfKGEsYil7dmFyIGM9dGhpcyxkPW5ldyB2YShmdW5jdGlvbihiLGQpe2MucmVhZHkoKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGU9Yy5fZGJJbmZvO2UuZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24oYyl7VChjLGUsIlNFTEVDVCBrZXkgRlJPTSAiK2Uuc3RvcmVOYW1lKyIgV0hFUkUgaWQgPSA/IExJTUlUIDEiLFthKzFdLGZ1bmN0aW9uKGEsYyl7dmFyIGQ9Yy5yb3dzLmxlbmd0aD9jLnJvd3MuaXRlbSgwKS5rZXk6bnVsbDtiKGQpfSxmdW5jdGlvbihhLGIpe2QoYil9KX0pfSkuY2F0Y2goZCl9KTtyZXR1cm4gaChkLGIpLGR9ZnVuY3Rpb24gYWEoYSl7dmFyIGI9dGhpcyxjPW5ldyB2YShmdW5jdGlvbihhLGMpe2IucmVhZHkoKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGQ9Yi5fZGJJbmZvO2QuZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24oYil7VChiLGQsIlNFTEVDVCBrZXkgRlJPTSAiK2Quc3RvcmVOYW1lLFtdLGZ1bmN0aW9uKGIsYyl7Zm9yKHZhciBkPVtdLGU9MDtlPGMucm93cy5sZW5ndGg7ZSsrKWQucHVzaChjLnJvd3MuaXRlbShlKS5rZXkpO2EoZCl9LGZ1bmN0aW9uKGEsYil7YyhiKX0pfSl9KS5jYXRjaChjKX0pO3JldHVybiBoKGMsYSksY31mdW5jdGlvbiBiYShhKXtyZXR1cm4gbmV3IHZhKGZ1bmN0aW9uKGIsYyl7YS50cmFuc2FjdGlvbihmdW5jdGlvbihkKXtkLmV4ZWN1dGVTcWwoIlNFTEVDVCBuYW1lIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBlPSd0YWJsZScgQU5EIG5hbWUgPD4gJ19fV2ViS2l0RGF0YWJhc2VJbmZvVGFibGVfXyciLFtdLGZ1bmN0aW9uKGMsZCl7Zm9yKHZhciBlPVtdLGY9MDtmPGQucm93cy5sZW5ndGg7ZisrKWUucHVzaChkLnJvd3MuaXRlbShmKS5uYW1lKTtiKHtkYjphLHN0b3JlTmFtZXM6ZX0pfSxmdW5jdGlvbihhLGIpe2MoYil9KX0sZnVuY3Rpb24oYSl7YyhhKX0pfSl9ZnVuY3Rpb24gY2EoYSxiKXtiPWsuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBjPXRoaXMuY29uZmlnKCk7YT0iZnVuY3Rpb24iIT10eXBlb2YgYSYmYXx8e30sYS5uYW1lfHwoYS5uYW1lPWEubmFtZXx8Yy5uYW1lLGEuc3RvcmVOYW1lPWEuc3RvcmVOYW1lfHxjLnN0b3JlTmFtZSk7dmFyIGQsZT10aGlzO3JldHVybiBkPWEubmFtZT9uZXcgdmEoZnVuY3Rpb24oYil7dmFyIGQ7ZD1hLm5hbWU9PT1jLm5hbWU/ZS5fZGJJbmZvLmRiOm9wZW5EYXRhYmFzZShhLm5hbWUsIiIsIiIsMCksYihhLnN0b3JlTmFtZT97ZGI6ZCxzdG9yZU5hbWVzOlthLnN0b3JlTmFtZV19OmJhKGQpKX0pLnRoZW4oZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyB2YShmdW5jdGlvbihiLGMpe2EuZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24oZCl7ZnVuY3Rpb24gZShhKXtyZXR1cm4gbmV3IHZhKGZ1bmN0aW9uKGIsYyl7ZC5leGVjdXRlU3FsKCJEUk9QIFRBQkxFIElGIEVYSVNUUyAiK2EsW10sZnVuY3Rpb24oKXtiKCl9LGZ1bmN0aW9uKGEsYil7YyhiKX0pfSl9Zm9yKHZhciBmPVtdLGc9MCxoPWEuc3RvcmVOYW1lcy5sZW5ndGg7ZzxoO2crKylmLnB1c2goZShhLnN0b3JlTmFtZXNbZ10pKTt2YS5hbGwoZikudGhlbihmdW5jdGlvbigpe2IoKX0pLmNhdGNoKGZ1bmN0aW9uKGEpe2MoYSl9KX0sZnVuY3Rpb24oYSl7YyhhKX0pfSl9KTp2YS5yZWplY3QoIkludmFsaWQgYXJndW1lbnRzIiksaChkLGIpLGR9ZnVuY3Rpb24gZGEoKXt0cnl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBsb2NhbFN0b3JhZ2UmJiJzZXRJdGVtImluIGxvY2FsU3RvcmFnZSYmISFsb2NhbFN0b3JhZ2Uuc2V0SXRlbX1jYXRjaChhKXtyZXR1cm4hMX19ZnVuY3Rpb24gZWEoYSxiKXt2YXIgYz1hLm5hbWUrIi8iO3JldHVybiBhLnN0b3JlTmFtZSE9PWIuc3RvcmVOYW1lJiYoYys9YS5zdG9yZU5hbWUrIi8iKSxjfWZ1bmN0aW9uIGZhKCl7dmFyIGE9Il9sb2NhbGZvcmFnZV9zdXBwb3J0X3Rlc3QiO3RyeXtyZXR1cm4gbG9jYWxTdG9yYWdlLnNldEl0ZW0oYSwhMCksbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oYSksITF9Y2F0Y2goYSl7cmV0dXJuITB9fWZ1bmN0aW9uIGdhKCl7cmV0dXJuIWZhKCl8fGxvY2FsU3RvcmFnZS5sZW5ndGg+MH1mdW5jdGlvbiBoYShhKXt2YXIgYj10aGlzLGM9e307aWYoYSlmb3IodmFyIGQgaW4gYSljW2RdPWFbZF07cmV0dXJuIGMua2V5UHJlZml4PWVhKGEsYi5fZGVmYXVsdENvbmZpZyksZ2EoKT8oYi5fZGJJbmZvPWMsYy5zZXJpYWxpemVyPVZhLHZhLnJlc29sdmUoKSk6dmEucmVqZWN0KCl9ZnVuY3Rpb24gaWEoYSl7dmFyIGI9dGhpcyxjPWIucmVhZHkoKS50aGVuKGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWIuX2RiSW5mby5rZXlQcmVmaXgsYz1sb2NhbFN0b3JhZ2UubGVuZ3RoLTE7Yz49MDtjLS0pe3ZhciBkPWxvY2FsU3RvcmFnZS5rZXkoYyk7MD09PWQuaW5kZXhPZihhKSYmbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oZCl9fSk7cmV0dXJuIGgoYyxhKSxjfWZ1bmN0aW9uIGphKGEsYil7dmFyIGM9dGhpczthPWooYSk7dmFyIGQ9Yy5yZWFkeSgpLnRoZW4oZnVuY3Rpb24oKXt2YXIgYj1jLl9kYkluZm8sZD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbShiLmtleVByZWZpeCthKTtyZXR1cm4gZCYmKGQ9Yi5zZXJpYWxpemVyLmRlc2VyaWFsaXplKGQpKSxkfSk7cmV0dXJuIGgoZCxiKSxkfWZ1bmN0aW9uIGthKGEsYil7dmFyIGM9dGhpcyxkPWMucmVhZHkoKS50aGVuKGZ1bmN0aW9uKCl7Zm9yKHZhciBiPWMuX2RiSW5mbyxkPWIua2V5UHJlZml4LGU9ZC5sZW5ndGgsZj1sb2NhbFN0b3JhZ2UubGVuZ3RoLGc9MSxoPTA7aDxmO2grKyl7dmFyIGk9bG9jYWxTdG9yYWdlLmtleShoKTtpZigwPT09aS5pbmRleE9mKGQpKXt2YXIgaj1sb2NhbFN0b3JhZ2UuZ2V0SXRlbShpKTtpZihqJiYoaj1iLnNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoaikpLHZvaWQgMCE9PShqPWEoaixpLnN1YnN0cmluZyhlKSxnKyspKSlyZXR1cm4gan19fSk7cmV0dXJuIGgoZCxiKSxkfWZ1bmN0aW9uIGxhKGEsYil7dmFyIGM9dGhpcyxkPWMucmVhZHkoKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGIsZD1jLl9kYkluZm87dHJ5e2I9bG9jYWxTdG9yYWdlLmtleShhKX1jYXRjaChhKXtiPW51bGx9cmV0dXJuIGImJihiPWIuc3Vic3RyaW5nKGQua2V5UHJlZml4Lmxlbmd0aCkpLGJ9KTtyZXR1cm4gaChkLGIpLGR9ZnVuY3Rpb24gbWEoYSl7dmFyIGI9dGhpcyxjPWIucmVhZHkoKS50aGVuKGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWIuX2RiSW5mbyxjPWxvY2FsU3RvcmFnZS5sZW5ndGgsZD1bXSxlPTA7ZTxjO2UrKyl7dmFyIGY9bG9jYWxTdG9yYWdlLmtleShlKTswPT09Zi5pbmRleE9mKGEua2V5UHJlZml4KSYmZC5wdXNoKGYuc3Vic3RyaW5nKGEua2V5UHJlZml4Lmxlbmd0aCkpfXJldHVybiBkfSk7cmV0dXJuIGgoYyxhKSxjfWZ1bmN0aW9uIG5hKGEpe3ZhciBiPXRoaXMsYz1iLmtleXMoKS50aGVuKGZ1bmN0aW9uKGEpe3JldHVybiBhLmxlbmd0aH0pO3JldHVybiBoKGMsYSksY31mdW5jdGlvbiBvYShhLGIpe3ZhciBjPXRoaXM7YT1qKGEpO3ZhciBkPWMucmVhZHkoKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGI9Yy5fZGJJbmZvO2xvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGIua2V5UHJlZml4K2EpfSk7cmV0dXJuIGgoZCxiKSxkfWZ1bmN0aW9uIHBhKGEsYixjKXt2YXIgZD10aGlzO2E9aihhKTt2YXIgZT1kLnJlYWR5KCkudGhlbihmdW5jdGlvbigpe3ZvaWQgMD09PWImJihiPW51bGwpO3ZhciBjPWI7cmV0dXJuIG5ldyB2YShmdW5jdGlvbihlLGYpe3ZhciBnPWQuX2RiSW5mbztnLnNlcmlhbGl6ZXIuc2VyaWFsaXplKGIsZnVuY3Rpb24oYixkKXtpZihkKWYoZCk7ZWxzZSB0cnl7bG9jYWxTdG9yYWdlLnNldEl0ZW0oZy5rZXlQcmVmaXgrYSxiKSxlKGMpfWNhdGNoKGEpeyJRdW90YUV4Y2VlZGVkRXJyb3IiIT09YS5uYW1lJiYiTlNfRVJST1JfRE9NX1FVT1RBX1JFQUNIRUQiIT09YS5uYW1lfHxmKGEpLGYoYSl9fSl9KX0pO3JldHVybiBoKGUsYyksZX1mdW5jdGlvbiBxYShhLGIpe2lmKGI9ay5hcHBseSh0aGlzLGFyZ3VtZW50cyksYT0iZnVuY3Rpb24iIT10eXBlb2YgYSYmYXx8e30sIWEubmFtZSl7dmFyIGM9dGhpcy5jb25maWcoKTthLm5hbWU9YS5uYW1lfHxjLm5hbWUsYS5zdG9yZU5hbWU9YS5zdG9yZU5hbWV8fGMuc3RvcmVOYW1lfXZhciBkLGU9dGhpcztyZXR1cm4gZD1hLm5hbWU/bmV3IHZhKGZ1bmN0aW9uKGIpe2IoYS5zdG9yZU5hbWU/ZWEoYSxlLl9kZWZhdWx0Q29uZmlnKTphLm5hbWUrIi8iKX0pLnRoZW4oZnVuY3Rpb24oYSl7Zm9yKHZhciBiPWxvY2FsU3RvcmFnZS5sZW5ndGgtMTtiPj0wO2ItLSl7dmFyIGM9bG9jYWxTdG9yYWdlLmtleShiKTswPT09Yy5pbmRleE9mKGEpJiZsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShjKX19KTp2YS5yZWplY3QoIkludmFsaWQgYXJndW1lbnRzIiksaChkLGIpLGR9ZnVuY3Rpb24gcmEoYSxiKXthW2JdPWZ1bmN0aW9uKCl7dmFyIGM9YXJndW1lbnRzO3JldHVybiBhLnJlYWR5KCkudGhlbihmdW5jdGlvbigpe3JldHVybiBhW2JdLmFwcGx5KGEsYyl9KX19ZnVuY3Rpb24gc2EoKXtmb3IodmFyIGE9MTthPGFyZ3VtZW50cy5sZW5ndGg7YSsrKXt2YXIgYj1hcmd1bWVudHNbYV07aWYoYilmb3IodmFyIGMgaW4gYiliLmhhc093blByb3BlcnR5KGMpJiYoJGEoYltjXSk/YXJndW1lbnRzWzBdW2NdPWJbY10uc2xpY2UoKTphcmd1bWVudHNbMF1bY109YltjXSl9cmV0dXJuIGFyZ3VtZW50c1swXX12YXIgdGE9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYSl7cmV0dXJuIHR5cGVvZiBhfTpmdW5jdGlvbihhKXtyZXR1cm4gYSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGF9LHVhPWUoKTsidW5kZWZpbmVkIj09dHlwZW9mIFByb21pc2UmJmEoMyk7dmFyIHZhPVByb21pc2Usd2E9ImxvY2FsLWZvcmFnZS1kZXRlY3QtYmxvYi1zdXBwb3J0Iix4YT12b2lkIDAseWE9e30semE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxBYT0icmVhZG9ubHkiLEJhPSJyZWFkd3JpdGUiLENhPXtfZHJpdmVyOiJhc3luY1N0b3JhZ2UiLF9pbml0U3RvcmFnZTpDLF9zdXBwb3J0OmYoKSxpdGVyYXRlOkUsZ2V0SXRlbTpELHNldEl0ZW06RixyZW1vdmVJdGVtOkcsY2xlYXI6SCxsZW5ndGg6SSxrZXk6SixrZXlzOkssZHJvcEluc3RhbmNlOkx9LERhPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIixFYT0ifn5sb2NhbF9mb3JhZ2VfdHlwZX4iLEZhPS9efn5sb2NhbF9mb3JhZ2VfdHlwZX4oW15+XSspfi8sR2E9Il9fbGZzY19fOiIsSGE9R2EubGVuZ3RoLElhPSJhcmJmIixKYT0iYmxvYiIsS2E9InNpMDgiLExhPSJ1aTA4IixNYT0idWljOCIsTmE9InNpMTYiLE9hPSJzaTMyIixQYT0idXIxNiIsUWE9InVpMzIiLFJhPSJmbDMyIixTYT0iZmw2NCIsVGE9SGErSWEubGVuZ3RoLFVhPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsVmE9e3NlcmlhbGl6ZTpQLGRlc2VyaWFsaXplOlEsc3RyaW5nVG9CdWZmZXI6TixidWZmZXJUb1N0cmluZzpPfSxXYT17X2RyaXZlcjoid2ViU1FMU3RvcmFnZSIsX2luaXRTdG9yYWdlOlMsX3N1cHBvcnQ6TSgpLGl0ZXJhdGU6VixnZXRJdGVtOlUsc2V0SXRlbTpYLHJlbW92ZUl0ZW06WSxjbGVhcjpaLGxlbmd0aDokLGtleTpfLGtleXM6YWEsZHJvcEluc3RhbmNlOmNhfSxYYT17X2RyaXZlcjoibG9jYWxTdG9yYWdlV3JhcHBlciIsX2luaXRTdG9yYWdlOmhhLF9zdXBwb3J0OmRhKCksaXRlcmF0ZTprYSxnZXRJdGVtOmphLHNldEl0ZW06cGEscmVtb3ZlSXRlbTpvYSxjbGVhcjppYSxsZW5ndGg6bmEsa2V5OmxhLGtleXM6bWEsZHJvcEluc3RhbmNlOnFhfSxZYT1mdW5jdGlvbihhLGIpe3JldHVybiBhPT09Ynx8Im51bWJlciI9PXR5cGVvZiBhJiYibnVtYmVyIj09dHlwZW9mIGImJmlzTmFOKGEpJiZpc05hTihiKX0sWmE9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9YS5sZW5ndGgsZD0wO2Q8Yzspe2lmKFlhKGFbZF0sYikpcmV0dXJuITA7ZCsrfXJldHVybiExfSwkYT1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihhKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpfSxfYT17fSxhYj17fSxiYj17SU5ERVhFRERCOkNhLFdFQlNRTDpXYSxMT0NBTFNUT1JBR0U6WGF9LGNiPVtiYi5JTkRFWEVEREIuX2RyaXZlcixiYi5XRUJTUUwuX2RyaXZlcixiYi5MT0NBTFNUT1JBR0UuX2RyaXZlcl0sZGI9WyJkcm9wSW5zdGFuY2UiXSxlYj1bImNsZWFyIiwiZ2V0SXRlbSIsIml0ZXJhdGUiLCJrZXkiLCJrZXlzIiwibGVuZ3RoIiwicmVtb3ZlSXRlbSIsInNldEl0ZW0iXS5jb25jYXQoZGIpLGZiPXtkZXNjcmlwdGlvbjoiIixkcml2ZXI6Y2Iuc2xpY2UoKSxuYW1lOiJsb2NhbGZvcmFnZSIsc2l6ZTo0OTgwNzM2LHN0b3JlTmFtZToia2V5dmFsdWVwYWlycyIsdmVyc2lvbjoxfSxnYj1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYil7ZCh0aGlzLGEpO2Zvcih2YXIgYyBpbiBiYilpZihiYi5oYXNPd25Qcm9wZXJ0eShjKSl7dmFyIGU9YmJbY10sZj1lLl9kcml2ZXI7dGhpc1tjXT1mLF9hW2ZdfHx0aGlzLmRlZmluZURyaXZlcihlKX10aGlzLl9kZWZhdWx0Q29uZmlnPXNhKHt9LGZiKSx0aGlzLl9jb25maWc9c2Eoe30sdGhpcy5fZGVmYXVsdENvbmZpZyxiKSx0aGlzLl9kcml2ZXJTZXQ9bnVsbCx0aGlzLl9pbml0RHJpdmVyPW51bGwsdGhpcy5fcmVhZHk9ITEsdGhpcy5fZGJJbmZvPW51bGwsdGhpcy5fd3JhcExpYnJhcnlNZXRob2RzV2l0aFJlYWR5KCksdGhpcy5zZXREcml2ZXIodGhpcy5fY29uZmlnLmRyaXZlcikuY2F0Y2goZnVuY3Rpb24oKXt9KX1yZXR1cm4gYS5wcm90b3R5cGUuY29uZmlnPWZ1bmN0aW9uKGEpe2lmKCJvYmplY3QiPT09KHZvaWQgMD09PWE/InVuZGVmaW5lZCI6dGEoYSkpKXtpZih0aGlzLl9yZWFkeSlyZXR1cm4gbmV3IEVycm9yKCJDYW4ndCBjYWxsIGNvbmZpZygpIGFmdGVyIGxvY2FsZm9yYWdlIGhhcyBiZWVuIHVzZWQuIik7Zm9yKHZhciBiIGluIGEpe2lmKCJzdG9yZU5hbWUiPT09YiYmKGFbYl09YVtiXS5yZXBsYWNlKC9cVy9nLCJfIikpLCJ2ZXJzaW9uIj09PWImJiJudW1iZXIiIT10eXBlb2YgYVtiXSlyZXR1cm4gbmV3IEVycm9yKCJEYXRhYmFzZSB2ZXJzaW9uIG11c3QgYmUgYSBudW1iZXIuIik7dGhpcy5fY29uZmlnW2JdPWFbYl19cmV0dXJuISgiZHJpdmVyImluIGEmJmEuZHJpdmVyKXx8dGhpcy5zZXREcml2ZXIodGhpcy5fY29uZmlnLmRyaXZlcil9cmV0dXJuInN0cmluZyI9PXR5cGVvZiBhP3RoaXMuX2NvbmZpZ1thXTp0aGlzLl9jb25maWd9LGEucHJvdG90eXBlLmRlZmluZURyaXZlcj1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9bmV3IHZhKGZ1bmN0aW9uKGIsYyl7dHJ5e3ZhciBkPWEuX2RyaXZlcixlPW5ldyBFcnJvcigiQ3VzdG9tIGRyaXZlciBub3QgY29tcGxpYW50OyBzZWUgaHR0cHM6Ly9tb3ppbGxhLmdpdGh1Yi5pby9sb2NhbEZvcmFnZS8jZGVmaW5lZHJpdmVyIik7aWYoIWEuX2RyaXZlcilyZXR1cm4gdm9pZCBjKGUpO2Zvcih2YXIgZj1lYi5jb25jYXQoIl9pbml0U3RvcmFnZSIpLGc9MCxpPWYubGVuZ3RoO2c8aTtnKyspe3ZhciBqPWZbZ107aWYoKCFaYShkYixqKXx8YVtqXSkmJiJmdW5jdGlvbiIhPXR5cGVvZiBhW2pdKXJldHVybiB2b2lkIGMoZSl9KGZ1bmN0aW9uKCl7Zm9yKHZhciBiPWZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbigpe3ZhciBiPW5ldyBFcnJvcigiTWV0aG9kICIrYSsiIGlzIG5vdCBpbXBsZW1lbnRlZCBieSB0aGUgY3VycmVudCBkcml2ZXIiKSxjPXZhLnJlamVjdChiKTtyZXR1cm4gaChjLGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdKSxjfX0sYz0wLGQ9ZGIubGVuZ3RoO2M8ZDtjKyspe3ZhciBlPWRiW2NdO2FbZV18fChhW2VdPWIoZSkpfX0pKCk7dmFyIGs9ZnVuY3Rpb24oYyl7X2FbZF0mJmNvbnNvbGUuaW5mbygiUmVkZWZpbmluZyBMb2NhbEZvcmFnZSBkcml2ZXI6ICIrZCksX2FbZF09YSxhYltkXT1jLGIoKX07Il9zdXBwb3J0ImluIGE/YS5fc3VwcG9ydCYmImZ1bmN0aW9uIj09dHlwZW9mIGEuX3N1cHBvcnQ/YS5fc3VwcG9ydCgpLnRoZW4oayxjKTprKCEhYS5fc3VwcG9ydCk6ayghMCl9Y2F0Y2goYSl7YyhhKX19KTtyZXR1cm4gaShkLGIsYyksZH0sYS5wcm90b3R5cGUuZHJpdmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RyaXZlcnx8bnVsbH0sYS5wcm90b3R5cGUuZ2V0RHJpdmVyPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1fYVthXT92YS5yZXNvbHZlKF9hW2FdKTp2YS5yZWplY3QobmV3IEVycm9yKCJEcml2ZXIgbm90IGZvdW5kLiIpKTtyZXR1cm4gaShkLGIsYyksZH0sYS5wcm90b3R5cGUuZ2V0U2VyaWFsaXplcj1mdW5jdGlvbihhKXt2YXIgYj12YS5yZXNvbHZlKFZhKTtyZXR1cm4gaShiLGEpLGJ9LGEucHJvdG90eXBlLnJlYWR5PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMsYz1iLl9kcml2ZXJTZXQudGhlbihmdW5jdGlvbigpe3JldHVybiBudWxsPT09Yi5fcmVhZHkmJihiLl9yZWFkeT1iLl9pbml0RHJpdmVyKCkpLGIuX3JlYWR5fSk7cmV0dXJuIGkoYyxhLGEpLGN9LGEucHJvdG90eXBlLnNldERyaXZlcj1mdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZCgpe2cuX2NvbmZpZy5kcml2ZXI9Zy5kcml2ZXIoKX1mdW5jdGlvbiBlKGEpe3JldHVybiBnLl9leHRlbmQoYSksZCgpLGcuX3JlYWR5PWcuX2luaXRTdG9yYWdlKGcuX2NvbmZpZyksZy5fcmVhZHl9ZnVuY3Rpb24gZihhKXtyZXR1cm4gZnVuY3Rpb24oKXtmdW5jdGlvbiBiKCl7Zm9yKDtjPGEubGVuZ3RoOyl7dmFyIGY9YVtjXTtyZXR1cm4gYysrLGcuX2RiSW5mbz1udWxsLGcuX3JlYWR5PW51bGwsZy5nZXREcml2ZXIoZikudGhlbihlKS5jYXRjaChiKX1kKCk7dmFyIGg9bmV3IEVycm9yKCJObyBhdmFpbGFibGUgc3RvcmFnZSBtZXRob2QgZm91bmQuIik7cmV0dXJuIGcuX2RyaXZlclNldD12YS5yZWplY3QoaCksZy5fZHJpdmVyU2V0fXZhciBjPTA7cmV0dXJuIGIoKX19dmFyIGc9dGhpczskYShhKXx8KGE9W2FdKTt2YXIgaD10aGlzLl9nZXRTdXBwb3J0ZWREcml2ZXJzKGEpLGo9bnVsbCE9PXRoaXMuX2RyaXZlclNldD90aGlzLl9kcml2ZXJTZXQuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4gdmEucmVzb2x2ZSgpfSk6dmEucmVzb2x2ZSgpO3JldHVybiB0aGlzLl9kcml2ZXJTZXQ9ai50aGVuKGZ1bmN0aW9uKCl7dmFyIGE9aFswXTtyZXR1cm4gZy5fZGJJbmZvPW51bGwsZy5fcmVhZHk9bnVsbCxnLmdldERyaXZlcihhKS50aGVuKGZ1bmN0aW9uKGEpe2cuX2RyaXZlcj1hLl9kcml2ZXIsZCgpLGcuX3dyYXBMaWJyYXJ5TWV0aG9kc1dpdGhSZWFkeSgpLGcuX2luaXREcml2ZXI9ZihoKX0pfSkuY2F0Y2goZnVuY3Rpb24oKXtkKCk7dmFyIGE9bmV3IEVycm9yKCJObyBhdmFpbGFibGUgc3RvcmFnZSBtZXRob2QgZm91bmQuIik7cmV0dXJuIGcuX2RyaXZlclNldD12YS5yZWplY3QoYSksZy5fZHJpdmVyU2V0fSksaSh0aGlzLl9kcml2ZXJTZXQsYixjKSx0aGlzLl9kcml2ZXJTZXR9LGEucHJvdG90eXBlLnN1cHBvcnRzPWZ1bmN0aW9uKGEpe3JldHVybiEhYWJbYV19LGEucHJvdG90eXBlLl9leHRlbmQ9ZnVuY3Rpb24oYSl7c2EodGhpcyxhKX0sYS5wcm90b3R5cGUuX2dldFN1cHBvcnRlZERyaXZlcnM9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MCxkPWEubGVuZ3RoO2M8ZDtjKyspe3ZhciBlPWFbY107dGhpcy5zdXBwb3J0cyhlKSYmYi5wdXNoKGUpfXJldHVybiBifSxhLnByb3RvdHlwZS5fd3JhcExpYnJhcnlNZXRob2RzV2l0aFJlYWR5PWZ1bmN0aW9uKCl7Zm9yKHZhciBhPTAsYj1lYi5sZW5ndGg7YTxiO2ErKylyYSh0aGlzLGViW2FdKX0sYS5wcm90b3R5cGUuY3JlYXRlSW5zdGFuY2U9ZnVuY3Rpb24oYil7cmV0dXJuIG5ldyBhKGIpfSxhfSgpLGhiPW5ldyBnYjtiLmV4cG9ydHM9aGJ9LHszOjN9XX0se30sWzRdKSg0KX0pOwp9OwoKbXVyb20uaW5zdGFsbFVuaWNvZGVCYXNlNjQgPSBmdW5jdGlvbigpCnsKLyoKCWh0dHBzOi8vZ2l0aHViLmNvbS9zb2xkZXJqcy9UZXh0RW5jb2RlckxpdGUKCUFwYWNoZSAyLjAKKi8KZnVuY3Rpb24gVGV4dEVuY29kZXJMaXRlKCl7fWZ1bmN0aW9uIFRleHREZWNvZGVyTGl0ZSgpe30oZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdXRmOFRvQnl0ZXMoc3RyaW5nLHVuaXRzKXt1bml0cz11bml0c3x8SW5maW5pdHk7dmFyIGNvZGVQb2ludDt2YXIgbGVuZ3RoPXN0cmluZy5sZW5ndGg7dmFyIGxlYWRTdXJyb2dhdGU9bnVsbDt2YXIgYnl0ZXM9W107dmFyIGk9MDtmb3IoO2k8bGVuZ3RoO2krKyl7Y29kZVBvaW50PXN0cmluZy5jaGFyQ29kZUF0KGkpO2lmKGNvZGVQb2ludD41NTI5NSYmY29kZVBvaW50PDU3MzQ0KXtpZihsZWFkU3Vycm9nYXRlKXtpZihjb2RlUG9pbnQ8NTYzMjApe2lmKCh1bml0cy09Myk+LTEpYnl0ZXMucHVzaCgyMzksMTkxLDE4OSk7bGVhZFN1cnJvZ2F0ZT1jb2RlUG9pbnQ7Y29udGludWV9ZWxzZXtjb2RlUG9pbnQ9bGVhZFN1cnJvZ2F0ZS01NTI5Njw8MTB8Y29kZVBvaW50LTU2MzIwfDY1NTM2O2xlYWRTdXJyb2dhdGU9bnVsbH19ZWxzZXtpZihjb2RlUG9pbnQ+NTYzMTkpe2lmKCh1bml0cy09Myk+LTEpYnl0ZXMucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9ZWxzZSBpZihpKzE9PT1sZW5ndGgpe2lmKCh1bml0cy09Myk+LTEpYnl0ZXMucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9ZWxzZXtsZWFkU3Vycm9nYXRlPWNvZGVQb2ludDtjb250aW51ZX19fWVsc2UgaWYobGVhZFN1cnJvZ2F0ZSl7aWYoKHVuaXRzLT0zKT4tMSlieXRlcy5wdXNoKDIzOSwxOTEsMTg5KTtsZWFkU3Vycm9nYXRlPW51bGx9aWYoY29kZVBvaW50PDEyOCl7aWYoKHVuaXRzLT0xKTwwKWJyZWFrO2J5dGVzLnB1c2goY29kZVBvaW50KX1lbHNlIGlmKGNvZGVQb2ludDwyMDQ4KXtpZigodW5pdHMtPTIpPDApYnJlYWs7Ynl0ZXMucHVzaChjb2RlUG9pbnQ+PjZ8MTkyLGNvZGVQb2ludCY2M3wxMjgpfWVsc2UgaWYoY29kZVBvaW50PDY1NTM2KXtpZigodW5pdHMtPTMpPDApYnJlYWs7Ynl0ZXMucHVzaChjb2RlUG9pbnQ+PjEyfDIyNCxjb2RlUG9pbnQ+PjYmNjN8MTI4LGNvZGVQb2ludCY2M3wxMjgpfWVsc2UgaWYoY29kZVBvaW50PDIwOTcxNTIpe2lmKCh1bml0cy09NCk8MClicmVhaztieXRlcy5wdXNoKGNvZGVQb2ludD4+MTh8MjQwLGNvZGVQb2ludD4+MTImNjN8MTI4LGNvZGVQb2ludD4+NiY2M3wxMjgsY29kZVBvaW50JjYzfDEyOCl9ZWxzZXt0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpfX1yZXR1cm4gYnl0ZXN9ZnVuY3Rpb24gdXRmOFNsaWNlKGJ1ZixzdGFydCxlbmQpe3ZhciByZXM9IiI7dmFyIHRtcD0iIjtlbmQ9TWF0aC5taW4oYnVmLmxlbmd0aCxlbmR8fEluZmluaXR5KTtzdGFydD1zdGFydHx8MDtmb3IodmFyIGk9c3RhcnQ7aTxlbmQ7aSsrKXtpZihidWZbaV08PTEyNyl7cmVzKz1kZWNvZGVVdGY4Q2hhcih0bXApK1N0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldKTt0bXA9IiJ9ZWxzZXt0bXArPSIlIitidWZbaV0udG9TdHJpbmcoMTYpfX1yZXR1cm4gcmVzK2RlY29kZVV0ZjhDaGFyKHRtcCl9ZnVuY3Rpb24gZGVjb2RlVXRmOENoYXIoc3RyKXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChzdHIpfWNhdGNoKGVycil7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoNjU1MzMpfX1UZXh0RW5jb2RlckxpdGUucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbihzdHIpe3ZhciByZXN1bHQ7aWYoInVuZGVmaW5lZCI9PT10eXBlb2YgVWludDhBcnJheSl7cmVzdWx0PXV0ZjhUb0J5dGVzKHN0cil9ZWxzZXtyZXN1bHQ9bmV3IFVpbnQ4QXJyYXkodXRmOFRvQnl0ZXMoc3RyKSl9cmV0dXJuIHJlc3VsdH07VGV4dERlY29kZXJMaXRlLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24oYnl0ZXMpe3JldHVybiB1dGY4U2xpY2UoYnl0ZXMsMCxieXRlcy5sZW5ndGgpfX0pKCk7aWYodHlwZW9mIG1vZHVsZT09PSJvYmplY3QiJiZtb2R1bGUpe21vZHVsZS5leHBvcnRzLlRleHREZWNvZGVyTGl0ZT1UZXh0RGVjb2RlckxpdGU7bW9kdWxlLmV4cG9ydHMuVGV4dEVuY29kZXJMaXRlPVRleHRFbmNvZGVyTGl0ZX0KLyoKCWh0dHBzOi8vZ2l0aHViLmNvbS9iZWF0Z2FtbWl0L2Jhc2U2NC1qcwogCU1JVAoqLwooZnVuY3Rpb24ocil7aWYodHlwZW9mIGV4cG9ydHM9PT0ib2JqZWN0IiYmdHlwZW9mIG1vZHVsZSE9PSJ1bmRlZmluZWQiKXttb2R1bGUuZXhwb3J0cz1yKCl9ZWxzZSBpZih0eXBlb2YgZGVmaW5lPT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZCl7ZGVmaW5lKFtdLHIpfWVsc2V7dmFyIGU7aWYodHlwZW9mIHdpbmRvdyE9PSJ1bmRlZmluZWQiKXtlPXdpbmRvd31lbHNlIGlmKHR5cGVvZiBnbG9iYWwhPT0idW5kZWZpbmVkIil7ZT1nbG9iYWx9ZWxzZSBpZih0eXBlb2Ygc2VsZiE9PSJ1bmRlZmluZWQiKXtlPXNlbGZ9ZWxzZXtlPXRoaXN9ZS5iYXNlNjRqcz1yKCl9fSkoZnVuY3Rpb24oKXt2YXIgcixlLG47cmV0dXJuIGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhmLGkpe2lmKCFuW2ZdKXtpZighZVtmXSl7dmFyIHU9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWkmJnUpcmV0dXJuIHUoZiwhMCk7aWYoYSlyZXR1cm4gYShmLCEwKTt2YXIgdj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitmKyInIik7dGhyb3cgdi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIix2fXZhciBkPW5bZl09e2V4cG9ydHM6e319O2VbZl1bMF0uY2FsbChkLmV4cG9ydHMsZnVuY3Rpb24ocil7dmFyIG49ZVtmXVsxXVtyXTtyZXR1cm4gbyhufHxyKX0sZCxkLmV4cG9ydHMscixlLG4sdCl9cmV0dXJuIG5bZl0uZXhwb3J0c31mb3IodmFyIGE9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsZj0wO2Y8dC5sZW5ndGg7ZisrKW8odFtmXSk7cmV0dXJuIG99cmV0dXJuIHJ9KCkoeyIvIjpbZnVuY3Rpb24ocixlLG4peyJ1c2Ugc3RyaWN0IjtuLmJ5dGVMZW5ndGg9ZDtuLnRvQnl0ZUFycmF5PWg7bi5mcm9tQnl0ZUFycmF5PXA7dmFyIHQ9W107dmFyIG89W107dmFyIGE9dHlwZW9mIFVpbnQ4QXJyYXkhPT0idW5kZWZpbmVkIj9VaW50OEFycmF5OkFycmF5O3ZhciBmPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIjtmb3IodmFyIGk9MCx1PWYubGVuZ3RoO2k8dTsrK2kpe3RbaV09ZltpXTtvW2YuY2hhckNvZGVBdChpKV09aX1vWyItIi5jaGFyQ29kZUF0KDApXT02MjtvWyJfIi5jaGFyQ29kZUF0KDApXT02MztmdW5jdGlvbiB2KHIpe3ZhciBlPXIubGVuZ3RoO2lmKGUlND4wKXt0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQiKX12YXIgbj1yLmluZGV4T2YoIj0iKTtpZihuPT09LTEpbj1lO3ZhciB0PW49PT1lPzA6NC1uJTQ7cmV0dXJuW24sdF19ZnVuY3Rpb24gZChyKXt2YXIgZT12KHIpO3ZhciBuPWVbMF07dmFyIHQ9ZVsxXTtyZXR1cm4obit0KSozLzQtdH1mdW5jdGlvbiBjKHIsZSxuKXtyZXR1cm4oZStuKSozLzQtbn1mdW5jdGlvbiBoKHIpe3ZhciBlO3ZhciBuPXYocik7dmFyIHQ9blswXTt2YXIgZj1uWzFdO3ZhciBpPW5ldyBhKGMocix0LGYpKTt2YXIgdT0wO3ZhciBkPWY+MD90LTQ6dDtmb3IodmFyIGg9MDtoPGQ7aCs9NCl7ZT1vW3IuY2hhckNvZGVBdChoKV08PDE4fG9bci5jaGFyQ29kZUF0KGgrMSldPDwxMnxvW3IuY2hhckNvZGVBdChoKzIpXTw8NnxvW3IuY2hhckNvZGVBdChoKzMpXTtpW3UrK109ZT4+MTYmMjU1O2lbdSsrXT1lPj44JjI1NTtpW3UrK109ZSYyNTV9aWYoZj09PTIpe2U9b1tyLmNoYXJDb2RlQXQoaCldPDwyfG9bci5jaGFyQ29kZUF0KGgrMSldPj40O2lbdSsrXT1lJjI1NX1pZihmPT09MSl7ZT1vW3IuY2hhckNvZGVBdChoKV08PDEwfG9bci5jaGFyQ29kZUF0KGgrMSldPDw0fG9bci5jaGFyQ29kZUF0KGgrMildPj4yO2lbdSsrXT1lPj44JjI1NTtpW3UrK109ZSYyNTV9cmV0dXJuIGl9ZnVuY3Rpb24gcyhyKXtyZXR1cm4gdFtyPj4xOCY2M10rdFtyPj4xMiY2M10rdFtyPj42JjYzXSt0W3ImNjNdfWZ1bmN0aW9uIGwocixlLG4pe3ZhciB0O3ZhciBvPVtdO2Zvcih2YXIgYT1lO2E8bjthKz0zKXt0PShyW2FdPDwxNiYxNjcxMTY4MCkrKHJbYSsxXTw8OCY2NTI4MCkrKHJbYSsyXSYyNTUpO28ucHVzaChzKHQpKX1yZXR1cm4gby5qb2luKCIiKX1mdW5jdGlvbiBwKHIpe3ZhciBlO3ZhciBuPXIubGVuZ3RoO3ZhciBvPW4lMzt2YXIgYT1bXTt2YXIgZj0xNjM4Mztmb3IodmFyIGk9MCx1PW4tbztpPHU7aSs9Zil7YS5wdXNoKGwocixpLGkrZj51P3U6aStmKSl9aWYobz09PTEpe2U9cltuLTFdO2EucHVzaCh0W2U+PjJdK3RbZTw8NCY2M10rIj09Iil9ZWxzZSBpZihvPT09Mil7ZT0ocltuLTJdPDw4KStyW24tMV07YS5wdXNoKHRbZT4+MTBdK3RbZT4+NCY2M10rdFtlPDwyJjYzXSsiPSIpfXJldHVybiBhLmpvaW4oIiIpfX0se31dfSx7fSxbXSkoIi8iKX0pOwovKgogICAgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvcnUvZG9jcy9XZWIvQVBJL1dpbmRvd0Jhc2U2NC9CYXNlNjRfZW5jb2RpbmdfYW5kX2RlY29kaW5nCiovCiAgICBtdXJvbS5idG9hID0gZnVuY3Rpb24oc3RyKQogICAgewogICAgICAgIHZhciBieXRlcyA9IG5ldyAoVGV4dEVuY29kZXIgfHwgVGV4dEVuY29kZXJMaXRlKSgidXRmLTgiKS5lbmNvZGUoc3RyKTsKICAgICAgICByZXR1cm4gYmFzZTY0anMuZnJvbUJ5dGVBcnJheShieXRlcyk7CiAgICB9OwogICAgbXVyb20uYXRvYiA9IGZ1bmN0aW9uKHN0cikKICAgIHsKICAgICAgICB2YXIgYnl0ZXMgPSBiYXNlNjRqcy50b0J5dGVBcnJheShzdHIpOwogICAgICAgIHJldHVybiBuZXcgKFRleHREZWNvZGVyIHx8IFRleHREZWNvZGVyTGl0ZSkoInV0Zi04IikuZGVjb2RlKGJ5dGVzKTsKICAgIH07Cn07CgptdXJvbS5sb2FkTW9kdWxlcyA9IGZ1bmN0aW9uKCkKewogICAgLy8gU2tpcCBgMGAgbW9kdWxlIGJlY2F1c2UgaXQncyB1cy4KICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbXVyb20ubW9kdWxlcy5sZW5ndGg7ICsraSkKICAgIHsKICAgICAgICB2YXIgbW9kdWxlID0gbXVyb20ubW9kdWxlc1tpXTsKICAgICAgICB2YXIgbmFtZSA9IG1vZHVsZVswXTsKICAgICAgICB2YXIgY29kZSA9IG11cm9tLmF0b2IobW9kdWxlWzFdKTsKICAgICAgICB2YXIgc3RhdGUgPSBtb2R1bGVbMl07CiAgICAgICAgaWYgKHN0YXRlID09IGZhbHNlKQogICAgICAgIHsKICAgICAgICAgICAgY29uc29sZS53YXJuKCJTa2lwIGxvYWRpbmcgJyIgKyBuYW1lICsgIicgbW9kdWxlIGJlY2F1c2UgaXQncyB0dXJuZWQgb2ZmIik7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBldmFsKGNvZGUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNhdGNoIChlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJDb3VsZCBub3QgbG9hZCAnIiArIG5hbWUgKyAiJyBtb2R1bGU6ICciICsgZSArICInIik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICAKICAgIG11cm9tLnN0YXJ0KCk7Cn07CgptdXJvbS5sb2FkSW5kZXhlZERCTW9kdWxlcyA9IGZ1bmN0aW9uKGNvbXBsZXRpb25IYW5kbGVyKQp7CiAgICAvLyBTZWUgaWYgSW5kZXhlZERCIGhhcyBtb2R1bGVzLgogICAgLy8gSW5kZXhlZERCIG1vZHVsZXMgb3ZlcnJpZGUgdGhvc2UgY29taW5nIGZyb20gSFRNTC4KICAgIGxvY2FsZm9yYWdlLmNvbmZpZyh7IG5hbWU6ICJtdXJvbSIgfSk7CiAgICBsb2NhbGZvcmFnZS5nZXRJdGVtKCJtb2R1bGVzIiwgZnVuY3Rpb24oZXJyb3IsIG1vZHVsZXMpIHsKICAgICAgICBpZiAobW9kdWxlcykKICAgICAgICB7CiAgICAgICAgICAgIG11cm9tLm1vZHVsZXMgPSBtb2R1bGVzOwogICAgICAgICAgICBjb25zb2xlLmRlYnVnKCJNb2R1bGVzIGhhdmUgYmVlbiBsb2FkZWQgZnJvbSBJbmRleGVkREIiKTsKICAgICAgICB9CiAgICAgICAgaWYgKGVycm9yKQogICAgICAgIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcigiQ291bGQgbm90IGdldCBtb2R1bGVzIGZyb20gSW5kZXhlZERCOiAnIiArIGVycm9yICsgIiciKTsKICAgICAgICB9CiAgICAgICAgLy8gQ29udGludWUuCiAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKICAgIH0pOwp9OwoKbXVyb20uaW5zdGFsbExvY2FsRm9yYWdlKCk7Cm11cm9tLmluc3RhbGxVbmljb2RlQmFzZTY0KCk7Ci8vIEluZGV4ZWREQiBtb2R1bGVzIG92ZXJyaWRlIEhUTUwgb25lcy4KbXVyb20ubG9hZEluZGV4ZWREQk1vZHVsZXMobXVyb20ubG9hZE1vZHVsZXMpOwoK", ], [ @@ -121,17 +121,17 @@ var murom = муром; [ "муром.СвойстваМодуля_1.0.0", -"ZnVuY3Rpb24g0KHQstC+0LnRgdGC0LLQsNCc0L7QtNGD0LvRjygpCnsKICAgIHRoaXMu0YHQvtC30LTQsNGC0YzQmNC90YLQtdGA0YTQtdC50YEoKTsKICAgIHRoaXMu0LjQt9C80LXQvdC40LvQuNCd0L7QvNC10YAgPSBuZXcg0KPQstC10LTQvtC80LjRgtC10LvRjCgpOwogICAgdGhpcy7QvdCw0YHRgtGA0L7QuNGC0YzQndC+0LzQtdGAKCk7CiAgICB0aGlzLtC40LfQvNC10L3QuNC70LjQmNC80Y8gPSBuZXcg0KPQstC10LTQvtC80LjRgtC10LvRjCgpOwogICAgdGhpcy7QvdCw0YHRgtGA0L7QuNGC0YzQmNC80Y8oKTsKICAgIHRoaXMu0LjQt9C80LXQvdC40LvQuNCh0YLQsNGC0YPRgSA9IG5ldyDQo9Cy0LXQtNC+0LzQuNGC0LXQu9GMKCk7CiAgICB0aGlzLtC90LDRgdGC0YDQvtC40YLRjNCh0YLQsNGC0YPRgSgpOwogICAgdGhpcy7Rg9C00LDQu9C40YLRjCA9IG5ldyDQo9Cy0LXQtNC+0LzQuNGC0LXQu9GMKCk7CiAgICB0aGlzLtC90LDRgdGC0YDQvtC40YLRjNCj0LTQsNC70LXQvdC40LUoKTsKfQrQodCy0L7QudGB0YLQstCw0JzQvtC00YPQu9GPLnByb3RvdHlwZS7RgdC+0LfQtNCw0YLRjNCY0L3RgtC10YDRhNC10LnRgSA9IGZ1bmN0aW9uKCkKewogICAgdGhpcy7QuNGEID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICB0aGlzLtC40YQuc3R5bGUuY3NzVGV4dCA9CmAKYm9yZGVyOiAxcHggc29saWQgI2RkZDsKLyoKcGFkZGluZzogMC41ZW07Cm1hcmdpbjogMC41ZW07CiovCmNvbG9yOiAjNjY2NjY2Owpmb250LWZhbWlseTogc2Fucy1zZXJpZjsKYDsKICAgIHRoaXMu0YLQsNCx0LvQuNGG0LAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpOwogICAgdGhpcy7QuNGELmFwcGVuZENoaWxkKHRoaXMu0YLQsNCx0LvQuNGG0LApOwp9OwpPYmplY3QuZGVmaW5lUHJvcGVydHko0KHQstC+0LnRgdGC0LLQsNCc0L7QtNGD0LvRjy5wcm90b3R5cGUsICLQvdC+0LzQtdGAIiwgewogICAgZ2V0OiBmdW5jdGlvbigpCiAgICB7CiAgICAgICAgcmV0dXJuIE51bWJlcih0aGlzLtC/0L7Qu9C10J3QvtC80LXRgC52YWx1ZSk7CiAgICB9LAogICAgc2V0OiBmdW5jdGlvbijQt9C90LDRh9C10L3QuNC1KQogICAgewogICAgICAgIHRoaXMu0L/QvtC70LXQndC+0LzQtdGALnZhbHVlID0g0LfQvdCw0YfQtdC90LjQtTsKICAgIH0KfSk7CtCh0LLQvtC50YHRgtCy0LDQnNC+0LTRg9C70Y8ucHJvdG90eXBlLtC90LDRgdGC0YDQvtC40YLRjNCd0L7QvNC10YAgPSBmdW5jdGlvbigpCnsKICAgIHZhciDRjyA9IHRoaXM7CiAgICAKICAgIHZhciDRgNGP0LQgPSB0aGlzLtGC0LDQsdC70LjRhtCwLmluc2VydFJvdygpOwogICAgdmFyINGP0YfQtdC50LrQsCA9IDA7CgogICAgdmFyINC60LvRjtGHID0g0YDRj9C0Lmluc2VydENlbGwo0Y/Rh9C10LnQutCwKyspOwogICAg0LrQu9GO0YcuaW5uZXJIVE1MID0gItCd0L7QvNC10YA6IjsKICAgINC60LvRjtGHLnN0eWxlLmNzc1RleHQgPSAicGFkZGluZzogMC41ZW07IjsKCiAgICB2YXIg0LfQvdCw0YfQtdC90LjQtSA9INGA0Y/QtC5pbnNlcnRDZWxsKNGP0YfQtdC50LrQsCsrKTsKICAgIHRoaXMu0L/QvtC70LXQndC+0LzQtdGAID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKICAgIHRoaXMu0L/QvtC70LXQndC+0LzQtdGALnR5cGUgPSAibnVtYmVyIjsKICAgINC30L3QsNGH0LXQvdC40LUuc3R5bGUuY3NzVGV4dCA9ICJ3aWR0aDogMTAwJTsgcGFkZGluZzogMC41ZW07IjsKICAgIHRoaXMu0L/QvtC70LXQndC+0LzQtdGALnN0eWxlLmNzc1RleHQgPSAid2lkdGg6IDEwMCU7IjsKICAgINC30L3QsNGH0LXQvdC40LUuYXBwZW5kQ2hpbGQodGhpcy7Qv9C+0LvQtdCd0L7QvNC10YApOwogICAgCiAgICB0aGlzLtC/0L7Qu9C10J3QvtC80LXRgC5vbmlucHV0ID0gZnVuY3Rpb24oKQogICAgewogICAgICAgINGPLtC40LfQvNC10L3QuNC70LjQndC+0LzQtdGALtGD0LLQtdC00L7QvNC40YLRjCgpOwogICAgfTsKfTsKT2JqZWN0LmRlZmluZVByb3BlcnR5KNCh0LLQvtC50YHRgtCy0LDQnNC+0LTRg9C70Y8ucHJvdG90eXBlLCAi0LjQvNGPIiwgewogICAgZ2V0OiBmdW5jdGlvbigpCiAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMu0L/QvtC70LXQmNC80Y8udmFsdWU7CiAgICB9LAogICAgc2V0OiBmdW5jdGlvbijQt9C90LDRh9C10L3QuNC1KQogICAgewogICAgICAgIHRoaXMu0L/QvtC70LXQmNC80Y8udmFsdWUgPSDQt9C90LDRh9C10L3QuNC1OwogICAgfQp9KTsK0KHQstC+0LnRgdGC0LLQsNCc0L7QtNGD0LvRjy5wcm90b3R5cGUu0L3QsNGB0YLRgNC+0LjRgtGM0JjQvNGPID0gZnVuY3Rpb24oKQp7CiAgICB2YXIg0Y8gPSB0aGlzOwoKICAgIHZhciDRgNGP0LQgPSB0aGlzLtGC0LDQsdC70LjRhtCwLmluc2VydFJvdygpOwogICAgdmFyINGP0YfQtdC50LrQsCA9IDA7CgogICAgdmFyINC60LvRjtGHID0g0YDRj9C0Lmluc2VydENlbGwo0Y/Rh9C10LnQutCwKyspOwogICAg0LrQu9GO0YcuaW5uZXJIVE1MID0gItCY0LzRjzoiOwogICAg0LrQu9GO0Ycuc3R5bGUuY3NzVGV4dCA9ICJwYWRkaW5nOiAwLjVlbTsiOwoKICAgIHZhciDQt9C90LDRh9C10L3QuNC1ID0g0YDRj9C0Lmluc2VydENlbGwo0Y/Rh9C10LnQutCwKyspOwogICAgdGhpcy7Qv9C+0LvQtdCY0LzRjyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7CiAgICDQt9C90LDRh9C10L3QuNC1LnN0eWxlLmNzc1RleHQgPSAid2lkdGg6IDEwMCU7IHBhZGRpbmc6IDAuNWVtOyI7CiAgICB0aGlzLtC/0L7Qu9C10JjQvNGPLnN0eWxlLmNzc1RleHQgPSAid2lkdGg6IDEwMCU7IjsKICAgINC30L3QsNGH0LXQvdC40LUuYXBwZW5kQ2hpbGQodGhpcy7Qv9C+0LvQtdCY0LzRjyk7CgogICAgdGhpcy7Qv9C+0LvQtdCY0LzRjy5vbmlucHV0ID0gZnVuY3Rpb24oKQogICAgewogICAgICAgINGPLtC40LfQvNC10L3QuNC70LjQmNC80Y8u0YPQstC10LTQvtC80LjRgtGMKCk7CiAgICB9Owp9OwpPYmplY3QuZGVmaW5lUHJvcGVydHko0KHQstC+0LnRgdGC0LLQsNCc0L7QtNGD0LvRjy5wcm90b3R5cGUsICLRgdGC0LDRgtGD0YEiLCB7CiAgICBnZXQ6IGZ1bmN0aW9uKCkKICAgIHsKICAgICAgICByZXR1cm4gdGhpcy7Qv9C10YDQtdC60LvRjtGH0LDRgtC10LvRjC5jaGVja2VkOwogICAgfSwKICAgIHNldDogZnVuY3Rpb24o0LfQvdCw0YfQtdC90LjQtSkKICAgIHsKICAgICAgICB0aGlzLtC/0LXRgNC10LrQu9GO0YfQsNGC0LXQu9GMLmNoZWNrZWQgPSDQt9C90LDRh9C10L3QuNC1OwogICAgfQp9KTsK0KHQstC+0LnRgdGC0LLQsNCc0L7QtNGD0LvRjy5wcm90b3R5cGUu0L3QsNGB0YLRgNC+0LjRgtGM0KHRgtCw0YLRg9GBID0gZnVuY3Rpb24oKQp7CiAgICB2YXIg0Y8gPSB0aGlzOwogICAgCiAgICB2YXIg0YDRj9C0ID0gdGhpcy7RgtCw0LHQu9C40YbQsC5pbnNlcnRSb3coKTsKICAgIHZhciDRj9GH0LXQudC60LAgPSAwOwogICAgCiAgICB2YXIg0LrQu9GO0YcgPSDRgNGP0LQuaW5zZXJ0Q2VsbCjRj9GH0LXQudC60LArKyk7CiAgICDQutC70Y7Rhy5pbm5lckhUTUwgPSAi0JjRgdC/0L7Qu9C90Y/RgtGMOiI7CiAgICDQutC70Y7Rhy5zdHlsZS5jc3NUZXh0ID0gInBhZGRpbmc6IDAuNWVtOyI7CgogICAgdmFyINC30L3QsNGH0LXQvdC40LUgPSDRgNGP0LQuaW5zZXJ0Q2VsbCjRj9GH0LXQudC60LArKyk7CiAgICB0aGlzLtC/0LXRgNC10LrQu9GO0YfQsNGC0LXQu9GMID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKICAgIHRoaXMu0L/QtdGA0LXQutC70Y7Rh9Cw0YLQtdC70YwudHlwZSA9ICJjaGVja2JveCI7CiAgICB0aGlzLtC/0LXRgNC10LrQu9GO0YfQsNGC0LXQu9GMLnN0eWxlLmNzc1RleHQgPSAicGFkZGluZzogMC41ZW07IjsKICAgINC30L3QsNGH0LXQvdC40LUuYXBwZW5kQ2hpbGQodGhpcy7Qv9C10YDQtdC60LvRjtGH0LDRgtC10LvRjCk7CgogICAgdGhpcy7Qv9C10YDQtdC60LvRjtGH0LDRgtC10LvRjC5vbmNoYW5nZSA9IGZ1bmN0aW9uKCkKICAgIHsKICAgICAgICDRjy7QuNC30LzQtdC90LjQu9C40KHRgtCw0YLRg9GBLtGD0LLQtdC00L7QvNC40YLRjCgpOwogICAgfTsKICAgINC60LvRjtGHLm9uY2xpY2sgPSBmdW5jdGlvbigpCiAgICB7CiAgICAgICAg0Y8u0L/QtdGA0LXQutC70Y7Rh9Cw0YLQtdC70YwuY2hlY2tlZCA9ICHRjy7Qv9C10YDQtdC60LvRjtGH0LDRgtC10LvRjC5jaGVja2VkOwogICAgICAgINGPLtC40LfQvNC10L3QuNC70LjQodGC0LDRgtGD0YEu0YPQstC10LTQvtC80LjRgtGMKCk7CiAgICB9Owp9OwrQodCy0L7QudGB0YLQstCw0JzQvtC00YPQu9GPLnByb3RvdHlwZS7QvdCw0YHRgtGA0L7QuNGC0YzQo9C00LDQu9C10L3QuNC1ID0gZnVuY3Rpb24oKQp7CiAgICB2YXIg0Y8gPSB0aGlzOwogICAgCiAgICB2YXIg0YDRj9C0ID0gdGhpcy7RgtCw0LHQu9C40YbQsC5pbnNlcnRSb3coKTsKICAgIHZhciDRj9GH0LXQudC60LAgPSAwOwoKICAgINGA0Y/QtC5pbnNlcnRDZWxsKNGP0YfQtdC50LrQsCsrKTsKICAgIHZhciDQt9C90LDRh9C10L3QuNC1ID0g0YDRj9C0Lmluc2VydENlbGwo0Y/Rh9C10LnQutCwKyspOwoKICAgIHRoaXMu0LrQvdC+0L/QutCw0KPQtNCw0LvQuNGC0YwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTsKICAgIHRoaXMu0LrQvdC+0L/QutCw0KPQtNCw0LvQuNGC0YwuaW5uZXJIVE1MID0gItCj0LTQsNC70LjRgtGMIjsKICAgIHRoaXMu0LrQvdC+0L/QutCw0KPQtNCw0LvQuNGC0YwuY2xhc3NMaXN0LmFkZCgi0LzRg9GA0L7QvC3QutC90L7Qv9C60LAiKTsKICAgINC30L3QsNGH0LXQvdC40LUuYXBwZW5kQ2hpbGQodGhpcy7QutC90L7Qv9C60LDQo9C00LDQu9C40YLRjCk7CiAgICAKICAgIHRoaXMu0LrQvdC+0L/QutCw0KPQtNCw0LvQuNGC0Ywub25jbGljayA9IGZ1bmN0aW9uKCkKICAgIHsKICAgICAgICDRjy7Rg9C00LDQu9C40YLRjC7Rg9Cy0LXQtNC+0LzQuNGC0YwoKTsgIAogICAgfTsKfTsKCgovLyDQotC10YHRgi4KCgpmdW5jdGlvbiDQotC10YHRgtCh0LLQvtC50YHRgtCy0LDQnNC+0LTRg9C70Y8oKQp7CiAgICB0aGlzLtGB0L7Qt9C00LDRgtGM0JjQvdGC0LXRgNGE0LXQudGBKCk7Cn0K0KLQtdGB0YLQodCy0L7QudGB0YLQstCw0JzQvtC00YPQu9GPLnByb3RvdHlwZS7RgdC+0LfQtNCw0YLRjNCY0L3RgtC10YDRhNC10LnRgSA9IGZ1bmN0aW9uKCkKewogICAgdmFyINGPID0gdGhpczsKICAgIAogICAgdGhpcy7QuNGEID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICB0aGlzLtGB0LLQvtC50YHRgtCy0LAgPSBuZXcg0KHQstC+0LnRgdGC0LLQsNCc0L7QtNGD0LvRjygpOwogICAgdGhpcy7QuNGELmFwcGVuZENoaWxkKHRoaXMu0YHQstC+0LnRgdGC0LLQsC7QuNGEKTsKCiAgICB0aGlzLtGB0LLQvtC50YHRgtCy0LAu0LjQt9C80LXQvdC40LvQuNCd0L7QvNC10YAu0L/QvtC00L/QuNGB0LDRgtGMKGZ1bmN0aW9uKCl7CiAgICAgICAgY29uc29sZS5sb2coItC90L7QvNC10YA6ICciICsg0Y8u0YHQstC+0LnRgdGC0LLQsC7QvdC+0LzQtdGAICsgIiciKTsKICAgIH0pOwogICAgdGhpcy7RgdCy0L7QudGB0YLQstCwLtC40LfQvNC10L3QuNC70LjQmNC80Y8u0L/QvtC00L/QuNGB0LDRgtGMKGZ1bmN0aW9uKCl7CiAgICAgICAgY29uc29sZS5sb2coItC40LzRjzogJyIgKyDRjy7RgdCy0L7QudGB0YLQstCwLtC40LzRjyArICInIik7CiAgICB9KTsKICAgIHRoaXMu0YHQstC+0LnRgdGC0LLQsC7QuNC30LzQtdC90LjQu9C40KHRgtCw0YLRg9GBLtC/0L7QtNC/0LjRgdCw0YLRjChmdW5jdGlvbigpewogICAgICAgIGNvbnNvbGUubG9nKCLRgdGC0LDRgtGD0YE6ICciICsg0Y8u0YHQstC+0LnRgdGC0LLQsC7RgdGC0LDRgtGD0YEgKyAiJyIpOwogICAgfSk7CiAgICB0aGlzLtGB0LLQvtC50YHRgtCy0LAu0YPQtNCw0LvQuNGC0Ywu0L/QvtC00L/QuNGB0LDRgtGMKGZ1bmN0aW9uKCl7CiAgICAgICAgY29uc29sZS5sb2coItGD0LTQsNC70LjRgtGMINC80L7QtNGD0LvRjCAnIiArINGPLtGB0LLQvtC50YHRgtCy0LAu0LjQvNGPICsgIiciKTsKICAgIH0pOwp9Ow==", +"ZnVuY3Rpb24g0KHQstC+0LnRgdGC0LLQsNCc0L7QtNGD0LvRjygpCnsKICAgIHRoaXMu0YHQvtC30LTQsNGC0YzQmNC90YLQtdGA0YTQtdC50YEoKTsKICAgIHRoaXMu0LjQt9C80LXQvdC40LvQuNCd0L7QvNC10YAgPSBuZXcg0KPQstC10LTQvtC80LjRgtC10LvRjCgpOwogICAgdGhpcy7QvdCw0YHRgtGA0L7QuNGC0YzQndC+0LzQtdGAKCk7CiAgICB0aGlzLtC40LfQvNC10L3QuNC70LjQmNC80Y8gPSBuZXcg0KPQstC10LTQvtC80LjRgtC10LvRjCgpOwogICAgdGhpcy7QvdCw0YHRgtGA0L7QuNGC0YzQmNC80Y8oKTsKICAgIHRoaXMu0LjQt9C80LXQvdC40LvQuNCh0YLQsNGC0YPRgSA9IG5ldyDQo9Cy0LXQtNC+0LzQuNGC0LXQu9GMKCk7CiAgICB0aGlzLtC90LDRgdGC0YDQvtC40YLRjNCh0YLQsNGC0YPRgSgpOwogICAgdGhpcy7Rg9C00LDQu9C40YLRjCA9IG5ldyDQo9Cy0LXQtNC+0LzQuNGC0LXQu9GMKCk7CiAgICB0aGlzLtC90LDRgdGC0YDQvtC40YLRjNCj0LTQsNC70LXQvdC40LUoKTsKfQrQodCy0L7QudGB0YLQstCw0JzQvtC00YPQu9GPLnByb3RvdHlwZS7RgdC+0LfQtNCw0YLRjNCY0L3RgtC10YDRhNC10LnRgSA9IGZ1bmN0aW9uKCkKewogICAgdGhpcy7QuNGEID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICB0aGlzLtC40YQuc3R5bGUuY3NzVGV4dCA9CmAKYm9yZGVyOiAxcHggc29saWQgI2RkZDsKLyoKcGFkZGluZzogMC41ZW07Cm1hcmdpbjogMC41ZW07CiovCmNvbG9yOiAjNjY2NjY2Owpmb250LWZhbWlseTogc2Fucy1zZXJpZjsKYDsKICAgIHRoaXMu0YLQsNCx0LvQuNGG0LAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpOwogICAgdGhpcy7QuNGELmFwcGVuZENoaWxkKHRoaXMu0YLQsNCx0LvQuNGG0LApOwp9OwpPYmplY3QuZGVmaW5lUHJvcGVydHko0KHQstC+0LnRgdGC0LLQsNCc0L7QtNGD0LvRjy5wcm90b3R5cGUsICLQvdC+0LzQtdGAIiwgewogICAgZ2V0OiBmdW5jdGlvbigpCiAgICB7CiAgICAgICAgcmV0dXJuIE51bWJlcih0aGlzLtC/0L7Qu9C10J3QvtC80LXRgC52YWx1ZSk7CiAgICB9LAogICAgc2V0OiBmdW5jdGlvbijQt9C90LDRh9C10L3QuNC1KQogICAgewogICAgICAgIHRoaXMu0L/QvtC70LXQndC+0LzQtdGALnZhbHVlID0g0LfQvdCw0YfQtdC90LjQtTsKICAgIH0KfSk7CtCh0LLQvtC50YHRgtCy0LDQnNC+0LTRg9C70Y8ucHJvdG90eXBlLtC90LDRgdGC0YDQvtC40YLRjNCd0L7QvNC10YAgPSBmdW5jdGlvbigpCnsKICAgIHZhciDRjyA9IHRoaXM7CiAgICAKICAgIHZhciDRgNGP0LQgPSB0aGlzLtGC0LDQsdC70LjRhtCwLmluc2VydFJvdygpOwogICAgdmFyINGP0YfQtdC50LrQsCA9IDA7CgogICAgdmFyINC60LvRjtGHID0g0YDRj9C0Lmluc2VydENlbGwo0Y/Rh9C10LnQutCwKyspOwogICAg0LrQu9GO0YcuaW5uZXJIVE1MID0gItCd0L7QvNC10YA6IjsKICAgINC60LvRjtGHLnN0eWxlLmNzc1RleHQgPSAicGFkZGluZzogMC41ZW07IjsKCiAgICB2YXIg0LfQvdCw0YfQtdC90LjQtSA9INGA0Y/QtC5pbnNlcnRDZWxsKNGP0YfQtdC50LrQsCsrKTsKICAgIHRoaXMu0L/QvtC70LXQndC+0LzQtdGAID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKICAgIHRoaXMu0L/QvtC70LXQndC+0LzQtdGALnR5cGUgPSAibnVtYmVyIjsKICAgIHRoaXMu0L/QvtC70LXQndC+0LzQtdGALm1pbiA9IDA7CiAgICDQt9C90LDRh9C10L3QuNC1LnN0eWxlLmNzc1RleHQgPSAid2lkdGg6IDEwMCU7IHBhZGRpbmc6IDAuNWVtOyI7CiAgICB0aGlzLtC/0L7Qu9C10J3QvtC80LXRgC5zdHlsZS5jc3NUZXh0ID0gIndpZHRoOiAxMDAlOyI7CiAgICDQt9C90LDRh9C10L3QuNC1LmFwcGVuZENoaWxkKHRoaXMu0L/QvtC70LXQndC+0LzQtdGAKTsKICAgIAogICAgdGhpcy7Qv9C+0LvQtdCd0L7QvNC10YAub25pbnB1dCA9IGZ1bmN0aW9uKCkKICAgIHsKICAgICAgICDRjy7QuNC30LzQtdC90LjQu9C40J3QvtC80LXRgC7Rg9Cy0LXQtNC+0LzQuNGC0YwoKTsKICAgIH07Cn07Ck9iamVjdC5kZWZpbmVQcm9wZXJ0eSjQodCy0L7QudGB0YLQstCw0JzQvtC00YPQu9GPLnByb3RvdHlwZSwgItC40LzRjyIsIHsKICAgIGdldDogZnVuY3Rpb24oKQogICAgewogICAgICAgIHJldHVybiB0aGlzLtC/0L7Qu9C10JjQvNGPLnZhbHVlOwogICAgfSwKICAgIHNldDogZnVuY3Rpb24o0LfQvdCw0YfQtdC90LjQtSkKICAgIHsKICAgICAgICB0aGlzLtC/0L7Qu9C10JjQvNGPLnZhbHVlID0g0LfQvdCw0YfQtdC90LjQtTsKICAgIH0KfSk7CtCh0LLQvtC50YHRgtCy0LDQnNC+0LTRg9C70Y8ucHJvdG90eXBlLtC90LDRgdGC0YDQvtC40YLRjNCY0LzRjyA9IGZ1bmN0aW9uKCkKewogICAgdmFyINGPID0gdGhpczsKCiAgICB2YXIg0YDRj9C0ID0gdGhpcy7RgtCw0LHQu9C40YbQsC5pbnNlcnRSb3coKTsKICAgIHZhciDRj9GH0LXQudC60LAgPSAwOwoKICAgIHZhciDQutC70Y7RhyA9INGA0Y/QtC5pbnNlcnRDZWxsKNGP0YfQtdC50LrQsCsrKTsKICAgINC60LvRjtGHLmlubmVySFRNTCA9ICLQmNC80Y86IjsKICAgINC60LvRjtGHLnN0eWxlLmNzc1RleHQgPSAicGFkZGluZzogMC41ZW07IjsKCiAgICB2YXIg0LfQvdCw0YfQtdC90LjQtSA9INGA0Y/QtC5pbnNlcnRDZWxsKNGP0YfQtdC50LrQsCsrKTsKICAgIHRoaXMu0L/QvtC70LXQmNC80Y8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwogICAg0LfQvdCw0YfQtdC90LjQtS5zdHlsZS5jc3NUZXh0ID0gIndpZHRoOiAxMDAlOyBwYWRkaW5nOiAwLjVlbTsiOwogICAgdGhpcy7Qv9C+0LvQtdCY0LzRjy5zdHlsZS5jc3NUZXh0ID0gIndpZHRoOiAxMDAlOyI7CiAgICDQt9C90LDRh9C10L3QuNC1LmFwcGVuZENoaWxkKHRoaXMu0L/QvtC70LXQmNC80Y8pOwoKICAgIHRoaXMu0L/QvtC70LXQmNC80Y8ub25pbnB1dCA9IGZ1bmN0aW9uKCkKICAgIHsKICAgICAgICDRjy7QuNC30LzQtdC90LjQu9C40JjQvNGPLtGD0LLQtdC00L7QvNC40YLRjCgpOwogICAgfTsKfTsKT2JqZWN0LmRlZmluZVByb3BlcnR5KNCh0LLQvtC50YHRgtCy0LDQnNC+0LTRg9C70Y8ucHJvdG90eXBlLCAi0YHRgtCw0YLRg9GBIiwgewogICAgZ2V0OiBmdW5jdGlvbigpCiAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMu0L/QtdGA0LXQutC70Y7Rh9Cw0YLQtdC70YwuY2hlY2tlZDsKICAgIH0sCiAgICBzZXQ6IGZ1bmN0aW9uKNC30L3QsNGH0LXQvdC40LUpCiAgICB7CiAgICAgICAgdGhpcy7Qv9C10YDQtdC60LvRjtGH0LDRgtC10LvRjC5jaGVja2VkID0g0LfQvdCw0YfQtdC90LjQtTsKICAgIH0KfSk7CtCh0LLQvtC50YHRgtCy0LDQnNC+0LTRg9C70Y8ucHJvdG90eXBlLtC90LDRgdGC0YDQvtC40YLRjNCh0YLQsNGC0YPRgSA9IGZ1bmN0aW9uKCkKewogICAgdmFyINGPID0gdGhpczsKICAgIAogICAgdmFyINGA0Y/QtCA9IHRoaXMu0YLQsNCx0LvQuNGG0LAuaW5zZXJ0Um93KCk7CiAgICB2YXIg0Y/Rh9C10LnQutCwID0gMDsKICAgIAogICAgdmFyINC60LvRjtGHID0g0YDRj9C0Lmluc2VydENlbGwo0Y/Rh9C10LnQutCwKyspOwogICAg0LrQu9GO0YcuaW5uZXJIVE1MID0gItCY0YHQv9C+0LvQvdGP0YLRjDoiOwogICAg0LrQu9GO0Ycuc3R5bGUuY3NzVGV4dCA9ICJwYWRkaW5nOiAwLjVlbTsiOwoKICAgIHZhciDQt9C90LDRh9C10L3QuNC1ID0g0YDRj9C0Lmluc2VydENlbGwo0Y/Rh9C10LnQutCwKyspOwogICAgdGhpcy7Qv9C10YDQtdC60LvRjtGH0LDRgtC10LvRjCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7CiAgICB0aGlzLtC/0LXRgNC10LrQu9GO0YfQsNGC0LXQu9GMLnR5cGUgPSAiY2hlY2tib3giOwogICAgdGhpcy7Qv9C10YDQtdC60LvRjtGH0LDRgtC10LvRjC5zdHlsZS5jc3NUZXh0ID0gInBhZGRpbmc6IDAuNWVtOyI7CiAgICDQt9C90LDRh9C10L3QuNC1LmFwcGVuZENoaWxkKHRoaXMu0L/QtdGA0LXQutC70Y7Rh9Cw0YLQtdC70YwpOwoKICAgIHRoaXMu0L/QtdGA0LXQutC70Y7Rh9Cw0YLQtdC70Ywub25jaGFuZ2UgPSBmdW5jdGlvbigpCiAgICB7CiAgICAgICAg0Y8u0LjQt9C80LXQvdC40LvQuNCh0YLQsNGC0YPRgS7Rg9Cy0LXQtNC+0LzQuNGC0YwoKTsKICAgIH07CiAgICDQutC70Y7Rhy5vbmNsaWNrID0gZnVuY3Rpb24oKQogICAgewogICAgICAgINGPLtC/0LXRgNC10LrQu9GO0YfQsNGC0LXQu9GMLmNoZWNrZWQgPSAh0Y8u0L/QtdGA0LXQutC70Y7Rh9Cw0YLQtdC70YwuY2hlY2tlZDsKICAgICAgICDRjy7QuNC30LzQtdC90LjQu9C40KHRgtCw0YLRg9GBLtGD0LLQtdC00L7QvNC40YLRjCgpOwogICAgfTsKfTsK0KHQstC+0LnRgdGC0LLQsNCc0L7QtNGD0LvRjy5wcm90b3R5cGUu0L3QsNGB0YLRgNC+0LjRgtGM0KPQtNCw0LvQtdC90LjQtSA9IGZ1bmN0aW9uKCkKewogICAgdmFyINGPID0gdGhpczsKICAgIAogICAgdmFyINGA0Y/QtCA9IHRoaXMu0YLQsNCx0LvQuNGG0LAuaW5zZXJ0Um93KCk7CiAgICB2YXIg0Y/Rh9C10LnQutCwID0gMDsKCiAgICDRgNGP0LQuaW5zZXJ0Q2VsbCjRj9GH0LXQudC60LArKyk7CiAgICB2YXIg0LfQvdCw0YfQtdC90LjQtSA9INGA0Y/QtC5pbnNlcnRDZWxsKNGP0YfQtdC50LrQsCsrKTsKCiAgICB0aGlzLtC60L3QvtC/0LrQsNCj0LTQsNC70LjRgtGMID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7CiAgICB0aGlzLtC60L3QvtC/0LrQsNCj0LTQsNC70LjRgtGMLmlubmVySFRNTCA9ICLQo9C00LDQu9C40YLRjCI7CiAgICB0aGlzLtC60L3QvtC/0LrQsNCj0LTQsNC70LjRgtGMLmNsYXNzTGlzdC5hZGQoItC80YPRgNC+0Lwt0LrQvdC+0L/QutCwIik7CiAgICDQt9C90LDRh9C10L3QuNC1LmFwcGVuZENoaWxkKHRoaXMu0LrQvdC+0L/QutCw0KPQtNCw0LvQuNGC0YwpOwogICAgCiAgICB0aGlzLtC60L3QvtC/0LrQsNCj0LTQsNC70LjRgtGMLm9uY2xpY2sgPSBmdW5jdGlvbigpCiAgICB7CiAgICAgICAg0Y8u0YPQtNCw0LvQuNGC0Ywu0YPQstC10LTQvtC80LjRgtGMKCk7ICAKICAgIH07Cn07CgoKLy8g0KLQtdGB0YIuCgoKZnVuY3Rpb24g0KLQtdGB0YLQodCy0L7QudGB0YLQstCw0JzQvtC00YPQu9GPKCkKewogICAgdGhpcy7RgdC+0LfQtNCw0YLRjNCY0L3RgtC10YDRhNC10LnRgSgpOwp9CtCi0LXRgdGC0KHQstC+0LnRgdGC0LLQsNCc0L7QtNGD0LvRjy5wcm90b3R5cGUu0YHQvtC30LTQsNGC0YzQmNC90YLQtdGA0YTQtdC50YEgPSBmdW5jdGlvbigpCnsKICAgIHZhciDRjyA9IHRoaXM7CiAgICAKICAgIHRoaXMu0LjRhCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgdGhpcy7RgdCy0L7QudGB0YLQstCwID0gbmV3INCh0LLQvtC50YHRgtCy0LDQnNC+0LTRg9C70Y8oKTsKICAgIHRoaXMu0LjRhC5hcHBlbmRDaGlsZCh0aGlzLtGB0LLQvtC50YHRgtCy0LAu0LjRhCk7CgogICAgdGhpcy7RgdCy0L7QudGB0YLQstCwLtC40LfQvNC10L3QuNC70LjQndC+0LzQtdGALtC/0L7QtNC/0LjRgdCw0YLRjChmdW5jdGlvbigpewogICAgICAgIGNvbnNvbGUubG9nKCLQvdC+0LzQtdGAOiAnIiArINGPLtGB0LLQvtC50YHRgtCy0LAu0L3QvtC80LXRgCArICInIik7CiAgICB9KTsKICAgIHRoaXMu0YHQstC+0LnRgdGC0LLQsC7QuNC30LzQtdC90LjQu9C40JjQvNGPLtC/0L7QtNC/0LjRgdCw0YLRjChmdW5jdGlvbigpewogICAgICAgIGNvbnNvbGUubG9nKCLQuNC80Y86ICciICsg0Y8u0YHQstC+0LnRgdGC0LLQsC7QuNC80Y8gKyAiJyIpOwogICAgfSk7CiAgICB0aGlzLtGB0LLQvtC50YHRgtCy0LAu0LjQt9C80LXQvdC40LvQuNCh0YLQsNGC0YPRgS7Qv9C+0LTQv9C40YHQsNGC0YwoZnVuY3Rpb24oKXsKICAgICAgICBjb25zb2xlLmxvZygi0YHRgtCw0YLRg9GBOiAnIiArINGPLtGB0LLQvtC50YHRgtCy0LAu0YHRgtCw0YLRg9GBICsgIiciKTsKICAgIH0pOwogICAgdGhpcy7RgdCy0L7QudGB0YLQstCwLtGD0LTQsNC70LjRgtGMLtC/0L7QtNC/0LjRgdCw0YLRjChmdW5jdGlvbigpewogICAgICAgIGNvbnNvbGUubG9nKCLRg9C00LDQu9C40YLRjCDQvNC+0LTRg9C70YwgJyIgKyDRjy7RgdCy0L7QudGB0YLQstCwLtC40LzRjyArICInIik7CiAgICB9KTsKfTs=", ], [ "муром.Модули_1.0.0", -"ZnVuY3Rpb24g0JzQvtC00YPQu9C4KCkKewogICAgCn0K0JzQvtC00YPQu9C4LnByb3RvdHlwZS7RgdCy0L7QudGB0YLQstCwID0gZnVuY3Rpb24o0L3QvtC80LXRgCkKewogICAgdmFyINC8ID0g0LzRg9GA0L7QvC7QvNC+0LTRg9C70Lhb0L3QvtC80LXRgF07CiAgICByZXR1cm4gKHR5cGVvZiDQvFsyXSAhPSAidW5kZWZpbmVkIikgPyDQvFsyXSA6IHt9Owp9OwrQnNC+0LTRg9C70LgucHJvdG90eXBlLtC30LDQtNCw0YLRjNCh0LLQvtC50YHRgtCy0LAgPSBmdW5jdGlvbijQvdC+0LzQtdGALCDRgdCy0L7QudGB0YLQstCwKQp7CiAgICB2YXIg0LwgPSDQvNGD0YDQvtC8LtC80L7QtNGD0LvQuFvQvdC+0LzQtdGAXTsKICAgINC8WzJdID0g0YHQstC+0LnRgdGC0LLQsDsKfTsK0JzQvtC00YPQu9C4LnByb3RvdHlwZS7RgdGC0LDRgtGD0YEgPSBmdW5jdGlvbijQvdC+0LzQtdGAKQp7CiAgICB2YXIg0YHQsiA9IHRoaXMu0YHQstC+0LnRgdGC0LLQsCjQvdC+0LzQtdGAKTsKICAgIGlmICgi0YHRgtCw0YLRg9GBIiBpbiDRgdCyKQogICAgewogICAgICAgIHJldHVybiDRgdCyWyLRgdGC0LDRgtGD0YEiXTsKICAgIH0KICAgIC8vINCf0L4g0YPQvNC+0LvRh9Cw0L3QuNGOINC80L7QtNGD0LvRjCDQuNGB0L/QvtC70L3Rj9C10LzRi9C5ICjRgdGC0LDRgtGD0YEgPT0gdHJ1ZSkuCiAgICByZXR1cm4gdHJ1ZTsKfTsK0JzQvtC00YPQu9C4LnByb3RvdHlwZS7Qt9Cw0LTQsNGC0YzQodGC0LDRgtGD0YEgPSBmdW5jdGlvbijQvdC+0LzQtdGALCDRgdGC0LDRgtGD0YEpCnsKICAgIHZhciDRgdCyID0gdGhpcy7RgdCy0L7QudGB0YLQstCwKNC90L7QvNC10YApOwogICAg0YHQslsi0YHRgtCw0YLRg9GBIl0gPSDRgdGC0LDRgtGD0YE7CiAgICB0aGlzLtC30LDQtNCw0YLRjNCh0LLQvtC50YHRgtCy0LAo0L3QvtC80LXRgCwg0YHQsik7Cn07CtCc0L7QtNGD0LvQuC5wcm90b3R5cGUu0LfQsNC00LDRgtGM0JjQvNGPID0gZnVuY3Rpb24o0L3QvtC80LXRgCwg0LjQvNGPKQp7CiAgICB2YXIg0LwgPSDQvNGD0YDQvtC8LtC80L7QtNGD0LvQuFvQvdC+0LzQtdGAXTsKICAgINC8WzBdID0g0LjQvNGPOwp9OwrQnNC+0LTRg9C70LgucHJvdG90eXBlLtC30LDQtNCw0YLRjNCd0L7QvNC10YAgPSBmdW5jdGlvbijRgdGC0LDRgNGL0LksINC90L7QstGL0LkpCnsKICAgIHZhciDQuNGB0YLQvtGH0L3QuNC6ID0g0LzRg9GA0L7QvC7QvNC+0LTRg9C70Lhb0YHRgtCw0YDRi9C5XTsKICAgIHZhciDQvdCw0LfQvdCw0YfQtdC90LjQtSA9INC80YPRgNC+0Lwu0LzQvtC00YPQu9C4W9C90L7QstGL0LldOwogICAgCn07", +"ZnVuY3Rpb24g0JzQvtC00YPQu9C4KCkKewogICAgCn0K0JzQvtC00YPQu9C4LnByb3RvdHlwZS7RgdCy0L7QudGB0YLQstCwID0gZnVuY3Rpb24o0L3QvtC80LXRgCkKewogICAgdmFyINC8ID0g0LzRg9GA0L7QvC7QvNC+0LTRg9C70Lhb0L3QvtC80LXRgF07CiAgICByZXR1cm4gKHR5cGVvZiDQvFsyXSAhPSAidW5kZWZpbmVkIikgPyDQvFsyXSA6IHt9Owp9OwrQnNC+0LTRg9C70LgucHJvdG90eXBlLtC30LDQtNCw0YLRjNCh0LLQvtC50YHRgtCy0LAgPSBmdW5jdGlvbijQvdC+0LzQtdGALCDRgdCy0L7QudGB0YLQstCwKQp7CiAgICB2YXIg0LwgPSDQvNGD0YDQvtC8LtC80L7QtNGD0LvQuFvQvdC+0LzQtdGAXTsKICAgINC8WzJdID0g0YHQstC+0LnRgdGC0LLQsDsKfTsK0JzQvtC00YPQu9C4LnByb3RvdHlwZS7RgdGC0LDRgtGD0YEgPSBmdW5jdGlvbijQvdC+0LzQtdGAKQp7CiAgICB2YXIg0YHQsiA9IHRoaXMu0YHQstC+0LnRgdGC0LLQsCjQvdC+0LzQtdGAKTsKICAgIGlmICgi0YHRgtCw0YLRg9GBIiBpbiDRgdCyKQogICAgewogICAgICAgIHJldHVybiDRgdCyWyLRgdGC0LDRgtGD0YEiXTsKICAgIH0KICAgIC8vINCf0L4g0YPQvNC+0LvRh9Cw0L3QuNGOINC80L7QtNGD0LvRjCDQuNGB0L/QvtC70L3Rj9C10LzRi9C5ICjRgdGC0LDRgtGD0YEgPT0gdHJ1ZSkuCiAgICByZXR1cm4gdHJ1ZTsKfTsK0JzQvtC00YPQu9C4LnByb3RvdHlwZS7Qt9Cw0LTQsNGC0YzQodGC0LDRgtGD0YEgPSBmdW5jdGlvbijQvdC+0LzQtdGALCDRgdGC0LDRgtGD0YEpCnsKICAgIHZhciDRgdCyID0gdGhpcy7RgdCy0L7QudGB0YLQstCwKNC90L7QvNC10YApOwogICAg0YHQslsi0YHRgtCw0YLRg9GBIl0gPSDRgdGC0LDRgtGD0YE7CiAgICB0aGlzLtC30LDQtNCw0YLRjNCh0LLQvtC50YHRgtCy0LAo0L3QvtC80LXRgCwg0YHQsik7Cn07CtCc0L7QtNGD0LvQuC5wcm90b3R5cGUu0LfQsNC00LDRgtGM0JjQvNGPID0gZnVuY3Rpb24o0L3QvtC80LXRgCwg0LjQvNGPKQp7CiAgICB2YXIg0LwgPSDQvNGD0YDQvtC8LtC80L7QtNGD0LvQuFvQvdC+0LzQtdGAXTsKICAgINC8WzBdID0g0LjQvNGPOwp9OwrQnNC+0LTRg9C70LgucHJvdG90eXBlLtC30LDQtNCw0YLRjNCd0L7QvNC10YAgPSBmdW5jdGlvbijRgdGC0LDRgNGL0LksINC90L7QstGL0LkpCnsKICAgIGNvbnNvbGUubG9nKCLQt9Cw0LTQsNGC0Ywg0L3QvtC80LXRgC4gJyIgKyDRgdGC0LDRgNGL0LkgKyAiJyAtPiAnIiArINC90L7QstGL0LkgKyAiJyIpOwogICAgdmFyINC80L7QtNGD0LvRjCA9INC80YPRgNC+0Lwu0LzQvtC00YPQu9C4W9GB0YLQsNGA0YvQuV07CiAgICAvLyDQo9C00LDQu9GP0LXQvCDRgdGC0LDRgNGD0Y4g0LfQsNC/0LjRgdGMLgogICAg0LzRg9GA0L7QvC7QvNC+0LTRg9C70Lguc3BsaWNlKNGB0YLQsNGA0YvQuSwgMSk7CiAgICAvLyDQlNC+0LHQsNCy0LvRj9C10Lwg0LzQvtC00YPQu9GMINCyINC90L7QstGD0Y4g0L/QvtC30LjRhtC40Y4uCiAgICDQvNGD0YDQvtC8LtC80L7QtNGD0LvQuC5zcGxpY2Uo0L3QvtCy0YvQuSwgMCwg0LzQvtC00YPQu9GMKTsKfTs=", ], [ "муром.ПанельУправления", -"ZnVuY3Rpb24g0J/QsNC90LXQu9GM0KPQv9GA0LDQstC70LXQvdC40Y8oKQp7CiAgICB0aGlzLtC80L7QtNGD0LvQuCA9IG5ldyDQnNC+0LTRg9C70LgoKTsKICAgIHRoaXMu0YHQvtC30LTQsNGC0YzQntGB0L3QvtCy0YMoKTsKICAgIHRoaXMu0YHQvtC30LTQsNGC0YzQodC+0YXRgNCw0L3QtdC90LjQtdCh0LrQsNGH0LjQstCw0L3QuNC10JTQvtCx0LDQstC70LXQvdC40LUoKTsKICAgIHRoaXMu0YHQvtC30LTQsNGC0YzQodC/0LjRgdC+0LrQnNC+0LTRg9C70LXQuSgpOwogICAgdGhpcy7RgdC+0LfQtNCw0YLRjNCh0LLQvtC50YHRgtCy0LDQnNC+0LTRg9C70Y8oKTsKfQrQn9Cw0L3QtdC70YzQo9C/0YDQsNCy0LvQtdC90LjRjy5wcm90b3R5cGUu0YHQvtC30LTQsNGC0YzQntCx0ZHRgNGC0LrRg9Cv0YfQtdC50LrRgyA9IGZ1bmN0aW9uKCkKewogICAgdmFyINC+0LHRkdGA0YLQutCwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGFibGUiKTsKICAgINC+0LHRkdGA0YLQutCwLnN0eWxlLmNzc1RleHQgPSAid2lkdGg6IDEwMCU7IjsKICAgIHZhciDRgNGP0LQgPSDQvtCx0ZHRgNGC0LrQsC5pbnNlcnRSb3coKTsKICAgIHZhciDRj9GH0LXQudC60LAgPSDRgNGP0LQuaW5zZXJ0Q2VsbCgpOwogICAgcmV0dXJuIFvQvtCx0ZHRgNGC0LrQsCwg0Y/Rh9C10LnQutCwXTsKfTsK0J/QsNC90LXQu9GM0KPQv9GA0LDQstC70LXQvdC40Y8ucHJvdG90eXBlLtGB0L7Qt9C00LDRgtGM0J7RgdC90L7QstGDID0gZnVuY3Rpb24oKQp7CiAgICB0aGlzLtC40YQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpOwogICAgdGhpcy7QuNGELnN0eWxlLmNzc1RleHQgPSAid2lkdGg6IDEwMCU7IjsKICAgIHZhciDRgNGP0LQgPSB0aGlzLtC40YQuaW5zZXJ0Um93KCk7CiAgICB0aGlzLtC70LXQstC+ID0g0YDRj9C0Lmluc2VydENlbGwoKTsKICAgIHRoaXMu0LvQtdCy0L4uc3R5bGUuY3NzVGV4dCA9ICJ3aWR0aDogMTAwJTsiOwogICAgdmFyINC/0YDQsNCy0L4gPSDRgNGP0LQuaW5zZXJ0Q2VsbCgpOwogICAg0L/RgNCw0LLQvi5zdHlsZS5jc3NUZXh0ID0gImhlaWdodDogMTAwJTsiOwogICAgdGhpcy7QutC90L7Qv9C60LggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpOwogICAgdGhpcy7QutC90L7Qv9C60Lguc3R5bGUuY3NzVGV4dCA9ICJoZWlnaHQ6IDEwMCU7IjsKICAgINC/0YDQsNCy0L4uYXBwZW5kQ2hpbGQodGhpcy7QutC90L7Qv9C60LgpOwogICAg0YDRj9C0ID0gdGhpcy7QuNGELmluc2VydFJvdygpOwogICAgdGhpcy7QvdC40LcgPSDRgNGP0LQuaW5zZXJ0Q2VsbCgpOwogICAgdGhpcy7QvdC40LcuY29sU3BhbiA9IDI7Cn07CtCf0LDQvdC10LvRjNCj0L/RgNCw0LLQu9C10L3QuNGPLnByb3RvdHlwZS7RgdC+0LfQtNCw0YLRjNCh0L/QuNGB0L7QutCc0L7QtNGD0LvQtdC5ID0gZnVuY3Rpb24oKQp7CiAgICB0aGlzLtGB0L/QuNGB0L7QuiA9IG5ldyDQodC/0LjRgdC+0LrQnNC+0LTRg9C70LXQuSgpOwogICAgdGhpcy7RgdC/0LjRgdC+0Lou0LfQsNC00LDRgtGM0KHQv9C40YHQvtC6KHRoaXMu0YHQv9C40YHQvtC60JzQvtC00YPQu9C10LkoKSk7CiAgICB2YXIg0L7RjyA9IHRoaXMu0YHQvtC30LTQsNGC0YzQntCx0ZHRgNGC0LrRg9Cv0YfQtdC50LrRgygpOwogICAgdGhpcy7Qu9C10LLQvi5hcHBlbmRDaGlsZCjQvtGPWzBdKTsKICAgINC+0Y9bMV0uYXBwZW5kQ2hpbGQodGhpcy7RgdC/0LjRgdC+0Lou0LjRhCk7Cn07CtCf0LDQvdC10LvRjNCj0L/RgNCw0LLQu9C10L3QuNGPLnByb3RvdHlwZS7RgdC+0LfQtNCw0YLRjNCh0LLQvtC50YHRgtCy0LDQnNC+0LTRg9C70Y8gPSBmdW5jdGlvbigpCnsKICAgIHRoaXMu0YHQstC+0LnRgdGC0LLQsCA9IG5ldyDQodCy0L7QudGB0YLQstCw0JzQvtC00YPQu9GPKCk7CiAgICDQvtGPID0gdGhpcy7RgdC+0LfQtNCw0YLRjNCe0LHRkdGA0YLQutGD0K/Rh9C10LnQutGDKCk7CiAgICB0aGlzLtC90LjQty5hcHBlbmRDaGlsZCjQvtGPWzBdKTsKICAgINC+0Y9bMV0uYXBwZW5kQ2hpbGQodGhpcy7RgdCy0L7QudGB0YLQstCwLtC40YQpOwp9OwrQn9Cw0L3QtdC70YzQo9C/0YDQsNCy0LvQtdC90LjRjy5wcm90b3R5cGUu0YHQv9C40YHQvtC60JzQvtC00YPQu9C10LkgPSBmdW5jdGlvbigpCnsKICAgIHZhciDRgdC/0LjRgdC+0LogPSBbXTsKICAgIGZvciAodmFyINC90L7QvNC10YAgaW4g0LzRg9GA0L7QvC7QvNC+0LTRg9C70LgpCiAgICB7CiAgICAgICAgdmFyINC8ID0g0LzRg9GA0L7QvC7QvNC+0LTRg9C70Lhb0L3QvtC80LXRgF07CiAgICAgICAgdmFyINGB0YLQsNGC0YPRgSA9IHRoaXMu0LzQvtC00YPQu9C4LtGB0YLQsNGC0YPRgSjQvdC+0LzQtdGAKTsKICAgICAgICB2YXIg0LjQvNGPID0g0LxbMF07CiAgICAgICAgdmFyINGN0LvQtdC80LXQvdGCID0gW9GB0YLQsNGC0YPRgSwg0LjQvNGPXTsKICAgICAgICDRgdC/0LjRgdC+0LoucHVzaCjRjdC70LXQvNC10L3Rgik7CiAgICB9CiAgICAKICAgIHJldHVybiDRgdC/0LjRgdC+0Lo7Cn07CtCf0LDQvdC10LvRjNCj0L/RgNCw0LLQu9C10L3QuNGPLnByb3RvdHlwZS7RgdC+0LfQtNCw0YLRjNCa0L3QvtC/0LrRgyA9IGZ1bmN0aW9uKNC40LzRjywg0YPQstC10LTQvtC80LjRgtC10LvRjCkKewogICAgdmFyINC60L3QvtC/0LrQsCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpOwogICAg0LrQvdC+0L/QutCwLmlubmVySFRNTCA9INC40LzRjzsKICAgINC60L3QvtC/0LrQsC5zdHlsZS5jc3NUZXh0ID0gIndpZHRoOiAxMDAlOyI7CiAgICDQutC90L7Qv9C60LAuY2xhc3NMaXN0LmFkZCgi0LzRg9GA0L7QvC3QutC90L7Qv9C60LAiKTsKICAgINC60L3QvtC/0LrQsC5vbmNsaWNrID0gZnVuY3Rpb24oKQogICAgewogICAgICAgINGD0LLQtdC00L7QvNC40YLQtdC70Ywu0YPQstC10LTQvtC80LjRgtGMKCk7ICAKICAgIH07CiAgICAKICAgIHJldHVybiDQutC90L7Qv9C60LA7Cn07CtCf0LDQvdC10LvRjNCj0L/RgNCw0LLQu9C10L3QuNGPLnByb3RvdHlwZS7RgdC+0LfQtNCw0YLRjNCh0L7RhdGA0LDQvdC10L3QuNC10KHQutCw0YfQuNCy0LDQvdC40LXQlNC+0LHQsNCy0LvQtdC90LjQtSA9IGZ1bmN0aW9uKCkKewogICAgdmFyINGPID0gdGhpczsKICAgIAogICAgdmFyINGA0Y/QtCA9IHRoaXMu0LrQvdC+0L/QutC4Lmluc2VydFJvdygpOwogICAgdmFyINGP0YfQtdC50LrQsCA9INGA0Y/QtC5pbnNlcnRDZWxsKCk7CiAgICB0aGlzLtGB0L7RhdGA0LDQvdC40YLRjCA9IG5ldyDQo9Cy0LXQtNC+0LzQuNGC0LXQu9GMKCk7CiAgICB0aGlzLtC60L3QvtC/0LrQsNCh0L7RhdGA0LDQvdC40YLRjCA9IHRoaXMu0YHQvtC30LTQsNGC0YzQmtC90L7Qv9C60YMoItCh0L7RhdGA0LDQvdC40YLRjCIsIHRoaXMu0YHQvtGF0YDQsNC90LjRgtGMKTsKICAgINGP0YfQtdC50LrQsC5hcHBlbmRDaGlsZCh0aGlzLtC60L3QvtC/0LrQsNCh0L7RhdGA0LDQvdC40YLRjCk7CiAgICAKICAgINGA0Y/QtCA9IHRoaXMu0LrQvdC+0L/QutC4Lmluc2VydFJvdygpOwogICAg0Y/Rh9C10LnQutCwID0g0YDRj9C0Lmluc2VydENlbGwoKTsKICAgIHRoaXMu0YHQutCw0YfQsNGC0YwgPSBuZXcg0KPQstC10LTQvtC80LjRgtC10LvRjCgpOwogICAgdGhpcy7QutC90L7Qv9C60LDQodC60LDRh9Cw0YLRjCA9IHRoaXMu0YHQvtC30LTQsNGC0YzQmtC90L7Qv9C60YMoItCh0LrQsNGH0LDRgtGMIiwgdGhpcy7RgdC60LDRh9Cw0YLRjCk7CiAgICDRj9GH0LXQudC60LAuYXBwZW5kQ2hpbGQodGhpcy7QutC90L7Qv9C60LDQodC60LDRh9Cw0YLRjCk7CiAgICAKICAgIC8vINCf0YDQvtCx0LXQuy4KICAgINGA0Y/QtCA9IHRoaXMu0LrQvdC+0L/QutC4Lmluc2VydFJvdygpOwogICAg0Y/Rh9C10LnQutCwID0g0YDRj9C0Lmluc2VydENlbGwoKTsKICAgINGP0YfQtdC50LrQsC5zdHlsZS5jc3NUZXh0ID0gImhlaWdodDogMTAwJTsiOwoKICAgINGA0Y/QtCA9IHRoaXMu0LrQvdC+0L/QutC4Lmluc2VydFJvdygpOwogICAg0Y/Rh9C10LnQutCwID0g0YDRj9C0Lmluc2VydENlbGwoKTsKICAgIHRoaXMu0LTQvtCx0LDQstC40YLRjCA9IG5ldyDQo9Cy0LXQtNC+0LzQuNGC0LXQu9GMKCk7CiAgICB0aGlzLtC60L3QvtC/0LrQsNCU0L7QsdCw0LLQuNGC0YwgPSB0aGlzLtGB0L7Qt9C00LDRgtGM0JrQvdC+0L/QutGDKCLQlNC+0LHQsNCy0LjRgtGMIiwgdGhpcy7QtNC+0LHQsNCy0LjRgtGMKTsKICAgINGP0YfQtdC50LrQsC5hcHBlbmRDaGlsZCh0aGlzLtC60L3QvtC/0LrQsNCU0L7QsdCw0LLQuNGC0YwpOwp9OwoKZnVuY3Rpb24g0L/RgNC+0LLQtdGA0LjRgtGM0J/QoygpCnsKICAgIGNvbnNvbGUubG9nKCLQv9GA0L7QstC10YDQuNGC0YzQn9CjIik7CiAgICB2YXIg0L/RgyA9IG5ldyDQn9Cw0L3QtdC70YzQo9C/0YDQsNCy0LvQtdC90LjRjygpOwogICAgdmFyINC+0LHQu9Cw0YHRgtC4ID0g0LzRg9GA0L7QvC7RgdC+0LfQtNCw0YLRjNCb0LXQstGD0Y7Qn9GA0LDQstGD0Y7QntCx0LvQsNGB0YLQuCgpOwogICAgdmFyINC/0L4gPSDQvtCx0LvQsNGB0YLQuFsxXTsKICAgINC/0L4uYXBwZW5kQ2hpbGQo0L/Rgy7QuNGEKTsKICAgINC80YPRgNC+0Lwu0YHQvtC30LTQsNGC0YzQoNC10LTQsNC60YLQvtGA0JLQm9C10LLQvtC50J7QsdC70LDRgdGC0LgoKTsKICAgIHZhciDRgdC/0LjRgdC+0LogPSDQv9GDLtGB0L/QuNGB0L7QujsKICAgIHZhciDRgdCy0L7QudGB0YLQstCwID0g0L/Rgy7RgdCy0L7QudGB0YLQstCwOwogICAgdmFyINC80L7QtNGD0LvQuCA9INC/0YMu0LzQvtC00YPQu9C4OwogICAgCiAgICBmdW5jdGlvbiDQvtGC0L7QsdGA0LDQt9C40YLRjNCa0L7QtNCS0YvQsdGA0LDQvdC90L7Qs9C+0JzQvtC00YPQu9GPKCkKICAgIHsKICAgICAgICB2YXIg0LzQvtC00YPQu9GMID0g0LzRg9GA0L7QvC7QvNC+0LTRg9C70Lhb0YHQv9C40YHQvtC6LtCy0YvQsdC+0YBdOwogICAgICAgIHZhciDQutC+0LQgPSDQvNGD0YDQvtC8LmF0b2Io0LzQvtC00YPQu9GMWzFdKTsKICAgICAgICDQvNGD0YDQvtC8LtGA0LXQtNCw0LrRgtC+0YAuc2Vzc2lvbi5zZXRWYWx1ZSjQutC+0LQpOwogICAgfQogICAgZnVuY3Rpb24g0L7RgtC+0LHRgNCw0LfQuNGC0YzQodCy0L7QudGB0YLQstCw0JLRi9Cx0YDQsNC90L3QvtCz0L7QnNC+0LTRg9C70Y8oKQogICAgewogICAgICAgIHZhciDQvNC+0LTRg9C70YwgPSDQvNGD0YDQvtC8LtC80L7QtNGD0LvQuFvRgdC/0LjRgdC+0Lou0LLRi9Cx0L7RgF07CiAgICAgICAgCiAgICAgICAg0YHQstC+0LnRgdGC0LLQsC7QvdC+0LzQtdGAID0g0YHQv9C40YHQvtC6LtCy0YvQsdC+0YA7CiAgICAgICAg0YHQstC+0LnRgdGC0LLQsC7QuNC80Y8gPSDQvNC+0LTRg9C70YxbMF07CiAgICAgICAg0YHQstC+0LnRgdGC0LLQsC7RgdGC0LDRgtGD0YEgPSDQv9GDLtC80L7QtNGD0LvQuC7RgdGC0LDRgtGD0YEo0YHQv9C40YHQvtC6LtCy0YvQsdC+0YApOwogICAgfQogICAg0YHQv9C40YHQvtC6LtCy0YvQsdGA0LDQu9C4LtC/0L7QtNC/0LjRgdCw0YLRjNCc0L3QvtCz0L4oWwogICAgICAgINC+0YLQvtCx0YDQsNC30LjRgtGM0JrQvtC00JLRi9Cx0YDQsNC90L3QvtCz0L7QnNC+0LTRg9C70Y8sCiAgICAgICAg0L7RgtC+0LHRgNCw0LfQuNGC0YzQodCy0L7QudGB0YLQstCw0JLRi9Cx0YDQsNC90L3QvtCz0L7QnNC+0LTRg9C70Y8sCiAgICBdKTsKICAgIGZ1bmN0aW9uINC+0LHQvdC+0LLQuNGC0YzQodGC0LDRgtGD0YHQnNC+0LTRg9C70Y8oKQogICAgewogICAgICAgIHZhciDQvdC+0LzQtdGAID0g0YHQv9C40YHQvtC6LtCy0YvQsdC+0YA7CiAgICAgICAgdmFyINC40LzRjyA9INGB0LLQvtC50YHRgtCy0LAu0LjQvNGPOwogICAgICAgIHZhciDRgdGC0LDRgtGD0YEgPSDRgdCy0L7QudGB0YLQstCwLtGB0YLQsNGC0YPRgTsKICAgICAgICDQvNC+0LTRg9C70Lgu0LfQsNC00LDRgtGM0KHRgtCw0YLRg9GBKNC90L7QvNC10YAsINGB0YLQsNGC0YPRgSk7CiAgICAgICAg0YHQv9C40YHQvtC6LtC+0LHQvdC+0LLQuNGC0YzQrdC70LXQvNC10L3RgijQvdC+0LzQtdGALCDRgdGC0LDRgtGD0YEsINC40LzRjyk7CiAgICB9CiAgICDRgdCy0L7QudGB0YLQstCwLtC40LfQvNC10L3QuNC70LjQodGC0LDRgtGD0YEu0L/QvtC00L/QuNGB0LDRgtGMKNC+0LHQvdC+0LLQuNGC0YzQodGC0LDRgtGD0YHQnNC+0LTRg9C70Y8pOwogICAgZnVuY3Rpb24g0L7QsdC90L7QstC40YLRjNCY0LzRj9Cc0L7QtNGD0LvRjygpCiAgICB7CiAgICAgICAgdmFyINC90L7QvNC10YAgPSDRgdC/0LjRgdC+0Lou0LLRi9Cx0L7RgDsKICAgICAgICB2YXIg0LjQvNGPID0g0YHQstC+0LnRgdGC0LLQsC7QuNC80Y87CiAgICAgICAgdmFyINGB0YLQsNGC0YPRgSA9INGB0LLQvtC50YHRgtCy0LAu0YHRgtCw0YLRg9GBOwogICAgICAgINC80L7QtNGD0LvQuC7Qt9Cw0LTQsNGC0YzQmNC80Y8o0L3QvtC80LXRgCwg0LjQvNGPKTsKICAgICAgICDRgdC/0LjRgdC+0Lou0L7QsdC90L7QstC40YLRjNCt0LvQtdC80LXQvdGCKNC90L7QvNC10YAsINGB0YLQsNGC0YPRgSwg0LjQvNGPKTsKICAgIH0KICAgINGB0LLQvtC50YHRgtCy0LAu0LjQt9C80LXQvdC40LvQuNCY0LzRjy7Qv9C+0LTQv9C40YHQsNGC0Ywo0L7QsdC90L7QstC40YLRjNCY0LzRj9Cc0L7QtNGD0LvRjyk7CiAgICBmdW5jdGlvbiDQvtCx0L3QvtCy0LjRgtGM0J3QvtC80LXRgNCc0L7QtNGD0LvRjygpCiAgICB7CiAgICAgICAgdmFyINGB0YLQsNGA0YvQuSA9INGB0L/QuNGB0L7Qui7QstGL0LHQvtGAOwogICAgICAgIHZhciDQvdC+0LLRi9C5ID0g0YHQstC+0LnRgdGC0LLQsC7QvdC+0LzQtdGAOwogICAgICAgIGlmICjQvdC+0LLRi9C5ID4g0LzRg9GA0L7QvC7QvNC+0LTRg9C70LgubGVuZ3RoIC0gMSkKICAgICAgICB7CiAgICAgICAgICAgINC90L7QstGL0LkgPSDQvNGD0YDQvtC8LtC80L7QtNGD0LvQuC5sZW5ndGggLSAxOwogICAgICAgIH0KICAgICAgICDQvNC+0LTRg9C70Lgu0LfQsNC00LDRgtGM0J3QvtC80LXRgCjRgdGC0LDRgNGL0LksINC90L7QstGL0LkpOwogICAgICAgIC8vY29uc29sZS5sb2coItCd0L7QstGL0Lkg0L3QvtC80LXRgDogJyIgKyDQvdC+0LzQtdGAICsgIiciKTsKICAgICAgICB0aGlzLtGB0L/QuNGB0L7Qui7Qt9Cw0LTQsNGC0YzQodC/0LjRgdC+0LoodGhpcy7RgdC/0LjRgdC+0LrQnNC+0LTRg9C70LXQuSgpKTsKICAgICAgICDRgdC/0LjRgdC+0Lou0LLRi9Cx0YDQsNGC0Ywo0L3QvtCy0YvQuSk7CiAgICB9CiAgICDRgdCy0L7QudGB0YLQstCwLtC40LfQvNC10L3QuNC70LjQndC+0LzQtdGALtC/0L7QtNC/0LjRgdCw0YLRjCjQvtCx0L3QvtCy0LjRgtGM0J3QvtC80LXRgNCc0L7QtNGD0LvRjyk7CiAgICDRgdC/0LjRgdC+0Lou0LLRi9Cx0YDQsNGC0YwoMCk7Cn0KCmlmICgh0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0LfQsNC/0YDQvtGI0LXQvdCX0LDQsigpKQp7CiAgICDQv9GA0L7QstC10YDQuNGC0YzQn9CjKCk7Cn0=", +"ZnVuY3Rpb24g0J/QsNC90LXQu9GM0KPQv9GA0LDQstC70LXQvdC40Y8oKQp7CiAgICB0aGlzLtC80L7QtNGD0LvQuCA9IG5ldyDQnNC+0LTRg9C70LgoKTsKICAgIHRoaXMu0YHQvtC30LTQsNGC0YzQntGB0L3QvtCy0YMoKTsKICAgIHRoaXMu0YHQvtC30LTQsNGC0YzQodC+0YXRgNCw0L3QtdC90LjQtdCh0LrQsNGH0LjQstCw0L3QuNC10JTQvtCx0LDQstC70LXQvdC40LUoKTsKICAgIHRoaXMu0YHQvtC30LTQsNGC0YzQodC/0LjRgdC+0LrQnNC+0LTRg9C70LXQuSgpOwogICAgdGhpcy7RgdC+0LfQtNCw0YLRjNCh0LLQvtC50YHRgtCy0LDQnNC+0LTRg9C70Y8oKTsKfQrQn9Cw0L3QtdC70YzQo9C/0YDQsNCy0LvQtdC90LjRjy5wcm90b3R5cGUu0YHQvtC30LTQsNGC0YzQntCx0ZHRgNGC0LrRg9Cv0YfQtdC50LrRgyA9IGZ1bmN0aW9uKCkKewogICAgdmFyINC+0LHRkdGA0YLQutCwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGFibGUiKTsKICAgINC+0LHRkdGA0YLQutCwLnN0eWxlLmNzc1RleHQgPSAid2lkdGg6IDEwMCU7IjsKICAgIHZhciDRgNGP0LQgPSDQvtCx0ZHRgNGC0LrQsC5pbnNlcnRSb3coKTsKICAgIHZhciDRj9GH0LXQudC60LAgPSDRgNGP0LQuaW5zZXJ0Q2VsbCgpOwogICAgcmV0dXJuIFvQvtCx0ZHRgNGC0LrQsCwg0Y/Rh9C10LnQutCwXTsKfTsK0J/QsNC90LXQu9GM0KPQv9GA0LDQstC70LXQvdC40Y8ucHJvdG90eXBlLtGB0L7Qt9C00LDRgtGM0J7RgdC90L7QstGDID0gZnVuY3Rpb24oKQp7CiAgICB0aGlzLtC40YQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpOwogICAgdGhpcy7QuNGELnN0eWxlLmNzc1RleHQgPSAid2lkdGg6IDEwMCU7IjsKICAgIHZhciDRgNGP0LQgPSB0aGlzLtC40YQuaW5zZXJ0Um93KCk7CiAgICB0aGlzLtC70LXQstC+ID0g0YDRj9C0Lmluc2VydENlbGwoKTsKICAgIHRoaXMu0LvQtdCy0L4uc3R5bGUuY3NzVGV4dCA9ICJ3aWR0aDogMTAwJTsiOwogICAgdmFyINC/0YDQsNCy0L4gPSDRgNGP0LQuaW5zZXJ0Q2VsbCgpOwogICAg0L/RgNCw0LLQvi5zdHlsZS5jc3NUZXh0ID0gImhlaWdodDogMTAwJTsiOwogICAgdGhpcy7QutC90L7Qv9C60LggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpOwogICAgdGhpcy7QutC90L7Qv9C60Lguc3R5bGUuY3NzVGV4dCA9ICJoZWlnaHQ6IDEwMCU7IjsKICAgINC/0YDQsNCy0L4uYXBwZW5kQ2hpbGQodGhpcy7QutC90L7Qv9C60LgpOwogICAg0YDRj9C0ID0gdGhpcy7QuNGELmluc2VydFJvdygpOwogICAgdGhpcy7QvdC40LcgPSDRgNGP0LQuaW5zZXJ0Q2VsbCgpOwogICAgdGhpcy7QvdC40LcuY29sU3BhbiA9IDI7Cn07CtCf0LDQvdC10LvRjNCj0L/RgNCw0LLQu9C10L3QuNGPLnByb3RvdHlwZS7RgdC+0LfQtNCw0YLRjNCh0L/QuNGB0L7QutCc0L7QtNGD0LvQtdC5ID0gZnVuY3Rpb24oKQp7CiAgICB0aGlzLtGB0L/QuNGB0L7QuiA9IG5ldyDQodC/0LjRgdC+0LrQnNC+0LTRg9C70LXQuSgpOwogICAgdGhpcy7RgdC/0LjRgdC+0Lou0LfQsNC00LDRgtGM0KHQv9C40YHQvtC6KHRoaXMu0YHQv9C40YHQvtC60JzQvtC00YPQu9C10LkoKSk7CiAgICB2YXIg0L7RjyA9IHRoaXMu0YHQvtC30LTQsNGC0YzQntCx0ZHRgNGC0LrRg9Cv0YfQtdC50LrRgygpOwogICAgdGhpcy7Qu9C10LLQvi5hcHBlbmRDaGlsZCjQvtGPWzBdKTsKICAgINC+0Y9bMV0uYXBwZW5kQ2hpbGQodGhpcy7RgdC/0LjRgdC+0Lou0LjRhCk7Cn07CtCf0LDQvdC10LvRjNCj0L/RgNCw0LLQu9C10L3QuNGPLnByb3RvdHlwZS7RgdC+0LfQtNCw0YLRjNCh0LLQvtC50YHRgtCy0LDQnNC+0LTRg9C70Y8gPSBmdW5jdGlvbigpCnsKICAgIHRoaXMu0YHQstC+0LnRgdGC0LLQsCA9IG5ldyDQodCy0L7QudGB0YLQstCw0JzQvtC00YPQu9GPKCk7CiAgICDQvtGPID0gdGhpcy7RgdC+0LfQtNCw0YLRjNCe0LHRkdGA0YLQutGD0K/Rh9C10LnQutGDKCk7CiAgICB0aGlzLtC90LjQty5hcHBlbmRDaGlsZCjQvtGPWzBdKTsKICAgINC+0Y9bMV0uYXBwZW5kQ2hpbGQodGhpcy7RgdCy0L7QudGB0YLQstCwLtC40YQpOwp9OwrQn9Cw0L3QtdC70YzQo9C/0YDQsNCy0LvQtdC90LjRjy5wcm90b3R5cGUu0YHQv9C40YHQvtC60JzQvtC00YPQu9C10LkgPSBmdW5jdGlvbigpCnsKICAgIHZhciDRgdC/0LjRgdC+0LogPSBbXTsKICAgIGZvciAodmFyINC90L7QvNC10YAgaW4g0LzRg9GA0L7QvC7QvNC+0LTRg9C70LgpCiAgICB7CiAgICAgICAgdmFyINC8ID0g0LzRg9GA0L7QvC7QvNC+0LTRg9C70Lhb0L3QvtC80LXRgF07CiAgICAgICAgdmFyINGB0YLQsNGC0YPRgSA9IHRoaXMu0LzQvtC00YPQu9C4LtGB0YLQsNGC0YPRgSjQvdC+0LzQtdGAKTsKICAgICAgICB2YXIg0LjQvNGPID0g0LxbMF07CiAgICAgICAgdmFyINGN0LvQtdC80LXQvdGCID0gW9GB0YLQsNGC0YPRgSwg0LjQvNGPXTsKICAgICAgICDRgdC/0LjRgdC+0LoucHVzaCjRjdC70LXQvNC10L3Rgik7CiAgICB9CiAgICAKICAgIHJldHVybiDRgdC/0LjRgdC+0Lo7Cn07CtCf0LDQvdC10LvRjNCj0L/RgNCw0LLQu9C10L3QuNGPLnByb3RvdHlwZS7RgdC+0LfQtNCw0YLRjNCa0L3QvtC/0LrRgyA9IGZ1bmN0aW9uKNC40LzRjywg0YPQstC10LTQvtC80LjRgtC10LvRjCkKewogICAgdmFyINC60L3QvtC/0LrQsCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpOwogICAg0LrQvdC+0L/QutCwLmlubmVySFRNTCA9INC40LzRjzsKICAgINC60L3QvtC/0LrQsC5zdHlsZS5jc3NUZXh0ID0gIndpZHRoOiAxMDAlOyI7CiAgICDQutC90L7Qv9C60LAuY2xhc3NMaXN0LmFkZCgi0LzRg9GA0L7QvC3QutC90L7Qv9C60LAiKTsKICAgINC60L3QvtC/0LrQsC5vbmNsaWNrID0gZnVuY3Rpb24oKQogICAgewogICAgICAgINGD0LLQtdC00L7QvNC40YLQtdC70Ywu0YPQstC10LTQvtC80LjRgtGMKCk7ICAKICAgIH07CiAgICAKICAgIHJldHVybiDQutC90L7Qv9C60LA7Cn07CtCf0LDQvdC10LvRjNCj0L/RgNCw0LLQu9C10L3QuNGPLnByb3RvdHlwZS7RgdC+0LfQtNCw0YLRjNCh0L7RhdGA0LDQvdC10L3QuNC10KHQutCw0YfQuNCy0LDQvdC40LXQlNC+0LHQsNCy0LvQtdC90LjQtSA9IGZ1bmN0aW9uKCkKewogICAgdmFyINGPID0gdGhpczsKICAgIAogICAgdmFyINGA0Y/QtCA9IHRoaXMu0LrQvdC+0L/QutC4Lmluc2VydFJvdygpOwogICAgdmFyINGP0YfQtdC50LrQsCA9INGA0Y/QtC5pbnNlcnRDZWxsKCk7CiAgICB0aGlzLtGB0L7RhdGA0LDQvdC40YLRjCA9IG5ldyDQo9Cy0LXQtNC+0LzQuNGC0LXQu9GMKCk7CiAgICB0aGlzLtC60L3QvtC/0LrQsNCh0L7RhdGA0LDQvdC40YLRjCA9IHRoaXMu0YHQvtC30LTQsNGC0YzQmtC90L7Qv9C60YMoItCh0L7RhdGA0LDQvdC40YLRjCIsIHRoaXMu0YHQvtGF0YDQsNC90LjRgtGMKTsKICAgINGP0YfQtdC50LrQsC5hcHBlbmRDaGlsZCh0aGlzLtC60L3QvtC/0LrQsNCh0L7RhdGA0LDQvdC40YLRjCk7CiAgICAKICAgINGA0Y/QtCA9IHRoaXMu0LrQvdC+0L/QutC4Lmluc2VydFJvdygpOwogICAg0Y/Rh9C10LnQutCwID0g0YDRj9C0Lmluc2VydENlbGwoKTsKICAgIHRoaXMu0YHQutCw0YfQsNGC0YwgPSBuZXcg0KPQstC10LTQvtC80LjRgtC10LvRjCgpOwogICAgdGhpcy7QutC90L7Qv9C60LDQodC60LDRh9Cw0YLRjCA9IHRoaXMu0YHQvtC30LTQsNGC0YzQmtC90L7Qv9C60YMoItCh0LrQsNGH0LDRgtGMIiwgdGhpcy7RgdC60LDRh9Cw0YLRjCk7CiAgICDRj9GH0LXQudC60LAuYXBwZW5kQ2hpbGQodGhpcy7QutC90L7Qv9C60LDQodC60LDRh9Cw0YLRjCk7CiAgICAKICAgIC8vINCf0YDQvtCx0LXQuy4KICAgINGA0Y/QtCA9IHRoaXMu0LrQvdC+0L/QutC4Lmluc2VydFJvdygpOwogICAg0Y/Rh9C10LnQutCwID0g0YDRj9C0Lmluc2VydENlbGwoKTsKICAgINGP0YfQtdC50LrQsC5zdHlsZS5jc3NUZXh0ID0gImhlaWdodDogMTAwJTsiOwoKICAgINGA0Y/QtCA9IHRoaXMu0LrQvdC+0L/QutC4Lmluc2VydFJvdygpOwogICAg0Y/Rh9C10LnQutCwID0g0YDRj9C0Lmluc2VydENlbGwoKTsKICAgIHRoaXMu0LTQvtCx0LDQstC40YLRjCA9IG5ldyDQo9Cy0LXQtNC+0LzQuNGC0LXQu9GMKCk7CiAgICB0aGlzLtC60L3QvtC/0LrQsNCU0L7QsdCw0LLQuNGC0YwgPSB0aGlzLtGB0L7Qt9C00LDRgtGM0JrQvdC+0L/QutGDKCLQlNC+0LHQsNCy0LjRgtGMIiwgdGhpcy7QtNC+0LHQsNCy0LjRgtGMKTsKICAgINGP0YfQtdC50LrQsC5hcHBlbmRDaGlsZCh0aGlzLtC60L3QvtC/0LrQsNCU0L7QsdCw0LLQuNGC0YwpOwp9OwoKZnVuY3Rpb24g0L/RgNC+0LLQtdGA0LjRgtGM0J/QoygpCnsKICAgIGNvbnNvbGUubG9nKCLQv9GA0L7QstC10YDQuNGC0YzQn9CjIik7CiAgICB2YXIg0L/RgyA9IG5ldyDQn9Cw0L3QtdC70YzQo9C/0YDQsNCy0LvQtdC90LjRjygpOwogICAgdmFyINC+0LHQu9Cw0YHRgtC4ID0g0LzRg9GA0L7QvC7RgdC+0LfQtNCw0YLRjNCb0LXQstGD0Y7Qn9GA0LDQstGD0Y7QntCx0LvQsNGB0YLQuCgpOwogICAgdmFyINC/0L4gPSDQvtCx0LvQsNGB0YLQuFsxXTsKICAgINC/0L4uYXBwZW5kQ2hpbGQo0L/Rgy7QuNGEKTsKICAgINC80YPRgNC+0Lwu0YHQvtC30LTQsNGC0YzQoNC10LTQsNC60YLQvtGA0JLQm9C10LLQvtC50J7QsdC70LDRgdGC0LgoKTsKICAgIHZhciDRgdC/0LjRgdC+0LogPSDQv9GDLtGB0L/QuNGB0L7QujsKICAgIHZhciDRgdCy0L7QudGB0YLQstCwID0g0L/Rgy7RgdCy0L7QudGB0YLQstCwOwogICAgdmFyINC80L7QtNGD0LvQuCA9INC/0YMu0LzQvtC00YPQu9C4OwogICAgCiAgICBmdW5jdGlvbiDQvtGC0L7QsdGA0LDQt9C40YLRjNCa0L7QtNCS0YvQsdGA0LDQvdC90L7Qs9C+0JzQvtC00YPQu9GPKCkKICAgIHsKICAgICAgICB2YXIg0LzQvtC00YPQu9GMID0g0LzRg9GA0L7QvC7QvNC+0LTRg9C70Lhb0YHQv9C40YHQvtC6LtCy0YvQsdC+0YBdOwogICAgICAgIHZhciDQutC+0LQgPSDQvNGD0YDQvtC8LmF0b2Io0LzQvtC00YPQu9GMWzFdKTsKICAgICAgICDQvNGD0YDQvtC8LtGA0LXQtNCw0LrRgtC+0YAuc2Vzc2lvbi5zZXRWYWx1ZSjQutC+0LQpOwogICAgfQogICAgZnVuY3Rpb24g0L7RgtC+0LHRgNCw0LfQuNGC0YzQodCy0L7QudGB0YLQstCw0JLRi9Cx0YDQsNC90L3QvtCz0L7QnNC+0LTRg9C70Y8oKQogICAgewogICAgICAgIHZhciDQvNC+0LTRg9C70YwgPSDQvNGD0YDQvtC8LtC80L7QtNGD0LvQuFvRgdC/0LjRgdC+0Lou0LLRi9Cx0L7RgF07CiAgICAgICAgCiAgICAgICAg0YHQstC+0LnRgdGC0LLQsC7QvdC+0LzQtdGAID0g0YHQv9C40YHQvtC6LtCy0YvQsdC+0YA7CiAgICAgICAg0YHQstC+0LnRgdGC0LLQsC7QuNC80Y8gPSDQvNC+0LTRg9C70YxbMF07CiAgICAgICAg0YHQstC+0LnRgdGC0LLQsC7RgdGC0LDRgtGD0YEgPSDQv9GDLtC80L7QtNGD0LvQuC7RgdGC0LDRgtGD0YEo0YHQv9C40YHQvtC6LtCy0YvQsdC+0YApOwogICAgfQogICAg0YHQv9C40YHQvtC6LtCy0YvQsdGA0LDQu9C4LtC/0L7QtNC/0LjRgdCw0YLRjNCc0L3QvtCz0L4oWwogICAgICAgINC+0YLQvtCx0YDQsNC30LjRgtGM0JrQvtC00JLRi9Cx0YDQsNC90L3QvtCz0L7QnNC+0LTRg9C70Y8sCiAgICAgICAg0L7RgtC+0LHRgNCw0LfQuNGC0YzQodCy0L7QudGB0YLQstCw0JLRi9Cx0YDQsNC90L3QvtCz0L7QnNC+0LTRg9C70Y8sCiAgICBdKTsKICAgIAogICAgZnVuY3Rpb24g0L7QsdC90L7QstC40YLRjNCh0YLQsNGC0YPRgdCc0L7QtNGD0LvRjygpCiAgICB7CiAgICAgICAgdmFyINC90L7QvNC10YAgPSDRgdC/0LjRgdC+0Lou0LLRi9Cx0L7RgDsKICAgICAgICB2YXIg0LjQvNGPID0g0YHQstC+0LnRgdGC0LLQsC7QuNC80Y87CiAgICAgICAgdmFyINGB0YLQsNGC0YPRgSA9INGB0LLQvtC50YHRgtCy0LAu0YHRgtCw0YLRg9GBOwogICAgICAgINC80L7QtNGD0LvQuC7Qt9Cw0LTQsNGC0YzQodGC0LDRgtGD0YEo0L3QvtC80LXRgCwg0YHRgtCw0YLRg9GBKTsKICAgICAgICDRgdC/0LjRgdC+0Lou0L7QsdC90L7QstC40YLRjNCt0LvQtdC80LXQvdGCKNC90L7QvNC10YAsINGB0YLQsNGC0YPRgSwg0LjQvNGPKTsKICAgIH0KICAgINGB0LLQvtC50YHRgtCy0LAu0LjQt9C80LXQvdC40LvQuNCh0YLQsNGC0YPRgS7Qv9C+0LTQv9C40YHQsNGC0Ywo0L7QsdC90L7QstC40YLRjNCh0YLQsNGC0YPRgdCc0L7QtNGD0LvRjyk7CiAgICAKICAgIGZ1bmN0aW9uINC+0LHQvdC+0LLQuNGC0YzQmNC80Y/QnNC+0LTRg9C70Y8oKQogICAgewogICAgICAgIHZhciDQvdC+0LzQtdGAID0g0YHQv9C40YHQvtC6LtCy0YvQsdC+0YA7CiAgICAgICAgdmFyINC40LzRjyA9INGB0LLQvtC50YHRgtCy0LAu0LjQvNGPOwogICAgICAgIHZhciDRgdGC0LDRgtGD0YEgPSDRgdCy0L7QudGB0YLQstCwLtGB0YLQsNGC0YPRgTsKICAgICAgICDQvNC+0LTRg9C70Lgu0LfQsNC00LDRgtGM0JjQvNGPKNC90L7QvNC10YAsINC40LzRjyk7CiAgICAgICAg0YHQv9C40YHQvtC6LtC+0LHQvdC+0LLQuNGC0YzQrdC70LXQvNC10L3RgijQvdC+0LzQtdGALCDRgdGC0LDRgtGD0YEsINC40LzRjyk7CiAgICB9CiAgICDRgdCy0L7QudGB0YLQstCwLtC40LfQvNC10L3QuNC70LjQmNC80Y8u0L/QvtC00L/QuNGB0LDRgtGMKNC+0LHQvdC+0LLQuNGC0YzQmNC80Y/QnNC+0LTRg9C70Y8pOwogICAgCiAgICBmdW5jdGlvbiDQvtCx0L3QvtCy0LjRgtGM0J3QvtC80LXRgNCc0L7QtNGD0LvRjygpCiAgICB7CiAgICAgICAgdmFyINGB0YLQsNGA0YvQuSA9INGB0L/QuNGB0L7Qui7QstGL0LHQvtGAOwogICAgICAgIHZhciDQvdC+0LLRi9C5ID0g0YHQstC+0LnRgdGC0LLQsC7QvdC+0LzQtdGAOwogICAgICAgIGlmICjRgdGC0LDRgNGL0LkgPT0g0L3QvtCy0YvQuSkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKNC90L7QstGL0LkgPiDQvNGD0YDQvtC8LtC80L7QtNGD0LvQuC5sZW5ndGggLSAxKQogICAgICAgIHsKICAgICAgICAgICAg0L3QvtCy0YvQuSA9INC80YPRgNC+0Lwu0LzQvtC00YPQu9C4Lmxlbmd0aCAtIDE7CiAgICAgICAgfQogICAgICAgINC80L7QtNGD0LvQuC7Qt9Cw0LTQsNGC0YzQndC+0LzQtdGAKNGB0YLQsNGA0YvQuSwg0L3QvtCy0YvQuSk7CiAgICAgICAgLy9jb25zb2xlLmxvZygi0J3QvtCy0YvQuSDQvdC+0LzQtdGAOiAnIiArINC90L7QvNC10YAgKyAiJyIpOwogICAgICAgINGB0L/QuNGB0L7Qui7Qt9Cw0LTQsNGC0YzQodC/0LjRgdC+0Loo0L/Rgy7RgdC/0LjRgdC+0LrQnNC+0LTRg9C70LXQuSgpKTsKICAgICAgICDRgdC/0LjRgdC+0Lou0LLRi9Cx0YDQsNGC0Ywo0L3QvtCy0YvQuSk7CiAgICB9CiAgICDRgdCy0L7QudGB0YLQstCwLtC40LfQvNC10L3QuNC70LjQndC+0LzQtdGALtC/0L7QtNC/0LjRgdCw0YLRjCjQvtCx0L3QvtCy0LjRgtGM0J3QvtC80LXRgNCc0L7QtNGD0LvRjyk7CiAgICAKICAgIGZ1bmN0aW9uINC00L7QsdCw0LLQuNGC0YzQnNC+0LTRg9C70YwoKQogICAgewogICAgICAgIHZhciDRh9C40YHQu9C+ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogTWF0aC5mbG9vcigxMDAwKSk7CiAgICAgICAgdmFyINC40LzRjyA9ICLQvdC+0LLRi9C5LSIgKyDRh9C40YHQu9C+OyAKICAgICAgICB2YXIg0LrQvtC0ID0gYGNvbnNvbGUubG9nKCLQndCQ0JTQniDQlNC+0LHQsNCy0LjRgtGMINC60L7QtCDQsiDQvNC+0LTRg9C70YwgJ2AgKyDQuNC80Y8gKyBgJyIpO2A7CiAgICAgICAgdmFyINC80L7QtNGD0LvRjCA9IFvQuNC80Y8sINC80YPRgNC+0LwuYnRvYSjQutC+0LQpXTsKICAgICAgICDQvNGD0YDQvtC8LtC80L7QtNGD0LvQuC5wdXNoKNC80L7QtNGD0LvRjCk7CiAgICAgICAgdmFyINC80L7QtNGD0LvQuCA9INC/0YMu0YHQv9C40YHQvtC60JzQvtC00YPQu9C10LkoKTsKICAgICAgICDRgdC/0LjRgdC+0Lou0LfQsNC00LDRgtGM0KHQv9C40YHQvtC6KNC80L7QtNGD0LvQuCk7CiAgICAgICAg0YHQv9C40YHQvtC6LtCy0YvQsdGA0LDRgtGMKNC80L7QtNGD0LvQuC5sZW5ndGggLSAxKTsKICAgIH0KICAgINC/0YMu0LTQvtCx0LDQstC40YLRjC7Qv9C+0LTQv9C40YHQsNGC0Ywo0LTQvtCx0LDQstC40YLRjNCc0L7QtNGD0LvRjCk7CiAgICAKICAgIGZ1bmN0aW9uINGD0LTQsNC70LjRgtGM0JzQvtC00YPQu9GMKCkKICAgIHsKICAgICAgICB2YXIg0L3QvtC80LXRgCA9INGB0L/QuNGB0L7Qui7QstGL0LHQvtGAOwogICAgICAgIC8vINCj0LTQsNC70LjRgtGMINCy0YvQsdGA0LDQvdC90YvQuSDQvNC+0LTRg9C70YwuCiAgICAgICAg0LzRg9GA0L7QvC7QvNC+0LTRg9C70Lguc3BsaWNlKNC90L7QvNC10YAsIDEpOwogICAgICAgIC0t0L3QvtC80LXRgDsKICAgICAgICBpZiAo0L3QvtC80LXRgCA8IDApCiAgICAgICAgewogICAgICAgICAgICDQvdC+0LzQtdGAID0gMDsKICAgICAgICB9CiAgICAgICAgdmFyINC80L7QtNGD0LvQuCA9INC/0YMu0YHQv9C40YHQvtC60JzQvtC00YPQu9C10LkoKTsKICAgICAgICDRgdC/0LjRgdC+0Lou0LfQsNC00LDRgtGM0KHQv9C40YHQvtC6KNC80L7QtNGD0LvQuCk7CiAgICAgICAg0YHQv9C40YHQvtC6LtCy0YvQsdGA0LDRgtGMKNC90L7QvNC10YApOwogICAgfQogICAg0YHQstC+0LnRgdGC0LLQsC7Rg9C00LDQu9C40YLRjC7Qv9C+0LTQv9C40YHQsNGC0Ywo0YPQtNCw0LvQuNGC0YzQnNC+0LTRg9C70YwpOwogICAgCiAgICBmdW5jdGlvbiDRgdC+0YXRgNCw0L3QuNGC0YzQktGL0LHRgNCw0L3QvdGL0LnQnNC+0LTRg9C70YwgPSBmdW5jdGlvbigpCiAgICB7CiAgICAgICAgdmFyINC80L7QtNGD0LvRjCA9INC80YPRgNC+0Lwu0LzQvtC00YPQu9C4W9GB0L/QuNGB0L7Qui7QstGL0LHQvtGAXTsKICAgICAgICB2YXIg0LrQvtC0ID0g0LzRg9GA0L7QvC7RgNC10LTQsNC60YLQvtGALnNlc3Npb24uZ2V0VmFsdWUoKTsKICAgICAgICDQvNC+0LTRg9C70YxbMV0gPSDQvNGD0YDQvtC8LmJ0b2Eo0LrQvtC0KTsKICAgIH0KICAgIGZ1bmN0aW9uINGB0L7RhdGA0LDQvdC40YLRjCgpCiAgICB7CiAgICAgICAg0L/Rgy7QutC90L7Qv9C60LDQodC+0YXRgNCw0L3QuNGC0YwuZGlzYWJsZWQgPSB0cnVlOwogICAgICAgIGxvY2FsZm9yYWdlLnNldEl0ZW0oIm1vZHVsZXMiLCDQvNGD0YDQvtC8LtC80L7QtNGD0LvQuCwgZnVuY3Rpb24o0L7RiNC40LHQutCwLCDQt9C90LDRh9C10L3QuNC1KXsKICAgICAgICAgICAg0L/Rgy7QutC90L7Qv9C60LDQodC+0YXRgNCw0L3QuNGC0YwuZGlzYWJsZWQgPSBmYWxzZTsKICAgICAgICAgICAgaWYgKNC+0YjQuNCx0LrQsCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigi0J3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0YXRgNCw0L3QuNGC0Ywg0LzQvtC00YPQu9C4OiAnIiArINC+0YjQuNCx0LrQsCArICInIik7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KICAgINC/0YMu0YHQvtGF0YDQsNC90LjRgtGMLtC/0L7QtNC/0LjRgdCw0YLRjNCc0L3QvtCz0L4oWwogICAgICAgINGB0L7RhdGA0LDQvdC40YLRjNCS0YvQsdGA0LDQvdC90YvQudCc0L7QtNGD0LvRjCwKICAgICAgICDRgdC+0YXRgNCw0L3QuNGC0YwKICAgIF0pOwp9OwoKCgoKCgoKICAgIH0KICAgINC/0YMu0YHQvtGF0YDQsNC90LjRgtGMLtC/0L7QtNC/0LjRgdCw0YLRjCjRgdC+0YXRgNCw0L3QuNGC0YwpOwogICAgCiAgICAvLyDQn9GA0Lgg0LfQsNC/0YPRgdC60LUuCiAgICDRgdC/0LjRgdC+0Lou0LLRi9Cx0YDQsNGC0YwoMCk7Cn0KCmlmICgh0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0LfQsNC/0YDQvtGI0LXQvdCX0LDQsigpKQp7CiAgICDQv9GA0L7QstC10YDQuNGC0YzQn9CjKCk7Cn0=", ], [